ETH Price: $3,278.20 (+0.83%)
Gas: 1 Gwei

Token

FORMLESS (FORMLESS)
 

Overview

Max Total Supply

500 FORMLESS

Holders

394

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 FORMLESS
0x1d935f516D5008Ff3153ab789258Bf5d8cF604f5
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
FORMLESS

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-14
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0; 
abstract contract ReentrancyGuard { 
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }
    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
   _status = _ENTERED;

        _;
        _status = _NOT_ENTERED;
    }
}

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
 
    function toString(uint256 value) internal pure returns (string memory) { 
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }
 
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }
 
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
 
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    constructor() {
        _transferOwnership(_msgSender());
    }
 
    function owner() public view virtual returns (address) {
        return _owner;
    } 
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }
 
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }
 
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
 
library Address { 
    function isContract(address account) internal view returns (bool) { 
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    } 
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
 
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    } 
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
 
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
 
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    } 
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
 
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
 
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
 
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
 
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else { 
            if (returndata.length > 0) { 

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
 
interface IERC721Receiver { 
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}
 
interface IERC165 { 
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
 
abstract contract ERC165 is IERC165 { 
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
} 
interface IERC721 is IERC165 { 
    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 balance); 
    function ownerOf(uint256 tokenId) external view returns (address owner); 
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external; 
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external; 
    function approve(address to, uint256 tokenId) external;
 
    function getApproved(uint256 tokenId) external view returns (address operator); 
    function setApprovalForAll(address operator, bool _approved) external; 
    function isApprovedForAll(address owner, address operator) external view returns (bool); 
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
} 
interface IERC721Enumerable is IERC721 { 
    function totalSupply() external view returns (uint256); 
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); 
    function tokenByIndex(uint256 index) external view returns (uint256);
}  
interface IERC721Metadata is IERC721 { 
    function name() external view returns (string memory); 
    function symbol() external view returns (string memory); 
    function tokenURI(uint256 tokenId) external view returns (string memory);
} 
contract ERC721A is
  Context,
  ERC165,
  IERC721,
  IERC721Metadata,
  IERC721Enumerable
{
  using Address for address;
  using Strings for uint256;

  struct TokenOwnership {
    address addr;
    uint64 startTimestamp;
  }

  struct AddressData {
    uint128 balance;
    uint128 numberMinted;
  }

  uint256 private currentIndex = 1;

  uint256 internal immutable collectionSize;
  uint256 internal immutable maxBatchSize; 
  string private _name; 
  string private _symbol; 
  mapping(uint256 => TokenOwnership) private _ownerships; 
  mapping(address => AddressData) private _addressData; 
  mapping(uint256 => address) private _tokenApprovals; 
  mapping(address => mapping(address => bool)) private _operatorApprovals; 
  constructor(
    string memory name_,
    string memory symbol_,
    uint256 maxBatchSize_,
    uint256 collectionSize_
  ) {
    require(
      collectionSize_ > 0,
      "ERC721A: collection must have a nonzero supply"
    );
    require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
    _name = name_;
    _symbol = symbol_;
    maxBatchSize = maxBatchSize_;
    collectionSize = collectionSize_;
  } 
  function totalSupply() public view override returns (uint256) {
    return currentIndex-1;
  } 
  function tokenByIndex(uint256 index) public view override returns (uint256) {
    require(index < totalSupply(), "ERC721A: global index out of bounds");
    return index;
  } 
  function tokenOfOwnerByIndex(address owner, uint256 index)
    public
    view
    override
    returns (uint256)
  {
    require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
    uint256 numMintedSoFar = totalSupply();
    uint256 tokenIdsIdx = 0;
    address currOwnershipAddr = address(0);
    for (uint256 i = 0; i < numMintedSoFar; i++) {
      TokenOwnership memory ownership = _ownerships[i];
      if (ownership.addr != address(0)) {
        currOwnershipAddr = ownership.addr;
      }
      if (currOwnershipAddr == owner) {
        if (tokenIdsIdx == index) {
          return i;
        }
        tokenIdsIdx++;
      }
    }
    revert("ERC721A: unable to get token of owner by index");
  } 
  function supportsInterface(bytes4 interfaceId)
    public
    view
    virtual
    override(ERC165, IERC165)
    returns (bool)
  {
    return
      interfaceId == type(IERC721).interfaceId ||
      interfaceId == type(IERC721Metadata).interfaceId ||
      interfaceId == type(IERC721Enumerable).interfaceId ||
      super.supportsInterface(interfaceId);
  } 
  function balanceOf(address owner) public view override returns (uint256) {
    require(owner != address(0), "ERC721A: balance query for the zero address");
    return uint256(_addressData[owner].balance);
  }

  function _numberMinted(address owner) internal view returns (uint256) {
    require(
      owner != address(0),
      "ERC721A: number minted query for the zero address"
    );
    return uint256(_addressData[owner].numberMinted);
  }

  function ownershipOf(uint256 tokenId)
    internal
    view
    returns (TokenOwnership memory)
  {
    require(_exists(tokenId), "ERC721A: owner query for nonexistent token");

    uint256 lowestTokenToCheck;
    if (tokenId >= maxBatchSize) {
      lowestTokenToCheck = tokenId - maxBatchSize + 1;
    }

    for (uint256 curr = tokenId; curr >= lowestTokenToCheck; curr--) {
      TokenOwnership memory ownership = _ownerships[curr];
      if (ownership.addr != address(0)) {
        return ownership;
      }
    }

    revert("ERC721A: unable to determine the owner of token");
  } 
  function ownerOf(uint256 tokenId) public view override returns (address) {
    return ownershipOf(tokenId).addr;
  } 
  function name() public view virtual override returns (string memory) {
    return _name;
  } 
  function symbol() public view virtual override returns (string memory) {
    return _symbol;
  } 
  function tokenURI(uint256 tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );

    string memory baseURI = _baseURI();
    return
      bytes(baseURI).length > 0
        ? string(abi.encodePacked(baseURI, tokenId.toString(),_getUriExtension()))
        : "";
  } 
  function _baseURI() internal view virtual returns (string memory) {
    return "";
  }

  function _getUriExtension() internal view virtual returns (string memory) {
    return "";
  }
 
  function approve(address to, uint256 tokenId) public override {
    address owner = ERC721A.ownerOf(tokenId);
    require(to != owner, "ERC721A: approval to current owner");

    require(
      _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
      "ERC721A: approve caller is not owner nor approved for all"
    );

    _approve(to, tokenId, owner);
  } 
  function getApproved(uint256 tokenId) public view override returns (address) {
    require(_exists(tokenId), "ERC721A: approved query for nonexistent token");

    return _tokenApprovals[tokenId];
  } 
  function setApprovalForAll(address operator, bool approved) public override {
    require(operator != _msgSender(), "ERC721A: approve to caller");

    _operatorApprovals[_msgSender()][operator] = approved;
    emit ApprovalForAll(_msgSender(), operator, approved);
  }
 
  function isApprovedForAll(address owner, address operator)
    public
    view
    virtual
    override
    returns (bool)
  {
    return _operatorApprovals[owner][operator];
  }
 
  function transferFrom(
    address from,
    address to,
    uint256 tokenId
  ) public override {
    _transfer(from, to, tokenId);
  } 
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId
  ) public override {
    safeTransferFrom(from, to, tokenId, "");
  } 
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId,
    bytes memory _data
  ) public override {
    _transfer(from, to, tokenId);
    require(
      _checkOnERC721Received(from, to, tokenId, _data),
      "ERC721A: transfer to non ERC721Receiver implementer"
    );
  } 
  function _exists(uint256 tokenId) internal view returns (bool) {
    return tokenId < currentIndex;
  }

  function _safeMint(address to, uint256 quantity) internal {
    _safeMint(to, quantity, "");
  } 
  function _safeMint(
    address to,
    uint256 quantity,
    bytes memory _data
  ) internal {
    uint256 startTokenId = currentIndex;
    require(to != address(0), "ERC721A: mint to the zero address"); 
    require(!_exists(startTokenId), "ERC721A: token already minted");
    require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high");

    _beforeTokenTransfers(address(0), to, startTokenId, quantity);

    AddressData memory addressData = _addressData[to];
    _addressData[to] = AddressData(
      addressData.balance + uint128(quantity),
      addressData.numberMinted + uint128(quantity)
    );
    _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp));

    uint256 updatedIndex = startTokenId;

    for (uint256 i = 0; i < quantity; i++) {
      emit Transfer(address(0), to, updatedIndex);
      require(
        _checkOnERC721Received(address(0), to, updatedIndex, _data),
        "ERC721A: transfer to non ERC721Receiver implementer"
      );
      updatedIndex++;
    }

    currentIndex = updatedIndex;
    _afterTokenTransfers(address(0), to, startTokenId, quantity);
  } 
  function _transfer(
    address from,
    address to,
    uint256 tokenId
  ) private {
    TokenOwnership memory prevOwnership = ownershipOf(tokenId);

    bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
      getApproved(tokenId) == _msgSender() ||
      isApprovedForAll(prevOwnership.addr, _msgSender()));

    require(
      isApprovedOrOwner,
      "ERC721A: transfer caller is not owner nor approved"
    );

    require(
      prevOwnership.addr == from,
      "ERC721A: transfer from incorrect owner"
    );
    require(to != address(0), "ERC721A: transfer to the zero address");

    _beforeTokenTransfers(from, to, tokenId, 1); 
    _approve(address(0), tokenId, prevOwnership.addr);

    _addressData[from].balance -= 1;
    _addressData[to].balance += 1;
    _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); 
    uint256 nextTokenId = tokenId + 1;
    if (_ownerships[nextTokenId].addr == address(0)) {
      if (_exists(nextTokenId)) {
        _ownerships[nextTokenId] = TokenOwnership(
          prevOwnership.addr,
          prevOwnership.startTimestamp
        );
      }
    }

    emit Transfer(from, to, tokenId);
    _afterTokenTransfers(from, to, tokenId, 1);
  } 
  function _approve(
    address to,
    uint256 tokenId,
    address owner
  ) private {
    _tokenApprovals[tokenId] = to;
    emit Approval(owner, to, tokenId);
  }

  uint256 public nextOwnerToExplicitlySet = 0; 
  function _setOwnersExplicit(uint256 quantity) internal {
    uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet;
    require(quantity > 0, "quantity must be nonzero");
    uint256 endIndex = oldNextOwnerToSet + quantity - 1;
    if (endIndex > collectionSize - 1) {
      endIndex = collectionSize - 1;
    } 
    require(_exists(endIndex), "not enough minted yet for this cleanup");
    for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) {
      if (_ownerships[i].addr == address(0)) {
        TokenOwnership memory ownership = ownershipOf(i);
        _ownerships[i] = TokenOwnership(
          ownership.addr,
          ownership.startTimestamp
        );
      }
    }
    nextOwnerToExplicitlySet = endIndex + 1;
  } 
  function _checkOnERC721Received(
    address from,
    address to,
    uint256 tokenId,
    bytes memory _data
  ) private returns (bool) {
    if (to.isContract()) {
      try
        IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data)
      returns (bytes4 retval) {
        return retval == IERC721Receiver(to).onERC721Received.selector;
      } catch (bytes memory reason) {
        if (reason.length == 0) {
          revert("ERC721A: transfer to non ERC721Receiver implementer");
        } else {
          assembly {
            revert(add(32, reason), mload(reason))
          }
        }
      }
    } else {
      return true;
    }
  } 
  function _beforeTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {} 
  function _afterTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {}
}

contract FORMLESS is Ownable, ERC721A, ReentrancyGuard {
    using Strings for uint256;


  uint256 public MAX_PER_Transtion = 1; // maximam amount that user can mint per transaction
  uint256 public MAX_PER_Address = 1;

  uint256 public  PRICE = 0.069 ether; //

  uint256 private TotalCollectionSize_ = 500; // total number of nfts
  uint256 private constant MaxMintPerBatch_ = 1; //max mint per trx
 
  mapping(address => bool) private whitelistedAddressesForMint;





  string private _baseTokenURI;


  uint public status = 0; //0 - sale pause, 1 - whitelist sale, 2 - public sale

  constructor() ERC721A("FORMLESS","FORMLESS", MaxMintPerBatch_, TotalCollectionSize_) {
   
   

    
    _baseTokenURI= "https://gateway.pinata.cloud/ipfs/QmWT2u6UEeXJs5MWcSTQhHFyYC9wKevQNjXC4J3k67ymtQ/";


  }

  modifier callerIsUser() {
    require(tx.origin == msg.sender, "The caller is another contract");
    _;
  }

function mint(uint256 quantity) external payable callerIsUser {
    if(status == 1){
    require(whitelistedAddressesForMint[msg.sender], "You are not White Listed For Mint");
    require(totalSupply() + quantity <= TotalCollectionSize_, "Reached max supply");
    require(quantity == 1, "1 NFT per Mint");
    require(numberMinted(msg.sender) < 1  , "Already minted" );
    require(msg.value >= PRICE * quantity, "Not enough ETH in your wallet");
    _safeMint(msg.sender, 1);
    }
    else{
    require(status == 2, "Public Sale is not Active");
    require(quantity > 0,"Mint Quantity should be more than 0");
    require(quantity <= MAX_PER_Transtion,"Max 1 NFTs can be minted in a Trx");
    require(totalSupply() + quantity <= TotalCollectionSize_, "Reached max supply");
    require(numberMinted(msg.sender) + quantity <= MAX_PER_Address, "Can't mint this much" );
    require(msg.value >= PRICE * quantity, "Not enough ETH in your wallet");
    _safeMint(msg.sender, quantity);  
    }
    }

   function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
    require(_exists(tokenId),"ERC721Metadata: URI query for nonexistent token");
 
    string memory baseURI = _baseURI();
    return
      bytes(baseURI).length > 0
        ? string(abi.encodePacked(baseURI, tokenId.toString(),".json"))
        : "";
    } 


  function isWhitelistedForMint(address _user) public view returns (bool) {
    return whitelistedAddressesForMint[_user];
  }

  
  function addNewWhitelistUserForMint(address[] calldata _users) public onlyOwner {
    // ["","",""]
    for(uint i=0;i<_users.length;i++)
        whitelistedAddressesForMint[_users[i]] = true;
  }
  


  function setBaseURI(string memory baseURI) external onlyOwner {
    _baseTokenURI = baseURI;
  }
  function _baseURI() internal view virtual override returns (string memory) {
    return _baseTokenURI;
  }
  function numberMinted(address owner) public view returns (uint256) {
    return _numberMinted(owner);
  }
  function getOwnershipData(uint256 tokenId)
    external
    view
    returns (TokenOwnership memory)
  {
    return ownershipOf(tokenId);
  }

  function withdrawMoney() external onlyOwner nonReentrant {
    (bool success, ) = msg.sender.call{value: address(this).balance}("");
    require(success, "Transfer failed.");
  }

  function changeMAX_PER_Address(uint256 q) external onlyOwner
  {
      MAX_PER_Address = q;
  }

  function reserve(address _address, uint256 quantity) public onlyOwner {
  require(quantity > 0,"Quantity should be more than 0");
  require(totalSupply() + quantity <= TotalCollectionSize_, "Reached max supply");
  _safeMint(_address, quantity);
  }



  function changeMintPrice(uint256 _newPrice) external onlyOwner
  {
      PRICE = _newPrice;
  }

  function changeCollectionSize(uint256 _collectionSize) external onlyOwner
  {
      TotalCollectionSize_ = _collectionSize;
  }

  function changeMAX_PER_Transtion(uint256 q) external onlyOwner
  {
      MAX_PER_Transtion = q;
  }
 
  function giveaway(address a, uint q)public onlyOwner{
    require(totalSupply() + q <= TotalCollectionSize_, "Reached max supply");
    require(q <= MAX_PER_Transtion, "Can't exceed more than 10");
    _safeMint(a, q);
  }


  function setStatus(uint256 s)external onlyOwner{
      status = s;
      if(s==1){
          PRICE=0.069 ether;
      }
      else{
          PRICE=0.099 ether;
      }
}

  function getStatus()public view returns(uint){
		return status;
      
  }
  
  function getcollectionSize()public view returns(uint){
      return TotalCollectionSize_;
  }
  
}

