ETH Price: $2,963.00 (+0.96%)
Gas: 16 Gwei

Contract

0xC17c30e98541188614dF99239cABD40280810cA3
 

Overview

ETH Balance

16.462987624340320362 ETH

Eth Value

$48,779.76 (@ $2,963.00/ETH)

More Info

Private Name Tags

TokenTracker

EverRise (RISE) (@$0.0001)

Multichain Info

Transaction Hash
Method
Block
From
To
Value
Approve198568282024-05-12 22:09:4716 hrs ago1715551787IN
EverRise: RISE Token
0 ETH0.000149363.00064946
Approve198553652024-05-12 17:15:5921 hrs ago1715534159IN
EverRise: RISE Token
0 ETH0.00017893.58975469
Approve198446052024-05-11 5:08:472 days ago1715404127IN
EverRise: RISE Token
0 ETH0.000145284.47982822
Approve198369842024-05-10 3:34:353 days ago1715312075IN
EverRise: RISE Token
0 ETH0.000149513
Approve198369672024-05-10 3:30:593 days ago1715311859IN
EverRise: RISE Token
0 ETH0.000149513
Approve198369492024-05-10 3:27:113 days ago1715311631IN
EverRise: RISE Token
0 ETH0.000089813
Approve198369442024-05-10 3:26:113 days ago1715311571IN
EverRise: RISE Token
0 ETH0.000149513
Approve198369162024-05-10 3:20:233 days ago1715311223IN
EverRise: RISE Token
0 ETH0.000149513
Approve198337742024-05-09 16:46:473 days ago1715273207IN
EverRise: RISE Token
0 ETH0.000408648.25035996
Approve198285032024-05-08 23:06:354 days ago1715209595IN
EverRise: RISE Token
0 ETH0.000181633.64882021
Approve198221932024-05-08 1:54:235 days ago1715133263IN
EverRise: RISE Token
0 ETH0.000250755.058867
Approve198088512024-05-06 5:06:117 days ago1714971971IN
EverRise: RISE Token
0 ETH0.000195213.9216097
Approve197995512024-05-04 21:53:478 days ago1714859627IN
EverRise: RISE Token
0 ETH0.000222534.48967047
Transfer197959402024-05-04 9:46:479 days ago1714816007IN
EverRise: RISE Token
0 ETH0.000548465.17724333
Approve197897612024-05-03 13:03:1110 days ago1714741391IN
EverRise: RISE Token
0 ETH0.0006063312.23852151
Transfer197860472024-05-03 0:35:3510 days ago1714696535IN
EverRise: RISE Token
0 ETH0.000686276.47808864
Approve197802602024-05-02 5:09:3511 days ago1714626575IN
EverRise: RISE Token
0 ETH0.000220057.42351433
Approve197802552024-05-02 5:08:3511 days ago1714626515IN
EverRise: RISE Token
0 ETH0.000211037.11909339
Approve197802532024-05-02 5:08:1111 days ago1714626491IN
EverRise: RISE Token
0 ETH0.000196836.06708638
Approve197734082024-05-01 6:11:5912 days ago1714543919IN
EverRise: RISE Token
0 ETH0.000241667.4487981
Approve197731622024-05-01 5:22:2312 days ago1714540943IN
EverRise: RISE Token
0 ETH0.00031616.38197698
Approve NFT And ...197727742024-05-01 4:03:5912 days ago1714536239IN
EverRise: RISE Token
0 ETH0.000305965.87111219
Approve197647942024-04-30 1:19:1113 days ago1714439951IN
EverRise: RISE Token
0 ETH0.000236957.9905151
Approve197647942024-04-30 1:19:1113 days ago1714439951IN
EverRise: RISE Token
0 ETH0.000259337.9905151
Approve197625542024-04-29 17:48:2313 days ago1714412903IN
EverRise: RISE Token
0 ETH0.0005877711.80765665
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
198553682024-05-12 17:16:3521 hrs ago1715534195
EverRise: RISE Token
0.05 ETH
198447862024-05-11 5:44:592 days ago1715406299
EverRise: RISE Token
0.0225 ETH
198431572024-05-11 0:16:232 days ago1715386583
EverRise: RISE Token
0.00012296 ETH
198285112024-05-08 23:08:114 days ago1715209691
EverRise: RISE Token
0.05 ETH
198285112024-05-08 23:08:114 days ago1715209691
EverRise: RISE Token
0.15274157 ETH
198128512024-05-06 18:32:596 days ago1715020379
EverRise: RISE Token
0.05 ETH
197896372024-05-03 12:37:5910 days ago1714739879
EverRise: RISE Token
0.004615 ETH
197802632024-05-02 5:10:1111 days ago1714626611
EverRise: RISE Token
0.00465985 ETH
197734102024-05-01 6:12:2312 days ago1714543943
EverRise: RISE Token
0.00478833 ETH
197647952024-04-30 1:19:2313 days ago1714439963
EverRise: RISE Token
0.06512874 ETH
197580062024-04-29 2:32:2314 days ago1714357943
EverRise: RISE Token
0.04 ETH
197506612024-04-28 1:53:2315 days ago1714269203
EverRise: RISE Token
0.04 ETH
197482522024-04-27 17:47:2315 days ago1714240043
EverRise: RISE Token
0.05 ETH
197482512024-04-27 17:47:1115 days ago1714240031
EverRise: RISE Token
0.05 ETH
197458412024-04-27 9:42:1116 days ago1714210931
EverRise: RISE Token
0.04 ETH
197423662024-04-26 22:01:3516 days ago1714168895
EverRise: RISE Token
0.04 ETH
197416772024-04-26 19:42:3516 days ago1714160555
EverRise: RISE Token
0.05 ETH
197401962024-04-26 14:43:3516 days ago1714142615
EverRise: RISE Token
0.00848391 ETH
197090712024-04-22 6:12:4721 days ago1713766367
EverRise: RISE Token
0.04 ETH
197038602024-04-21 12:44:5922 days ago1713703499
EverRise: RISE Token
0.04 ETH
196966492024-04-20 12:33:2323 days ago1713616403
EverRise: RISE Token
0.05 ETH
196966492024-04-20 12:33:2323 days ago1713616403
EverRise: RISE Token
0.16583074 ETH
196883372024-04-19 8:37:1124 days ago1713515831
EverRise: RISE Token
0.05 ETH
196873382024-04-19 5:14:4724 days ago1713503687
EverRise: RISE Token
0.00548288 ETH
196769472024-04-17 18:21:1125 days ago1713378071
EverRise: RISE Token
0.05 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EverRise

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// Copyright (c) 2022 EverRise Pte Ltd. All rights reserved.
// EverRise licenses this file to you under the MIT license.
/*
 The EverRise token is the keystone in the EverRise Ecosytem of dApps
 and the overaching key that unlocks multi-blockchain unification via
 the EverBridge.

 On EverRise token transactions 6% buyback and business development fees are collected:

 * 4% for token Buyback from the market, with bought back tokens directly
      distributed as ve-staking rewards
 * 2% for Business Development (Development, Sustainability and Marketing)
  ________                              _______   __
 /        |                            /       \ /  |
 $$$$$$$$/__     __  ______    ______  $$$$$$$  |$$/   _______   ______  v3.14159265
 $$ |__  /  \   /  |/      \  /      \ $$ |__$$ |/  | /       | /      \
 $$    | $$  \ /$$//$$$$$$  |/$$$$$$  |$$    $$< $$ |/$$$$$$$/ /$$$$$$  |
 $$$$$/   $$  /$$/ $$    $$ |$$ |  $$/ $$$$$$$  |$$ |$$      \ $$    $$ |
 $$ |_____ $$ $$/  $$$$$$$$/ $$ |      $$ |  $$ |$$ | $$$$$$  |$$$$$$$$/
 $$       | $$$/   $$       |$$ |      $$ |  $$ |$$ |/     $$/ $$       |
 $$$$$$$$/   $/     $$$$$$$/ $$/       $$/   $$/ $$/ $$$$$$$/   $$$$$$$/ Magnum opus

 Learn more about EverRise and the EverRise Ecosystem of dApps and
 how our utilities and partners can help protect your investors
 and help your project grow: https://everrise.com
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.13;

error NotContractAddress();             // 0xd9716e43
error NoSameBlockSandwichTrades();      // 0x5fe87cb3
error TransferTooLarge();               // 0x1b97a875
error AmountLargerThanUnlockedAmount(); // 0x170abf7c
error TokenNotStarted();                // 0xd87a63e0
error TokenAlreadyStarted();            // 0xe529091f
error SandwichTradesAreDisallowed();    // 0xe069ee1d
error AmountLargerThanAvailable();      // 0xbb296109
error StakeCanOnlyBeExtended();         // 0x73f7040a
error NotStakeContractRequesting();     // 0x2ace6531
error NotEnoughToCoverStakeFee();       // 0x627554ed
error NotZeroAddress();                 // 0x66385fa3
error CallerNotApproved();              // 0x4014f1a5
error InvalidAddress();                 // 0xe6c4247b
error CallerNotOwner();                 // 0x5cd83192
error NotZero();                        // 0x0295aa98
error LiquidityIsLocked();              // 0x6bac637f
error LiquidityAddOwnerOnly();          // 0x878d6363
error Overflow();                       // 0x35278d12
error WalletLocked();                   // 0xd550ed24
error LockTimeTooLong();                // 0xb660e89a
error LockTimeTooShort();               // 0x6badcecf
error NotLocked();                      // 0x1834e265
error AmountMustBeGreaterThanZero();    // 0x5e85ae73
error Expired();                        // 0x203d82d8
error InvalidSignature();               // 0x8baa579f
error AmountLargerThanAllowance();      // 0x9b144c57
error AmountOutOfRange();               // 0xc64200e9
error Unlocked();                       // 0x19aad371
error FailedEthSend();                  // 0xb5747cc7

// File: EverRise-v3/Interfaces/IERC2612-Permit.sol

pragma solidity 0.8.13;
interface IERC2612 {
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;
    function nonces(address owner) external view returns (uint256);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

// File: EverRise-v3/Interfaces/IERC173-Ownable.sol

interface IOwnable {
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    function owner() external view returns (address);
    function transferOwnership(address newOwner) external;
}

// File: EverRise-v3/Abstract/Context.sol

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


// File: EverRise-v3/Interfaces/IERC721-Nft.sol

interface IERC721 /* is ERC165 */ {
    event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);
    event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);
    event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);
    function balanceOf(address _owner) external view returns (uint256);
    function ownerOf(uint256 _tokenId) external view returns (address);
    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes calldata data) external payable;
    function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable;
    function transferFrom(address _from, address _to, uint256 _tokenId) external payable;
    function approve(address _approved, uint256 _tokenId) external payable;
    function setApprovalForAll(address _operator, bool _approved) external;
    function getApproved(uint256 _tokenId) external view returns (address);
    function isApprovedForAll(address _owner, address _operator) external view returns (bool);
}

// File: EverRise-v3/Interfaces/InftEverRise.sol

struct StakingDetails {
    uint96 initialTokenAmount;    // Max 79 Bn tokens
    uint96 withdrawnAmount;       // Max 79 Bn tokens
    uint48 depositTime;           // 8 M years
    uint8 numOfMonths;            // Max 256 month period
    uint8 achievementClaimed;
    // 256 bits, 20000 gwei gas
    address stakerAddress;        // 160 bits (96 bits remaining)
    uint32 nftId;                 // Max 4 Bn nfts issued
    uint32 lookupIndex;           // Max 4 Bn active stakes
    uint24 stakerIndex;           // Max 16 M active stakes per wallet
    uint8 isActive;
    // 256 bits, 20000 gwei gas
} // Total 512 bits, 40000 gwei gas

interface InftEverRise is IERC721 {
    function voteEscrowedBalance(address account) external view returns (uint256);
    function unclaimedRewardsBalance(address account) external view returns (uint256);
    function totalAmountEscrowed() external view returns (uint256);
    function totalAmountVoteEscrowed() external view returns (uint256);
    function totalRewardsDistributed() external view returns (uint256);
    function totalRewardsUnclaimed() external view returns (uint256);

    function createRewards(uint256 tAmount) external;

    function getNftData(uint256 id) external view returns (StakingDetails memory);
    function enterStaking(address fromAddress, uint96 amount, uint8 numOfMonths) external returns (uint32 nftId);
    function leaveStaking(address fromAddress, uint256 id, bool overrideNotClaimed) external returns (uint96 amount);
    function earlyWithdraw(address fromAddress, uint256 id, uint96 amount) external returns (uint32 newNftId, uint96 penaltyAmount);
    function withdraw(address fromAddress, uint256 id, uint96 amount, bool overrideNotClaimed) external returns (uint32 newNftId);
    function bridgeStakeNftOut(address fromAddress, uint256 id) external returns (uint96 amount);
    function bridgeOrAirdropStakeNftIn(address toAddress, uint96 depositAmount, uint8 numOfMonths, uint48 depositTime, uint96 withdrawnAmount, uint96 rewards, bool achievementClaimed) external returns (uint32 nftId);
    function addStaker(address staker, uint256 nftId) external;
    function removeStaker(address staker, uint256 nftId) external;
    function reissueStakeNft(address staker, uint256 oldNftId, uint256 newNftId) external;
    function increaseStake(address staker, uint256 nftId, uint96 amount) external returns (uint32 newNftId, uint96 original, uint8 numOfMonths);
    function splitStake(uint256 id, uint96 amount) external payable returns (uint32 newNftId0, uint32 newNftId1);
    function claimAchievement(address staker, uint256 nftId) external returns (uint32 newNftId);
    function stakeCreateCost() external view returns (uint256);
    function approve(address owner, address _operator, uint256 nftId) external;
}
// File: EverRise-v3/Interfaces/IEverRiseWallet.sol

struct ApprovalChecks {
    // Prevent permits being reused (IERC2612)
    uint64 nonce;
    // Allow revoke all spenders/operators approvals in single txn
    uint32 nftCheck;
    uint32 tokenCheck;
    // Allow auto timeout on approvals
    uint16 autoRevokeNftHours;
    uint16 autoRevokeTokenHours;
    // Allow full wallet locking of all transfers
    uint48 unlockTimestamp;
}

struct Allowance {
    uint128 tokenAmount;
    uint32 nftCheck;
    uint32 tokenCheck;
    uint48 timestamp;
    uint8 nftApproval;
    uint8 tokenApproval;
}

interface IEverRiseWallet {
    event RevokeAllApprovals(address indexed account, bool tokens, bool nfts);
    event SetApprovalAutoTimeout(address indexed account, uint16 tokensHrs, uint16 nftsHrs);
    event LockWallet(address indexed account, address altAccount, uint256 length);
    event LockWalletExtend(address indexed account, uint256 length);
}
// File: EverRise-v3/Interfaces/IUniswap.sol

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint256);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint256) external view returns (address pair);
    function allPairsLength() external view returns (uint256);
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Burn(address indexed sender, uint256 amount0, uint256 amount1, address indexed to);
    event Swap(address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to);
    event Sync(uint112 reserve0, uint112 reserve1);
    function approve(address spender, uint256 value) external returns (bool);
    function transfer(address to, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
    function burn(address to) external returns (uint256 amount0, uint256 amount1);
    function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
    function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r,bytes32 s) external;
    function totalSupply() external view returns (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function nonces(address owner) external view returns (uint256);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint256);
    function price1CumulativeLast() external view returns (uint256);
    function kLast() external view returns (uint256);
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function MINIMUM_LIQUIDITY() external pure returns (uint256);
}

interface IUniswapV2Router01 {
    function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
    function swapETHForExactTokens(uint256 amountOut, address[] calldata path, address to, uint256 deadline) external payable returns (uint256[] memory amounts);
    function swapExactETHForTokens(uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external payable returns (uint256[] memory amounts);
    function addLiquidity(address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);
    function removeLiquidity(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) external returns (uint256 amountA, uint256 amountB);
    function removeLiquidityETH(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external returns (uint256 amountToken, uint256 amountETH);
    function removeLiquidityWithPermit(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external returns (uint256 amountA, uint256 amountB);
    function removeLiquidityETHWithPermit(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external returns (uint256 amountToken, uint256 amountETH);
    function swapExactTokensForTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external returns (uint256[] memory amounts);
    function swapTokensForExactTokens(uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline) external returns (uint256[] memory amounts);
    function swapTokensForExactETH(uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline) external returns (uint256[] memory amounts);
    function swapExactTokensForETH(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external returns (uint256[] memory amounts);
    function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts);
    function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts);
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) external pure returns (uint256 amountB);
    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut) external pure returns (uint256 amountOut);
    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut) external pure returns (uint256 amountIn);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external returns (uint256 amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) external returns (uint256 amountETH);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(uint256 amountOutMin, address[] calldata path, address to, uint256 deadline) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external;
}
// File: EverRise-v3/Abstract/ErrorNotZeroAddress.sol

contract Ownable is IOwnable, Context {
    address public owner;

    function _onlyOwner() private view {
        if (owner != _msgSender()) revert CallerNotOwner();
    }

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

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

    // Allow contract ownership and access to contract onlyOwner functions
    // to be locked using EverOwn with control gated by community vote.
    //
    // EverRise ($RISE) stakers become voting members of the
    // decentralized autonomous organization (DAO) that controls access
    // to the token contract via the EverRise Ecosystem dApp EverOwn
    function transferOwnership(address newOwner) external virtual onlyOwner {
        if (newOwner == address(0)) revert NotZeroAddress();

        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }
}
// File: EverRise-v3/Abstract/EverRiseRoles.sol


abstract contract EverRiseRoles is Ownable {
    mapping (Role => mapping (address => bool)) public roles;

    enum Role 
    { 
        NotValidRole, 
        BuyBack, 
        NftBridge,
        Limits, 
        Liquidity, 
        Fees,
        Exchanges,
        CrossChainBuyback,
        Upgrader
    }

    event ControlAdded(address indexed controller, Role indexed role);
    event ControlRemoved(address indexed controller, Role indexed role);
    
    function _onlyController(Role role) private view {
        if (!roles[role][_msgSender()]) revert CallerNotApproved();
    }
    
    modifier onlyController(Role role) {
        _onlyController(role);
        _;
    }

    constructor() {
        address deployer = _msgSender();
        ownerRoles(deployer, true);
    }
    
    function transferOwnership(address newOwner) override external onlyOwner {
        if (newOwner == address(0)) revert NotZeroAddress();

        address previousOwner = owner;
        ownerRoles(previousOwner, false);
        ownerRoles(newOwner, true);

        owner = newOwner;

        emit OwnershipTransferred(previousOwner, newOwner);
    }

    function ownerRoles(address _owner, bool enable) private {
        roles[Role.BuyBack][_owner] = enable;
        roles[Role.NftBridge][_owner] = enable;
        roles[Role.Limits][_owner] = enable;
        roles[Role.Liquidity][_owner] = enable;
        roles[Role.Fees][_owner] = enable;
        roles[Role.Exchanges][_owner] = enable;
        roles[Role.CrossChainBuyback][_owner] = enable;
        roles[Role.Upgrader][_owner] = enable;
    }

    function addControlRole(address newController, Role role) external onlyOwner
    {
        if (role == Role.NotValidRole) revert NotZero();
        if (newController == address(0)) revert NotZeroAddress();

        roles[role][newController] = true;

        emit ControlAdded(newController, role);
    }

    function removeControlRole(address oldController, Role role) external onlyOwner
    {
        if (role == Role.NotValidRole) revert NotZero();
        if (oldController == address(0)) revert NotZeroAddress();

        roles[role][oldController] = false;

        emit ControlRemoved(oldController, role);
    }
}
// File: EverRise-v3/Abstract/EverRiseLib.sol

library EverRiseAddressNumberLib {
    function toUint96(uint256 value) internal pure returns (uint96) {
        if (value > type(uint96).max) revert Overflow();
        return uint96(value);
    }

    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    bytes private constant token0Selector =
        abi.encodeWithSelector(IUniswapV2Pair.token0.selector);
    bytes private constant token1Selector =
        abi.encodeWithSelector(IUniswapV2Pair.token1.selector);

    function pairTokens(address pair) internal view returns (address token0, address token1) {
        // Do not check if pair is not a contract to avoid warning in txn log
        if (!isContract(pair)) return (address(0), address(0)); 

        return (tokenLookup(pair, token0Selector), tokenLookup(pair, token1Selector));
    }

    function tokenLookup(address pair, bytes memory selector)
        private
        view
        returns (address)
    {
        (bool success, bytes memory data) = pair.staticcall(selector);

        if (success && data.length >= 32) {
            return abi.decode(data, (address));
        }
        
        return address(0);
    }

}

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

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

    function swapETHForTokensNoFee(
        IUniswapV2Router02 uniswapV2Router,
        address toAddress, 
        uint256 amount
    ) external {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

        // make the swap
        uniswapV2Router.swapExactETHForTokens{
            value: amount
        }(
            0, // accept any amount of Tokens
            path,
            toAddress, // The contract
            block.timestamp
        );
    }
}
// File: EverRise-v3/Interfaces/IEverDrop.sol

interface IEverDrop {
    function mirgateV1V2Holder(address holder, uint96 amount) external returns(bool);
    function mirgateV2Staker(address toAddress, uint96 rewards, uint96 depositTokens, uint8 numOfMonths, uint48 depositTime, uint96 withdrawnAmount) external returns(uint256 nftId);
}
// File: EverRise-v3/Interfaces/IERC20-Token.sol

interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    function transferFromWithPermit(address sender, address recipient, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external returns (bool);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}
// File: EverRise-v3/Abstract/EverRiseWallet.sol

