Feature Tip: Add private address tag to any address under My Name Tag !
Overview
Max Total Supply
0 WHEA
Holders
0
Transfers
-
0
Market
Onchain Market Cap
-
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 4 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
| # | Exchange | Pair | Price | 24H Volume | % Volume |
|---|
Contract Name:
AgroToken
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2021-11-09
*/
/*
SPDX-License-Identifier: UNLICENSED
(c) Developed by AgroToken
This work is unlicensed.
*/
pragma solidity 0.8.10;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
/**
* @title AgroToken is token that refers to real grains
* AgroToken is a token admnistrated by AgroToken company
* (represented by admin Ethereum address variable in this Smart Contract).
* AgroToken performs all administrative
* functions based on grain documentations and certifications in partnership
* with agro traders (called Grain Oracles) and in complaince with local authorities.
* */
contract AgroToken is IERC20 {
//
// events
//
// mint/burn events
event Mint(address indexed _to, uint256 _amount, uint256 _newTotalSupply);
event Burn(address indexed _from, uint256 _amount, uint256 _newTotalSupply);
// admin events
event BlockLockSet(uint256 _value);
event NewAdmin(address _newAdmin);
event NewManager(address _newManager);
event GrainStockChanged(
uint256 indexed contractId,
string grainCategory,
string grainContractInfo,
uint256 amount,
uint8 status,
uint256 newTotalSupplyAmount
);
modifier onlyAdmin {
require(msg.sender == admin, "Only admin can perform this operation");
_;
}
modifier boardOrAdmin {
require(
msg.sender == board || msg.sender == admin,
"Only admin or board can perform this operation"
);
_;
}
modifier blockLock(address _sender) {
require(
!isLocked() || _sender == admin,
"Contract is locked except for the admin"
);
_;
}
struct Grain {
string category;
string contractInfo;
uint256 amount;
uint8 status;
}
uint256 override public totalSupply;
string public name;
uint8 public decimals;
string public symbol;
address public admin;
address public board;
uint256 public lockedUntilBlock;
uint256 public tokenizationFee;
uint256 public deTokenizationFee;
uint256 public transferFee;
mapping(address => uint256) public balances;
mapping(address => mapping(address => uint256)) public allowed;
Grain[] public grains;
/**
* @dev Constructor
*/
constructor() {
name = "AgroToken Wheat Argentina";
decimals = 4;
symbol = "WHEA";
lockedUntilBlock = 0;
admin = msg.sender;
board = 0xA01cD92f06f60b9fdcCCdF6280CE9A10803bA720;
totalSupply = 0;
balances[address(this)] = totalSupply;
}
/**
* @dev Add new grain contract to portfolio
* @param _grainCategory - Grain category
* @param _grainContractInfo - Grain Contract's details
* @param _grainAmount - amount of grain in tons
* @return success
*/
function addNewGrainContract(
string memory _grainCategory,
string memory _grainContractInfo,
uint256 _grainAmount
) public onlyAdmin returns (bool success) {
Grain memory newGrain = Grain(
_grainCategory,
_grainContractInfo,
_grainAmount,
1
);
grains.push(newGrain);
_mint(address(this), _grainAmount);
emit GrainStockChanged(
grains.length-1,
_grainCategory,
_grainContractInfo,
_grainAmount,
1,
totalSupply
);
success = true;
return success;
}
/**
* @dev Remove a contract from Portfolio
* @param _contractIndex - Contract Index within Portfolio
* @return True if success
*/
function removeGrainContract(uint256 _contractIndex) public onlyAdmin returns (bool) {
require(
_contractIndex < grains.length,
"Invalid contract index number. Greater than total grain contracts"
);
Grain storage grain = grains[_contractIndex];
require(grain.status == 1, "This contract is no longer active");
require(_burn(address(this), grain.amount), "Could not to burn tokens");
grain.status = 0;
emit GrainStockChanged(
_contractIndex,
grain.category,
grain.contractInfo,
grain.amount,
grain.status,
totalSupply
);
return true;
}
/**
* @dev Updates a Contract
* @param _contractIndex - Contract Index within Portfolio
* @param _grainCategory - Grain category
* @param _grainContractInfo - Grain Contract's details
* @param _grainAmount - amount of grain in tons
* @return True if success
*/
function updateGrainContract(
uint256 _contractIndex,
string memory _grainCategory,
string memory _grainContractInfo,
uint256 _grainAmount
) public onlyAdmin returns (bool) {
require(
_contractIndex < grains.length,
"Invalid contract index number. Greater than total grain contracts"
);
require(_grainAmount > 0, "Cannot set zero asset amount");
Grain storage grain = grains[_contractIndex];
require(grain.status == 1, "This contract is no longer active");
grain.category = _grainCategory;
grain.contractInfo = _grainContractInfo;
if (grain.amount > _grainAmount) {
_burn(address(this), grain.amount - _grainAmount);
} else if (grain.amount < _grainAmount) {
_mint(address(this), _grainAmount - grain.amount);
}
grain.amount = _grainAmount;
emit GrainStockChanged(
_contractIndex,
grain.category,
grain.contractInfo,
grain.amount,
grain.status,
totalSupply
);
return true;
}
/**
* @return Number of Grain Contracts in Portfolio
*/
function totalContracts() public view returns (uint256) {
return grains.length;
}
/**
* @dev ERC20 Transfer
* @param _to - destination address
* @param _value - value to transfer
* @return True if success
*/
function transfer(address _to, uint256 _value)
override
external
blockLock(msg.sender)
returns (bool)
{
address from = (admin == msg.sender) ? address(this) : msg.sender;
require(
isTransferValid(from, _to, _value),
"Invalid Transfer Operation"
);
balances[from] = balances[from] - _value;
uint256 serviceAmount = 0;
uint256 netAmount = _value;
(serviceAmount, netAmount) = calcFees(transferFee, _value);
balances[_to] = balances[_to] + netAmount;
balances[address(this)] = balances[address(this)] + serviceAmount;
emit Transfer(from, _to, netAmount);
emit Transfer(from, address(this), serviceAmount);
return true;
}
/**
* @dev ERC20 TransferFrom
* @param _from - source address
* @param _to - destination address
* @param _value - value
* @return True if success
*/
function transferFrom(address _from, address _to, uint256 _value)
override
external
blockLock(_from)
returns (bool)
{
// check sufficient allowance
require(
_value <= allowed[_from][msg.sender],
"Value informed is invalid"
);
require(
isTransferValid(_from, _to, _value),
"Invalid Transfer Operation"
);
// transfer tokens
balances[_from] = balances[_from] - _value;
uint256 serviceAmount = 0;
uint256 netAmount = _value;
(serviceAmount, netAmount) = calcFees(transferFee, _value);
balances[_to] = balances[_to] + netAmount;
balances[address(this)] = balances[address(this)] + serviceAmount;
allowed[_from][msg.sender] = allowed[_from][msg.sender] - _value;
emit Transfer(_from, _to, netAmount);
emit Transfer(_from, address(this), serviceAmount);
return true;
}
/**
* @dev ERC20 Approve token transfers on behalf of other token owner
* @param _spender - destination address
* @param _value - value to be approved
* @return True if success
*/
function approve(address _spender, uint256 _value)
override
external
blockLock(msg.sender)
returns (bool)
{
require(_spender != address(0), "ERC20: approve to the zero address");
address from = (admin == msg.sender) ? address(this) : msg.sender;
require((_value == 0) || (allowed[from][_spender] == 0), "Allowance cannot be increased or decreased if value is different from zero");
allowed[from][_spender] = _value;
emit Approval(from, _spender, _value);
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address _spender, uint256 _subtractedValue) public virtual returns (bool) {
require(_spender != address(0), "ERC20: decreaseAllowance to the zero address");
address from = (admin == msg.sender) ? address(this) : msg.sender;
require(allowed[from][_spender] >= _subtractedValue, "ERC20: decreased allowance below zero");
_approve(from, _spender, allowed[from][_spender] - _subtractedValue);
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address _spender, uint256 _addedValue) public virtual returns (bool) {
require(_spender != address(0), "ERC20: decreaseAllowance to the zero address");
address from = (admin == msg.sender) ? address(this) : msg.sender;
_approve(from, _spender, allowed[from][_spender] + _addedValue);
return true;
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(address _owner, address _spender, uint256 _amount) internal virtual {
require(_owner != address(0), "ERC20: approve from the zero address");
require(_spender != address(0), "ERC20: approve to the zero address");
allowed[_owner][_spender] = _amount;
emit Approval(_owner, _spender, _amount);
}
/**
* @dev withdraw tokens collected after receive fees
* @param _to - destination address
* @param _value - value to transfer
* @return True if success
*/
function withdraw(address _to, uint256 _value)
external
boardOrAdmin
returns (bool)
{
address from = address(this);
require(
isTransferValid(from, _to, _value),
"Invalid Transfer Operation"
);
balances[from] = balances[from] - _value;
balances[_to] = balances[_to] + _value;
emit Transfer(from, _to, _value);
return true;
}
/**
* @dev Mint new tokens. Can only be called by mana
* @param _to - destination address
* @param _value - value
* @return True if success
*/
function _mint(address _to, uint256 _value)
internal
onlyAdmin
returns (bool)
{
require(_to != address(0), "ERC20: mint to the zero address");
require(_to != admin, "Admin cannot mint tokens to herself");
uint256 serviceAmount;
uint256 netAmount;
(serviceAmount, netAmount) = calcFees(tokenizationFee, _value);
balances[_to] = balances[_to] + netAmount;
balances[address(this)] = balances[address(this)] + serviceAmount;
totalSupply = totalSupply + _value;
emit Mint(_to, netAmount, totalSupply);
emit Mint(address(this), serviceAmount, totalSupply);
emit Transfer(address(0), _to, netAmount);
emit Transfer(address(0), address(this), serviceAmount);
return true;
}
/**
* @dev Burn tokens
* @param _account - address
* @param _value - value
* @return True if success
*/
function _burn(address _account, uint256 _value)
internal
onlyAdmin
returns (bool)
{
require(_account != address(0), "ERC20: burn from the zero address");
uint256 serviceAmount;
uint256 netAmount;
(serviceAmount, netAmount) = calcFees(deTokenizationFee, _value);
totalSupply = totalSupply - netAmount;
balances[_account] = balances[_account] - _value;
balances[address(this)] = balances[address(this)] + serviceAmount;
emit Transfer(_account, address(0), netAmount);
emit Transfer(_account, address(this), serviceAmount);
emit Burn(_account, netAmount, totalSupply);
return true;
}
/**
* @dev Set block lock. Until that block (exclusive) transfers are disallowed
* @param _lockedUntilBlock - Block Number
* @return True if success
*/
function setBlockLock(uint256 _lockedUntilBlock)
public
boardOrAdmin
returns (bool)
{
lockedUntilBlock = _lockedUntilBlock;
emit BlockLockSet(_lockedUntilBlock);
return true;
}
/**
* @dev Replace current admin with new one
* @param _newAdmin New token admin
* @return True if success
*/
function replaceAdmin(address _newAdmin)
public
boardOrAdmin
returns (bool)
{
require(_newAdmin != address(0x0), "Null address");
admin = _newAdmin;
emit NewAdmin(_newAdmin);
return true;
}
/**
* @dev Change AgroToken fee values
* @param _feeType which fee is being changed. 1 = tokenizationFee, 2 = deTokenizationFee and 3 = transferFee
* @param _newAmount new fee value
* @return processing status
*/
function changeFee(uint8 _feeType, uint256 _newAmount) external boardOrAdmin returns (bool) {
require(_newAmount<=2, "Invalid or exceed white paper definition");
require(_feeType >0 && _feeType<=3, "Invalid fee type");
if (_feeType == 1) {
tokenizationFee = _newAmount;
} else if (_feeType == 2) {
deTokenizationFee = _newAmount;
} else if (_feeType == 3) {
transferFee = _newAmount;
}
return true;
}
/**
* @dev ERC20 balanceOf
* @param _owner Owner address
* @return True if success
*/
function balanceOf(address _owner) public override view returns (uint256) {
return balances[_owner];
}
/**
* @dev ERC20 allowance
* @param _owner Owner address
* @param _spender Address allowed to spend from Owner's balance
* @return uint256 allowance
*/
function allowance(address _owner, address _spender)
override
external
view
returns (uint256)
{
return allowed[_owner][_spender];
}
/**
* @dev Are transfers currently disallowed
* @return True if disallowed
*/
function isLocked() public view returns (bool) {
return lockedUntilBlock > block.number;
}
/**
* @dev Checks if transfer parameters are valid
* @param _from Source address
* @param _to Destination address
* @param _amount Amount to check
* @return True if valid
*/
function isTransferValid(address _from, address _to, uint256 _amount)
public
view
returns (bool)
{
if (_from == address(0)) {
return false;
}
if (_to == address(0) || _to == admin) {
return false;
}
bool fromOK = true;
bool toOK = true;
return
balances[_from] >= _amount && // sufficient balance
fromOK && // a seller holder within the whitelist
toOK; // a buyer holder within the whitelist
}
/**
* @dev Calculates AgroToken fees over mint, burn and transfer operations
* @param _fee value of the fee
* @param _amount amount involved in the transaction
* @return serviceAmount value to be paid to AgroToken
* @return netAmount amount after fees
*/
function calcFees(uint256 _fee, uint256 _amount) public pure returns(uint256 serviceAmount, uint256 netAmount ) {
serviceAmount = (_amount * _fee) / 100;
netAmount = _amount - serviceAmount;
return (serviceAmount, netAmount);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"BlockLockSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newTotalSupply","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"contractId","type":"uint256"},{"indexed":false,"internalType":"string","name":"grainCategory","type":"string"},{"indexed":false,"internalType":"string","name":"grainContractInfo","type":"string"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"status","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"newTotalSupplyAmount","type":"uint256"}],"name":"GrainStockChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newTotalSupply","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_newAdmin","type":"address"}],"name":"NewAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_newManager","type":"address"}],"name":"NewManager","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"string","name":"_grainCategory","type":"string"},{"internalType":"string","name":"_grainContractInfo","type":"string"},{"internalType":"uint256","name":"_grainAmount","type":"uint256"}],"name":"addNewGrainContract","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"address","name":"","type":"address"}],"name":"balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"board","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"calcFees","outputs":[{"internalType":"uint256","name":"serviceAmount","type":"uint256"},{"internalType":"uint256","name":"netAmount","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint8","name":"_feeType","type":"uint8"},{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"changeFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deTokenizationFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"grains","outputs":[{"internalType":"string","name":"category","type":"string"},{"internalType":"string","name":"contractInfo","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint8","name":"status","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"isTransferValid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockedUntilBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_contractIndex","type":"uint256"}],"name":"removeGrainContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAdmin","type":"address"}],"name":"replaceAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lockedUntilBlock","type":"uint256"}],"name":"setBlockLock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenizationFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalContracts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferFee","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":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_contractIndex","type":"uint256"},{"internalType":"string","name":"_grainCategory","type":"string"},{"internalType":"string","name":"_grainContractInfo","type":"string"},{"internalType":"uint256","name":"_grainAmount","type":"uint256"}],"name":"updateGrainContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b506040518060400160405280601981526020017f4167726f546f6b656e20576865617420417267656e74696e6100000000000000815250600190805190602001906200005f929190620001bb565b506004600260006101000a81548160ff021916908360ff1602179055506040518060400160405280600481526020017f574845410000000000000000000000000000000000000000000000000000000081525060039080519060200190620000c9929190620001bb565b50600060068190555033600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a01cd92f06f60b9fdcccdf6280ce9a10803ba720600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008081905550600054600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620002d0565b828054620001c9906200029a565b90600052602060002090601f016020900481019282620001ed576000855562000239565b82601f106200020857805160ff191683800117855562000239565b8280016001018555821562000239579182015b82811115620002385782518255916020019190600101906200021b565b5b5090506200024891906200024c565b5090565b5b80821115620002675760008160009055506001016200024d565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002b357607f821691505b60208210811415620002ca57620002c96200026b565b5b50919050565b614a2180620002e06000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c806378d067dd1161010f578063a9059cbb116100a2578063dd62ed3e11610071578063dd62ed3e1461064a578063ed91e0441461067a578063f3fef3a314610698578063f851a440146106c8576101e5565b8063a9059cbb146105ae578063acb2ad6f146105de578063c4f4face146105fc578063d8162db71461062c576101e5565b8063a09037a9116100de578063a09037a914610512578063a40eb4de14610530578063a457c2d714610560578063a4e2d63414610590576101e5565b806378d067dd146104755780637cd3229a146104a657806391a76a5b146104c457806395d89b41146104f4576101e5565b806327e235e311610187578063395093511161015657806339509351146103b557806340ecb7f2146103e55780635c6581651461041557806370a0823114610445576101e5565b806327e235e3146103045780632eef5ff814610334578063313ce56714610367578063366a68dc14610385576101e5565b80631230a98a116101c35780631230a98a1461025657806313a7e54e1461028657806318160ddd146102b657806323b872dd146102d4576101e5565b806306fdde03146101ea578063095ea7b3146102085780630f621c2514610238575b600080fd5b6101f26106e6565b6040516101ff9190613563565b60405180910390f35b610222600480360381019061021d919061362d565b610774565b60405161022f9190613688565b60405180910390f35b610240610aa4565b60405161024d91906136b2565b60405180910390f35b610270600480360381019061026b9190613802565b610aaa565b60405161027d9190613688565b60405180910390f35b6102a0600480360381019061029b91906138c6565b610c63565b6040516102ad9190613688565b60405180910390f35b6102be610e37565b6040516102cb91906136b2565b60405180910390f35b6102ee60048036038101906102e99190613906565b610e3d565b6040516102fb9190613688565b60405180910390f35b61031e60048036038101906103199190613959565b61138d565b60405161032b91906136b2565b60405180910390f35b61034e60048036038101906103499190613986565b6113a5565b60405161035e94939291906139c2565b60405180910390f35b61036f611502565b60405161037c9190613a15565b60405180910390f35b61039f600480360381019061039a9190613986565b611515565b6040516103ac9190613688565b60405180910390f35b6103cf60048036038101906103ca919061362d565b611646565b6040516103dc9190613688565b60405180910390f35b6103ff60048036038101906103fa9190613906565b6117b5565b60405161040c9190613688565b60405180910390f35b61042f600480360381019061042a9190613a30565b6118f7565b60405161043c91906136b2565b60405180910390f35b61045f600480360381019061045a9190613959565b61191c565b60405161046c91906136b2565b60405180910390f35b61048f600480360381019061048a9190613a70565b611965565b60405161049d929190613ab0565b60405180910390f35b6104ae611997565b6040516104bb9190613ae8565b60405180910390f35b6104de60048036038101906104d99190613986565b6119bd565b6040516104eb9190613688565b60405180910390f35b6104fc611be5565b6040516105099190613563565b60405180910390f35b61051a611c73565b60405161052791906136b2565b60405180910390f35b61054a60048036038101906105459190613b03565b611c80565b6040516105579190613688565b60405180910390f35b61057a6004803603810190610575919061362d565b611f11565b6040516105879190613688565b60405180910390f35b61059861213f565b6040516105a59190613688565b60405180910390f35b6105c860048036038101906105c3919061362d565b61214b565b6040516105d59190613688565b60405180910390f35b6105e6612535565b6040516105f391906136b2565b60405180910390f35b61061660048036038101906106119190613959565b61253b565b6040516106239190613688565b60405180910390f35b610634612716565b60405161064191906136b2565b60405180910390f35b610664600480360381019061065f9190613a30565b61271c565b60405161067191906136b2565b60405180910390f35b6106826127a3565b60405161068f91906136b2565b60405180910390f35b6106b260048036038101906106ad919061362d565b6127a9565b6040516106bf9190613688565b60405180910390f35b6106d0612a6e565b6040516106dd9190613ae8565b60405180910390f35b600180546106f390613bd1565b80601f016020809104026020016040519081016040528092919081815260200182805461071f90613bd1565b801561076c5780601f106107415761010080835404028352916020019161076c565b820191906000526020600020905b81548152906001019060200180831161074f57829003601f168201915b505050505081565b60003361077f61213f565b15806107d85750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080e90613c75565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087e90613d07565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108e457336108e6565b305b9050600084148061097357506000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b6109b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a990613dbf565b60405180910390fd5b83600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92586604051610a9091906136b2565b60405180910390a360019250505092915050565b60085481565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3390613e51565b60405180910390fd5b60006040518060800160405280868152602001858152602001848152602001600160ff168152509050600c8190806001815401808255809150506001900390600052602060002090600402016000909190919091506000820151816000019080519060200190610bad929190613427565b506020820151816001019080519060200190610bca929190613427565b506040820151816002015560608201518160030160006101000a81548160ff021916908360ff1602179055505050610c023084612a94565b506001600c80549050610c159190613ea0565b7fb6ef0f3c9f270f5d9dc362588d6bdca7b4a93459de07af4ca0f475b64aef0f268686866001600054604051610c4f959493929190613f19565b60405180910390a260019150509392505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d0e5750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4490613fec565b60405180910390fd5b6002821115610d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d889061407e565b60405180910390fd5b60008360ff16118015610da8575060038360ff1611155b610de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dde906140ea565b60405180910390fd5b60018360ff161415610dff5781600781905550610e2d565b60028360ff161415610e175781600881905550610e2c565b60038360ff161415610e2b57816009819055505b5b5b6001905092915050565b60005481565b600083610e4861213f565b1580610ea15750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed790613c75565b60405180910390fd5b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054831115610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9690614156565b60405180910390fd5b610faa8585856117b5565b610fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe0906141c2565b60405180910390fd5b82600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110349190613ea0565b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008084905061108960095486611965565b809250819350505080600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110dc91906141e2565b600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461116a91906141e2565b600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084600b60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112359190613ea0565b600b60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161131291906136b2565b60405180910390a33073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161137791906136b2565b60405180910390a3600193505050509392505050565b600a6020528060005260406000206000915090505481565b600c81815481106113b557600080fd5b90600052602060002090600402016000915090508060000180546113d890613bd1565b80601f016020809104026020016040519081016040528092919081815260200182805461140490613bd1565b80156114515780601f1061142657610100808354040283529160200191611451565b820191906000526020600020905b81548152906001019060200180831161143457829003601f168201915b50505050509080600101805461146690613bd1565b80601f016020809104026020016040519081016040528092919081815260200182805461149290613bd1565b80156114df5780601f106114b4576101008083540402835291602001916114df565b820191906000526020600020905b8154815290600101906020018083116114c257829003601f168201915b5050505050908060020154908060030160009054906101000a900460ff16905084565b600260009054906101000a900460ff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806115c05750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6115ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f690613fec565b60405180910390fd5b816006819055507f6c04066f6ede40cc1642c211ba9d18f1a096ccc84fb8d11be28ea6c3c6f68b368260405161163591906136b2565b60405180910390a160019050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ae906142aa565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117145733611716565b305b90506117aa818585600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117a591906141e2565b612eea565b600191505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156117f457600090506118f0565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061187c5750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b1561188a57600090506118f0565b60006001905060006001905083600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156118e25750815b80156118eb5750805b925050505b9392505050565b600b602052816000526040600020602052806000526040600020600091509150505481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000806064848461197691906142ca565b6119809190614353565b9150818361198e9190613ea0565b90509250929050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4690613e51565b60405180910390fd5b600c805490508210611a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8d9061441c565b60405180910390fd5b6000600c8381548110611aac57611aab61443c565b5b9060005260206000209060040201905060018160030160009054906101000a900460ff1660ff1614611b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0a906144dd565b60405180910390fd5b611b213082600201546130b5565b611b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5790614549565b60405180910390fd5b60008160030160006101000a81548160ff021916908360ff160217905550827fb6ef0f3c9f270f5d9dc362588d6bdca7b4a93459de07af4ca0f475b64aef0f26826000018360010184600201548560030160009054906101000a900460ff16600054604051611bd39594939291906145fe565b60405180910390a26001915050919050565b60038054611bf290613bd1565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1e90613bd1565b8015611c6b5780601f10611c4057610100808354040283529160200191611c6b565b820191906000526020600020905b815481529060010190602001808311611c4e57829003601f168201915b505050505081565b6000600c80549050905090565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0990613e51565b60405180910390fd5b600c805490508510611d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d509061441c565b60405180910390fd5b60008211611d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d93906146ab565b60405180910390fd5b6000600c8681548110611db257611db161443c565b5b9060005260206000209060040201905060018160030160009054906101000a900460ff1660ff1614611e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e10906144dd565b60405180910390fd5b84816000019080519060200190611e31929190613427565b5083816001019080519060200190611e4a929190613427565b508281600201541115611e7657611e7030848360020154611e6b9190613ea0565b6130b5565b50611e9e565b8281600201541015611e9d57611e9b30826002015485611e969190613ea0565b612a94565b505b5b828160020181905550857fb6ef0f3c9f270f5d9dc362588d6bdca7b4a93459de07af4ca0f475b64aef0f26826000018360010184600201548560030160009054906101000a900460ff16600054604051611efc9594939291906145fe565b60405180910390a26001915050949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f79906142aa565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fdf5733611fe1565b305b905082600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156120a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120999061473d565b60405180910390fd5b612134818585600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461212f9190613ea0565b612eea565b600191505092915050565b60004360065411905090565b60003361215661213f565b15806121af5750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6121ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e590613c75565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461224b573361224d565b305b905061225a8186866117b5565b612299576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612290906141c2565b60405180910390fd5b83600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122e49190613ea0565b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008085905061233960095487611965565b809250819350505080600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461238c91906141e2565b600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241a91906141e2565b600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124ba91906136b2565b60405180910390a33073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161251f91906136b2565b60405180910390a3600194505050505092915050565b60095481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806125e65750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261c90613fec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268c906147a9565b60405180910390fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c826040516127059190613ae8565b60405180910390a160019050919050565b60065481565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60075481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806128545750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288a90613fec565b60405180910390fd5b60003090506128a38185856117b5565b6128e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d9906141c2565b60405180910390fd5b82600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461292d9190613ea0565b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129bb91906141e2565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612a5b91906136b2565b60405180910390a3600191505092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1d90613e51565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8d90614815565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1e906148a7565b60405180910390fd5b600080612c3660075485611965565b809250819350505080600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c8991906141e2565b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d1791906141e2565b600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600054612d6891906141e2565b6000819055508473ffffffffffffffffffffffffffffffffffffffff167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f82600054604051612db8929190613ab0565b60405180910390a23073ffffffffffffffffffffffffffffffffffffffff167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f83600054604051612e0a929190613ab0565b60405180910390a28473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612e7091906136b2565b60405180910390a33073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ed691906136b2565b60405180910390a360019250505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5190614939565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc190613d07565b60405180910390fd5b80600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516130a891906136b2565b60405180910390a3505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313e90613e51565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ae906149cb565b60405180910390fd5b6000806131c660085485611965565b8092508193505050806000546131dc9190613ea0565b60008190555083600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461322d9190613ea0565b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132bb91906141e2565b600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161335c91906136b2565b60405180910390a33073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133c191906136b2565b60405180910390a38473ffffffffffffffffffffffffffffffffffffffff167f49995e5dd6158cf69ad3e9777c46755a1a826a446c6416992167462dad033b2a82600054604051613413929190613ab0565b60405180910390a260019250505092915050565b82805461343390613bd1565b90600052602060002090601f016020900481019282613455576000855561349c565b82601f1061346e57805160ff191683800117855561349c565b8280016001018555821561349c579182015b8281111561349b578251825591602001919060010190613480565b5b5090506134a991906134ad565b5090565b5b808211156134c65760008160009055506001016134ae565b5090565b600081519050919050565b600082825260208201905092915050565b60005b838110156135045780820151818401526020810190506134e9565b83811115613513576000848401525b50505050565b6000601f19601f8301169050919050565b6000613535826134ca565b61353f81856134d5565b935061354f8185602086016134e6565b61355881613519565b840191505092915050565b6000602082019050818103600083015261357d818461352a565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006135c482613599565b9050919050565b6135d4816135b9565b81146135df57600080fd5b50565b6000813590506135f1816135cb565b92915050565b6000819050919050565b61360a816135f7565b811461361557600080fd5b50565b60008135905061362781613601565b92915050565b600080604083850312156136445761364361358f565b5b6000613652858286016135e2565b925050602061366385828601613618565b9150509250929050565b60008115159050919050565b6136828161366d565b82525050565b600060208201905061369d6000830184613679565b92915050565b6136ac816135f7565b82525050565b60006020820190506136c760008301846136a3565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61370f82613519565b810181811067ffffffffffffffff8211171561372e5761372d6136d7565b5b80604052505050565b6000613741613585565b905061374d8282613706565b919050565b600067ffffffffffffffff82111561376d5761376c6136d7565b5b61377682613519565b9050602081019050919050565b82818337600083830152505050565b60006137a56137a084613752565b613737565b9050828152602081018484840111156137c1576137c06136d2565b5b6137cc848285613783565b509392505050565b600082601f8301126137e9576137e86136cd565b5b81356137f9848260208601613792565b91505092915050565b60008060006060848603121561381b5761381a61358f565b5b600084013567ffffffffffffffff81111561383957613838613594565b5b613845868287016137d4565b935050602084013567ffffffffffffffff81111561386657613865613594565b5b613872868287016137d4565b925050604061388386828701613618565b9150509250925092565b600060ff82169050919050565b6138a38161388d565b81146138ae57600080fd5b50565b6000813590506138c08161389a565b92915050565b600080604083850312156138dd576138dc61358f565b5b60006138eb858286016138b1565b92505060206138fc85828601613618565b9150509250929050565b60008060006060848603121561391f5761391e61358f565b5b600061392d868287016135e2565b935050602061393e868287016135e2565b925050604061394f86828701613618565b9150509250925092565b60006020828403121561396f5761396e61358f565b5b600061397d848285016135e2565b91505092915050565b60006020828403121561399c5761399b61358f565b5b60006139aa84828501613618565b91505092915050565b6139bc8161388d565b82525050565b600060808201905081810360008301526139dc818761352a565b905081810360208301526139f0818661352a565b90506139ff60408301856136a3565b613a0c60608301846139b3565b95945050505050565b6000602082019050613a2a60008301846139b3565b92915050565b60008060408385031215613a4757613a4661358f565b5b6000613a55858286016135e2565b9250506020613a66858286016135e2565b9150509250929050565b60008060408385031215613a8757613a8661358f565b5b6000613a9585828601613618565b9250506020613aa685828601613618565b9150509250929050565b6000604082019050613ac560008301856136a3565b613ad260208301846136a3565b9392505050565b613ae2816135b9565b82525050565b6000602082019050613afd6000830184613ad9565b92915050565b60008060008060808587031215613b1d57613b1c61358f565b5b6000613b2b87828801613618565b945050602085013567ffffffffffffffff811115613b4c57613b4b613594565b5b613b58878288016137d4565b935050604085013567ffffffffffffffff811115613b7957613b78613594565b5b613b85878288016137d4565b9250506060613b9687828801613618565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613be957607f821691505b60208210811415613bfd57613bfc613ba2565b5b50919050565b7f436f6e7472616374206973206c6f636b65642065786365707420666f7220746860008201527f652061646d696e00000000000000000000000000000000000000000000000000602082015250565b6000613c5f6027836134d5565b9150613c6a82613c03565b604082019050919050565b60006020820190508181036000830152613c8e81613c52565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613cf16022836134d5565b9150613cfc82613c95565b604082019050919050565b60006020820190508181036000830152613d2081613ce4565b9050919050565b7f416c6c6f77616e63652063616e6e6f7420626520696e63726561736564206f7260008201527f206465637265617365642069662076616c756520697320646966666572656e7460208201527f2066726f6d207a65726f00000000000000000000000000000000000000000000604082015250565b6000613da9604a836134d5565b9150613db482613d27565b606082019050919050565b60006020820190508181036000830152613dd881613d9c565b9050919050565b7f4f6e6c792061646d696e2063616e20706572666f726d2074686973206f70657260008201527f6174696f6e000000000000000000000000000000000000000000000000000000602082015250565b6000613e3b6025836134d5565b9150613e4682613ddf565b604082019050919050565b60006020820190508181036000830152613e6a81613e2e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613eab826135f7565b9150613eb6836135f7565b925082821015613ec957613ec8613e71565b5b828203905092915050565b6000819050919050565b6000819050919050565b6000613f03613efe613ef984613ed4565b613ede565b61388d565b9050919050565b613f1381613ee8565b82525050565b600060a0820190508181036000830152613f33818861352a565b90508181036020830152613f47818761352a565b9050613f5660408301866136a3565b613f636060830185613f0a565b613f7060808301846136a3565b9695505050505050565b7f4f6e6c792061646d696e206f7220626f6172642063616e20706572666f726d2060008201527f74686973206f7065726174696f6e000000000000000000000000000000000000602082015250565b6000613fd6602e836134d5565b9150613fe182613f7a565b604082019050919050565b6000602082019050818103600083015261400581613fc9565b9050919050565b7f496e76616c6964206f722065786365656420776869746520706170657220646560008201527f66696e6974696f6e000000000000000000000000000000000000000000000000602082015250565b60006140686028836134d5565b91506140738261400c565b604082019050919050565b600060208201905081810360008301526140978161405b565b9050919050565b7f496e76616c696420666565207479706500000000000000000000000000000000600082015250565b60006140d46010836134d5565b91506140df8261409e565b602082019050919050565b60006020820190508181036000830152614103816140c7565b9050919050565b7f56616c756520696e666f726d656420697320696e76616c696400000000000000600082015250565b60006141406019836134d5565b915061414b8261410a565b602082019050919050565b6000602082019050818103600083015261416f81614133565b9050919050565b7f496e76616c6964205472616e73666572204f7065726174696f6e000000000000600082015250565b60006141ac601a836134d5565b91506141b782614176565b602082019050919050565b600060208201905081810360008301526141db8161419f565b9050919050565b60006141ed826135f7565b91506141f8836135f7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561422d5761422c613e71565b5b828201905092915050565b7f45524332303a206465637265617365416c6c6f77616e636520746f207468652060008201527f7a65726f20616464726573730000000000000000000000000000000000000000602082015250565b6000614294602c836134d5565b915061429f82614238565b604082019050919050565b600060208201905081810360008301526142c381614287565b9050919050565b60006142d5826135f7565b91506142e0836135f7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561431957614318613e71565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061435e826135f7565b9150614369836135f7565b92508261437957614378614324565b5b828204905092915050565b7f496e76616c696420636f6e747261637420696e646578206e756d6265722e204760008201527f726561746572207468616e20746f74616c20677261696e20636f6e747261637460208201527f7300000000000000000000000000000000000000000000000000000000000000604082015250565b60006144066041836134d5565b915061441182614384565b606082019050919050565b60006020820190508181036000830152614435816143f9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f5468697320636f6e7472616374206973206e6f206c6f6e67657220616374697660008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b60006144c76021836134d5565b91506144d28261446b565b604082019050919050565b600060208201905081810360008301526144f6816144ba565b9050919050565b7f436f756c64206e6f7420746f206275726e20746f6b656e730000000000000000600082015250565b60006145336018836134d5565b915061453e826144fd565b602082019050919050565b6000602082019050818103600083015261456281614526565b9050919050565b60008190508160005260206000209050919050565b6000815461458b81613bd1565b61459581866134d5565b945060018216600081146145b057600181146145c2576145f5565b60ff19831686526020860193506145f5565b6145cb85614569565b60005b838110156145ed578154818901526001820191506020810190506145ce565b808801955050505b50505092915050565b600060a0820190508181036000830152614618818861457e565b9050818103602083015261462c818761457e565b905061463b60408301866136a3565b61464860608301856139b3565b61465560808301846136a3565b9695505050505050565b7f43616e6e6f7420736574207a65726f20617373657420616d6f756e7400000000600082015250565b6000614695601c836134d5565b91506146a08261465f565b602082019050919050565b600060208201905081810360008301526146c481614688565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006147276025836134d5565b9150614732826146cb565b604082019050919050565b600060208201905081810360008301526147568161471a565b9050919050565b7f4e756c6c20616464726573730000000000000000000000000000000000000000600082015250565b6000614793600c836134d5565b915061479e8261475d565b602082019050919050565b600060208201905081810360008301526147c281614786565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006147ff601f836134d5565b915061480a826147c9565b602082019050919050565b6000602082019050818103600083015261482e816147f2565b9050919050565b7f41646d696e2063616e6e6f74206d696e7420746f6b656e7320746f206865727360008201527f656c660000000000000000000000000000000000000000000000000000000000602082015250565b60006148916023836134d5565b915061489c82614835565b604082019050919050565b600060208201905081810360008301526148c081614884565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006149236024836134d5565b915061492e826148c7565b604082019050919050565b6000602082019050818103600083015261495281614916565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006149b56021836134d5565b91506149c082614959565b604082019050919050565b600060208201905081810360008301526149e4816149a8565b905091905056fea2646970667358221220c4c6441e856ccf11a816acedd5808063f5c11807907b0d906c101ddf664fbd6064736f6c634300080a0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101e55760003560e01c806378d067dd1161010f578063a9059cbb116100a2578063dd62ed3e11610071578063dd62ed3e1461064a578063ed91e0441461067a578063f3fef3a314610698578063f851a440146106c8576101e5565b8063a9059cbb146105ae578063acb2ad6f146105de578063c4f4face146105fc578063d8162db71461062c576101e5565b8063a09037a9116100de578063a09037a914610512578063a40eb4de14610530578063a457c2d714610560578063a4e2d63414610590576101e5565b806378d067dd146104755780637cd3229a146104a657806391a76a5b146104c457806395d89b41146104f4576101e5565b806327e235e311610187578063395093511161015657806339509351146103b557806340ecb7f2146103e55780635c6581651461041557806370a0823114610445576101e5565b806327e235e3146103045780632eef5ff814610334578063313ce56714610367578063366a68dc14610385576101e5565b80631230a98a116101c35780631230a98a1461025657806313a7e54e1461028657806318160ddd146102b657806323b872dd146102d4576101e5565b806306fdde03146101ea578063095ea7b3146102085780630f621c2514610238575b600080fd5b6101f26106e6565b6040516101ff9190613563565b60405180910390f35b610222600480360381019061021d919061362d565b610774565b60405161022f9190613688565b60405180910390f35b610240610aa4565b60405161024d91906136b2565b60405180910390f35b610270600480360381019061026b9190613802565b610aaa565b60405161027d9190613688565b60405180910390f35b6102a0600480360381019061029b91906138c6565b610c63565b6040516102ad9190613688565b60405180910390f35b6102be610e37565b6040516102cb91906136b2565b60405180910390f35b6102ee60048036038101906102e99190613906565b610e3d565b6040516102fb9190613688565b60405180910390f35b61031e60048036038101906103199190613959565b61138d565b60405161032b91906136b2565b60405180910390f35b61034e60048036038101906103499190613986565b6113a5565b60405161035e94939291906139c2565b60405180910390f35b61036f611502565b60405161037c9190613a15565b60405180910390f35b61039f600480360381019061039a9190613986565b611515565b6040516103ac9190613688565b60405180910390f35b6103cf60048036038101906103ca919061362d565b611646565b6040516103dc9190613688565b60405180910390f35b6103ff60048036038101906103fa9190613906565b6117b5565b60405161040c9190613688565b60405180910390f35b61042f600480360381019061042a9190613a30565b6118f7565b60405161043c91906136b2565b60405180910390f35b61045f600480360381019061045a9190613959565b61191c565b60405161046c91906136b2565b60405180910390f35b61048f600480360381019061048a9190613a70565b611965565b60405161049d929190613ab0565b60405180910390f35b6104ae611997565b6040516104bb9190613ae8565b60405180910390f35b6104de60048036038101906104d99190613986565b6119bd565b6040516104eb9190613688565b60405180910390f35b6104fc611be5565b6040516105099190613563565b60405180910390f35b61051a611c73565b60405161052791906136b2565b60405180910390f35b61054a60048036038101906105459190613b03565b611c80565b6040516105579190613688565b60405180910390f35b61057a6004803603810190610575919061362d565b611f11565b6040516105879190613688565b60405180910390f35b61059861213f565b6040516105a59190613688565b60405180910390f35b6105c860048036038101906105c3919061362d565b61214b565b6040516105d59190613688565b60405180910390f35b6105e6612535565b6040516105f391906136b2565b60405180910390f35b61061660048036038101906106119190613959565b61253b565b6040516106239190613688565b60405180910390f35b610634612716565b60405161064191906136b2565b60405180910390f35b610664600480360381019061065f9190613a30565b61271c565b60405161067191906136b2565b60405180910390f35b6106826127a3565b60405161068f91906136b2565b60405180910390f35b6106b260048036038101906106ad919061362d565b6127a9565b6040516106bf9190613688565b60405180910390f35b6106d0612a6e565b6040516106dd9190613ae8565b60405180910390f35b600180546106f390613bd1565b80601f016020809104026020016040519081016040528092919081815260200182805461071f90613bd1565b801561076c5780601f106107415761010080835404028352916020019161076c565b820191906000526020600020905b81548152906001019060200180831161074f57829003601f168201915b505050505081565b60003361077f61213f565b15806107d85750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080e90613c75565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087e90613d07565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108e457336108e6565b305b9050600084148061097357506000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b6109b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a990613dbf565b60405180910390fd5b83600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92586604051610a9091906136b2565b60405180910390a360019250505092915050565b60085481565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3390613e51565b60405180910390fd5b60006040518060800160405280868152602001858152602001848152602001600160ff168152509050600c8190806001815401808255809150506001900390600052602060002090600402016000909190919091506000820151816000019080519060200190610bad929190613427565b506020820151816001019080519060200190610bca929190613427565b506040820151816002015560608201518160030160006101000a81548160ff021916908360ff1602179055505050610c023084612a94565b506001600c80549050610c159190613ea0565b7fb6ef0f3c9f270f5d9dc362588d6bdca7b4a93459de07af4ca0f475b64aef0f268686866001600054604051610c4f959493929190613f19565b60405180910390a260019150509392505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d0e5750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4490613fec565b60405180910390fd5b6002821115610d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d889061407e565b60405180910390fd5b60008360ff16118015610da8575060038360ff1611155b610de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dde906140ea565b60405180910390fd5b60018360ff161415610dff5781600781905550610e2d565b60028360ff161415610e175781600881905550610e2c565b60038360ff161415610e2b57816009819055505b5b5b6001905092915050565b60005481565b600083610e4861213f565b1580610ea15750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b610ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed790613c75565b60405180910390fd5b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054831115610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9690614156565b60405180910390fd5b610faa8585856117b5565b610fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe0906141c2565b60405180910390fd5b82600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110349190613ea0565b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008084905061108960095486611965565b809250819350505080600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110dc91906141e2565b600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461116a91906141e2565b600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084600b60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112359190613ea0565b600b60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161131291906136b2565b60405180910390a33073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161137791906136b2565b60405180910390a3600193505050509392505050565b600a6020528060005260406000206000915090505481565b600c81815481106113b557600080fd5b90600052602060002090600402016000915090508060000180546113d890613bd1565b80601f016020809104026020016040519081016040528092919081815260200182805461140490613bd1565b80156114515780601f1061142657610100808354040283529160200191611451565b820191906000526020600020905b81548152906001019060200180831161143457829003601f168201915b50505050509080600101805461146690613bd1565b80601f016020809104026020016040519081016040528092919081815260200182805461149290613bd1565b80156114df5780601f106114b4576101008083540402835291602001916114df565b820191906000526020600020905b8154815290600101906020018083116114c257829003601f168201915b5050505050908060020154908060030160009054906101000a900460ff16905084565b600260009054906101000a900460ff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806115c05750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6115ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f690613fec565b60405180910390fd5b816006819055507f6c04066f6ede40cc1642c211ba9d18f1a096ccc84fb8d11be28ea6c3c6f68b368260405161163591906136b2565b60405180910390a160019050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ae906142aa565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117145733611716565b305b90506117aa818585600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117a591906141e2565b612eea565b600191505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156117f457600090506118f0565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061187c5750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b1561188a57600090506118f0565b60006001905060006001905083600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156118e25750815b80156118eb5750805b925050505b9392505050565b600b602052816000526040600020602052806000526040600020600091509150505481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000806064848461197691906142ca565b6119809190614353565b9150818361198e9190613ea0565b90509250929050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4690613e51565b60405180910390fd5b600c805490508210611a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8d9061441c565b60405180910390fd5b6000600c8381548110611aac57611aab61443c565b5b9060005260206000209060040201905060018160030160009054906101000a900460ff1660ff1614611b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0a906144dd565b60405180910390fd5b611b213082600201546130b5565b611b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5790614549565b60405180910390fd5b60008160030160006101000a81548160ff021916908360ff160217905550827fb6ef0f3c9f270f5d9dc362588d6bdca7b4a93459de07af4ca0f475b64aef0f26826000018360010184600201548560030160009054906101000a900460ff16600054604051611bd39594939291906145fe565b60405180910390a26001915050919050565b60038054611bf290613bd1565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1e90613bd1565b8015611c6b5780601f10611c4057610100808354040283529160200191611c6b565b820191906000526020600020905b815481529060010190602001808311611c4e57829003601f168201915b505050505081565b6000600c80549050905090565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0990613e51565b60405180910390fd5b600c805490508510611d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d509061441c565b60405180910390fd5b60008211611d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d93906146ab565b60405180910390fd5b6000600c8681548110611db257611db161443c565b5b9060005260206000209060040201905060018160030160009054906101000a900460ff1660ff1614611e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e10906144dd565b60405180910390fd5b84816000019080519060200190611e31929190613427565b5083816001019080519060200190611e4a929190613427565b508281600201541115611e7657611e7030848360020154611e6b9190613ea0565b6130b5565b50611e9e565b8281600201541015611e9d57611e9b30826002015485611e969190613ea0565b612a94565b505b5b828160020181905550857fb6ef0f3c9f270f5d9dc362588d6bdca7b4a93459de07af4ca0f475b64aef0f26826000018360010184600201548560030160009054906101000a900460ff16600054604051611efc9594939291906145fe565b60405180910390a26001915050949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f79906142aa565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fdf5733611fe1565b305b905082600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156120a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120999061473d565b60405180910390fd5b612134818585600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461212f9190613ea0565b612eea565b600191505092915050565b60004360065411905090565b60003361215661213f565b15806121af5750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6121ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e590613c75565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461224b573361224d565b305b905061225a8186866117b5565b612299576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612290906141c2565b60405180910390fd5b83600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546122e49190613ea0565b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008085905061233960095487611965565b809250819350505080600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461238c91906141e2565b600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461241a91906141e2565b600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124ba91906136b2565b60405180910390a33073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161251f91906136b2565b60405180910390a3600194505050505092915050565b60095481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806125e65750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261c90613fec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268c906147a9565b60405180910390fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c826040516127059190613ae8565b60405180910390a160019050919050565b60065481565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60075481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806128545750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288a90613fec565b60405180910390fd5b60003090506128a38185856117b5565b6128e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d9906141c2565b60405180910390fd5b82600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461292d9190613ea0565b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555082600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129bb91906141e2565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612a5b91906136b2565b60405180910390a3600191505092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1d90613e51565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8d90614815565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1e906148a7565b60405180910390fd5b600080612c3660075485611965565b809250819350505080600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c8991906141e2565b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d1791906141e2565b600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600054612d6891906141e2565b6000819055508473ffffffffffffffffffffffffffffffffffffffff167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f82600054604051612db8929190613ab0565b60405180910390a23073ffffffffffffffffffffffffffffffffffffffff167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f83600054604051612e0a929190613ab0565b60405180910390a28473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612e7091906136b2565b60405180910390a33073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ed691906136b2565b60405180910390a360019250505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5190614939565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc190613d07565b60405180910390fd5b80600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516130a891906136b2565b60405180910390a3505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313e90613e51565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ae906149cb565b60405180910390fd5b6000806131c660085485611965565b8092508193505050806000546131dc9190613ea0565b60008190555083600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461322d9190613ea0565b600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132bb91906141e2565b600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161335c91906136b2565b60405180910390a33073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133c191906136b2565b60405180910390a38473ffffffffffffffffffffffffffffffffffffffff167f49995e5dd6158cf69ad3e9777c46755a1a826a446c6416992167462dad033b2a82600054604051613413929190613ab0565b60405180910390a260019250505092915050565b82805461343390613bd1565b90600052602060002090601f016020900481019282613455576000855561349c565b82601f1061346e57805160ff191683800117855561349c565b8280016001018555821561349c579182015b8281111561349b578251825591602001919060010190613480565b5b5090506134a991906134ad565b5090565b5b808211156134c65760008160009055506001016134ae565b5090565b600081519050919050565b600082825260208201905092915050565b60005b838110156135045780820151818401526020810190506134e9565b83811115613513576000848401525b50505050565b6000601f19601f8301169050919050565b6000613535826134ca565b61353f81856134d5565b935061354f8185602086016134e6565b61355881613519565b840191505092915050565b6000602082019050818103600083015261357d818461352a565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006135c482613599565b9050919050565b6135d4816135b9565b81146135df57600080fd5b50565b6000813590506135f1816135cb565b92915050565b6000819050919050565b61360a816135f7565b811461361557600080fd5b50565b60008135905061362781613601565b92915050565b600080604083850312156136445761364361358f565b5b6000613652858286016135e2565b925050602061366385828601613618565b9150509250929050565b60008115159050919050565b6136828161366d565b82525050565b600060208201905061369d6000830184613679565b92915050565b6136ac816135f7565b82525050565b60006020820190506136c760008301846136a3565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61370f82613519565b810181811067ffffffffffffffff8211171561372e5761372d6136d7565b5b80604052505050565b6000613741613585565b905061374d8282613706565b919050565b600067ffffffffffffffff82111561376d5761376c6136d7565b5b61377682613519565b9050602081019050919050565b82818337600083830152505050565b60006137a56137a084613752565b613737565b9050828152602081018484840111156137c1576137c06136d2565b5b6137cc848285613783565b509392505050565b600082601f8301126137e9576137e86136cd565b5b81356137f9848260208601613792565b91505092915050565b60008060006060848603121561381b5761381a61358f565b5b600084013567ffffffffffffffff81111561383957613838613594565b5b613845868287016137d4565b935050602084013567ffffffffffffffff81111561386657613865613594565b5b613872868287016137d4565b925050604061388386828701613618565b9150509250925092565b600060ff82169050919050565b6138a38161388d565b81146138ae57600080fd5b50565b6000813590506138c08161389a565b92915050565b600080604083850312156138dd576138dc61358f565b5b60006138eb858286016138b1565b92505060206138fc85828601613618565b9150509250929050565b60008060006060848603121561391f5761391e61358f565b5b600061392d868287016135e2565b935050602061393e868287016135e2565b925050604061394f86828701613618565b9150509250925092565b60006020828403121561396f5761396e61358f565b5b600061397d848285016135e2565b91505092915050565b60006020828403121561399c5761399b61358f565b5b60006139aa84828501613618565b91505092915050565b6139bc8161388d565b82525050565b600060808201905081810360008301526139dc818761352a565b905081810360208301526139f0818661352a565b90506139ff60408301856136a3565b613a0c60608301846139b3565b95945050505050565b6000602082019050613a2a60008301846139b3565b92915050565b60008060408385031215613a4757613a4661358f565b5b6000613a55858286016135e2565b9250506020613a66858286016135e2565b9150509250929050565b60008060408385031215613a8757613a8661358f565b5b6000613a9585828601613618565b9250506020613aa685828601613618565b9150509250929050565b6000604082019050613ac560008301856136a3565b613ad260208301846136a3565b9392505050565b613ae2816135b9565b82525050565b6000602082019050613afd6000830184613ad9565b92915050565b60008060008060808587031215613b1d57613b1c61358f565b5b6000613b2b87828801613618565b945050602085013567ffffffffffffffff811115613b4c57613b4b613594565b5b613b58878288016137d4565b935050604085013567ffffffffffffffff811115613b7957613b78613594565b5b613b85878288016137d4565b9250506060613b9687828801613618565b91505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613be957607f821691505b60208210811415613bfd57613bfc613ba2565b5b50919050565b7f436f6e7472616374206973206c6f636b65642065786365707420666f7220746860008201527f652061646d696e00000000000000000000000000000000000000000000000000602082015250565b6000613c5f6027836134d5565b9150613c6a82613c03565b604082019050919050565b60006020820190508181036000830152613c8e81613c52565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613cf16022836134d5565b9150613cfc82613c95565b604082019050919050565b60006020820190508181036000830152613d2081613ce4565b9050919050565b7f416c6c6f77616e63652063616e6e6f7420626520696e63726561736564206f7260008201527f206465637265617365642069662076616c756520697320646966666572656e7460208201527f2066726f6d207a65726f00000000000000000000000000000000000000000000604082015250565b6000613da9604a836134d5565b9150613db482613d27565b606082019050919050565b60006020820190508181036000830152613dd881613d9c565b9050919050565b7f4f6e6c792061646d696e2063616e20706572666f726d2074686973206f70657260008201527f6174696f6e000000000000000000000000000000000000000000000000000000602082015250565b6000613e3b6025836134d5565b9150613e4682613ddf565b604082019050919050565b60006020820190508181036000830152613e6a81613e2e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613eab826135f7565b9150613eb6836135f7565b925082821015613ec957613ec8613e71565b5b828203905092915050565b6000819050919050565b6000819050919050565b6000613f03613efe613ef984613ed4565b613ede565b61388d565b9050919050565b613f1381613ee8565b82525050565b600060a0820190508181036000830152613f33818861352a565b90508181036020830152613f47818761352a565b9050613f5660408301866136a3565b613f636060830185613f0a565b613f7060808301846136a3565b9695505050505050565b7f4f6e6c792061646d696e206f7220626f6172642063616e20706572666f726d2060008201527f74686973206f7065726174696f6e000000000000000000000000000000000000602082015250565b6000613fd6602e836134d5565b9150613fe182613f7a565b604082019050919050565b6000602082019050818103600083015261400581613fc9565b9050919050565b7f496e76616c6964206f722065786365656420776869746520706170657220646560008201527f66696e6974696f6e000000000000000000000000000000000000000000000000602082015250565b60006140686028836134d5565b91506140738261400c565b604082019050919050565b600060208201905081810360008301526140978161405b565b9050919050565b7f496e76616c696420666565207479706500000000000000000000000000000000600082015250565b60006140d46010836134d5565b91506140df8261409e565b602082019050919050565b60006020820190508181036000830152614103816140c7565b9050919050565b7f56616c756520696e666f726d656420697320696e76616c696400000000000000600082015250565b60006141406019836134d5565b915061414b8261410a565b602082019050919050565b6000602082019050818103600083015261416f81614133565b9050919050565b7f496e76616c6964205472616e73666572204f7065726174696f6e000000000000600082015250565b60006141ac601a836134d5565b91506141b782614176565b602082019050919050565b600060208201905081810360008301526141db8161419f565b9050919050565b60006141ed826135f7565b91506141f8836135f7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561422d5761422c613e71565b5b828201905092915050565b7f45524332303a206465637265617365416c6c6f77616e636520746f207468652060008201527f7a65726f20616464726573730000000000000000000000000000000000000000602082015250565b6000614294602c836134d5565b915061429f82614238565b604082019050919050565b600060208201905081810360008301526142c381614287565b9050919050565b60006142d5826135f7565b91506142e0836135f7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561431957614318613e71565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061435e826135f7565b9150614369836135f7565b92508261437957614378614324565b5b828204905092915050565b7f496e76616c696420636f6e747261637420696e646578206e756d6265722e204760008201527f726561746572207468616e20746f74616c20677261696e20636f6e747261637460208201527f7300000000000000000000000000000000000000000000000000000000000000604082015250565b60006144066041836134d5565b915061441182614384565b606082019050919050565b60006020820190508181036000830152614435816143f9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f5468697320636f6e7472616374206973206e6f206c6f6e67657220616374697660008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b60006144c76021836134d5565b91506144d28261446b565b604082019050919050565b600060208201905081810360008301526144f6816144ba565b9050919050565b7f436f756c64206e6f7420746f206275726e20746f6b656e730000000000000000600082015250565b60006145336018836134d5565b915061453e826144fd565b602082019050919050565b6000602082019050818103600083015261456281614526565b9050919050565b60008190508160005260206000209050919050565b6000815461458b81613bd1565b61459581866134d5565b945060018216600081146145b057600181146145c2576145f5565b60ff19831686526020860193506145f5565b6145cb85614569565b60005b838110156145ed578154818901526001820191506020810190506145ce565b808801955050505b50505092915050565b600060a0820190508181036000830152614618818861457e565b9050818103602083015261462c818761457e565b905061463b60408301866136a3565b61464860608301856139b3565b61465560808301846136a3565b9695505050505050565b7f43616e6e6f7420736574207a65726f20617373657420616d6f756e7400000000600082015250565b6000614695601c836134d5565b91506146a08261465f565b602082019050919050565b600060208201905081810360008301526146c481614688565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006147276025836134d5565b9150614732826146cb565b604082019050919050565b600060208201905081810360008301526147568161471a565b9050919050565b7f4e756c6c20616464726573730000000000000000000000000000000000000000600082015250565b6000614793600c836134d5565b915061479e8261475d565b602082019050919050565b600060208201905081810360008301526147c281614786565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006147ff601f836134d5565b915061480a826147c9565b602082019050919050565b6000602082019050818103600083015261482e816147f2565b9050919050565b7f41646d696e2063616e6e6f74206d696e7420746f6b656e7320746f206865727360008201527f656c660000000000000000000000000000000000000000000000000000000000602082015250565b60006148916023836134d5565b915061489c82614835565b604082019050919050565b600060208201905081810360008301526148c081614884565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006149236024836134d5565b915061492e826148c7565b604082019050919050565b6000602082019050818103600083015261495281614916565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006149b56021836134d5565b91506149c082614959565b604082019050919050565b600060208201905081810360008301526149e4816149a8565b905091905056fea2646970667358221220c4c6441e856ccf11a816acedd5808063f5c11807907b0d906c101ddf664fbd6064736f6c634300080a0033
Deployed Bytecode Sourcemap
3252:17521:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4583:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11324:571;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4796:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5638:693;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18087:507;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4541:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10088:1013;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4868:43;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4987:21;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;4608;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17187:240;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13291:368;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19650:563;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4918:62;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18717:116;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20511:259;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;4690:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6499:736;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4636:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8819:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7551:1187;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12398:484;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19323:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9083:804;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4835:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17574:262;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4721:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19028:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4759:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14650:449;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4663:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4583:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11324:571::-;11460:4;11430:10;4283;:8;:10::i;:::-;4282:11;:31;;;;4308:5;;;;;;;;;;;4297:16;;:7;:16;;;4282:31;4260:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;11510:1:::1;11490:22;;:8;:22;;;;11482:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;11564:12;11589:10;11580:19;;:5;;;;;;;;;;;:19;;;11579:50;;11619:10;11579:50;;;11611:4;11579:50;11564:65;;11659:1;11649:6;:11;11648:47;;;;11693:1;11666:7;:13;11674:4;11666:13;;;;;;;;;;;;;;;:23;11680:8;11666:23;;;;;;;;;;;;;;;;:28;11648:47;11640:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;11811:6;11785:7;:13;11793:4;11785:13;;;;;;;;;;;;;;;:23;11799:8;11785:23;;;;;;;;;;;;;;;:32;;;;11848:8;11833:32;;11842:4;11833:32;;;11858:6;11833:32;;;;;;:::i;:::-;;;;;;;;11883:4;11876:11;;;11324:571:::0;;;;;:::o;4796:32::-;;;;:::o;5638:693::-;5821:12;3935:5;;;;;;;;;;;3921:19;;:10;:19;;;3913:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;5846:21:::1;5870:121;;;;;;;;5890:14;5870:121;;;;5919:18;5870:121;;;;5952:12;5870:121;;;;5979:1;5870:121;;;;::::0;5846:145:::1;;6002:6;6014:8;6002:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6034:34;6048:4;6055:12;6034:5;:34::i;:::-;;6130:1;6116:6;:13;;;;:15;;;;:::i;:::-;6084:189;6146:14;6175:18;6208:12;6235:1;6251:11;;6084:189;;;;;;;;;;:::i;:::-;;;;;;;;6294:4;6284:14;;6309;5638:693:::0;;;;;:::o;18087:507::-;18173:4;4083:5;;;;;;;;;;;4069:19;;:10;:19;;;:42;;;;4106:5;;;;;;;;;;;4092:19;;:10;:19;;;4069:42;4047:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;18210:1:::1;18198:10;:13;;18190:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;18285:1;18275:8;:11;;;:26;;;;;18300:1;18290:8;:11;;;;18275:26;18267:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;18349:1;18337:8;:13;;;18333:232;;;18385:10;18367:15;:28;;;;18333:232;;;18429:1;18417:8;:13;;;18413:152;;;18467:10;18447:17;:30;;;;18413:152;;;18511:1;18499:8;:13;;;18495:70;;;18543:10;18529:11;:24;;;;18495:70;18413:152;18333:232;18582:4;18575:11;;18087:507:::0;;;;:::o;4541:35::-;;;;:::o;10088:1013::-;10234:4;10209:5;4283:10;:8;:10::i;:::-;4282:11;:31;;;;4308:5;;;;;;;;;;;4297:16;;:7;:16;;;4282:31;4260:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;10327:7:::1;:14;10335:5;10327:14;;;;;;;;;;;;;;;:26;10342:10;10327:26;;;;;;;;;;;;;;;;10317:6;:36;;10295:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;10439:35;10455:5;10462:3;10467:6;10439:15;:35::i;:::-;10417:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;10603:6;10585:8;:15;10594:5;10585:15;;;;;;;;;;;;;;;;:24;;;;:::i;:::-;10567:8;:15;10576:5;10567:15;;;;;;;;;;;;;;;:42;;;;10620:21;10656:17:::0;10676:6:::1;10656:26;;10728:29;10737:11;;10750:6;10728:8;:29::i;:::-;10699:58;;;;;;;;10801:9;10785:8;:13;10794:3;10785:13;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;10769:8;:13;10778:3;10769:13;;;;;;;;;;;;;;;:41;;;;10873:13;10847:8;:23;10864:4;10847:23;;;;;;;;;;;;;;;;:39;;;;:::i;:::-;10821:8;:23;10838:4;10821:23;;;;;;;;;;;;;;;:65;;;;10955:6;10926:7;:14;10934:5;10926:14;;;;;;;;;;;;;;;:26;10941:10;10926:26;;;;;;;;;;;;;;;;:35;;;;:::i;:::-;10897:7;:14;10905:5;10897:14;;;;;;;;;;;;;;;:26;10912:10;10897:26;;;;;;;;;;;;;;;:64;;;;10995:3;10979:31;;10988:5;10979:31;;;11000:9;10979:31;;;;;;:::i;:::-;;;;;;;;11050:4;11026:45;;11035:5;11026:45;;;11057:13;11026:45;;;;;;:::i;:::-;;;;;;;;11089:4;11082:11;;;;10088:1013:::0;;;;;;:::o;4868:43::-;;;;;;;;;;;;;;;;;:::o;4987:21::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4608:::-;;;;;;;;;;;;;:::o;17187:240::-;17292:4;4083:5;;;;;;;;;;;4069:19;;:10;:19;;;:42;;;;4106:5;;;;;;;;;;;4092:19;;:10;:19;;;4069:42;4047:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;17333:17:::1;17314:16;:36;;;;17366:31;17379:17;17366:31;;;;;;:::i;:::-;;;;;;;;17415:4;17408:11;;17187:240:::0;;;:::o;13291:368::-;13381:4;13426:1;13406:22;;:8;:22;;;;13398:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;13490:12;13515:10;13506:19;;:5;;;;;;;;;;;:19;;;13505:50;;13545:10;13505:50;;;13537:4;13505:50;13490:65;;13566:63;13575:4;13581:8;13617:11;13591:7;:13;13599:4;13591:13;;;;;;;;;;;;;;;:23;13605:8;13591:23;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;13566:8;:63::i;:::-;13647:4;13640:11;;;13291:368;;;;:::o;19650:563::-;19768:4;19811:1;19794:19;;:5;:19;;;19790:64;;;19837:5;19830:12;;;;19790:64;19885:1;19870:17;;:3;:17;;;:33;;;;19898:5;;;;;;;;;;;19891:12;;:3;:12;;;19870:33;19866:78;;;19927:5;19920:12;;;;19866:78;19956:11;19970:4;19956:18;;19985:9;19997:4;19985:16;;20053:7;20034:8;:15;20043:5;20034:15;;;;;;;;;;;;;;;;:26;;:71;;;;;20099:6;20034:71;:132;;;;;20162:4;20034:132;20014:152;;;;19650:563;;;;;;:::o;4918:62::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18717:116::-;18782:7;18809:8;:16;18818:6;18809:16;;;;;;;;;;;;;;;;18802:23;;18717:116;;;:::o;20511:259::-;20580:21;20603:17;20669:3;20661:4;20651:7;:14;;;;:::i;:::-;20650:22;;;;:::i;:::-;20634:38;;20705:13;20695:7;:23;;;;:::i;:::-;20683:35;;20511:259;;;;;:::o;4690:20::-;;;;;;;;;;;;;:::o;6499:736::-;6578:4;3935:5;;;;;;;;;;;3921:19;;:10;:19;;;3913:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;6634:6:::1;:13;;;;6617:14;:30;6595:145;;;;;;;;;;;;:::i;:::-;;;;;;;;;6751:19;6773:6;6780:14;6773:22;;;;;;;;:::i;:::-;;;;;;;;;;;;6751:44;;6830:1;6814:5;:12;;;;;;;;;;;;:17;;;6806:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;6888:34;6902:4;6909:5;:12;;;6888:5;:34::i;:::-;6880:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6977:1;6962:5;:12;;;:16;;;;;;;;;;;;;;;;;;7027:14;6994:211;7067:5;:14;;7096:5;:18;;7129:5;:12;;;7156:5;:12;;;;;;;;;;;;7183:11;;6994:211;;;;;;;;;;:::i;:::-;;;;;;;;7223:4;7216:11;;;6499:736:::0;;;:::o;4636:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8819:95::-;8866:7;8893:6;:13;;;;8886:20;;8819:95;:::o;7551:1187::-;7759:4;3935:5;;;;;;;;;;;3921:19;;:10;:19;;;3913:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;7815:6:::1;:13;;;;7798:14;:30;7776:145;;;;;;;;;;;;:::i;:::-;;;;;;;;;7955:1;7940:12;:16;7932:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;8000:19;8022:6;8029:14;8022:22;;;;;;;;:::i;:::-;;;;;;;;;;;;8000:44;;8079:1;8063:5;:12;;;;;;;;;;;;:17;;;8055:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;8146:14;8129:5;:14;;:31;;;;;;;;;;;;:::i;:::-;;8192:18;8171:5;:18;;:39;;;;;;;;;;;;:::i;:::-;;8240:12;8225:5;:12;;;:27;8221:235;;;8269:49;8283:4;8305:12;8290:5;:12;;;:27;;;;:::i;:::-;8269:5;:49::i;:::-;;8221:235;;;8355:12;8340:5;:12;;;:27;8336:120;;;8384:49;8398:4;8420:5;:12;;;8405;:27;;;;:::i;:::-;8384:5;:49::i;:::-;;8336:120;8221:235;8481:12;8466:5;:12;;:27;;;;8541:14;8509:199;8570:5;:14;;8599:5;:18;;8632:5;:12;;;8659:5;:12;;;;;;;;;;;;8686:11;;8509:199;;;;;;;;;;:::i;:::-;;;;;;;;8726:4;8719:11;;;7551:1187:::0;;;;;;:::o;12398:484::-;12493:4;12538:1;12518:22;;:8;:22;;;;12510:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12602:12;12627:10;12618:19;;:5;;;;;;;;;;;:19;;;12617:50;;12657:10;12617:50;;;12649:4;12617:50;12602:65;;12713:16;12686:7;:13;12694:4;12686:13;;;;;;;;;;;;;;;:23;12700:8;12686:23;;;;;;;;;;;;;;;;:43;;12678:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;12782:68;12791:4;12797:8;12833:16;12807:7;:13;12815:4;12807:13;;;;;;;;;;;;;;;:23;12821:8;12807:23;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;12782:8;:68::i;:::-;12870:4;12863:11;;;12398:484;;;;:::o;19323:104::-;19364:4;19407:12;19388:16;;:31;19381:38;;19323:104;:::o;9083:804::-;9215:4;9185:10;4283;:8;:10::i;:::-;4282:11;:31;;;;4308:5;;;;;;;;;;;4297:16;;:7;:16;;;4282:31;4260:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;9237:12:::1;9262:10;9253:19;;:5;;;;;;;;;;;:19;;;9252:50;;9292:10;9252:50;;;9284:4;9252:50;9237:65;;9335:34;9351:4;9357:3;9362:6;9335:15;:34::i;:::-;9313:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;9468:6;9451:8;:14;9460:4;9451:14;;;;;;;;;;;;;;;;:23;;;;:::i;:::-;9434:8;:14;9443:4;9434:14;;;;;;;;;;;;;;;:40;;;;9485:21;9521:17:::0;9541:6:::1;9521:26;;9593:29;9602:11;;9615:6;9593:8;:29::i;:::-;9564:58;;;;;;;;9666:9;9650:8;:13;9659:3;9650:13;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;9634:8;:13;9643:3;9634:13;;;;;;;;;;;;;;;:41;;;;9738:13;9712:8;:23;9729:4;9712:23;;;;;;;;;;;;;;;;:39;;;;:::i;:::-;9686:8;:23;9703:4;9686:23;;;;;;;;;;;;;;;:65;;;;9782:3;9767:30;;9776:4;9767:30;;;9787:9;9767:30;;;;;;:::i;:::-;;;;;;;;9836:4;9813:44;;9822:4;9813:44;;;9843:13;9813:44;;;;;;:::i;:::-;;;;;;;;9875:4;9868:11;;;;;9083:804:::0;;;;;:::o;4835:26::-;;;;:::o;17574:262::-;17671:4;4083:5;;;;;;;;;;;4069:19;;:10;:19;;;:42;;;;4106:5;;;;;;;;;;;4092:19;;:10;:19;;;4069:42;4047:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;17722:3:::1;17701:25;;:9;:25;;;;17693:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;17762:9;17754:5;;:17;;;;;;;;;;;;;;;;;;17787:19;17796:9;17787:19;;;;;;:::i;:::-;;;;;;;;17824:4;17817:11;;17574:262:::0;;;:::o;4721:31::-;;;;:::o;19028:186::-;19149:7;19181;:15;19189:6;19181:15;;;;;;;;;;;;;;;:25;19197:8;19181:25;;;;;;;;;;;;;;;;19174:32;;19028:186;;;;:::o;4759:30::-;;;;:::o;14650:449::-;14755:4;4083:5;;;;;;;;;;;4069:19;;:10;:19;;;:42;;;;4106:5;;;;;;;;;;;4092:19;;:10;:19;;;4069:42;4047:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;14777:12:::1;14800:4;14777:28;;14838:34;14854:4;14860:3;14865:6;14838:15;:34::i;:::-;14816:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;14971:6;14954:8;:14;14963:4;14954:14;;;;;;;;;;;;;;;;:23;;;;:::i;:::-;14937:8;:14;14946:4;14937:14;;;;;;;;;;;;;;;:40;;;;15020:6;15004:8;:13;15013:3;15004:13;;;;;;;;;;;;;;;;:22;;;;:::i;:::-;14988:8;:13;14997:3;14988:13;;;;;;;;;;;;;;;:38;;;;15057:3;15042:27;;15051:4;15042:27;;;15062:6;15042:27;;;;;;:::i;:::-;;;;;;;;15087:4;15080:11;;;14650:449:::0;;;;:::o;4663:20::-;;;;;;;;;;;;;:::o;15285:833::-;15392:4;3935:5;;;;;;;;;;;3921:19;;:10;:19;;;3913:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;15437:1:::1;15422:17;;:3;:17;;;;15414:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;15501:5;;;;;;;;;;;15494:12;;:3;:12;;;;15486:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;15557:21;15589:17:::0;15646:33:::1;15655:15;;15672:6;15646:8;:33::i;:::-;15617:62;;;;;;;;15724:9;15708:8;:13;15717:3;15708:13;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;15692:8;:13;15701:3;15692:13;;;;;;;;;;;;;;;:41;;;;15796:13;15770:8;:23;15787:4;15770:23;;;;;;;;;;;;;;;;:39;;;;:::i;:::-;15744:8;:23;15761:4;15744:23;;;;;;;;;;;;;;;:65;;;;15848:6;15834:11;;:20;;;;:::i;:::-;15820:11;:34;;;;15877:3;15872:33;;;15882:9;15893:11;;15872:33;;;;;;;:::i;:::-;;;;;;;;15934:4;15921:47;;;15941:13;15956:11;;15921:47;;;;;;;:::i;:::-;;;;;;;;16005:3;15984:36;;16001:1;15984:36;;;16010:9;15984:36;;;;;;:::i;:::-;;;;;;;;16065:4;16036:50;;16053:1;16036:50;;;16072:13;16036:50;;;;;;:::i;:::-;;;;;;;;16106:4;16099:11;;;;15285:833:::0;;;;:::o;14097:353::-;14220:1;14202:20;;:6;:20;;;;14194:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;14302:1;14282:22;;:8;:22;;;;14274:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;14384:7;14356;:15;14364:6;14356:15;;;;;;;;;;;;;;;:25;14372:8;14356:25;;;;;;;;;;;;;;;:35;;;;14424:8;14407:35;;14416:6;14407:35;;;14434:7;14407:35;;;;;;:::i;:::-;;;;;;;;14097:353;;;:::o;16265:733::-;16377:4;3935:5;;;;;;;;;;;3921:19;;:10;:19;;;3913:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;16427:1:::1;16407:22;;:8;:22;;;;16399:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16478:21;16510:17:::0;16567:35:::1;16576:17;;16595:6;16567:8;:35::i;:::-;16538:64;;;;;;;;16641:9;16627:11;;:23;;;;:::i;:::-;16613:11;:37;;;;16703:6;16682:8;:18;16691:8;16682:18;;;;;;;;;;;;;;;;:27;;;;:::i;:::-;16661:8;:18;16670:8;16661:18;;;;;;;;;;;;;;;:48;;;;16772:13;16746:8;:23;16763:4;16746:23;;;;;;;;;;;;;;;;:39;;;;:::i;:::-;16720:8;:23;16737:4;16720:23;;;;;;;;;;;;;;;:65;;;;16828:1;16801:41;;16810:8;16801:41;;;16832:9;16801:41;;;;;;:::i;:::-;;;;;;;;16885:4;16858:48;;16867:8;16858:48;;;16892:13;16858:48;;;;;;:::i;:::-;;;;;;;;16927:8;16922:38;;;16937:9;16948:11;;16922:38;;;;;;;:::i;:::-;;;;;;;;16986:4;16979:11;;;;16265:733:::0;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1397:75::-;1430:6;1463:2;1457:9;1447:19;;1397:75;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:117::-;3955:1;3952;3945:12;3969:117;4078:1;4075;4068:12;4092:180;4140:77;4137:1;4130:88;4237:4;4234:1;4227:15;4261:4;4258:1;4251:15;4278:281;4361:27;4383:4;4361:27;:::i;:::-;4353:6;4349:40;4491:6;4479:10;4476:22;4455:18;4443:10;4440:34;4437:62;4434:88;;;4502:18;;:::i;:::-;4434:88;4542:10;4538:2;4531:22;4321:238;4278:281;;:::o;4565:129::-;4599:6;4626:20;;:::i;:::-;4616:30;;4655:33;4683:4;4675:6;4655:33;:::i;:::-;4565:129;;;:::o;4700:308::-;4762:4;4852:18;4844:6;4841:30;4838:56;;;4874:18;;:::i;:::-;4838:56;4912:29;4934:6;4912:29;:::i;:::-;4904:37;;4996:4;4990;4986:15;4978:23;;4700:308;;;:::o;5014:154::-;5098:6;5093:3;5088;5075:30;5160:1;5151:6;5146:3;5142:16;5135:27;5014:154;;;:::o;5174:412::-;5252:5;5277:66;5293:49;5335:6;5293:49;:::i;:::-;5277:66;:::i;:::-;5268:75;;5366:6;5359:5;5352:21;5404:4;5397:5;5393:16;5442:3;5433:6;5428:3;5424:16;5421:25;5418:112;;;5449:79;;:::i;:::-;5418:112;5539:41;5573:6;5568:3;5563;5539:41;:::i;:::-;5258:328;5174:412;;;;;:::o;5606:340::-;5662:5;5711:3;5704:4;5696:6;5692:17;5688:27;5678:122;;5719:79;;:::i;:::-;5678:122;5836:6;5823:20;5861:79;5936:3;5928:6;5921:4;5913:6;5909:17;5861:79;:::i;:::-;5852:88;;5668:278;5606:340;;;;:::o;5952:979::-;6049:6;6057;6065;6114:2;6102:9;6093:7;6089:23;6085:32;6082:119;;;6120:79;;:::i;:::-;6082:119;6268:1;6257:9;6253:17;6240:31;6298:18;6290:6;6287:30;6284:117;;;6320:79;;:::i;:::-;6284:117;6425:63;6480:7;6471:6;6460:9;6456:22;6425:63;:::i;:::-;6415:73;;6211:287;6565:2;6554:9;6550:18;6537:32;6596:18;6588:6;6585:30;6582:117;;;6618:79;;:::i;:::-;6582:117;6723:63;6778:7;6769:6;6758:9;6754:22;6723:63;:::i;:::-;6713:73;;6508:288;6835:2;6861:53;6906:7;6897:6;6886:9;6882:22;6861:53;:::i;:::-;6851:63;;6806:118;5952:979;;;;;:::o;6937:86::-;6972:7;7012:4;7005:5;7001:16;6990:27;;6937:86;;;:::o;7029:118::-;7100:22;7116:5;7100:22;:::i;:::-;7093:5;7090:33;7080:61;;7137:1;7134;7127:12;7080:61;7029:118;:::o;7153:135::-;7197:5;7235:6;7222:20;7213:29;;7251:31;7276:5;7251:31;:::i;:::-;7153:135;;;;:::o;7294:470::-;7360:6;7368;7417:2;7405:9;7396:7;7392:23;7388:32;7385:119;;;7423:79;;:::i;:::-;7385:119;7543:1;7568:51;7611:7;7602:6;7591:9;7587:22;7568:51;:::i;:::-;7558:61;;7514:115;7668:2;7694:53;7739:7;7730:6;7719:9;7715:22;7694:53;:::i;:::-;7684:63;;7639:118;7294:470;;;;;:::o;7770:619::-;7847:6;7855;7863;7912:2;7900:9;7891:7;7887:23;7883:32;7880:119;;;7918:79;;:::i;:::-;7880:119;8038:1;8063:53;8108:7;8099:6;8088:9;8084:22;8063:53;:::i;:::-;8053:63;;8009:117;8165:2;8191:53;8236:7;8227:6;8216:9;8212:22;8191:53;:::i;:::-;8181:63;;8136:118;8293:2;8319:53;8364:7;8355:6;8344:9;8340:22;8319:53;:::i;:::-;8309:63;;8264:118;7770:619;;;;;:::o;8395:329::-;8454:6;8503:2;8491:9;8482:7;8478:23;8474:32;8471:119;;;8509:79;;:::i;:::-;8471:119;8629:1;8654:53;8699:7;8690:6;8679:9;8675:22;8654:53;:::i;:::-;8644:63;;8600:117;8395:329;;;;:::o;8730:::-;8789:6;8838:2;8826:9;8817:7;8813:23;8809:32;8806:119;;;8844:79;;:::i;:::-;8806:119;8964:1;8989:53;9034:7;9025:6;9014:9;9010:22;8989:53;:::i;:::-;8979:63;;8935:117;8730:329;;;;:::o;9065:112::-;9148:22;9164:5;9148:22;:::i;:::-;9143:3;9136:35;9065:112;;:::o;9183:727::-;9396:4;9434:3;9423:9;9419:19;9411:27;;9484:9;9478:4;9474:20;9470:1;9459:9;9455:17;9448:47;9512:78;9585:4;9576:6;9512:78;:::i;:::-;9504:86;;9637:9;9631:4;9627:20;9622:2;9611:9;9607:18;9600:48;9665:78;9738:4;9729:6;9665:78;:::i;:::-;9657:86;;9753:72;9821:2;9810:9;9806:18;9797:6;9753:72;:::i;:::-;9835:68;9899:2;9888:9;9884:18;9875:6;9835:68;:::i;:::-;9183:727;;;;;;;:::o;9916:214::-;10005:4;10043:2;10032:9;10028:18;10020:26;;10056:67;10120:1;10109:9;10105:17;10096:6;10056:67;:::i;:::-;9916:214;;;;:::o;10136:474::-;10204:6;10212;10261:2;10249:9;10240:7;10236:23;10232:32;10229:119;;;10267:79;;:::i;:::-;10229:119;10387:1;10412:53;10457:7;10448:6;10437:9;10433:22;10412:53;:::i;:::-;10402:63;;10358:117;10514:2;10540:53;10585:7;10576:6;10565:9;10561:22;10540:53;:::i;:::-;10530:63;;10485:118;10136:474;;;;;:::o;10616:::-;10684:6;10692;10741:2;10729:9;10720:7;10716:23;10712:32;10709:119;;;10747:79;;:::i;:::-;10709:119;10867:1;10892:53;10937:7;10928:6;10917:9;10913:22;10892:53;:::i;:::-;10882:63;;10838:117;10994:2;11020:53;11065:7;11056:6;11045:9;11041:22;11020:53;:::i;:::-;11010:63;;10965:118;10616:474;;;;;:::o;11096:332::-;11217:4;11255:2;11244:9;11240:18;11232:26;;11268:71;11336:1;11325:9;11321:17;11312:6;11268:71;:::i;:::-;11349:72;11417:2;11406:9;11402:18;11393:6;11349:72;:::i;:::-;11096:332;;;;;:::o;11434:118::-;11521:24;11539:5;11521:24;:::i;:::-;11516:3;11509:37;11434:118;;:::o;11558:222::-;11651:4;11689:2;11678:9;11674:18;11666:26;;11702:71;11770:1;11759:9;11755:17;11746:6;11702:71;:::i;:::-;11558:222;;;;:::o;11786:1125::-;11892:6;11900;11908;11916;11965:3;11953:9;11944:7;11940:23;11936:33;11933:120;;;11972:79;;:::i;:::-;11933:120;12092:1;12117:53;12162:7;12153:6;12142:9;12138:22;12117:53;:::i;:::-;12107:63;;12063:117;12247:2;12236:9;12232:18;12219:32;12278:18;12270:6;12267:30;12264:117;;;12300:79;;:::i;:::-;12264:117;12405:63;12460:7;12451:6;12440:9;12436:22;12405:63;:::i;:::-;12395:73;;12190:288;12545:2;12534:9;12530:18;12517:32;12576:18;12568:6;12565:30;12562:117;;;12598:79;;:::i;:::-;12562:117;12703:63;12758:7;12749:6;12738:9;12734:22;12703:63;:::i;:::-;12693:73;;12488:288;12815:2;12841:53;12886:7;12877:6;12866:9;12862:22;12841:53;:::i;:::-;12831:63;;12786:118;11786:1125;;;;;;;:::o;12917:180::-;12965:77;12962:1;12955:88;13062:4;13059:1;13052:15;13086:4;13083:1;13076:15;13103:320;13147:6;13184:1;13178:4;13174:12;13164:22;;13231:1;13225:4;13221:12;13252:18;13242:81;;13308:4;13300:6;13296:17;13286:27;;13242:81;13370:2;13362:6;13359:14;13339:18;13336:38;13333:84;;;13389:18;;:::i;:::-;13333:84;13154:269;13103:320;;;:::o;13429:226::-;13569:34;13565:1;13557:6;13553:14;13546:58;13638:9;13633:2;13625:6;13621:15;13614:34;13429:226;:::o;13661:366::-;13803:3;13824:67;13888:2;13883:3;13824:67;:::i;:::-;13817:74;;13900:93;13989:3;13900:93;:::i;:::-;14018:2;14013:3;14009:12;14002:19;;13661:366;;;:::o;14033:419::-;14199:4;14237:2;14226:9;14222:18;14214:26;;14286:9;14280:4;14276:20;14272:1;14261:9;14257:17;14250:47;14314:131;14440:4;14314:131;:::i;:::-;14306:139;;14033:419;;;:::o;14458:221::-;14598:34;14594:1;14586:6;14582:14;14575:58;14667:4;14662:2;14654:6;14650:15;14643:29;14458:221;:::o;14685:366::-;14827:3;14848:67;14912:2;14907:3;14848:67;:::i;:::-;14841:74;;14924:93;15013:3;14924:93;:::i;:::-;15042:2;15037:3;15033:12;15026:19;;14685:366;;;:::o;15057:419::-;15223:4;15261:2;15250:9;15246:18;15238:26;;15310:9;15304:4;15300:20;15296:1;15285:9;15281:17;15274:47;15338:131;15464:4;15338:131;:::i;:::-;15330:139;;15057:419;;;:::o;15482:298::-;15622:34;15618:1;15610:6;15606:14;15599:58;15691:34;15686:2;15678:6;15674:15;15667:59;15760:12;15755:2;15747:6;15743:15;15736:37;15482:298;:::o;15786:366::-;15928:3;15949:67;16013:2;16008:3;15949:67;:::i;:::-;15942:74;;16025:93;16114:3;16025:93;:::i;:::-;16143:2;16138:3;16134:12;16127:19;;15786:366;;;:::o;16158:419::-;16324:4;16362:2;16351:9;16347:18;16339:26;;16411:9;16405:4;16401:20;16397:1;16386:9;16382:17;16375:47;16439:131;16565:4;16439:131;:::i;:::-;16431:139;;16158:419;;;:::o;16583:224::-;16723:34;16719:1;16711:6;16707:14;16700:58;16792:7;16787:2;16779:6;16775:15;16768:32;16583:224;:::o;16813:366::-;16955:3;16976:67;17040:2;17035:3;16976:67;:::i;:::-;16969:74;;17052:93;17141:3;17052:93;:::i;:::-;17170:2;17165:3;17161:12;17154:19;;16813:366;;;:::o;17185:419::-;17351:4;17389:2;17378:9;17374:18;17366:26;;17438:9;17432:4;17428:20;17424:1;17413:9;17409:17;17402:47;17466:131;17592:4;17466:131;:::i;:::-;17458:139;;17185:419;;;:::o;17610:180::-;17658:77;17655:1;17648:88;17755:4;17752:1;17745:15;17779:4;17776:1;17769:15;17796:191;17836:4;17856:20;17874:1;17856:20;:::i;:::-;17851:25;;17890:20;17908:1;17890:20;:::i;:::-;17885:25;;17929:1;17926;17923:8;17920:34;;;17934:18;;:::i;:::-;17920:34;17979:1;17976;17972:9;17964:17;;17796:191;;;;:::o;17993:85::-;18038:7;18067:5;18056:16;;17993:85;;;:::o;18084:60::-;18112:3;18133:5;18126:12;;18084:60;;;:::o;18150:154::-;18206:9;18239:59;18255:42;18264:32;18290:5;18264:32;:::i;:::-;18255:42;:::i;:::-;18239:59;:::i;:::-;18226:72;;18150:154;;;:::o;18310:143::-;18403:43;18440:5;18403:43;:::i;:::-;18398:3;18391:56;18310:143;;:::o;18459:858::-;18710:4;18748:3;18737:9;18733:19;18725:27;;18798:9;18792:4;18788:20;18784:1;18773:9;18769:17;18762:47;18826:78;18899:4;18890:6;18826:78;:::i;:::-;18818:86;;18951:9;18945:4;18941:20;18936:2;18925:9;18921:18;18914:48;18979:78;19052:4;19043:6;18979:78;:::i;:::-;18971:86;;19067:72;19135:2;19124:9;19120:18;19111:6;19067:72;:::i;:::-;19149:78;19223:2;19212:9;19208:18;19199:6;19149:78;:::i;:::-;19237:73;19305:3;19294:9;19290:19;19281:6;19237:73;:::i;:::-;18459:858;;;;;;;;:::o;19323:233::-;19463:34;19459:1;19451:6;19447:14;19440:58;19532:16;19527:2;19519:6;19515:15;19508:41;19323:233;:::o;19562:366::-;19704:3;19725:67;19789:2;19784:3;19725:67;:::i;:::-;19718:74;;19801:93;19890:3;19801:93;:::i;:::-;19919:2;19914:3;19910:12;19903:19;;19562:366;;;:::o;19934:419::-;20100:4;20138:2;20127:9;20123:18;20115:26;;20187:9;20181:4;20177:20;20173:1;20162:9;20158:17;20151:47;20215:131;20341:4;20215:131;:::i;:::-;20207:139;;19934:419;;;:::o;20359:227::-;20499:34;20495:1;20487:6;20483:14;20476:58;20568:10;20563:2;20555:6;20551:15;20544:35;20359:227;:::o;20592:366::-;20734:3;20755:67;20819:2;20814:3;20755:67;:::i;:::-;20748:74;;20831:93;20920:3;20831:93;:::i;:::-;20949:2;20944:3;20940:12;20933:19;;20592:366;;;:::o;20964:419::-;21130:4;21168:2;21157:9;21153:18;21145:26;;21217:9;21211:4;21207:20;21203:1;21192:9;21188:17;21181:47;21245:131;21371:4;21245:131;:::i;:::-;21237:139;;20964:419;;;:::o;21389:166::-;21529:18;21525:1;21517:6;21513:14;21506:42;21389:166;:::o;21561:366::-;21703:3;21724:67;21788:2;21783:3;21724:67;:::i;:::-;21717:74;;21800:93;21889:3;21800:93;:::i;:::-;21918:2;21913:3;21909:12;21902:19;;21561:366;;;:::o;21933:419::-;22099:4;22137:2;22126:9;22122:18;22114:26;;22186:9;22180:4;22176:20;22172:1;22161:9;22157:17;22150:47;22214:131;22340:4;22214:131;:::i;:::-;22206:139;;21933:419;;;:::o;22358:175::-;22498:27;22494:1;22486:6;22482:14;22475:51;22358:175;:::o;22539:366::-;22681:3;22702:67;22766:2;22761:3;22702:67;:::i;:::-;22695:74;;22778:93;22867:3;22778:93;:::i;:::-;22896:2;22891:3;22887:12;22880:19;;22539:366;;;:::o;22911:419::-;23077:4;23115:2;23104:9;23100:18;23092:26;;23164:9;23158:4;23154:20;23150:1;23139:9;23135:17;23128:47;23192:131;23318:4;23192:131;:::i;:::-;23184:139;;22911:419;;;:::o;23336:176::-;23476:28;23472:1;23464:6;23460:14;23453:52;23336:176;:::o;23518:366::-;23660:3;23681:67;23745:2;23740:3;23681:67;:::i;:::-;23674:74;;23757:93;23846:3;23757:93;:::i;:::-;23875:2;23870:3;23866:12;23859:19;;23518:366;;;:::o;23890:419::-;24056:4;24094:2;24083:9;24079:18;24071:26;;24143:9;24137:4;24133:20;24129:1;24118:9;24114:17;24107:47;24171:131;24297:4;24171:131;:::i;:::-;24163:139;;23890:419;;;:::o;24315:305::-;24355:3;24374:20;24392:1;24374:20;:::i;:::-;24369:25;;24408:20;24426:1;24408:20;:::i;:::-;24403:25;;24562:1;24494:66;24490:74;24487:1;24484:81;24481:107;;;24568:18;;:::i;:::-;24481:107;24612:1;24609;24605:9;24598:16;;24315:305;;;;:::o;24626:231::-;24766:34;24762:1;24754:6;24750:14;24743:58;24835:14;24830:2;24822:6;24818:15;24811:39;24626:231;:::o;24863:366::-;25005:3;25026:67;25090:2;25085:3;25026:67;:::i;:::-;25019:74;;25102:93;25191:3;25102:93;:::i;:::-;25220:2;25215:3;25211:12;25204:19;;24863:366;;;:::o;25235:419::-;25401:4;25439:2;25428:9;25424:18;25416:26;;25488:9;25482:4;25478:20;25474:1;25463:9;25459:17;25452:47;25516:131;25642:4;25516:131;:::i;:::-;25508:139;;25235:419;;;:::o;25660:348::-;25700:7;25723:20;25741:1;25723:20;:::i;:::-;25718:25;;25757:20;25775:1;25757:20;:::i;:::-;25752:25;;25945:1;25877:66;25873:74;25870:1;25867:81;25862:1;25855:9;25848:17;25844:105;25841:131;;;25952:18;;:::i;:::-;25841:131;26000:1;25997;25993:9;25982:20;;25660:348;;;;:::o;26014:180::-;26062:77;26059:1;26052:88;26159:4;26156:1;26149:15;26183:4;26180:1;26173:15;26200:185;26240:1;26257:20;26275:1;26257:20;:::i;:::-;26252:25;;26291:20;26309:1;26291:20;:::i;:::-;26286:25;;26330:1;26320:35;;26335:18;;:::i;:::-;26320:35;26377:1;26374;26370:9;26365:14;;26200:185;;;;:::o;26391:289::-;26531:34;26527:1;26519:6;26515:14;26508:58;26600:34;26595:2;26587:6;26583:15;26576:59;26669:3;26664:2;26656:6;26652:15;26645:28;26391:289;:::o;26686:366::-;26828:3;26849:67;26913:2;26908:3;26849:67;:::i;:::-;26842:74;;26925:93;27014:3;26925:93;:::i;:::-;27043:2;27038:3;27034:12;27027:19;;26686:366;;;:::o;27058:419::-;27224:4;27262:2;27251:9;27247:18;27239:26;;27311:9;27305:4;27301:20;27297:1;27286:9;27282:17;27275:47;27339:131;27465:4;27339:131;:::i;:::-;27331:139;;27058:419;;;:::o;27483:180::-;27531:77;27528:1;27521:88;27628:4;27625:1;27618:15;27652:4;27649:1;27642:15;27669:220;27809:34;27805:1;27797:6;27793:14;27786:58;27878:3;27873:2;27865:6;27861:15;27854:28;27669:220;:::o;27895:366::-;28037:3;28058:67;28122:2;28117:3;28058:67;:::i;:::-;28051:74;;28134:93;28223:3;28134:93;:::i;:::-;28252:2;28247:3;28243:12;28236:19;;27895:366;;;:::o;28267:419::-;28433:4;28471:2;28460:9;28456:18;28448:26;;28520:9;28514:4;28510:20;28506:1;28495:9;28491:17;28484:47;28548:131;28674:4;28548:131;:::i;:::-;28540:139;;28267:419;;;:::o;28692:174::-;28832:26;28828:1;28820:6;28816:14;28809:50;28692:174;:::o;28872:366::-;29014:3;29035:67;29099:2;29094:3;29035:67;:::i;:::-;29028:74;;29111:93;29200:3;29111:93;:::i;:::-;29229:2;29224:3;29220:12;29213:19;;28872:366;;;:::o;29244:419::-;29410:4;29448:2;29437:9;29433:18;29425:26;;29497:9;29491:4;29487:20;29483:1;29472:9;29468:17;29461:47;29525:131;29651:4;29525:131;:::i;:::-;29517:139;;29244:419;;;:::o;29669:141::-;29718:4;29741:3;29733:11;;29764:3;29761:1;29754:14;29798:4;29795:1;29785:18;29777:26;;29669:141;;;:::o;29840:802::-;29925:3;29962:5;29956:12;29991:36;30017:9;29991:36;:::i;:::-;30043:71;30107:6;30102:3;30043:71;:::i;:::-;30036:78;;30145:1;30134:9;30130:17;30161:1;30156:135;;;;30305:1;30300:336;;;;30123:513;;30156:135;30240:4;30236:9;30225;30221:25;30216:3;30209:38;30276:4;30271:3;30267:14;30260:21;;30156:135;;30300:336;30367:38;30399:5;30367:38;:::i;:::-;30427:1;30441:154;30455:6;30452:1;30449:13;30441:154;;;30529:7;30523:14;30519:1;30514:3;30510:11;30503:35;30579:1;30570:7;30566:15;30555:26;;30477:4;30474:1;30470:12;30465:17;;30441:154;;;30624:1;30619:3;30615:11;30608:18;;30307:329;;30123:513;;29929:713;;29840:802;;;;:::o;30648:826::-;30883:4;30921:3;30910:9;30906:19;30898:27;;30971:9;30965:4;30961:20;30957:1;30946:9;30942:17;30935:47;30999:75;31069:4;31060:6;30999:75;:::i;:::-;30991:83;;31121:9;31115:4;31111:20;31106:2;31095:9;31091:18;31084:48;31149:75;31219:4;31210:6;31149:75;:::i;:::-;31141:83;;31234:72;31302:2;31291:9;31287:18;31278:6;31234:72;:::i;:::-;31316:68;31380:2;31369:9;31365:18;31356:6;31316:68;:::i;:::-;31394:73;31462:3;31451:9;31447:19;31438:6;31394:73;:::i;:::-;30648:826;;;;;;;;:::o;31480:178::-;31620:30;31616:1;31608:6;31604:14;31597:54;31480:178;:::o;31664:366::-;31806:3;31827:67;31891:2;31886:3;31827:67;:::i;:::-;31820:74;;31903:93;31992:3;31903:93;:::i;:::-;32021:2;32016:3;32012:12;32005:19;;31664:366;;;:::o;32036:419::-;32202:4;32240:2;32229:9;32225:18;32217:26;;32289:9;32283:4;32279:20;32275:1;32264:9;32260:17;32253:47;32317:131;32443:4;32317:131;:::i;:::-;32309:139;;32036:419;;;:::o;32461:224::-;32601:34;32597:1;32589:6;32585:14;32578:58;32670:7;32665:2;32657:6;32653:15;32646:32;32461:224;:::o;32691:366::-;32833:3;32854:67;32918:2;32913:3;32854:67;:::i;:::-;32847:74;;32930:93;33019:3;32930:93;:::i;:::-;33048:2;33043:3;33039:12;33032:19;;32691:366;;;:::o;33063:419::-;33229:4;33267:2;33256:9;33252:18;33244:26;;33316:9;33310:4;33306:20;33302:1;33291:9;33287:17;33280:47;33344:131;33470:4;33344:131;:::i;:::-;33336:139;;33063:419;;;:::o;33488:162::-;33628:14;33624:1;33616:6;33612:14;33605:38;33488:162;:::o;33656:366::-;33798:3;33819:67;33883:2;33878:3;33819:67;:::i;:::-;33812:74;;33895:93;33984:3;33895:93;:::i;:::-;34013:2;34008:3;34004:12;33997:19;;33656:366;;;:::o;34028:419::-;34194:4;34232:2;34221:9;34217:18;34209:26;;34281:9;34275:4;34271:20;34267:1;34256:9;34252:17;34245:47;34309:131;34435:4;34309:131;:::i;:::-;34301:139;;34028:419;;;:::o;34453:181::-;34593:33;34589:1;34581:6;34577:14;34570:57;34453:181;:::o;34640:366::-;34782:3;34803:67;34867:2;34862:3;34803:67;:::i;:::-;34796:74;;34879:93;34968:3;34879:93;:::i;:::-;34997:2;34992:3;34988:12;34981:19;;34640:366;;;:::o;35012:419::-;35178:4;35216:2;35205:9;35201:18;35193:26;;35265:9;35259:4;35255:20;35251:1;35240:9;35236:17;35229:47;35293:131;35419:4;35293:131;:::i;:::-;35285:139;;35012:419;;;:::o;35437:222::-;35577:34;35573:1;35565:6;35561:14;35554:58;35646:5;35641:2;35633:6;35629:15;35622:30;35437:222;:::o;35665:366::-;35807:3;35828:67;35892:2;35887:3;35828:67;:::i;:::-;35821:74;;35904:93;35993:3;35904:93;:::i;:::-;36022:2;36017:3;36013:12;36006:19;;35665:366;;;:::o;36037:419::-;36203:4;36241:2;36230:9;36226:18;36218:26;;36290:9;36284:4;36280:20;36276:1;36265:9;36261:17;36254:47;36318:131;36444:4;36318:131;:::i;:::-;36310:139;;36037:419;;;:::o;36462:223::-;36602:34;36598:1;36590:6;36586:14;36579:58;36671:6;36666:2;36658:6;36654:15;36647:31;36462:223;:::o;36691:366::-;36833:3;36854:67;36918:2;36913:3;36854:67;:::i;:::-;36847:74;;36930:93;37019:3;36930:93;:::i;:::-;37048:2;37043:3;37039:12;37032:19;;36691:366;;;:::o;37063:419::-;37229:4;37267:2;37256:9;37252:18;37244:26;;37316:9;37310:4;37306:20;37302:1;37291:9;37287:17;37280:47;37344:131;37470:4;37344:131;:::i;:::-;37336:139;;37063:419;;;:::o;37488:220::-;37628:34;37624:1;37616:6;37612:14;37605:58;37697:3;37692:2;37684:6;37680:15;37673:28;37488:220;:::o;37714:366::-;37856:3;37877:67;37941:2;37936:3;37877:67;:::i;:::-;37870:74;;37953:93;38042:3;37953:93;:::i;:::-;38071:2;38066:3;38062:12;38055:19;;37714:366;;;:::o;38086:419::-;38252:4;38290:2;38279:9;38275:18;38267:26;;38339:9;38333:4;38329:20;38325:1;38314:9;38310:17;38303:47;38367:131;38493:4;38367:131;:::i;:::-;38359:139;;38086:419;;;:::o
Swarm Source
ipfs://c4c6441e856ccf11a816acedd5808063f5c11807907b0d906c101ddf664fbd60
Loading...
Loading
Loading...
Loading
[ 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.
Add Token to MetaMask (Web3)