library Base64 {
    bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    /// @notice Encodes some bytes to the base64 representation
    function encode(bytes memory data) internal pure returns (string memory) {
        uint256 len = data.length;
        if (len == 0) return "";

        // multiply by 4/3 rounded up
        uint256 encodedLen = 4 * ((len + 2) / 3);

        // Add some extra buffer at the end
        bytes memory result = new bytes(encodedLen + 32);

        bytes memory table = TABLE;

        assembly {
            let tablePtr := add(table, 1)
            let resultPtr := add(result, 32)

            for {
                let i := 0
            } lt(i, len) {

            } {
                i := add(i, 3)
                let input := and(mload(add(data, i)), 0xffffff)

                let out := mload(add(tablePtr, and(shr(18, input), 0x3F)))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF))
                out := shl(8, out)
                out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF))
                out := shl(224, out)

                mstore(resultPtr, out)

                resultPtr := add(resultPtr, 4)
            }

            switch mod(len, 3)
            case 1 {
                mstore(sub(resultPtr, 2), shl(240, 0x3d3d))
            }
            case 2 {
                mstore(sub(resultPtr, 1), shl(248, 0x3d))
            }

            mstore(result, encodedLen)
        }

        return string(result);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_PER_Address","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_Transtion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"addNewWhitelistUserForMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_collectionSize","type":"uint256"}],"name":"changeCollectionSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"q","type":"uint256"}],"name":"changeMAX_PER_Address","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"q","type":"uint256"}],"name":"changeMAX_PER_Transtion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"changeMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStatus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getcollectionSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"uint256","name":"q","type":"uint256"}],"name":"giveaway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelistedForMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"s","type":"uint256"}],"name":"setStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"status","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c06040526001805560006008556001600a556001600b5566f5232269808000600c556101f4600d5560006010553480156200003a57600080fd5b506040518060400160405280600881526020017f464f524d4c4553530000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f464f524d4c4553530000000000000000000000000000000000000000000000008152506001600d54620000cc620000c0620001de60201b60201c565b620001e660201b60201c565b6000811162000112576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200010990620003ca565b60405180910390fd5b6000821162000158576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200014f90620003a8565b60405180910390fd5b836002908051906020019062000170929190620002aa565b50826003908051906020019062000189929190620002aa565b508160a08181525050806080818152505050505050600160098190555060405180608001604052806051815260200162005b4860519139600f9080519060200190620001d7929190620002aa565b5062000500565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002b890620003fd565b90600052602060002090601f016020900481019282620002dc576000855562000328565b82601f10620002f757805160ff191683800117855562000328565b8280016001018555821562000328579182015b82811115620003275782518255916020019190600101906200030a565b5b5090506200033791906200033b565b5090565b5b80821115620003565760008160009055506001016200033c565b5090565b600062000369602783620003ec565b9150620003768262000462565b604082019050919050565b600062000390602e83620003ec565b91506200039d82620004b1565b604082019050919050565b60006020820190508181036000830152620003c3816200035a565b9050919050565b60006020820190508181036000830152620003e58162000381565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200041657607f821691505b602082108114156200042d576200042c62000433565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b60805160a0516156176200053160003960008181612a4a01528181612a7301526131f20152600050506156176000f3fe60806040526004361061023b5760003560e01c806375a88fd71161012e578063b4b532a7116100ab578063d7224ba01161006f578063d7224ba01461085e578063dc33e68114610889578063e985e9c5146108c6578063f2fde38b14610903578063f7427b851461092c5761023b565b8063b4b532a71461077b578063b88d4fde146107a4578063c87b56dd146107cd578063cc47a40b1461080a578063d04950a1146108335761023b565b80639801b11c116100f25780639801b11c146106cd578063a0712d68146106f6578063a22cb46514610712578063ac4460021461073b578063af7b26e9146107525761023b565b806375a88fd7146105e45780638d859f3e1461060f5780638da5cb5b1461063a5780639231ab2a1461066557806395d89b41146106a25761023b565b80632f745c59116101bc57806355f804b31161018057806355f804b3146105015780636352211e1461052a57806369ba1a751461056757806370a0823114610590578063715018a6146105cd5761023b565b80632f745c591461040a5780633fd173661461044757806342842e0e146104705780634e69d560146104995780634f6ccce7146104c45761023b565b8063095ea7b311610203578063095ea7b31461033757806318160ddd14610360578063200d2ed21461038b57806323b872dd146103b65780632f2ffc57146103df5761023b565b80630199e3471461024057806301ffc9a714610269578063050225ea146102a657806306fdde03146102cf578063081812fc146102fa575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613b5e565b610969565b005b34801561027557600080fd5b50610290600480360381019061028b9190613abb565b6109ef565b60405161029d9190614262565b60405180910390f35b3480156102b257600080fd5b506102cd60048036038101906102c89190613a2e565b610b39565b005b3480156102db57600080fd5b506102e4610c5f565b6040516102f1919061427d565b60405180910390f35b34801561030657600080fd5b50610321600480360381019061031c9190613b5e565b610cf1565b60405161032e91906141fb565b60405180910390f35b34801561034357600080fd5b5061035e60048036038101906103599190613a2e565b610d76565b005b34801561036c57600080fd5b50610375610e8f565b604051610382919061471a565b60405180910390f35b34801561039757600080fd5b506103a0610ea4565b6040516103ad919061471a565b60405180910390f35b3480156103c257600080fd5b506103dd60048036038101906103d89190613918565b610eaa565b005b3480156103eb57600080fd5b506103f4610eba565b604051610401919061471a565b60405180910390f35b34801561041657600080fd5b50610431600480360381019061042c9190613a2e565b610ec0565b60405161043e919061471a565b60405180910390f35b34801561045357600080fd5b5061046e60048036038101906104699190613b5e565b6110be565b005b34801561047c57600080fd5b5061049760048036038101906104929190613918565b611144565b005b3480156104a557600080fd5b506104ae611164565b6040516104bb919061471a565b60405180910390f35b3480156104d057600080fd5b506104eb60048036038101906104e69190613b5e565b61116e565b6040516104f8919061471a565b60405180910390f35b34801561050d57600080fd5b5061052860048036038101906105239190613b15565b6111c1565b005b34801561053657600080fd5b50610551600480360381019061054c9190613b5e565b611257565b60405161055e91906141fb565b60405180910390f35b34801561057357600080fd5b5061058e60048036038101906105899190613b5e565b61126d565b005b34801561059c57600080fd5b506105b760048036038101906105b291906138ab565b61131f565b6040516105c4919061471a565b60405180910390f35b3480156105d957600080fd5b506105e2611408565b005b3480156105f057600080fd5b506105f9611490565b604051610606919061471a565b60405180910390f35b34801561061b57600080fd5b5061062461149a565b604051610631919061471a565b60405180910390f35b34801561064657600080fd5b5061064f6114a0565b60405161065c91906141fb565b60405180910390f35b34801561067157600080fd5b5061068c60048036038101906106879190613b5e565b6114c9565b60405161069991906146ff565b60405180910390f35b3480156106ae57600080fd5b506106b76114e1565b6040516106c4919061427d565b60405180910390f35b3480156106d957600080fd5b506106f460048036038101906106ef9190613b5e565b611573565b005b610710600480360381019061070b9190613b5e565b6115f9565b005b34801561071e57600080fd5b50610739600480360381019061073491906139ee565b611a1d565b005b34801561074757600080fd5b50610750611b9e565b005b34801561075e57600080fd5b5061077960048036038101906107749190613b5e565b611d1f565b005b34801561078757600080fd5b506107a2600480360381019061079d9190613a6e565b611da5565b005b3480156107b057600080fd5b506107cb60048036038101906107c6919061396b565b611ec6565b005b3480156107d957600080fd5b506107f460048036038101906107ef9190613b5e565b611f22565b604051610801919061427d565b60405180910390f35b34801561081657600080fd5b50610831600480360381019061082c9190613a2e565b611fc9565b005b34801561083f57600080fd5b506108486120ed565b604051610855919061471a565b60405180910390f35b34801561086a57600080fd5b506108736120f3565b604051610880919061471a565b60405180910390f35b34801561089557600080fd5b506108b060048036038101906108ab91906138ab565b6120f9565b6040516108bd919061471a565b60405180910390f35b3480156108d257600080fd5b506108ed60048036038101906108e891906138d8565b61210b565b6040516108fa9190614262565b60405180910390f35b34801561090f57600080fd5b5061092a600480360381019061092591906138ab565b61219f565b005b34801561093857600080fd5b50610953600480360381019061094e91906138ab565b612297565b6040516109609190614262565b60405180910390f35b6109716122ed565b73ffffffffffffffffffffffffffffffffffffffff1661098f6114a0565b73ffffffffffffffffffffffffffffffffffffffff16146109e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109dc906144ff565b60405180910390fd5b80600b8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610aba57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b2257507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b325750610b31826122f5565b5b9050919050565b610b416122ed565b73ffffffffffffffffffffffffffffffffffffffff16610b5f6114a0565b73ffffffffffffffffffffffffffffffffffffffff1614610bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bac906144ff565b60405180910390fd5b600d5481610bc1610e8f565b610bcb9190614850565b1115610c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c03906143bf565b60405180910390fd5b600a54811115610c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c48906143ff565b60405180910390fd5b610c5b828261235f565b5050565b606060028054610c6e90614aa9565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9a90614aa9565b8015610ce75780601f10610cbc57610100808354040283529160200191610ce7565b820191906000526020600020905b815481529060010190602001808311610cca57829003601f168201915b5050505050905090565b6000610cfc8261237d565b610d3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d32906146bf565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d8182611257565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de99061459f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e116122ed565b73ffffffffffffffffffffffffffffffffffffffff161480610e405750610e3f81610e3a6122ed565b61210b565b5b610e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e769061445f565b60405180910390fd5b610e8a83838361238b565b505050565b600060018054610e9f9190614965565b905090565b60105481565b610eb583838361243d565b505050565b600b5481565b6000610ecb8361131f565b8210610f0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f039061429f565b60405180910390fd5b6000610f16610e8f565b905060008060005b8381101561107c576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461101057806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561106857868414156110595781955050505050506110b8565b838061106490614b0c565b9450505b50808061107490614b0c565b915050610f1e565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110af9061465f565b60405180910390fd5b92915050565b6110c66122ed565b73ffffffffffffffffffffffffffffffffffffffff166110e46114a0565b73ffffffffffffffffffffffffffffffffffffffff161461113a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611131906144ff565b60405180910390fd5b80600c8190555050565b61115f83838360405180602001604052806000815250611ec6565b505050565b6000601054905090565b6000611178610e8f565b82106111b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b09061439f565b60405180910390fd5b819050919050565b6111c96122ed565b73ffffffffffffffffffffffffffffffffffffffff166111e76114a0565b73ffffffffffffffffffffffffffffffffffffffff161461123d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611234906144ff565b60405180910390fd5b80600f908051906020019061125392919061362f565b5050565b6000611262826129f6565b600001519050919050565b6112756122ed565b73ffffffffffffffffffffffffffffffffffffffff166112936114a0565b73ffffffffffffffffffffffffffffffffffffffff16146112e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e0906144ff565b60405180910390fd5b80601081905550600181141561130c5766f5232269808000600c8190555061131c565b67015fb7f9b8c38000600c819055505b50565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611390576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113879061447f565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6114106122ed565b73ffffffffffffffffffffffffffffffffffffffff1661142e6114a0565b73ffffffffffffffffffffffffffffffffffffffff1614611484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147b906144ff565b60405180910390fd5b61148e6000612bf9565b565b6000600d54905090565b600c5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114d16136b5565b6114da826129f6565b9050919050565b6060600380546114f090614aa9565b80601f016020809104026020016040519081016040528092919081815260200182805461151c90614aa9565b80156115695780601f1061153e57610100808354040283529160200191611569565b820191906000526020600020905b81548152906001019060200180831161154c57829003601f168201915b5050505050905090565b61157b6122ed565b73ffffffffffffffffffffffffffffffffffffffff166115996114a0565b73ffffffffffffffffffffffffffffffffffffffff16146115ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e6906144ff565b60405180910390fd5b80600d8190555050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165e9061443f565b60405180910390fd5b6001601054141561184357600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166116fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f59061451f565b60405180910390fd5b600d548161170a610e8f565b6117149190614850565b1115611755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174c906143bf565b60405180910390fd5b60018114611798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178f9061431f565b60405180910390fd5b60016117a3336120f9565b106117e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117da906142df565b60405180910390fd5b80600c546117f191906148d7565b341015611833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182a9061449f565b60405180910390fd5b61183e33600161235f565b611a1a565b600260105414611888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187f906144df565b60405180910390fd5b600081116118cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c29061437f565b60405180910390fd5b600a54811115611910576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611907906142bf565b60405180910390fd5b600d548161191c610e8f565b6119269190614850565b1115611967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195e906143bf565b60405180910390fd5b600b5481611974336120f9565b61197e9190614850565b11156119bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b6906142ff565b60405180910390fd5b80600c546119cd91906148d7565b341015611a0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a069061449f565b60405180910390fd5b611a19338261235f565b5b50565b611a256122ed565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8a9061455f565b60405180910390fd5b8060076000611aa06122ed565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b4d6122ed565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b929190614262565b60405180910390a35050565b611ba66122ed565b73ffffffffffffffffffffffffffffffffffffffff16611bc46114a0565b73ffffffffffffffffffffffffffffffffffffffff1614611c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c11906144ff565b60405180910390fd5b60026009541415611c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c579061467f565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611c8e906141e6565b60006040518083038185875af1925050503d8060008114611ccb576040519150601f19603f3d011682016040523d82523d6000602084013e611cd0565b606091505b5050905080611d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0b906145bf565b60405180910390fd5b506001600981905550565b611d276122ed565b73ffffffffffffffffffffffffffffffffffffffff16611d456114a0565b73ffffffffffffffffffffffffffffffffffffffff1614611d9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d92906144ff565b60405180910390fd5b80600a8190555050565b611dad6122ed565b73ffffffffffffffffffffffffffffffffffffffff16611dcb6114a0565b73ffffffffffffffffffffffffffffffffffffffff1614611e21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e18906144ff565b60405180910390fd5b60005b82829050811015611ec1576001600e6000858585818110611e4857611e47614c13565b5b9050602002016020810190611e5d91906138ab565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611eb990614b0c565b915050611e24565b505050565b611ed184848461243d565b611edd84848484612cbd565b611f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f13906145df565b60405180910390fd5b50505050565b6060611f2d8261237d565b611f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f639061453f565b60405180910390fd5b6000611f76612e54565b90506000815111611f965760405180602001604052806000815250611fc1565b80611fa084612ee6565b604051602001611fb19291906141b7565b6040516020818303038152906040525b915050919050565b611fd16122ed565b73ffffffffffffffffffffffffffffffffffffffff16611fef6114a0565b73ffffffffffffffffffffffffffffffffffffffff1614612045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203c906144ff565b60405180910390fd5b60008111612088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207f9061463f565b60405180910390fd5b600d5481612094610e8f565b61209e9190614850565b11156120df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d6906143bf565b60405180910390fd5b6120e9828261235f565b5050565b600a5481565b60085481565b600061210482613047565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6121a76122ed565b73ffffffffffffffffffffffffffffffffffffffff166121c56114a0565b73ffffffffffffffffffffffffffffffffffffffff161461221b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612212906144ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561228b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122829061433f565b60405180910390fd5b61229481612bf9565b50565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612379828260405180602001604052806000815250613130565b5050565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000612448826129f6565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661246f6122ed565b73ffffffffffffffffffffffffffffffffffffffff1614806124cb57506124946122ed565b73ffffffffffffffffffffffffffffffffffffffff166124b384610cf1565b73ffffffffffffffffffffffffffffffffffffffff16145b806124e757506124e682600001516124e16122ed565b61210b565b5b905080612529576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125209061457f565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461259b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612592906144bf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561260b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612602906143df565b60405180910390fd5b6126188585856001613610565b612628600084846000015161238b565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166126969190614931565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661273a919061480a565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846128409190614850565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612986576128b68161237d565b15612985576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46129ee8686866001613616565b505050505050565b6129fe6136b5565b612a078261237d565b612a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3d9061435f565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310612aaa5760017f000000000000000000000000000000000000000000000000000000000000000084612a9d9190614965565b612aa79190614850565b90505b60008390505b818110612bb8576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612ba457809350505050612bf4565b508080612bb090614a7f565b915050612ab0565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612beb9061469f565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612cde8473ffffffffffffffffffffffffffffffffffffffff1661361c565b15612e47578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d076122ed565b8786866040518563ffffffff1660e01b8152600401612d299493929190614216565b602060405180830381600087803b158015612d4357600080fd5b505af1925050508015612d7457506040513d601f19601f82011682018060405250810190612d719190613ae8565b60015b612df7573d8060008114612da4576040519150601f19603f3d011682016040523d82523d6000602084013e612da9565b606091505b50600081511415612def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de6906145df565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e4c565b600190505b949350505050565b6060600f8054612e6390614aa9565b80601f0160208091040260200160405190810160405280929190818152602001828054612e8f90614aa9565b8015612edc5780601f10612eb157610100808354040283529160200191612edc565b820191906000526020600020905b815481529060010190602001808311612ebf57829003601f168201915b5050505050905090565b60606000821415612f2e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613042565b600082905060005b60008214612f60578080612f4990614b0c565b915050600a82612f5991906148a6565b9150612f36565b60008167ffffffffffffffff811115612f7c57612f7b614c42565b5b6040519080825280601f01601f191660200182016040528015612fae5781602001600182028036833780820191505090505b5090505b6000851461303b57600182612fc79190614965565b9150600a85612fd69190614b55565b6030612fe29190614850565b60f81b818381518110612ff857612ff7614c13565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561303491906148a6565b9450612fb2565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130af9061441f565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156131a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319e9061461f565b60405180910390fd5b6131b08161237d565b156131f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e7906145ff565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115613253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324a906146df565b60405180910390fd5b6132606000858386613610565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050604051806040016040528085836000015161335d919061480a565b6fffffffffffffffffffffffffffffffff168152602001858360200151613384919061480a565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156135f357818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46135936000888488612cbd565b6135d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135c9906145df565b60405180910390fd5b81806135dd90614b0c565b92505080806135eb90614b0c565b915050613522565b50806001819055506136086000878588613616565b505050505050565b50505050565b50505050565b600080823b905060008111915050919050565b82805461363b90614aa9565b90600052602060002090601f01602090048101928261365d57600085556136a4565b82601f1061367657805160ff19168380011785556136a4565b828001600101855582156136a4579182015b828111156136a3578251825591602001919060010190613688565b5b5090506136b191906136ef565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156137085760008160009055506001016136f0565b5090565b600061371f61371a8461475a565b614735565b90508281526020810184848401111561373b5761373a614c80565b5b613746848285614a3d565b509392505050565b600061376161375c8461478b565b614735565b90508281526020810184848401111561377d5761377c614c80565b5b613788848285614a3d565b509392505050565b60008135905061379f81615585565b92915050565b60008083601f8401126137bb576137ba614c76565b5b8235905067ffffffffffffffff8111156137d8576137d7614c71565b5b6020830191508360208202830111156137f4576137f3614c7b565b5b9250929050565b60008135905061380a8161559c565b92915050565b60008135905061381f816155b3565b92915050565b600081519050613834816155b3565b92915050565b600082601f83011261384f5761384e614c76565b5b813561385f84826020860161370c565b91505092915050565b600082601f83011261387d5761387c614c76565b5b813561388d84826020860161374e565b91505092915050565b6000813590506138a5816155ca565b92915050565b6000602082840312156138c1576138c0614c8a565b5b60006138cf84828501613790565b91505092915050565b600080604083850312156138ef576138ee614c8a565b5b60006138fd85828601613790565b925050602061390e85828601613790565b9150509250929050565b60008060006060848603121561393157613930614c8a565b5b600061393f86828701613790565b935050602061395086828701613790565b925050604061396186828701613896565b9150509250925092565b6000806000806080858703121561398557613984614c8a565b5b600061399387828801613790565b94505060206139a487828801613790565b93505060406139b587828801613896565b925050606085013567ffffffffffffffff8111156139d6576139d5614c85565b5b6139e28782880161383a565b91505092959194509250565b60008060408385031215613a0557613a04614c8a565b5b6000613a1385828601613790565b9250506020613a24858286016137fb565b9150509250929050565b60008060408385031215613a4557613a44614c8a565b5b6000613a5385828601613790565b9250506020613a6485828601613896565b9150509250929050565b60008060208385031215613a8557613a84614c8a565b5b600083013567ffffffffffffffff811115613aa357613aa2614c85565b5b613aaf858286016137a5565b92509250509250929050565b600060208284031215613ad157613ad0614c8a565b5b6000613adf84828501613810565b91505092915050565b600060208284031215613afe57613afd614c8a565b5b6000613b0c84828501613825565b91505092915050565b600060208284031215613b2b57613b2a614c8a565b5b600082013567ffffffffffffffff811115613b4957613b48614c85565b5b613b5584828501613868565b91505092915050565b600060208284031215613b7457613b73614c8a565b5b6000613b8284828501613896565b91505092915050565b613b9481614999565b82525050565b613ba381614999565b82525050565b613bb2816149ab565b82525050565b6000613bc3826147bc565b613bcd81856147d2565b9350613bdd818560208601614a4c565b613be681614c8f565b840191505092915050565b6000613bfc826147c7565b613c0681856147ee565b9350613c16818560208601614a4c565b613c1f81614c8f565b840191505092915050565b6000613c35826147c7565b613c3f81856147ff565b9350613c4f818560208601614a4c565b80840191505092915050565b6000613c686022836147ee565b9150613c7382614ca0565b604082019050919050565b6000613c8b6021836147ee565b9150613c9682614cef565b604082019050919050565b6000613cae600e836147ee565b9150613cb982614d3e565b602082019050919050565b6000613cd16014836147ee565b9150613cdc82614d67565b602082019050919050565b6000613cf4600e836147ee565b9150613cff82614d90565b602082019050919050565b6000613d176026836147ee565b9150613d2282614db9565b604082019050919050565b6000613d3a602a836147ee565b9150613d4582614e08565b604082019050919050565b6000613d5d6023836147ee565b9150613d6882614e57565b604082019050919050565b6000613d806023836147ee565b9150613d8b82614ea6565b604082019050919050565b6000613da36012836147ee565b9150613dae82614ef5565b602082019050919050565b6000613dc66025836147ee565b9150613dd182614f1e565b604082019050919050565b6000613de96019836147ee565b9150613df482614f6d565b602082019050919050565b6000613e0c6031836147ee565b9150613e1782614f96565b604082019050919050565b6000613e2f601e836147ee565b9150613e3a82614fe5565b602082019050919050565b6000613e526039836147ee565b9150613e5d8261500e565b604082019050919050565b6000613e75602b836147ee565b9150613e808261505d565b604082019050919050565b6000613e98601d836147ee565b9150613ea3826150ac565b602082019050919050565b6000613ebb6026836147ee565b9150613ec6826150d5565b604082019050919050565b6000613ede6005836147ff565b9150613ee982615124565b600582019050919050565b6000613f016019836147ee565b9150613f0c8261514d565b602082019050919050565b6000613f246020836147ee565b9150613f2f82615176565b602082019050919050565b6000613f476021836147ee565b9150613f528261519f565b604082019050919050565b6000613f6a602f836147ee565b9150613f75826151ee565b604082019050919050565b6000613f8d601a836147ee565b9150613f988261523d565b602082019050919050565b6000613fb06032836147ee565b9150613fbb82615266565b604082019050919050565b6000613fd36022836147ee565b9150613fde826152b5565b604082019050919050565b6000613ff66000836147e3565b915061400182615304565b600082019050919050565b60006140196010836147ee565b915061402482615307565b602082019050919050565b600061403c6033836147ee565b915061404782615330565b604082019050919050565b600061405f601d836147ee565b915061406a8261537f565b602082019050919050565b60006140826021836147ee565b915061408d826153a8565b604082019050919050565b60006140a5601e836147ee565b91506140b0826153f7565b602082019050919050565b60006140c8602e836147ee565b91506140d382615420565b604082019050919050565b60006140eb601f836147ee565b91506140f68261546f565b602082019050919050565b600061410e602f836147ee565b915061411982615498565b604082019050919050565b6000614131602d836147ee565b915061413c826154e7565b604082019050919050565b60006141546022836147ee565b915061415f82615536565b604082019050919050565b6040820160008201516141806000850182613b8b565b50602082015161419360208501826141a8565b50505050565b6141a281614a1f565b82525050565b6141b181614a29565b82525050565b60006141c38285613c2a565b91506141cf8284613c2a565b91506141da82613ed1565b91508190509392505050565b60006141f182613fe9565b9150819050919050565b60006020820190506142106000830184613b9a565b92915050565b600060808201905061422b6000830187613b9a565b6142386020830186613b9a565b6142456040830185614199565b81810360608301526142578184613bb8565b905095945050505050565b60006020820190506142776000830184613ba9565b92915050565b600060208201905081810360008301526142978184613bf1565b905092915050565b600060208201905081810360008301526142b881613c5b565b9050919050565b600060208201905081810360008301526142d881613c7e565b9050919050565b600060208201905081810360008301526142f881613ca1565b9050919050565b6000602082019050818103600083015261431881613cc4565b9050919050565b6000602082019050818103600083015261433881613ce7565b9050919050565b6000602082019050818103600083015261435881613d0a565b9050919050565b6000602082019050818103600083015261437881613d2d565b9050919050565b6000602082019050818103600083015261439881613d50565b9050919050565b600060208201905081810360008301526143b881613d73565b9050919050565b600060208201905081810360008301526143d881613d96565b9050919050565b600060208201905081810360008301526143f881613db9565b9050919050565b6000602082019050818103600083015261441881613ddc565b9050919050565b6000602082019050818103600083015261443881613dff565b9050919050565b6000602082019050818103600083015261445881613e22565b9050919050565b6000602082019050818103600083015261447881613e45565b9050919050565b6000602082019050818103600083015261449881613e68565b9050919050565b600060208201905081810360008301526144b881613e8b565b9050919050565b600060208201905081810360008301526144d881613eae565b9050919050565b600060208201905081810360008301526144f881613ef4565b9050919050565b6000602082019050818103600083015261451881613f17565b9050919050565b6000602082019050818103600083015261453881613f3a565b9050919050565b6000602082019050818103600083015261455881613f5d565b9050919050565b6000602082019050818103600083015261457881613f80565b9050919050565b6000602082019050818103600083015261459881613fa3565b9050919050565b600060208201905081810360008301526145b881613fc6565b9050919050565b600060208201905081810360008301526145d88161400c565b9050919050565b600060208201905081810360008301526145f88161402f565b9050919050565b6000602082019050818103600083015261461881614052565b9050919050565b6000602082019050818103600083015261463881614075565b9050919050565b6000602082019050818103600083015261465881614098565b9050919050565b60006020820190508181036000830152614678816140bb565b9050919050565b60006020820190508181036000830152614698816140de565b9050919050565b600060208201905081810360008301526146b881614101565b9050919050565b600060208201905081810360008301526146d881614124565b9050919050565b600060208201905081810360008301526146f881614147565b9050919050565b6000604082019050614714600083018461416a565b92915050565b600060208201905061472f6000830184614199565b92915050565b600061473f614750565b905061474b8282614adb565b919050565b6000604051905090565b600067ffffffffffffffff82111561477557614774614c42565b5b61477e82614c8f565b9050602081019050919050565b600067ffffffffffffffff8211156147a6576147a5614c42565b5b6147af82614c8f565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614815826149e3565b9150614820836149e3565b9250826fffffffffffffffffffffffffffffffff0382111561484557614844614b86565b5b828201905092915050565b600061485b82614a1f565b915061486683614a1f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561489b5761489a614b86565b5b828201905092915050565b60006148b182614a1f565b91506148bc83614a1f565b9250826148cc576148cb614bb5565b5b828204905092915050565b60006148e282614a1f565b91506148ed83614a1f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561492657614925614b86565b5b828202905092915050565b600061493c826149e3565b9150614947836149e3565b92508282101561495a57614959614b86565b5b828203905092915050565b600061497082614a1f565b915061497b83614a1f565b92508282101561498e5761498d614b86565b5b828203905092915050565b60006149a4826149ff565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015614a6a578082015181840152602081019050614a4f565b83811115614a79576000848401525b50505050565b6000614a8a82614a1f565b91506000821415614a9e57614a9d614b86565b5b600182039050919050565b60006002820490506001821680614ac157607f821691505b60208210811415614ad557614ad4614be4565b5b50919050565b614ae482614c8f565b810181811067ffffffffffffffff82111715614b0357614b02614c42565b5b80604052505050565b6000614b1782614a1f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b4a57614b49614b86565b5b600182019050919050565b6000614b6082614a1f565b9150614b6b83614a1f565b925082614b7b57614b7a614bb5565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d61782031204e4654732063616e206265206d696e74656420696e206120547260008201527f7800000000000000000000000000000000000000000000000000000000000000602082015250565b7f416c7265616479206d696e746564000000000000000000000000000000000000600082015250565b7f43616e2774206d696e742074686973206d756368000000000000000000000000600082015250565b7f31204e465420706572204d696e74000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f4d696e74205175616e746974792073686f756c64206265206d6f72652074686160008201527f6e20300000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f52656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f43616e277420657863656564206d6f7265207468616e20313000000000000000600082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682045544820696e20796f75722077616c6c6574000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f5075626c69632053616c65206973206e6f742041637469766500000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f596f7520617265206e6f74205768697465204c697374656420466f72204d696e60008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f5175616e746974792073686f756c64206265206d6f7265207468616e20300000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b61558e81614999565b811461559957600080fd5b50565b6155a5816149ab565b81146155b057600080fd5b50565b6155bc816149b7565b81146155c757600080fd5b50565b6155d381614a1f565b81146155de57600080fd5b5056fea2646970667358221220dea07498ebefeaa14faddda22d76a712d694acf37ec36dc04c9479a3ccdb4ae164736f6c6343000807003368747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5754327536554565584a73354d576353545168484679594339774b6576514e6a5843344a336b3637796d74512f