abstract contract EverRiseWallet is Context, IERC2612, IEverRiseWallet, IERC20Metadata {
    using EverRiseAddressNumberLib for address;

    // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32 public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;
    // keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)");
    bytes32 public constant DOMAIN_TYPEHASH = 0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f;

    mapping (address => ApprovalChecks) internal _approvals;
    mapping (address => mapping (address => Allowance)) public allowances;
    //Lock related fields
    mapping(address => address) private _userUnlocks;

    function _walletLock(address fromAddress) internal view {
        if (_isWalletLocked(fromAddress)) revert WalletLocked();
    }

    modifier walletLock(address fromAddress) {
        _walletLock(fromAddress);
        _;
    }
    
    function _isWalletLocked(address fromAddress) internal view returns (bool) {
        return _approvals[fromAddress].unlockTimestamp > block.timestamp;
    }

    function DOMAIN_SEPARATOR() public view returns (bytes32) {
        // Unique DOMAIN_SEPARATOR per user nbased on their current token check
        uint32 tokenCheck = _approvals[_msgSender()].tokenCheck;

        return keccak256(
            abi.encode(
                DOMAIN_TYPEHASH,
                keccak256(bytes(name())),
                keccak256(abi.encodePacked(tokenCheck)),
                block.chainid,
                address(this)
            )
        );
    }

    function name() public virtual view returns (string memory);

    function nonces(address owner) external view returns (uint256) {
        return _approvals[owner].nonce;
    }

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function _setApprovalForAll(address owner, address operator, bool approved) internal {
        if (operator == address(0)) revert NotZeroAddress();

        Allowance storage _allowance = allowances[owner][operator];
        ApprovalChecks storage _approval = _approvals[owner];
        if (approved) {

            uint16 autoRevokeNftHours = _approval.autoRevokeNftHours;
            uint48 timestamp = autoRevokeNftHours == 0 ? 
                type(uint48).max : // Don't timeout approval
                uint48(block.timestamp) + autoRevokeNftHours * 1 hours; // Timeout after user chosen period

            _allowance.nftCheck = _approval.nftCheck;
            _allowance.timestamp = timestamp;
            _allowance.nftApproval = 1;
        } else {
            unchecked {
                // nftCheck gets incremented, so set one behind approval
                _allowance.nftCheck = _approval.nftCheck - 1;
            }
            _allowance.nftApproval = 0;
        }
    }

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public {
        if (spender == address(0)) revert NotZeroAddress();
        if (deadline < block.timestamp) revert Expired();

        ApprovalChecks storage _approval = _approvals[owner];
        uint64 nonce = _approval.nonce;

        bytes32 digest = keccak256(
            abi.encodePacked(
                "\x19\x01",
                DOMAIN_SEPARATOR(),
                keccak256(
                    abi.encode(
                        PERMIT_TYPEHASH,
                        owner,
                        spender,
                        value,
                        nonce,
                        deadline
                    )
                )
            )
        );

        unchecked {
            // Nonces can wrap
            ++nonce;
        }

        _approval.nonce = nonce;
        
        if (v < 27) {
            v += 27;
        } else if (v > 30) {
            digest = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", digest));
        }

        address recoveredAddress = ecrecover(digest, v, r, s);
        if (recoveredAddress == address(0) || recoveredAddress != owner) revert InvalidSignature();
        
        _approve(owner, spender, value, true);
    }

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

    function _approve(
        address owner,
        address spender,
        uint256 amount,
        bool extend
    ) internal returns (bool) {
        if (owner == address(0)) revert NotZeroAddress();
        if (spender == address(0)) revert NotZeroAddress();

        if (amount > type(uint128).max) amount = type(uint128).max;

        ApprovalChecks storage _approval = _approvals[owner];
        Allowance storage _allowance = allowances[owner][spender];

        _allowance.tokenAmount = uint128(amount);
        _allowance.tokenCheck = _approval.tokenCheck;
        if (extend) {
            uint48 autoRevokeTokenHours = _approval.autoRevokeTokenHours;
            // Time extention approval
            _allowance.timestamp = autoRevokeTokenHours == 0 ? 
                type(uint48).max : // Don't timeout approval
                uint48(block.timestamp) + autoRevokeTokenHours * 1 hours; // Timeout after user chosen period
        }

        _allowance.tokenApproval = 1;
        
        emit Approval(owner, spender, amount);
        return true;
    }

    function allowance(address owner, address spender) public view returns (uint256) {
        uint32 tokenCheck = _approvals[owner].tokenCheck;
        Allowance storage allowanceSettings = allowances[owner][spender];

        if (tokenCheck != allowanceSettings.tokenCheck ||
            block.timestamp > allowanceSettings.timestamp ||
            allowanceSettings.tokenApproval != 1)
        {
            return 0;
        }

        return allowanceSettings.tokenAmount;
    }

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {

        _transfer(sender, recipient, amount);

        uint256 _allowance = allowance(sender, _msgSender());
        if (amount > _allowance) revert AmountLargerThanAllowance();
        unchecked {
            _allowance -= amount;
        }
        _approve(sender, _msgSender(), _allowance, false);
        return true;
    }

    function transferFromWithPermit(
        address sender,
        address recipient,
        uint256 amount,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (bool) {
        permit(sender, _msgSender(), amount, deadline, v, r, s);

        return transferFrom(sender, recipient, amount);
    }

    function lockTokensAndNfts(address altAccount, uint48 length) external walletLock(_msgSender()) {
        if (altAccount == address(0)) revert NotZeroAddress();
        if (length / 1 days > 10 * 365 days) revert LockTimeTooLong();

        _approvals[_msgSender()].unlockTimestamp = uint48(block.timestamp) + length;
        _userUnlocks[_msgSender()] = altAccount;

        emit LockWallet(_msgSender(), altAccount, length);
    }

    function extendLockTokensAndNfts(uint48 length) external {
        if (length / 1 days > 10 * 365 days) revert LockTimeTooLong();
        uint48 currentLock = _approvals[_msgSender()].unlockTimestamp;

        if (currentLock < block.timestamp) revert Unlocked();

        uint48 newLock = uint48(block.timestamp) + length;
        if (currentLock > newLock) revert LockTimeTooShort();
        _approvals[_msgSender()].unlockTimestamp = newLock;

        emit LockWalletExtend(_msgSender(), length);
    }

    function unlockTokensAndNfts(address actualAccount) external {
        if (_userUnlocks[actualAccount] != _msgSender()) revert CallerNotApproved();
        uint48 currentLock = _approvals[_msgSender()].unlockTimestamp;

        if (currentLock < block.timestamp) revert Unlocked();

        _approvals[_msgSender()].unlockTimestamp = 1;
    }

    function revokeApprovals(bool tokens, bool nfts) external {
        address account = _msgSender();
        ApprovalChecks storage _approval = _approvals[account];

        unchecked {
            // Nonces can wrap
            if (nfts) {
                ++_approval.nftCheck;
            }
            if (tokens) {
                ++_approval.tokenCheck;
            }
        }

        emit RevokeAllApprovals(account, tokens, nfts);
    }

    function setAutoTimeout(uint16 tokensHrs, uint16 nftsHrs) external {
        address account = _msgSender();
        ApprovalChecks storage _approval = _approvals[account];

        _approval.autoRevokeNftHours = nftsHrs;
        _approval.autoRevokeTokenHours = tokensHrs;

        emit SetApprovalAutoTimeout(account, tokensHrs, nftsHrs);
    }

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function _isApprovedForAll(address account, address operator) internal view returns (bool) {
        uint32 nftCheck = _approvals[account].nftCheck;
        Allowance storage _allowance = allowances[account][operator];

        if (nftCheck != _allowance.nftCheck ||
            block.timestamp > _allowance.timestamp ||
            _allowance.nftApproval != 1)
        {
            return false;
        }

        return true;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual;
}
// File: EverRise-v3/Interfaces/IEverRise.sol

interface IEverRise is IERC20Metadata {
    function totalBuyVolume() external view returns (uint256);
    function totalSellVolume() external view returns (uint256);
    function holders() external view returns (uint256);
    function uniswapV2Pair() external view returns (address);
    function transferStake(address fromAddress, address toAddress, uint96 amountToTransfer) external;
    function isWalletLocked(address fromAddress) external view returns (bool);
    function setApprovalForAll(address fromAddress, address operator, bool approved) external;
    function isApprovedForAll(address account, address operator) external view returns (bool);
    function isExcludedFromFee(address account) external view returns (bool);

    function approvals(address account) external view returns (ApprovalChecks memory);
}
// File: EverRise-v3/Abstract/EverRiseConfigurable.sol

abstract contract EverRiseConfigurable is EverRiseRoles, EverRiseWallet, IEverRise {
    using EverRiseAddressNumberLib for uint256;

    event BuyBackEnabledUpdated(bool enabled);
    event SwapEnabledUpdated(bool enabled);

    event ExcludeFromFeeUpdated(address account);
    event IncludeInFeeUpdated(address account);

    event LiquidityFeeUpdated(uint256 newValue);
    event TransactionCapUpdated(uint256 newValue);
    event MinStakeSizeUpdated(uint256 newValue);

    event BusinessDevelopmentDivisorUpdated(uint256 newValue);
    event MinTokensBeforeSwapUpdated(uint256 newValue);
    event BuybackMinAvailabilityUpdated(uint256 newValue);
    event MinBuybackAmountUpdated(uint256 newvalue);
    event MaxBuybackAmountUpdated(uint256 newvalue);

    event BuybackUpperLimitUpdated(uint256 newValue);
    event BuyBackTriggerTokenLimitUpdated(uint256 newValue);
    event BuybackBlocksUpdated(uint256 newValue);

    event BridgeVaultAddressUpdated(address indexed contractAddress);
    event BurnAddressUpdated(address indexed deadAddress);
    event OffChainBalanceExcluded(bool enable);
    event RouterAddressUpdated(address indexed newAddress);
    event BusinessDevelopmentAddressUpdated(address indexed newAddress);
    event StakingAddressUpdated(address indexed contractAddress);

    event LiquidityLocked(bool isLocked);
    event AutoBurnEnabled(bool enabled);
    event BurnableTokensZeroed();

    event ExchangeHotWalletAdded(address indexed exchangeHotWallet);
    event ExchangeHotWalletRemoved(address indexed exchangeHotWallet);
    event BuyBackTriggered();
    event BuyBackCrossChainTriggered();

    address payable public businessDevelopmentAddress =
        payable(0x24D8DAbebD6c0d5CcC88EC40D95Bf8eB64F0CF9E); // Business Development Address
    address public everBridgeVault;
    address public burnAddress = 0x000000000000000000000000000000000000dEaD;
    
    mapping (address => bool) internal _isExcludedFromFee;
    mapping (address => bool) internal _exchangeHotWallet;

    uint8 public constant decimals = 18;
    // Golden supply
    uint96 internal immutable _totalSupply = uint96(7_1_618_033_988 * 10**decimals);

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

    // Fee and max txn are set by setTradingEnabled
    // to allow upgrading balances to arrange their wallets
    // and stake their assets before trading start

    uint256 public totalBuyVolume;
    uint256 public totalSellVolume;
    uint256 public transactionCap;
    uint96 public liquidityFee = 6;

    uint256 public businessDevelopmentDivisor = 2;

    uint96 internal _minimumTokensBeforeSwap = uint96(5 * 10**6 * 10**decimals);
    uint256 internal _buyBackUpperLimit = 10 * 10**18;
    uint256 internal _buyBackTriggerTokenLimit = 1 * 10**6 * 10**decimals;
    uint256 internal _buyBackMinAvailability = 1 * 10**18; //1 BNB

    uint256 internal _nextBuybackAmount;
    uint256 internal _latestBuybackBlock;
    uint256 internal _numberOfBlocks = 1000;
    uint256 internal _minBuybackAmount = 1 * 10**18 / (10**1);
    uint256 internal _maxBuybackAmount = 1 * 10**18;

    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.
    uint256 constant _FALSE = 1;
    uint256 constant _TRUE = 2;

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to modifiers will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 internal _inSwap = _FALSE;
    uint256 internal _swapEnabled = _FALSE;
    uint256 internal _buyBackEnabled = _FALSE;
    uint256 internal _liquidityLocked = _TRUE;
    uint256 internal _offchainBalanceExcluded = _FALSE;
    uint256 internal _autoBurn = _FALSE;
    uint256 internal _burnableTokens = 1;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    InftEverRise public stakeToken;

    function swapEnabled() external view returns (bool) {
        return _swapEnabled == _TRUE;
    }
    function offchainBalanceExcluded() external view returns (bool) {
        return _offchainBalanceExcluded == _TRUE;
    }
    function buyBackEnabled() external view returns (bool) {
        return _buyBackEnabled == _TRUE;
    }
    function liquidityLocked() external view returns (bool) {
        return _liquidityLocked == _TRUE;
    }
    function autoBurn() external view returns (bool) {
        return _autoBurn == _TRUE;
    }

    function setBurnableTokensZero() external onlyController(Role.Liquidity)  {
        // set to 1 rather than zero to save on gas
        _burnableTokens = 1;
        emit BurnableTokensZeroed();
    }
    function setBurnAddress(address _burnAddress) external onlyController(Role.Liquidity)  {
        // May be bridgable burn (so only send to actual burn address on one chain)
        burnAddress = _burnAddress;
        emit BurnAddressUpdated(_burnAddress);
    }

    function setOffchainBalanceExcluded(bool _enabled) external onlyOwner {
        _offchainBalanceExcluded = _enabled ? _TRUE : _FALSE;
        emit OffChainBalanceExcluded(_enabled);
    }

    function setLiquidityLock(bool _enabled) public onlyController(Role.Liquidity) {
        _liquidityLocked = _enabled ? _TRUE : _FALSE;
        emit LiquidityLocked(_enabled);
    }

    function setAutoBurn(bool _enabled) external onlyController(Role.Liquidity) {
        _autoBurn = _enabled ? _TRUE : _FALSE;
        emit AutoBurnEnabled(_enabled);
    }

    function excludeFromFee(address account) public onlyController(Role.Fees) {
        if (_isExcludedFromFee[account]) revert InvalidAddress();
        
        _isExcludedFromFee[account] = true;
        emit ExcludeFromFeeUpdated(account);
    }

    function addExchangeHotWallet(address account) external onlyController(Role.Exchanges) {
        _exchangeHotWallet[account] = true;
        emit ExchangeHotWalletAdded(account);
    }

    function removeExchangeHotWallet(address account) external onlyController(Role.Exchanges) {
        _exchangeHotWallet[account] = false;
        emit ExchangeHotWalletRemoved(account);
    }

    function isExchangeHotWallet(address account) public view returns(bool) {
        return _exchangeHotWallet[account];
    }

    function includeInFee(address account) external onlyController(Role.Fees) {
        if (!_isExcludedFromFee[account]) revert InvalidAddress();

        _isExcludedFromFee[account] = false;
        emit IncludeInFeeUpdated(account);
    }

    function setTransactionCap(uint256 txAmount) external onlyController(Role.Limits) {
        // Never under 0.001%
        if (txAmount < _totalSupply / 100_000) revert AmountOutOfRange();

        transactionCap = txAmount;
        emit TransactionCapUpdated(txAmount);
    }

    function setNumberOfBlocksForBuyback(uint256 value) external onlyController(Role.BuyBack){
        if (value < 100 || value > 1_000_000) revert AmountOutOfRange();
        _numberOfBlocks = value;
        emit BuybackBlocksUpdated(value);
    }

    function setBusinessDevelopmentDivisor(uint256 divisor) external onlyController(Role.Liquidity) {
        if (divisor > liquidityFee) revert AmountOutOfRange();

        businessDevelopmentDivisor = divisor;
        emit BusinessDevelopmentDivisorUpdated(divisor);
    }

    function setNumTokensSellToAddToLiquidity(uint96 minimumTokensBeforeSwap)
        external
        onlyController(Role.Liquidity)
    {
        if (minimumTokensBeforeSwap > 1_000_000_000) revert AmountOutOfRange();

        _minimumTokensBeforeSwap = uint96(minimumTokensBeforeSwap * (10**uint256(decimals)));
        emit MinTokensBeforeSwapUpdated(minimumTokensBeforeSwap);
    }

    function setBuybackUpperLimit(uint256 buyBackLimit, uint256 numOfDecimals)
        external
        onlyController(Role.BuyBack)
    {
        // Catch typos, if decimals are pre-added
        if (buyBackLimit > 1_000_000_000) revert AmountOutOfRange();

        _buyBackUpperLimit = buyBackLimit * (10**18) / (10**numOfDecimals);
        emit BuybackUpperLimitUpdated(_buyBackUpperLimit);
    }

    function setMinBuybackAmount(uint256 minAmount, uint256 numOfDecimals)
        external
        onlyController(Role.BuyBack)
    {
        // Catch typos, if decimals are pre-added
        if (minAmount > 1_000) revert AmountOutOfRange();

        _minBuybackAmount = minAmount * (10**18) / (10**numOfDecimals);
        emit MinBuybackAmountUpdated(minAmount);
    }

    function setMaxBuybackAmountUpdated(uint256 maxAmount, uint256 numOfDecimals)
        external
        onlyController(Role.BuyBack)
    {
        // Catch typos, if decimals are pre-added
        if (maxAmount > 1_000_000) revert AmountOutOfRange();

        _maxBuybackAmount = maxAmount * (10**18) / (10**numOfDecimals);
        emit MaxBuybackAmountUpdated(maxAmount);
    }

    function setBuybackTriggerTokenLimit(uint256 buyBackTriggerLimit)
        external
        onlyController(Role.BuyBack)
    {
        if (buyBackTriggerLimit > 100_000_000) revert AmountOutOfRange();
        
        _buyBackTriggerTokenLimit = buyBackTriggerLimit * (10**uint256(decimals));
        emit BuyBackTriggerTokenLimitUpdated(_buyBackTriggerTokenLimit);
    }

    function setBuybackMinAvailability(uint256 amount, uint256 numOfDecimals)
        external
        onlyController(Role.BuyBack)
    {
        if (amount > 100_000) revert AmountOutOfRange();

        _buyBackMinAvailability = amount * (10**18) / (10**numOfDecimals);
        emit BuybackMinAvailabilityUpdated(_buyBackMinAvailability);
    }

    function setBuyBackEnabled(bool _enabled) external onlyController(Role.BuyBack) {
        _buyBackEnabled = _enabled ? _TRUE : _FALSE;
        emit BuyBackEnabledUpdated(_enabled);
    }

    function setBusinessDevelopmentAddress(address newAddress)
        external
        onlyController(Role.Liquidity)
    {
        if (newAddress == address(0)) revert NotZeroAddress();

        businessDevelopmentAddress = payable(newAddress);
        emit BusinessDevelopmentAddressUpdated(newAddress);
    }

    function setEverBridgeVaultAddress(address contractAddress)
        external
        onlyOwner
    {
        
        excludeFromFee(contractAddress);
        
        everBridgeVault = contractAddress;
        emit BridgeVaultAddressUpdated(contractAddress);
    }

    function setStakingAddress(address contractAddress) external onlyOwner {
        stakeToken = InftEverRise(contractAddress);

        excludeFromFee(contractAddress);

        emit StakingAddressUpdated(contractAddress);
    }

    function setRouterAddress(address newAddress) external onlyController(Role.Liquidity) {
        if (newAddress == address(0)) revert NotZeroAddress();

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newAddress); 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(
            address(this),
            _uniswapV2Router.WETH()
        );

        uniswapV2Router = _uniswapV2Router;
        emit RouterAddressUpdated(newAddress);
    }

    function isExcludedFromFee(address account) external view returns (bool) {
        return _isExcludedFromFee[account];
    }

    function setSwapEnabled(bool _enabled) external onlyOwner {
        _swapEnabled = _enabled ? _TRUE : _FALSE;
        emit SwapEnabledUpdated(_enabled);
    }

    function hasTokenStarted() public view returns (bool) {
        return transactionCap > 0;
    }

    function setLiquidityFeePercent(uint96 liquidityFeeRate) external onlyController(Role.Liquidity) {
        if (liquidityFeeRate > 10) revert AmountOutOfRange();
        liquidityFee = liquidityFeeRate;
        emit LiquidityFeeUpdated(liquidityFeeRate);
    }
}
// File: EverRise-v3/EverRise.sol

// Copyright (c) 2022 EverRise Pte Ltd. All rights reserved.
// EverRise licenses this file to you under the MIT license.
/*
 The EverRise token is the keystone in the EverRise Ecosytem of dApps
 and the overaching key that unlocks multi-blockchain unification via
 the EverBridge.

 On EverRise token txns 6% buyback and business development fees are collected
 * 4% for token Buyback from the market, 
     with bought back tokens directly distributed as ve-staking rewards
 * 2% for Business Development (Development, Sustainability and Marketing)

  ________                              _______   __
 /        |                            /       \ /  |
 $$$$$$$$/__     __  ______    ______  $$$$$$$  |$$/   _______   ______  v3.14159265
 $$ |__  /  \   /  |/      \  /      \ $$ |__$$ |/  | /       | /      \
 $$    | $$  \ /$$//$$$$$$  |/$$$$$$  |$$    $$< $$ |/$$$$$$$/ /$$$$$$  |
 $$$$$/   $$  /$$/ $$    $$ |$$ |  $$/ $$$$$$$  |$$ |$$      \ $$    $$ |
 $$ |_____ $$ $$/  $$$$$$$$/ $$ |      $$ |  $$ |$$ | $$$$$$  |$$$$$$$$/
 $$       | $$$/   $$       |$$ |      $$ |  $$ |$$ |/     $$/ $$       |
 $$$$$$$$/   $/     $$$$$$$/ $$/       $$/   $$/ $$/ $$$$$$$/   $$$$$$$/

 Learn more about EverRise and the EverRise Ecosystem of dApps and
 how our utilities and partners can help protect your investors
 and help your project grow: https://www.everrise.com
*/

// 2^96 is 79 * 10**10 * 10**18
struct TransferDetails {
    uint96 balance0;
    address to;

    uint96 balance1;
    address origin;

    uint32 blockNumber;
}

contract EverRise is EverRiseConfigurable, IEverDrop {
    using EverRiseAddressNumberLib for address;
    using EverRiseAddressNumberLib for uint256;

    event BuybackTokensWithETH(uint256 amountIn, uint256 amountOut);
    event ConvertTokensForETH(uint256 amountIn, uint256 amountOut);

    event TokenStarted();
    event RewardStakers(uint256 amount);
    event AutoBurn(uint256 amount);

    event StakingIncreased(address indexed from, uint256 amount, uint8 numberOfmonths);
    event StakingDecreased(address indexed from, uint256 amount);

    event RiseBridgedIn(address indexed contractAddress, address indexed to, uint256 amount);
    event RiseBridgedOut(address indexed contractAddress, address indexed from, uint256 amount);
    event NftBridgedIn(address indexed contractAddress, address indexed operator, address indexed to, uint256 id, uint256 value);
    event NftBridgedOut(address indexed contractAddress, address indexed operator, address indexed from, uint256 id, uint256 value);
    event TransferExternalTokens(address indexed tokenAddress, address indexed to, uint256 count);

    // Holder count
    uint256 private _holders;
    // Balance and locked (staked) balance
    mapping (address => uint96) private _tOwned;
    mapping (address => uint96) private _amountLocked;

    // Tracking for protections against sandwich trades
    // and rogue LP pairs
    mapping (address => uint256) private _lastTrade;
    TransferDetails private _lastTransfer;

    string public constant symbol = "RISE";
    function name() public override (EverRiseWallet, IERC20Metadata) pure returns (string memory) {
        return "EverRise";
    }

    modifier lockTheSwap() {
        require(_inSwap != _TRUE);
        _inSwap = _TRUE;
        _;
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _inSwap = _FALSE;
    }

    constructor(address routerAddress) {
        if (routerAddress == address(0)) revert NotZeroAddress();

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(routerAddress);
        // IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E); //Pancakeswap router mainnet - BSC
        // IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0xD99D1c33F9fC3444f8101754aBC46c52416550D1); //Testnet
        // IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0xa5e0829caced8ffdd4de3c43696c57f7d7a678ff); //Quickswap V2 router mainnet - Polygon
        // IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506); //Sushiswap router mainnet - Polygon
        // IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //Uniswap V2 router mainnet - ETH
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
  
        _isExcludedFromFee[owner] = true;
        _isExcludedFromFee[address(this)] = true;

        // Put all tokens in contract so we can airdrop
        _tOwned[address(this)] = _totalSupply;
        emit Transfer(address(0), address(this), _totalSupply);

        _holders = 1;
    }

    // Function to receive ETH when msg.data is be empty
    receive() external payable {}

    // Balances
    function isWalletLocked(address fromAddress) override (IEverRise) external view returns (bool) {
        return _isWalletLocked(fromAddress);
    }

    function holders() external view returns (uint256) {
        return _holders;
    }

    function getAmountLocked(address account) external view returns (uint256) {
        return _amountLocked[account];
    }

    function _balanceOf(address account) private view returns (uint256) {
        return _tOwned[account];
    }

    function bridgeVaultLockedBalance() external view returns (uint256) {
        return _balanceOf(everBridgeVault);
    }

    function balanceOf(address account) external view override returns (uint256) {
        // Bridge vault balances are on other chains
        if (account == everBridgeVault && _offchainBalanceExcluded == _TRUE) return 0;

        uint256 balance = _balanceOf(account);
        if (_inSwap != _TRUE &&
            _lastTransfer.blockNumber == uint32(block.number) &&
            account.isContract() &&
            !_isExcludedFromFee[account]
        ) {
            // Balance being checked is same address as last to in _transfer
            // check if likely same txn and a Liquidity Add
            _validateIfLiquidityChange(account, uint112(balance));
        }

        return balance;
    }

    // Transfers

    function approvals(address account) external view returns (ApprovalChecks memory) {
        return _approvals[account]; 
    }
    
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override walletLock(from) {
        if (from == address(0) || to == address(0)) revert NotZeroAddress();
        if (amount == 0) revert AmountMustBeGreaterThanZero();
        if (amount > (_balanceOf(from) - _amountLocked[from])) revert AmountLargerThanUnlockedAmount();

        bool isIgnoredAddress = _isExcludedFromFee[from] || _isExcludedFromFee[to];

        bool notInSwap = _inSwap != _TRUE;
        bool hasStarted = hasTokenStarted();
        address pair = uniswapV2Pair;
        bool isSell = to == pair;
        bool isBuy = from == pair;
        if (!isIgnoredAddress) {
            if (to == address(this)) revert NotContractAddress();
            if (amount > transactionCap) revert TransferTooLarge();
            if (!hasStarted) revert TokenNotStarted();
            if (notInSwap) {
                // Disallow multiple same source trades in same block
                if ((isSell || isBuy) && _lastTrade[tx.origin] == block.number) {
                    revert SandwichTradesAreDisallowed();
                }

                _lastTrade[tx.origin] = block.number;

                // Following block is for the contract to convert the tokens to ETH and do the buy back
                if (isSell && _swapEnabled == _TRUE) {
                    uint96 swapTokens = _minimumTokensBeforeSwap;
                    if (_balanceOf(address(this)) > swapTokens) {
                        // Greater than to always leave at least 1 token in contract
                        // reducing gas from switching from 0 to not-zero and not tracking
                        // token in holder count changes.
                        _convertTokens(swapTokens);
                    }

                    if (_buyback()) {
                        emit BuyBackTriggered();
                    }
                }
            }
        }

        if (hasStarted) {
            if (isBuy) {
                totalBuyVolume += amount;
            } else if (isSell) { 
                totalSellVolume += amount;
                if (amount > _buyBackTriggerTokenLimit) {
                    // Start at 1% of balance
                    uint256 amountToAdd = address(this).balance / 100;
                    uint256 maxToAdd = _buyBackUpperLimit / 100;
                    // Don't add more than the 1% of the upper limit
                    if (amountToAdd > maxToAdd) amountToAdd = maxToAdd;
                    // Add to next buyback
                    _nextBuybackAmount += amountToAdd;
                }
            }
        }

        // If any account belongs to _isExcludedFromFee account then remove the fee
        bool takeFee = true;
        if (isIgnoredAddress || isExchangeHotWallet(to)) {
            takeFee = false;
        }
        
        // For safety Liquidity Adds should only be done by an owner, 
        // and transfers to and from EverRise Ecosystem contracts
        // are not considered LP adds
        if (notInSwap) {
            if (isIgnoredAddress) {
                // Just set blocknumber to 1 to clear, to save gas on changing back
                _lastTransfer.blockNumber = 1;
            } else {
                // Not in a swap during a LP add, so record the transfer details
                _recordPotentialLiquidityChangeTransaction(to);
            }
        }

        _tokenTransfer(from, to, uint96(amount), takeFee);
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint96 amount,
        bool takeFee
    ) private {
        uint96 fromAfter = _tOwned[sender] - amount;
        _tOwned[sender] = fromAfter;

        uint96 tLiquidity = takeFee ? amount * liquidityFee / (10**2) : 0;
        uint96 tTransferAmount = amount - tLiquidity;

        uint96 toBefore = _tOwned[recipient]; 
        _tOwned[recipient] = toBefore + tTransferAmount;

        if (tLiquidity > 0) {
            // Skip writing to save gas if unchanged
            _tOwned[address(this)] += tLiquidity;
        }

        _trackHolders(fromAfter, toBefore);
        if (sender == everBridgeVault) {
            emit RiseBridgedIn(everBridgeVault, recipient, amount);
        } else if (recipient == everBridgeVault) {
            emit RiseBridgedOut(everBridgeVault, sender, amount);
        }

        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _lockedTokenTransfer(
        address sender,
        address recipient,
        uint96 amount
    ) private {
        // Do the locked token transfer
        _decreaseLockedAmount(sender, amount, false);
        uint96 fromAfter = _tOwned[sender] - amount;
        _tOwned[sender] = fromAfter;
        
        uint96 toBefore = _tOwned[recipient]; 
        _tOwned[recipient] = toBefore + amount;
        _increaseLockedAmount(recipient, amount);

        _trackHolders(fromAfter, toBefore);

        emit Transfer(sender, recipient, amount);
    }

    function _trackHolders(uint96 fromAfter, uint96 toBefore) private {
        uint256 startHolderCount = _holders;
        uint256 holderCount = startHolderCount;
        
        if (fromAfter == 0) --holderCount;
        if (toBefore == 0) ++holderCount;

        if (startHolderCount != holderCount) {
            // Skip writing to save gas if unchanged
            _holders = holderCount;
        }
    }

    // Buyback
    function crossChainBuyback() external onlyController(Role.CrossChainBuyback) {
        if (_buyback()) {
            emit BuyBackCrossChainTriggered();
        }

        // Is autoburn on?
        if (_autoBurn == _TRUE) {
            uint96 swapTokens = _minimumTokensBeforeSwap;
            // Have we collected enough tokens to burn?
            if (_burnableTokens > swapTokens) {
                unchecked {
                    // Just confirmed is valid above
                    _burnableTokens -= swapTokens;
                }
                // Burn the tokens
                _tokenTransfer(uniswapV2Pair, burnAddress, swapTokens, false);
                // Reset LP balances
                IUniswapV2Pair(uniswapV2Pair).sync();

                emit AutoBurn(swapTokens);
            }
        }
    }

    function _buyback() private returns (bool boughtBack) {
        if (_buyBackEnabled == _TRUE) {
            uint256 balance = address(this).balance;
            if (balance > _buyBackMinAvailability &&
                block.number > _latestBuybackBlock + _numberOfBlocks 
            ) {
                // Max of 10% of balance
                balance /= 10;
                uint256 buybackAmount = _nextBuybackAmount;
                if (buybackAmount > _maxBuybackAmount) {
                    buybackAmount = _maxBuybackAmount;
                }
                if (buybackAmount > balance) {
                    // Don't try to buyback more than is available.
                    buybackAmount = balance;
                }

                if (buybackAmount > 0) {
                    boughtBack = _buyBackTokens(buybackAmount);
                }
            }
        }
    }

    function _buyBackTokens(uint256 amount) private lockTheSwap returns (bool boughtBack) {
        _nextBuybackAmount = _minBuybackAmount; // reset the next buyback amount, set non-zero to save on future gas

        if (amount > 0) {
            uint256 tokensBefore = _balanceOf(address(stakeToken));
            EverRiseLib.swapETHForTokensNoFee(uniswapV2Router, address(stakeToken), amount);
            // Don't trust the return value; calculate it ourselves
            uint256 tokensReceived = _balanceOf(address(stakeToken)) - tokensBefore;

            emit BuybackTokensWithETH(amount, tokensReceived);
            _latestBuybackBlock = block.number;
            //Distribute the rewards to the staking pool
            _distributeStakingRewards(tokensReceived);

            boughtBack = true;
        }
    }
    
    // Non-EverSwap LP conversion
    function _convertTokens(uint256 tokenAmount) private lockTheSwap {
        uint256 initialETHBalance = address(this).balance;

        _approve(address(this), address(uniswapV2Router), tokenAmount, true);
        // Mark the tokens as available to burn
        _burnableTokens += uint96(tokenAmount);

        EverRiseLib.swapTokensForEth(uniswapV2Router, tokenAmount);

        uint256 transferredETHBalance = address(this).balance - initialETHBalance;
        emit ConvertTokensForETH(tokenAmount, transferredETHBalance);

        // Send split to Business Development address
        transferredETHBalance = transferredETHBalance * businessDevelopmentDivisor / liquidityFee;
        sendEthViaCall(businessDevelopmentAddress, transferredETHBalance);
    }

    // Staking

    function _distributeStakingRewards(uint256 amount) private {
        if (amount > 0) {
            stakeToken.createRewards(amount);

            emit RewardStakers(amount);
        }
    }
    
    function transferStake(address fromAddress, address toAddress, uint96 amountToTransfer) external walletLock(fromAddress) {
        if (_msgSender() != address(stakeToken)) revert NotStakeContractRequesting();

        _lockedTokenTransfer(fromAddress, toAddress, amountToTransfer);
    }

    function enterStaking(uint96 amount, uint8 numOfMonths) external payable walletLock(_msgSender()) {
        address staker = _msgSender();
        if (msg.value < stakeToken.stakeCreateCost()) revert NotEnoughToCoverStakeFee();

        uint32 nftId = stakeToken.enterStaking(staker, amount, numOfMonths);

        _lockAndAddStaker(staker, amount, numOfMonths, nftId);
    }

    function increaseStake(uint256 nftId, uint96 amount)
        external walletLock(_msgSender())
    {
        address staker = _msgSender();
        _increaseLockedAmount(staker, amount);

        uint8 numOfMonths;
        uint96 original;
        (, original, numOfMonths) = stakeToken.increaseStake(staker, nftId, amount);

        emit StakingDecreased(staker, original);
        emit StakingIncreased(staker, original + amount, numOfMonths);
    }

    function _increaseLockedAmount(address staker, uint96 amount) private {
        uint96 lockedAmount = _amountLocked[staker] + amount;
        if (lockedAmount > _balanceOf(staker)) revert AmountLargerThanUnlockedAmount();
        _amountLocked[staker] = lockedAmount;
        
        emit Transfer(staker, staker, amount);
    }

    function _decreaseLockedAmount(address staker, uint96 amount, bool emitEvent) private {
        _amountLocked[staker] -= amount;
        if (emitEvent) {
            emit StakingDecreased(staker, amount);
            emit Transfer(staker, staker, amount);
        }
    }

    function leaveStaking(uint256 nftId, bool overrideNotClaimed) external walletLock(_msgSender()) {
        address staker = _msgSender();

        uint96 amount = stakeToken.leaveStaking(staker, nftId, overrideNotClaimed);
        _decreaseLockedAmount(staker, amount, true);
        stakeToken.removeStaker(staker, nftId);
    }

    function earlyWithdraw(uint256 nftId, uint96 amount) external walletLock(_msgSender()) {
        address staker = _msgSender();

        (uint32 newNftId, uint96 penaltyAmount) = stakeToken.earlyWithdraw(staker, nftId, amount);
        _decreaseLockedAmount(staker, amount, true);
        
        if (penaltyAmount > 0) {
            _tokenTransfer(staker, address(stakeToken), penaltyAmount, false);
            _distributeStakingRewards(penaltyAmount);
        }

        stakeToken.reissueStakeNft(staker, nftId, newNftId);
    }

    function withdraw(uint256 nftId, uint96 amount, bool overrideNotClaimed) external walletLock(_msgSender()) {
        address staker = _msgSender();

        (uint32 newNftId) = stakeToken.withdraw(staker, nftId, amount, overrideNotClaimed);
        if (amount > 0) {
            _decreaseLockedAmount(staker, amount, true);
        }
        if (nftId != newNftId && newNftId != 0) {
            stakeToken.reissueStakeNft(staker, nftId, newNftId);
        }
    }

    function setApprovalForAll(address fromAddress, address operator, bool approved) external {
        if (_msgSender() != address(stakeToken)) revert NotStakeContractRequesting();

        _setApprovalForAll(fromAddress, operator, approved);
    }

    function isApprovedForAll(address account, address operator) external view returns (bool) {
        if (_msgSender() != address(stakeToken)) revert NotStakeContractRequesting();

        return _isApprovedForAll(account, operator);
    }
    
    // Nft bridging
    function approveNFTAndTokens(address bridgeAddress, uint256 nftId, uint256 tokenAmount) external {
        if (!roles[Role.NftBridge][bridgeAddress]) revert NotContractAddress();

        stakeToken.approve(_msgSender(), bridgeAddress, nftId);
        _approve(_msgSender(), bridgeAddress, tokenAmount, true);
    }

    function bridgeStakeNftOut(address fromAddress, uint256 nftId) external onlyController(Role.NftBridge) {
        if (stakeToken.getApproved(nftId) != _msgSender() && !stakeToken.isApprovedForAll(_msgSender(), fromAddress)) {
            revert CallerNotApproved();
        }
        
        _walletLock(fromAddress);

        uint96 amount = stakeToken.bridgeStakeNftOut(fromAddress, nftId);
        _decreaseLockedAmount(fromAddress, amount, true);
        // Send tokens to vault
        _tokenTransfer(fromAddress, everBridgeVault, amount, false);

        stakeToken.removeStaker(fromAddress, nftId);
        emit NftBridgedOut(address(this), everBridgeVault, fromAddress, nftId, amount);
    }

    function bridgeStakeNftIn(address toAddress, uint96 depositTokens, uint8 numOfMonths, uint48 depositTime, uint96 withdrawnAmount, bool achievementClaimed) external onlyController(Role.NftBridge) returns (uint256 nftId)
    {
        nftId = stakeToken.bridgeOrAirdropStakeNftIn(toAddress, depositTokens, numOfMonths, depositTime, withdrawnAmount, 0, achievementClaimed);

        uint96 amount = depositTokens - withdrawnAmount;
        //Send the tokens from Vault
        _tokenTransfer(everBridgeVault, toAddress, amount, false);

        _lockAndAddStaker(toAddress, amount, numOfMonths, nftId);

        emit NftBridgedIn(address(this), everBridgeVault, toAddress, nftId, amount);
    }

    function _lockAndAddStaker(address toAddress, uint96 amount, uint8 numOfMonths, uint256 nftId) private {
        _increaseLockedAmount(toAddress, amount);
        stakeToken.addStaker(toAddress, nftId);

        emit StakingIncreased(toAddress, amount, numOfMonths);
    }

    // Liquidity

    function _recordPotentialLiquidityChangeTransaction(address to) private {
        uint96 balance0 = uint96(_balanceOf(to));
        (address token0, address token1) = to.pairTokens();
        if (token1 == address(this)) {
            // Switch token so token1 is always other side of pair
            token1 = token0;
        } 
        
        if (token1 == address(0)) {
            // Not LP pair, just set blocknumber to 1 to clear, to save gas on changing back
            _lastTransfer.blockNumber = 1;
            return;
        }
        
        uint96 balance1 = uint96(IERC20(token1).balanceOf(to));

        _lastTransfer = TransferDetails({
            balance0: balance0,
            to: to,
            balance1: balance1,
            origin: tx.origin,
            blockNumber: uint32(block.number)
        });
    }

    // account must be recorded in _transfer and same block
    function _validateIfLiquidityChange(address account, uint112 balance0) private view {
        if (_lastTransfer.origin != tx.origin ||
            account != _lastTransfer.to) {
            // Not same txn, or not LP addETH
            return;
        }

        // Check if LP change using the data recorded in _transfer
        // May be same transaction as _transfer
        (address token0, address token1) = account.pairTokens();
        // Not LP pair
        if (token1 == address(0)) return;
        bool switchTokens;
        if (token1 == address(this)) {
            // Switch token so token1 is always other side of pair
            token1 = token0;
            switchTokens = true;
        } else if (token0 != address(this)) {
            // Not LP for this token
            return;
        }

        uint256 balance1 = IERC20(token1).balanceOf(account);
        // Test to see if this tx is part of a liquidity add
        if (balance0 > _lastTransfer.balance0 &&
            balance1 > _lastTransfer.balance1) {
            // Both pair balances have increased, this is a Liquidty Add
            // Will block addETH and where other token address sorts higher
            revert LiquidityAddOwnerOnly();
        }
    }

    // Admin

    function upgradeComplete() external onlyOwner {
        // Can only be called before start
        if (hasTokenStarted()) revert TokenAlreadyStarted();

        // We will keep one token always in contract
        // so we don't need to track it in holder changes
        _tokenTransfer(address(this), _msgSender(), _tOwned[address(this)] - 1, false);

        _buyBackEnabled = _TRUE;
        _swapEnabled = _TRUE;
        transactionCap = _totalSupply / 1000; // Max txn 0.1% of supply

        emit TokenStarted();
    }

    function sendEthViaCall(address payable to, uint256 amount) private {
        (bool sent, ) = to.call{value: amount}("");
        if (!sent) revert FailedEthSend();
    }

    function transferBalance(uint256 amount) external onlyOwner {
        sendEthViaCall(_msgSender(), amount);
    }

    function transferExternalTokens(address tokenAddress, address to, uint256 amount) external onlyOwner {
        if (tokenAddress == address(0)) revert NotZeroAddress();

        transferTokens(tokenAddress, to, amount);
    }

    function transferTokens(address tokenAddress, address to, uint256 amount) private {
        IERC20(tokenAddress).transfer(to, amount);

        emit TransferExternalTokens(tokenAddress, to, amount);
    }

    function mirgateV2Staker(address toAddress, uint96 rewards,uint96 depositTokens, uint8 numOfMonths, uint48 depositTime, uint96 withdrawnAmount) external onlyController(Role.Upgrader) returns(uint256 nftId)
    {
        nftId = stakeToken.bridgeOrAirdropStakeNftIn(toAddress, depositTokens, numOfMonths, depositTime, withdrawnAmount, rewards, false);

        uint96 amount = depositTokens - withdrawnAmount;

        _tokenTransfer(address(this), toAddress, amount, false);
        if (rewards > 0) {
            _tokenTransfer(address(this), address(stakeToken), rewards, false);
        }
        
        _lockAndAddStaker(toAddress, amount, numOfMonths, nftId);
    }

    function mirgateV1V2Holder(address holder, uint96 amount) external onlyController(Role.Upgrader) returns(bool) {
        _tokenTransfer(address(this), holder, amount, false);
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"routerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AmountLargerThanAllowance","type":"error"},{"inputs":[],"name":"AmountLargerThanUnlockedAmount","type":"error"},{"inputs":[],"name":"AmountMustBeGreaterThanZero","type":"error"},{"inputs":[],"name":"AmountOutOfRange","type":"error"},{"inputs":[],"name":"CallerNotApproved","type":"error"},{"inputs":[],"name":"CallerNotOwner","type":"error"},{"inputs":[],"name":"Expired","type":"error"},{"inputs":[],"name":"FailedEthSend","type":"error"},{"inputs":[],"name":"InvalidAddress","type":"error"},{"inputs":[],"name":"InvalidSignature","type":"error"},{"inputs":[],"name":"LiquidityAddOwnerOnly","type":"error"},{"inputs":[],"name":"LockTimeTooLong","type":"error"},{"inputs":[],"name":"LockTimeTooShort","type":"error"},{"inputs":[],"name":"NotContractAddress","type":"error"},{"inputs":[],"name":"NotEnoughToCoverStakeFee","type":"error"},{"inputs":[],"name":"NotStakeContractRequesting","type":"error"},{"inputs":[],"name":"NotZero","type":"error"},{"inputs":[],"name":"NotZeroAddress","type":"error"},{"inputs":[],"name":"SandwichTradesAreDisallowed","type":"error"},{"inputs":[],"name":"TokenAlreadyStarted","type":"error"},{"inputs":[],"name":"TokenNotStarted","type":"error"},{"inputs":[],"name":"TransferTooLarge","type":"error"},{"inputs":[],"name":"Unlocked","type":"error"},{"inputs":[],"name":"WalletLocked","type":"error"},{"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":"amount","type":"uint256"}],"name":"AutoBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"AutoBurnEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"BridgeVaultAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"deadAddress","type":"address"}],"name":"BurnAddressUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"BurnableTokensZeroed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"BusinessDevelopmentAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"BusinessDevelopmentDivisorUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"BuyBackCrossChainTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"BuyBackEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"BuyBackTriggerTokenLimitUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"BuyBackTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"BuybackBlocksUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"BuybackMinAvailabilityUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"}],"name":"BuybackTokensWithETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"BuybackUpperLimitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"controller","type":"address"},{"indexed":true,"internalType":"enum EverRiseRoles.Role","name":"role","type":"uint8"}],"name":"ControlAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"controller","type":"address"},{"indexed":true,"internalType":"enum EverRiseRoles.Role","name":"role","type":"uint8"}],"name":"ControlRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"}],"name":"ConvertTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"exchangeHotWallet","type":"address"}],"name":"ExchangeHotWalletAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"exchangeHotWallet","type":"address"}],"name":"ExchangeHotWalletRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeFromFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"IncludeInFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"LiquidityFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isLocked","type":"bool"}],"name":"LiquidityLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"address","name":"altAccount","type":"address"},{"indexed":false,"internalType":"uint256","name":"length","type":"uint256"}],"name":"LockWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"length","type":"uint256"}],"name":"LockWalletExtend","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newvalue","type":"uint256"}],"name":"MaxBuybackAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newvalue","type":"uint256"}],"name":"MinBuybackAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"MinStakeSizeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"NftBridgedIn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"NftBridgedOut","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enable","type":"bool"}],"name":"OffChainBalanceExcluded","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":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"tokens","type":"bool"},{"indexed":false,"internalType":"bool","name":"nfts","type":"bool"}],"name":"RevokeAllApprovals","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardStakers","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RiseBridgedIn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RiseBridgedOut","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"RouterAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint16","name":"tokensHrs","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"nftsHrs","type":"uint16"}],"name":"SetApprovalAutoTimeout","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"StakingAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"StakingDecreased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"numberOfmonths","type":"uint8"}],"name":"StakingIncreased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"TokenStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"TransactionCapUpdated","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":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"count","type":"uint256"}],"name":"TransferExternalTokens","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newController","type":"address"},{"internalType":"enum EverRiseRoles.Role","name":"role","type":"uint8"}],"name":"addControlRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addExchangeHotWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowances","outputs":[{"internalType":"uint128","name":"tokenAmount","type":"uint128"},{"internalType":"uint32","name":"nftCheck","type":"uint32"},{"internalType":"uint32","name":"tokenCheck","type":"uint32"},{"internalType":"uint48","name":"timestamp","type":"uint48"},{"internalType":"uint8","name":"nftApproval","type":"uint8"},{"internalType":"uint8","name":"tokenApproval","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"approvals","outputs":[{"components":[{"internalType":"uint64","name":"nonce","type":"uint64"},{"internalType":"uint32","name":"nftCheck","type":"uint32"},{"internalType":"uint32","name":"tokenCheck","type":"uint32"},{"internalType":"uint16","name":"autoRevokeNftHours","type":"uint16"},{"internalType":"uint16","name":"autoRevokeTokenHours","type":"uint16"},{"internalType":"uint48","name":"unlockTimestamp","type":"uint48"}],"internalType":"struct ApprovalChecks","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bridgeAddress","type":"address"},{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"approveNFTAndTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"toAddress","type":"address"},{"internalType":"uint96","name":"depositTokens","type":"uint96"},{"internalType":"uint8","name":"numOfMonths","type":"uint8"},{"internalType":"uint48","name":"depositTime","type":"uint48"},{"internalType":"uint96","name":"withdrawnAmount","type":"uint96"},{"internalType":"bool","name":"achievementClaimed","type":"bool"}],"name":"bridgeStakeNftIn","outputs":[{"internalType":"uint256","name":"nftId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fromAddress","type":"address"},{"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"bridgeStakeNftOut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bridgeVaultLockedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"businessDevelopmentAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"businessDevelopmentDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"crossChainBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint96","name":"amount","type":"uint96"}],"name":"earlyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint96","name":"amount","type":"uint96"},{"internalType":"uint8","name":"numOfMonths","type":"uint8"}],"name":"enterStaking","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"everBridgeVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint48","name":"length","type":"uint48"}],"name":"extendLockTokensAndNfts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAmountLocked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasTokenStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"holders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint96","name":"amount","type":"uint96"}],"name":"increaseStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExchangeHotWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"fromAddress","type":"address"}],"name":"isWalletLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"bool","name":"overrideNotClaimed","type":"bool"}],"name":"leaveStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"altAccount","type":"address"},{"internalType":"uint48","name":"length","type":"uint48"}],"name":"lockTokensAndNfts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"uint96","name":"amount","type":"uint96"}],"name":"mirgateV1V2Holder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"toAddress","type":"address"},{"internalType":"uint96","name":"rewards","type":"uint96"},{"internalType":"uint96","name":"depositTokens","type":"uint96"},{"internalType":"uint8","name":"numOfMonths","type":"uint8"},{"internalType":"uint48","name":"depositTime","type":"uint48"},{"internalType":"uint96","name":"withdrawnAmount","type":"uint96"}],"name":"mirgateV2Staker","outputs":[{"internalType":"uint256","name":"nftId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"offchainBalanceExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"oldController","type":"address"},{"internalType":"enum EverRiseRoles.Role","name":"role","type":"uint8"}],"name":"removeControlRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeExchangeHotWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"tokens","type":"bool"},{"internalType":"bool","name":"nfts","type":"bool"}],"name":"revokeApprovals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum EverRiseRoles.Role","name":"","type":"uint8"},{"internalType":"address","name":"","type":"address"}],"name":"roles","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"fromAddress","type":"address"},{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setAutoBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"tokensHrs","type":"uint16"},{"internalType":"uint16","name":"nftsHrs","type":"uint16"}],"name":"setAutoTimeout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_burnAddress","type":"address"}],"name":"setBurnAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setBurnableTokensZero","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setBusinessDevelopmentAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setBusinessDevelopmentDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setBuyBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"numOfDecimals","type":"uint256"}],"name":"setBuybackMinAvailability","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyBackTriggerLimit","type":"uint256"}],"name":"setBuybackTriggerTokenLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyBackLimit","type":"uint256"},{"internalType":"uint256","name":"numOfDecimals","type":"uint256"}],"name":"setBuybackUpperLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"setEverBridgeVaultAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint96","name":"liquidityFeeRate","type":"uint96"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setLiquidityLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxAmount","type":"uint256"},{"internalType":"uint256","name":"numOfDecimals","type":"uint256"}],"name":"setMaxBuybackAmountUpdated","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minAmount","type":"uint256"},{"internalType":"uint256","name":"numOfDecimals","type":"uint256"}],"name":"setMinBuybackAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint96","name":"minimumTokensBeforeSwap","type":"uint96"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setNumberOfBlocksForBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setOffchainBalanceExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"setStakingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"txAmount","type":"uint256"}],"name":"setTransactionCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakeToken","outputs":[{"internalType":"contract InftEverRise","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyVolume","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellVolume","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":"transactionCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferExternalTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"transferFromWithPermit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"fromAddress","type":"address"},{"internalType":"address","name":"toAddress","type":"address"},{"internalType":"uint96","name":"amountToTransfer","type":"uint96"}],"name":"transferStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"actualAccount","type":"address"}],"name":"unlockTokensAndNfts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"upgradeComplete","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"uint96","name":"amount","type":"uint96"},{"internalType":"bool","name":"overrideNotClaimed","type":"bool"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052600580546001600160a01b03199081167324d8dabebd6c0d5ccc88ec40d95bf8eb64f0cf9e179091556007805490911661dead179055620000486012600a6200067b565b62000059906410acc4794462000693565b6001600160601b0316608052600d80546001600160601b03191660061790556002600e556200008b6012600a6200067b565b6200009a90624c4b4062000693565b600f80546001600160601b0319166001600160601b0392909216919091179055678ac7230489e80000601055620000d46012600a6200067b565b620000e390620f424062000693565b601155670de0b6b3a76400006012556103e860155567016345785d8a0000601655670de0b6b3a7640000601755600160185560016019556001601a556002601b556001601c556001601d556001601e553480156200014057600080fd5b506040516200653c3803806200653c8339810160408190526200016391620006b5565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3503360008181527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f602090815260408083208054600160ff1991821681179092557fd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f845282852080548216831790557f7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b845282852080548216831790557fedc95719e9a3b28dd8e80877cb5880a9be7de1a13fc8b05e7999683b6b567643845282852080548216831790557fe2689cd4a84e23ad2f564004f1c9013e9589d260bde6380aba3ca7e09e4df40c845282852080548216831790557f8f331abe73332f95a25873e8b430885974c0409691f89d643119a11623a7924a845282852080548216831790557fdc686ec4a0ff239c70e7c7c36e8f853eced3bc8618f48d2b816da2a74311237e845282852080548216831790557f4db623e5c4870b62d3fc9b4e8f893a1a77627d75ab45d9ff7e56ba19564af99b909352922080549091169091179055506001600160a01b03811662000351576040516366385fa360e01b815260040160405180910390fd5b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000395573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bb9190620006b5565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000409573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200042f9190620006b5565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200047d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004a39190620006b5565b602080546001600160a01b03199081166001600160a01b03938416178255601f8054909116848416179055600080549092168252600881526040808320805460ff19908116600190811790925530808652838620805490921690921790556080516023845282852080546001600160601b0319166001600160601b039092169182179055915191825292917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350506001602255620006e0565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620005bd578160001904821115620005a157620005a162000566565b80851615620005af57918102915b93841c939080029062000581565b509250929050565b600082620005d65750600162000675565b81620005e55750600062000675565b8160018114620005fe5760028114620006095762000629565b600191505062000675565b60ff8411156200061d576200061d62000566565b50506001821b62000675565b5060208310610133831016604e8410600b84101617156200064e575081810a62000675565b6200065a83836200057c565b806000190482111562000671576200067162000566565b0290505b92915050565b60006200068c60ff841683620005c5565b9392505050565b6000816000190483118215151615620006b057620006b062000566565b500290565b600060208284031215620006c857600080fd5b81516001600160a01b03811681146200068c57600080fd5b608051615e326200070a60003960008181610667015281816130fb01526138a70152615e326000f3fe6080604052600436106104fb5760003560e01c806370d5ae051161028c578063c0316ffe1161015a578063d98daa43116100cc578063ea2f0b3711610085578063ea2f0b371461125f578063ecc684a81461127f578063f2fde38b14611294578063f4e0d9ac146112b4578063f5dc51ec146112d4578063fa25e2de146112f457600080fd5b8063d98daa431461119f578063d9cd78f4146111bf578063da5fcc9f146111df578063dd62ed3e146111ff578063e01af92c1461121f578063e985e9c51461123f57600080fd5b8063cf913db91161011e578063cf913db9146110c6578063d1bdac24146110ff578063d505accf1461111f578063d6e03cd41461113f578063d921cd761461115f578063d96d54d81461117f57600080fd5b8063c0316ffe14611030578063c27afefc14611050578063c38c3ee614611070578063ca5f084f14611090578063cc5ba480146110a657600080fd5b80639bbe0533116101fe578063b22a6389116101b7578063b22a638914610f7a578063b51d404214610f9a578063b5d0abfd14610fba578063b971383a14610fda578063b9e5a03b14610ffa578063bfa1c45e1461101057600080fd5b80639bbe053314610ec2578063a63b91f414610ee2578063a9059cbb14610efa578063aefac34d14610f1a578063af1b597e14610f3a578063af77474414610f5a57600080fd5b80638a60c4c1116102505780638a60c4c114610de55780638aee2c2714610e055780638da5cb5b14610e255780638db2063b14610e4557806395d89b4114610e5a57806398118cb414610e8a57600080fd5b806370d5ae0514610d3b578063774a081014610d5b5780637d84ed2614610d705780637ecebe0014610d905780638188f71c14610dd057600080fd5b8063367605ca116103c95780634f27ec3e1161033b5780635f7e3821116102f45780635f7e382114610c6c5780635f898ce814610c8c578063601fdff314610cac5780636053a0e314610ceb5780636ddd171314610d0357806370a0823114610d1b57600080fd5b80634f27ec3e146109bc57806351ed6a30146109dc5780635342acb4146109fc57806355b6ed5c14610a3557806357976fb414610b045780635d0341ba14610b1c57600080fd5b806341cb87fc1161038d57806341cb87fc1461090657806341e70fa614610926578063437823ec1461093c578063445e76881461095c57806349bd5a5e1461097c5780634b0e72161461099c57600080fd5b8063367605ca1461087d57806336b1db151461089d578063379f96da146108bd578063410d3e67146108d0578063415e9718146108e657600080fd5b806320606b701161046d5780632b0e1d79116104265780632b0e1d79146107ad5780632b9afa03146107cd57806330adf81f146107ed578063313ce567146108215780633477320c146108485780633644e5151461086857600080fd5b806320606b70146106be57806323b872dd146106f257806326a17edf1461071257806329370cc61461073257806329d9ec5e146107525780632a49b6841461077257600080fd5b80630e59d5b7116104bf5780630e59d5b7146105d15780631551fe91146105e957806316758e0b146106095780631694505e1461062057806318160ddd146106585780631f5e98bb1461069e57600080fd5b806306fdde03146105075780630844c97f1461054a57806308792b1414610561578063095ea7b3146105815780630c0c91a2146105b157600080fd5b3661050257005b600080fd5b34801561051357600080fd5b50604080518082019091526008815267457665725269736560c01b60208201525b604051610541919061537b565b60405180910390f35b34801561055657600080fd5b5061055f611314565b005b34801561056d57600080fd5b5061055f61057c3660046153bc565b611456565b34801561058d57600080fd5b506105a161059c36600461540a565b611516565b6040519015158152602001610541565b3480156105bd57600080fd5b506105a16105cc366004615436565b61152e565b3480156105dd57600080fd5b50601c546002146105a1565b3480156105f557600080fd5b5061055f61060436600461546f565b611539565b34801561061557600080fd5b50600c5415156105a1565b34801561062c57600080fd5b50601f54610640906001600160a01b031681565b6040516001600160a01b039091168152602001610541565b34801561066457600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006001600160601b03165b604051908152602001610541565b3480156106aa57600080fd5b5061055f6106b936600461546f565b6115df565b3480156106ca57600080fd5b506106907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b3480156106fe57600080fd5b506105a161070d36600461548c565b611663565b34801561071e57600080fd5b5061055f61072d3660046154cd565b6116bb565b34801561073e57600080fd5b5061055f61074d3660046154cd565b61170a565b34801561075e57600080fd5b5061055f61076d3660046154ea565b611759565b34801561077e57600080fd5b506105a161078d366004615520565b600160209081526000928352604080842090915290825290205460ff1681565b3480156107b957600080fd5b5061055f6107c836600461540a565b6117ee565b3480156107d957600080fd5b506106906107e8366004615571565b611a8a565b3480156107f957600080fd5b506106907f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b34801561082d57600080fd5b50610836601281565b60405160ff9091168152602001610541565b34801561085457600080fd5b5061055f610863366004615436565b611bb3565b34801561087457600080fd5b50610690611c0e565b34801561088957600080fd5b5061055f6108983660046155f1565b611ce9565b3480156108a957600080fd5b5061055f6108b836600461564e565b611d2d565b61055f6108cb366004615681565b611db7565b3480156108dc57600080fd5b50610690600c5481565b3480156108f257600080fd5b5061055f6109013660046154ea565b611ef2565b34801561091257600080fd5b5061055f610921366004615436565b611f7a565b34801561093257600080fd5b50610690600b5481565b34801561094857600080fd5b5061055f610957366004615436565b612151565b34801561096857600080fd5b5061055f6109773660046156af565b6121ea565b34801561098857600080fd5b50602054610640906001600160a01b031681565b3480156109a857600080fd5b5061055f6109b7366004615436565b6122f7565b3480156109c857600080fd5b5061055f6109d73660046156d4565b61234d565b3480156109e857600080fd5b50602154610640906001600160a01b031681565b348015610a0857600080fd5b506105a1610a17366004615436565b6001600160a01b031660009081526008602052604090205460ff1690565b348015610a4157600080fd5b50610ab6610a503660046156ed565b60036020908152600092835260408084209091529082529020546001600160801b0381169063ffffffff600160801b8204811691600160a01b81049091169065ffffffffffff600160c01b8204169060ff600160f01b8204811691600160f81b90041686565b604080516001600160801b03909716875263ffffffff9586166020880152949093169385019390935265ffffffffffff16606084015260ff91821660808401521660a082015260c001610541565b348015610b1057600080fd5b50601b546002146105a1565b348015610b2857600080fd5b50610bf8610b37366004615436565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506001600160a01b0316600090815260026020908152604091829020825160c081018452905467ffffffffffffffff8116825263ffffffff600160401b8204811693830193909352600160601b81049092169281019290925261ffff600160801b820481166060840152600160901b820416608083015265ffffffffffff600160a01b9091041660a082015290565b6040516105419190600060c08201905067ffffffffffffffff8351168252602083015163ffffffff80821660208501528060408601511660408501525050606083015161ffff8082166060850152806080860151166080850152505065ffffffffffff60a08401511660a083015292915050565b348015610c7857600080fd5b50600554610640906001600160a01b031681565b348015610c9857600080fd5b506105a1610ca736600461570b565b6123b9565b348015610cb857600080fd5b50610690610cc7366004615436565b6001600160a01b03166000908152602460205260409020546001600160601b031690565b348015610cf757600080fd5b50601a546002146105a1565b348015610d0f57600080fd5b506019546002146105a1565b348015610d2757600080fd5b50610690610d36366004615436565b6123dd565b348015610d4757600080fd5b50600754610640906001600160a01b031681565b348015610d6757600080fd5b5061055f612480565b348015610d7c57600080fd5b5061055f610d8b366004615739565b6124bc565b348015610d9c57600080fd5b50610690610dab366004615436565b6001600160a01b031660009081526002602052604090205467ffffffffffffffff1690565b348015610ddc57600080fd5b50602254610690565b348015610df157600080fd5b5061055f610e003660046156d4565b612609565b348015610e1157600080fd5b5061055f610e203660046154ea565b61261b565b348015610e3157600080fd5b50600054610640906001600160a01b031681565b348015610e5157600080fd5b506106906126a4565b348015610e6657600080fd5b50610534604051806040016040528060048152602001635249534560e01b81525081565b348015610e9657600080fd5b50600d54610eaa906001600160601b031681565b6040516001600160601b039091168152602001610541565b348015610ece57600080fd5b5061055f610edd36600461575e565b6126c1565b348015610eee57600080fd5b50601d546002146105a1565b348015610f0657600080fd5b506105a1610f1536600461540a565b6127c8565b348015610f2657600080fd5b50600654610640906001600160a01b031681565b348015610f4657600080fd5b5061055f610f553660046154cd565b6127de565b348015610f6657600080fd5b5061055f610f7536600461578a565b61282d565b348015610f8657600080fd5b5061055f610f953660046157b1565b612987565b348015610fa657600080fd5b5061055f610fb53660046154ea565b612abc565b348015610fc657600080fd5b5061055f610fd5366004615436565b612b47565b348015610fe657600080fd5b5061055f610ff53660046157cc565b612b9f565b34801561100657600080fd5b50610690600a5481565b34801561101c57600080fd5b5061069061102b366004615801565b612c8a565b34801561103c57600080fd5b5061055f61104b36600461575e565b612d7b565b34801561105c57600080fd5b5061055f61106b36600461548c565b612e83565b34801561107c57600080fd5b5061055f61108b366004615873565b612ebd565b34801561109c57600080fd5b50610690600e5481565b3480156110b257600080fd5b5061055f6110c1366004615739565b612fbf565b3480156110d257600080fd5b506105a16110e1366004615436565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561110b57600080fd5b5061055f61111a3660046156d4565b6130e7565b34801561112b57600080fd5b5061055f61113a36600461589f565b61317d565b34801561114b57600080fd5b506105a161115a36600461589f565b61340d565b34801561116b57600080fd5b5061055f61117a366004615436565b613435565b34801561118b57600080fd5b5061055f61119a366004615436565b61348a565b3480156111ab57600080fd5b5061055f6111ba3660046156d4565b613507565b3480156111cb57600080fd5b5061055f6111da366004615436565b613582565b3480156111eb57600080fd5b5061055f6111fa3660046154cd565b613625565b34801561120b57600080fd5b5061069061121a3660046156ed565b613678565b34801561122b57600080fd5b5061055f61123a3660046154cd565b613719565b34801561124b57600080fd5b506105a161125a3660046156ed565b613765565b34801561126b57600080fd5b5061055f61127a366004615436565b6137a6565b34801561128b57600080fd5b5061055f61383b565b3480156112a057600080fd5b5061055f6112af366004615436565b613902565b3480156112c057600080fd5b5061055f6112cf366004615436565b6139a4565b3480156112e057600080fd5b5061055f6112ef366004615910565b613a07565b34801561130057600080fd5b5061055f61130f3660046156d4565b613a50565b600761131f81613abf565b611327613b37565b15611356576040517f6a436cd4d025d81a64b65845b219f011a8406fee86f3a2d737f274d94e268de190600090a15b6002601d540361145357600f54601e546001600160601b039091169081101561145157601e80546001600160601b038316900390556020546007546113aa916001600160a01b039081169116836000613bae565b602060009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156113fa57600080fd5b505af115801561140e573d6000803e3d6000fd5b50506040516001600160601b03841681527fbaf2a973da603337d11f56e6730fba6606e95b5e8085627c9ead4d24672d8616925060200190505b60405180910390a15b505b50565b3360008181526002602052604090208215611499578054600163ffffffff600160401b80840482169290920116026bffffffff0000000000000000199091161781555b83156114c8578054600163ffffffff600160601b808404821692909201160263ffffffff60601b199091161781555b60408051851515815284151560208201526001600160a01b038416917f5c20d5f19f8c6bc73cb1cba38e0b27f3837b43909d18a4ef193d1fa3c6f8f0d491015b60405180910390a250505050565b60006115253384846001613e1b565b90505b92915050565b600061152882613fdb565b600461154481613abf565b633b9aca00826001600160601b031611156115725760405163c64200e960e01b815260040160405180910390fd5b61157e6012600a615a4a565b611591906001600160601b038416615a56565b600f80546001600160601b0319166001600160601b0392831617905560405190831681527f5948780118f41f7c4577ae4619d5cbd064057bd8562d9f7b7e60324053375c0090602001611448565b60046115ea81613abf565b600a826001600160601b031611156116155760405163c64200e960e01b815260040160405180910390fd5b600d80546001600160601b0319166001600160601b0384169081179091556040519081527f5597c0e02a719eddde3b801d7abc15c0023afdcf6880c1e254427559820083c290602001611448565b6000611670848484614008565b600061167c8533613678565b90508083111561169f57604051639b144c5760e01b815260040160405180910390fd5b8290036116af8533836000613e1b565b50600195945050505050565b60046116c681613abf565b816116d25760016116d5565b60025b601b5560405182151581527fff33d24fddcb9b99aca93607453cdcbd7aa449ae3ea8a9f69421881c7eae81c990602001611448565b600161171581613abf565b81611721576001611724565b60025b601a5560405182151581527f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c090602001611448565b600161176481613abf565b633b9aca008311156117895760405163c64200e960e01b815260040160405180910390fd5b61179482600a615a4a565b6117a684670de0b6b3a7640000615a56565b6117b09190615a8b565b60108190556040519081527fcc06eb9a0c57a5ee1100a0e2e4029558c04ff3b2a110a881ac9700cffed1a824906020015b60405180910390a1505050565b60026117f981613abf565b3360215460405163020604bf60e21b8152600481018590526001600160a01b03928316929091169063081812fc90602401602060405180830381865afa158015611847573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186b9190615a9f565b6001600160a01b03161415801561190157506021546001600160a01b031663e985e9c5336040516001600160e01b031960e084901b1681526001600160a01b0391821660048201529086166024820152604401602060405180830381865afa1580156118db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ff9190615abc565b155b1561191f57604051634014f1a560e01b815260040160405180910390fd5b61192883614382565b602154604051632b0e1d7960e01b81526001600160a01b038581166004830152602482018590526000921690632b0e1d79906044016020604051808303816000875af115801561197c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a09190615ad9565b90506119ae848260016143a9565b6006546119c89085906001600160a01b0316836000613bae565b60215460405163632abfe960e11b81526001600160a01b038681166004830152602482018690529091169063c6557fd290604401600060405180830381600087803b158015611a1657600080fd5b505af1158015611a2a573d6000803e3d6000fd5b5050600654604080518781526001600160601b03861660208201526001600160a01b038981169550909216925030917fe0bf1306ae80358ba075e7e155d3d3100bd1cb7245f654f111d39453f756356a910160405180910390a450505050565b60006002611a9781613abf565b60215460405163153d88f360e11b81526001600160a01b0390911690632a7b11e690611ad4908b908b908b908b908b906000908c90600401615af6565b6020604051808303816000875af1158015611af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b179190615b5f565b63ffffffff1691506000611b2b8589615b7a565b600654909150611b47906001600160a01b03168a836000613bae565b611b5389828986614488565b600654604080518581526001600160601b03841660208201526001600160a01b038c811693169130917f339e4100371ca3951325b190c421cb3c67f09635d57fc14e6aacfcb52d387329910160405180910390a450509695505050505050565b611bbb614544565b611bc481612151565b600680546001600160a01b0319166001600160a01b0383169081179091556040517f1501eda19b56071bf17a0a32e2efdeb611ccec1e2da5c7612bf674204901ce7a90600090a250565b3360009081526002602090815260409182902054825180840184526008815267457665725269736560c01b908301528251600160601b90910460e01b6001600160e01b03191681830152825180820360040181526024820184528051908301207f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60448301527fce794fa9785f2c930c5f814f254aa188dca4e3e9bde647a87f3a0c8d20d90736606483015260848201524660a48201523060c4808301919091528351808303909101815260e4909101909252815191012090565b6021546001600160a01b0316336001600160a01b031614611d1d57604051637c1aebb760e01b815260040160405180910390fd5b611d28838383614571565b505050565b6000336001600160a01b038116600081815260026020908152604091829020805463ffffffff60801b1916600160801b61ffff89811691820261ffff60901b191692909217600160901b928b169283021783558451918252928101929092529394507f6d8d587cf6c6d60a0dcd1fa635969d1d69787cfdf26d9f83ebaba44408fc1d2d9101611508565b33611dc181614382565b602154604080516305f00a1f60e21b8152905133926001600160a01b0316916317c0287c9160048083019260209291908290030181865afa158015611e0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2e9190615ba2565b341015611e4e5760405163627554ed60e01b815260040160405180910390fd5b60215460405163615eaa5960e01b81526001600160a01b0383811660048301526001600160601b038716602483015260ff86166044830152600092169063615eaa59906064016020604051808303816000875af1158015611eb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed79190615b5f565b9050611eeb8286868463ffffffff16614488565b5050505050565b6001611efd81613abf565b6103e8831115611f205760405163c64200e960e01b815260040160405180910390fd5b611f2b82600a615a4a565b611f3d84670de0b6b3a7640000615a56565b611f479190615a8b565b6016556040518381527f2d2d4e5324f4ce25e3d52eea5f16c64ccd01d35f9f80f30b73346811cc9b951d906020016117e1565b6004611f8581613abf565b6001600160a01b038216611fac576040516366385fa360e01b815260040160405180910390fd5b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120139190615a9f565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612060573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120849190615a9f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156120cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f39190615a9f565b602080546001600160a01b03199081166001600160a01b0393841617909155601f8054909116838316179055604051908416907fafec26814d7c5e0716cdb68343bdf123509d8bae8a1a877de1c3869411985c5590600090a2505050565b600561215c81613abf565b6001600160a01b03821660009081526008602052604090205460ff16156121965760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b038216600081815260086020908152604091829020805460ff1916600117905590519182527f7168e8adb718597b3ac83e2dfe415bea8ebaabb57fe933ffac2e0ed93b80718e9101611448565b336121f481614382565b60003360215460405163d22d6f4360e01b81526001600160a01b0380841660048301526024820188905286151560448301529293506000929091169063d22d6f43906064016020604051808303816000875af1158015612258573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061227c9190615ad9565b905061228a828260016143a9565b60215460405163632abfe960e11b81526001600160a01b038481166004830152602482018890529091169063c6557fd290604401600060405180830381600087803b1580156122d857600080fd5b505af11580156122ec573d6000803e3d6000fd5b505050505050505050565b600461230281613abf565b600780546001600160a01b0319166001600160a01b0384169081179091556040517f6feb2294766fb161940a49b92df0ad4a47ffb6ef8255e0b9f80c8c05b7ec6b0f90600090a25050565b600461235881613abf565b600d546001600160601b03168211156123845760405163c64200e960e01b815260040160405180910390fd5b600e8290556040518281527f160ad92b724bb5157ba7574b379ecc4ec5a5f5220cd651c3b44b4b1c12332b1190602001611448565b600060086123c681613abf565b6123d33085856000613bae565b5060019392505050565b6006546000906001600160a01b0383811691161480156123ff57506002601c54145b1561240c57506000919050565b6000612417836146bd565b905060026018541415801561243757506028544363ffffffff9081169116145b801561244c57506001600160a01b0383163b15155b801561247157506001600160a01b03831660009081526008602052604090205460ff16155b156115285761152883826146e1565b600461248b81613abf565b6001601e556040517f38e9e1bdbb19e199e2318a4fdd4145df21973acc643c88012128eeb61a386c6090600090a150565b336124c681614382565b336124d18184614845565b60215460405163e2c281db60e01b81526001600160a01b038381166004830152602482018790526001600160601b0386166044830152600092839291169063e2c281db906064016060604051808303816000875af1158015612537573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061255b9190615bbb565b6040516001600160601b03831681529094509092506001600160a01b03851691507fbedcdd66d86f5dc81286de7b36cc38398208ffb595a3e95330fca4fb21f08cba9060200160405180910390a26001600160a01b0383167ff4476f182b22aa6860f6aea0edf736040fd43167d941069fadffe4aef18ef7286125de8784615bfa565b604080516001600160601b03909216825260ff861660208301520160405180910390a2505050505050565b612611614544565b61145333826148ff565b600161262681613abf565b620f424083111561264a5760405163c64200e960e01b815260040160405180910390fd5b61265582600a615a4a565b61266784670de0b6b3a7640000615a56565b6126719190615a8b565b6017556040518381527fb25c7820d9392eafa2a90c45ca6438ae395e13490da78f2e2c77168cbb951534906020016117e1565b6006546000906126bc906001600160a01b03166146bd565b905090565b6126c9614544565b60008160088111156126dd576126dd615c25565b036126fa576040516252b55360e31b815260040160405180910390fd5b6001600160a01b038216612721576040516366385fa360e01b815260040160405180910390fd5b600180600083600881111561273857612738615c25565b600881111561274957612749615c25565b8152602080820192909252604090810160009081206001600160a01b03871682529092529020805460ff191691151591909117905580600881111561279057612790615c25565b6040516001600160a01b038416907fda7159b01021254a0864c86d0163ad02e9f9ce045913f19dc9315ce339a7270a90600090a35050565b60006127d5338484614008565b50600192915050565b60046127e981613abf565b816127f55760016127f8565b60025b601d5560405182151581527f381a2ba311289fc64532188b12030ca4ad77b2dc7c3a88ab03bacbf13da52a1c90602001611448565b3361283781614382565b600033602154604051632af7e50d60e21b81526001600160a01b038084166004830152602482018990526001600160601b038816604483015286151560648301529293506000929091169063abdf9434906084016020604051808303816000875af11580156128aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ce9190615b5f565b90506001600160601b038516156128eb576128eb828660016143a9565b8063ffffffff168614158015612906575063ffffffff811615155b1561297f57602154604051630b40697b60e31b81526001600160a01b0384811660048301526024820189905263ffffffff8416604483015290911690635a034bd8906064015b600060405180830381600087803b15801561296657600080fd5b505af115801561297a573d6000803e3d6000fd5b505050505b505050505050565b6312cc03006129996201518083615c3b565b65ffffffffffff1611156129c057604051635b30744d60e11b815260040160405180910390fd5b33600090815260026020526040902054600160a01b900465ffffffffffff1642811015612a00576040516319aad37160e01b815260040160405180910390fd5b6000612a0c8342615c60565b90508065ffffffffffff168265ffffffffffff161115612a3f57604051636badcecf60e01b815260040160405180910390fd5b336000818152600260205260409020805465ffffffffffff60a01b1916600160a01b65ffffffffffff85160217905560405165ffffffffffff851681526001600160a01b0391909116907f402f92847e995eb87d15fd380cf11ec5c61ca69a5f6cd305fd26cd1cb6a41757906020015b60405180910390a2505050565b6001612ac781613abf565b620186a0831115612aeb5760405163c64200e960e01b815260040160405180910390fd5b612af682600a615a4a565b612b0884670de0b6b3a7640000615a56565b612b129190615a8b565b60128190556040519081527fac218d80006936a5fb23226f25ffed76cd856dbcc539b7dd7a8abb5a418a8da4906020016117e1565b6006612b5281613abf565b6001600160a01b038216600081815260096020526040808220805460ff19166001179055517f07eccb5a6343032639dc3f1a913d254583bf745e350cdaa19ffc2b4cc2ebff6b9190a25050565b6001600160a01b03831660009081527fd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f602052604090205460ff16612bf75760405163d9716e4360e01b815260040160405180910390fd5b6021546001600160a01b031663e1f21c67336040516001600160e01b031960e084901b1681526001600160a01b039182166004820152908616602482015260448101859052606401600060405180830381600087803b158015612c5957600080fd5b505af1158015612c6d573d6000803e3d6000fd5b50505050612c84612c7b3390565b84836001613e1b565b50505050565b60006008612c9781613abf565b60215460405163153d88f360e11b81526001600160a01b0390911690632a7b11e690612cd4908b908a908a908a908a908f90600090600401615af6565b6020604051808303816000875af1158015612cf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d179190615b5f565b63ffffffff1691506000612d2b8488615b7a565b9050612d3a308a836000613bae565b6001600160601b03881615612d6357602154612d639030906001600160a01b03168a6000613bae565b612d6f89828886614488565b50509695505050505050565b612d83614544565b6000816008811115612d9757612d97615c25565b03612db4576040516252b55360e31b815260040160405180910390fd5b6001600160a01b038216612ddb576040516366385fa360e01b815260040160405180910390fd5b600060016000836008811115612df357612df3615c25565b6008811115612e0457612e04615c25565b8152602080820192909252604090810160009081206001600160a01b03871682529092529020805460ff1916911515919091179055806008811115612e4b57612e4b615c25565b6040516001600160a01b038416907f99b197980951aeda56a24210ac7963b47fac50b2277554a4fc7dc06fd305b57490600090a35050565b612e8b614544565b6001600160a01b038316612eb2576040516366385fa360e01b815260040160405180910390fd5b611d28838383614973565b33612ec781614382565b6001600160a01b038316612eee576040516366385fa360e01b815260040160405180910390fd5b6312cc0300612f006201518084615c3b565b65ffffffffffff161115612f2757604051635b30744d60e11b815260040160405180910390fd5b612f318242615c60565b336000818152600260209081526040808320805465ffffffffffff60a01b1916600160a01b65ffffffffffff97881602179055600482529182902080546001600160a01b0389166001600160a01b0319909116811790915582519081529386169084015290917f9141f23a32bd7f35c8ce161a6f9d05eba59799700a6a44094330bd68b3e251039101612aaf565b33612fc981614382565b60003360215460405163012a6efb60e21b81526001600160a01b038084166004830152602482018890526001600160601b0387166044830152929350600092839216906304a9bbec9060640160408051808303816000875af1158015613033573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130579190615c81565b91509150613067838660016143a9565b6001600160601b038116156130a2576021546130909084906001600160a01b0316836000613bae565b6130a2816001600160601b0316614a2c565b602154604051630b40697b60e31b81526001600160a01b0385811660048301526024820189905263ffffffff8516604483015290911690635a034bd89060640161294c565b60036130f281613abf565b61311f620186a07f0000000000000000000000000000000000000000000000000000000000000000615cad565b6001600160601b03168210156131485760405163c64200e960e01b815260040160405180910390fd5b600c8290556040518281527f699d1c4c28f453c7c162bf9ab9d182bcca9b5860718f5dbc0dadb620c0aa077e90602001611448565b6001600160a01b0386166131a4576040516366385fa360e01b815260040160405180910390fd5b428410156131c557604051630407b05b60e31b815260040160405180910390fd5b6001600160a01b03871660009081526002602052604081208054909167ffffffffffffffff909116906131f6611c0e565b604080517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960208201526001600160a01b03808e1692820192909252908b166060820152608081018a905267ffffffffffffffff841660a082015260c0810189905260e0016040516020818303038152906040528051906020012060405160200161329892919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181529190528051602090910120835467ffffffffffffffff600190940193841667ffffffffffffffff199091161784559050601b60ff871610156132f3576132ec601b87615cc7565b955061334b565b601e8660ff16111561334b576040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052605c016040516020818303038152906040528051906020012090505b6040805160008082526020820180845284905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561339f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615806133d457508a6001600160a01b0316816001600160a01b031614155b156133f257604051638baa579f60e01b815260040160405180910390fd5b6133ff8b8b8b6001613e1b565b505050505050505050505050565b600061341e8833888888888861317d565b613429888888611663565b98975050505050505050565b600661344081613abf565b6001600160a01b038216600081815260096020526040808220805460ff19169055517fe96bbe78c8bc645f0ee444e35730f56b458ea663d1b2a35cf93cefd7fce93dc19190a25050565b600461349581613abf565b6001600160a01b0382166134bc576040516366385fa360e01b815260040160405180910390fd5b600580546001600160a01b0319166001600160a01b0384169081179091556040517f6a679ad6371327969c9ddeade76f85c3e657fd6d020eeb491becdd1b6d608db390600090a25050565b600161351281613abf565b6305f5e1008211156135375760405163c64200e960e01b815260040160405180910390fd5b6135436012600a615a4a565b61354d9083615a56565b60118190556040519081527f29b4862b0ac325a5ba77a99236953f6a42e083f4f886db919d7b0b5e9f2cee0090602001611448565b6001600160a01b038181166000908152600460205260409020541633146135bc57604051634014f1a560e01b815260040160405180910390fd5b33600090815260026020526040902054600160a01b900465ffffffffffff16428110156135fc576040516319aad37160e01b815260040160405180910390fd5b5050336000908152600260205260409020805465ffffffffffff60a01b1916600160a01b179055565b61362d614544565b8061363957600161363c565b60025b601c5560405181151581527f3d7f39af0cf901fec3da1b0ecfab4a0eb553ed671de67850e09cca22848dd866906020015b60405180910390a150565b6001600160a01b038083166000908152600260209081526040808320546003835281842094861684529390915281208054919263ffffffff600160601b909104811692600160a01b900416821415806136e057508054600160c01b900465ffffffffffff1642115b806136f757508054600160f81b900460ff16600114155b1561370757600092505050611528565b546001600160801b0316949350505050565b613721614544565b8061372d576001613730565b60025b60195560405181151581527f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a129060200161366d565b6021546000906001600160a01b0316336001600160a01b03161461379c57604051637c1aebb760e01b815260040160405180910390fd5b6115258383614ac1565b60056137b181613abf565b6001600160a01b03821660009081526008602052604090205460ff166137ea5760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b038216600081815260086020908152604091829020805460ff1916905590519182527fead11242b7eb5b3a03a27edc0039f1305d251bf91b3d1e94c3861c3d6e4ac1289101611448565b613843614544565b600c54156138645760405163e529091f60e01b815260040160405180910390fd5b61389530333060009081526023602052604090205461388e906001906001600160601b0316615b7a565b6000613bae565b6002601a8190556019556138cb6103e87f0000000000000000000000000000000000000000000000000000000000000000615cad565b6001600160601b0316600c556040517f994a0442f4498644e0bb3fe4b4c74ad21fbbb80e04b2fd1cb31f4248796d3dde90600090a1565b61390a614544565b6001600160a01b038116613931576040516366385fa360e01b815260040160405180910390fd5b600080546001600160a01b03169061394a908290614b5b565b613955826001614b5b565b600080546001600160a01b0319166001600160a01b0384811691821783556040519192908416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6139ac614544565b602180546001600160a01b0319166001600160a01b0383161790556139d081612151565b6040516001600160a01b038216907f8ae96d8af35324a34b19e4f33e72d620b502f69595bb43870ab5fd7a7de7823990600090a250565b82613a1181614382565b6021546001600160a01b0316336001600160a01b031614613a4557604051637c1aebb760e01b815260040160405180910390fd5b612c84848484614cec565b6001613a5b81613abf565b6064821080613a6c5750620f424082115b15613a8a5760405163c64200e960e01b815260040160405180910390fd5b60158290556040518281527fe24723968dd1fe95c864bec60a98788d4f02a5a3e1e9e80ccafdee9146ff54c790602001611448565b60016000826008811115613ad557613ad5615c25565b6008811115613ae657613ae6615c25565b81526020019081526020016000206000613afd3390565b6001600160a01b0316815260208101919091526040016000205460ff1661145357604051634014f1a560e01b815260040160405180910390fd5b60006002601a5403613bab57601254479081118015613b645750601554601454613b619190615cec565b43115b15613ba957613b74600a82615a8b565b60135460175491925090811115613b8a57506017545b81811115613b955750805b8015613ba757613ba481614dfe565b92505b505b505b90565b6001600160a01b038416600090815260236020526040812054613bdb9084906001600160601b0316615b7a565b6001600160a01b038616600090815260236020526040812080546001600160601b0319166001600160601b03841617905590915082613c1b576000613c3e565b600d54606490613c34906001600160601b031686615d04565b613c3e9190615cad565b90506000613c4c8286615b7a565b6001600160a01b0387166000908152602360205260409020549091506001600160601b0316613c7b8282615bfa565b6001600160a01b038816600090815260236020526040902080546001600160601b0319166001600160601b03928316179055831615613d01573060009081526023602052604081208054859290613cdc9084906001600160601b0316615bfa565b92506101000a8154816001600160601b0302191690836001600160601b031602179055505b613d0b8482614f39565b6006546001600160a01b0390811690891603613d73576006546040516001600160601b03881681526001600160a01b038981169216907f0e128c83dc42be0b80a07793e5b69c77c3981238a44754802b90d92ae85b3b489060200160405180910390a3613dd7565b6006546001600160a01b0390811690881603613dd7576006546040516001600160601b03881681526001600160a01b038a81169216907f5cd522aff7a2bf4d0c00ba029b9cebb7a25ed4a77695101f28f01f865421d0409060200160405180910390a35b6040516001600160601b03831681526001600160a01b0380891691908a1690600080516020615ddd8339815191529060200160405180910390a35050505050505050565b60006001600160a01b038516613e44576040516366385fa360e01b815260040160405180910390fd5b6001600160a01b038416613e6b576040516366385fa360e01b815260040160405180910390fd5b6001600160801b03831115613e85576001600160801b0392505b6001600160a01b03858116600090815260026020908152604080832060038352818420948916845293909152902080546fffffffffffffffffffffffffffffffff1981166001600160801b0387169081178355835477ffffffff00000000ffffffffffffffffffffffffffffffff1990921617600160601b90910463ffffffff16600160a01b021781558315613f71578154600160901b900461ffff168015613f4357613f3481610e10615d33565b613f3e9042615c60565b613f4b565b65ffffffffffff5b825465ffffffffffff91909116600160c01b0265ffffffffffff60c01b19909116178255505b80546001600160f81b0316600160f81b1781556040516001600160a01b0380881691908916907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590613fc69089815260200190565b60405180910390a35060019695505050505050565b6001600160a01b031660009081526002602052604090205442600160a01b90910465ffffffffffff161190565b8261401281614382565b6001600160a01b038416158061402f57506001600160a01b038316155b1561404d576040516366385fa360e01b815260040160405180910390fd5b8160000361406e57604051635e85ae7360e01b815260040160405180910390fd5b6001600160a01b0384166000908152602460205260409020546001600160601b0316614099856146bd565b6140a39190615d58565b8211156140c3576040516305c2afdf60e21b815260040160405180910390fd5b6001600160a01b03841660009081526008602052604081205460ff168061410257506001600160a01b03841660009081526008602052604090205460ff165b601854909150600214156000614119600c54151590565b6020549091506001600160a01b0390811690878116821490891682148561427857306001600160a01b038a16036141635760405163d9716e4360e01b815260040160405180910390fd5b600c5488111561418657604051631b97a87560e01b815260040160405180910390fd5b836141a4576040516306c3d31f60e51b815260040160405180910390fd5b84156142785781806141b35750805b80156141cd57503260009081526025602052604090205443145b156141eb5760405163e069ee1d60e01b815260040160405180910390fd5b32600090815260256020526040902043905581801561420c57506002601954145b1561427857600f546001600160601b031680614227306146bd565b111561423f5761423f816001600160601b0316614f86565b614247613b37565b15614276576040517fac401825222c905dafef53f897e1fe565e107a9b114737f28ad26c699784bd8d90600090a15b505b83156143105780156142a15787600a60008282546142969190615cec565b909155506143109050565b81156143105787600b60008282546142b99190615cec565b90915550506011548811156143105760006142d5606447615a8b565b9050600060646010546142e89190615a8b565b9050808211156142f6578091505b81601360008282546143089190615cec565b909155505050505b6001868061433657506001600160a01b038a1660009081526009602052604090205460ff165b1561433f575060005b8515614369578615614360576028805463ffffffff19166001179055614369565b6143698a6150e0565b6143758b8b8b84613bae565b5050505050505050505050565b61438b81613fdb565b15611453576040516335543b4960e21b815260040160405180910390fd5b6001600160a01b038316600090815260246020526040812080548492906143da9084906001600160601b0316615b7a565b92506101000a8154816001600160601b0302191690836001600160601b031602179055508015611d28576040516001600160601b03831681526001600160a01b038416907fbedcdd66d86f5dc81286de7b36cc38398208ffb595a3e95330fca4fb21f08cba9060200160405180910390a26040516001600160601b03831681526001600160a01b038416908190600080516020615ddd833981519152906020015b60405180910390a3505050565b6144928484614845565b60215460405163238d3a8f60e11b81526001600160a01b038681166004830152602482018490529091169063471a751e90604401600060405180830381600087803b1580156144e057600080fd5b505af11580156144f4573d6000803e3d6000fd5b5050604080516001600160601b038716815260ff861660208201526001600160a01b03881693507ff4476f182b22aa6860f6aea0edf736040fd43167d941069fadffe4aef18ef728925001611508565b6000546001600160a01b0316331461456f57604051632e6c18c960e11b815260040160405180910390fd5b565b6001600160a01b038216614598576040516366385fa360e01b815260040160405180910390fd5b6001600160a01b038084166000818152600360209081526040808320948716835293815283822092825260029052919091208215614678578054600160801b900461ffff1660008115614604576145f182610e10615d6f565b6145ff9061ffff1642615c60565b61460c565b65ffffffffffff5b8354855460ff60f01b1965ffffffffffff909316600160c01b0265ffffffffffff60c01b19600160801b63ffffffff600160401b9095049490941693909302929092166dffffffffffff00000000ffffffff60801b19909116171716600160f01b17845550611eeb9050565b5481546eff00000000000000000000ffffffff60801b1916600160801b600160401b90920463ffffffff90811660001901169190910260ff60f01b1916179055505050565b6001600160a01b03166000908152602360205260409020546001600160601b031690565b602754600160601b90046001600160a01b03163214158061471757506026546001600160a01b03838116600160601b9092041614155b15614720575050565b600080614735846001600160a01b0316615223565b90925090506001600160a01b03811661474e5750505050565b6000306001600160a01b0383160361476b57508190506001614782565b6001600160a01b0383163014614782575050505050565b6040516370a0823160e01b81526001600160a01b038681166004830152600091908416906370a0823190602401602060405180830381865afa1580156147cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147f09190615ba2565b6026549091506001600160601b03166dffffffffffffffffffffffffffff861611801561482757506027546001600160601b031681115b1561297f5760405163878d636360e01b815260040160405180910390fd5b6001600160a01b0382166000908152602460205260408120546148729083906001600160601b0316615bfa565b905061487d836146bd565b816001600160601b031611156148a6576040516305c2afdf60e21b815260040160405180910390fd5b6001600160a01b03831660008181526024602090815260409182902080546001600160601b0319166001600160601b0386811691909117909155915191851682528291600080516020615ddd833981519152910161447b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461494c576040519150601f19603f3d011682016040523d82523d6000602084013e614951565b606091505b5050905080611d285760405163b5747cc760e01b815260040160405180910390fd5b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af11580156149c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149e69190615abc565b50816001600160a01b0316836001600160a01b03167ff217402c85197de87cd806653771027d1e91101ef79ab35684a580c62b91a9b58360405161447b91815260200190565b80156114535760215460405163d9fbb1e960e01b8152600481018390526001600160a01b039091169063d9fbb1e990602401600060405180830381600087803b158015614a7857600080fd5b505af1158015614a8c573d6000803e3d6000fd5b505050507fd3be3dbc076afa976ee7dfe1f596f6d7905e9441a1a426a244a12ef071272dd48160405161366d91815260200190565b6001600160a01b038083166000908152600260209081526040808320546003835281842094861684529390915281208054919263ffffffff600160401b909104811692600160801b90041682141580614b2957508054600160c01b900465ffffffffffff1642115b80614b4057508054600160f01b900460ff16600114155b15614b5057600092505050611528565b506001949350505050565b6001600160a01b039190911660009081527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f60209081526040808320805494151560ff1995861681179091557fd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f835281842080548616821790557f7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b835281842080548616821790557fedc95719e9a3b28dd8e80877cb5880a9be7de1a13fc8b05e7999683b6b567643835281842080548616821790557fe2689cd4a84e23ad2f564004f1c9013e9589d260bde6380aba3ca7e09e4df40c835281842080548616821790557f8f331abe73332f95a25873e8b430885974c0409691f89d643119a11623a7924a835281842080548616821790557fdc686ec4a0ff239c70e7c7c36e8f853eced3bc8618f48d2b816da2a74311237e835281842080548616821790557f4db623e5c4870b62d3fc9b4e8f893a1a77627d75ab45d9ff7e56ba19564af99b9092529091208054909216179055565b614cf8838260006143a9565b6001600160a01b038316600090815260236020526040812054614d259083906001600160601b0316615b7a565b6001600160a01b0385811660009081526023602052604080822080546001600160601b0319166001600160601b0386811691909117909155928716825290205491925016614d738382615bfa565b6001600160a01b038516600090815260236020526040902080546001600160601b0319166001600160601b0392909216919091179055614db38484614845565b614dbd8282614f39565b6040516001600160601b03841681526001600160a01b038086169190871690600080516020615ddd8339815191529060200160405180910390a35050505050565b6000600260185403614e0f57600080fd5b60026018556016546013558115614f2f57602154600090614e38906001600160a01b03166146bd565b601f5460215460405163f43ae45b60e01b81526001600160a01b03928316600482015291166024820152604481018590529091507399fe7b37639ae33d0f15f61f4288a2fc9cff7bc19063f43ae45b9060640160006040518083038186803b158015614ea357600080fd5b505af4158015614eb7573d6000803e3d6000fd5b505060215460009250839150614ed5906001600160a01b03166146bd565b614edf9190615d58565b60408051868152602081018390529192507f3967d46c5aa65ced73be27b4c6d249e552274da7a605101a66ef571a8e2608a4910160405180910390a143601455614f2881614a2c565b6001925050505b6001601855919050565b602254806001600160601b038416600003614f5a57614f5781615d90565b90505b826001600160601b0316600003614f7757614f7481615da7565b90505b808214612c8457602255505050565b600260185403614f9557600080fd5b6002601855601f544790614fb69030906001600160a01b0316846001613e1b565b50816001600160601b0316601e6000828254614fd29190615cec565b9091555050601f54604051637041046d60e01b81526001600160a01b039091166004820152602481018390527399fe7b37639ae33d0f15f61f4288a2fc9cff7bc190637041046d9060440160006040518083038186803b15801561503557600080fd5b505af4158015615049573d6000803e3d6000fd5b505050506000814761505b9190615d58565b60408051858152602081018390529192507f1d835182508bc46cfe26167d5d6ca20231bf92fb2ee0d558d40553b29a40fdf9910160405180910390a1600d54600e546001600160601b03909116906150b39083615a56565b6150bd9190615a8b565b6005549091506150d6906001600160a01b0316826148ff565b5050600160185550565b60006150eb826146bd565b9050600080615102846001600160a01b0316615223565b9092509050306001600160a01b0382160361511a5750805b6001600160a01b03811661513e5750506028805463ffffffff191660011790555050565b6040516370a0823160e01b81526001600160a01b038581166004830152600091908316906370a0823190602401602060405180830381865afa158015615188573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906151ac9190615ba2565b6040805160a0810182526001600160601b039687168082526001600160a01b0398909816602082018190529290961690860181905232606087018190524363ffffffff166080909701879052600160601b928302909717602655950290941760275550506028805463ffffffff1916909117905550565b6000806001600160a01b0383163b61524057506000928392509050565b6040805160048152602481019091526020810180516001600160e01b0316630dfe168160e01b1790526152749084906152b1565b6040805160048152602481019091526020810180516001600160e01b031663d21220a760e01b1790526152a89085906152b1565b91509150915091565b6000806000846001600160a01b0316846040516152ce9190615dc0565b600060405180830381855afa9150503d8060008114615309576040519150601f19603f3d011682016040523d82523d6000602084013e61530e565b606091505b509150915081801561532257506020815110155b15615344578080602001905181019061533b9190615a9f565b92505050611528565b506000949350505050565b60005b8381101561536a578181015183820152602001615352565b83811115612c845750506000910152565b602081526000825180602084015261539a81604085016020870161534f565b601f01601f19169190910160400192915050565b801515811461145357600080fd5b600080604083850312156153cf57600080fd5b82356153da816153ae565b915060208301356153ea816153ae565b809150509250929050565b6001600160a01b038116811461145357600080fd5b6000806040838503121561541d57600080fd5b8235615428816153f5565b946020939093013593505050565b60006020828403121561544857600080fd5b8135615453816153f5565b9392505050565b6001600160601b038116811461145357600080fd5b60006020828403121561548157600080fd5b81356154538161545a565b6000806000606084860312156154a157600080fd5b83356154ac816153f5565b925060208401356154bc816153f5565b929592945050506040919091013590565b6000602082840312156154df57600080fd5b8135615453816153ae565b600080604083850312156154fd57600080fd5b50508035926020909101359150565b80356009811061551b57600080fd5b919050565b6000806040838503121561553357600080fd5b61553c8361550c565b915060208301356153ea816153f5565b60ff8116811461145357600080fd5b803565ffffffffffff8116811461551b57600080fd5b60008060008060008060c0878903121561558a57600080fd5b8635615595816153f5565b955060208701356155a58161545a565b945060408701356155b58161554c565b93506155c36060880161555b565b925060808701356155d38161545a565b915060a08701356155e3816153ae565b809150509295509295509295565b60008060006060848603121561560657600080fd5b8335615611816153f5565b92506020840135615621816153f5565b91506040840135615631816153ae565b809150509250925092565b803561ffff8116811461551b57600080fd5b6000806040838503121561566157600080fd5b61566a8361563c565b91506156786020840161563c565b90509250929050565b6000806040838503121561569457600080fd5b823561569f8161545a565b915060208301356153ea8161554c565b600080604083850312156156c257600080fd5b8235915060208301356153ea816153ae565b6000602082840312156156e657600080fd5b5035919050565b6000806040838503121561570057600080fd5b823561553c816153f5565b6000806040838503121561571e57600080fd5b8235615729816153f5565b915060208301356153ea8161545a565b6000806040838503121561574c57600080fd5b8235915060208301356153ea8161545a565b6000806040838503121561577157600080fd5b823561577c816153f5565b91506156786020840161550c565b60008060006060848603121561579f57600080fd5b8335925060208401356156218161545a565b6000602082840312156157c357600080fd5b6115258261555b565b6000806000606084860312156157e157600080fd5b83356157ec816153f5565b95602085013595506040909401359392505050565b60008060008060008060c0878903121561581a57600080fd5b8635615825816153f5565b955060208701356158358161545a565b945060408701356158458161545a565b935060608701356158558161554c565b92506158636080880161555b565b915060a08701356155e38161545a565b6000806040838503121561588657600080fd5b8235615891816153f5565b91506156786020840161555b565b600080600080600080600060e0888a0312156158ba57600080fd5b87356158c5816153f5565b965060208801356158d5816153f5565b9550604088013594506060880135935060808801356158f38161554c565b9699959850939692959460a0840135945060c09093013592915050565b60008060006060848603121561592557600080fd5b8335615930816153f5565b92506020840135615940816153f5565b915060408401356156318161545a565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156159a157816000190482111561598757615987615950565b8085161561599457918102915b93841c939080029061596b565b509250929050565b6000826159b857506001611528565b816159c557506000611528565b81600181146159db57600281146159e557615a01565b6001915050611528565b60ff8411156159f6576159f6615950565b50506001821b611528565b5060208310610133831016604e8410600b8410161715615a24575081810a611528565b615a2e8383615966565b8060001904821115615a4257615a42615950565b029392505050565b600061152583836159a9565b6000816000190483118215151615615a7057615a70615950565b500290565b634e487b7160e01b600052601260045260246000fd5b600082615a9a57615a9a615a75565b500490565b600060208284031215615ab157600080fd5b8151615453816153f5565b600060208284031215615ace57600080fd5b8151615453816153ae565b600060208284031215615aeb57600080fd5b81516154538161545a565b6001600160a01b039790971687526001600160601b03958616602088015260ff94909416604087015265ffffffffffff9290921660608601528316608085015290911660a0830152151560c082015260e00190565b805163ffffffff8116811461551b57600080fd5b600060208284031215615b7157600080fd5b61152582615b4b565b60006001600160601b0383811690831681811015615b9a57615b9a615950565b039392505050565b600060208284031215615bb457600080fd5b5051919050565b600080600060608486031215615bd057600080fd5b615bd984615b4b565b92506020840151615be98161545a565b60408501519092506156318161554c565b60006001600160601b03808316818516808303821115615c1c57615c1c615950565b01949350505050565b634e487b7160e01b600052602160045260246000fd5b600065ffffffffffff80841680615c5457615c54615a75565b92169190910492915050565b600065ffffffffffff808316818516808303821115615c1c57615c1c615950565b60008060408385031215615c9457600080fd5b615c9d83615b4b565b915060208301516153ea8161545a565b60006001600160601b0380841680615c5457615c54615a75565b600060ff821660ff84168060ff03821115615ce457615ce4615950565b019392505050565b60008219821115615cff57615cff615950565b500190565b60006001600160601b0380831681851681830481118215151615615d2a57615d2a615950565b02949350505050565b600065ffffffffffff80831681851681830481118215151615615d2a57615d2a615950565b600082821015615d6a57615d6a615950565b500390565b600061ffff80831681851681830481118215151615615d2a57615d2a615950565b600081615d9f57615d9f615950565b506000190190565b600060018201615db957615db9615950565b5060010190565b60008251615dd281846020870161534f565b919091019291505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122091e982e5bd4e999830b5c60ea202a439612419afc9a698006fb4989473cf752364736f6c634300080d00330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x6080604052600436106104fb5760003560e01c806370d5ae051161028c578063c0316ffe1161015a578063d98daa43116100cc578063ea2f0b3711610085578063ea2f0b371461125f578063ecc684a81461127f578063f2fde38b14611294578063f4e0d9ac146112b4578063f5dc51ec146112d4578063fa25e2de146112f457600080fd5b8063d98daa431461119f578063d9cd78f4146111bf578063da5fcc9f146111df578063dd62ed3e146111ff578063e01af92c1461121f578063e985e9c51461123f57600080fd5b8063cf913db91161011e578063cf913db9146110c6578063d1bdac24146110ff578063d505accf1461111f578063d6e03cd41461113f578063d921cd761461115f578063d96d54d81461117f57600080fd5b8063c0316ffe14611030578063c27afefc14611050578063c38c3ee614611070578063ca5f084f14611090578063cc5ba480146110a657600080fd5b80639bbe0533116101fe578063b22a6389116101b7578063b22a638914610f7a578063b51d404214610f9a578063b5d0abfd14610fba578063b971383a14610fda578063b9e5a03b14610ffa578063bfa1c45e1461101057600080fd5b80639bbe053314610ec2578063a63b91f414610ee2578063a9059cbb14610efa578063aefac34d14610f1a578063af1b597e14610f3a578063af77474414610f5a57600080fd5b80638a60c4c1116102505780638a60c4c114610de55780638aee2c2714610e055780638da5cb5b14610e255780638db2063b14610e4557806395d89b4114610e5a57806398118cb414610e8a57600080fd5b806370d5ae0514610d3b578063774a081014610d5b5780637d84ed2614610d705780637ecebe0014610d905780638188f71c14610dd057600080fd5b8063367605ca116103c95780634f27ec3e1161033b5780635f7e3821116102f45780635f7e382114610c6c5780635f898ce814610c8c578063601fdff314610cac5780636053a0e314610ceb5780636ddd171314610d0357806370a0823114610d1b57600080fd5b80634f27ec3e146109bc57806351ed6a30146109dc5780635342acb4146109fc57806355b6ed5c14610a3557806357976fb414610b045780635d0341ba14610b1c57600080fd5b806341cb87fc1161038d57806341cb87fc1461090657806341e70fa614610926578063437823ec1461093c578063445e76881461095c57806349bd5a5e1461097c5780634b0e72161461099c57600080fd5b8063367605ca1461087d57806336b1db151461089d578063379f96da146108bd578063410d3e67146108d0578063415e9718146108e657600080fd5b806320606b701161046d5780632b0e1d79116104265780632b0e1d79146107ad5780632b9afa03146107cd57806330adf81f146107ed578063313ce567146108215780633477320c146108485780633644e5151461086857600080fd5b806320606b70146106be57806323b872dd146106f257806326a17edf1461071257806329370cc61461073257806329d9ec5e146107525780632a49b6841461077257600080fd5b80630e59d5b7116104bf5780630e59d5b7146105d15780631551fe91146105e957806316758e0b146106095780631694505e1461062057806318160ddd146106585780631f5e98bb1461069e57600080fd5b806306fdde03146105075780630844c97f1461054a57806308792b1414610561578063095ea7b3146105815780630c0c91a2146105b157600080fd5b3661050257005b600080fd5b34801561051357600080fd5b50604080518082019091526008815267457665725269736560c01b60208201525b604051610541919061537b565b60405180910390f35b34801561055657600080fd5b5061055f611314565b005b34801561056d57600080fd5b5061055f61057c3660046153bc565b611456565b34801561058d57600080fd5b506105a161059c36600461540a565b611516565b6040519015158152602001610541565b3480156105bd57600080fd5b506105a16105cc366004615436565b61152e565b3480156105dd57600080fd5b50601c546002146105a1565b3480156105f557600080fd5b5061055f61060436600461546f565b611539565b34801561061557600080fd5b50600c5415156105a1565b34801561062c57600080fd5b50601f54610640906001600160a01b031681565b6040516001600160a01b039091168152602001610541565b34801561066457600080fd5b507f0000000000000000000000000000000000000000e7690c99f24eca66ba9000006001600160601b03165b604051908152602001610541565b3480156106aa57600080fd5b5061055f6106b936600461546f565b6115df565b3480156106ca57600080fd5b506106907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b3480156106fe57600080fd5b506105a161070d36600461548c565b611663565b34801561071e57600080fd5b5061055f61072d3660046154cd565b6116bb565b34801561073e57600080fd5b5061055f61074d3660046154cd565b61170a565b34801561075e57600080fd5b5061055f61076d3660046154ea565b611759565b34801561077e57600080fd5b506105a161078d366004615520565b600160209081526000928352604080842090915290825290205460ff1681565b3480156107b957600080fd5b5061055f6107c836600461540a565b6117ee565b3480156107d957600080fd5b506106906107e8366004615571565b611a8a565b3480156107f957600080fd5b506106907f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b34801561082d57600080fd5b50610836601281565b60405160ff9091168152602001610541565b34801561085457600080fd5b5061055f610863366004615436565b611bb3565b34801561087457600080fd5b50610690611c0e565b34801561088957600080fd5b5061055f6108983660046155f1565b611ce9565b3480156108a957600080fd5b5061055f6108b836600461564e565b611d2d565b61055f6108cb366004615681565b611db7565b3480156108dc57600080fd5b50610690600c5481565b3480156108f257600080fd5b5061055f6109013660046154ea565b611ef2565b34801561091257600080fd5b5061055f610921366004615436565b611f7a565b34801561093257600080fd5b50610690600b5481565b34801561094857600080fd5b5061055f610957366004615436565b612151565b34801561096857600080fd5b5061055f6109773660046156af565b6121ea565b34801561098857600080fd5b50602054610640906001600160a01b031681565b3480156109a857600080fd5b5061055f6109b7366004615436565b6122f7565b3480156109c857600080fd5b5061055f6109d73660046156d4565b61234d565b3480156109e857600080fd5b50602154610640906001600160a01b031681565b348015610a0857600080fd5b506105a1610a17366004615436565b6001600160a01b031660009081526008602052604090205460ff1690565b348015610a4157600080fd5b50610ab6610a503660046156ed565b60036020908152600092835260408084209091529082529020546001600160801b0381169063ffffffff600160801b8204811691600160a01b81049091169065ffffffffffff600160c01b8204169060ff600160f01b8204811691600160f81b90041686565b604080516001600160801b03909716875263ffffffff9586166020880152949093169385019390935265ffffffffffff16606084015260ff91821660808401521660a082015260c001610541565b348015610b1057600080fd5b50601b546002146105a1565b348015610b2857600080fd5b50610bf8610b37366004615436565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506001600160a01b0316600090815260026020908152604091829020825160c081018452905467ffffffffffffffff8116825263ffffffff600160401b8204811693830193909352600160601b81049092169281019290925261ffff600160801b820481166060840152600160901b820416608083015265ffffffffffff600160a01b9091041660a082015290565b6040516105419190600060c08201905067ffffffffffffffff8351168252602083015163ffffffff80821660208501528060408601511660408501525050606083015161ffff8082166060850152806080860151166080850152505065ffffffffffff60a08401511660a083015292915050565b348015610c7857600080fd5b50600554610640906001600160a01b031681565b348015610c9857600080fd5b506105a1610ca736600461570b565b6123b9565b348015610cb857600080fd5b50610690610cc7366004615436565b6001600160a01b03166000908152602460205260409020546001600160601b031690565b348015610cf757600080fd5b50601a546002146105a1565b348015610d0f57600080fd5b506019546002146105a1565b348015610d2757600080fd5b50610690610d36366004615436565b6123dd565b348015610d4757600080fd5b50600754610640906001600160a01b031681565b348015610d6757600080fd5b5061055f612480565b348015610d7c57600080fd5b5061055f610d8b366004615739565b6124bc565b348015610d9c57600080fd5b50610690610dab366004615436565b6001600160a01b031660009081526002602052604090205467ffffffffffffffff1690565b348015610ddc57600080fd5b50602254610690565b348015610df157600080fd5b5061055f610e003660046156d4565b612609565b348015610e1157600080fd5b5061055f610e203660046154ea565b61261b565b348015610e3157600080fd5b50600054610640906001600160a01b031681565b348015610e5157600080fd5b506106906126a4565b348015610e6657600080fd5b50610534604051806040016040528060048152602001635249534560e01b81525081565b348015610e9657600080fd5b50600d54610eaa906001600160601b031681565b6040516001600160601b039091168152602001610541565b348015610ece57600080fd5b5061055f610edd36600461575e565b6126c1565b348015610eee57600080fd5b50601d546002146105a1565b348015610f0657600080fd5b506105a1610f1536600461540a565b6127c8565b348015610f2657600080fd5b50600654610640906001600160a01b031681565b348015610f4657600080fd5b5061055f610f553660046154cd565b6127de565b348015610f6657600080fd5b5061055f610f7536600461578a565b61282d565b348015610f8657600080fd5b5061055f610f953660046157b1565b612987565b348015610fa657600080fd5b5061055f610fb53660046154ea565b612abc565b348015610fc657600080fd5b5061055f610fd5366004615436565b612b47565b348015610fe657600080fd5b5061055f610ff53660046157cc565b612b9f565b34801561100657600080fd5b50610690600a5481565b34801561101c57600080fd5b5061069061102b366004615801565b612c8a565b34801561103c57600080fd5b5061055f61104b36600461575e565b612d7b565b34801561105c57600080fd5b5061055f61106b36600461548c565b612e83565b34801561107c57600080fd5b5061055f61108b366004615873565b612ebd565b34801561109c57600080fd5b50610690600e5481565b3480156110b257600080fd5b5061055f6110c1366004615739565b612fbf565b3480156110d257600080fd5b506105a16110e1366004615436565b6001600160a01b031660009081526009602052604090205460ff1690565b34801561110b57600080fd5b5061055f61111a3660046156d4565b6130e7565b34801561112b57600080fd5b5061055f61113a36600461589f565b61317d565b34801561114b57600080fd5b506105a161115a36600461589f565b61340d565b34801561116b57600080fd5b5061055f61117a366004615436565b613435565b34801561118b57600080fd5b5061055f61119a366004615436565b61348a565b3480156111ab57600080fd5b5061055f6111ba3660046156d4565b613507565b3480156111cb57600080fd5b5061055f6111da366004615436565b613582565b3480156111eb57600080fd5b5061055f6111fa3660046154cd565b613625565b34801561120b57600080fd5b5061069061121a3660046156ed565b613678565b34801561122b57600080fd5b5061055f61123a3660046154cd565b613719565b34801561124b57600080fd5b506105a161125a3660046156ed565b613765565b34801561126b57600080fd5b5061055f61127a366004615436565b6137a6565b34801561128b57600080fd5b5061055f61383b565b3480156112a057600080fd5b5061055f6112af366004615436565b613902565b3480156112c057600080fd5b5061055f6112cf366004615436565b6139a4565b3480156112e057600080fd5b5061055f6112ef366004615910565b613a07565b34801561130057600080fd5b5061055f61130f3660046156d4565b613a50565b600761131f81613abf565b611327613b37565b15611356576040517f6a436cd4d025d81a64b65845b219f011a8406fee86f3a2d737f274d94e268de190600090a15b6002601d540361145357600f54601e546001600160601b039091169081101561145157601e80546001600160601b038316900390556020546007546113aa916001600160a01b039081169116836000613bae565b602060009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156113fa57600080fd5b505af115801561140e573d6000803e3d6000fd5b50506040516001600160601b03841681527fbaf2a973da603337d11f56e6730fba6606e95b5e8085627c9ead4d24672d8616925060200190505b60405180910390a15b505b50565b3360008181526002602052604090208215611499578054600163ffffffff600160401b80840482169290920116026bffffffff0000000000000000199091161781555b83156114c8578054600163ffffffff600160601b808404821692909201160263ffffffff60601b199091161781555b60408051851515815284151560208201526001600160a01b038416917f5c20d5f19f8c6bc73cb1cba38e0b27f3837b43909d18a4ef193d1fa3c6f8f0d491015b60405180910390a250505050565b60006115253384846001613e1b565b90505b92915050565b600061152882613fdb565b600461154481613abf565b633b9aca00826001600160601b031611156115725760405163c64200e960e01b815260040160405180910390fd5b61157e6012600a615a4a565b611591906001600160601b038416615a56565b600f80546001600160601b0319166001600160601b0392831617905560405190831681527f5948780118f41f7c4577ae4619d5cbd064057bd8562d9f7b7e60324053375c0090602001611448565b60046115ea81613abf565b600a826001600160601b031611156116155760405163c64200e960e01b815260040160405180910390fd5b600d80546001600160601b0319166001600160601b0384169081179091556040519081527f5597c0e02a719eddde3b801d7abc15c0023afdcf6880c1e254427559820083c290602001611448565b6000611670848484614008565b600061167c8533613678565b90508083111561169f57604051639b144c5760e01b815260040160405180910390fd5b8290036116af8533836000613e1b565b50600195945050505050565b60046116c681613abf565b816116d25760016116d5565b60025b601b5560405182151581527fff33d24fddcb9b99aca93607453cdcbd7aa449ae3ea8a9f69421881c7eae81c990602001611448565b600161171581613abf565b81611721576001611724565b60025b601a5560405182151581527f3794234fa370c9f3b948dda3e3040530785b2ef1eb27dda3ffde478f4e2643c090602001611448565b600161176481613abf565b633b9aca008311156117895760405163c64200e960e01b815260040160405180910390fd5b61179482600a615a4a565b6117a684670de0b6b3a7640000615a56565b6117b09190615a8b565b60108190556040519081527fcc06eb9a0c57a5ee1100a0e2e4029558c04ff3b2a110a881ac9700cffed1a824906020015b60405180910390a1505050565b60026117f981613abf565b3360215460405163020604bf60e21b8152600481018590526001600160a01b03928316929091169063081812fc90602401602060405180830381865afa158015611847573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186b9190615a9f565b6001600160a01b03161415801561190157506021546001600160a01b031663e985e9c5336040516001600160e01b031960e084901b1681526001600160a01b0391821660048201529086166024820152604401602060405180830381865afa1580156118db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ff9190615abc565b155b1561191f57604051634014f1a560e01b815260040160405180910390fd5b61192883614382565b602154604051632b0e1d7960e01b81526001600160a01b038581166004830152602482018590526000921690632b0e1d79906044016020604051808303816000875af115801561197c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a09190615ad9565b90506119ae848260016143a9565b6006546119c89085906001600160a01b0316836000613bae565b60215460405163632abfe960e11b81526001600160a01b038681166004830152602482018690529091169063c6557fd290604401600060405180830381600087803b158015611a1657600080fd5b505af1158015611a2a573d6000803e3d6000fd5b5050600654604080518781526001600160601b03861660208201526001600160a01b038981169550909216925030917fe0bf1306ae80358ba075e7e155d3d3100bd1cb7245f654f111d39453f756356a910160405180910390a450505050565b60006002611a9781613abf565b60215460405163153d88f360e11b81526001600160a01b0390911690632a7b11e690611ad4908b908b908b908b908b906000908c90600401615af6565b6020604051808303816000875af1158015611af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b179190615b5f565b63ffffffff1691506000611b2b8589615b7a565b600654909150611b47906001600160a01b03168a836000613bae565b611b5389828986614488565b600654604080518581526001600160601b03841660208201526001600160a01b038c811693169130917f339e4100371ca3951325b190c421cb3c67f09635d57fc14e6aacfcb52d387329910160405180910390a450509695505050505050565b611bbb614544565b611bc481612151565b600680546001600160a01b0319166001600160a01b0383169081179091556040517f1501eda19b56071bf17a0a32e2efdeb611ccec1e2da5c7612bf674204901ce7a90600090a250565b3360009081526002602090815260409182902054825180840184526008815267457665725269736560c01b908301528251600160601b90910460e01b6001600160e01b03191681830152825180820360040181526024820184528051908301207f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60448301527fce794fa9785f2c930c5f814f254aa188dca4e3e9bde647a87f3a0c8d20d90736606483015260848201524660a48201523060c4808301919091528351808303909101815260e4909101909252815191012090565b6021546001600160a01b0316336001600160a01b031614611d1d57604051637c1aebb760e01b815260040160405180910390fd5b611d28838383614571565b505050565b6000336001600160a01b038116600081815260026020908152604091829020805463ffffffff60801b1916600160801b61ffff89811691820261ffff60901b191692909217600160901b928b169283021783558451918252928101929092529394507f6d8d587cf6c6d60a0dcd1fa635969d1d69787cfdf26d9f83ebaba44408fc1d2d9101611508565b33611dc181614382565b602154604080516305f00a1f60e21b8152905133926001600160a01b0316916317c0287c9160048083019260209291908290030181865afa158015611e0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2e9190615ba2565b341015611e4e5760405163627554ed60e01b815260040160405180910390fd5b60215460405163615eaa5960e01b81526001600160a01b0383811660048301526001600160601b038716602483015260ff86166044830152600092169063615eaa59906064016020604051808303816000875af1158015611eb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed79190615b5f565b9050611eeb8286868463ffffffff16614488565b5050505050565b6001611efd81613abf565b6103e8831115611f205760405163c64200e960e01b815260040160405180910390fd5b611f2b82600a615a4a565b611f3d84670de0b6b3a7640000615a56565b611f479190615a8b565b6016556040518381527f2d2d4e5324f4ce25e3d52eea5f16c64ccd01d35f9f80f30b73346811cc9b951d906020016117e1565b6004611f8581613abf565b6001600160a01b038216611fac576040516366385fa360e01b815260040160405180910390fd5b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120139190615a9f565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612060573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120849190615a9f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156120cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f39190615a9f565b602080546001600160a01b03199081166001600160a01b0393841617909155601f8054909116838316179055604051908416907fafec26814d7c5e0716cdb68343bdf123509d8bae8a1a877de1c3869411985c5590600090a2505050565b600561215c81613abf565b6001600160a01b03821660009081526008602052604090205460ff16156121965760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b038216600081815260086020908152604091829020805460ff1916600117905590519182527f7168e8adb718597b3ac83e2dfe415bea8ebaabb57fe933ffac2e0ed93b80718e9101611448565b336121f481614382565b60003360215460405163d22d6f4360e01b81526001600160a01b0380841660048301526024820188905286151560448301529293506000929091169063d22d6f43906064016020604051808303816000875af1158015612258573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061227c9190615ad9565b905061228a828260016143a9565b60215460405163632abfe960e11b81526001600160a01b038481166004830152602482018890529091169063c6557fd290604401600060405180830381600087803b1580156122d857600080fd5b505af11580156122ec573d6000803e3d6000fd5b505050505050505050565b600461230281613abf565b600780546001600160a01b0319166001600160a01b0384169081179091556040517f6feb2294766fb161940a49b92df0ad4a47ffb6ef8255e0b9f80c8c05b7ec6b0f90600090a25050565b600461235881613abf565b600d546001600160601b03168211156123845760405163c64200e960e01b815260040160405180910390fd5b600e8290556040518281527f160ad92b724bb5157ba7574b379ecc4ec5a5f5220cd651c3b44b4b1c12332b1190602001611448565b600060086123c681613abf565b6123d33085856000613bae565b5060019392505050565b6006546000906001600160a01b0383811691161480156123ff57506002601c54145b1561240c57506000919050565b6000612417836146bd565b905060026018541415801561243757506028544363ffffffff9081169116145b801561244c57506001600160a01b0383163b15155b801561247157506001600160a01b03831660009081526008602052604090205460ff16155b156115285761152883826146e1565b600461248b81613abf565b6001601e556040517f38e9e1bdbb19e199e2318a4fdd4145df21973acc643c88012128eeb61a386c6090600090a150565b336124c681614382565b336124d18184614845565b60215460405163e2c281db60e01b81526001600160a01b038381166004830152602482018790526001600160601b0386166044830152600092839291169063e2c281db906064016060604051808303816000875af1158015612537573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061255b9190615bbb565b6040516001600160601b03831681529094509092506001600160a01b03851691507fbedcdd66d86f5dc81286de7b36cc38398208ffb595a3e95330fca4fb21f08cba9060200160405180910390a26001600160a01b0383167ff4476f182b22aa6860f6aea0edf736040fd43167d941069fadffe4aef18ef7286125de8784615bfa565b604080516001600160601b03909216825260ff861660208301520160405180910390a2505050505050565b612611614544565b61145333826148ff565b600161262681613abf565b620f424083111561264a5760405163c64200e960e01b815260040160405180910390fd5b61265582600a615a4a565b61266784670de0b6b3a7640000615a56565b6126719190615a8b565b6017556040518381527fb25c7820d9392eafa2a90c45ca6438ae395e13490da78f2e2c77168cbb951534906020016117e1565b6006546000906126bc906001600160a01b03166146bd565b905090565b6126c9614544565b60008160088111156126dd576126dd615c25565b036126fa576040516252b55360e31b815260040160405180910390fd5b6001600160a01b038216612721576040516366385fa360e01b815260040160405180910390fd5b600180600083600881111561273857612738615c25565b600881111561274957612749615c25565b8152602080820192909252604090810160009081206001600160a01b03871682529092529020805460ff191691151591909117905580600881111561279057612790615c25565b6040516001600160a01b038416907fda7159b01021254a0864c86d0163ad02e9f9ce045913f19dc9315ce339a7270a90600090a35050565b60006127d5338484614008565b50600192915050565b60046127e981613abf565b816127f55760016127f8565b60025b601d5560405182151581527f381a2ba311289fc64532188b12030ca4ad77b2dc7c3a88ab03bacbf13da52a1c90602001611448565b3361283781614382565b600033602154604051632af7e50d60e21b81526001600160a01b038084166004830152602482018990526001600160601b038816604483015286151560648301529293506000929091169063abdf9434906084016020604051808303816000875af11580156128aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ce9190615b5f565b90506001600160601b038516156128eb576128eb828660016143a9565b8063ffffffff168614158015612906575063ffffffff811615155b1561297f57602154604051630b40697b60e31b81526001600160a01b0384811660048301526024820189905263ffffffff8416604483015290911690635a034bd8906064015b600060405180830381600087803b15801561296657600080fd5b505af115801561297a573d6000803e3d6000fd5b505050505b505050505050565b6312cc03006129996201518083615c3b565b65ffffffffffff1611156129c057604051635b30744d60e11b815260040160405180910390fd5b33600090815260026020526040902054600160a01b900465ffffffffffff1642811015612a00576040516319aad37160e01b815260040160405180910390fd5b6000612a0c8342615c60565b90508065ffffffffffff168265ffffffffffff161115612a3f57604051636badcecf60e01b815260040160405180910390fd5b336000818152600260205260409020805465ffffffffffff60a01b1916600160a01b65ffffffffffff85160217905560405165ffffffffffff851681526001600160a01b0391909116907f402f92847e995eb87d15fd380cf11ec5c61ca69a5f6cd305fd26cd1cb6a41757906020015b60405180910390a2505050565b6001612ac781613abf565b620186a0831115612aeb5760405163c64200e960e01b815260040160405180910390fd5b612af682600a615a4a565b612b0884670de0b6b3a7640000615a56565b612b129190615a8b565b60128190556040519081527fac218d80006936a5fb23226f25ffed76cd856dbcc539b7dd7a8abb5a418a8da4906020016117e1565b6006612b5281613abf565b6001600160a01b038216600081815260096020526040808220805460ff19166001179055517f07eccb5a6343032639dc3f1a913d254583bf745e350cdaa19ffc2b4cc2ebff6b9190a25050565b6001600160a01b03831660009081527fd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f602052604090205460ff16612bf75760405163d9716e4360e01b815260040160405180910390fd5b6021546001600160a01b031663e1f21c67336040516001600160e01b031960e084901b1681526001600160a01b039182166004820152908616602482015260448101859052606401600060405180830381600087803b158015612c5957600080fd5b505af1158015612c6d573d6000803e3d6000fd5b50505050612c84612c7b3390565b84836001613e1b565b50505050565b60006008612c9781613abf565b60215460405163153d88f360e11b81526001600160a01b0390911690632a7b11e690612cd4908b908a908a908a908a908f90600090600401615af6565b6020604051808303816000875af1158015612cf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d179190615b5f565b63ffffffff1691506000612d2b8488615b7a565b9050612d3a308a836000613bae565b6001600160601b03881615612d6357602154612d639030906001600160a01b03168a6000613bae565b612d6f89828886614488565b50509695505050505050565b612d83614544565b6000816008811115612d9757612d97615c25565b03612db4576040516252b55360e31b815260040160405180910390fd5b6001600160a01b038216612ddb576040516366385fa360e01b815260040160405180910390fd5b600060016000836008811115612df357612df3615c25565b6008811115612e0457612e04615c25565b8152602080820192909252604090810160009081206001600160a01b03871682529092529020805460ff1916911515919091179055806008811115612e4b57612e4b615c25565b6040516001600160a01b038416907f99b197980951aeda56a24210ac7963b47fac50b2277554a4fc7dc06fd305b57490600090a35050565b612e8b614544565b6001600160a01b038316612eb2576040516366385fa360e01b815260040160405180910390fd5b611d28838383614973565b33612ec781614382565b6001600160a01b038316612eee576040516366385fa360e01b815260040160405180910390fd5b6312cc0300612f006201518084615c3b565b65ffffffffffff161115612f2757604051635b30744d60e11b815260040160405180910390fd5b612f318242615c60565b336000818152600260209081526040808320805465ffffffffffff60a01b1916600160a01b65ffffffffffff97881602179055600482529182902080546001600160a01b0389166001600160a01b0319909116811790915582519081529386169084015290917f9141f23a32bd7f35c8ce161a6f9d05eba59799700a6a44094330bd68b3e251039101612aaf565b33612fc981614382565b60003360215460405163012a6efb60e21b81526001600160a01b038084166004830152602482018890526001600160601b0387166044830152929350600092839216906304a9bbec9060640160408051808303816000875af1158015613033573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130579190615c81565b91509150613067838660016143a9565b6001600160601b038116156130a2576021546130909084906001600160a01b0316836000613bae565b6130a2816001600160601b0316614a2c565b602154604051630b40697b60e31b81526001600160a01b0385811660048301526024820189905263ffffffff8516604483015290911690635a034bd89060640161294c565b60036130f281613abf565b61311f620186a07f0000000000000000000000000000000000000000e7690c99f24eca66ba900000615cad565b6001600160601b03168210156131485760405163c64200e960e01b815260040160405180910390fd5b600c8290556040518281527f699d1c4c28f453c7c162bf9ab9d182bcca9b5860718f5dbc0dadb620c0aa077e90602001611448565b6001600160a01b0386166131a4576040516366385fa360e01b815260040160405180910390fd5b428410156131c557604051630407b05b60e31b815260040160405180910390fd5b6001600160a01b03871660009081526002602052604081208054909167ffffffffffffffff909116906131f6611c0e565b604080517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960208201526001600160a01b03808e1692820192909252908b166060820152608081018a905267ffffffffffffffff841660a082015260c0810189905260e0016040516020818303038152906040528051906020012060405160200161329892919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181529190528051602090910120835467ffffffffffffffff600190940193841667ffffffffffffffff199091161784559050601b60ff871610156132f3576132ec601b87615cc7565b955061334b565b601e8660ff16111561334b576040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052605c016040516020818303038152906040528051906020012090505b6040805160008082526020820180845284905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561339f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615806133d457508a6001600160a01b0316816001600160a01b031614155b156133f257604051638baa579f60e01b815260040160405180910390fd5b6133ff8b8b8b6001613e1b565b505050505050505050505050565b600061341e8833888888888861317d565b613429888888611663565b98975050505050505050565b600661344081613abf565b6001600160a01b038216600081815260096020526040808220805460ff19169055517fe96bbe78c8bc645f0ee444e35730f56b458ea663d1b2a35cf93cefd7fce93dc19190a25050565b600461349581613abf565b6001600160a01b0382166134bc576040516366385fa360e01b815260040160405180910390fd5b600580546001600160a01b0319166001600160a01b0384169081179091556040517f6a679ad6371327969c9ddeade76f85c3e657fd6d020eeb491becdd1b6d608db390600090a25050565b600161351281613abf565b6305f5e1008211156135375760405163c64200e960e01b815260040160405180910390fd5b6135436012600a615a4a565b61354d9083615a56565b60118190556040519081527f29b4862b0ac325a5ba77a99236953f6a42e083f4f886db919d7b0b5e9f2cee0090602001611448565b6001600160a01b038181166000908152600460205260409020541633146135bc57604051634014f1a560e01b815260040160405180910390fd5b33600090815260026020526040902054600160a01b900465ffffffffffff16428110156135fc576040516319aad37160e01b815260040160405180910390fd5b5050336000908152600260205260409020805465ffffffffffff60a01b1916600160a01b179055565b61362d614544565b8061363957600161363c565b60025b601c5560405181151581527f3d7f39af0cf901fec3da1b0ecfab4a0eb553ed671de67850e09cca22848dd866906020015b60405180910390a150565b6001600160a01b038083166000908152600260209081526040808320546003835281842094861684529390915281208054919263ffffffff600160601b909104811692600160a01b900416821415806136e057508054600160c01b900465ffffffffffff1642115b806136f757508054600160f81b900460ff16600114155b1561370757600092505050611528565b546001600160801b0316949350505050565b613721614544565b8061372d576001613730565b60025b60195560405181151581527f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a129060200161366d565b6021546000906001600160a01b0316336001600160a01b03161461379c57604051637c1aebb760e01b815260040160405180910390fd5b6115258383614ac1565b60056137b181613abf565b6001600160a01b03821660009081526008602052604090205460ff166137ea5760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b038216600081815260086020908152604091829020805460ff1916905590519182527fead11242b7eb5b3a03a27edc0039f1305d251bf91b3d1e94c3861c3d6e4ac1289101611448565b613843614544565b600c54156138645760405163e529091f60e01b815260040160405180910390fd5b61389530333060009081526023602052604090205461388e906001906001600160601b0316615b7a565b6000613bae565b6002601a8190556019556138cb6103e87f0000000000000000000000000000000000000000e7690c99f24eca66ba900000615cad565b6001600160601b0316600c556040517f994a0442f4498644e0bb3fe4b4c74ad21fbbb80e04b2fd1cb31f4248796d3dde90600090a1565b61390a614544565b6001600160a01b038116613931576040516366385fa360e01b815260040160405180910390fd5b600080546001600160a01b03169061394a908290614b5b565b613955826001614b5b565b600080546001600160a01b0319166001600160a01b0384811691821783556040519192908416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6139ac614544565b602180546001600160a01b0319166001600160a01b0383161790556139d081612151565b6040516001600160a01b038216907f8ae96d8af35324a34b19e4f33e72d620b502f69595bb43870ab5fd7a7de7823990600090a250565b82613a1181614382565b6021546001600160a01b0316336001600160a01b031614613a4557604051637c1aebb760e01b815260040160405180910390fd5b612c84848484614cec565b6001613a5b81613abf565b6064821080613a6c5750620f424082115b15613a8a5760405163c64200e960e01b815260040160405180910390fd5b60158290556040518281527fe24723968dd1fe95c864bec60a98788d4f02a5a3e1e9e80ccafdee9146ff54c790602001611448565b60016000826008811115613ad557613ad5615c25565b6008811115613ae657613ae6615c25565b81526020019081526020016000206000613afd3390565b6001600160a01b0316815260208101919091526040016000205460ff1661145357604051634014f1a560e01b815260040160405180910390fd5b60006002601a5403613bab57601254479081118015613b645750601554601454613b619190615cec565b43115b15613ba957613b74600a82615a8b565b60135460175491925090811115613b8a57506017545b81811115613b955750805b8015613ba757613ba481614dfe565b92505b505b505b90565b6001600160a01b038416600090815260236020526040812054613bdb9084906001600160601b0316615b7a565b6001600160a01b038616600090815260236020526040812080546001600160601b0319166001600160601b03841617905590915082613c1b576000613c3e565b600d54606490613c34906001600160601b031686615d04565b613c3e9190615cad565b90506000613c4c8286615b7a565b6001600160a01b0387166000908152602360205260409020549091506001600160601b0316613c7b8282615bfa565b6001600160a01b038816600090815260236020526040902080546001600160601b0319166001600160601b03928316179055831615613d01573060009081526023602052604081208054859290613cdc9084906001600160601b0316615bfa565b92506101000a8154816001600160601b0302191690836001600160601b031602179055505b613d0b8482614f39565b6006546001600160a01b0390811690891603613d73576006546040516001600160601b03881681526001600160a01b038981169216907f0e128c83dc42be0b80a07793e5b69c77c3981238a44754802b90d92ae85b3b489060200160405180910390a3613dd7565b6006546001600160a01b0390811690881603613dd7576006546040516001600160601b03881681526001600160a01b038a81169216907f5cd522aff7a2bf4d0c00ba029b9cebb7a25ed4a77695101f28f01f865421d0409060200160405180910390a35b6040516001600160601b03831681526001600160a01b0380891691908a1690600080516020615ddd8339815191529060200160405180910390a35050505050505050565b60006001600160a01b038516613e44576040516366385fa360e01b815260040160405180910390fd5b6001600160a01b038416613e6b576040516366385fa360e01b815260040160405180910390fd5b6001600160801b03831115613e85576001600160801b0392505b6001600160a01b03858116600090815260026020908152604080832060038352818420948916845293909152902080546fffffffffffffffffffffffffffffffff1981166001600160801b0387169081178355835477ffffffff00000000ffffffffffffffffffffffffffffffff1990921617600160601b90910463ffffffff16600160a01b021781558315613f71578154600160901b900461ffff168015613f4357613f3481610e10615d33565b613f3e9042615c60565b613f4b565b65ffffffffffff5b825465ffffffffffff91909116600160c01b0265ffffffffffff60c01b19909116178255505b80546001600160f81b0316600160f81b1781556040516001600160a01b0380881691908916907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590613fc69089815260200190565b60405180910390a35060019695505050505050565b6001600160a01b031660009081526002602052604090205442600160a01b90910465ffffffffffff161190565b8261401281614382565b6001600160a01b038416158061402f57506001600160a01b038316155b1561404d576040516366385fa360e01b815260040160405180910390fd5b8160000361406e57604051635e85ae7360e01b815260040160405180910390fd5b6001600160a01b0384166000908152602460205260409020546001600160601b0316614099856146bd565b6140a39190615d58565b8211156140c3576040516305c2afdf60e21b815260040160405180910390fd5b6001600160a01b03841660009081526008602052604081205460ff168061410257506001600160a01b03841660009081526008602052604090205460ff165b601854909150600214156000614119600c54151590565b6020549091506001600160a01b0390811690878116821490891682148561427857306001600160a01b038a16036141635760405163d9716e4360e01b815260040160405180910390fd5b600c5488111561418657604051631b97a87560e01b815260040160405180910390fd5b836141a4576040516306c3d31f60e51b815260040160405180910390fd5b84156142785781806141b35750805b80156141cd57503260009081526025602052604090205443145b156141eb5760405163e069ee1d60e01b815260040160405180910390fd5b32600090815260256020526040902043905581801561420c57506002601954145b1561427857600f546001600160601b031680614227306146bd565b111561423f5761423f816001600160601b0316614f86565b614247613b37565b15614276576040517fac401825222c905dafef53f897e1fe565e107a9b114737f28ad26c699784bd8d90600090a15b505b83156143105780156142a15787600a60008282546142969190615cec565b909155506143109050565b81156143105787600b60008282546142b99190615cec565b90915550506011548811156143105760006142d5606447615a8b565b9050600060646010546142e89190615a8b565b9050808211156142f6578091505b81601360008282546143089190615cec565b909155505050505b6001868061433657506001600160a01b038a1660009081526009602052604090205460ff165b1561433f575060005b8515614369578615614360576028805463ffffffff19166001179055614369565b6143698a6150e0565b6143758b8b8b84613bae565b5050505050505050505050565b61438b81613fdb565b15611453576040516335543b4960e21b815260040160405180910390fd5b6001600160a01b038316600090815260246020526040812080548492906143da9084906001600160601b0316615b7a565b92506101000a8154816001600160601b0302191690836001600160601b031602179055508015611d28576040516001600160601b03831681526001600160a01b038416907fbedcdd66d86f5dc81286de7b36cc38398208ffb595a3e95330fca4fb21f08cba9060200160405180910390a26040516001600160601b03831681526001600160a01b038416908190600080516020615ddd833981519152906020015b60405180910390a3505050565b6144928484614845565b60215460405163238d3a8f60e11b81526001600160a01b038681166004830152602482018490529091169063471a751e90604401600060405180830381600087803b1580156144e057600080fd5b505af11580156144f4573d6000803e3d6000fd5b5050604080516001600160601b038716815260ff861660208201526001600160a01b03881693507ff4476f182b22aa6860f6aea0edf736040fd43167d941069fadffe4aef18ef728925001611508565b6000546001600160a01b0316331461456f57604051632e6c18c960e11b815260040160405180910390fd5b565b6001600160a01b038216614598576040516366385fa360e01b815260040160405180910390fd5b6001600160a01b038084166000818152600360209081526040808320948716835293815283822092825260029052919091208215614678578054600160801b900461ffff1660008115614604576145f182610e10615d6f565b6145ff9061ffff1642615c60565b61460c565b65ffffffffffff5b8354855460ff60f01b1965ffffffffffff909316600160c01b0265ffffffffffff60c01b19600160801b63ffffffff600160401b9095049490941693909302929092166dffffffffffff00000000ffffffff60801b19909116171716600160f01b17845550611eeb9050565b5481546eff00000000000000000000ffffffff60801b1916600160801b600160401b90920463ffffffff90811660001901169190910260ff60f01b1916179055505050565b6001600160a01b03166000908152602360205260409020546001600160601b031690565b602754600160601b90046001600160a01b03163214158061471757506026546001600160a01b03838116600160601b9092041614155b15614720575050565b600080614735846001600160a01b0316615223565b90925090506001600160a01b03811661474e5750505050565b6000306001600160a01b0383160361476b57508190506001614782565b6001600160a01b0383163014614782575050505050565b6040516370a0823160e01b81526001600160a01b038681166004830152600091908416906370a0823190602401602060405180830381865afa1580156147cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147f09190615ba2565b6026549091506001600160601b03166dffffffffffffffffffffffffffff861611801561482757506027546001600160601b031681115b1561297f5760405163878d636360e01b815260040160405180910390fd5b6001600160a01b0382166000908152602460205260408120546148729083906001600160601b0316615bfa565b905061487d836146bd565b816001600160601b031611156148a6576040516305c2afdf60e21b815260040160405180910390fd5b6001600160a01b03831660008181526024602090815260409182902080546001600160601b0319166001600160601b0386811691909117909155915191851682528291600080516020615ddd833981519152910161447b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461494c576040519150601f19603f3d011682016040523d82523d6000602084013e614951565b606091505b5050905080611d285760405163b5747cc760e01b815260040160405180910390fd5b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af11580156149c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149e69190615abc565b50816001600160a01b0316836001600160a01b03167ff217402c85197de87cd806653771027d1e91101ef79ab35684a580c62b91a9b58360405161447b91815260200190565b80156114535760215460405163d9fbb1e960e01b8152600481018390526001600160a01b039091169063d9fbb1e990602401600060405180830381600087803b158015614a7857600080fd5b505af1158015614a8c573d6000803e3d6000fd5b505050507fd3be3dbc076afa976ee7dfe1f596f6d7905e9441a1a426a244a12ef071272dd48160405161366d91815260200190565b6001600160a01b038083166000908152600260209081526040808320546003835281842094861684529390915281208054919263ffffffff600160401b909104811692600160801b90041682141580614b2957508054600160c01b900465ffffffffffff1642115b80614b4057508054600160f01b900460ff16600114155b15614b5057600092505050611528565b506001949350505050565b6001600160a01b039190911660009081527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f60209081526040808320805494151560ff1995861681179091557fd9d16d34ffb15ba3a3d852f0d403e2ce1d691fb54de27ac87cd2f993f3ec330f835281842080548616821790557f7dfe757ecd65cbd7922a9c0161e935dd7fdbcc0e999689c7d31633896b1fc60b835281842080548616821790557fedc95719e9a3b28dd8e80877cb5880a9be7de1a13fc8b05e7999683b6b567643835281842080548616821790557fe2689cd4a84e23ad2f564004f1c9013e9589d260bde6380aba3ca7e09e4df40c835281842080548616821790557f8f331abe73332f95a25873e8b430885974c0409691f89d643119a11623a7924a835281842080548616821790557fdc686ec4a0ff239c70e7c7c36e8f853eced3bc8618f48d2b816da2a74311237e835281842080548616821790557f4db623e5c4870b62d3fc9b4e8f893a1a77627d75ab45d9ff7e56ba19564af99b9092529091208054909216179055565b614cf8838260006143a9565b6001600160a01b038316600090815260236020526040812054614d259083906001600160601b0316615b7a565b6001600160a01b0385811660009081526023602052604080822080546001600160601b0319166001600160601b0386811691909117909155928716825290205491925016614d738382615bfa565b6001600160a01b038516600090815260236020526040902080546001600160601b0319166001600160601b0392909216919091179055614db38484614845565b614dbd8282614f39565b6040516001600160601b03841681526001600160a01b038086169190871690600080516020615ddd8339815191529060200160405180910390a35050505050565b6000600260185403614e0f57600080fd5b60026018556016546013558115614f2f57602154600090614e38906001600160a01b03166146bd565b601f5460215460405163f43ae45b60e01b81526001600160a01b03928316600482015291166024820152604481018590529091507399fe7b37639ae33d0f15f61f4288a2fc9cff7bc19063f43ae45b9060640160006040518083038186803b158015614ea357600080fd5b505af4158015614eb7573d6000803e3d6000fd5b505060215460009250839150614ed5906001600160a01b03166146bd565b614edf9190615d58565b60408051868152602081018390529192507f3967d46c5aa65ced73be27b4c6d249e552274da7a605101a66ef571a8e2608a4910160405180910390a143601455614f2881614a2c565b6001925050505b6001601855919050565b602254806001600160601b038416600003614f5a57614f5781615d90565b90505b826001600160601b0316600003614f7757614f7481615da7565b90505b808214612c8457602255505050565b600260185403614f9557600080fd5b6002601855601f544790614fb69030906001600160a01b0316846001613e1b565b50816001600160601b0316601e6000828254614fd29190615cec565b9091555050601f54604051637041046d60e01b81526001600160a01b039091166004820152602481018390527399fe7b37639ae33d0f15f61f4288a2fc9cff7bc190637041046d9060440160006040518083038186803b15801561503557600080fd5b505af4158015615049573d6000803e3d6000fd5b505050506000814761505b9190615d58565b60408051858152602081018390529192507f1d835182508bc46cfe26167d5d6ca20231bf92fb2ee0d558d40553b29a40fdf9910160405180910390a1600d54600e546001600160601b03909116906150b39083615a56565b6150bd9190615a8b565b6005549091506150d6906001600160a01b0316826148ff565b5050600160185550565b60006150eb826146bd565b9050600080615102846001600160a01b0316615223565b9092509050306001600160a01b0382160361511a5750805b6001600160a01b03811661513e5750506028805463ffffffff191660011790555050565b6040516370a0823160e01b81526001600160a01b038581166004830152600091908316906370a0823190602401602060405180830381865afa158015615188573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906151ac9190615ba2565b6040805160a0810182526001600160601b039687168082526001600160a01b0398909816602082018190529290961690860181905232606087018190524363ffffffff166080909701879052600160601b928302909717602655950290941760275550506028805463ffffffff1916909117905550565b6000806001600160a01b0383163b61524057506000928392509050565b6040805160048152602481019091526020810180516001600160e01b0316630dfe168160e01b1790526152749084906152b1565b6040805160048152602481019091526020810180516001600160e01b031663d21220a760e01b1790526152a89085906152b1565b91509150915091565b6000806000846001600160a01b0316846040516152ce9190615dc0565b600060405180830381855afa9150503d8060008114615309576040519150601f19603f3d011682016040523d82523d6000602084013e61530e565b606091505b509150915081801561532257506020815110155b15615344578080602001905181019061533b9190615a9f565b92505050611528565b506000949350505050565b60005b8381101561536a578181015183820152602001615352565b83811115612c845750506000910152565b602081526000825180602084015261539a81604085016020870161534f565b601f01601f19169190910160400192915050565b801515811461145357600080fd5b600080604083850312156153cf57600080fd5b82356153da816153ae565b915060208301356153ea816153ae565b809150509250929050565b6001600160a01b038116811461145357600080fd5b6000806040838503121561541d57600080fd5b8235615428816153f5565b946020939093013593505050565b60006020828403121561544857600080fd5b8135615453816153f5565b9392505050565b6001600160601b038116811461145357600080fd5b60006020828403121561548157600080fd5b81356154538161545a565b6000806000606084860312156154a157600080fd5b83356154ac816153f5565b925060208401356154bc816153f5565b929592945050506040919091013590565b6000602082840312156154df57600080fd5b8135615453816153ae565b600080604083850312156154fd57600080fd5b50508035926020909101359150565b80356009811061551b57600080fd5b919050565b6000806040838503121561553357600080fd5b61553c8361550c565b915060208301356153ea816153f5565b60ff8116811461145357600080fd5b803565ffffffffffff8116811461551b57600080fd5b60008060008060008060c0878903121561558a57600080fd5b8635615595816153f5565b955060208701356155a58161545a565b945060408701356155b58161554c565b93506155c36060880161555b565b925060808701356155d38161545a565b915060a08701356155e3816153ae565b809150509295509295509295565b60008060006060848603121561560657600080fd5b8335615611816153f5565b92506020840135615621816153f5565b91506040840135615631816153ae565b809150509250925092565b803561ffff8116811461551b57600080fd5b6000806040838503121561566157600080fd5b61566a8361563c565b91506156786020840161563c565b90509250929050565b6000806040838503121561569457600080fd5b823561569f8161545a565b915060208301356153ea8161554c565b600080604083850312156156c257600080fd5b8235915060208301356153ea816153ae565b6000602082840312156156e657600080fd5b5035919050565b6000806040838503121561570057600080fd5b823561553c816153f5565b6000806040838503121561571e57600080fd5b8235615729816153f5565b915060208301356153ea8161545a565b6000806040838503121561574c57600080fd5b8235915060208301356153ea8161545a565b6000806040838503121561577157600080fd5b823561577c816153f5565b91506156786020840161550c565b60008060006060848603121561579f57600080fd5b8335925060208401356156218161545a565b6000602082840312156157c357600080fd5b6115258261555b565b6000806000606084860312156157e157600080fd5b83356157ec816153f5565b95602085013595506040909401359392505050565b60008060008060008060c0878903121561581a57600080fd5b8635615825816153f5565b955060208701356158358161545a565b945060408701356158458161545a565b935060608701356158558161554c565b92506158636080880161555b565b915060a08701356155e38161545a565b6000806040838503121561588657600080fd5b8235615891816153f5565b91506156786020840161555b565b600080600080600080600060e0888a0312156158ba57600080fd5b87356158c5816153f5565b965060208801356158d5816153f5565b9550604088013594506060880135935060808801356158f38161554c565b9699959850939692959460a0840135945060c09093013592915050565b60008060006060848603121561592557600080fd5b8335615930816153f5565b92506020840135615940816153f5565b915060408401356156318161545a565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156159a157816000190482111561598757615987615950565b8085161561599457918102915b93841c939080029061596b565b509250929050565b6000826159b857506001611528565b816159c557506000611528565b81600181146159db57600281146159e557615a01565b6001915050611528565b60ff8411156159f6576159f6615950565b50506001821b611528565b5060208310610133831016604e8410600b8410161715615a24575081810a611528565b615a2e8383615966565b8060001904821115615a4257615a42615950565b029392505050565b600061152583836159a9565b6000816000190483118215151615615a7057615a70615950565b500290565b634e487b7160e01b600052601260045260246000fd5b600082615a9a57615a9a615a75565b500490565b600060208284031215615ab157600080fd5b8151615453816153f5565b600060208284031215615ace57600080fd5b8151615453816153ae565b600060208284031215615aeb57600080fd5b81516154538161545a565b6001600160a01b039790971687526001600160601b03958616602088015260ff94909416604087015265ffffffffffff9290921660608601528316608085015290911660a0830152151560c082015260e00190565b805163ffffffff8116811461551b57600080fd5b600060208284031215615b7157600080fd5b61152582615b4b565b60006001600160601b0383811690831681811015615b9a57615b9a615950565b039392505050565b600060208284031215615bb457600080fd5b5051919050565b600080600060608486031215615bd057600080fd5b615bd984615b4b565b92506020840151615be98161545a565b60408501519092506156318161554c565b60006001600160601b03808316818516808303821115615c1c57615c1c615950565b01949350505050565b634e487b7160e01b600052602160045260246000fd5b600065ffffffffffff80841680615c5457615c54615a75565b92169190910492915050565b600065ffffffffffff808316818516808303821115615c1c57615c1c615950565b60008060408385031215615c9457600080fd5b615c9d83615b4b565b915060208301516153ea8161545a565b60006001600160601b0380841680615c5457615c54615a75565b600060ff821660ff84168060ff03821115615ce457615ce4615950565b019392505050565b60008219821115615cff57615cff615950565b500190565b60006001600160601b0380831681851681830481118215151615615d2a57615d2a615950565b02949350505050565b600065ffffffffffff80831681851681830481118215151615615d2a57615d2a615950565b600082821015615d6a57615d6a615950565b500390565b600061ffff80831681851681830481118215151615615d2a57615d2a615950565b600081615d9f57615d9f615950565b506000190190565b600060018201615db957615db9615950565b5060010190565b60008251615dd281846020870161534f565b919091019291505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122091e982e5bd4e999830b5c60ea202a439612419afc9a698006fb4989473cf752364736f6c634300080d0033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