Deployed Bytecode

0x60806040526004361061023b5760003560e01c806375a88fd71161012e578063b4b532a7116100ab578063d7224ba01161006f578063d7224ba01461085e578063dc33e68114610889578063e985e9c5146108c6578063f2fde38b14610903578063f7427b851461092c5761023b565b8063b4b532a71461077b578063b88d4fde146107a4578063c87b56dd146107cd578063cc47a40b1461080a578063d04950a1146108335761023b565b80639801b11c116100f25780639801b11c146106cd578063a0712d68146106f6578063a22cb46514610712578063ac4460021461073b578063af7b26e9146107525761023b565b806375a88fd7146105e45780638d859f3e1461060f5780638da5cb5b1461063a5780639231ab2a1461066557806395d89b41146106a25761023b565b80632f745c59116101bc57806355f804b31161018057806355f804b3146105015780636352211e1461052a57806369ba1a751461056757806370a0823114610590578063715018a6146105cd5761023b565b80632f745c591461040a5780633fd173661461044757806342842e0e146104705780634e69d560146104995780634f6ccce7146104c45761023b565b8063095ea7b311610203578063095ea7b31461033757806318160ddd14610360578063200d2ed21461038b57806323b872dd146103b65780632f2ffc57146103df5761023b565b80630199e3471461024057806301ffc9a714610269578063050225ea146102a657806306fdde03146102cf578063081812fc146102fa575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613b5e565b610969565b005b34801561027557600080fd5b50610290600480360381019061028b9190613abb565b6109ef565b60405161029d9190614262565b60405180910390f35b3480156102b257600080fd5b506102cd60048036038101906102c89190613a2e565b610b39565b005b3480156102db57600080fd5b506102e4610c5f565b6040516102f1919061427d565b60405180910390f35b34801561030657600080fd5b50610321600480360381019061031c9190613b5e565b610cf1565b60405161032e91906141fb565b60405180910390f35b34801561034357600080fd5b5061035e60048036038101906103599190613a2e565b610d76565b005b34801561036c57600080fd5b50610375610e8f565b604051610382919061471a565b60405180910390f35b34801561039757600080fd5b506103a0610ea4565b6040516103ad919061471a565b60405180910390f35b3480156103c257600080fd5b506103dd60048036038101906103d89190613918565b610eaa565b005b3480156103eb57600080fd5b506103f4610eba565b604051610401919061471a565b60405180910390f35b34801561041657600080fd5b50610431600480360381019061042c9190613a2e565b610ec0565b60405161043e919061471a565b60405180910390f35b34801561045357600080fd5b5061046e60048036038101906104699190613b5e565b6110be565b005b34801561047c57600080fd5b5061049760048036038101906104929190613918565b611144565b005b3480156104a557600080fd5b506104ae611164565b6040516104bb919061471a565b60405180910390f35b3480156104d057600080fd5b506104eb60048036038101906104e69190613b5e565b61116e565b6040516104f8919061471a565b60405180910390f35b34801561050d57600080fd5b5061052860048036038101906105239190613b15565b6111c1565b005b34801561053657600080fd5b50610551600480360381019061054c9190613b5e565b611257565b60405161055e91906141fb565b60405180910390f35b34801561057357600080fd5b5061058e60048036038101906105899190613b5e565b61126d565b005b34801561059c57600080fd5b506105b760048036038101906105b291906138ab565b61131f565b6040516105c4919061471a565b60405180910390f35b3480156105d957600080fd5b506105e2611408565b005b3480156105f057600080fd5b506105f9611490565b604051610606919061471a565b60405180910390f35b34801561061b57600080fd5b5061062461149a565b604051610631919061471a565b60405180910390f35b34801561064657600080fd5b5061064f6114a0565b60405161065c91906141fb565b60405180910390f35b34801561067157600080fd5b5061068c60048036038101906106879190613b5e565b6114c9565b60405161069991906146ff565b60405180910390f35b3480156106ae57600080fd5b506106b76114e1565b6040516106c4919061427d565b60405180910390f35b3480156106d957600080fd5b506106f460048036038101906106ef9190613b5e565b611573565b005b610710600480360381019061070b9190613b5e565b6115f9565b005b34801561071e57600080fd5b50610739600480360381019061073491906139ee565b611a1d565b005b34801561074757600080fd5b50610750611b9e565b005b34801561075e57600080fd5b5061077960048036038101906107749190613b5e565b611d1f565b005b34801561078757600080fd5b506107a2600480360381019061079d9190613a6e565b611da5565b005b3480156107b057600080fd5b506107cb60048036038101906107c6919061396b565b611ec6565b005b3480156107d957600080fd5b506107f460048036038101906107ef9190613b5e565b611f22565b604051610801919061427d565b60405180910390f35b34801561081657600080fd5b50610831600480360381019061082c9190613a2e565b611fc9565b005b34801561083f57600080fd5b506108486120ed565b604051610855919061471a565b60405180910390f35b34801561086a57600080fd5b506108736120f3565b604051610880919061471a565b60405180910390f35b34801561089557600080fd5b506108b060048036038101906108ab91906138ab565b6120f9565b6040516108bd919061471a565b60405180910390f35b3480156108d257600080fd5b506108ed60048036038101906108e891906138d8565b61210b565b6040516108fa9190614262565b60405180910390f35b34801561090f57600080fd5b5061092a600480360381019061092591906138ab565b61219f565b005b34801561093857600080fd5b50610953600480360381019061094e91906138ab565b612297565b6040516109609190614262565b60405180910390f35b6109716122ed565b73ffffffffffffffffffffffffffffffffffffffff1661098f6114a0565b73ffffffffffffffffffffffffffffffffffffffff16146109e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109dc906144ff565b60405180910390fd5b80600b8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610aba57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b2257507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b325750610b31826122f5565b5b9050919050565b610b416122ed565b73ffffffffffffffffffffffffffffffffffffffff16610b5f6114a0565b73ffffffffffffffffffffffffffffffffffffffff1614610bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bac906144ff565b60405180910390fd5b600d5481610bc1610e8f565b610bcb9190614850565b1115610c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c03906143bf565b60405180910390fd5b600a54811115610c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c48906143ff565b60405180910390fd5b610c5b828261235f565b5050565b606060028054610c6e90614aa9565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9a90614aa9565b8015610ce75780601f10610cbc57610100808354040283529160200191610ce7565b820191906000526020600020905b815481529060010190602001808311610cca57829003601f168201915b5050505050905090565b6000610cfc8261237d565b610d3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d32906146bf565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d8182611257565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de99061459f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e116122ed565b73ffffffffffffffffffffffffffffffffffffffff161480610e405750610e3f81610e3a6122ed565b61210b565b5b610e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e769061445f565b60405180910390fd5b610e8a83838361238b565b505050565b600060018054610e9f9190614965565b905090565b60105481565b610eb583838361243d565b505050565b600b5481565b6000610ecb8361131f565b8210610f0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f039061429f565b60405180910390fd5b6000610f16610e8f565b905060008060005b8381101561107c576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461101057806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561106857868414156110595781955050505050506110b8565b838061106490614b0c565b9450505b50808061107490614b0c565b915050610f1e565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110af9061465f565b60405180910390fd5b92915050565b6110c66122ed565b73ffffffffffffffffffffffffffffffffffffffff166110e46114a0565b73ffffffffffffffffffffffffffffffffffffffff161461113a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611131906144ff565b60405180910390fd5b80600c8190555050565b61115f83838360405180602001604052806000815250611ec6565b505050565b6000601054905090565b6000611178610e8f565b82106111b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b09061439f565b60405180910390fd5b819050919050565b6111c96122ed565b73ffffffffffffffffffffffffffffffffffffffff166111e76114a0565b73ffffffffffffffffffffffffffffffffffffffff161461123d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611234906144ff565b60405180910390fd5b80600f908051906020019061125392919061362f565b5050565b6000611262826129f6565b600001519050919050565b6112756122ed565b73ffffffffffffffffffffffffffffffffffffffff166112936114a0565b73ffffffffffffffffffffffffffffffffffffffff16146112e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e0906144ff565b60405180910390fd5b80601081905550600181141561130c5766f5232269808000600c8190555061131c565b67015fb7f9b8c38000600c819055505b50565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611390576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113879061447f565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6114106122ed565b73ffffffffffffffffffffffffffffffffffffffff1661142e6114a0565b73ffffffffffffffffffffffffffffffffffffffff1614611484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147b906144ff565b60405180910390fd5b61148e6000612bf9565b565b6000600d54905090565b600c5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114d16136b5565b6114da826129f6565b9050919050565b6060600380546114f090614aa9565b80601f016020809104026020016040519081016040528092919081815260200182805461151c90614aa9565b80156115695780601f1061153e57610100808354040283529160200191611569565b820191906000526020600020905b81548152906001019060200180831161154c57829003601f168201915b5050505050905090565b61157b6122ed565b73ffffffffffffffffffffffffffffffffffffffff166115996114a0565b73ffffffffffffffffffffffffffffffffffffffff16146115ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e6906144ff565b60405180910390fd5b80600d8190555050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165e9061443f565b60405180910390fd5b6001601054141561184357600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166116fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f59061451f565b60405180910390fd5b600d548161170a610e8f565b6117149190614850565b1115611755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174c906143bf565b60405180910390fd5b60018114611798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178f9061431f565b60405180910390fd5b60016117a3336120f9565b106117e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117da906142df565b60405180910390fd5b80600c546117f191906148d7565b341015611833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182a9061449f565b60405180910390fd5b61183e33600161235f565b611a1a565b600260105414611888576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187f906144df565b60405180910390fd5b600081116118cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c29061437f565b60405180910390fd5b600a54811115611910576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611907906142bf565b60405180910390fd5b600d548161191c610e8f565b6119269190614850565b1115611967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195e906143bf565b60405180910390fd5b600b5481611974336120f9565b61197e9190614850565b11156119bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b6906142ff565b60405180910390fd5b80600c546119cd91906148d7565b341015611a0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a069061449f565b60405180910390fd5b611a19338261235f565b5b50565b611a256122ed565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8a9061455f565b60405180910390fd5b8060076000611aa06122ed565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b4d6122ed565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b929190614262565b60405180910390a35050565b611ba66122ed565b73ffffffffffffffffffffffffffffffffffffffff16611bc46114a0565b73ffffffffffffffffffffffffffffffffffffffff1614611c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c11906144ff565b60405180910390fd5b60026009541415611c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c579061467f565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611c8e906141e6565b60006040518083038185875af1925050503d8060008114611ccb576040519150601f19603f3d011682016040523d82523d6000602084013e611cd0565b606091505b5050905080611d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0b906145bf565b60405180910390fd5b506001600981905550565b611d276122ed565b73ffffffffffffffffffffffffffffffffffffffff16611d456114a0565b73ffffffffffffffffffffffffffffffffffffffff1614611d9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d92906144ff565b60405180910390fd5b80600a8190555050565b611dad6122ed565b73ffffffffffffffffffffffffffffffffffffffff16611dcb6114a0565b73ffffffffffffffffffffffffffffffffffffffff1614611e21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e18906144ff565b60405180910390fd5b60005b82829050811015611ec1576001600e6000858585818110611e4857611e47614c13565b5b9050602002016020810190611e5d91906138ab565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611eb990614b0c565b915050611e24565b505050565b611ed184848461243d565b611edd84848484612cbd565b611f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f13906145df565b60405180910390fd5b50505050565b6060611f2d8261237d565b611f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f639061453f565b60405180910390fd5b6000611f76612e54565b90506000815111611f965760405180602001604052806000815250611fc1565b80611fa084612ee6565b604051602001611fb19291906141b7565b6040516020818303038152906040525b915050919050565b611fd16122ed565b73ffffffffffffffffffffffffffffffffffffffff16611fef6114a0565b73ffffffffffffffffffffffffffffffffffffffff1614612045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203c906144ff565b60405180910390fd5b60008111612088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207f9061463f565b60405180910390fd5b600d5481612094610e8f565b61209e9190614850565b11156120df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d6906143bf565b60405180910390fd5b6120e9828261235f565b5050565b600a5481565b60085481565b600061210482613047565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6121a76122ed565b73ffffffffffffffffffffffffffffffffffffffff166121c56114a0565b73ffffffffffffffffffffffffffffffffffffffff161461221b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612212906144ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561228b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122829061433f565b60405180910390fd5b61229481612bf9565b50565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612379828260405180602001604052806000815250613130565b5050565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000612448826129f6565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661246f6122ed565b73ffffffffffffffffffffffffffffffffffffffff1614806124cb57506124946122ed565b73ffffffffffffffffffffffffffffffffffffffff166124b384610cf1565b73ffffffffffffffffffffffffffffffffffffffff16145b806124e757506124e682600001516124e16122ed565b61210b565b5b905080612529576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125209061457f565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461259b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612592906144bf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561260b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612602906143df565b60405180910390fd5b6126188585856001613610565b612628600084846000015161238b565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166126969190614931565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661273a919061480a565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555090505060006001846128409190614850565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612986576128b68161237d565b15612985576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46129ee8686866001613616565b505050505050565b6129fe6136b5565b612a078261237d565b612a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3d9061435f565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000018310612aaa5760017f000000000000000000000000000000000000000000000000000000000000000184612a9d9190614965565b612aa79190614850565b90505b60008390505b818110612bb8576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612ba457809350505050612bf4565b508080612bb090614a7f565b915050612ab0565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612beb9061469f565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612cde8473ffffffffffffffffffffffffffffffffffffffff1661361c565b15612e47578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d076122ed565b8786866040518563ffffffff1660e01b8152600401612d299493929190614216565b602060405180830381600087803b158015612d4357600080fd5b505af1925050508015612d7457506040513d601f19601f82011682018060405250810190612d719190613ae8565b60015b612df7573d8060008114612da4576040519150601f19603f3d011682016040523d82523d6000602084013e612da9565b606091505b50600081511415612def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de6906145df565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e4c565b600190505b949350505050565b6060600f8054612e6390614aa9565b80601f0160208091040260200160405190810160405280929190818152602001828054612e8f90614aa9565b8015612edc5780601f10612eb157610100808354040283529160200191612edc565b820191906000526020600020905b815481529060010190602001808311612ebf57829003601f168201915b5050505050905090565b60606000821415612f2e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613042565b600082905060005b60008214612f60578080612f4990614b0c565b915050600a82612f5991906148a6565b9150612f36565b60008167ffffffffffffffff811115612f7c57612f7b614c42565b5b6040519080825280601f01601f191660200182016040528015612fae5781602001600182028036833780820191505090505b5090505b6000851461303b57600182612fc79190614965565b9150600a85612fd69190614b55565b6030612fe29190614850565b60f81b818381518110612ff857612ff7614c13565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561303491906148a6565b9450612fb2565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130af9061441f565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156131a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319e9061461f565b60405180910390fd5b6131b08161237d565b156131f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e7906145ff565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000001831115613253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324a906146df565b60405180910390fd5b6132606000858386613610565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050604051806040016040528085836000015161335d919061480a565b6fffffffffffffffffffffffffffffffff168152602001858360200151613384919061480a565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156135f357818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46135936000888488612cbd565b6135d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135c9906145df565b60405180910390fd5b81806135dd90614b0c565b92505080806135eb90614b0c565b915050613522565b50806001819055506136086000878588613616565b505050505050565b50505050565b50505050565b600080823b905060008111915050919050565b82805461363b90614aa9565b90600052602060002090601f01602090048101928261365d57600085556136a4565b82601f1061367657805160ff19168380011785556136a4565b828001600101855582156136a4579182015b828111156136a3578251825591602001919060010190613688565b5b5090506136b191906136ef565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156137085760008160009055506001016136f0565b5090565b600061371f61371a8461475a565b614735565b90508281526020810184848401111561373b5761373a614c80565b5b613746848285614a3d565b509392505050565b600061376161375c8461478b565b614735565b90508281526020810184848401111561377d5761377c614c80565b5b613788848285614a3d565b509392505050565b60008135905061379f81615585565b92915050565b60008083601f8401126137bb576137ba614c76565b5b8235905067ffffffffffffffff8111156137d8576137d7614c71565b5b6020830191508360208202830111156137f4576137f3614c7b565b5b9250929050565b60008135905061380a8161559c565b92915050565b60008135905061381f816155b3565b92915050565b600081519050613834816155b3565b92915050565b600082601f83011261384f5761384e614c76565b5b813561385f84826020860161370c565b91505092915050565b600082601f83011261387d5761387c614c76565b5b813561388d84826020860161374e565b91505092915050565b6000813590506138a5816155ca565b92915050565b6000602082840312156138c1576138c0614c8a565b5b60006138cf84828501613790565b91505092915050565b600080604083850312156138ef576138ee614c8a565b5b60006138fd85828601613790565b925050602061390e85828601613790565b9150509250929050565b60008060006060848603121561393157613930614c8a565b5b600061393f86828701613790565b935050602061395086828701613790565b925050604061396186828701613896565b9150509250925092565b6000806000806080858703121561398557613984614c8a565b5b600061399387828801613790565b94505060206139a487828801613790565b93505060406139b587828801613896565b925050606085013567ffffffffffffffff8111156139d6576139d5614c85565b5b6139e28782880161383a565b91505092959194509250565b60008060408385031215613a0557613a04614c8a565b5b6000613a1385828601613790565b9250506020613a24858286016137fb565b9150509250929050565b60008060408385031215613a4557613a44614c8a565b5b6000613a5385828601613790565b9250506020613a6485828601613896565b9150509250929050565b60008060208385031215613a8557613a84614c8a565b5b600083013567ffffffffffffffff811115613aa357613aa2614c85565b5b613aaf858286016137a5565b92509250509250929050565b600060208284031215613ad157613ad0614c8a565b5b6000613adf84828501613810565b91505092915050565b600060208284031215613afe57613afd614c8a565b5b6000613b0c84828501613825565b91505092915050565b600060208284031215613b2b57613b2a614c8a565b5b600082013567ffffffffffffffff811115613b4957613b48614c85565b5b613b5584828501613868565b91505092915050565b600060208284031215613b7457613b73614c8a565b5b6000613b8284828501613896565b91505092915050565b613b9481614999565b82525050565b613ba381614999565b82525050565b613bb2816149ab565b82525050565b6000613bc3826147bc565b613bcd81856147d2565b9350613bdd818560208601614a4c565b613be681614c8f565b840191505092915050565b6000613bfc826147c7565b613c0681856147ee565b9350613c16818560208601614a4c565b613c1f81614c8f565b840191505092915050565b6000613c35826147c7565b613c3f81856147ff565b9350613c4f818560208601614a4c565b80840191505092915050565b6000613c686022836147ee565b9150613c7382614ca0565b604082019050919050565b6000613c8b6021836147ee565b9150613c9682614cef565b604082019050919050565b6000613cae600e836147ee565b9150613cb982614d3e565b602082019050919050565b6000613cd16014836147ee565b9150613cdc82614d67565b602082019050919050565b6000613cf4600e836147ee565b9150613cff82614d90565b602082019050919050565b6000613d176026836147ee565b9150613d2282614db9565b604082019050919050565b6000613d3a602a836147ee565b9150613d4582614e08565b604082019050919050565b6000613d5d6023836147ee565b9150613d6882614e57565b604082019050919050565b6000613d806023836147ee565b9150613d8b82614ea6565b604082019050919050565b6000613da36012836147ee565b9150613dae82614ef5565b602082019050919050565b6000613dc66025836147ee565b9150613dd182614f1e565b604082019050919050565b6000613de96019836147ee565b9150613df482614f6d565b602082019050919050565b6000613e0c6031836147ee565b9150613e1782614f96565b604082019050919050565b6000613e2f601e836147ee565b9150613e3a82614fe5565b602082019050919050565b6000613e526039836147ee565b9150613e5d8261500e565b604082019050919050565b6000613e75602b836147ee565b9150613e808261505d565b604082019050919050565b6000613e98601d836147ee565b9150613ea3826150ac565b602082019050919050565b6000613ebb6026836147ee565b9150613ec6826150d5565b604082019050919050565b6000613ede6005836147ff565b9150613ee982615124565b600582019050919050565b6000613f016019836147ee565b9150613f0c8261514d565b602082019050919050565b6000613f246020836147ee565b9150613f2f82615176565b602082019050919050565b6000613f476021836147ee565b9150613f528261519f565b604082019050919050565b6000613f6a602f836147ee565b9150613f75826151ee565b604082019050919050565b6000613f8d601a836147ee565b9150613f988261523d565b602082019050919050565b6000613fb06032836147ee565b9150613fbb82615266565b604082019050919050565b6000613fd36022836147ee565b9150613fde826152b5565b604082019050919050565b6000613ff66000836147e3565b915061400182615304565b600082019050919050565b60006140196010836147ee565b915061402482615307565b602082019050919050565b600061403c6033836147ee565b915061404782615330565b604082019050919050565b600061405f601d836147ee565b915061406a8261537f565b602082019050919050565b60006140826021836147ee565b915061408d826153a8565b604082019050919050565b60006140a5601e836147ee565b91506140b0826153f7565b602082019050919050565b60006140c8602e836147ee565b91506140d382615420565b604082019050919050565b60006140eb601f836147ee565b91506140f68261546f565b602082019050919050565b600061410e602f836147ee565b915061411982615498565b604082019050919050565b6000614131602d836147ee565b915061413c826154e7565b604082019050919050565b60006141546022836147ee565b915061415f82615536565b604082019050919050565b6040820160008201516141806000850182613b8b565b50602082015161419360208501826141a8565b50505050565b6141a281614a1f565b82525050565b6141b181614a29565b82525050565b60006141c38285613c2a565b91506141cf8284613c2a565b91506141da82613ed1565b91508190509392505050565b60006141f182613fe9565b9150819050919050565b60006020820190506142106000830184613b9a565b92915050565b600060808201905061422b6000830187613b9a565b6142386020830186613b9a565b6142456040830185614199565b81810360608301526142578184613bb8565b905095945050505050565b60006020820190506142776000830184613ba9565b92915050565b600060208201905081810360008301526142978184613bf1565b905092915050565b600060208201905081810360008301526142b881613c5b565b9050919050565b600060208201905081810360008301526142d881613c7e565b9050919050565b600060208201905081810360008301526142f881613ca1565b9050919050565b6000602082019050818103600083015261431881613cc4565b9050919050565b6000602082019050818103600083015261433881613ce7565b9050919050565b6000602082019050818103600083015261435881613d0a565b9050919050565b6000602082019050818103600083015261437881613d2d565b9050919050565b6000602082019050818103600083015261439881613d50565b9050919050565b600060208201905081810360008301526143b881613d73565b9050919050565b600060208201905081810360008301526143d881613d96565b9050919050565b600060208201905081810360008301526143f881613db9565b9050919050565b6000602082019050818103600083015261441881613ddc565b9050919050565b6000602082019050818103600083015261443881613dff565b9050919050565b6000602082019050818103600083015261445881613e22565b9050919050565b6000602082019050818103600083015261447881613e45565b9050919050565b6000602082019050818103600083015261449881613e68565b9050919050565b600060208201905081810360008301526144b881613e8b565b9050919050565b600060208201905081810360008301526144d881613eae565b9050919050565b600060208201905081810360008301526144f881613ef4565b9050919050565b6000602082019050818103600083015261451881613f17565b9050919050565b6000602082019050818103600083015261453881613f3a565b9050919050565b6000602082019050818103600083015261455881613f5d565b9050919050565b6000602082019050818103600083015261457881613f80565b9050919050565b6000602082019050818103600083015261459881613fa3565b9050919050565b600060208201905081810360008301526145b881613fc6565b9050919050565b600060208201905081810360008301526145d88161400c565b9050919050565b600060208201905081810360008301526145f88161402f565b9050919050565b6000602082019050818103600083015261461881614052565b9050919050565b6000602082019050818103600083015261463881614075565b9050919050565b6000602082019050818103600083015261465881614098565b9050919050565b60006020820190508181036000830152614678816140bb565b9050919050565b60006020820190508181036000830152614698816140de565b9050919050565b600060208201905081810360008301526146b881614101565b9050919050565b600060208201905081810360008301526146d881614124565b9050919050565b600060208201905081810360008301526146f881614147565b9050919050565b6000604082019050614714600083018461416a565b92915050565b600060208201905061472f6000830184614199565b92915050565b600061473f614750565b905061474b8282614adb565b919050565b6000604051905090565b600067ffffffffffffffff82111561477557614774614c42565b5b61477e82614c8f565b9050602081019050919050565b600067ffffffffffffffff8211156147a6576147a5614c42565b5b6147af82614c8f565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614815826149e3565b9150614820836149e3565b9250826fffffffffffffffffffffffffffffffff0382111561484557614844614b86565b5b828201905092915050565b600061485b82614a1f565b915061486683614a1f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561489b5761489a614b86565b5b828201905092915050565b60006148b182614a1f565b91506148bc83614a1f565b9250826148cc576148cb614bb5565b5b828204905092915050565b60006148e282614a1f565b91506148ed83614a1f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561492657614925614b86565b5b828202905092915050565b600061493c826149e3565b9150614947836149e3565b92508282101561495a57614959614b86565b5b828203905092915050565b600061497082614a1f565b915061497b83614a1f565b92508282101561498e5761498d614b86565b5b828203905092915050565b60006149a4826149ff565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015614a6a578082015181840152602081019050614a4f565b83811115614a79576000848401525b50505050565b6000614a8a82614a1f565b91506000821415614a9e57614a9d614b86565b5b600182039050919050565b60006002820490506001821680614ac157607f821691505b60208210811415614ad557614ad4614be4565b5b50919050565b614ae482614c8f565b810181811067ffffffffffffffff82111715614b0357614b02614c42565b5b80604052505050565b6000614b1782614a1f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b4a57614b49614b86565b5b600182019050919050565b6000614b6082614a1f565b9150614b6b83614a1f565b925082614b7b57614b7a614bb5565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d61782031204e4654732063616e206265206d696e74656420696e206120547260008201527f7800000000000000000000000000000000000000000000000000000000000000602082015250565b7f416c7265616479206d696e746564000000000000000000000000000000000000600082015250565b7f43616e2774206d696e742074686973206d756368000000000000000000000000600082015250565b7f31204e465420706572204d696e74000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f4d696e74205175616e746974792073686f756c64206265206d6f72652074686160008201527f6e20300000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f52656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f43616e277420657863656564206d6f7265207468616e20313000000000000000600082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682045544820696e20796f75722077616c6c6574000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f5075626c69632053616c65206973206e6f742041637469766500000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f596f7520617265206e6f74205768697465204c697374656420466f72204d696e60008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f5175616e746974792073686f756c64206265206d6f7265207468616e20300000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b61558e81614999565b811461559957600080fd5b50565b6155a5816149ab565b81146155b057600080fd5b50565b6155bc816149b7565b81146155c757600080fd5b50565b6155d381614a1f565b81146155de57600080fd5b5056fea2646970667358221220dea07498ebefeaa14faddda22d76a712d694acf37ec36dc04c9479a3ccdb4ae164736f6c63430008070033