-----Decoded View---------------
Arg [0] : routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d


Libraries Used


Deployed Bytecode Sourcemap

49477:24395:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51037:130;;;;;;;;;;-1:-1:-1;51142:17:0;;;;;;;;;;;;-1:-1:-1;;;51142:17:0;;;;51037:130;;;;;;;:::i;:::-;;;;;;;;60053:836;;;;;;;;;;;;;:::i;:::-;;32844:459;;;;;;;;;;-1:-1:-1;32844:459:0;;;;;:::i;:::-;;:::i;28698:145::-;;;;;;;;;;-1:-1:-1;28698:145:0;;;;;:::i;:::-;;:::i;:::-;;;1790:14:1;;1783:22;1765:41;;1753:2;1738:18;28698:145:0;1625:187:1;52968:149:0;;;;;;;;;;-1:-1:-1;52968:149:0;;;;;:::i;:::-;;:::i;39942:123::-;;;;;;;;;;-1:-1:-1;40024:24:0;;38993:1;40024:33;39942:123;;43313:390;;;;;;;;;;-1:-1:-1;43313:390:0;;;;;:::i;:::-;;:::i;47489:98::-;;;;;;;;;;-1:-1:-1;47561:14:0;;:18;;47489:98;;39709:41;;;;;;;;;;-1:-1:-1;39709:41:0;;;;-1:-1:-1;;;;;39709:41:0;;;;;;-1:-1:-1;;;;;2652:32:1;;;2634:51;;2622:2;2607:18;39709:41:0;2461:230:1;37555:93:0;;;;;;;;;;-1:-1:-1;37628:12:0;-1:-1:-1;;;;;37621:19:0;37555:93;;;2842:25:1;;;2830:2;2815:18;37555:93:0;2696:177:1;47595:263:0;;;;;;;;;;-1:-1:-1;47595:263:0;;;;;:::i;:::-;;:::i;24537:108::-;;;;;;;;;;-1:-1:-1;24537:108:0;24579:66;24537:108;;30661:479;;;;;;;;;;-1:-1:-1;30661:479:0;;;;;:::i;:::-;;:::i;41076:183::-;;;;;;;;;;-1:-1:-1;41076:183:0;;;;;:::i;:::-;;:::i;45643:189::-;;;;;;;;;;-1:-1:-1;45643:189:0;;;;;:::i;:::-;;:::i;43711:404::-;;;;;;;;;;-1:-1:-1;43711:404:0;;;;;:::i;:::-;;:::i;17521:56::-;;;;;;;;;;-1:-1:-1;17521:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;67718:713;;;;;;;;;;-1:-1:-1;67718:713:0;;;;;:::i;:::-;;:::i;68439:702::-;;;;;;;;;;-1:-1:-1;68439:702:0;;;;;:::i;:::-;;:::i;24317:108::-;;;;;;;;;;-1:-1:-1;24317:108:0;24359:66;24317:108;;37403:35;;;;;;;;;;;;37436:2;37403:35;;;;;5847:4:1;5835:17;;;5817:36;;5805:2;5790:18;37403:35:0;5675:184:1;46164:274:0;;;;;;;;;;-1:-1:-1;46164:274:0;;;;;:::i;:::-;;:::i;25288:492::-;;;;;;;;;;;;;:::i;66859:249::-;;;;;;;;;;-1:-1:-1;66859:249:0;;;;;:::i;:::-;;:::i;33311:354::-;;;;;;;;;;-1:-1:-1;33311:354:0;;;;;:::i;:::-;;:::i;63993:382::-;;;;;;:::i;:::-;;:::i;37897:29::-;;;;;;;;;;;;;;;;44123:375;;;;;;;;;;-1:-1:-1;44123:375:0;;;;;:::i;:::-;;:::i;46686:492::-;;;;;;;;;;-1:-1:-1;46686:492:0;;;;;:::i;:::-;;:::i;37860:30::-;;;;;;;;;;;;;;;;41448:250;;;;;;;;;;-1:-1:-1;41448:250:0;;;;;:::i;:::-;;:::i;65482:334::-;;;;;;;;;;-1:-1:-1;65482:334:0;;;;;:::i;:::-;;:::i;39757:28::-;;;;;;;;;;-1:-1:-1;39757:28:0;;;;-1:-1:-1;;;;;39757:28:0;;;40605:265;;;;;;;;;;-1:-1:-1;40605:265:0;;;;;:::i;:::-;;:::i;43030:275::-;;;;;;;;;;-1:-1:-1;43030:275:0;;;;;:::i;:::-;;:::i;39798:30::-;;;;;;;;;;-1:-1:-1;39798:30:0;;;;-1:-1:-1;;;;;39798:30:0;;;47186:126;;;;;;;;;;-1:-1:-1;47186:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;47277:27:0;47253:4;47277:27;;;:18;:27;;;;;;;;;47186:126;24716:69;;;;;;;;;;-1:-1:-1;24716:69:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24716:69:0;;;;-1:-1:-1;;;24716:69:0;;;;;-1:-1:-1;;;24716:69:0;;;;;;;-1:-1:-1;;;24716:69:0;;;;;-1:-1:-1;;;24716:69:0;;;;;-1:-1:-1;;;24716:69:0;;;;;;;;;-1:-1:-1;;;;;8823:47:1;;;8805:66;;8890:10;8936:15;;;8931:2;8916:18;;8909:43;8988:15;;;;8968:18;;;8961:43;;;;9052:14;9040:27;9035:2;9020:18;;9013:55;9117:4;9105:17;;;9099:3;9084:19;;9077:46;9160:17;9154:3;9139:19;;9132:46;8792:3;8777:19;24716:69:0;8532:652:1;40182:107:0;;;;;;;;;;-1:-1:-1;40256:16:0;;38993:1;40256:25;40182:107;;54336:128;;;;;;;;;;-1:-1:-1;54336:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54436:19:0;;;;;:10;:19;;;;;;;;;54429:26;;;;;;;;;;;;;;;-1:-1:-1;;;54429:26:0;;;;;;;;;;;-1:-1:-1;;;54429:26:0;;;;;;;;;;;;;-1:-1:-1;;;54429:26:0;;;;;;;;-1:-1:-1;;;54429:26:0;;;;;;;;-1:-1:-1;;;54429:26:0;;;;;;;;;54336:128;;;;;;;9343:4:1;9385:3;9374:9;9370:19;9362:27;;9435:18;9426:6;9420:13;9416:38;9405:9;9398:57;9502:4;9494:6;9490:17;9484:24;9527:10;9593:2;9579:12;9575:21;9568:4;9557:9;9553:20;9546:51;9665:2;9657:4;9649:6;9645:17;9639:24;9635:33;9628:4;9617:9;9613:20;9606:63;;;9718:4;9710:6;9706:17;9700:24;9743:6;9807:2;9791:14;9787:23;9780:4;9769:9;9765:20;9758:53;9879:2;9871:4;9863:6;9859:17;9853:24;9849:33;9842:4;9831:9;9827:20;9820:63;;;9951:14;9943:4;9935:6;9931:17;9925:24;9921:45;9914:4;9903:9;9899:20;9892:75;9189:784;;;;;37009:112:0;;;;;;;;;;-1:-1:-1;37009:112:0;;;;-1:-1:-1;;;;;37009:112:0;;;73665:204;;;;;;;;;;-1:-1:-1;73665:204:0;;;;;:::i;:::-;;:::i;53218:122::-;;;;;;;;;;-1:-1:-1;53218:122:0;;;;;:::i;:::-;-1:-1:-1;;;;;53310:22:0;53283:7;53310:22;;;:13;:22;;;;;;-1:-1:-1;;;;;53310:22:0;;53218:122;40071:105;;;;;;;;;;-1:-1:-1;40144:15:0;;38993:1;40144:24;40071:105;;39837:99;;;;;;;;;;-1:-1:-1;39907:12:0;;38993:1;39907:21;39837:99;;53595:713;;;;;;;;;;-1:-1:-1;53595:713:0;;;;;:::i;:::-;;:::i;37197:71::-;;;;;;;;;;-1:-1:-1;37197:71:0;;;;-1:-1:-1;;;;;37197:71:0;;;40396:203;;;;;;;;;;;;;:::i;64383:463::-;;;;;;;;;;-1:-1:-1;64383:463:0;;;;;:::i;:::-;;:::i;25856:112::-;;;;;;;;;;-1:-1:-1;25856:112:0;;;;;:::i;:::-;-1:-1:-1;;;;;25937:17:0;25910:7;25937:17;;;:10;:17;;;;;:23;;;;25856:112;53125:85;;;;;;;;;;-1:-1:-1;53194:8:0;;53125:85;;72398:115;;;;;;;;;;-1:-1:-1;72398:115:0;;;;;:::i;:::-;;:::i;44506:386::-;;;;;;;;;;-1:-1:-1;44506:386:0;;;;;:::i;:::-;;:::i;16454:20::-;;;;;;;;;;-1:-1:-1;16454:20:0;;;;-1:-1:-1;;;;;16454:20:0;;;53466:121;;;;;;;;;;;;;:::i;50992:38::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;50992:38:0;;;;;37933:30;;;;;;;;;;-1:-1:-1;37933:30:0;;;;-1:-1:-1;;;;;37933:30:0;;;;;;-1:-1:-1;;;;;11073:39:1;;;11055:58;;11043:2;11028:18;37933:30:0;10911:208:1;19127:312:0;;;;;;;;;;-1:-1:-1;19127:312:0;;;;;:::i;:::-;;:::i;40295:93::-;;;;;;;;;;-1:-1:-1;40362:9:0;;38993:1;40362:18;40295:93;;30452:201;;;;;;;;;;-1:-1:-1;30452:201:0;;;;;:::i;:::-;;:::i;37160:30::-;;;;;;;;;;-1:-1:-1;37160:30:0;;;;-1:-1:-1;;;;;37160:30:0;;;41267:173;;;;;;;;;;-1:-1:-1;41267:173:0;;;;;:::i;:::-;;:::i;66377:474::-;;;;;;;;;;-1:-1:-1;66377:474:0;;;;;:::i;:::-;;:::i;31963:516::-;;;;;;;;;;-1:-1:-1;31963:516:0;;;;;:::i;:::-;;:::i;45286:349::-;;;;;;;;;;-1:-1:-1;45286:349:0;;;;;:::i;:::-;;:::i;41706:187::-;;;;;;;;;;-1:-1:-1;41706:187:0;;;;;:::i;:::-;;:::i;67390:320::-;;;;;;;;;;-1:-1:-1;67390:320:0;;;;;:::i;:::-;;:::i;37824:29::-;;;;;;;;;;;;;;;;72973:684;;;;;;;;;;-1:-1:-1;72973:684:0;;;;;:::i;:::-;;:::i;19447:318::-;;;;;;;;;;-1:-1:-1;19447:318:0;;;;;:::i;:::-;;:::i;72521:228::-;;;;;;;;;;-1:-1:-1;72521:228:0;;;;;:::i;:::-;;:::i;31515:440::-;;;;;;;;;;-1:-1:-1;31515:440:0;;;;;:::i;:::-;;:::i;37972:45::-;;;;;;;;;;;;;;;;65824:545;;;;;;;;;;-1:-1:-1;65824:545:0;;;;;:::i;:::-;;:::i;42102:125::-;;;;;;;;;;-1:-1:-1;42102:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;42192:27:0;42168:4;42192:27;;;:18;:27;;;;;;;;;42102:125;42485:281;;;;;;;;;;-1:-1:-1;42485:281:0;;;;;:::i;:::-;;:::i;27255:1435::-;;;;;;;;;;-1:-1:-1;27255:1435:0;;;;;:::i;:::-;;:::i;31148:359::-;;;;;;;;;;-1:-1:-1;31148:359:0;;;;;:::i;:::-;;:::i;41901:193::-;;;;;;;;;;-1:-1:-1;41901:193:0;;;;;:::i;:::-;;:::i;45840:316::-;;;;;;;;;;-1:-1:-1;45840:316:0;;;;;:::i;:::-;;:::i;44900:378::-;;;;;;;;;;-1:-1:-1;44900:378:0;;;;;:::i;:::-;;:::i;32487:349::-;;;;;;;;;;-1:-1:-1;32487:349:0;;;;;:::i;:::-;;:::i;40878:190::-;;;;;;;;;;-1:-1:-1;40878:190:0;;;;;:::i;:::-;;:::i;29953:491::-;;;;;;;;;;-1:-1:-1;29953:491:0;;;;;:::i;:::-;;:::i;47320:161::-;;;;;;;;;;-1:-1:-1;47320:161:0;;;;;:::i;:::-;;:::i;67116:241::-;;;;;;;;;;-1:-1:-1;67116:241:0;;;;;:::i;:::-;;:::i;42235:242::-;;;;;;;;;;-1:-1:-1;42235:242:0;;;;;:::i;:::-;;:::i;71673:536::-;;;;;;;;;;;;;:::i;18300:357::-;;;;;;;;;;-1:-1:-1;18300:357:0;;;;;:::i;:::-;;:::i;46446:232::-;;;;;;;;;;-1:-1:-1;46446:232:0;;;;;:::i;:::-;;:::i;63694:291::-;;;;;;;;;;-1:-1:-1;63694:291:0;;;;;:::i;:::-;;:::i;42774:248::-;;;;;;;;;;-1:-1:-1;42774:248:0;;;;;:::i;:::-;;:::i;60053:836::-;60106:22;18138:21;18154:4;18138:15;:21::i;:::-;60145:10:::1;:8;:10::i;:::-;60141:76;;;60177:28;::::0;::::1;::::0;;;::::1;60141:76;38993:1;60261:9;;:18:::0;60257:625:::1;;60316:24;::::0;60416:15:::1;::::0;-1:-1:-1;;;;;60316:24:0;;::::1;::::0;60416:28;-1:-1:-1;60412:459:0::1;;;60552:15;:29:::0;;-1:-1:-1;;;;;60552:29:0;::::1;::::0;::::1;::::0;;60670:13:::1;::::0;60685:11:::1;::::0;60655:61:::1;::::0;-1:-1:-1;;;;;60670:13:0;;::::1;::::0;60685:11:::1;60571:10:::0;60552:15:::1;60655:14;:61::i;:::-;60788:13;;;;;;;;;-1:-1:-1::0;;;;;60788:13:0::1;-1:-1:-1::0;;;;;60773:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;60835:20:0::1;::::0;-1:-1:-1;;;;;11073:39:1;;11055:58;;60835:20:0::1;::::0;-1:-1:-1;11043:2:1;11028:18;;-1:-1:-1;60835:20:0::1;;;;;;;;60412:459;60281:601;60257:625;60053:836:::0;:::o;32844:459::-;4033:10;32913:15;32989:19;;;:10;:19;;;;;33078:65;;;;33107:20;;;;-1:-1:-1;;;33107:20:0;;;;;;;;;;;-1:-1:-1;;33107:20:0;;;;;;33078:65;33161:6;33157:69;;;33188:22;;;;-1:-1:-1;;;33188:22:0;;;;;;;;;;;-1:-1:-1;;;;33188:22:0;;;;;;33157:69;33254:41;;;15435:14:1;;15428:22;15410:41;;15494:14;;15487:22;15482:2;15467:18;;15460:50;-1:-1:-1;;;;;33254:41:0;;;;;15383:18:1;33254:41:0;;;;;;;;32902:401;;32844:459;;:::o;28698:145::-;28766:4;28790:45;4033:10;28813:7;28822:6;28830:4;28790:8;:45::i;:::-;28783:52;;28698:145;;;;;:::o;52968:149::-;53057:4;53081:28;53097:11;53081:15;:28::i;43313:390::-;43429:14;18138:21;18154:4;18138:15;:21::i;:::-;43491:13:::1;43465:23;-1:-1:-1::0;;;;;43465:39:0::1;;43461:70;;;43513:18;;-1:-1:-1::0;;;43513:18:0::1;;;;;;;;;;;43461:70;43605:21;37436:2;43605;:21;:::i;:::-;43578:49;::::0;-1:-1:-1;;;;;43578:49:0;::::1;;:::i;:::-;43544:24;:84:::0;;-1:-1:-1;;;;;;43544:84:0::1;-1:-1:-1::0;;;;;43544:84:0;;::::1;;::::0;;43644:51:::1;::::0;11073:39:1;;;11055:58;;43644:51:0::1;::::0;11043:2:1;11028:18;43644:51:0::1;10911:208:1::0;47595:263:0;47676:14;18138:21;18154:4;18138:15;:21::i;:::-;47726:2:::1;47707:16;-1:-1:-1::0;;;;;47707:21:0::1;;47703:52;;;47737:18;;-1:-1:-1::0;;;47737:18:0::1;;;;;;;;;;;47703:52;47766:12;:31:::0;;-1:-1:-1;;;;;;47766:31:0::1;-1:-1:-1::0;;;;;47766:31:0;::::1;::::0;;::::1;::::0;;;47813:37:::1;::::0;11055:58:1;;;47813:37:0::1;::::0;11043:2:1;11028:18;47813:37:0::1;10911:208:1::0;30661:479:0;30793:4;30812:36;30822:6;30830:9;30841:6;30812:9;:36::i;:::-;30861:18;30882:31;30892:6;4033:10;29953:491;:::i;30882:31::-;30861:52;;30937:10;30928:6;:19;30924:59;;;30956:27;;-1:-1:-1;;;30956:27:0;;;;;;;;;;;30924:59;31019:20;;;31061:49;31070:6;4033:10;31092;31104:5;31061:8;:49::i;:::-;-1:-1:-1;31128:4:0;;30661:479;-1:-1:-1;;;;;30661:479:0:o;41076:183::-;41139:14;18138:21;18154:4;18138:15;:21::i;:::-;41185:8:::1;:25;;38960:1;41185:25;;;38993:1;41185:25;41166:16;:44:::0;41226:25:::1;::::0;1790:14:1;;1783:22;1765:41;;41226:25:0::1;::::0;1753:2:1;1738:18;41226:25:0::1;1625:187:1::0;45643:189:0;45709:12;18138:21;18154:4;18138:15;:21::i;:::-;45752:8:::1;:25;;38960:1;45752:25;;;38993:1;45752:25;45734:15;:43:::0;45793:31:::1;::::0;1790:14:1;;1783:22;1765:41;;45793:31:0::1;::::0;1753:2:1;1738:18;45793:31:0::1;1625:187:1::0;43711:404:0;43828:12;18138:21;18154:4;18138:15;:21::i;:::-;43928:13:::1;43913:12;:28;43909:59;;;43950:18;;-1:-1:-1::0;;;43950:18:0::1;;;;;;;;;;;43909:59;44029:17;44033:13:::0;44029:2:::1;:17;:::i;:::-;44002:23;:12:::0;44018:6:::1;44002:23;:::i;:::-;:45;;;;:::i;:::-;43981:18;:66:::0;;;44063:44:::1;::::0;2842:25:1;;;44063:44:0::1;::::0;2830:2:1;2815:18;44063:44:0::1;;;;;;;;43711:404:::0;;;:::o;67718:713::-;67805:14;18138:21;18154:4;18138:15;:21::i;:::-;4033:10;67836::::1;::::0;:29:::1;::::0;-1:-1:-1;;;67836:29:0;;::::1;::::0;::::1;2842:25:1::0;;;-1:-1:-1;;;;;67836:45:0;;::::1;::::0;:10;;::::1;::::0;:22:::1;::::0;2815:18:1;;67836:29:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;67836:45:0::1;;;:104;;;;-1:-1:-1::0;67886:10:0::1;::::0;-1:-1:-1;;;;;67886:10:0::1;:27;4033:10:::0;67886:54:::1;::::0;-1:-1:-1;;;;;;67886:54:0::1;::::0;;;;;;-1:-1:-1;;;;;17951:15:1;;;67886:54:0::1;::::0;::::1;17933:34:1::0;18003:15;;;17983:18;;;17976:43;17868:18;;67886:54:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;67885:55;67836:104;67832:163;;;67964:19;;-1:-1:-1::0;;;67964:19:0::1;;;;;;;;;;;67832:163;68015:24;68027:11;68015;:24::i;:::-;68068:10;::::0;:48:::1;::::0;-1:-1:-1;;;68068:48:0;;-1:-1:-1;;;;;18472:32:1;;;68068:48:0::1;::::0;::::1;18454:51:1::0;18521:18;;;18514:34;;;68052:13:0::1;::::0;68068:10:::1;::::0;:28:::1;::::0;18427:18:1;;68068:48:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;68052:64;;68127:48;68149:11;68162:6;68170:4;68127:21;:48::i;:::-;68247:15;::::0;68219:59:::1;::::0;68234:11;;-1:-1:-1;;;;;68247:15:0::1;68264:6:::0;68247:15:::1;68219:14;:59::i;:::-;68291:10;::::0;:43:::1;::::0;-1:-1:-1;;;68291:43:0;;-1:-1:-1;;;;;18472:32:1;;;68291:43:0::1;::::0;::::1;18454:51:1::0;18521:18;;;18514:34;;;68291:10:0;;::::1;::::0;:23:::1;::::0;18427:18:1;;68291:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;68379:15:0::1;::::0;68350:73:::1;::::0;;18986:25:1;;;-1:-1:-1;;;;;19047:39:1;;19042:2;19027:18;;19020:67;-1:-1:-1;;;;;68350:73:0;;::::1;::::0;-1:-1:-1;68379:15:0;;::::1;::::0;-1:-1:-1;68372:4:0::1;::::0;68350:73:::1;::::0;18959:18:1;68350:73:0::1;;;;;;;67821:610;67718:713:::0;;;:::o;68439:702::-;68643:13;68618:14;18138:21;18154:4;18138:15;:21::i;:::-;68682:10:::1;::::0;:128:::1;::::0;-1:-1:-1;;;68682:128:0;;-1:-1:-1;;;;;68682:10:0;;::::1;::::0;:36:::1;::::0;:128:::1;::::0;68719:9;;68730:13;;68745:11;;68758;;68771:15;;68682:10:::1;::::0;68791:18;;68682:128:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;68674:136;;::::0;-1:-1:-1;68823:13:0::1;68839:31;68855:15:::0;68839:13;:31:::1;:::i;:::-;68934:15;::::0;68823:47;;-1:-1:-1;68919:57:0::1;::::0;-1:-1:-1;;;;;68934:15:0::1;68951:9:::0;68823:47;68934:15:::1;68919:14;:57::i;:::-;68989:56;69007:9;69018:6;69026:11;69039:5;68989:17;:56::i;:::-;69091:15;::::0;69063:70:::1;::::0;;18986:25:1;;;-1:-1:-1;;;;;19047:39:1;;19042:2;19027:18;;19020:67;-1:-1:-1;;;;;69063:70:0;;::::1;::::0;69091:15:::1;::::0;69084:4:::1;::::0;69063:70:::1;::::0;18959:18:1;69063:70:0::1;;;;;;;68663:478;68439:702:::0;;;;;;;;;:::o;46164:274::-;16627:12;:10;:12::i;:::-;46287:31:::1;46302:15;46287:14;:31::i;:::-;46339:15;:33:::0;;-1:-1:-1;;;;;;46339:33:0::1;-1:-1:-1::0;;;;;46339:33:0;::::1;::::0;;::::1;::::0;;;46388:42:::1;::::0;::::1;::::0;-1:-1:-1;;46388:42:0::1;46164:274:::0;:::o;25288:492::-;4033:10;25337:7;25458:24;;;:10;:24;;;;;;;;;:35;51142:17;;;;;;;;;;-1:-1:-1;;;51142:17:0;;;;25653:28;;-1:-1:-1;;;25458:35:0;;;20637:3:1;20615:16;-1:-1:-1;;;;;;20615:16:1;25653:28:0;;;20599:56:1;25653:28:0;;;;;;;;;20671:11:1;;;25653:28:0;;25643:39;;;;;;24579:66;25537:224;;;20952:25:1;25600:24:0;20993:18:1;;;20986:34;21036:18;;;21029:34;25701:13:0;21079:18:1;;;21072:34;25741:4:0;21122:19:1;;;;21115:61;;;;25537:224:0;;;;;;;;;;20924:19:1;;;;25537:224:0;;;25513:259;;;;;;25288:492::o;66859:249::-;66988:10;;-1:-1:-1;;;;;66988:10:0;4033;-1:-1:-1;;;;;66964:35:0;;66960:76;;67008:28;;-1:-1:-1;;;67008:28:0;;;;;;;;;;;66960:76;67049:51;67068:11;67081:8;67091;67049:18;:51::i;:::-;66859:249;;;:::o;33311:354::-;33389:15;4033:10;-1:-1:-1;;;;;33465:19:0;;33430:32;33465:19;;;:10;:19;;;;;;;;;33497:38;;-1:-1:-1;;;;33546:42:0;-1:-1:-1;;;33497:38:0;;;;;;;-1:-1:-1;;;;33546:42:0;;;;;-1:-1:-1;;;33546:42:0;;;;;;;;;33606:51;;21382:34:1;;;21432:18;;;21425:43;;;;33465:19:0;;-1:-1:-1;33606:51:0;;21330:18:1;33606:51:0;21187:287:1;63993:382:0;4033:10;25066:24;25078:11;25066;:24::i;:::-;64158:10:::1;::::0;:28:::1;::::0;;-1:-1:-1;;;64158:28:0;;;;4033:10;;-1:-1:-1;;;;;64158:10:0::1;::::0;:26:::1;::::0;:28:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:10;:28:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;64146:9;:40;64142:79;;;64195:26;;-1:-1:-1::0;;;64195:26:0::1;;;;;;;;;;;64142:79;64249:10;::::0;:52:::1;::::0;-1:-1:-1;;;64249:52:0;;-1:-1:-1;;;;;21882:32:1;;;64249:52:0::1;::::0;::::1;21864:51:1::0;-1:-1:-1;;;;;21951:39:1;;21931:18;;;21924:67;22039:4;22027:17;;22007:18;;;22000:45;64234:12:0::1;::::0;64249:10:::1;::::0;:23:::1;::::0;21837:18:1;;64249:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;64234:67;;64314:53;64332:6;64340;64348:11;64361:5;64314:53;;:17;:53::i;:::-;64091:284;;63993:382:::0;;;:::o;44123:375::-;44236:12;18138:21;18154:4;18138:15;:21::i;:::-;44333:5:::1;44321:9;:17;44317:48;;;44347:18;;-1:-1:-1::0;;;44347:18:0::1;;;;;;;;;;;44317:48;44422:17;44426:13:::0;44422:2:::1;:17;:::i;:::-;44398:20;:9:::0;44411:6:::1;44398:20;:::i;:::-;:42;;;;:::i;:::-;44378:17;:62:::0;44456:34:::1;::::0;2842:25:1;;;44456:34:0::1;::::0;2830:2:1;2815:18;44456:34:0::1;2696:177:1::0;46686:492:0;46756:14;18138:21;18154:4;18138:15;:21::i;:::-;-1:-1:-1;;;;;46787:24:0;::::1;46783:53;;46820:16;;-1:-1:-1::0;;;46820:16:0::1;;;;;;;;;;;46783:53;46849:35;46906:10;46849:68;;46963:16;-1:-1:-1::0;;;;;46963:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;46945:53:0::1;;47021:4;47041:16;-1:-1:-1::0;;;;;47041:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46945:130;::::0;-1:-1:-1;;;;;;46945:130:0::1;::::0;;;;;;-1:-1:-1;;;;;17951:15:1;;;46945:130:0::1;::::0;::::1;17933:34:1::0;18003:15;;17983:18;;;17976:43;17868:18;;46945:130:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46929:13;:146:::0;;-1:-1:-1;;;;;;46929:146:0;;::::1;-1:-1:-1::0;;;;;46929:146:0;;::::1;;::::0;;;47088:15:::1;:34:::0;;;;::::1;::::0;;::::1;;::::0;;47138:32:::1;::::0;;;::::1;::::0;::::1;::::0;-1:-1:-1;;47138:32:0::1;46772:406;46686:492:::0;;:::o;41448:250::-;41511:9;18138:21;18154:4;18138:15;:21::i;:::-;-1:-1:-1;;;;;41537:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;::::1;;41533:56;;;41573:16;;-1:-1:-1::0;;;41573:16:0::1;;;;;;;;;;;41533:56;-1:-1:-1::0;;;;;41610:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;41610:34:0::1;41640:4;41610:34;::::0;;41660:30;;2634:51:1;;;41660:30:0::1;::::0;2607:18:1;41660:30:0::1;2461:230:1::0;65482:334:0;4033:10;25066:24;25078:11;25066;:24::i;:::-;65589:14:::1;4033:10:::0;65647::::1;::::0;:58:::1;::::0;-1:-1:-1;;;65647:58:0;;-1:-1:-1;;;;;22579:32:1;;;65647:58:0::1;::::0;::::1;22561:51:1::0;22628:18;;;22621:34;;;22698:14;;22691:22;22671:18;;;22664:50;65589:29:0;;-1:-1:-1;65631:13:0::1;::::0;65647:10;;::::1;::::0;:23:::1;::::0;22534:18:1;;65647:58:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;65631:74;;65716:43;65738:6;65746;65754:4;65716:21;:43::i;:::-;65770:10;::::0;:38:::1;::::0;-1:-1:-1;;;65770:38:0;;-1:-1:-1;;;;;18472:32:1;;;65770:38:0::1;::::0;::::1;18454:51:1::0;18521:18;;;18514:34;;;65770:10:0;;::::1;::::0;:23:::1;::::0;18427:18:1;;65770:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;65578:238;;65482:334:::0;;;:::o;40605:265::-;40675:14;18138:21;18154:4;18138:15;:21::i;:::-;40788:11:::1;:26:::0;;-1:-1:-1;;;;;;40788:26:0::1;-1:-1:-1::0;;;;;40788:26:0;::::1;::::0;;::::1;::::0;;;40830:32:::1;::::0;::::1;::::0;-1:-1:-1;;40830:32:0::1;40605:265:::0;;:::o;43030:275::-;43110:14;18138:21;18154:4;18138:15;:21::i;:::-;43151:12:::1;::::0;-1:-1:-1;;;;;43151:12:0::1;43141:22:::0;::::1;43137:53;;;43172:18;;-1:-1:-1::0;;;43172:18:0::1;;;;;;;;;;;43137:53;43203:26;:36:::0;;;43255:42:::1;::::0;2842:25:1;;;43255:42:0::1;::::0;2830:2:1;2815:18;43255:42:0::1;2696:177:1::0;73665:204:0;73770:4;73747:13;18138:21;18154:4;18138:15;:21::i;:::-;73787:52:::1;73810:4;73817:6;73825;73833:5;73787:14;:52::i;:::-;-1:-1:-1::0;73857:4:0::1;::::0;73665:204;-1:-1:-1;;;73665:204:0:o;53595:713::-;53752:15;;53663:7;;-1:-1:-1;;;;;53741:26:0;;;53752:15;;53741:26;:63;;;;;38993:1;53771:24;;:33;53741:63;53737:77;;;-1:-1:-1;53813:1:0;;53595:713;-1:-1:-1;53595:713:0:o;53737:77::-;53827:15;53845:19;53856:7;53845:10;:19::i;:::-;53827:37;;38993:1;53879:7;;:16;;:82;;;;-1:-1:-1;53912:25:0;;53948:12;53912:49;;;;:25;;:49;53879:82;:119;;;;-1:-1:-1;;;;;;53978:18:0;;20323:19;:23;;53978:20;53879:164;;;;-1:-1:-1;;;;;;54016:27:0;;;;;;:18;:27;;;;;;;;54015:28;53879:164;53875:399;;;54209:53;54236:7;54253;54209:26;:53::i;40396:203::-;40453:14;18138:21;18154:4;18138:15;:21::i;:::-;40552:1:::1;40534:15;:19:::0;40569:22:::1;::::0;::::1;::::0;;;::::1;40396:203:::0;:::o;64383:463::-;4033:10;25066:24;25078:11;25066;:24::i;:::-;4033:10;64535:37:::1;4033:10:::0;64565:6;64535:21:::1;:37::i;:::-;64667:10;::::0;:47:::1;::::0;-1:-1:-1;;;64667:47:0;;-1:-1:-1;;;;;22943:32:1;;;64667:47:0::1;::::0;::::1;22925:51:1::0;22992:18;;;22985:34;;;-1:-1:-1;;;;;23055:39:1;;23035:18;;;23028:67;64585:17:0::1;::::0;;;64667:10;::::1;::::0;:24:::1;::::0;22898:18:1;;64667:47:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;64732:34;::::0;-1:-1:-1;;;;;11073:39:1;;11055:58;;64639:75:0;;-1:-1:-1;64639:75:0;;-1:-1:-1;;;;;;64732:34:0;::::1;::::0;-1:-1:-1;64732:34:0::1;::::0;11043:2:1;11028:18;64732:34:0::1;;;;;;;-1:-1:-1::0;;;;;64782:56:0;::::1;;64807:17;64818:6:::0;64807:8;:17:::1;:::i;:::-;64782:56;::::0;;-1:-1:-1;;;;;24009:39:1;;;23991:58;;24097:4;24085:17;;24080:2;24065:18;;24058:45;23964:18;64782:56:0::1;;;;;;;64484:362;;;64383:463:::0;;;:::o;72398:115::-;16627:12;:10;:12::i;:::-;72469:36:::1;4033:10:::0;72498:6:::1;72469:14;:36::i;44506:386::-:0;44626:12;18138:21;18154:4;18138:15;:21::i;:::-;44723:9:::1;44711;:21;44707:52;;;44741:18;;-1:-1:-1::0;;;44741:18:0::1;;;;;;;;;;;44707:52;44816:17;44820:13:::0;44816:2:::1;:17;:::i;:::-;44792:20;:9:::0;44805:6:::1;44792:20;:::i;:::-;:42;;;;:::i;:::-;44772:17;:62:::0;44850:34:::1;::::0;2842:25:1;;;44850:34:0::1;::::0;2830:2:1;2815:18;44850:34:0::1;2696:177:1::0;53466:121:0;53563:15;;53525:7;;53552:27;;-1:-1:-1;;;;;53563:15:0;53552:10;:27::i;:::-;53545:34;;53466:121;:::o;19127:312::-;16627:12;:10;:12::i;:::-;19232:17:::1;19224:4;:25;;;;;;;;:::i;:::-;::::0;19220:47:::1;;19258:9;;-1:-1:-1::0;;;19258:9:0::1;;;;;;;;;;;19220:47;-1:-1:-1::0;;;;;19282:27:0;::::1;19278:56;;19318:16;;-1:-1:-1::0;;;19318:16:0::1;;;;;;;;;;;19278:56;19376:4;19347:5:::0;:11:::1;19353:4;19347:11;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;19347:11:0;;;-1:-1:-1;;;;;19347:26:0;::::1;::::0;;;;;;;:33;;-1:-1:-1;;19347:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19426:4;19398:33:::1;::::0;::::1;;;;;;:::i;:::-;;::::0;-1:-1:-1;;;;;19398:33:0;::::1;::::0;::::1;::::0;;;::::1;19127:312:::0;;:::o;30452:201::-;30559:4;30581:42;4033:10;30605:9;30616:6;30581:9;:42::i;:::-;-1:-1:-1;30641:4:0;30452:201;;;;:::o;41267:173::-;41327:14;18138:21;18154:4;18138:15;:21::i;:::-;41366:8:::1;:25;;38960:1;41366:25;;;38993:1;41366:25;41354:9;:37:::0;41407:25:::1;::::0;1790:14:1;;1783:22;1765:41;;41407:25:0::1;::::0;1753:2:1;1738:18;41407:25:0::1;1625:187:1::0;66377:474:0;4033:10;25066:24;25078:11;25066;:24::i;:::-;66495:14:::1;4033:10:::0;66557::::1;::::0;:62:::1;::::0;-1:-1:-1;;;66557:62:0;;-1:-1:-1;;;;;24487:32:1;;;66557:62:0::1;::::0;::::1;24469:51:1::0;24536:18;;;24529:34;;;-1:-1:-1;;;;;24599:39:1;;24579:18;;;24572:67;24682:14;;24675:22;24655:18;;;24648:50;66495:29:0;;-1:-1:-1;66538:15:0::1;::::0;66557:10;;::::1;::::0;:19:::1;::::0;24441::1;;66557:62:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;66537:82:::0;-1:-1:-1;;;;;;66634:10:0;::::1;::::0;66630:86:::1;;66661:43;66683:6;66691;66699:4;66661:21;:43::i;:::-;66739:8;66730:17;;:5;:17;;:34;;;;-1:-1:-1::0;66751:13:0::1;::::0;::::1;::::0;::::1;66730:34;66726:118;;;66781:10;::::0;:51:::1;::::0;-1:-1:-1;;;66781:51:0;;-1:-1:-1;;;;;24928:32:1;;;66781:51:0::1;::::0;::::1;24910::1::0;24977:18;;;24970:34;;;25052:10;25040:23;;25020:18;;;25013:51;66781:10:0;;::::1;::::0;:26:::1;::::0;24883:18:1;;66781:51:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;66726:118;66484:367;;66377:474:::0;;;;:::o;31963:516::-;32053:13;32035:15;32044:6;32035;:15;:::i;:::-;:31;;;32031:61;;;32075:17;;-1:-1:-1;;;32075:17:0;;;;;;;;;;;32031:61;4033:10;32103:18;32124:24;;;:10;:24;;;;;:40;-1:-1:-1;;;32124:40:0;;;;32195:15;32181:29;;32177:52;;;32219:10;;-1:-1:-1;;;32219:10:0;;;;;;;;;;;32177:52;32242:14;32259:32;32285:6;32266:15;32259:32;:::i;:::-;32242:49;;32320:7;32306:21;;:11;:21;;;32302:52;;;32336:18;;-1:-1:-1;;;32336:18:0;;;;;;;;;;;32302:52;4033:10;32365:24;;;;:10;:24;;;;;:50;;-1:-1:-1;;;;32365:50:0;-1:-1:-1;;;32365:50:0;;;;;;;32433:38;;25687:14:1;25675:27;;25657:46;;-1:-1:-1;;;;;32433:38:0;;;;;;;25645:2:1;25630:18;32433:38:0;;;;;;;;32020:459;;31963:516;:::o;45286:349::-;45402:12;18138:21;18154:4;18138:15;:21::i;:::-;45445:7:::1;45436:6;:16;45432:47;;;45461:18;;-1:-1:-1::0;;;45461:18:0::1;;;;;;;;;;;45432:47;45539:17;45543:13:::0;45539:2:::1;:17;:::i;:::-;45518;:6:::0;45528::::1;45518:17;:::i;:::-;:39;;;;:::i;:::-;45492:23;:65:::0;;;45573:54:::1;::::0;2842:25:1;;;45573:54:0::1;::::0;2830:2:1;2815:18;45573:54:0::1;2696:177:1::0;41706:187:0;41777:14;18138:21;18154:4;18138:15;:21::i;:::-;-1:-1:-1;;;;;41804:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:34;;-1:-1:-1;;41804:34:0::1;41834:4;41804:34;::::0;;41854:31;::::1;::::0;41804:27;41854:31:::1;41706:187:::0;;:::o;67390:320::-;-1:-1:-1;;;;;67503:36:0;;:21;:36;;;:21;;:36;:21;:36;;;;;67498:70;;67548:20;;-1:-1:-1;;;67548:20:0;;;;;;;;;;;67498:70;67581:10;;-1:-1:-1;;;;;67581:10:0;:18;4033:10;67581:54;;-1:-1:-1;;;;;;67581:54:0;;;;;;;-1:-1:-1;;;;;25980:15:1;;;67581:54:0;;;25962:34:1;26032:15;;;26012:18;;;26005:43;26064:18;;;26057:34;;;25897:18;;67581:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;67646:56;67655:12;4033:10;;3937:115;67655:12;67669:13;67684:11;67697:4;67646:8;:56::i;:::-;;67390:320;;;:::o;72973:684::-;73164:13;73141;18138:21;18154:4;18138:15;:21::i;:::-;73203:10:::1;::::0;:121:::1;::::0;-1:-1:-1;;;73203:121:0;;-1:-1:-1;;;;;73203:10:0;;::::1;::::0;:36:::1;::::0;:121:::1;::::0;73240:9;;73251:13;;73266:11;;73279;;73292:15;;73309:7;;73203:10:::1;::::0;:121:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;73195:129;;::::0;-1:-1:-1;73337:13:0::1;73353:31;73369:15:::0;73353:13;:31:::1;:::i;:::-;73337:47;;73397:55;73420:4;73427:9;73438:6;73446:5;73397:14;:55::i;:::-;-1:-1:-1::0;;;;;73467:11:0;::::1;::::0;73463:110:::1;;73533:10;::::0;73495:66:::1;::::0;73518:4:::1;::::0;-1:-1:-1;;;;;73533:10:0::1;73546:7:::0;73533:10:::1;73495:14;:66::i;:::-;73593:56;73611:9;73622:6;73630:11;73643:5;73593:17;:56::i;:::-;73184:473;72973:684:::0;;;;;;;;;:::o;19447:318::-;16627:12;:10;:12::i;:::-;19555:17:::1;19547:4;:25;;;;;;;;:::i;:::-;::::0;19543:47:::1;;19581:9;;-1:-1:-1::0;;;19581:9:0::1;;;;;;;;;;;19543:47;-1:-1:-1::0;;;;;19605:27:0;::::1;19601:56;;19641:16;;-1:-1:-1::0;;;19641:16:0::1;;;;;;;;;;;19601:56;19699:5;19670;:11;19676:4;19670:11;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;19670:11:0;;;-1:-1:-1;;;;;19670:26:0;::::1;::::0;;;;;;;:34;;-1:-1:-1;;19670:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19752:4;19722:35:::1;::::0;::::1;;;;;;:::i;:::-;;::::0;-1:-1:-1;;;;;19722:35:0;::::1;::::0;::::1;::::0;;;::::1;19447:318:::0;;:::o;72521:228::-;16627:12;:10;:12::i;:::-;-1:-1:-1;;;;;72637:26:0;::::1;72633:55;;72672:16;;-1:-1:-1::0;;;72672:16:0::1;;;;;;;;;;;72633:55;72701:40;72716:12;72730:2;72734:6;72701:14;:40::i;31515:440::-:0;4033:10;25066:24;25078:11;25066;:24::i;:::-;-1:-1:-1;;;;;31626:24:0;::::1;31622:53;;31659:16;;-1:-1:-1::0;;;31659:16:0::1;;;;;;;;;;;31622:53;31708:13;31690:15;31699:6;31690::::0;:15:::1;:::i;:::-;:31;;;31686:61;;;31730:17;;-1:-1:-1::0;;;31730:17:0::1;;;;;;;;;;;31686:61;31803:32;31829:6:::0;31810:15:::1;31803:32;:::i;:::-;4033:10:::0;31760:24:::1;::::0;;;:10:::1;:24;::::0;;;;;;;:75;;-1:-1:-1;;;;31760:75:0::1;-1:-1:-1::0;;;31760:75:0::1;::::0;;::::1;;;::::0;;31846:12:::1;:26:::0;;;;;;:39;;-1:-1:-1;;;;;31846:39:0;::::1;-1:-1:-1::0;;;;;;31846:39:0;;::::1;::::0;::::1;::::0;;;31903:44;;27015:51:1;;;27102:27;;;27082:18;;;27075:55;4033:10:0;;31903:44:::1;::::0;26988:18:1;31903:44:0::1;26842:294:1::0;65824:545:0;4033:10;25066:24;25078:11;25066;:24::i;:::-;65922:14:::1;4033:10:::0;66006::::1;::::0;:47:::1;::::0;-1:-1:-1;;;66006:47:0;;-1:-1:-1;;;;;22943:32:1;;;66006:47:0::1;::::0;::::1;22925:51:1::0;22992:18;;;22985:34;;;-1:-1:-1;;;;;23055:39:1;;23035:18;;;23028:67;65922:29:0;;-1:-1:-1;65965:15:0::1;::::0;;;66006:10:::1;::::0;:24:::1;::::0;22898:18:1;;66006:47:0::1;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;65964:89;;;;66064:43;66086:6;66094;66102:4;66064:21;:43::i;:::-;-1:-1:-1::0;;;;;66132:17:0;::::1;::::0;66128:170:::1;;66197:10;::::0;66166:65:::1;::::0;66181:6;;-1:-1:-1;;;;;66197:10:0::1;66210:13:::0;66197:10:::1;66166:14;:65::i;:::-;66246:40;66272:13;-1:-1:-1::0;;;;;66246:40:0::1;:25;:40::i;:::-;66310:10;::::0;:51:::1;::::0;-1:-1:-1;;;66310:51:0;;-1:-1:-1;;;;;24928:32:1;;;66310:51:0::1;::::0;::::1;24910::1::0;24977:18;;;24970:34;;;25052:10;25040:23;;25020:18;;;25013:51;66310:10:0;;::::1;::::0;:26:::1;::::0;24883:18:1;;66310:51:0::1;24709:361:1::0;42485:281:0;42554:11;18138:21;18154:4;18138:15;:21::i;:::-;42624:22:::1;42639:7;42624:12;:22;:::i;:::-;-1:-1:-1::0;;;;;42613:33:0::1;:8;:33;42609:64;;;42655:18;;-1:-1:-1::0;;;42655:18:0::1;;;;;;;;;;;42609:64;42686:14;:25:::0;;;42727:31:::1;::::0;2842:25:1;;;42727:31:0::1;::::0;2830:2:1;2815:18;42727:31:0::1;2696:177:1::0;27255:1435:0;-1:-1:-1;;;;;27459:21:0;;27455:50;;27489:16;;-1:-1:-1;;;27489:16:0;;;;;;;;;;;27455:50;27531:15;27520:8;:26;27516:48;;;27555:9;;-1:-1:-1;;;27555:9:0;;;;;;;;;;;27516:48;-1:-1:-1;;;;;27612:17:0;;27577:32;27612:17;;;:10;:17;;;;;27655:15;;27612:17;;27655:15;;;;;27788:18;:16;:18::i;:::-;27857:240;;;24359:66;27857:240;;;27975:25:1;-1:-1:-1;;;;;28074:15:1;;;28054:18;;;28047:43;;;;28126:15;;;28106:18;;;28099:43;28158:18;;;28151:34;;;28234:18;28222:31;;28201:19;;;28194:60;28270:19;;;28263:35;;;27947:19;;27857:240:0;;;;;;;;;;;;27825:291;;;;;;27724:407;;;;;;;;-1:-1:-1;;;28567:27:1;;28619:1;28610:11;;28603:27;;;;28655:2;28646:12;;28639:28;28692:2;28683:12;;28309:392;27724:407:0;;;;-1:-1:-1;;27724:407:0;;;;;;;;;27700:442;;27724:407;27700:442;;;;28243:23;;;28212:7;;;;28243:23;;;-1:-1:-1;;28243:23:0;;;;;;27700:442;-1:-1:-1;28295:2:0;28291:6;;;;28287:171;;;28314:7;28319:2;28314:7;;:::i;:::-;;;28287:171;;;28347:2;28343:1;:6;;;28339:119;;;28385:60;;29157:66:1;28385:60:0;;;29145:79:1;29240:12;;;29233:28;;;29277:12;;28385:60:0;;;;;;;;;;;;28375:71;;;;;;28366:80;;28339:119;28497:26;;;28470:24;28497:26;;;;;;;;;29527:25:1;;;29600:4;29588:17;;29568:18;;;29561:45;;;;29622:18;;;29615:34;;;29665:18;;;29658:34;;;28497:26:0;;29499:19:1;;28497:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28497:26:0;;-1:-1:-1;;28497:26:0;;;-1:-1:-1;;;;;;;28538:30:0;;;;:59;;;28592:5;-1:-1:-1;;;;;28572:25:0;:16;-1:-1:-1;;;;;28572:25:0;;;28538:59;28534:90;;;28606:18;;-1:-1:-1;;;28606:18:0;;;;;;;;;;;28534:90;28645:37;28654:5;28661:7;28670:5;28677:4;28645:8;:37::i;:::-;;27444:1246;;;;27255:1435;;;;;;;:::o;31148:359::-;31368:4;31385:55;31392:6;4033:10;31414:6;31422:8;31432:1;31435;31438;31385:6;:55::i;:::-;31460:39;31473:6;31481:9;31492:6;31460:12;:39::i;:::-;31453:46;31148:359;-1:-1:-1;;;;;;;;31148:359:0:o;41901:193::-;41975:14;18138:21;18154:4;18138:15;:21::i;:::-;-1:-1:-1;;;;;42002:27:0;::::1;42032:5;42002:27:::0;;;:18:::1;:27;::::0;;;;;:35;;-1:-1:-1;;42002:35:0::1;::::0;;42053:33;::::1;::::0;42032:5;42053:33:::1;41901:193:::0;;:::o;45840:316::-;45941:14;18138:21;18154:4;18138:15;:21::i;:::-;-1:-1:-1;;;;;45977:24:0;::::1;45973:53;;46010:16;;-1:-1:-1::0;;;46010:16:0::1;;;;;;;;;;;45973:53;46039:26;:48:::0;;-1:-1:-1;;;;;;46039:48:0::1;-1:-1:-1::0;;;;;46039:48:0;::::1;::::0;;::::1;::::0;;;46103:45:::1;::::0;::::1;::::0;-1:-1:-1;;46103:45:0::1;45840:316:::0;;:::o;44900:378::-;45008:12;18138:21;18154:4;18138:15;:21::i;:::-;45064:11:::1;45042:19;:33;45038:64;;;45084:18;;-1:-1:-1::0;;;45084:18:0::1;;;;;;;;;;;45038:64;45174:21;37436:2;45174;:21;:::i;:::-;45151:45;::::0;:19;:45:::1;:::i;:::-;45123:25;:73:::0;;;45212:58:::1;::::0;2842:25:1;;;45212:58:0::1;::::0;2830:2:1;2815:18;45212:58:0::1;2696:177:1::0;32487:349:0;-1:-1:-1;;;;;32563:27:0;;;;;;;:12;:27;;;;;;;4033:10;32563:43;32559:75;;32615:19;;-1:-1:-1;;;32615:19:0;;;;;;;;;;;32559:75;4033:10;32645:18;32666:24;;;:10;:24;;;;;:40;-1:-1:-1;;;32666:40:0;;;;32737:15;32723:29;;32719:52;;;32761:10;;-1:-1:-1;;;32761:10:0;;;;;;;;;;;32719:52;-1:-1:-1;;4033:10:0;32784:24;;;;:10;:24;;;;;:44;;-1:-1:-1;;;;32784:44:0;-1:-1:-1;;;32784:44:0;;;32487:349::o;40878:190::-;16627:12;:10;:12::i;:::-;40986:8:::1;:25;;38960:1;40986:25;;;38993:1;40986:25;40959:24;:52:::0;41027:33:::1;::::0;1790:14:1;;1783:22;1765:41;;41027:33:0::1;::::0;1753:2:1;1738:18;41027:33:0::1;;;;;;;;40878:190:::0;:::o;29953:491::-;-1:-1:-1;;;;;30065:17:0;;;30025:7;30065:17;;;:10;:17;;;;;;;;:28;30142:10;:17;;;;;:26;;;;;;;;;;;30199:28;;30025:7;;30065:28;-1:-1:-1;;;30065:28:0;;;;;;-1:-1:-1;;;30199:28:0;;;30185:42;;;;:104;;-1:-1:-1;30262:27:0;;-1:-1:-1;;;30262:27:0;;;;30244:15;:45;30185:104;:157;;;-1:-1:-1;30306:31:0;;-1:-1:-1;;;30306:31:0;;;;30341:1;30306:36;;30185:157;30181:207;;;30375:1;30368:8;;;;;;30181:207;30407:29;-1:-1:-1;;;;;30407:29:0;;29953:491;-1:-1:-1;;;;29953:491:0:o;47320:161::-;16627:12;:10;:12::i;:::-;47404:8:::1;:25;;38960:1;47404:25;;;38993:1;47404:25;47389:12;:40:::0;47445:28:::1;::::0;1790:14:1;;1783:22;1765:41;;47445:28:0::1;::::0;1753:2:1;1738:18;47445:28:0::1;1625:187:1::0;67116:241:0;67245:10;;67200:4;;-1:-1:-1;;;;;67245:10:0;4033;-1:-1:-1;;;;;67221:35:0;;67217:76;;67265:28;;-1:-1:-1;;;67265:28:0;;;;;;;;;;;67217:76;67313:36;67331:7;67340:8;67313:17;:36::i;42235:242::-;42298:9;18138:21;18154:4;18138:15;:21::i;:::-;-1:-1:-1;;;;;42325:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;::::1;;42320:57;;42361:16;;-1:-1:-1::0;;;42361:16:0::1;;;;;;;;;;;42320:57;-1:-1:-1::0;;;;;42390:27:0;::::1;42420:5;42390:27:::0;;;:18:::1;:27;::::0;;;;;;;;:35;;-1:-1:-1;;42390:35:0::1;::::0;;42441:28;;2634:51:1;;;42441:28:0::1;::::0;2607:18:1;42441:28:0::1;2461:230:1::0;71673:536:0;16627:12;:10;:12::i;:::-;47561:14;;:18;71774:51:::1;;71804:21;;-1:-1:-1::0;;;71804:21:0::1;;;;;;;;;;;71774:51;71951:78;71974:4;4033:10:::0;72011:4:::1;71995:22;::::0;;;:7:::1;:22;::::0;;;;;:26:::1;::::0;72020:1:::1;::::0;-1:-1:-1;;;;;71995:22:0::1;:26;:::i;:::-;72023:5;71951:14;:78::i;:::-;38993:1;72042:15;:23:::0;;;72076:12:::1;:20:::0;72124:19:::1;72139:4;72124:12;:19;:::i;:::-;-1:-1:-1::0;;;;;72107:36:0::1;:14;:36:::0;72187:14:::1;::::0;::::1;::::0;;;::::1;71673:536::o:0;18300:357::-;16627:12;:10;:12::i;:::-;-1:-1:-1;;;;;18388:22:0;::::1;18384:51;;18419:16;;-1:-1:-1::0;;;18419:16:0::1;;;;;;;;;;;18384:51;18448:21;18472:5:::0;;-1:-1:-1;;;;;18472:5:0::1;::::0;18488:32:::1;::::0;18472:5;;18488:10:::1;:32::i;:::-;18531:26;18542:8;18552:4;18531:10;:26::i;:::-;18570:5;:16:::0;;-1:-1:-1;;;;;;18570:16:0::1;-1:-1:-1::0;;;;;18570:16:0;;::::1;::::0;;::::1;::::0;;18604:45:::1;::::0;18570:16;;18604:45;;::::1;::::0;::::1;::::0;18570:5;18604:45:::1;18373:284;18300:357:::0;:::o;46446:232::-;16627:12;:10;:12::i;:::-;46528:10:::1;:42:::0;;-1:-1:-1;;;;;;46528:42:0::1;-1:-1:-1::0;;;;;46528:42:0;::::1;;::::0;;46583:31:::1;46528:42:::0;46583:14:::1;:31::i;:::-;46632:38;::::0;-1:-1:-1;;;;;46632:38:0;::::1;::::0;::::1;::::0;;;::::1;46446:232:::0;:::o;63694:291::-;63802:11;25066:24;25078:11;25066;:24::i;:::-;63854:10:::1;::::0;-1:-1:-1;;;;;63854:10:0::1;4033::::0;-1:-1:-1;;;;;63830:35:0::1;;63826:76;;63874:28;;-1:-1:-1::0;;;63874:28:0::1;;;;;;;;;;;63826:76;63915:62;63936:11;63949:9;63960:16;63915:20;:62::i;42774:248::-:0;42850:12;18138:21;18154:4;18138:15;:21::i;:::-;42886:3:::1;42878:5;:11;:32;;;;42901:9;42893:5;:17;42878:32;42874:63;;;42919:18;;-1:-1:-1::0;;;42919:18:0::1;;;;;;;;;;;42874:63;42948:15;:23:::0;;;42987:27:::1;::::0;2842:25:1;;;42987:27:0::1;::::0;2830:2:1;2815:18;42987:27:0::1;2696:177:1::0;17954:126:0;18019:5;:11;18025:4;18019:11;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:25;18031:12;4033:10;;3937:115;18031:12;-1:-1:-1;;;;;18019:25:0;;;;;;;;;;;;-1:-1:-1;18019:25:0;;;;18014:58;;18053:19;;-1:-1:-1;;;18053:19:0;;;;;;;;;;;60897:903;60934:15;38993:1;60966:15;;:24;60962:831;;61075:23;;61025:21;;61065:33;;:106;;;;;61156:15;;61134:19;;:37;;;;:::i;:::-;61119:12;:52;61065:106;61061:721;;;61249:13;61260:2;61249:13;;:::i;:::-;61305:18;;61362:17;;61249:13;;-1:-1:-1;61305:18:0;61346:33;;61342:115;;;-1:-1:-1;61420:17:0;;61342:115;61495:7;61479:13;:23;61475:164;;;-1:-1:-1;61612:7:0;61475:164;61663:17;;61659:108;;61718:29;61733:13;61718:14;:29::i;:::-;61705:42;;61659:108;61188:594;61061:721;60992:801;60962:831;60897:903;:::o;58040:979::-;-1:-1:-1;;;;;58209:15:0;;58190:16;58209:15;;;:7;:15;;;;;;:24;;58227:6;;-1:-1:-1;;;;;58209:15:0;:24;:::i;:::-;-1:-1:-1;;;;;58244:15:0;;;;;;:7;:15;;;;;:27;;-1:-1:-1;;;;;;58244:27:0;-1:-1:-1;;;;;58244:27:0;;;;;;;-1:-1:-1;58304:7:0;:45;;58348:1;58304:45;;;58323:12;;58339:5;;58314:21;;-1:-1:-1;;;;;58323:12:0;58314:6;:21;:::i;:::-;:31;;;;:::i;:::-;58284:65;-1:-1:-1;58360:22:0;58385:19;58284:65;58385:6;:19;:::i;:::-;-1:-1:-1;;;;;58435:18:0;;58417:15;58435:18;;;:7;:18;;;;;;58360:44;;-1:-1:-1;;;;;;58435:18:0;58486:26;58360:44;58435:18;58486:26;:::i;:::-;-1:-1:-1;;;;;58465:18:0;;;;;;:7;:18;;;;;:47;;-1:-1:-1;;;;;;58465:47:0;-1:-1:-1;;;;;58465:47:0;;;;;;58529:14;;;58525:137;;58630:4;58614:22;;;;:7;:22;;;;;:36;;58640:10;;58614:22;:36;;58640:10;;-1:-1:-1;;;;;58614:36:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;58614:36:0;;;;;-1:-1:-1;;;;;58614:36:0;;;;;;58525:137;58674:34;58688:9;58699:8;58674:13;:34::i;:::-;58733:15;;-1:-1:-1;;;;;58733:15:0;;;58723:25;;;;58719:231;;58784:15;;58770:49;;-1:-1:-1;;;;;11073:39:1;;11055:58;;-1:-1:-1;;;;;58770:49:0;;;;58784:15;;58770:49;;11043:2:1;11028:18;58770:49:0;;;;;;;58719:231;;;58854:15;;-1:-1:-1;;;;;58854:15:0;;;58841:28;;;;58837:113;;58906:15;;58891:47;;-1:-1:-1;;;;;11073:39:1;;11055:58;;-1:-1:-1;;;;;58891:47:0;;;;58906:15;;58891:47;;11043:2:1;11028:18;58891:47:0;;;;;;;58837:113;58967:44;;-1:-1:-1;;;;;11073:39:1;;11055:58;;-1:-1:-1;;;;;58967:44:0;;;;;;;;-1:-1:-1;;;;;;;;;;;58967:44:0;11043:2:1;11028:18;58967:44:0;;;;;;;58179:840;;;;58040:979;;;;:::o;28851:1094::-;28991:4;-1:-1:-1;;;;;29012:19:0;;29008:48;;29040:16;;-1:-1:-1;;;29040:16:0;;;;;;;;;;;29008:48;-1:-1:-1;;;;;29071:21:0;;29067:50;;29101:16;;-1:-1:-1;;;29101:16:0;;;;;;;;;;;29067:50;-1:-1:-1;;;;;29134:26:0;;29130:58;;;-1:-1:-1;;;;;29171:17:0;-1:-1:-1;29130:58:0;-1:-1:-1;;;;;29236:17:0;;;29201:32;29236:17;;;:10;:17;;;;;;;;29295:10;:17;;;;;:26;;;;;;;;;;;29334:40;;-1:-1:-1;;29334:40:0;;-1:-1:-1;;;;;29334:40:0;;;;;;;29409:20;;-1:-1:-1;;29385:44:0;;;;-1:-1:-1;;;29409:20:0;;;;;-1:-1:-1;;;29385:44:0;;;;29440:377;;;;29497:30;;-1:-1:-1;;;29497:30:0;;;;29605:25;;:164;;29739:30;:20;29762:7;29739:30;:::i;:::-;29713:56;;29720:15;29713:56;:::i;:::-;29605:164;;;29651:16;29605:164;29582:187;;;;;;;-1:-1:-1;;;29582:187:0;-1:-1:-1;;;;29582:187:0;;;;;;-1:-1:-1;29440:377:0;29829:28;;-1:-1:-1;;;;;29829:28:0;-1:-1:-1;;;29829:28:0;;;29883:32;;-1:-1:-1;;;;;29883:32:0;;;;;;;;;;;;29908:6;2842:25:1;;2830:2;2815:18;;2696:177;29883:32:0;;;;;;;;-1:-1:-1;29933:4:0;;28851:1094;-1:-1:-1;;;;;;28851:1094:0:o;25122:158::-;-1:-1:-1;;;;;25215:23:0;25191:4;25215:23;;;:10;:23;;;;;:39;25257:15;-1:-1:-1;;;25215:39:0;;;;;:57;;25122:158::o;54476:3556::-;54600:4;25066:24;25078:11;25066;:24::i;:::-;-1:-1:-1;;;;;54621:18:0;::::1;::::0;;:38:::1;;-1:-1:-1::0;;;;;;54643:16:0;::::1;::::0;54621:38:::1;54617:67;;;54668:16;;-1:-1:-1::0;;;54668:16:0::1;;;;;;;;;;;54617:67;54699:6;54709:1;54699:11:::0;54695:53:::1;;54719:29;;-1:-1:-1::0;;;54719:29:0::1;;;;;;;;;;;54695:53;-1:-1:-1::0;;;;;54792:19:0;::::1;;::::0;;;:13:::1;:19;::::0;;;;;-1:-1:-1;;;;;54792:19:0::1;54773:16;54806:4:::0;54773:10:::1;:16::i;:::-;:38;;;;:::i;:::-;54763:6;:49;54759:94;;;54821:32;;-1:-1:-1::0;;;54821:32:0::1;;;;;;;;;;;54759:94;-1:-1:-1::0;;;;;54890:24:0;::::1;54866:21;54890:24:::0;;;:18:::1;:24;::::0;;;;;::::1;;::::0;:50:::1;;-1:-1:-1::0;;;;;;54918:22:0;::::1;;::::0;;;:18:::1;:22;::::0;;;;;::::1;;54890:50;54970:7;::::0;54866:74;;-1:-1:-1;38993:1:0::1;54970:16;;54953:14;55015:17;47561:14:::0;;:18;;;47489:98;55015:17:::1;55058:13;::::0;54997:35;;-1:-1:-1;;;;;;55058:13:0;;::::1;::::0;55096:10;;::::1;::::0;::::1;::::0;55130:12;::::1;::::0;::::1;55158:16:::0;55153:1304:::1;;55209:4;-1:-1:-1::0;;;;;55195:19:0;::::1;::::0;55191:52:::1;;55223:20;;-1:-1:-1::0;;;55223:20:0::1;;;;;;;;;;;55191:52;55271:14;;55262:6;:23;55258:54;;;55294:18;;-1:-1:-1::0;;;55294:18:0::1;;;;;;;;;;;55258:54;55332:10;55327:41;;55351:17;;-1:-1:-1::0;;;55351:17:0::1;;;;;;;;;;;55327:41;55387:9;55383:1063;;;55493:6;:15;;;;55503:5;55493:15;55492:58;;;;-1:-1:-1::0;55524:9:0::1;55513:21;::::0;;;:10:::1;:21;::::0;;;;;55538:12:::1;55513:37;55492:58;55488:143;;;55582:29;;-1:-1:-1::0;;;55582:29:0::1;;;;;;;;;;;55488:143;55662:9;55651:21;::::0;;;:10:::1;:21;::::0;;;;55675:12:::1;55651:36:::0;;55817:6;:31;::::1;;;;38993:1;55827:12;;:21;55817:31;55813:618;;;55893:24;::::0;-1:-1:-1;;;;;55893:24:0::1;::::0;55944:25:::1;55963:4;55944:10;:25::i;:::-;:38;55940:358;;;56248:26;56263:10;-1:-1:-1::0;;;;;56248:26:0::1;:14;:26::i;:::-;56326:10;:8;:10::i;:::-;56322:90;;;56370:18;::::0;::::1;::::0;;;::::1;56322:90;55850:581;55813:618;56473:10;56469:697;;;56504:5;56500:655;;;56548:6;56530:14;;:24;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;56500:655:0::1;::::0;-1:-1:-1;56500:655:0::1;;56580:6;56576:579;;;56627:6;56608:15;;:25;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;56665:25:0::1;::::0;56656:34;::::1;56652:488;;;56762:19;56784:27;56808:3;56784:21;:27;:::i;:::-;56762:49;;56834:16;56874:3;56853:18;;:24;;;;:::i;:::-;56834:43;;56988:8;56974:11;:22;56970:50;;;57012:8;56998:22;;56970:50;57109:11;57087:18;;:33;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;56652:488:0::1;57278:4;57297:16:::0;;:43:::1;;-1:-1:-1::0;;;;;;42192:27:0;;42168:4;42192:27;;;:18;:27;;;;;;;;57317:23:::1;57293:91;;;-1:-1:-1::0;57367:5:0::1;57293:91;57586:9;57582:381;;;57616:16;57612:340;;;57738:25:::0;:29;;-1:-1:-1;;57738:29:0::1;57766:1;57738:29;::::0;;57612:340:::1;;;57890:46;57933:2;57890:42;:46::i;:::-;57975:49;57990:4;57996:2;58007:6;58016:7;57975:14;:49::i;:::-;54606:3426;;;;;;;54476:3556:::0;;;;:::o;24876:130::-;24947:28;24963:11;24947:15;:28::i;:::-;24943:55;;;24984:14;;-1:-1:-1;;;24984:14:0;;;;;;;;;;;65197:277;-1:-1:-1;;;;;65294:21:0;;;;;;:13;:21;;;;;:31;;65319:6;;65294:21;:31;;65319:6;;-1:-1:-1;;;;;65294:31:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;65294:31:0;;;;;-1:-1:-1;;;;;65294:31:0;;;;;;65340:9;65336:131;;;65371:32;;-1:-1:-1;;;;;11073:39:1;;11055:58;;-1:-1:-1;;;;;65371:32:0;;;;;11043:2:1;11028:18;65371:32:0;;;;;;;65423;;-1:-1:-1;;;;;11073:39:1;;11055:58;;-1:-1:-1;;;;;65423:32:0;;;;;-1:-1:-1;;;;;;;;;;;65423:32:0;11043:2:1;11028:18;65423:32:0;;;;;;;;65197:277;;;:::o;69149:::-;69263:40;69285:9;69296:6;69263:21;:40::i;:::-;69314:10;;:38;;-1:-1:-1;;;69314:38:0;;-1:-1:-1;;;;;18472:32:1;;;69314:38:0;;;18454:51:1;18521:18;;;18514:34;;;69314:10:0;;;;:20;;18427:18:1;;69314:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;69370:48:0;;;-1:-1:-1;;;;;24009:39:1;;23991:58;;24097:4;24085:17;;24080:2;24065:18;;24058:45;-1:-1:-1;;;;;69370:48:0;;;-1:-1:-1;69370:48:0;;-1:-1:-1;23964:18:1;69370:48:0;23822:287:1;16483:104:0;16533:5;;-1:-1:-1;;;;;16533:5:0;4033:10;16533:21;16529:50;;16563:16;;-1:-1:-1;;;16563:16:0;;;;;;;;;;;16529:50;16483:104::o;26238:1009::-;-1:-1:-1;;;;;26338:22:0;;26334:51;;26369:16;;-1:-1:-1;;;26369:16:0;;;;;;;;;;;26334:51;-1:-1:-1;;;;;26429:17:0;;;26398:28;26429:17;;;:10;:17;;;;;;;;:27;;;;;;;;;;;26502:17;;;:10;:17;;;;;;26530:710;;;;26589:28;;-1:-1:-1;;;26589:28:0;;;;26561:25;26651:23;;:160;;26783:28;:18;26804:7;26783:28;:::i;:::-;26757:54;;;;26764:15;26757:54;:::i;:::-;26651:160;;;26695:16;26651:160;26886:18;;26864:40;;-1:-1:-1;;;;26919:32:0;;;;-1:-1:-1;;;26919:32:0;-1:-1:-1;;;;;;;26886:18:0;-1:-1:-1;;;26886:18:0;;;;;;;26864:40;;;;26919:32;;;;-1:-1:-1;;;;26919:32:0;;;;;26966:26;-1:-1:-1;;;26966:26:0;;;-1:-1:-1;26530:710:0;;-1:-1:-1;26530:710:0;;27150:18;27128:44;;-1:-1:-1;;;;27202:26:0;-1:-1:-1;;;;;;27150:18:0;;;;;;;-1:-1:-1;;27150:22:0;27128:44;;;;;-1:-1:-1;;;;27202:26:0;;;;-1:-1:-1;;;26238:1009:0:o;53348:110::-;-1:-1:-1;;;;;53434:16:0;53407:7;53434:16;;;:7;:16;;;;;;-1:-1:-1;;;;;53434:16:0;;53348:110::o;70381:1268::-;70480:20;;-1:-1:-1;;;70480:20:0;;-1:-1:-1;;;;;70480:20:0;70504:9;70480:33;;;:77;;-1:-1:-1;70541:13:0;:16;-1:-1:-1;;;;;70530:27:0;;;-1:-1:-1;;;70541:16:0;;;;70530:27;;70480:77;70476:163;;;70381:1268;;:::o;70476:163::-;70769:14;70785;70803:20;:7;-1:-1:-1;;;;;70803:18:0;;:20::i;:::-;70768:55;;-1:-1:-1;70768:55:0;-1:-1:-1;;;;;;70862:20:0;;70858:33;;70884:7;;70381:1268;;:::o;70858:33::-;70901:17;70951:4;-1:-1:-1;;;;;70933:23:0;;;70929:279;;-1:-1:-1;71050:6:0;;-1:-1:-1;71086:4:0;70929:279;;;-1:-1:-1;;;;;71112:23:0;;71130:4;71112:23;71108:100;;71190:7;;;70381:1268;;:::o;71108:100::-;71239:33;;-1:-1:-1;;;71239:33:0;;-1:-1:-1;;;;;2652:32:1;;;71239:33:0;;;2634:51:1;71220:16:0;;71239:24;;;;;;2607:18:1;;71239:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;71360:13;:22;71220:52;;-1:-1:-1;;;;;;71360:22:0;71349:33;;;;:83;;;;-1:-1:-1;71410:22:0;;-1:-1:-1;;;;;71410:22:0;71399:33;;71349:83;71345:297;;;71607:23;;-1:-1:-1;;;71607:23:0;;;;;;;;;;;64854:335;-1:-1:-1;;;;;64957:21:0;;64935:19;64957:21;;;:13;:21;;;;;;:30;;64981:6;;-1:-1:-1;;;;;64957:21:0;:30;:::i;:::-;64935:52;;65017:18;65028:6;65017:10;:18::i;:::-;65002:12;-1:-1:-1;;;;;65002:33:0;;64998:78;;;65044:32;;-1:-1:-1;;;65044:32:0;;;;;;;;;;;64998:78;-1:-1:-1;;;;;65087:21:0;;;;;;:13;:21;;;;;;;;;:36;;-1:-1:-1;;;;;;65087:36:0;-1:-1:-1;;;;;65087:36:0;;;;;;;;;;65149:32;;11073:39:1;;;11055:58;;65087:21:0;;-1:-1:-1;;;;;;;;;;;65149:32:0;11028:18:1;65149:32:0;10911:208:1;72217:173:0;72297:9;72312:2;-1:-1:-1;;;;;72312:7:0;72327:6;72312:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;72296:42;;;72354:4;72349:33;;72367:15;;-1:-1:-1;;;72367:15:0;;;;;;;;;;;72757:208;72850:41;;-1:-1:-1;;;72850:41:0;;-1:-1:-1;;;;;18472:32:1;;;72850:41:0;;;18454:51:1;18521:18;;;18514:34;;;72850:29:0;;;;;18427:18:1;;72850:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;72946:2;-1:-1:-1;;;;;72909:48:0;72932:12;-1:-1:-1;;;;;72909:48:0;;72950:6;72909:48;;;;2842:25:1;;2830:2;2815:18;;2696:177;63487:195:0;63561:10;;63557:118;;63588:10;;:32;;-1:-1:-1;;;63588:32:0;;;;;2842:25:1;;;-1:-1:-1;;;;;63588:10:0;;;;:24;;2815:18:1;;63588:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;63642:21;63656:6;63642:21;;;;2842:25:1;;2830:2;2815:18;;2696:177;33818:447:0;-1:-1:-1;;;;;33938:19:0;;;33903:4;33938:19;;;:10;:19;;;;;;;;:28;34008:10;:19;;;;;:29;;;;;;;;;;;34066:19;;33903:4;;33938:28;-1:-1:-1;;;33938:28:0;;;;;;-1:-1:-1;;;34066:19:0;;;34054:31;;;;:86;;-1:-1:-1;34120:20:0;;-1:-1:-1;;;34120:20:0;;;;34102:15;:38;34054:86;:130;;;-1:-1:-1;34157:22:0;;-1:-1:-1;;;34157:22:0;;;;34183:1;34157:27;;34054:130;34050:184;;;34217:5;34210:12;;;;;;34050:184;-1:-1:-1;34253:4:0;;33818:447;-1:-1:-1;;;;33818:447:0:o;18665:454::-;-1:-1:-1;;;;;18733:27:0;;;;:19;:27;;;:19;;:27;;;:19;:27;;;:36;;;;;-1:-1:-1;;18733:36:0;;;;;;;;18780:21;:29;;;;;:38;;;;;;;;18829:18;:26;;;;;:35;;;;;;;;18875:21;:29;;;;;:38;;;;;;;;18924:16;:24;;;;;:33;;;;;;;;18968:21;:29;;;;;:38;;;;;;;;19017:29;:37;;;;;:46;;;;;;;;19074:20;:28;;;;;;:37;;;;;;;;18665:454::o;59027:576::-;59201:44;59223:6;59231;59239:5;59201:21;:44::i;:::-;-1:-1:-1;;;;;59275:15:0;;59256:16;59275:15;;;:7;:15;;;;;;:24;;59293:6;;-1:-1:-1;;;;;59275:15:0;:24;:::i;:::-;-1:-1:-1;;;;;59310:15:0;;;;;;;:7;:15;;;;;;:27;;-1:-1:-1;;;;;;59310:27:0;-1:-1:-1;;;;;59310:27:0;;;;;;;;;;59376:18;;;;;;;;59310:27;;-1:-1:-1;59376:18:0;59427:17;59438:6;59376:18;59427:17;:::i;:::-;-1:-1:-1;;;;;59406:18:0;;;;;;:7;:18;;;;;:38;;-1:-1:-1;;;;;;59406:38:0;-1:-1:-1;;;;;59406:38:0;;;;;;;;;;59455:40;59406:18;59488:6;59455:21;:40::i;:::-;59508:34;59522:9;59533:8;59508:13;:34::i;:::-;59560:35;;-1:-1:-1;;;;;11073:39:1;;11055:58;;-1:-1:-1;;;;;59560:35:0;;;;;;;;-1:-1:-1;;;;;;;;;;;59560:35:0;11043:2:1;11028:18;59560:35:0;;;;;;;59149:454;;59027:576;;;:::o;61808:833::-;61877:15;38993:1;51217:7;;:16;51209:25;;;;;;38993:1;51245:7;:15;61926:17:::1;::::0;61905:18:::1;:38:::0;62029:10;;62025:609:::1;;62098:10;::::0;62056:20:::1;::::0;62079:31:::1;::::0;-1:-1:-1;;;;;62098:10:0::1;62079;:31::i;:::-;62159:15;::::0;62184:10:::1;::::0;62125:79:::1;::::0;-1:-1:-1;;;62125:79:0;;-1:-1:-1;;;;;62159:15:0;;::::1;62125:79;::::0;::::1;25962:34:1::0;62184:10:0;::::1;26012:18:1::0;;;26005:43;26064:18;;;26057:34;;;62056:54:0;;-1:-1:-1;62125:11:0::1;::::0;:33:::1;::::0;25897:18:1;;62125:79:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;62332:10:0::1;::::0;62288:22:::1;::::0;-1:-1:-1;62347:12:0;;-1:-1:-1;62313:31:0::1;::::0;-1:-1:-1;;;;;62332:10:0::1;62313;:31::i;:::-;:46;;;;:::i;:::-;62381:44;::::0;;31582:25:1;;;31638:2;31623:18;;31616:34;;;62288:71:0;;-1:-1:-1;62381:44:0::1;::::0;31555:18:1;62381:44:0::1;;;;;;;62462:12;62440:19;:34:::0;62547:41:::1;62573:14:::0;62547:25:::1;:41::i;:::-;62618:4;62605:17;;62041:593;;62025:609;38960:1:::0;51417:7;:16;61808:833;;-1:-1:-1;61808:833:0:o;59611:418::-;59715:8;;;-1:-1:-1;;;;;59797:14:0;;59688:24;59797:14;59793:33;;59813:13;;;:::i;:::-;;;59793:33;59841:8;-1:-1:-1;;;;;59841:13:0;59853:1;59841:13;59837:32;;59856:13;;;:::i;:::-;;;59837:32;59906:11;59886:16;:31;59882:140;;59988:8;:22;-1:-1:-1;;;59611:418:0:o;62688:773::-;38993:1;51217:7;;:16;51209:25;;;;;;38993:1;51245:7;:15;62858::::1;::::0;62792:21:::1;::::0;62826:68:::1;::::0;62843:4:::1;::::0;-1:-1:-1;;;;;62858:15:0::1;62876:11:::0;62858:15;62826:8:::1;:68::i;:::-;;62980:11;-1:-1:-1::0;;;;;62954:38:0::1;:15;;:38;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;63034:15:0::1;::::0;63005:58:::1;::::0;-1:-1:-1;;;63005:58:0;;-1:-1:-1;;;;;63034:15:0;;::::1;63005:58;::::0;::::1;18454:51:1::0;18521:18;;;18514:34;;;63005:11:0::1;::::0;:28:::1;::::0;18427:18:1;;63005:58:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;63076:29;63132:17;63108:21;:41;;;;:::i;:::-;63165:55;::::0;;31582:25:1;;;31638:2;31623:18;;31616:34;;;63076:73:0;;-1:-1:-1;63165:55:0::1;::::0;31555:18:1;63165:55:0::1;;;;;;;63365:12;::::0;63336:26:::1;::::0;-1:-1:-1;;;;;63365:12:0;;::::1;::::0;63312:50:::1;::::0;:21;:50:::1;:::i;:::-;:65;;;;:::i;:::-;63403:26;::::0;63288:89;;-1:-1:-1;63388:65:0::1;::::0;-1:-1:-1;;;;;63403:26:0::1;63288:89:::0;63388:14:::1;:65::i;:::-;-1:-1:-1::0;;38960:1:0;51417:7;:16;-1:-1:-1;62688:773:0:o;69454:858::-;69537:15;69562:14;69573:2;69562:10;:14::i;:::-;69537:40;;69589:14;69605;69623:15;:2;-1:-1:-1;;;;;69623:13:0;;:15::i;:::-;69588:50;;-1:-1:-1;69588:50:0;-1:-1:-1;69671:4:0;-1:-1:-1;;;;;69653:23:0;;;69649:139;;-1:-1:-1;69770:6:0;69649:139;-1:-1:-1;;;;;69813:20:0;;69809:197;;-1:-1:-1;;69944:25:0;:29;;-1:-1:-1;;69944:29:0;69972:1;69944:29;;;-1:-1:-1;;69454:858:0:o;69809:197::-;70051:28;;-1:-1:-1;;;70051:28:0;;-1:-1:-1;;;;;2652:32:1;;;70051:28:0;;;2634:51:1;70026:15:0;;70051:24;;;;;;2607:18:1;;70051:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;70109:195;;;;;;;;-1:-1:-1;;;;;70109:195:0;;;;;;-1:-1:-1;;;;;70109:195:0;;;;;;;;;;;;;;;;;;;;70235:9;70109:195;;;;;;70279:12;70109:195;;;;;;;;;-1:-1:-1;;;70093:211:0;;;;;;:13;:211;;;;;;;;-1:-1:-1;;70093:211:0;;;-1:-1:-1;;70093:211:0;;;;;;-1:-1:-1;69454:858:0:o;20584:332::-;20641:14;;-1:-1:-1;;;;;20323:19:0;;;20763:54;;-1:-1:-1;20802:1:0;;;;-1:-1:-1;20584:332:0;-1:-1:-1;20584:332:0:o;20763:54::-;20411;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20411:54:0;-1:-1:-1;;;20411:54:0;;;20839:33;;20851:4;;20839:11;:33::i;:::-;20521:54;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20521:54:0;-1:-1:-1;;;20521:54:0;;;20874:33;;20886:4;;20874:11;:33::i;:::-;20831:77;;;;20584:332;;;:::o;20924:346::-;21031:7;21057:12;21071:17;21092:4;-1:-1:-1;;;;;21092:15:0;21108:8;21092:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21056:61;;;;21134:7;:28;;;;;21160:2;21145:4;:11;:17;;21134:28;21130:95;;;21197:4;21186:27;;;;;;;;;;;;:::i;:::-;21179:34;;;;;;21130:95;-1:-1:-1;21260:1:0;;20924:346;-1:-1:-1;;;;20924:346:0:o;14:258:1:-;86:1;96:113;110:6;107:1;104:13;96:113;;;186:11;;;180:18;167:11;;;160:39;132:2;125:10;96:113;;;227:6;224:1;221:13;218:48;;;-1:-1:-1;;262:1:1;244:16;;237:27;14:258::o;277:383::-;426:2;415:9;408:21;389:4;458:6;452:13;501:6;496:2;485:9;481:18;474:34;517:66;576:6;571:2;560:9;556:18;551:2;543:6;539:15;517:66;:::i;:::-;644:2;623:15;-1:-1:-1;;619:29:1;604:45;;;;651:2;600:54;;277:383;-1:-1:-1;;277:383:1:o;665:118::-;751:5;744:13;737:21;730:5;727:32;717:60;;773:1;770;763:12;788:376;850:6;858;911:2;899:9;890:7;886:23;882:32;879:52;;;927:1;924;917:12;879:52;966:9;953:23;985:28;1007:5;985:28;:::i;:::-;1032:5;-1:-1:-1;1089:2:1;1074:18;;1061:32;1102:30;1061:32;1102:30;:::i;:::-;1151:7;1141:17;;;788:376;;;;;:::o;1169:131::-;-1:-1:-1;;;;;1244:31:1;;1234:42;;1224:70;;1290:1;1287;1280:12;1305:315;1373:6;1381;1434:2;1422:9;1413:7;1409:23;1405:32;1402:52;;;1450:1;1447;1440:12;1402:52;1489:9;1476:23;1508:31;1533:5;1508:31;:::i;:::-;1558:5;1610:2;1595:18;;;;1582:32;;-1:-1:-1;;;1305:315:1:o;1817:247::-;1876:6;1929:2;1917:9;1908:7;1904:23;1900:32;1897:52;;;1945:1;1942;1935:12;1897:52;1984:9;1971:23;2003:31;2028:5;2003:31;:::i;:::-;2053:5;1817:247;-1:-1:-1;;;1817:247:1:o;2069:137::-;-1:-1:-1;;;;;2147:5:1;2143:38;2136:5;2133:49;2123:77;;2196:1;2193;2186:12;2211:245;2269:6;2322:2;2310:9;2301:7;2297:23;2293:32;2290:52;;;2338:1;2335;2328:12;2290:52;2377:9;2364:23;2396:30;2420:5;2396:30;:::i;3060:456::-;3137:6;3145;3153;3206:2;3194:9;3185:7;3181:23;3177:32;3174:52;;;3222:1;3219;3212:12;3174:52;3261:9;3248:23;3280:31;3305:5;3280:31;:::i;:::-;3330:5;-1:-1:-1;3387:2:1;3372:18;;3359:32;3400:33;3359:32;3400:33;:::i;:::-;3060:456;;3452:7;;-1:-1:-1;;;3506:2:1;3491:18;;;;3478:32;;3060:456::o;3521:241::-;3577:6;3630:2;3618:9;3609:7;3605:23;3601:32;3598:52;;;3646:1;3643;3636:12;3598:52;3685:9;3672:23;3704:28;3726:5;3704:28;:::i;3767:248::-;3835:6;3843;3896:2;3884:9;3875:7;3871:23;3867:32;3864:52;;;3912:1;3909;3902:12;3864:52;-1:-1:-1;;3935:23:1;;;4005:2;3990:18;;;3977:32;;-1:-1:-1;3767:248:1:o;4020:145::-;4090:20;;4139:1;4129:12;;4119:40;;4155:1;4152;4145:12;4119:40;4020:145;;;:::o;4170:332::-;4247:6;4255;4308:2;4296:9;4287:7;4283:23;4279:32;4276:52;;;4324:1;4321;4314:12;4276:52;4347:31;4368:9;4347:31;:::i;:::-;4337:41;;4428:2;4417:9;4413:18;4400:32;4441:31;4466:5;4441:31;:::i;4507:114::-;4591:4;4584:5;4580:16;4573:5;4570:27;4560:55;;4611:1;4608;4601:12;4626:167;4693:20;;4753:14;4742:26;;4732:37;;4722:65;;4783:1;4780;4773:12;4798:872;4894:6;4902;4910;4918;4926;4934;4987:3;4975:9;4966:7;4962:23;4958:33;4955:53;;;5004:1;5001;4994:12;4955:53;5043:9;5030:23;5062:31;5087:5;5062:31;:::i;:::-;5112:5;-1:-1:-1;5169:2:1;5154:18;;5141:32;5182;5141;5182;:::i;:::-;5233:7;-1:-1:-1;5292:2:1;5277:18;;5264:32;5305:31;5264:32;5305:31;:::i;:::-;5355:7;-1:-1:-1;5381:37:1;5414:2;5399:18;;5381:37;:::i;:::-;5371:47;;5470:3;5459:9;5455:19;5442:33;5484:32;5508:7;5484:32;:::i;:::-;5535:7;-1:-1:-1;5594:3:1;5579:19;;5566:33;5608:30;5566:33;5608:30;:::i;:::-;5657:7;5647:17;;;4798:872;;;;;;;;:::o;5864:523::-;5938:6;5946;5954;6007:2;5995:9;5986:7;5982:23;5978:32;5975:52;;;6023:1;6020;6013:12;5975:52;6062:9;6049:23;6081:31;6106:5;6081:31;:::i;:::-;6131:5;-1:-1:-1;6188:2:1;6173:18;;6160:32;6201:33;6160:32;6201:33;:::i;:::-;6253:7;-1:-1:-1;6312:2:1;6297:18;;6284:32;6325:30;6284:32;6325:30;:::i;:::-;6374:7;6364:17;;;5864:523;;;;;:::o;6392:159::-;6459:20;;6519:6;6508:18;;6498:29;;6488:57;;6541:1;6538;6531:12;6556:256;6622:6;6630;6683:2;6671:9;6662:7;6658:23;6654:32;6651:52;;;6699:1;6696;6689:12;6651:52;6722:28;6740:9;6722:28;:::i;:::-;6712:38;;6769:37;6802:2;6791:9;6787:18;6769:37;:::i;:::-;6759:47;;6556:256;;;;;:::o;6817:382::-;6882:6;6890;6943:2;6931:9;6922:7;6918:23;6914:32;6911:52;;;6959:1;6956;6949:12;6911:52;6998:9;6985:23;7017:30;7041:5;7017:30;:::i;:::-;7066:5;-1:-1:-1;7123:2:1;7108:18;;7095:32;7136:31;7095:32;7136:31;:::i;7204:309::-;7269:6;7277;7330:2;7318:9;7309:7;7305:23;7301:32;7298:52;;;7346:1;7343;7336:12;7298:52;7382:9;7369:23;7359:33;;7442:2;7431:9;7427:18;7414:32;7455:28;7477:5;7455:28;:::i;7726:180::-;7785:6;7838:2;7826:9;7817:7;7813:23;7809:32;7806:52;;;7854:1;7851;7844:12;7806:52;-1:-1:-1;7877:23:1;;7726:180;-1:-1:-1;7726:180:1:o;8139:388::-;8207:6;8215;8268:2;8256:9;8247:7;8243:23;8239:32;8236:52;;;8284:1;8281;8274:12;8236:52;8323:9;8310:23;8342:31;8367:5;8342:31;:::i;10202:386::-;10269:6;10277;10330:2;10318:9;10309:7;10305:23;10301:32;10298:52;;;10346:1;10343;10336:12;10298:52;10385:9;10372:23;10404:31;10429:5;10404:31;:::i;:::-;10454:5;-1:-1:-1;10511:2:1;10496:18;;10483:32;10524;10483;10524;:::i;10593:313::-;10660:6;10668;10721:2;10709:9;10700:7;10696:23;10692:32;10689:52;;;10737:1;10734;10727:12;10689:52;10773:9;10760:23;10750:33;;10833:2;10822:9;10818:18;10805:32;10846:30;10870:5;10846:30;:::i;11124:332::-;11201:6;11209;11262:2;11250:9;11241:7;11237:23;11233:32;11230:52;;;11278:1;11275;11268:12;11230:52;11317:9;11304:23;11336:31;11361:5;11336:31;:::i;:::-;11386:5;-1:-1:-1;11410:40:1;11446:2;11431:18;;11410:40;:::i;11461:448::-;11534:6;11542;11550;11603:2;11591:9;11582:7;11578:23;11574:32;11571:52;;;11619:1;11616;11609:12;11571:52;11655:9;11642:23;11632:33;;11715:2;11704:9;11700:18;11687:32;11728:30;11752:5;11728:30;:::i;11914:184::-;11972:6;12025:2;12013:9;12004:7;12000:23;11996:32;11993:52;;;12041:1;12038;12031:12;11993:52;12064:28;12082:9;12064:28;:::i;12103:383::-;12180:6;12188;12196;12249:2;12237:9;12228:7;12224:23;12220:32;12217:52;;;12265:1;12262;12255:12;12217:52;12304:9;12291:23;12323:31;12348:5;12323:31;:::i;:::-;12373:5;12425:2;12410:18;;12397:32;;-1:-1:-1;12476:2:1;12461:18;;;12448:32;;12103:383;-1:-1:-1;;;12103:383:1:o;12491:876::-;12589:6;12597;12605;12613;12621;12629;12682:3;12670:9;12661:7;12657:23;12653:33;12650:53;;;12699:1;12696;12689:12;12650:53;12738:9;12725:23;12757:31;12782:5;12757:31;:::i;:::-;12807:5;-1:-1:-1;12864:2:1;12849:18;;12836:32;12877;12836;12877;:::i;:::-;12928:7;-1:-1:-1;12987:2:1;12972:18;;12959:32;13000;12959;13000;:::i;:::-;13051:7;-1:-1:-1;13110:2:1;13095:18;;13082:32;13123:31;13082:32;13123:31;:::i;:::-;13173:7;-1:-1:-1;13199:38:1;13232:3;13217:19;;13199:38;:::i;:::-;13189:48;;13289:3;13278:9;13274:19;13261:33;13303:32;13327:7;13303:32;:::i;13372:319::-;13439:6;13447;13500:2;13488:9;13479:7;13475:23;13471:32;13468:52;;;13516:1;13513;13506:12;13468:52;13555:9;13542:23;13574:31;13599:5;13574:31;:::i;:::-;13624:5;-1:-1:-1;13648:37:1;13681:2;13666:18;;13648:37;:::i;13696:801::-;13807:6;13815;13823;13831;13839;13847;13855;13908:3;13896:9;13887:7;13883:23;13879:33;13876:53;;;13925:1;13922;13915:12;13876:53;13964:9;13951:23;13983:31;14008:5;13983:31;:::i;:::-;14033:5;-1:-1:-1;14090:2:1;14075:18;;14062:32;14103:33;14062:32;14103:33;:::i;:::-;14155:7;-1:-1:-1;14209:2:1;14194:18;;14181:32;;-1:-1:-1;14260:2:1;14245:18;;14232:32;;-1:-1:-1;14316:3:1;14301:19;;14288:33;14330:31;14288:33;14330:31;:::i;:::-;13696:801;;;;-1:-1:-1;13696:801:1;;;;14380:7;14434:3;14419:19;;14406:33;;-1:-1:-1;14486:3:1;14471:19;;;14458:33;;13696:801;-1:-1:-1;;13696:801:1:o;14502:527::-;14578:6;14586;14594;14647:2;14635:9;14626:7;14622:23;14618:32;14615:52;;;14663:1;14660;14653:12;14615:52;14702:9;14689:23;14721:31;14746:5;14721:31;:::i;:::-;14771:5;-1:-1:-1;14828:2:1;14813:18;;14800:32;14841:33;14800:32;14841:33;:::i;:::-;14893:7;-1:-1:-1;14952:2:1;14937:18;;14924:32;14965;14924;14965;:::i;15521:127::-;15582:10;15577:3;15573:20;15570:1;15563:31;15613:4;15610:1;15603:15;15637:4;15634:1;15627:15;15653:422;15742:1;15785:5;15742:1;15799:270;15820:7;15810:8;15807:21;15799:270;;;15879:4;15875:1;15871:6;15867:17;15861:4;15858:27;15855:53;;;15888:18;;:::i;:::-;15938:7;15928:8;15924:22;15921:55;;;15958:16;;;;15921:55;16037:22;;;;15997:15;;;;15799:270;;;15803:3;15653:422;;;;;:::o;16080:806::-;16129:5;16159:8;16149:80;;-1:-1:-1;16200:1:1;16214:5;;16149:80;16248:4;16238:76;;-1:-1:-1;16285:1:1;16299:5;;16238:76;16330:4;16348:1;16343:59;;;;16416:1;16411:130;;;;16323:218;;16343:59;16373:1;16364:10;;16387:5;;;16411:130;16448:3;16438:8;16435:17;16432:43;;;16455:18;;:::i;:::-;-1:-1:-1;;16511:1:1;16497:16;;16526:5;;16323:218;;16625:2;16615:8;16612:16;16606:3;16600:4;16597:13;16593:36;16587:2;16577:8;16574:16;16569:2;16563:4;16560:12;16556:35;16553:77;16550:159;;;-1:-1:-1;16662:19:1;;;16694:5;;16550:159;16741:34;16766:8;16760:4;16741:34;:::i;:::-;16811:6;16807:1;16803:6;16799:19;16790:7;16787:32;16784:58;;;16822:18;;:::i;:::-;16860:20;;16080:806;-1:-1:-1;;;16080:806:1:o;16891:131::-;16951:5;16980:36;17007:8;17001:4;16980:36;:::i;17027:168::-;17067:7;17133:1;17129;17125:6;17121:14;17118:1;17115:21;17110:1;17103:9;17096:17;17092:45;17089:71;;;17140:18;;:::i;:::-;-1:-1:-1;17180:9:1;;17027:168::o;17200:127::-;17261:10;17256:3;17252:20;17249:1;17242:31;17292:4;17289:1;17282:15;17316:4;17313:1;17306:15;17332:120;17372:1;17398;17388:35;;17403:18;;:::i;:::-;-1:-1:-1;17437:9:1;;17332:120::o;17457:251::-;17527:6;17580:2;17568:9;17559:7;17555:23;17551:32;17548:52;;;17596:1;17593;17586:12;17548:52;17628:9;17622:16;17647:31;17672:5;17647:31;:::i;18030:245::-;18097:6;18150:2;18138:9;18129:7;18125:23;18121:32;18118:52;;;18166:1;18163;18156:12;18118:52;18198:9;18192:16;18217:28;18239:5;18217:28;:::i;18559:249::-;18628:6;18681:2;18669:9;18660:7;18656:23;18652:32;18649:52;;;18697:1;18694;18687:12;18649:52;18729:9;18723:16;18748:30;18772:5;18748:30;:::i;19098:744::-;-1:-1:-1;;;;;19422:32:1;;;;19404:51;;-1:-1:-1;;;;;19536:15:1;;;19531:2;19516:18;;19509:43;19600:4;19588:17;;;;19583:2;19568:18;;19561:45;19654:14;19642:27;;;;19637:2;19622:18;;19615:55;19707:15;;19701:3;19686:19;;19679:44;19760:15;;;19442:3;19739:19;;19732:44;19820:14;19813:22;19807:3;19792:19;;19785:51;19391:3;19376:19;;19098:744::o;19847:167::-;19925:13;;19978:10;19967:22;;19957:33;;19947:61;;20004:1;20001;19994:12;20019:206;20088:6;20141:2;20129:9;20120:7;20116:23;20112:32;20109:52;;;20157:1;20154;20147:12;20109:52;20180:39;20209:9;20180:39;:::i;20230:237::-;20269:4;-1:-1:-1;;;;;20374:10:1;;;;20344;;20396:12;;;20393:38;;;20411:18;;:::i;:::-;20448:13;;20230:237;-1:-1:-1;;;20230:237:1:o;21479:184::-;21549:6;21602:2;21590:9;21581:7;21577:23;21573:32;21570:52;;;21618:1;21615;21608:12;21570:52;-1:-1:-1;21641:16:1;;21479:184;-1:-1:-1;21479:184:1:o;23106:462::-;23190:6;23198;23206;23259:2;23247:9;23238:7;23234:23;23230:32;23227:52;;;23275:1;23272;23265:12;23227:52;23298:39;23327:9;23298:39;:::i;:::-;23288:49;;23380:2;23369:9;23365:18;23359:25;23393:30;23417:5;23393:30;:::i;:::-;23492:2;23477:18;;23471:25;23442:5;;-1:-1:-1;23505:31:1;23471:25;23505:31;:::i;23573:244::-;23612:3;-1:-1:-1;;;;;23693:2:1;23690:1;23686:10;23723:2;23720:1;23716:10;23754:3;23750:2;23746:12;23741:3;23738:21;23735:47;;;23762:18;;:::i;:::-;23798:13;;23573:244;-1:-1:-1;;;;23573:244:1:o;24114:127::-;24175:10;24170:3;24166:20;24163:1;24156:31;24206:4;24203:1;24196:15;24230:4;24227:1;24220:15;25075:195;25114:1;25140:14;25181:2;25178:1;25174:10;25203:3;25193:37;;25210:18;;:::i;:::-;25248:10;;25244:20;;;;;25075:195;-1:-1:-1;;25075:195:1:o;25275:232::-;25314:3;25342:14;25383:2;25380:1;25376:10;25413:2;25410:1;25406:10;25444:3;25440:2;25436:12;25431:3;25428:21;25425:47;;;25452:18;;:::i;27141:332::-;27218:6;27226;27279:2;27267:9;27258:7;27254:23;27250:32;27247:52;;;27295:1;27292;27285:12;27247:52;27318:39;27347:9;27318:39;:::i;:::-;27308:49;;27400:2;27389:9;27385:18;27379:25;27413:30;27437:5;27413:30;:::i;27478:207::-;27517:1;-1:-1:-1;;;;;27596:2:1;27593:1;27589:10;27618:3;27608:37;;27625:18;;:::i;28706:204::-;28744:3;28780:4;28777:1;28773:12;28812:4;28809:1;28805:12;28847:3;28841:4;28837:14;28832:3;28829:23;28826:49;;;28855:18;;:::i;:::-;28891:13;;28706:204;-1:-1:-1;;;28706:204:1:o;29703:128::-;29743:3;29774:1;29770:6;29767:1;29764:13;29761:39;;;29780:18;;:::i;:::-;-1:-1:-1;29816:9:1;;29703:128::o;29836:278::-;29875:7;-1:-1:-1;;;;;29960:2:1;29957:1;29953:10;29990:2;29987:1;29983:10;30046:3;30042:2;30038:12;30033:3;30030:21;30023:3;30016:11;30009:19;30005:47;30002:73;;;30055:18;;:::i;:::-;30095:13;;29836:278;-1:-1:-1;;;;29836:278:1:o;30119:266::-;30158:7;30190:14;30231:2;30228:1;30224:10;30261:2;30258:1;30254:10;30317:3;30313:2;30309:12;30304:3;30301:21;30294:3;30287:11;30280:19;30276:47;30273:73;;;30326:18;;:::i;30390:125::-;30430:4;30458:1;30455;30452:8;30449:34;;;30463:18;;:::i;:::-;-1:-1:-1;30500:9:1;;30390:125::o;30520:258::-;30559:7;30591:6;30624:2;30621:1;30617:10;30654:2;30651:1;30647:10;30710:3;30706:2;30702:12;30697:3;30694:21;30687:3;30680:11;30673:19;30669:47;30666:73;;;30719:18;;:::i;31661:136::-;31700:3;31728:5;31718:39;;31737:18;;:::i;:::-;-1:-1:-1;;;31773:18:1;;31661:136::o;31802:135::-;31841:3;31862:17;;;31859:43;;31882:18;;:::i;:::-;-1:-1:-1;31929:1:1;31918:13;;31802:135::o;32256:274::-;32385:3;32423:6;32417:13;32439:53;32485:6;32480:3;32473:4;32465:6;32461:17;32439:53;:::i;:::-;32508:16;;;;;32256:274;-1:-1:-1;;32256:274:1:o

Swarm Source

ipfs://91e982e5bd4e999830b5c60ea202a439612419afc9a698006fb4989473cf7523

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

OVERVIEW

EverRise is a blockchain technology company that offers bridging and security solutions across blockchains through an ecosystem of decentralized applications. The EverRise token (RISE) is a multi-chain, collateralized cryptocurrency that powers the EverRise dApp ecosystem.

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Chain Token Portfolio % Price Amount Value
ETH
Ether (ETH)
96.52%$2,96316.463$48,779.76
ETH0.12%$0.000093641,360.0052$59.72
BSC1.16%$594.920.9841$585.48
BSC0.23%$0.999538116.0062$115.95
BSC0.20%$520$100
BSC0.14%$2.6127.7291$72.51
BSC0.11%$2,969.030.0196$58.1
BSC0.07%$0.000093368,665.7035$34.34
BSC<0.01%<$0.0000013,819,112,220.9213$2.07
BSC<0.01%$0.0341155$0.1705
FTM0.66%$0.0000933,561,320.3077$331.77
FTM0.21%$0.68486157.8911$108.13
AVAX0.32%$0.0000931,748,055.5721$162.85
AVAX0.25%$33.243.7825$125.72
CRONOS<0.01%$0.1253511$0.125351
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.