Deployed Bytecode Sourcemap

19852:4676:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23207:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11169:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23923:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12741:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13942:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13558:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10137:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20383:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14625:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20042:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10420:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23574:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14772:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24341:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10238:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22542:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12618:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24157:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11544:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2626:103;;;;;;;;;;;;;:::i;:::-;;24426:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20083:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2403:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22867:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12840:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23678:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20805:1018;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14151:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23020:181;;;;;;;;;;;;;:::i;:::-;;23814:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22330:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14934:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21830:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23311:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19948:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18064:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22756:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14432:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2738:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22194:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23207:98;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23298:1:::1;23280:15;:19;;;;23207:98:::0;:::o;11169:370::-;11296:4;11341:25;11326:40;;;:11;:40;;;;:99;;;;11392:33;11377:48;;;:11;:48;;;;11326:99;:160;;;;11451:35;11436:50;;;:11;:50;;;;11326:160;:207;;;;11497:36;11521:11;11497:23;:36::i;:::-;11326:207;11312:221;;11169:370;;;:::o;23923:226::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24011:20:::1;;24006:1;23990:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:41;;23982:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;24074:17;;24069:1;:22;;24061:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;24128:15;24138:1;24141;24128:9;:15::i;:::-;23923:226:::0;;:::o;12741:94::-;12795:13;12824:5;12817:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12741:94;:::o;13942:204::-;14010:7;14034:16;14042:7;14034;:16::i;:::-;14026:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;14116:15;:24;14132:7;14116:24;;;;;;;;;;;;;;;;;;;;;14109:31;;13942:204;;;:::o;13558:379::-;13627:13;13643:24;13659:7;13643:15;:24::i;:::-;13627:40;;13688:5;13682:11;;:2;:11;;;;13674:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;13773:5;13757:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;13782:37;13799:5;13806:12;:10;:12::i;:::-;13782:16;:37::i;:::-;13757:62;13741:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;13903:28;13912:2;13916:7;13925:5;13903:8;:28::i;:::-;13620:317;13558:379;;:::o;10137:96::-;10190:7;10226:1;10213:12;;:14;;;;:::i;:::-;10206:21;;10137:96;:::o;20383:22::-;;;;:::o;14625:142::-;14733:28;14743:4;14749:2;14753:7;14733:9;:28::i;:::-;14625:142;;;:::o;20042:34::-;;;;:::o;10420:744::-;10529:7;10564:16;10574:5;10564:9;:16::i;:::-;10556:5;:24;10548:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10626:22;10651:13;:11;:13::i;:::-;10626:38;;10671:19;10701:25;10751:9;10746:350;10770:14;10766:1;:18;10746:350;;;10800:31;10834:11;:14;10846:1;10834:14;;;;;;;;;;;10800:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10887:1;10861:28;;:9;:14;;;:28;;;10857:89;;10922:9;:14;;;10902:34;;10857:89;10979:5;10958:26;;:17;:26;;;10954:135;;;11016:5;11001:11;:20;10997:59;;;11043:1;11036:8;;;;;;;;;10997:59;11066:13;;;;;:::i;:::-;;;;10954:135;10791:305;10786:3;;;;;:::i;:::-;;;;10746:350;;;;11102:56;;;;;;;;;;:::i;:::-;;;;;;;;10420:744;;;;;:::o;23574:98::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23657:9:::1;23649:5;:17;;;;23574:98:::0;:::o;14772:157::-;14884:39;14901:4;14907:2;14911:7;14884:39;;;;;;;;;;;;:16;:39::i;:::-;14772:157;;;:::o;24341:77::-;24381:4;24398:6;;24391:13;;24341:77;:::o;10238:177::-;10305:7;10337:13;:11;:13::i;:::-;10329:5;:21;10321:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;10404:5;10397:12;;10238:177;;;:::o;22542:98::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22627:7:::1;22611:13;:23;;;;;;;;;;;;:::i;:::-;;22542:98:::0;:::o;12618:118::-;12682:7;12705:20;12717:7;12705:11;:20::i;:::-;:25;;;12698:32;;12618:118;;;:::o;24157:178::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24222:1:::1;24213:6;:10;;;;24238:1;24235;:4;24232:100;;;24259:11;24253:5;:17;;;;24232:100;;;24311:11;24305:5;:17;;;;24232:100;24157:178:::0;:::o;11544:211::-;11608:7;11649:1;11632:19;;:5;:19;;;;11624:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;11721:12;:19;11734:5;11721:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;11713:36;;11706:43;;11544:211;;;:::o;2626:103::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2691:30:::1;2718:1;2691:18;:30::i;:::-;2626:103::o:0;24426:95::-;24474:4;24495:20;;24488:27;;24426:95;:::o;20083:35::-;;;;:::o;2403:87::-;2449:7;2476:6;;;;;;;;;;;2469:13;;2403:87;:::o;22867:147::-;22948:21;;:::i;:::-;22988:20;23000:7;22988:11;:20::i;:::-;22981:27;;22867:147;;;:::o;12840:98::-;12896:13;12925:7;12918:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12840:98;:::o;23678:130::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23787:15:::1;23764:20;:38;;;;23678:130:::0;:::o;20805:1018::-;20742:10;20729:23;;:9;:23;;;20721:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;20887:1:::1;20877:6;;:11;20874:942;;;20904:27;:39;20932:10;20904:39;;;;;;;;;;;;;;;;;;;;;;;;;20896:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;21024:20;;21012:8;20996:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:48;;20988:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;21094:1;21082:8;:13;21074:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;21156:1;21129:24;21142:10;21129:12;:24::i;:::-;:28;21121:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;21215:8;21207:5;;:16;;;;:::i;:::-;21194:9;:29;;21186:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;21264:24;21274:10;21286:1;21264:9;:24::i;:::-;20874:942;;;21331:1;21321:6;;:11;21313:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;21388:1;21377:8;:12;21369:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;21455:17;;21443:8;:29;;21435:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21552:20;;21540:8;21524:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:48;;21516:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;21649:15;;21637:8;21610:24;21623:10;21610:12;:24::i;:::-;:35;;;;:::i;:::-;:54;;21602:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;21726:8;21718:5;;:16;;;;:::i;:::-;21705:9;:29;;21697:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;21775:31;21785:10;21797:8;21775:9;:31::i;:::-;20874:942;20805:1018:::0;:::o;14151:274::-;14254:12;:10;:12::i;:::-;14242:24;;:8;:24;;;;14234:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;14351:8;14306:18;:32;14325:12;:10;:12::i;:::-;14306:32;;;;;;;;;;;;;;;:42;14339:8;14306:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;14400:8;14371:48;;14386:12;:10;:12::i;:::-;14371:48;;;14410:8;14371:48;;;;;;:::i;:::-;;;;;;;;14151:274;;:::o;23020:181::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;185:1:::1;331:7;;:19;;323:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;185:1;392:7;:18;;;;23085:12:::2;23103:10;:15;;23126:21;23103:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23084:68;;;23167:7;23159:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;23077:124;141:1:::1;435:7;:22;;;;23020:181::o:0;23814:102::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23909:1:::1;23889:17;:21;;;;23814:102:::0;:::o;22330:200::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22440:6:::1;22436:88;22451:6;;:13;;22449:1;:15;22436:88;;;22520:4;22479:27;:38;22507:6;;22514:1;22507:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;22479:38;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;22465:3;;;;;:::i;:::-;;;;22436:88;;;;22330:200:::0;;:::o;14934:311::-;15071:28;15081:4;15087:2;15091:7;15071:9;:28::i;:::-;15122:48;15145:4;15151:2;15155:7;15164:5;15122:22;:48::i;:::-;15106:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;14934:311;;;;:::o;21830:355::-;21903:13;21933:16;21941:7;21933;:16::i;:::-;21925:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;22010:21;22034:10;:8;:10::i;:::-;22010:34;;22089:1;22071:7;22065:21;:25;:112;;;;;;;;;;;;;;;;;22126:7;22135:18;:7;:16;:18::i;:::-;22109:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22065:112;22051:126;;;21830:355;;;:::o;23311:253::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23405:1:::1;23394:8;:12;23386:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;23481:20;;23469:8;23453:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:48;;23445:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;23529:29;23539:8;23549;23529:9;:29::i;:::-;23311:253:::0;;:::o;19948:36::-;;;;:::o;18064:43::-;;;;:::o;22756:107::-;22814:7;22837:20;22851:5;22837:13;:20::i;:::-;22830:27;;22756:107;;;:::o;14432:186::-;14554:4;14577:18;:25;14596:5;14577:25;;;;;;;;;;;;;;;:35;14603:8;14577:35;;;;;;;;;;;;;;;;;;;;;;;;;14570:42;;14432:186;;;;:::o;2738:201::-;2548:12;:10;:12::i;:::-;2537:23;;:7;:5;:7::i;:::-;:23;;;2529:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2847:1:::1;2827:22;;:8;:22;;;;2819:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2903:28;2922:8;2903:18;:28::i;:::-;2738:201:::0;:::o;22194:126::-;22260:4;22280:27;:34;22308:5;22280:34;;;;;;;;;;;;;;;;;;;;;;;;;22273:41;;22194:126;;;:::o;1946:98::-;1999:7;2026:10;2019:17;;1946:98;:::o;7056:157::-;7141:4;7180:25;7165:40;;;:11;:40;;;;7158:47;;7056:157;;;:::o;15361:98::-;15426:27;15436:2;15440:8;15426:27;;;;;;;;;;;;:9;:27::i;:::-;15361:98;;:::o;15250:105::-;15307:4;15337:12;;15327:7;:22;15320:29;;15250:105;;;:::o;17886:172::-;18010:2;17983:15;:24;17999:7;17983:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;18044:7;18040:2;18024:28;;18033:5;18024:28;;;;;;;;;;;;17886:172;;;:::o;16621:1260::-;16718:35;16756:20;16768:7;16756:11;:20::i;:::-;16718:58;;16785:22;16827:13;:18;;;16811:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;16880:12;:10;:12::i;:::-;16856:36;;:20;16868:7;16856:11;:20::i;:::-;:36;;;16811:81;:142;;;;16903:50;16920:13;:18;;;16940:12;:10;:12::i;:::-;16903:16;:50::i;:::-;16811:142;16785:169;;16979:17;16963:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;17111:4;17089:26;;:13;:18;;;:26;;;17073:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;17200:1;17186:16;;:2;:16;;;;17178:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;17253:43;17275:4;17281:2;17285:7;17294:1;17253:21;:43::i;:::-;17304:49;17321:1;17325:7;17334:13;:18;;;17304:8;:49::i;:::-;17392:1;17362:12;:18;17375:4;17362:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17428:1;17400:12;:16;17413:2;17400:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17459:43;;;;;;;;17474:2;17459:43;;;;;;17485:15;17459:43;;;;;17436:11;:20;17448:7;17436:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17510:19;17542:1;17532:7;:11;;;;:::i;:::-;17510:33;;17595:1;17554:43;;:11;:24;17566:11;17554:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;17550:236;;;17612:20;17620:11;17612:7;:20::i;:::-;17608:171;;;17672:97;;;;;;;;17699:13;:18;;;17672:97;;;;;;17730:13;:28;;;17672:97;;;;;17645:11;:24;17657:11;17645:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17608:171;17550:236;17818:7;17814:2;17799:27;;17808:4;17799:27;;;;;;;;;;;;17833:42;17854:4;17860:2;17864:7;17873:1;17833:20;:42::i;:::-;16711:1170;;;16621:1260;;;:::o;12007:606::-;12083:21;;:::i;:::-;12124:16;12132:7;12124;:16::i;:::-;12116:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12196:26;12244:12;12233:7;:23;12229:93;;12313:1;12298:12;12288:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;12267:47;;12229:93;12335:12;12350:7;12335:22;;12330:212;12367:18;12359:4;:26;12330:212;;12404:31;12438:11;:17;12450:4;12438:17;;;;;;;;;;;12404:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12494:1;12468:28;;:9;:14;;;:28;;;12464:71;;12516:9;12509:16;;;;;;;12464:71;12395:147;12387:6;;;;;:::i;:::-;;;;12330:212;;;;12550:57;;;;;;;;;;:::i;:::-;;;;;;;;12007:606;;;;:::o;2948:191::-;3022:16;3041:6;;;;;;;;;;;3022:25;;3067:8;3058:6;;:17;;;;;;;;;;;;;;;;;;3122:8;3091:40;;3112:8;3091:40;;;;;;;;;;;;3011:128;2948:191;:::o;18864:690::-;19001:4;19018:15;:2;:13;;;:15::i;:::-;19014:535;;;19073:2;19057:36;;;19094:12;:10;:12::i;:::-;19108:4;19114:7;19123:5;19057:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;19044:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19305:1;19288:6;:13;:18;19284:215;;;19321:61;;;;;;;;;;:::i;:::-;;;;;;;;19284:215;19467:6;19461:13;19452:6;19448:2;19444:15;19437:38;19044:464;19189:45;;;19179:55;;;:6;:55;;;;19172:62;;;;;19014:535;19537:4;19530:11;;18864:690;;;;;;;:::o;22644:108::-;22704:13;22733;22726:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22644:108;:::o;563:533::-;619:13;659:1;650:5;:10;646:53;;;677:10;;;;;;;;;;;;;;;;;;;;;646:53;709:12;724:5;709:20;;740:14;765:78;780:1;772:4;:9;765:78;;798:8;;;;;:::i;:::-;;;;829:2;821:10;;;;;:::i;:::-;;;765:78;;;853:19;885:6;875:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;853:39;;903:154;919:1;910:5;:10;903:154;;947:1;937:11;;;;;:::i;:::-;;;1014:2;1006:5;:10;;;;:::i;:::-;993:2;:24;;;;:::i;:::-;980:39;;963:6;970;963:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1043:2;1034:11;;;;;:::i;:::-;;;903:154;;;1081:6;1067:21;;;;;563:533;;;;:::o;11761:240::-;11822:7;11871:1;11854:19;;:5;:19;;;;11838:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;11962:12;:19;11975:5;11962:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;11954:41;;11947:48;;11761:240;;;:::o;15464:1152::-;15569:20;15592:12;;15569:35;;15633:1;15619:16;;:2;:16;;;;15611:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;15690:21;15698:12;15690:7;:21::i;:::-;15689:22;15681:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15772:12;15760:8;:24;;15752:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15832:61;15862:1;15866:2;15870:12;15884:8;15832:21;:61::i;:::-;15902:30;15935:12;:16;15948:2;15935:16;;;;;;;;;;;;;;;15902:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15977:119;;;;;;;;16027:8;15997:11;:19;;;:39;;;;:::i;:::-;15977:119;;;;;;16080:8;16045:11;:24;;;:44;;;;:::i;:::-;15977:119;;;;;15958:12;:16;15971:2;15958:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16131:43;;;;;;;;16146:2;16131:43;;;;;;16157:15;16131:43;;;;;16103:11;:25;16115:12;16103:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16183:20;16206:12;16183:35;;16232:9;16227:281;16251:8;16247:1;:12;16227:281;;;16305:12;16301:2;16280:38;;16297:1;16280:38;;;;;;;;;;;;16345:59;16376:1;16380:2;16384:12;16398:5;16345:22;:59::i;:::-;16327:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;16486:14;;;;;:::i;:::-;;;;16261:3;;;;;:::i;:::-;;;;16227:281;;;;16531:12;16516;:27;;;;16550:60;16579:1;16583:2;16587:12;16601:8;16550:20;:60::i;:::-;15562:1054;;;15464:1152;;;:::o;19559:141::-;;;;;:::o;19705:140::-;;;;;:::o;3171:197::-;3231:4;3249:12;3316:7;3304:20;3296:28;;3359:1;3352:4;:8;3345:15;;;3171:197;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:327::-;6834:6;6883:2;6871:9;6862:7;6858:23;6854:32;6851:119;;;6889:79;;:::i;:::-;6851:119;7009:1;7034:52;7078:7;7069:6;7058:9;7054:22;7034:52;:::i;:::-;7024:62;;6980:116;6776:327;;;;:::o;7109:349::-;7178:6;7227:2;7215:9;7206:7;7202:23;7198:32;7195:119;;;7233:79;;:::i;:::-;7195:119;7353:1;7378:63;7433:7;7424:6;7413:9;7409:22;7378:63;:::i;:::-;7368:73;;7324:127;7109:349;;;;:::o;7464:509::-;7533:6;7582:2;7570:9;7561:7;7557:23;7553:32;7550:119;;;7588:79;;:::i;:::-;7550:119;7736:1;7725:9;7721:17;7708:31;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:63;7948:7;7939:6;7928:9;7924:22;7893:63;:::i;:::-;7883:73;;7679:287;7464:509;;;;:::o;7979:329::-;8038:6;8087:2;8075:9;8066:7;8062:23;8058:32;8055:119;;;8093:79;;:::i;:::-;8055:119;8213:1;8238:53;8283:7;8274:6;8263:9;8259:22;8238:53;:::i;:::-;8228:63;;8184:117;7979:329;;;;:::o;8314:108::-;8391:24;8409:5;8391:24;:::i;:::-;8386:3;8379:37;8314:108;;:::o;8428:118::-;8515:24;8533:5;8515:24;:::i;:::-;8510:3;8503:37;8428:118;;:::o;8552:109::-;8633:21;8648:5;8633:21;:::i;:::-;8628:3;8621:34;8552:109;;:::o;8667:360::-;8753:3;8781:38;8813:5;8781:38;:::i;:::-;8835:70;8898:6;8893:3;8835:70;:::i;:::-;8828:77;;8914:52;8959:6;8954:3;8947:4;8940:5;8936:16;8914:52;:::i;:::-;8991:29;9013:6;8991:29;:::i;:::-;8986:3;8982:39;8975:46;;8757:270;8667:360;;;;:::o;9033:364::-;9121:3;9149:39;9182:5;9149:39;:::i;:::-;9204:71;9268:6;9263:3;9204:71;:::i;:::-;9197:78;;9284:52;9329:6;9324:3;9317:4;9310:5;9306:16;9284:52;:::i;:::-;9361:29;9383:6;9361:29;:::i;:::-;9356:3;9352:39;9345:46;;9125:272;9033:364;;;;:::o;9403:377::-;9509:3;9537:39;9570:5;9537:39;:::i;:::-;9592:89;9674:6;9669:3;9592:89;:::i;:::-;9585:96;;9690:52;9735:6;9730:3;9723:4;9716:5;9712:16;9690:52;:::i;:::-;9767:6;9762:3;9758:16;9751:23;;9513:267;9403:377;;;;:::o;9786:366::-;9928:3;9949:67;10013:2;10008:3;9949:67;:::i;:::-;9942:74;;10025:93;10114:3;10025:93;:::i;:::-;10143:2;10138:3;10134:12;10127:19;;9786:366;;;:::o;10158:::-;10300:3;10321:67;10385:2;10380:3;10321:67;:::i;:::-;10314:74;;10397:93;10486:3;10397:93;:::i;:::-;10515:2;10510:3;10506:12;10499:19;;10158:366;;;:::o;10530:::-;10672:3;10693:67;10757:2;10752:3;10693:67;:::i;:::-;10686:74;;10769:93;10858:3;10769:93;:::i;:::-;10887:2;10882:3;10878:12;10871:19;;10530:366;;;:::o;10902:::-;11044:3;11065:67;11129:2;11124:3;11065:67;:::i;:::-;11058:74;;11141:93;11230:3;11141:93;:::i;:::-;11259:2;11254:3;11250:12;11243:19;;10902:366;;;:::o;11274:::-;11416:3;11437:67;11501:2;11496:3;11437:67;:::i;:::-;11430:74;;11513:93;11602:3;11513:93;:::i;:::-;11631:2;11626:3;11622:12;11615:19;;11274:366;;;:::o;11646:::-;11788:3;11809:67;11873:2;11868:3;11809:67;:::i;:::-;11802:74;;11885:93;11974:3;11885:93;:::i;:::-;12003:2;11998:3;11994:12;11987:19;;11646:366;;;:::o;12018:::-;12160:3;12181:67;12245:2;12240:3;12181:67;:::i;:::-;12174:74;;12257:93;12346:3;12257:93;:::i;:::-;12375:2;12370:3;12366:12;12359:19;;12018:366;;;:::o;12390:::-;12532:3;12553:67;12617:2;12612:3;12553:67;:::i;:::-;12546:74;;12629:93;12718:3;12629:93;:::i;:::-;12747:2;12742:3;12738:12;12731:19;;12390:366;;;:::o;12762:::-;12904:3;12925:67;12989:2;12984:3;12925:67;:::i;:::-;12918:74;;13001:93;13090:3;13001:93;:::i;:::-;13119:2;13114:3;13110:12;13103:19;;12762:366;;;:::o;13134:::-;13276:3;13297:67;13361:2;13356:3;13297:67;:::i;:::-;13290:74;;13373:93;13462:3;13373:93;:::i;:::-;13491:2;13486:3;13482:12;13475:19;;13134:366;;;:::o;13506:::-;13648:3;13669:67;13733:2;13728:3;13669:67;:::i;:::-;13662:74;;13745:93;13834:3;13745:93;:::i;:::-;13863:2;13858:3;13854:12;13847:19;;13506:366;;;:::o;13878:::-;14020:3;14041:67;14105:2;14100:3;14041:67;:::i;:::-;14034:74;;14117:93;14206:3;14117:93;:::i;:::-;14235:2;14230:3;14226:12;14219:19;;13878:366;;;:::o;14250:::-;14392:3;14413:67;14477:2;14472:3;14413:67;:::i;:::-;14406:74;;14489:93;14578:3;14489:93;:::i;:::-;14607:2;14602:3;14598:12;14591:19;;14250:366;;;:::o;14622:::-;14764:3;14785:67;14849:2;14844:3;14785:67;:::i;:::-;14778:74;;14861:93;14950:3;14861:93;:::i;:::-;14979:2;14974:3;14970:12;14963:19;;14622:366;;;:::o;14994:::-;15136:3;15157:67;15221:2;15216:3;15157:67;:::i;:::-;15150:74;;15233:93;15322:3;15233:93;:::i;:::-;15351:2;15346:3;15342:12;15335:19;;14994:366;;;:::o;15366:::-;15508:3;15529:67;15593:2;15588:3;15529:67;:::i;:::-;15522:74;;15605:93;15694:3;15605:93;:::i;:::-;15723:2;15718:3;15714:12;15707:19;;15366:366;;;:::o;15738:::-;15880:3;15901:67;15965:2;15960:3;15901:67;:::i;:::-;15894:74;;15977:93;16066:3;15977:93;:::i;:::-;16095:2;16090:3;16086:12;16079:19;;15738:366;;;:::o;16110:::-;16252:3;16273:67;16337:2;16332:3;16273:67;:::i;:::-;16266:74;;16349:93;16438:3;16349:93;:::i;:::-;16467:2;16462:3;16458:12;16451:19;;16110:366;;;:::o;16482:400::-;16642:3;16663:84;16745:1;16740:3;16663:84;:::i;:::-;16656:91;;16756:93;16845:3;16756:93;:::i;:::-;16874:1;16869:3;16865:11;16858:18;;16482:400;;;:::o;16888:366::-;17030:3;17051:67;17115:2;17110:3;17051:67;:::i;:::-;17044:74;;17127:93;17216:3;17127:93;:::i;:::-;17245:2;17240:3;17236:12;17229:19;;16888:366;;;:::o;17260:::-;17402:3;17423:67;17487:2;17482:3;17423:67;:::i;:::-;17416:74;;17499:93;17588:3;17499:93;:::i;:::-;17617:2;17612:3;17608:12;17601:19;;17260:366;;;:::o;17632:::-;17774:3;17795:67;17859:2;17854:3;17795:67;:::i;:::-;17788:74;;17871:93;17960:3;17871:93;:::i;:::-;17989:2;17984:3;17980:12;17973:19;;17632:366;;;:::o;18004:::-;18146:3;18167:67;18231:2;18226:3;18167:67;:::i;:::-;18160:74;;18243:93;18332:3;18243:93;:::i;:::-;18361:2;18356:3;18352:12;18345:19;;18004:366;;;:::o;18376:::-;18518:3;18539:67;18603:2;18598:3;18539:67;:::i;:::-;18532:74;;18615:93;18704:3;18615:93;:::i;:::-;18733:2;18728:3;18724:12;18717:19;;18376:366;;;:::o;18748:::-;18890:3;18911:67;18975:2;18970:3;18911:67;:::i;:::-;18904:74;;18987:93;19076:3;18987:93;:::i;:::-;19105:2;19100:3;19096:12;19089:19;;18748:366;;;:::o;19120:::-;19262:3;19283:67;19347:2;19342:3;19283:67;:::i;:::-;19276:74;;19359:93;19448:3;19359:93;:::i;:::-;19477:2;19472:3;19468:12;19461:19;;19120:366;;;:::o;19492:398::-;19651:3;19672:83;19753:1;19748:3;19672:83;:::i;:::-;19665:90;;19764:93;19853:3;19764:93;:::i;:::-;19882:1;19877:3;19873:11;19866:18;;19492:398;;;:::o;19896:366::-;20038:3;20059:67;20123:2;20118:3;20059:67;:::i;:::-;20052:74;;20135:93;20224:3;20135:93;:::i;:::-;20253:2;20248:3;20244:12;20237:19;;19896:366;;;:::o;20268:::-;20410:3;20431:67;20495:2;20490:3;20431:67;:::i;:::-;20424:74;;20507:93;20596:3;20507:93;:::i;:::-;20625:2;20620:3;20616:12;20609:19;;20268:366;;;:::o;20640:::-;20782:3;20803:67;20867:2;20862:3;20803:67;:::i;:::-;20796:74;;20879:93;20968:3;20879:93;:::i;:::-;20997:2;20992:3;20988:12;20981:19;;20640:366;;;:::o;21012:::-;21154:3;21175:67;21239:2;21234:3;21175:67;:::i;:::-;21168:74;;21251:93;21340:3;21251:93;:::i;:::-;21369:2;21364:3;21360:12;21353:19;;21012:366;;;:::o;21384:::-;21526:3;21547:67;21611:2;21606:3;21547:67;:::i;:::-;21540:74;;21623:93;21712:3;21623:93;:::i;:::-;21741:2;21736:3;21732:12;21725:19;;21384:366;;;:::o;21756:::-;21898:3;21919:67;21983:2;21978:3;21919:67;:::i;:::-;21912:74;;21995:93;22084:3;21995:93;:::i;:::-;22113:2;22108:3;22104:12;22097:19;;21756:366;;;:::o;22128:::-;22270:3;22291:67;22355:2;22350:3;22291:67;:::i;:::-;22284:74;;22367:93;22456:3;22367:93;:::i;:::-;22485:2;22480:3;22476:12;22469:19;;22128:366;;;:::o;22500:::-;22642:3;22663:67;22727:2;22722:3;22663:67;:::i;:::-;22656:74;;22739:93;22828:3;22739:93;:::i;:::-;22857:2;22852:3;22848:12;22841:19;;22500:366;;;:::o;22872:::-;23014:3;23035:67;23099:2;23094:3;23035:67;:::i;:::-;23028:74;;23111:93;23200:3;23111:93;:::i;:::-;23229:2;23224:3;23220:12;23213:19;;22872:366;;;:::o;23244:::-;23386:3;23407:67;23471:2;23466:3;23407:67;:::i;:::-;23400:74;;23483:93;23572:3;23483:93;:::i;:::-;23601:2;23596:3;23592:12;23585:19;;23244:366;;;:::o;23686:527::-;23845:4;23840:3;23836:14;23932:4;23925:5;23921:16;23915:23;23951:63;24008:4;24003:3;23999:14;23985:12;23951:63;:::i;:::-;23860:164;24116:4;24109:5;24105:16;24099:23;24135:61;24190:4;24185:3;24181:14;24167:12;24135:61;:::i;:::-;24034:172;23814:399;23686:527;;:::o;24219:118::-;24306:24;24324:5;24306:24;:::i;:::-;24301:3;24294:37;24219:118;;:::o;24343:105::-;24418:23;24435:5;24418:23;:::i;:::-;24413:3;24406:36;24343:105;;:::o;24454:701::-;24735:3;24757:95;24848:3;24839:6;24757:95;:::i;:::-;24750:102;;24869:95;24960:3;24951:6;24869:95;:::i;:::-;24862:102;;24981:148;25125:3;24981:148;:::i;:::-;24974:155;;25146:3;25139:10;;24454:701;;;;;:::o;25161:379::-;25345:3;25367:147;25510:3;25367:147;:::i;:::-;25360:154;;25531:3;25524:10;;25161:379;;;:::o;25546:222::-;25639:4;25677:2;25666:9;25662:18;25654:26;;25690:71;25758:1;25747:9;25743:17;25734:6;25690:71;:::i;:::-;25546:222;;;;:::o;25774:640::-;25969:4;26007:3;25996:9;25992:19;25984:27;;26021:71;26089:1;26078:9;26074:17;26065:6;26021:71;:::i;:::-;26102:72;26170:2;26159:9;26155:18;26146:6;26102:72;:::i;:::-;26184;26252:2;26241:9;26237:18;26228:6;26184:72;:::i;:::-;26303:9;26297:4;26293:20;26288:2;26277:9;26273:18;26266:48;26331:76;26402:4;26393:6;26331:76;:::i;:::-;26323:84;;25774:640;;;;;;;:::o;26420:210::-;26507:4;26545:2;26534:9;26530:18;26522:26;;26558:65;26620:1;26609:9;26605:17;26596:6;26558:65;:::i;:::-;26420:210;;;;:::o;26636:313::-;26749:4;26787:2;26776:9;26772:18;26764:26;;26836:9;26830:4;26826:20;26822:1;26811:9;26807:17;26800:47;26864:78;26937:4;26928:6;26864:78;:::i;:::-;26856:86;;26636:313;;;;:::o;26955:419::-;27121:4;27159:2;27148:9;27144:18;27136:26;;27208:9;27202:4;27198:20;27194:1;27183:9;27179:17;27172:47;27236:131;27362:4;27236:131;:::i;:::-;27228:139;;26955:419;;;:::o;27380:::-;27546:4;27584:2;27573:9;27569:18;27561:26;;27633:9;27627:4;27623:20;27619:1;27608:9;27604:17;27597:47;27661:131;27787:4;27661:131;:::i;:::-;27653:139;;27380:419;;;:::o;27805:::-;27971:4;28009:2;27998:9;27994:18;27986:26;;28058:9;28052:4;28048:20;28044:1;28033:9;28029:17;28022:47;28086:131;28212:4;28086:131;:::i;:::-;28078:139;;27805:419;;;:::o;28230:::-;28396:4;28434:2;28423:9;28419:18;28411:26;;28483:9;28477:4;28473:20;28469:1;28458:9;28454:17;28447:47;28511:131;28637:4;28511:131;:::i;:::-;28503:139;;28230:419;;;:::o;28655:::-;28821:4;28859:2;28848:9;28844:18;28836:26;;28908:9;28902:4;28898:20;28894:1;28883:9;28879:17;28872:47;28936:131;29062:4;28936:131;:::i;:::-;28928:139;;28655:419;;;:::o;29080:::-;29246:4;29284:2;29273:9;29269:18;29261:26;;29333:9;29327:4;29323:20;29319:1;29308:9;29304:17;29297:47;29361:131;29487:4;29361:131;:::i;:::-;29353:139;;29080:419;;;:::o;29505:::-;29671:4;29709:2;29698:9;29694:18;29686:26;;29758:9;29752:4;29748:20;29744:1;29733:9;29729:17;29722:47;29786:131;29912:4;29786:131;:::i;:::-;29778:139;;29505:419;;;:::o;29930:::-;30096:4;30134:2;30123:9;30119:18;30111:26;;30183:9;30177:4;30173:20;30169:1;30158:9;30154:17;30147:47;30211:131;30337:4;30211:131;:::i;:::-;30203:139;;29930:419;;;:::o;30355:::-;30521:4;30559:2;30548:9;30544:18;30536:26;;30608:9;30602:4;30598:20;30594:1;30583:9;30579:17;30572:47;30636:131;30762:4;30636:131;:::i;:::-;30628:139;;30355:419;;;:::o;30780:::-;30946:4;30984:2;30973:9;30969:18;30961:26;;31033:9;31027:4;31023:20;31019:1;31008:9;31004:17;30997:47;31061:131;31187:4;31061:131;:::i;:::-;31053:139;;30780:419;;;:::o;31205:::-;31371:4;31409:2;31398:9;31394:18;31386:26;;31458:9;31452:4;31448:20;31444:1;31433:9;31429:17;31422:47;31486:131;31612:4;31486:131;:::i;:::-;31478:139;;31205:419;;;:::o;31630:::-;31796:4;31834:2;31823:9;31819:18;31811:26;;31883:9;31877:4;31873:20;31869:1;31858:9;31854:17;31847:47;31911:131;32037:4;31911:131;:::i;:::-;31903:139;;31630:419;;;:::o;32055:::-;32221:4;32259:2;32248:9;32244:18;32236:26;;32308:9;32302:4;32298:20;32294:1;32283:9;32279:17;32272:47;32336:131;32462:4;32336:131;:::i;:::-;32328:139;;32055:419;;;:::o;32480:::-;32646:4;32684:2;32673:9;32669:18;32661:26;;32733:9;32727:4;32723:20;32719:1;32708:9;32704:17;32697:47;32761:131;32887:4;32761:131;:::i;:::-;32753:139;;32480:419;;;:::o;32905:::-;33071:4;33109:2;33098:9;33094:18;33086:26;;33158:9;33152:4;33148:20;33144:1;33133:9;33129:17;33122:47;33186:131;33312:4;33186:131;:::i;:::-;33178:139;;32905:419;;;:::o;33330:::-;33496:4;33534:2;33523:9;33519:18;33511:26;;33583:9;33577:4;33573:20;33569:1;33558:9;33554:17;33547:47;33611:131;33737:4;33611:131;:::i;:::-;33603:139;;33330:419;;;:::o;33755:::-;33921:4;33959:2;33948:9;33944:18;33936:26;;34008:9;34002:4;33998:20;33994:1;33983:9;33979:17;33972:47;34036:131;34162:4;34036:131;:::i;:::-;34028:139;;33755:419;;;:::o;34180:::-;34346:4;34384:2;34373:9;34369:18;34361:26;;34433:9;34427:4;34423:20;34419:1;34408:9;34404:17;34397:47;34461:131;34587:4;34461:131;:::i;:::-;34453:139;;34180:419;;;:::o;34605:::-;34771:4;34809:2;34798:9;34794:18;34786:26;;34858:9;34852:4;34848:20;34844:1;34833:9;34829:17;34822:47;34886:131;35012:4;34886:131;:::i;:::-;34878:139;;34605:419;;;:::o;35030:::-;35196:4;35234:2;35223:9;35219:18;35211:26;;35283:9;35277:4;35273:20;35269:1;35258:9;35254:17;35247:47;35311:131;35437:4;35311:131;:::i;:::-;35303:139;;35030:419;;;:::o;35455:::-;35621:4;35659:2;35648:9;35644:18;35636:26;;35708:9;35702:4;35698:20;35694:1;35683:9;35679:17;35672:47;35736:131;35862:4;35736:131;:::i;:::-;35728:139;;35455:419;;;:::o;35880:::-;36046:4;36084:2;36073:9;36069:18;36061:26;;36133:9;36127:4;36123:20;36119:1;36108:9;36104:17;36097:47;36161:131;36287:4;36161:131;:::i;:::-;36153:139;;35880:419;;;:::o;36305:::-;36471:4;36509:2;36498:9;36494:18;36486:26;;36558:9;36552:4;36548:20;36544:1;36533:9;36529:17;36522:47;36586:131;36712:4;36586:131;:::i;:::-;36578:139;;36305:419;;;:::o;36730:::-;36896:4;36934:2;36923:9;36919:18;36911:26;;36983:9;36977:4;36973:20;36969:1;36958:9;36954:17;36947:47;37011:131;37137:4;37011:131;:::i;:::-;37003:139;;36730:419;;;:::o;37155:::-;37321:4;37359:2;37348:9;37344:18;37336:26;;37408:9;37402:4;37398:20;37394:1;37383:9;37379:17;37372:47;37436:131;37562:4;37436:131;:::i;:::-;37428:139;;37155:419;;;:::o;37580:::-;37746:4;37784:2;37773:9;37769:18;37761:26;;37833:9;37827:4;37823:20;37819:1;37808:9;37804:17;37797:47;37861:131;37987:4;37861:131;:::i;:::-;37853:139;;37580:419;;;:::o;38005:::-;38171:4;38209:2;38198:9;38194:18;38186:26;;38258:9;38252:4;38248:20;38244:1;38233:9;38229:17;38222:47;38286:131;38412:4;38286:131;:::i;:::-;38278:139;;38005:419;;;:::o;38430:::-;38596:4;38634:2;38623:9;38619:18;38611:26;;38683:9;38677:4;38673:20;38669:1;38658:9;38654:17;38647:47;38711:131;38837:4;38711:131;:::i;:::-;38703:139;;38430:419;;;:::o;38855:::-;39021:4;39059:2;39048:9;39044:18;39036:26;;39108:9;39102:4;39098:20;39094:1;39083:9;39079:17;39072:47;39136:131;39262:4;39136:131;:::i;:::-;39128:139;;38855:419;;;:::o;39280:::-;39446:4;39484:2;39473:9;39469:18;39461:26;;39533:9;39527:4;39523:20;39519:1;39508:9;39504:17;39497:47;39561:131;39687:4;39561:131;:::i;:::-;39553:139;;39280:419;;;:::o;39705:::-;39871:4;39909:2;39898:9;39894:18;39886:26;;39958:9;39952:4;39948:20;39944:1;39933:9;39929:17;39922:47;39986:131;40112:4;39986:131;:::i;:::-;39978:139;;39705:419;;;:::o;40130:::-;40296:4;40334:2;40323:9;40319:18;40311:26;;40383:9;40377:4;40373:20;40369:1;40358:9;40354:17;40347:47;40411:131;40537:4;40411:131;:::i;:::-;40403:139;;40130:419;;;:::o;40555:::-;40721:4;40759:2;40748:9;40744:18;40736:26;;40808:9;40802:4;40798:20;40794:1;40783:9;40779:17;40772:47;40836:131;40962:4;40836:131;:::i;:::-;40828:139;;40555:419;;;:::o;40980:::-;41146:4;41184:2;41173:9;41169:18;41161:26;;41233:9;41227:4;41223:20;41219:1;41208:9;41204:17;41197:47;41261:131;41387:4;41261:131;:::i;:::-;41253:139;;40980:419;;;:::o;41405:::-;41571:4;41609:2;41598:9;41594:18;41586:26;;41658:9;41652:4;41648:20;41644:1;41633:9;41629:17;41622:47;41686:131;41812:4;41686:131;:::i;:::-;41678:139;;41405:419;;;:::o;41830:346::-;41985:4;42023:2;42012:9;42008:18;42000:26;;42036:133;42166:1;42155:9;42151:17;42142:6;42036:133;:::i;:::-;41830:346;;;;:::o;42182:222::-;42275:4;42313:2;42302:9;42298:18;42290:26;;42326:71;42394:1;42383:9;42379:17;42370:6;42326:71;:::i;:::-;42182:222;;;;:::o;42410:129::-;42444:6;42471:20;;:::i;:::-;42461:30;;42500:33;42528:4;42520:6;42500:33;:::i;:::-;42410:129;;;:::o;42545:75::-;42578:6;42611:2;42605:9;42595:19;;42545:75;:::o;42626:307::-;42687:4;42777:18;42769:6;42766:30;42763:56;;;42799:18;;:::i;:::-;42763:56;42837:29;42859:6;42837:29;:::i;:::-;42829:37;;42921:4;42915;42911:15;42903:23;;42626:307;;;:::o;42939:308::-;43001:4;43091:18;43083:6;43080:30;43077:56;;;43113:18;;:::i;:::-;43077:56;43151:29;43173:6;43151:29;:::i;:::-;43143:37;;43235:4;43229;43225:15;43217:23;;42939:308;;;:::o;43253:98::-;43304:6;43338:5;43332:12;43322:22;;43253:98;;;:::o;43357:99::-;43409:6;43443:5;43437:12;43427:22;;43357:99;;;:::o;43462:168::-;43545:11;43579:6;43574:3;43567:19;43619:4;43614:3;43610:14;43595:29;;43462:168;;;;:::o;43636:147::-;43737:11;43774:3;43759:18;;43636:147;;;;:::o;43789:169::-;43873:11;43907:6;43902:3;43895:19;43947:4;43942:3;43938:14;43923:29;;43789:169;;;;:::o;43964:148::-;44066:11;44103:3;44088:18;;43964:148;;;;:::o;44118:273::-;44158:3;44177:20;44195:1;44177:20;:::i;:::-;44172:25;;44211:20;44229:1;44211:20;:::i;:::-;44206:25;;44333:1;44297:34;44293:42;44290:1;44287:49;44284:75;;;44339:18;;:::i;:::-;44284:75;44383:1;44380;44376:9;44369:16;;44118:273;;;;:::o;44397:305::-;44437:3;44456:20;44474:1;44456:20;:::i;:::-;44451:25;;44490:20;44508:1;44490:20;:::i;:::-;44485:25;;44644:1;44576:66;44572:74;44569:1;44566:81;44563:107;;;44650:18;;:::i;:::-;44563:107;44694:1;44691;44687:9;44680:16;;44397:305;;;;:::o;44708:185::-;44748:1;44765:20;44783:1;44765:20;:::i;:::-;44760:25;;44799:20;44817:1;44799:20;:::i;:::-;44794:25;;44838:1;44828:35;;44843:18;;:::i;:::-;44828:35;44885:1;44882;44878:9;44873:14;;44708:185;;;;:::o;44899:348::-;44939:7;44962:20;44980:1;44962:20;:::i;:::-;44957:25;;44996:20;45014:1;44996:20;:::i;:::-;44991:25;;45184:1;45116:66;45112:74;45109:1;45106:81;45101:1;45094:9;45087:17;45083:105;45080:131;;;45191:18;;:::i;:::-;45080:131;45239:1;45236;45232:9;45221:20;;44899:348;;;;:::o;45253:191::-;45293:4;45313:20;45331:1;45313:20;:::i;:::-;45308:25;;45347:20;45365:1;45347:20;:::i;:::-;45342:25;;45386:1;45383;45380:8;45377:34;;;45391:18;;:::i;:::-;45377:34;45436:1;45433;45429:9;45421:17;;45253:191;;;;:::o;45450:::-;45490:4;45510:20;45528:1;45510:20;:::i;:::-;45505:25;;45544:20;45562:1;45544:20;:::i;:::-;45539:25;;45583:1;45580;45577:8;45574:34;;;45588:18;;:::i;:::-;45574:34;45633:1;45630;45626:9;45618:17;;45450:191;;;;:::o;45647:96::-;45684:7;45713:24;45731:5;45713:24;:::i;:::-;45702:35;;45647:96;;;:::o;45749:90::-;45783:7;45826:5;45819:13;45812:21;45801:32;;45749:90;;;:::o;45845:149::-;45881:7;45921:66;45914:5;45910:78;45899:89;;45845:149;;;:::o;46000:118::-;46037:7;46077:34;46070:5;46066:46;46055:57;;46000:118;;;:::o;46124:126::-;46161:7;46201:42;46194:5;46190:54;46179:65;;46124:126;;;:::o;46256:77::-;46293:7;46322:5;46311:16;;46256:77;;;:::o;46339:101::-;46375:7;46415:18;46408:5;46404:30;46393:41;;46339:101;;;:::o;46446:154::-;46530:6;46525:3;46520;46507:30;46592:1;46583:6;46578:3;46574:16;46567:27;46446:154;;;:::o;46606:307::-;46674:1;46684:113;46698:6;46695:1;46692:13;46684:113;;;46783:1;46778:3;46774:11;46768:18;46764:1;46759:3;46755:11;46748:39;46720:2;46717:1;46713:10;46708:15;;46684:113;;;46815:6;46812:1;46809:13;46806:101;;;46895:1;46886:6;46881:3;46877:16;46870:27;46806:101;46655:258;46606:307;;;:::o;46919:171::-;46958:3;46981:24;46999:5;46981:24;:::i;:::-;46972:33;;47027:4;47020:5;47017:15;47014:41;;;47035:18;;:::i;:::-;47014:41;47082:1;47075:5;47071:13;47064:20;;46919:171;;;:::o;47096:320::-;47140:6;47177:1;47171:4;47167:12;47157:22;;47224:1;47218:4;47214:12;47245:18;47235:81;;47301:4;47293:6;47289:17;47279:27;;47235:81;47363:2;47355:6;47352:14;47332:18;47329:38;47326:84;;;47382:18;;:::i;:::-;47326:84;47147:269;47096:320;;;:::o;47422:281::-;47505:27;47527:4;47505:27;:::i;:::-;47497:6;47493:40;47635:6;47623:10;47620:22;47599:18;47587:10;47584:34;47581:62;47578:88;;;47646:18;;:::i;:::-;47578:88;47686:10;47682:2;47675:22;47465:238;47422:281;;:::o;47709:233::-;47748:3;47771:24;47789:5;47771:24;:::i;:::-;47762:33;;47817:66;47810:5;47807:77;47804:103;;;47887:18;;:::i;:::-;47804:103;47934:1;47927:5;47923:13;47916:20;;47709:233;;;:::o;47948:176::-;47980:1;47997:20;48015:1;47997:20;:::i;:::-;47992:25;;48031:20;48049:1;48031:20;:::i;:::-;48026:25;;48070:1;48060:35;;48075:18;;:::i;:::-;48060:35;48116:1;48113;48109:9;48104:14;;47948:176;;;;:::o;48130:180::-;48178:77;48175:1;48168:88;48275:4;48272:1;48265:15;48299:4;48296:1;48289:15;48316:180;48364:77;48361:1;48354:88;48461:4;48458:1;48451:15;48485:4;48482:1;48475:15;48502:180;48550:77;48547:1;48540:88;48647:4;48644:1;48637:15;48671:4;48668:1;48661:15;48688:180;48736:77;48733:1;48726:88;48833:4;48830:1;48823:15;48857:4;48854:1;48847:15;48874:180;48922:77;48919:1;48912:88;49019:4;49016:1;49009:15;49043:4;49040:1;49033:15;49060:117;49169:1;49166;49159:12;49183:117;49292:1;49289;49282:12;49306:117;49415:1;49412;49405:12;49429:117;49538:1;49535;49528:12;49552:117;49661:1;49658;49651:12;49675:117;49784:1;49781;49774:12;49798:102;49839:6;49890:2;49886:7;49881:2;49874:5;49870:14;49866:28;49856:38;;49798:102;;;:::o;49906:221::-;50046:34;50042:1;50034:6;50030:14;50023:58;50115:4;50110:2;50102:6;50098:15;50091:29;49906:221;:::o;50133:220::-;50273:34;50269:1;50261:6;50257:14;50250:58;50342:3;50337:2;50329:6;50325:15;50318:28;50133:220;:::o;50359:164::-;50499:16;50495:1;50487:6;50483:14;50476:40;50359:164;:::o;50529:170::-;50669:22;50665:1;50657:6;50653:14;50646:46;50529:170;:::o;50705:164::-;50845:16;50841:1;50833:6;50829:14;50822:40;50705:164;:::o;50875:225::-;51015:34;51011:1;51003:6;50999:14;50992:58;51084:8;51079:2;51071:6;51067:15;51060:33;50875:225;:::o;51106:229::-;51246:34;51242:1;51234:6;51230:14;51223:58;51315:12;51310:2;51302:6;51298:15;51291:37;51106:229;:::o;51341:222::-;51481:34;51477:1;51469:6;51465:14;51458:58;51550:5;51545:2;51537:6;51533:15;51526:30;51341:222;:::o;51569:::-;51709:34;51705:1;51697:6;51693:14;51686:58;51778:5;51773:2;51765:6;51761:15;51754:30;51569:222;:::o;51797:168::-;51937:20;51933:1;51925:6;51921:14;51914:44;51797:168;:::o;51971:224::-;52111:34;52107:1;52099:6;52095:14;52088:58;52180:7;52175:2;52167:6;52163:15;52156:32;51971:224;:::o;52201:175::-;52341:27;52337:1;52329:6;52325:14;52318:51;52201:175;:::o;52382:236::-;52522:34;52518:1;52510:6;52506:14;52499:58;52591:19;52586:2;52578:6;52574:15;52567:44;52382:236;:::o;52624:180::-;52764:32;52760:1;52752:6;52748:14;52741:56;52624:180;:::o;52810:244::-;52950:34;52946:1;52938:6;52934:14;52927:58;53019:27;53014:2;53006:6;53002:15;52995:52;52810:244;:::o;53060:230::-;53200:34;53196:1;53188:6;53184:14;53177:58;53269:13;53264:2;53256:6;53252:15;53245:38;53060:230;:::o;53296:179::-;53436:31;53432:1;53424:6;53420:14;53413:55;53296:179;:::o;53481:225::-;53621:34;53617:1;53609:6;53605:14;53598:58;53690:8;53685:2;53677:6;53673:15;53666:33;53481:225;:::o;53712:155::-;53852:7;53848:1;53840:6;53836:14;53829:31;53712:155;:::o;53873:175::-;54013:27;54009:1;54001:6;53997:14;53990:51;53873:175;:::o;54054:182::-;54194:34;54190:1;54182:6;54178:14;54171:58;54054:182;:::o;54242:220::-;54382:34;54378:1;54370:6;54366:14;54359:58;54451:3;54446:2;54438:6;54434:15;54427:28;54242:220;:::o;54468:234::-;54608:34;54604:1;54596:6;54592:14;54585:58;54677:17;54672:2;54664:6;54660:15;54653:42;54468:234;:::o;54708:176::-;54848:28;54844:1;54836:6;54832:14;54825:52;54708:176;:::o;54890:237::-;55030:34;55026:1;55018:6;55014:14;55007:58;55099:20;55094:2;55086:6;55082:15;55075:45;54890:237;:::o;55133:221::-;55273:34;55269:1;55261:6;55257:14;55250:58;55342:4;55337:2;55329:6;55325:15;55318:29;55133:221;:::o;55360:114::-;;:::o;55480:166::-;55620:18;55616:1;55608:6;55604:14;55597:42;55480:166;:::o;55652:238::-;55792:34;55788:1;55780:6;55776:14;55769:58;55861:21;55856:2;55848:6;55844:15;55837:46;55652:238;:::o;55896:179::-;56036:31;56032:1;56024:6;56020:14;56013:55;55896:179;:::o;56081:220::-;56221:34;56217:1;56209:6;56205:14;56198:58;56290:3;56285:2;56277:6;56273:15;56266:28;56081:220;:::o;56307:180::-;56447:32;56443:1;56435:6;56431:14;56424:56;56307:180;:::o;56493:233::-;56633:34;56629:1;56621:6;56617:14;56610:58;56702:16;56697:2;56689:6;56685:15;56678:41;56493:233;:::o;56732:181::-;56872:33;56868:1;56860:6;56856:14;56849:57;56732:181;:::o;56919:234::-;57059:34;57055:1;57047:6;57043:14;57036:58;57128:17;57123:2;57115:6;57111:15;57104:42;56919:234;:::o;57159:232::-;57299:34;57295:1;57287:6;57283:14;57276:58;57368:15;57363:2;57355:6;57351:15;57344:40;57159:232;:::o;57397:221::-;57537:34;57533:1;57525:6;57521:14;57514:58;57606:4;57601:2;57593:6;57589:15;57582:29;57397:221;:::o;57624:122::-;57697:24;57715:5;57697:24;:::i;:::-;57690:5;57687:35;57677:63;;57736:1;57733;57726:12;57677:63;57624:122;:::o;57752:116::-;57822:21;57837:5;57822:21;:::i;:::-;57815:5;57812:32;57802:60;;57858:1;57855;57848:12;57802:60;57752:116;:::o;57874:120::-;57946:23;57963:5;57946:23;:::i;:::-;57939:5;57936:34;57926:62;;57984:1;57981;57974:12;57926:62;57874:120;:::o;58000:122::-;58073:24;58091:5;58073:24;:::i;:::-;58066:5;58063:35;58053:63;;58112:1;58109;58102:12;58053:63;58000:122;:::o

Swarm Source

ipfs://dea07498ebefeaa14faddda22d76a712d694acf37ec36dc04c9479a3ccdb4ae1
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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