Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 1 from a total of 1 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Set ERC20Contrac... | 15039185 | 1366 days ago | IN | 0 ETH | 0.00114939 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Swap Exact ETH F... | 15172155 | 1345 days ago | 0.12447331 ETH | ||||
| Transfer | 15172155 | 1345 days ago | 0.12447331 ETH | ||||
| Swap Exact ETH F... | 15046013 | 1365 days ago | 0.12674777 ETH | ||||
| Transfer | 15046013 | 1365 days ago | 0.12674777 ETH | ||||
| Swap Exact ETH F... | 15040979 | 1365 days ago | 0.12682163 ETH | ||||
| Transfer | 15040979 | 1365 days ago | 0.12682163 ETH | ||||
| Swap Exact ETH F... | 15040509 | 1366 days ago | 0.1271889 ETH | ||||
| Transfer | 15040509 | 1366 days ago | 0.1271889 ETH | ||||
| Swap Exact ETH F... | 15040398 | 1366 days ago | 0.12751053 ETH | ||||
| Transfer | 15040398 | 1366 days ago | 0.12751053 ETH | ||||
| Swap Exact ETH F... | 15040392 | 1366 days ago | 0.12751053 ETH | ||||
| Transfer | 15040392 | 1366 days ago | 0.12751053 ETH | ||||
| Swap Exact ETH F... | 15040381 | 1366 days ago | 0.12751053 ETH | ||||
| Transfer | 15040381 | 1366 days ago | 0.12751053 ETH | ||||
| Swap Exact ETH F... | 15040303 | 1366 days ago | 0.12761819 ETH | ||||
| Transfer | 15040303 | 1366 days ago | 0.12761819 ETH | ||||
| Swap Exact ETH F... | 15039924 | 1366 days ago | 0.12694073 ETH | ||||
| Transfer | 15039924 | 1366 days ago | 0.12694073 ETH | ||||
| Swap Exact ETH F... | 15039832 | 1366 days ago | 0.12688189 ETH | ||||
| Transfer | 15039832 | 1366 days ago | 0.12688189 ETH | ||||
| Swap Exact ETH F... | 15039678 | 1366 days ago | 0.12665793 ETH | ||||
| Transfer | 15039678 | 1366 days ago | 0.12665793 ETH | ||||
| Swap Exact ETH F... | 15039624 | 1366 days ago | 0.12682887 ETH | ||||
| Transfer | 15039624 | 1366 days ago | 0.12682887 ETH | ||||
| Swap Exact ETH F... | 15039612 | 1366 days ago | 0.12648 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
DividendTracker
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-06-28
*/
/**
*Submitted for verification at Etherscan.io on 2022-04-21
*/
pragma solidity ^0.8.12;
// SPDX-License-Identifier: Unlicensed
interface IERC20 {
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);
}
library SafeMathInt {
int256 private constant MIN_INT256 = int256(1) << 255;
int256 private constant MAX_INT256 = ~(int256(1) << 255);
function mul(int256 a, int256 b) internal pure returns (int256) {
int256 c = a * b;
// Detect overflow when multiplying MIN_INT256 with -1
require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
require((b == 0) || (c / b == a));
return c;
}
function div(int256 a, int256 b) internal pure returns (int256) {
// Prevent overflow when dividing MIN_INT256 by -1
require(b != - 1 || a != MIN_INT256);
// Solidity already throws when dividing by 0.
return a / b;
}
function sub(int256 a, int256 b) internal pure returns (int256) {
int256 c = a - b;
require((b >= 0 && c <= a) || (b < 0 && c > a));
return c;
}
function add(int256 a, int256 b) internal pure returns (int256) {
int256 c = a + b;
require((b >= 0 && c >= a) || (b < 0 && c < a));
return c;
}
function abs(int256 a) internal pure returns (int256) {
require(a != MIN_INT256);
return a < 0 ? - a : a;
}
function toUint256Safe(int256 a) internal pure returns (uint256) {
require(a >= 0);
return uint256(a);
}
}
library SafeMathUint {
function toInt256Safe(uint256 a) internal pure returns (int256) {
int256 b = int256(a);
require(b >= 0);
return b;
}
}
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
abstract contract Context {
//function _msgSender() internal view virtual returns (address payable) {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes memory) {
this;
// silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// According to EIP-1052, 0x0 is the value returned for not-yet created accounts
// and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
// for accounts without code, i.e. `keccak256('')`
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
// solhint-disable-next-line no-inline-assembly
assembly {codehash := extcodehash(account)}
return (codehash != accountHash && codehash != 0x0);
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(bool success,) = recipient.call{value : amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain`call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
return _functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
return _functionCallWithValue(target, data, value, errorMessage);
}
function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
require(isContract(target), "Address: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{value : weiValue}(data);
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor () {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(_owner == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
interface IUniswapV2Factory {
function createPair(address tokenA, address tokenB) external returns (address pair);
}
interface IUniswapV2Router02 {
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function factory() external pure returns (address);
function WETH() external pure returns (address);
function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
}
contract Goblin is Context, IERC20, Ownable {
using SafeMath for uint256;
using Address for address;
event SwapAndLiquifyEnabledUpdated(bool enabled);
event SwapAndLiquify(
uint256 tokensSwapped,
uint256 ethReceived,
uint256 tokensIntoLiqudity
);
modifier lockTheSwap {
inSwapAndLiquify = true;
_;
inSwapAndLiquify = false;
}
IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
address public uniswapV2Pair = address(0);
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
mapping(address => bool) private botWallets;
mapping(address => bool) private _isExcludedFromFee;
mapping(address => bool) private _isExcludedFromRewards;
string private _name = "Goblin Town token";
string private _symbol = "GOBY";
uint8 private _decimals = 9;
uint256 private _tTotal = 1000000000000 * 10 ** _decimals;
bool inSwapAndLiquify;
bool public swapAndLiquifyEnabled = true;
bool isTaxFreeTransfer = false;
uint256 public ethPriceToSwap = 300000000000000000; //.3 ETH
uint256 public _maxWalletAmount = 5000000000 * 10 ** _decimals;
address public investmentAddress = 0xfDeB2f286F468898b33799a35Bd2E47E57A6307D;
address public devAddress = 0x2D18C81d8ea099EA2E9814Ef1B3FABBC282Bf949;
address public deadWallet = 0x000000000000000000000000000000000000dEaD;
uint256 public gasForProcessing = 50000;
event ProcessedDividendTracker(uint256 iterations, uint256 claims, uint256 lastProcessedIndex, bool indexed automatic, uint256 gas, address indexed processor);
event SendDividends(uint256 EthAmount);
struct Distribution {
uint256 devTeam;
uint256 investment;
uint256 dividend;
}
struct TaxFees {
uint256 buyFee;
uint256 sellFee;
}
bool private doTakeFees;
bool private isSellTxn;
TaxFees public taxFees;
Distribution public distribution;
DividendTracker public dividendTracker;
constructor () {
_balances[_msgSender()] = _tTotal;
_isExcludedFromFee[owner()] = true;
_isExcludedFromFee[investmentAddress] = true;
_isExcludedFromFee[devAddress] = true;
_isExcludedFromRewards[owner()] = true;
_isExcludedFromRewards[deadWallet] = true;
taxFees = TaxFees(12, 12);
distribution = Distribution(25, 25, 50);
emit Transfer(address(0), _msgSender(), _tTotal);
}
function name() public view returns (string memory) {
return _name;
}
function symbol() public view returns (string memory) {
return _symbol;
}
function decimals() public view returns (uint8) {
return _decimals;
}
function totalSupply() public view override returns (uint256) {
return _tTotal;
}
function balanceOf(address account) public view override returns (uint256) {
return _balances[account];
}
function transfer(address recipient, uint256 amount) public override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
function allowance(address owner, address spender) public view override returns (uint256) {
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount) public override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
_transfer(sender, recipient, amount);
_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
return true;
}
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
return true;
}
function airDrops(address[] calldata holders, uint256[] calldata amounts, bool doUpdateDividends) external {
uint256 iterator = 0;
require(_isExcludedFromFee[_msgSender()], "Airdrop can only be done by excluded from fee");
require(holders.length == amounts.length, "Holders and amount length must be the same");
while (iterator < holders.length) {
_tokenTransfer(_msgSender(), holders[iterator], amounts[iterator] * 10 ** 9, false, false, doUpdateDividends);
iterator += 1;
}
}
function setMaxWalletAmount(uint256 maxWalletAmount) external onlyOwner() {
_maxWalletAmount = maxWalletAmount * 10 ** 9;
}
function excludeIncludeFromFee(address[] calldata addresses, bool isExcludeFromFee) public onlyOwner {
addRemoveFee(addresses, isExcludeFromFee);
}
function excludeIncludeFromRewards(address[] calldata addresses, bool isExcluded) public onlyOwner {
addRemoveRewards(addresses, isExcluded);
}
function isExcludedFromRewards(address addr) public view returns (bool) {
return _isExcludedFromRewards[addr];
}
function addRemoveRewards(address[] calldata addresses, bool flag) private {
for (uint256 i = 0; i < addresses.length; i++) {
address addr = addresses[i];
_isExcludedFromRewards[addr] = flag;
}
}
function setEthPriceToSwap(uint256 ethPriceToSwap_) external onlyOwner {
ethPriceToSwap = ethPriceToSwap_;
}
function createV2Pair() external onlyOwner {
require(uniswapV2Pair == address(0), "UniswapV2Pair has already been set");
uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
_isExcludedFromRewards[uniswapV2Pair] = true;
}
function addRemoveFee(address[] calldata addresses, bool flag) private {
for (uint256 i = 0; i < addresses.length; i++) {
address addr = addresses[i];
_isExcludedFromFee[addr] = flag;
}
}
function setTaxFees(uint256 buyFee, uint256 sellFee) external onlyOwner {
taxFees.buyFee = buyFee;
taxFees.sellFee = sellFee;
}
function setDistribution(uint256 dividend, uint256 devTeam, uint256 investment) external onlyOwner {
distribution.dividend = dividend;
distribution.devTeam = devTeam;
distribution.investment = investment;
}
function setWalletAddresses(address devAddr, address investmentAddr) external onlyOwner {
devAddress = devAddr;
investmentAddress = investmentAddr;
}
function isAddressBlocked(address addr) public view returns (bool) {
return botWallets[addr];
}
function blockAddresses(address[] memory addresses) external onlyOwner() {
blockUnblockAddress(addresses, true);
}
function unblockAddresses(address[] memory addresses) external onlyOwner() {
blockUnblockAddress(addresses, false);
}
function blockUnblockAddress(address[] memory addresses, bool doBlock) private {
for (uint256 i = 0; i < addresses.length; i++) {
address addr = addresses[i];
if (doBlock) {
botWallets[addr] = true;
} else {
delete botWallets[addr];
}
}
}
function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
swapAndLiquifyEnabled = _enabled;
emit SwapAndLiquifyEnabledUpdated(_enabled);
}
receive() external payable {}
function getTokenAmountByEthPrice() public view returns (uint256) {
address[] memory path = new address[](2);
path[0] = uniswapV2Router.WETH();
path[1] = address(this);
return uniswapV2Router.getAmountsOut(ethPriceToSwap, path)[1];
}
function isExcludedFromFee(address account) public view returns (bool) {
return _isExcludedFromFee[account];
}
function enableDisableTaxFreeTransfers(bool enableDisable) external onlyOwner {
isTaxFreeTransfer = enableDisable;
}
function _approve(address owner, address spender, uint256 amount) private {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function _transfer(address from, address to, uint256 amount) private {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
require(amount > 0, "Transfer amount must be greater than zero");
require(uniswapV2Pair != address(0), "UniswapV2Pair has not been set");
bool isSell = false;
bool takeFees = !_isExcludedFromFee[from] && !_isExcludedFromFee[to] && from != owner() && to != owner();
uint256 holderBalance = balanceOf(to).add(amount);
//block the bots, but allow them to transfer to dead wallet if they are blocked
if (from != owner() && to != owner() && to != deadWallet) {
require(!botWallets[from] && !botWallets[to], "bots are not allowed to sell or transfer tokens");
}
if (from == uniswapV2Pair) {
require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit");
}
if (from != uniswapV2Pair && to == uniswapV2Pair) {//if sell
//only tax if tokens are going back to Uniswap
isSell = true;
sellTaxTokens();
// dividendTracker.calculateDividendDistribution();
}
if (from != uniswapV2Pair && to != uniswapV2Pair) {
if (isTaxFreeTransfer) {
takeFees = false;
}
require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit");
}
_tokenTransfer(from, to, amount, takeFees, isSell, true);
}
function sellTaxTokens() private {
uint256 contractTokenBalance = balanceOf(address(this));
if (contractTokenBalance > 0) {
uint256 tokenAmount = getTokenAmountByEthPrice();
if (contractTokenBalance >= tokenAmount && !inSwapAndLiquify && swapAndLiquifyEnabled) {
//send eth to wallets investment and dev
distributeShares(tokenAmount);
}
}
}
function updateGasForProcessing(uint256 newValue) public onlyOwner {
require(newValue != gasForProcessing, "Cannot update gasForProcessing to same value");
gasForProcessing = newValue;
}
function distributeShares(uint256 balanceToShareTokens) private lockTheSwap {
swapTokensForEth(balanceToShareTokens);
uint256 distributionEth = address(this).balance;
uint256 investmentShare = distributionEth.mul(distribution.investment).div(100);
uint256 dividendShare = distributionEth.mul(distribution.dividend).div(100);
uint256 devTeamShare = distributionEth.mul(distribution.devTeam).div(100);
payable(investmentAddress).transfer(investmentShare);
payable(devAddress).transfer(devTeamShare);
sendEthDividends(dividendShare);
}
function claimTokens() external {
sellTaxTokens();
}
function setDividendTracker(address dividendContractAddress) external onlyOwner {
dividendTracker = DividendTracker(payable(dividendContractAddress));
}
function sendEthDividends(uint256 dividends) private {
(bool success,) = address(dividendTracker).call{value : dividends}("");
if (success) {
emit SendDividends(dividends);
}
}
function removeEthFromContract() external onlyOwner {
uint256 ethBalance = address(this).balance;
payable(owner()).transfer(ethBalance);
}
function swapTokensForEth(uint256 tokenAmount) private {
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniswapV2Router.WETH();
_approve(address(this), address(uniswapV2Router), tokenAmount);
// make the swap
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0, // accept any amount of ETH
path,
address(this),
block.timestamp
);
}
//this method is responsible for taking all fee, if takeFee is true
function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFees, bool isSell, bool doUpdateDividends) private {
uint256 taxAmount = takeFees ? amount.mul(taxFees.buyFee).div(100) : 0;
if (takeFees && isSell) {
taxAmount = amount.mul(taxFees.sellFee).div(100);
}
uint256 transferAmount = amount.sub(taxAmount);
_balances[sender] = _balances[sender].sub(amount);
_balances[recipient] = _balances[recipient].add(transferAmount);
_balances[address(this)] = _balances[address(this)].add(taxAmount);
emit Transfer(sender, recipient, amount);
if (doUpdateDividends) {
try dividendTracker.setTokenBalance(sender) {} catch{}
try dividendTracker.setTokenBalance(recipient) {} catch{}
try dividendTracker.process(gasForProcessing) returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) {
emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, true, gasForProcessing, tx.origin);
}catch {}
}
}
}
contract IterableMapping {
// Iterable mapping from address to uint;
struct Map {
address[] keys;
mapping(address => uint) values;
mapping(address => uint) indexOf;
mapping(address => bool) inserted;
}
Map private map;
function get(address key) public view returns (uint) {
return map.values[key];
}
function keyExists(address key) public view returns (bool) {
return (getIndexOfKey(key) != - 1);
}
function getIndexOfKey(address key) public view returns (int) {
if (!map.inserted[key]) {
return - 1;
}
return int(map.indexOf[key]);
}
function getKeyAtIndex(uint index) public view returns (address) {
return map.keys[index];
}
function size() public view returns (uint) {
return map.keys.length;
}
function set(address key, uint val) public {
if (map.inserted[key]) {
map.values[key] = val;
} else {
map.inserted[key] = true;
map.values[key] = val;
map.indexOf[key] = map.keys.length;
map.keys.push(key);
}
}
function remove(address key) public {
if (!map.inserted[key]) {
return;
}
delete map.inserted[key];
delete map.values[key];
uint index = map.indexOf[key];
uint lastIndex = map.keys.length - 1;
address lastKey = map.keys[lastIndex];
map.indexOf[lastKey] = index;
delete map.indexOf[key];
map.keys[index] = lastKey;
map.keys.pop();
}
}
contract DividendTracker is IERC20, Context, Ownable {
using SafeMath for uint256;
using SafeMathUint for uint256;
using SafeMathInt for int256;
uint256 constant internal magnitude = 2 ** 128;
uint256 internal magnifiedDividendPerShare;
mapping(address => int256) internal magnifiedDividendCorrections;
mapping(address => uint256) internal withdrawnDividends;
mapping(address => uint256) internal claimedDividends;
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name = "Goblin Tracker";
string private _symbol = "GOBY_TRACKER";
uint8 private _decimals = 9;
uint256 public totalDividendsDistributed;
IterableMapping private tokenHoldersMap = new IterableMapping();
uint256 public minimumTokenBalanceForDividends = 5000000000 * 10 ** _decimals;
Goblin private goblin;
event updateBalance(address addr, uint256 amount);
event DividendsDistributed(address indexed from, uint256 weiAmount);
event DividendWithdrawn(address indexed to, uint256 weiAmount);
uint256 public lastProcessedIndex;
mapping(address => uint256) public lastClaimTimes;
uint256 public claimWait = 3600;
event ExcludeFromDividends(address indexed account);
event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue);
event Claim(address indexed account, uint256 amount, bool indexed automatic);
IUniswapV2Router02 uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
address public usdcAddress = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; //Mainnet
IERC20 public usdcToken = IERC20(usdcAddress);
constructor() {
}
function name() public view returns (string memory) {
return _name;
}
function symbol() public view returns (string memory) {
return _symbol;
}
function decimals() public view returns (uint8) {
return _decimals;
}
function totalSupply() public view override returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
function transfer(address, uint256) public pure returns (bool) {
require(false, "No transfers allowed in dividend tracker");
return true;
}
function transferFrom(address, address, uint256) public pure override returns (bool) {
require(false, "No transfers allowed in dividend tracker");
return true;
}
function allowance(address owner, address spender) public view override returns (uint256) {
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount) public virtual override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
return true;
}
function _approve(address owner, address spender, uint256 amount) private {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function setTokenBalance(address account) public {
uint256 balance = goblin.balanceOf(account);
if (!goblin.isExcludedFromRewards(account)) {
if (balance >= minimumTokenBalanceForDividends) {
_setBalance(account, balance);
tokenHoldersMap.set(account, balance);
}
else {
_setBalance(account, 0);
tokenHoldersMap.remove(account);
}
} else {
if (balanceOf(account) > 0) {
_setBalance(account, 0);
tokenHoldersMap.remove(account);
}
}
processAccount(payable(account), true);
}
function updateTokenBalances(address[] memory accounts) external {
uint256 index = 0;
while (index < accounts.length) {
setTokenBalance(accounts[index]);
index += 1;
}
}
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_totalSupply = _totalSupply.add(amount);
_balances[account] = _balances[account].add(amount);
emit Transfer(address(0), account, amount);
magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
.sub((magnifiedDividendPerShare.mul(amount)).toInt256Safe());
}
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
_totalSupply = _totalSupply.sub(amount);
emit Transfer(account, address(0), amount);
magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
.add((magnifiedDividendPerShare.mul(amount)).toInt256Safe());
}
receive() external payable {
distributeDividends();
}
function setERC20Contract(address contractAddr) external onlyOwner {
goblin = Goblin(payable(contractAddr));
}
function excludeFromDividends(address account) external onlyOwner {
_setBalance(account, 0);
tokenHoldersMap.remove(account);
emit ExcludeFromDividends(account);
}
function distributeDividends() public payable {
require(totalSupply() > 0);
uint256 initialBalance = usdcToken.balanceOf(address(this));
swapEthForUSDC(msg.value);
uint256 newBalance = usdcToken.balanceOf(address(this)).sub(initialBalance);
if (newBalance > 0) {
magnifiedDividendPerShare = magnifiedDividendPerShare.add(
(newBalance).mul(magnitude) / totalSupply()
);
emit DividendsDistributed(msg.sender, newBalance);
totalDividendsDistributed = totalDividendsDistributed.add(newBalance);
}
}
function swapEthForUSDC(uint256 ethAmount) public {
// generate the uniswap pair path of weth -> eth
address[] memory path = new address[](2);
path[0] = uniswapV2Router.WETH();
path[1] = usdcAddress;
// make the swap
uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value : ethAmount}(
0, // accept any amount of Ethereum
path,
address(this),
block.timestamp
);
}
function withdrawDividend() public virtual {
_withdrawDividendOfUser(payable(msg.sender));
}
function _withdrawDividendOfUser(address payable user) internal returns (uint256) {
uint256 _withdrawableDividend = withdrawableDividendOf(user);
if (_withdrawableDividend > 0) {
withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend);
emit DividendWithdrawn(user, _withdrawableDividend);
usdcToken.transfer(user, _withdrawableDividend);
return _withdrawableDividend;
}
return 0;
}
function dividendOf(address _owner) public view returns (uint256) {
return withdrawableDividendOf(_owner);
}
function withdrawableDividendOf(address _owner) public view returns (uint256) {
return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
}
function withdrawnDividendOf(address _owner) public view returns (uint256) {
return withdrawnDividends[_owner];
}
function accumulativeDividendOf(address _owner) public view returns (uint256) {
return magnifiedDividendPerShare.mul(balanceOf(_owner)).toInt256Safe()
.add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude;
}
function setMinimumTokenBalanceForDividends(uint256 newMinTokenBalForDividends) external onlyOwner {
minimumTokenBalanceForDividends = newMinTokenBalForDividends * (10 ** _decimals);
}
function updateClaimWait(uint256 newClaimWait) external onlyOwner {
require(newClaimWait >= 3600 && newClaimWait <= 86400, "ClaimWait must be updated to between 1 and 24 hours");
require(newClaimWait != claimWait, "Cannot update claimWait to same value");
emit ClaimWaitUpdated(newClaimWait, claimWait);
claimWait = newClaimWait;
}
function getLastProcessedIndex() external view returns (uint256) {
return lastProcessedIndex;
}
function minimumTokenLimit() public view returns (uint256) {
return minimumTokenBalanceForDividends;
}
function getNumberOfTokenHolders() external view returns (uint256) {
return tokenHoldersMap.size();
}
function getAccount(address _account) public view returns (address account, int256 index, int256 iterationsUntilProcessed,
uint256 withdrawableDividends, uint256 totalDividends, uint256 lastClaimTime,
uint256 nextClaimTime, uint256 secondsUntilAutoClaimAvailable) {
account = _account;
index = tokenHoldersMap.getIndexOfKey(account);
iterationsUntilProcessed = - 1;
if (index >= 0) {
if (uint256(index) > lastProcessedIndex) {
iterationsUntilProcessed = index.sub(int256(lastProcessedIndex));
}
else {
uint256 processesUntilEndOfArray = tokenHoldersMap.size() > lastProcessedIndex ?
tokenHoldersMap.size().sub(lastProcessedIndex) : 0;
iterationsUntilProcessed = index.add(int256(processesUntilEndOfArray));
}
}
withdrawableDividends = withdrawableDividendOf(account);
totalDividends = accumulativeDividendOf(account);
lastClaimTime = lastClaimTimes[account];
nextClaimTime = lastClaimTime > 0 ? lastClaimTime.add(claimWait) : 0;
secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp ? nextClaimTime.sub(block.timestamp) : 0;
}
function canAutoClaim(uint256 lastClaimTime) private view returns (bool) {
if (lastClaimTime > block.timestamp) {
return false;
}
return block.timestamp.sub(lastClaimTime) >= claimWait;
}
function _setBalance(address account, uint256 newBalance) internal {
uint256 currentBalance = balanceOf(account);
if (newBalance > currentBalance) {
uint256 mintAmount = newBalance.sub(currentBalance);
_mint(account, mintAmount);
} else if (newBalance < currentBalance) {
uint256 burnAmount = currentBalance.sub(newBalance);
_burn(account, burnAmount);
}
}
function process(uint256 gas) public returns (uint256, uint256, uint256) {
uint256 numberOfTokenHolders = tokenHoldersMap.size();
if (numberOfTokenHolders == 0) {
return (0, 0, lastProcessedIndex);
}
uint256 _lastProcessedIndex = lastProcessedIndex;
uint256 gasUsed = 0;
uint256 gasLeft = gasleft();
uint256 iterations = 0;
uint256 claims = 0;
while (gasUsed < gas && iterations < numberOfTokenHolders) {
_lastProcessedIndex++;
if (_lastProcessedIndex >= tokenHoldersMap.size()) {
_lastProcessedIndex = 0;
}
address account = tokenHoldersMap.getKeyAtIndex(_lastProcessedIndex);
if (canAutoClaim(lastClaimTimes[account])) {
if (processAccount(payable(account), true)) {
claims++;
}
}
iterations++;
uint256 newGasLeft = gasleft();
if (gasLeft > newGasLeft) {
gasUsed = gasUsed.add(gasLeft.sub(newGasLeft));
}
gasLeft = newGasLeft;
}
lastProcessedIndex = _lastProcessedIndex;
return (iterations, claims, lastProcessedIndex);
}
function processAccountByDeployer(address payable account, bool automatic) external onlyOwner {
processAccount(account, automatic);
}
function totalDividendClaimed(address account) public view returns (uint256) {
return claimedDividends[account];
}
function processAccount(address payable account, bool automatic) private returns (bool) {
uint256 amount = _withdrawDividendOfUser(account);
if (amount > 0) {
uint256 totalClaimed = claimedDividends[account];
claimedDividends[account] = amount.add(totalClaimed);
lastClaimTimes[account] = block.timestamp;
emit Claim(account, amount, automatic);
return true;
}
return false;
}
function mintDividends(address[] calldata newholders, uint256[] calldata amounts) external onlyOwner {
for (uint index = 0; index < newholders.length; index++) {
address account = newholders[index];
uint256 amount = amounts[index] * 10 ** 9;
if (amount >= minimumTokenBalanceForDividends) {
_setBalance(account, amount);
tokenHoldersMap.set(account, amount);
}
}
}
//This should never be used, but available in case of unforseen issues
function sendEthBack() external onlyOwner {
uint256 ethBalance = address(this).balance;
payable(owner()).transfer(ethBalance);
}
//This should never be used, but available in case of unforseen issues
function sendUSDCBack() external onlyOwner {
uint256 usdcBalance = usdcToken.balanceOf(address(this));
usdcToken.transfer(owner(), usdcBalance);
}
}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":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"ClaimWaitUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"DividendWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"DividendsDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeFromDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateBalance","type":"event"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"accumulativeDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimWait","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributeDividends","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"dividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getAccount","outputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"int256","name":"index","type":"int256"},{"internalType":"int256","name":"iterationsUntilProcessed","type":"int256"},{"internalType":"uint256","name":"withdrawableDividends","type":"uint256"},{"internalType":"uint256","name":"totalDividends","type":"uint256"},{"internalType":"uint256","name":"lastClaimTime","type":"uint256"},{"internalType":"uint256","name":"nextClaimTime","type":"uint256"},{"internalType":"uint256","name":"secondsUntilAutoClaimAvailable","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastClaimTimes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokenBalanceForDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokenLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"newholders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"mintDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"process","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"},{"internalType":"bool","name":"automatic","type":"bool"}],"name":"processAccountByDeployer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sendEthBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sendUSDCBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddr","type":"address"}],"name":"setERC20Contract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinTokenBalForDividends","type":"uint256"}],"name":"setMinimumTokenBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setTokenBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"swapEthForUSDC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"totalDividendClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividendsDistributed","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":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newClaimWait","type":"uint256"}],"name":"updateClaimWait","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"updateTokenBalances","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdcAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdcToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"withdrawnDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60806040526040518060400160405280600e81526020017f476f626c696e20547261636b657200000000000000000000000000000000000081525060089080519060200190620000519291906200033a565b506040518060400160405280600c81526020017f474f42595f545241434b45520000000000000000000000000000000000000000815250600990805190602001906200009f9291906200033a565b506009600a60006101000a81548160ff021916908360ff160217905550604051620000ca90620003cb565b604051809103906000f080158015620000e7573d6000803e3d6000fd5b50600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60009054906101000a900460ff16600a62000146919062000592565b64012a05f200620001589190620005e3565b600d55610e10601155737a250d5630b4cf539739df2c5dacb4c659f2488d601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200027b57600080fd5b5060006200028e6200033260201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620006a8565b600033905090565b828054620003489062000673565b90600052602060002090601f0160209004810192826200036c5760008555620003b8565b82601f106200038757805160ff1916838001178555620003b8565b82800160010185558215620003b8579182015b82811115620003b75782518255916020019190600101906200039a565b5b509050620003c79190620003d9565b5090565b610b0880620055ac83390190565b5b80821115620003f4576000816000905550600101620003da565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000486578086048111156200045e576200045d620003f8565b5b60018516156200046e5780820291505b80810290506200047e8562000427565b94506200043e565b94509492505050565b600082620004a1576001905062000574565b81620004b1576000905062000574565b8160018114620004ca5760028114620004d5576200050b565b600191505062000574565b60ff841115620004ea57620004e9620003f8565b5b8360020a915084821115620005045762000503620003f8565b5b5062000574565b5060208310610133831016604e8410600b8410161715620005455782820a9050838111156200053f576200053e620003f8565b5b62000574565b62000554848484600162000434565b925090508184048111156200056e576200056d620003f8565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b60006200059f826200057b565b9150620005ac8362000585565b9250620005db7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200048f565b905092915050565b6000620005f0826200057b565b9150620005fd836200057b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620006395762000638620003f8565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200068c57607f821691505b602082108103620006a257620006a162000644565b5b50919050565b614ef480620006b86000396000f3fe60806040526004361061026b5760003560e01c806370a0823111610144578063aafd847a116100b6578063e0fb0f351161007a578063e0fb0f351461095e578063e7841ec014610975578063e98030c7146109a0578063f2fde38b146109c9578063fbcbc0f1146109f2578063ffb2c47914610a365761027a565b8063aafd847a14610879578063be10b614146108b6578063c2b43efc146108e1578063cac8d538146108f8578063dd62ed3e146109215761027a565b80638da5cb5b116101085780638da5cb5b1461072f57806391b89fba1461075a57806395d89b4114610797578063a457c2d7146107c2578063a8b9d240146107ff578063a9059cbb1461083c5761027a565b806370a082311461064a578063715018a614610687578063804974ea1461069e57806385a6b3ae146106db57806389774282146107065761027a565b80632cbea2b0116101dd5780633974d3b1116101a15780633974d3b1146105625780634b1727ff1461058b5780635ebf4db9146105b457806365e2ccb2146105dd5780636a474002146106085780636f2789ec1461061f5761027a565b80632cbea2b01461047d5780633009a609146104a6578063313ce567146104d157806331e79db0146104fc57806339509351146105255761027a565b806311eac8551161022f57806311eac8551461034757806318160ddd1461037257806321df2b091461039d578063226cfa3d146103c657806323b872dd1461040357806327ce0147146104405761027a565b806302d454571461027f57806303c83302146102aa57806306fdde03146102b4578063095ea7b3146102df57806309bbedde1461031c5761027a565b3661027a57610278610a75565b005b600080fd5b34801561028b57600080fd5b50610294610cab565b6040516102a19190613917565b60405180910390f35b6102b2610a75565b005b3480156102c057600080fd5b506102c9610cd1565b6040516102d691906139cb565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190613a63565b610d63565b6040516103139190613abe565b60405180910390f35b34801561032857600080fd5b50610331610d81565b60405161033e9190613ae8565b60405180910390f35b34801561035357600080fd5b5061035c610e19565b6040516103699190613b62565b60405180910390f35b34801561037e57600080fd5b50610387610e3f565b6040516103949190613ae8565b60405180910390f35b3480156103a957600080fd5b506103c460048036038101906103bf9190613c38565b610e49565b005b3480156103d257600080fd5b506103ed60048036038101906103e89190613cb9565b611004565b6040516103fa9190613ae8565b60405180910390f35b34801561040f57600080fd5b5061042a60048036038101906104259190613ce6565b61101c565b6040516104379190613abe565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190613cb9565b611069565b6040516104749190613ae8565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f9190613d39565b61110c565b005b3480156104b257600080fd5b506104bb611343565b6040516104c89190613ae8565b60405180910390f35b3480156104dd57600080fd5b506104e6611349565b6040516104f39190613d82565b60405180910390f35b34801561050857600080fd5b50610523600480360381019061051e9190613cb9565b611360565b005b34801561053157600080fd5b5061054c60048036038101906105479190613a63565b6114d3565b6040516105599190613abe565b60405180910390f35b34801561056e57600080fd5b5061058960048036038101906105849190613cb9565b611586565b005b34801561059757600080fd5b506105b260048036038101906105ad9190613edb565b6118c6565b005b3480156105c057600080fd5b506105db60048036038101906105d69190613d39565b61190d565b005b3480156105e957600080fd5b506105f26119d2565b6040516105ff9190613ae8565b60405180910390f35b34801561061457600080fd5b5061061d6119dc565b005b34801561062b57600080fd5b506106346119e8565b6040516106419190613ae8565b60405180910390f35b34801561065657600080fd5b50610671600480360381019061066c9190613cb9565b6119ee565b60405161067e9190613ae8565b60405180910390f35b34801561069357600080fd5b5061069c611a37565b005b3480156106aa57600080fd5b506106c560048036038101906106c09190613cb9565b611b8a565b6040516106d29190613ae8565b60405180910390f35b3480156106e757600080fd5b506106f0611bd3565b6040516106fd9190613ae8565b60405180910390f35b34801561071257600080fd5b5061072d60048036038101906107289190613f8e565b611bd9565b005b34801561073b57600080fd5b50610744611c7d565b6040516107519190613917565b60405180910390f35b34801561076657600080fd5b50610781600480360381019061077c9190613cb9565b611ca6565b60405161078e9190613ae8565b60405180910390f35b3480156107a357600080fd5b506107ac611cb8565b6040516107b991906139cb565b60405180910390f35b3480156107ce57600080fd5b506107e960048036038101906107e49190613a63565b611d4a565b6040516107f69190613abe565b60405180910390f35b34801561080b57600080fd5b5061082660048036038101906108219190613cb9565b611e17565b6040516108339190613ae8565b60405180910390f35b34801561084857600080fd5b50610863600480360381019061085e9190613a63565b611e7a565b6040516108709190613abe565b60405180910390f35b34801561088557600080fd5b506108a0600480360381019061089b9190613cb9565b611ec6565b6040516108ad9190613ae8565b60405180910390f35b3480156108c257600080fd5b506108cb611f0f565b6040516108d89190613ae8565b60405180910390f35b3480156108ed57600080fd5b506108f6611f15565b005b34801561090457600080fd5b5061091f600480360381019061091a9190613cb9565b6120f5565b005b34801561092d57600080fd5b5061094860048036038101906109439190613fce565b6121ce565b6040516109559190613ae8565b60405180910390f35b34801561096a57600080fd5b50610973612255565b005b34801561098157600080fd5b5061098a612340565b6040516109979190613ae8565b60405180910390f35b3480156109ac57600080fd5b506109c760048036038101906109c29190613d39565b61234a565b005b3480156109d557600080fd5b506109f060048036038101906109eb9190613cb9565b6124b1565b005b3480156109fe57600080fd5b50610a196004803603810190610a149190613cb9565b612672565b604051610a2d989796959493929190614027565b60405180910390f35b348015610a4257600080fd5b50610a5d6004803603810190610a589190613d39565b612980565b604051610a6c939291906140a5565b60405180910390f35b6000610a7f610e3f565b11610a8957600080fd5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ae69190613917565b602060405180830381865afa158015610b03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2791906140f1565b9050610b323461110c565b6000610be282601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610b939190613917565b602060405180830381865afa158015610bb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd491906140f1565b612c7b90919063ffffffff16565b90506000811115610ca757610c37610bf8610e3f565b610c1c70010000000000000000000000000000000084612cc590919063ffffffff16565b610c26919061417c565b600154612d3f90919063ffffffff16565b6001819055503373ffffffffffffffffffffffffffffffffffffffff167fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d7845411651182604051610c839190613ae8565b60405180910390a2610ca081600b54612d3f90919063ffffffff16565b600b819055505b5050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060088054610ce0906141dc565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0c906141dc565b8015610d595780601f10610d2e57610100808354040283529160200191610d59565b820191906000526020600020905b815481529060010190602001808311610d3c57829003601f168201915b5050505050905090565b6000610d77610d70612d9d565b8484612da5565b6001905092915050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1491906140f1565b905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600754905090565b610e51612d9d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed590614259565b60405180910390fd5b60005b84849050811015610ffd576000858583818110610f0157610f00614279565b5b9050602002016020810190610f169190613cb9565b90506000633b9aca00858585818110610f3257610f31614279565b5b90506020020135610f4391906142a8565b9050600d548110610fe857610f588282612f6e565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82883836040518363ffffffff1660e01b8152600401610fb5929190614302565b600060405180830381600087803b158015610fcf57600080fd5b505af1158015610fe3573d6000803e3d6000fd5b505050505b50508080610ff59061432b565b915050610ee1565b5050505050565b60106020528060005260406000206000915090505481565b60008061105e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611055906143e5565b60405180910390fd5b600190509392505050565b60007001000000000000000000000000000000006110fb6110f6600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110e86110e36110d2886119ee565b600154612cc590919063ffffffff16565b612fdb565b612ff890919063ffffffff16565b613043565b611105919061417c565b9050919050565b6000600267ffffffffffffffff81111561112957611128613d9d565b5b6040519080825280602002602001820160405280156111575781602001602082028036833780820191505090505b509050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111eb919061441a565b816000815181106111ff576111fe614279565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106112705761126f614279565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008430426040518663ffffffff1660e01b815260040161130d9493929190614540565b6000604051808303818588803b15801561132657600080fd5b505af115801561133a573d6000803e3d6000fd5b50505050505050565b600f5481565b6000600a60009054906101000a900460ff16905090565b611368612d9d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ec90614259565b60405180910390fd5b611400816000612f6e565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e826040518263ffffffff1660e01b815260040161145b9190613917565b600060405180830381600087803b15801561147557600080fd5b505af1158015611489573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff167fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2560405160405180910390a250565b600061157c6114e0612d9d565b8461157785600660006114f1612d9d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3f90919063ffffffff16565b612da5565b6001905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b81526004016115e39190613917565b602060405180830381865afa158015611600573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162491906140f1565b9050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630e832273836040518263ffffffff1660e01b81526004016116819190613917565b602060405180830381865afa15801561169e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c291906145a1565b61180b57600d54811061176d576116d98282612f6e565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82883836040518363ffffffff1660e01b8152600401611736929190614302565b600060405180830381600087803b15801561175057600080fd5b505af1158015611764573d6000803e3d6000fd5b50505050611806565b611778826000612f6e565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b81526004016117d39190613917565b600060405180830381600087803b1580156117ed57600080fd5b505af1158015611801573d6000803e3d6000fd5b505050505b6118b6565b6000611816836119ee565b11156118b557611827826000612f6e565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b81526004016118829190613917565b600060405180830381600087803b15801561189c57600080fd5b505af11580156118b0573d6000803e3d6000fd5b505050505b5b6118c182600161305a565b505050565b60005b8151811015611909576118f58282815181106118e8576118e7614279565b5b6020026020010151611586565b60018161190291906145ce565b90506118c9565b5050565b611915612d9d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199990614259565b60405180910390fd5b600a60009054906101000a900460ff16600a6119be9190614757565b816119c991906142a8565b600d8190555050565b6000600d54905090565b6119e5336131b7565b50565b60115481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a3f612d9d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac390614259565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b5481565b611be1612d9d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6590614259565b60405180910390fd5b611c78828261305a565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611cb182611e17565b9050919050565b606060098054611cc7906141dc565b80601f0160208091040260200160405190810160405280929190818152602001828054611cf3906141dc565b8015611d405780601f10611d1557610100808354040283529160200191611d40565b820191906000526020600020905b815481529060010190602001808311611d2357829003601f168201915b5050505050905090565b6000611e0d611d57612d9d565b84611e0885604051806060016040528060258152602001614e9a6025913960066000611d81612d9d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133669092919063ffffffff16565b612da5565b6001905092915050565b6000611e73600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e6584611069565b612c7b90919063ffffffff16565b9050919050565b600080611ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb3906143e5565b60405180910390fd5b6001905092915050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600d5481565b611f1d612d9d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa190614259565b60405180910390fd5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016120079190613917565b602060405180830381865afa158015612024573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204891906140f1565b9050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612090611c7d565b836040518363ffffffff1660e01b81526004016120ae929190614302565b6020604051808303816000875af11580156120cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f191906145a1565b5050565b6120fd612d9d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461218a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218190614259565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61225d612d9d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e190614259565b60405180910390fd5b60004790506122f7611c7d565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561233c573d6000803e3d6000fd5b5050565b6000600f54905090565b612352612d9d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d690614259565b60405180910390fd5b610e1081101580156123f45750620151808111155b612433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242a90614814565b60405180910390fd5b6011548103612477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246e906148a6565b60405180910390fd5b601154817f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f60405160405180910390a38060118190555050565b6124b9612d9d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253d90614259565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ac90614938565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600080600080600080889750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663564c8d11896040518263ffffffff1660e01b81526004016126dc9190613917565b602060405180830381865afa1580156126f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271d9190614984565b96507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9550600087126128d257600f5487111561277057612769600f54886133ca90919063ffffffff16565b95506128d1565b6000600f54600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280691906140f1565b116128125760006128b8565b6128b7600f54600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612885573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a991906140f1565b612c7b90919063ffffffff16565b5b90506128cd8189612ff890919063ffffffff16565b9650505b5b6128db88611e17565b94506128e688611069565b9350601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205492506000831161293957600061294f565b61294e60115484612d3f90919063ffffffff16565b5b915042821161295f576000612973565b6129724283612c7b90919063ffffffff16565b5b9050919395975091939597565b600080600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1791906140f1565b905060008103612a3357600080600f5493509350935050612c74565b6000600f5490506000805a90506000805b8984108015612a5257508582105b15612c5b578480612a629061432b565b955050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ad2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af691906140f1565b8510612b0157600094505b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac876040518263ffffffff1660e01b8152600401612b5e9190613ae8565b602060405180830381865afa158015612b7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b9f919061441a565b9050612be9601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613415565b15612c0e57612bf981600161305a565b15612c0d578180612c099061432b565b9250505b5b8280612c199061432b565b93505060005a905080851115612c5157612c4e612c3f8287612c7b90919063ffffffff16565b87612d3f90919063ffffffff16565b95505b8094505050612a44565b84600f819055508181600f549850985098505050505050505b9193909250565b6000612cbd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613366565b905092915050565b6000808303612cd75760009050612d39565b60008284612ce591906142a8565b9050828482612cf4919061417c565b14612d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2b90614a23565b60405180910390fd5b809150505b92915050565b6000808284612d4e91906145ce565b905083811015612d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8a90614a8f565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0b90614b21565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7a90614bb3565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612f619190613ae8565b60405180910390a3505050565b6000612f79836119ee565b905080821115612faa576000612f988284612c7b90919063ffffffff16565b9050612fa48482613448565b50612fd6565b80821015612fd5576000612fc78383612c7b90919063ffffffff16565b9050612fd38482613682565b505b5b505050565b6000808290506000811215612fef57600080fd5b80915050919050565b60008082846130079190614bd3565b90506000831215801561301a5750838112155b80613030575060008312801561302f57508381125b5b61303957600080fd5b8091505092915050565b60008082121561305257600080fd5b819050919050565b600080613066846131b7565b905060008111156131ab576000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506130c88183612d3f90919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508315158573ffffffffffffffffffffffffffffffffffffffff167fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf092846040516131989190613ae8565b60405180910390a36001925050506131b1565b60009150505b92915050565b6000806131c383611e17565b9050600081111561335b5761322081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3f90919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d826040516132a99190613ae8565b60405180910390a2601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b815260040161330e929190614c88565b6020604051808303816000875af115801561332d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061335191906145a1565b5080915050613361565b60009150505b919050565b60008383111582906133ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a591906139cb565b60405180910390fd5b50600083856133bd9190614cb1565b9050809150509392505050565b60008082846133d99190614ce5565b9050600083121580156133ec5750838113155b80613402575060008312801561340157508381135b5b61340b57600080fd5b8091505092915050565b6000428211156134285760009050613443565b60115461343e8342612c7b90919063ffffffff16565b101590505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036134b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ae90614dc5565b60405180910390fd5b6134cc81600754612d3f90919063ffffffff16565b60078190555061352481600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3f90919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135c59190613ae8565b60405180910390a361363b6135ed6135e883600154612cc590919063ffffffff16565b612fdb565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133ca90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036136f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136e890614e57565b60405180910390fd5b61375d81604051806060016040528060228152602001614e7860229139600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133669092919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137b581600754612c7b90919063ffffffff16565b600781905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516138199190613ae8565b60405180910390a361388f61384161383c83600154612cc590919063ffffffff16565b612fdb565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ff890919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613901826138d6565b9050919050565b613911816138f6565b82525050565b600060208201905061392c6000830184613908565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561396c578082015181840152602081019050613951565b8381111561397b576000848401525b50505050565b6000601f19601f8301169050919050565b600061399d82613932565b6139a7818561393d565b93506139b781856020860161394e565b6139c081613981565b840191505092915050565b600060208201905081810360008301526139e58184613992565b905092915050565b6000604051905090565b600080fd5b600080fd5b613a0a816138f6565b8114613a1557600080fd5b50565b600081359050613a2781613a01565b92915050565b6000819050919050565b613a4081613a2d565b8114613a4b57600080fd5b50565b600081359050613a5d81613a37565b92915050565b60008060408385031215613a7a57613a796139f7565b5b6000613a8885828601613a18565b9250506020613a9985828601613a4e565b9150509250929050565b60008115159050919050565b613ab881613aa3565b82525050565b6000602082019050613ad36000830184613aaf565b92915050565b613ae281613a2d565b82525050565b6000602082019050613afd6000830184613ad9565b92915050565b6000819050919050565b6000613b28613b23613b1e846138d6565b613b03565b6138d6565b9050919050565b6000613b3a82613b0d565b9050919050565b6000613b4c82613b2f565b9050919050565b613b5c81613b41565b82525050565b6000602082019050613b776000830184613b53565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613ba257613ba1613b7d565b5b8235905067ffffffffffffffff811115613bbf57613bbe613b82565b5b602083019150836020820283011115613bdb57613bda613b87565b5b9250929050565b60008083601f840112613bf857613bf7613b7d565b5b8235905067ffffffffffffffff811115613c1557613c14613b82565b5b602083019150836020820283011115613c3157613c30613b87565b5b9250929050565b60008060008060408587031215613c5257613c516139f7565b5b600085013567ffffffffffffffff811115613c7057613c6f6139fc565b5b613c7c87828801613b8c565b9450945050602085013567ffffffffffffffff811115613c9f57613c9e6139fc565b5b613cab87828801613be2565b925092505092959194509250565b600060208284031215613ccf57613cce6139f7565b5b6000613cdd84828501613a18565b91505092915050565b600080600060608486031215613cff57613cfe6139f7565b5b6000613d0d86828701613a18565b9350506020613d1e86828701613a18565b9250506040613d2f86828701613a4e565b9150509250925092565b600060208284031215613d4f57613d4e6139f7565b5b6000613d5d84828501613a4e565b91505092915050565b600060ff82169050919050565b613d7c81613d66565b82525050565b6000602082019050613d976000830184613d73565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613dd582613981565b810181811067ffffffffffffffff82111715613df457613df3613d9d565b5b80604052505050565b6000613e076139ed565b9050613e138282613dcc565b919050565b600067ffffffffffffffff821115613e3357613e32613d9d565b5b602082029050602081019050919050565b6000613e57613e5284613e18565b613dfd565b90508083825260208201905060208402830185811115613e7a57613e79613b87565b5b835b81811015613ea35780613e8f8882613a18565b845260208401935050602081019050613e7c565b5050509392505050565b600082601f830112613ec257613ec1613b7d565b5b8135613ed2848260208601613e44565b91505092915050565b600060208284031215613ef157613ef06139f7565b5b600082013567ffffffffffffffff811115613f0f57613f0e6139fc565b5b613f1b84828501613ead565b91505092915050565b6000613f2f826138d6565b9050919050565b613f3f81613f24565b8114613f4a57600080fd5b50565b600081359050613f5c81613f36565b92915050565b613f6b81613aa3565b8114613f7657600080fd5b50565b600081359050613f8881613f62565b92915050565b60008060408385031215613fa557613fa46139f7565b5b6000613fb385828601613f4d565b9250506020613fc485828601613f79565b9150509250929050565b60008060408385031215613fe557613fe46139f7565b5b6000613ff385828601613a18565b925050602061400485828601613a18565b9150509250929050565b6000819050919050565b6140218161400e565b82525050565b60006101008201905061403d600083018b613908565b61404a602083018a614018565b6140576040830189614018565b6140646060830188613ad9565b6140716080830187613ad9565b61407e60a0830186613ad9565b61408b60c0830185613ad9565b61409860e0830184613ad9565b9998505050505050505050565b60006060820190506140ba6000830186613ad9565b6140c76020830185613ad9565b6140d46040830184613ad9565b949350505050565b6000815190506140eb81613a37565b92915050565b600060208284031215614107576141066139f7565b5b6000614115848285016140dc565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061418782613a2d565b915061419283613a2d565b9250826141a2576141a161411e565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806141f457607f821691505b602082108103614207576142066141ad565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061424360208361393d565b915061424e8261420d565b602082019050919050565b6000602082019050818103600083015261427281614236565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006142b382613a2d565b91506142be83613a2d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142f7576142f661414d565b5b828202905092915050565b60006040820190506143176000830185613908565b6143246020830184613ad9565b9392505050565b600061433682613a2d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036143685761436761414d565b5b600182019050919050565b7f4e6f207472616e736665727320616c6c6f77656420696e206469766964656e6460008201527f20747261636b6572000000000000000000000000000000000000000000000000602082015250565b60006143cf60288361393d565b91506143da82614373565b604082019050919050565b600060208201905081810360008301526143fe816143c2565b9050919050565b60008151905061441481613a01565b92915050565b6000602082840312156144305761442f6139f7565b5b600061443e84828501614405565b91505092915050565b6000819050919050565b600061446c61446761446284614447565b613b03565b613a2d565b9050919050565b61447c81614451565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6144b7816138f6565b82525050565b60006144c983836144ae565b60208301905092915050565b6000602082019050919050565b60006144ed82614482565b6144f7818561448d565b93506145028361449e565b8060005b8381101561453357815161451a88826144bd565b9750614525836144d5565b925050600181019050614506565b5085935050505092915050565b60006080820190506145556000830187614473565b818103602083015261456781866144e2565b90506145766040830185613908565b6145836060830184613ad9565b95945050505050565b60008151905061459b81613f62565b92915050565b6000602082840312156145b7576145b66139f7565b5b60006145c58482850161458c565b91505092915050565b60006145d982613a2d565b91506145e483613a2d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146195761461861414d565b5b828201905092915050565b60008160011c9050919050565b6000808291508390505b600185111561467b578086048111156146575761465661414d565b5b60018516156146665780820291505b808102905061467485614624565b945061463b565b94509492505050565b6000826146945760019050614750565b816146a25760009050614750565b81600181146146b857600281146146c2576146f1565b6001915050614750565b60ff8411156146d4576146d361414d565b5b8360020a9150848211156146eb576146ea61414d565b5b50614750565b5060208310610133831016604e8410600b84101617156147265782820a9050838111156147215761472061414d565b5b614750565b6147338484846001614631565b9250905081840481111561474a5761474961414d565b5b81810290505b9392505050565b600061476282613a2d565b915061476d83613d66565b925061479a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614684565b905092915050565b7f436c61696d57616974206d757374206265207570646174656420746f2062657460008201527f7765656e203120616e6420323420686f75727300000000000000000000000000602082015250565b60006147fe60338361393d565b9150614809826147a2565b604082019050919050565b6000602082019050818103600083015261482d816147f1565b9050919050565b7f43616e6e6f742075706461746520636c61696d5761697420746f2073616d652060008201527f76616c7565000000000000000000000000000000000000000000000000000000602082015250565b600061489060258361393d565b915061489b82614834565b604082019050919050565b600060208201905081810360008301526148bf81614883565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061492260268361393d565b915061492d826148c6565b604082019050919050565b6000602082019050818103600083015261495181614915565b9050919050565b6149618161400e565b811461496c57600080fd5b50565b60008151905061497e81614958565b92915050565b60006020828403121561499a576149996139f7565b5b60006149a88482850161496f565b91505092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a0d60218361393d565b9150614a18826149b1565b604082019050919050565b60006020820190508181036000830152614a3c81614a00565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614a79601b8361393d565b9150614a8482614a43565b602082019050919050565b60006020820190508181036000830152614aa881614a6c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614b0b60248361393d565b9150614b1682614aaf565b604082019050919050565b60006020820190508181036000830152614b3a81614afe565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b9d60228361393d565b9150614ba882614b41565b604082019050919050565b60006020820190508181036000830152614bcc81614b90565b9050919050565b6000614bde8261400e565b9150614be98361400e565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03831360008312151615614c2457614c2361414d565b5b817f8000000000000000000000000000000000000000000000000000000000000000038312600083121615614c5c57614c5b61414d565b5b828201905092915050565b6000614c7282613b2f565b9050919050565b614c8281614c67565b82525050565b6000604082019050614c9d6000830185614c79565b614caa6020830184613ad9565b9392505050565b6000614cbc82613a2d565b9150614cc783613a2d565b925082821015614cda57614cd961414d565b5b828203905092915050565b6000614cf08261400e565b9150614cfb8361400e565b9250827f800000000000000000000000000000000000000000000000000000000000000001821260008412151615614d3657614d3561414d565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018213600084121615614d6e57614d6d61414d565b5b828203905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000614daf601f8361393d565b9150614dba82614d79565b602082019050919050565b60006020820190508181036000830152614dde81614da2565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e4160218361393d565b9150614e4c82614de5565b604082019050919050565b60006020820190508181036000830152614e7081614e34565b905091905056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122051301c2e4360e8f49a3f3fc81200fed1909bcdbc4ccb477547928debe5bea59364736f6c634300080d0033608060405234801561001057600080fd5b50610ae8806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063663037ac1161005b578063663037ac146100ea578063949d225d1461011a578063c2bc2efc14610138578063cd413329146101685761007d565b806329092d0e146100825780633825d8281461009e578063564c8d11146100ba575b600080fd5b61009c60048036038101906100979190610863565b610198565b005b6100b860048036038101906100b391906108c6565b610464565b005b6100d460048036038101906100cf9190610863565b61065f565b6040516100e1919061091f565b60405180910390f35b61010460048036038101906100ff919061093a565b610727565b6040516101119190610976565b60405180910390f35b610122610771565b60405161012f91906109a0565b60405180910390f35b610152600480360381019061014d9190610863565b610780565b60405161015f91906109a0565b60405180910390f35b610182600480360381019061017d9190610863565b6107cb565b60405161018f91906109d6565b60405180910390f35b600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561046157600060030160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff0219169055600060010160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000905560008060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008001805490506102e19190610a20565b905060008060000182815481106102fb576102fa610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009055806000800184815481106103cc576103cb610a54565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000800180548061042857610427610a83565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555050505b50565b600060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156105055780600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061065b565b6001600060030160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600060010160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000800180549050600060020160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008001829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b60008060030160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166106dc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9050610722565b600060020160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b919050565b600080600001828154811061073f5761073e610a54565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008060000180549050905090565b60008060010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6107f78361065f565b14159050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061083082610805565b9050919050565b61084081610825565b811461084b57600080fd5b50565b60008135905061085d81610837565b92915050565b60006020828403121561087957610878610800565b5b60006108878482850161084e565b91505092915050565b6000819050919050565b6108a381610890565b81146108ae57600080fd5b50565b6000813590506108c08161089a565b92915050565b600080604083850312156108dd576108dc610800565b5b60006108eb8582860161084e565b92505060206108fc858286016108b1565b9150509250929050565b6000819050919050565b61091981610906565b82525050565b60006020820190506109346000830184610910565b92915050565b6000602082840312156109505761094f610800565b5b600061095e848285016108b1565b91505092915050565b61097081610825565b82525050565b600060208201905061098b6000830184610967565b92915050565b61099a81610890565b82525050565b60006020820190506109b56000830184610991565b92915050565b60008115159050919050565b6109d0816109bb565b82525050565b60006020820190506109eb60008301846109c7565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610a2b82610890565b9150610a3683610890565b925082821015610a4957610a486109f1565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212208f034d826428144b4a877d6bd489e424527a07504e6a3d3a525603fea73006b664736f6c634300080d0033
Deployed Bytecode
0x60806040526004361061026b5760003560e01c806370a0823111610144578063aafd847a116100b6578063e0fb0f351161007a578063e0fb0f351461095e578063e7841ec014610975578063e98030c7146109a0578063f2fde38b146109c9578063fbcbc0f1146109f2578063ffb2c47914610a365761027a565b8063aafd847a14610879578063be10b614146108b6578063c2b43efc146108e1578063cac8d538146108f8578063dd62ed3e146109215761027a565b80638da5cb5b116101085780638da5cb5b1461072f57806391b89fba1461075a57806395d89b4114610797578063a457c2d7146107c2578063a8b9d240146107ff578063a9059cbb1461083c5761027a565b806370a082311461064a578063715018a614610687578063804974ea1461069e57806385a6b3ae146106db57806389774282146107065761027a565b80632cbea2b0116101dd5780633974d3b1116101a15780633974d3b1146105625780634b1727ff1461058b5780635ebf4db9146105b457806365e2ccb2146105dd5780636a474002146106085780636f2789ec1461061f5761027a565b80632cbea2b01461047d5780633009a609146104a6578063313ce567146104d157806331e79db0146104fc57806339509351146105255761027a565b806311eac8551161022f57806311eac8551461034757806318160ddd1461037257806321df2b091461039d578063226cfa3d146103c657806323b872dd1461040357806327ce0147146104405761027a565b806302d454571461027f57806303c83302146102aa57806306fdde03146102b4578063095ea7b3146102df57806309bbedde1461031c5761027a565b3661027a57610278610a75565b005b600080fd5b34801561028b57600080fd5b50610294610cab565b6040516102a19190613917565b60405180910390f35b6102b2610a75565b005b3480156102c057600080fd5b506102c9610cd1565b6040516102d691906139cb565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190613a63565b610d63565b6040516103139190613abe565b60405180910390f35b34801561032857600080fd5b50610331610d81565b60405161033e9190613ae8565b60405180910390f35b34801561035357600080fd5b5061035c610e19565b6040516103699190613b62565b60405180910390f35b34801561037e57600080fd5b50610387610e3f565b6040516103949190613ae8565b60405180910390f35b3480156103a957600080fd5b506103c460048036038101906103bf9190613c38565b610e49565b005b3480156103d257600080fd5b506103ed60048036038101906103e89190613cb9565b611004565b6040516103fa9190613ae8565b60405180910390f35b34801561040f57600080fd5b5061042a60048036038101906104259190613ce6565b61101c565b6040516104379190613abe565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190613cb9565b611069565b6040516104749190613ae8565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f9190613d39565b61110c565b005b3480156104b257600080fd5b506104bb611343565b6040516104c89190613ae8565b60405180910390f35b3480156104dd57600080fd5b506104e6611349565b6040516104f39190613d82565b60405180910390f35b34801561050857600080fd5b50610523600480360381019061051e9190613cb9565b611360565b005b34801561053157600080fd5b5061054c60048036038101906105479190613a63565b6114d3565b6040516105599190613abe565b60405180910390f35b34801561056e57600080fd5b5061058960048036038101906105849190613cb9565b611586565b005b34801561059757600080fd5b506105b260048036038101906105ad9190613edb565b6118c6565b005b3480156105c057600080fd5b506105db60048036038101906105d69190613d39565b61190d565b005b3480156105e957600080fd5b506105f26119d2565b6040516105ff9190613ae8565b60405180910390f35b34801561061457600080fd5b5061061d6119dc565b005b34801561062b57600080fd5b506106346119e8565b6040516106419190613ae8565b60405180910390f35b34801561065657600080fd5b50610671600480360381019061066c9190613cb9565b6119ee565b60405161067e9190613ae8565b60405180910390f35b34801561069357600080fd5b5061069c611a37565b005b3480156106aa57600080fd5b506106c560048036038101906106c09190613cb9565b611b8a565b6040516106d29190613ae8565b60405180910390f35b3480156106e757600080fd5b506106f0611bd3565b6040516106fd9190613ae8565b60405180910390f35b34801561071257600080fd5b5061072d60048036038101906107289190613f8e565b611bd9565b005b34801561073b57600080fd5b50610744611c7d565b6040516107519190613917565b60405180910390f35b34801561076657600080fd5b50610781600480360381019061077c9190613cb9565b611ca6565b60405161078e9190613ae8565b60405180910390f35b3480156107a357600080fd5b506107ac611cb8565b6040516107b991906139cb565b60405180910390f35b3480156107ce57600080fd5b506107e960048036038101906107e49190613a63565b611d4a565b6040516107f69190613abe565b60405180910390f35b34801561080b57600080fd5b5061082660048036038101906108219190613cb9565b611e17565b6040516108339190613ae8565b60405180910390f35b34801561084857600080fd5b50610863600480360381019061085e9190613a63565b611e7a565b6040516108709190613abe565b60405180910390f35b34801561088557600080fd5b506108a0600480360381019061089b9190613cb9565b611ec6565b6040516108ad9190613ae8565b60405180910390f35b3480156108c257600080fd5b506108cb611f0f565b6040516108d89190613ae8565b60405180910390f35b3480156108ed57600080fd5b506108f6611f15565b005b34801561090457600080fd5b5061091f600480360381019061091a9190613cb9565b6120f5565b005b34801561092d57600080fd5b5061094860048036038101906109439190613fce565b6121ce565b6040516109559190613ae8565b60405180910390f35b34801561096a57600080fd5b50610973612255565b005b34801561098157600080fd5b5061098a612340565b6040516109979190613ae8565b60405180910390f35b3480156109ac57600080fd5b506109c760048036038101906109c29190613d39565b61234a565b005b3480156109d557600080fd5b506109f060048036038101906109eb9190613cb9565b6124b1565b005b3480156109fe57600080fd5b50610a196004803603810190610a149190613cb9565b612672565b604051610a2d989796959493929190614027565b60405180910390f35b348015610a4257600080fd5b50610a5d6004803603810190610a589190613d39565b612980565b604051610a6c939291906140a5565b60405180910390f35b6000610a7f610e3f565b11610a8957600080fd5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ae69190613917565b602060405180830381865afa158015610b03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2791906140f1565b9050610b323461110c565b6000610be282601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610b939190613917565b602060405180830381865afa158015610bb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd491906140f1565b612c7b90919063ffffffff16565b90506000811115610ca757610c37610bf8610e3f565b610c1c70010000000000000000000000000000000084612cc590919063ffffffff16565b610c26919061417c565b600154612d3f90919063ffffffff16565b6001819055503373ffffffffffffffffffffffffffffffffffffffff167fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d7845411651182604051610c839190613ae8565b60405180910390a2610ca081600b54612d3f90919063ffffffff16565b600b819055505b5050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060088054610ce0906141dc565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0c906141dc565b8015610d595780601f10610d2e57610100808354040283529160200191610d59565b820191906000526020600020905b815481529060010190602001808311610d3c57829003601f168201915b5050505050905090565b6000610d77610d70612d9d565b8484612da5565b6001905092915050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1491906140f1565b905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600754905090565b610e51612d9d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed590614259565b60405180910390fd5b60005b84849050811015610ffd576000858583818110610f0157610f00614279565b5b9050602002016020810190610f169190613cb9565b90506000633b9aca00858585818110610f3257610f31614279565b5b90506020020135610f4391906142a8565b9050600d548110610fe857610f588282612f6e565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82883836040518363ffffffff1660e01b8152600401610fb5929190614302565b600060405180830381600087803b158015610fcf57600080fd5b505af1158015610fe3573d6000803e3d6000fd5b505050505b50508080610ff59061432b565b915050610ee1565b5050505050565b60106020528060005260406000206000915090505481565b60008061105e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611055906143e5565b60405180910390fd5b600190509392505050565b60007001000000000000000000000000000000006110fb6110f6600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110e86110e36110d2886119ee565b600154612cc590919063ffffffff16565b612fdb565b612ff890919063ffffffff16565b613043565b611105919061417c565b9050919050565b6000600267ffffffffffffffff81111561112957611128613d9d565b5b6040519080825280602002602001820160405280156111575781602001602082028036833780820191505090505b509050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111eb919061441a565b816000815181106111ff576111fe614279565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106112705761126f614279565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008430426040518663ffffffff1660e01b815260040161130d9493929190614540565b6000604051808303818588803b15801561132657600080fd5b505af115801561133a573d6000803e3d6000fd5b50505050505050565b600f5481565b6000600a60009054906101000a900460ff16905090565b611368612d9d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ec90614259565b60405180910390fd5b611400816000612f6e565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e826040518263ffffffff1660e01b815260040161145b9190613917565b600060405180830381600087803b15801561147557600080fd5b505af1158015611489573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff167fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2560405160405180910390a250565b600061157c6114e0612d9d565b8461157785600660006114f1612d9d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3f90919063ffffffff16565b612da5565b6001905092915050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b81526004016115e39190613917565b602060405180830381865afa158015611600573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162491906140f1565b9050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630e832273836040518263ffffffff1660e01b81526004016116819190613917565b602060405180830381865afa15801561169e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c291906145a1565b61180b57600d54811061176d576116d98282612f6e565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633825d82883836040518363ffffffff1660e01b8152600401611736929190614302565b600060405180830381600087803b15801561175057600080fd5b505af1158015611764573d6000803e3d6000fd5b50505050611806565b611778826000612f6e565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b81526004016117d39190613917565b600060405180830381600087803b1580156117ed57600080fd5b505af1158015611801573d6000803e3d6000fd5b505050505b6118b6565b6000611816836119ee565b11156118b557611827826000612f6e565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166329092d0e836040518263ffffffff1660e01b81526004016118829190613917565b600060405180830381600087803b15801561189c57600080fd5b505af11580156118b0573d6000803e3d6000fd5b505050505b5b6118c182600161305a565b505050565b60005b8151811015611909576118f58282815181106118e8576118e7614279565b5b6020026020010151611586565b60018161190291906145ce565b90506118c9565b5050565b611915612d9d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199990614259565b60405180910390fd5b600a60009054906101000a900460ff16600a6119be9190614757565b816119c991906142a8565b600d8190555050565b6000600d54905090565b6119e5336131b7565b50565b60115481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a3f612d9d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac390614259565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b5481565b611be1612d9d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6590614259565b60405180910390fd5b611c78828261305a565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611cb182611e17565b9050919050565b606060098054611cc7906141dc565b80601f0160208091040260200160405190810160405280929190818152602001828054611cf3906141dc565b8015611d405780601f10611d1557610100808354040283529160200191611d40565b820191906000526020600020905b815481529060010190602001808311611d2357829003601f168201915b5050505050905090565b6000611e0d611d57612d9d565b84611e0885604051806060016040528060258152602001614e9a6025913960066000611d81612d9d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133669092919063ffffffff16565b612da5565b6001905092915050565b6000611e73600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e6584611069565b612c7b90919063ffffffff16565b9050919050565b600080611ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb3906143e5565b60405180910390fd5b6001905092915050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600d5481565b611f1d612d9d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa190614259565b60405180910390fd5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016120079190613917565b602060405180830381865afa158015612024573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204891906140f1565b9050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612090611c7d565b836040518363ffffffff1660e01b81526004016120ae929190614302565b6020604051808303816000875af11580156120cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f191906145a1565b5050565b6120fd612d9d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461218a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218190614259565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61225d612d9d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e190614259565b60405180910390fd5b60004790506122f7611c7d565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561233c573d6000803e3d6000fd5b5050565b6000600f54905090565b612352612d9d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d690614259565b60405180910390fd5b610e1081101580156123f45750620151808111155b612433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242a90614814565b60405180910390fd5b6011548103612477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246e906148a6565b60405180910390fd5b601154817f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f60405160405180910390a38060118190555050565b6124b9612d9d565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253d90614259565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ac90614938565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600080600080600080889750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663564c8d11896040518263ffffffff1660e01b81526004016126dc9190613917565b602060405180830381865afa1580156126f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271d9190614984565b96507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9550600087126128d257600f5487111561277057612769600f54886133ca90919063ffffffff16565b95506128d1565b6000600f54600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280691906140f1565b116128125760006128b8565b6128b7600f54600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612885573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a991906140f1565b612c7b90919063ffffffff16565b5b90506128cd8189612ff890919063ffffffff16565b9650505b5b6128db88611e17565b94506128e688611069565b9350601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205492506000831161293957600061294f565b61294e60115484612d3f90919063ffffffff16565b5b915042821161295f576000612973565b6129724283612c7b90919063ffffffff16565b5b9050919395975091939597565b600080600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1791906140f1565b905060008103612a3357600080600f5493509350935050612c74565b6000600f5490506000805a90506000805b8984108015612a5257508582105b15612c5b578480612a629061432b565b955050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663949d225d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ad2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af691906140f1565b8510612b0157600094505b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663663037ac876040518263ffffffff1660e01b8152600401612b5e9190613ae8565b602060405180830381865afa158015612b7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b9f919061441a565b9050612be9601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613415565b15612c0e57612bf981600161305a565b15612c0d578180612c099061432b565b9250505b5b8280612c199061432b565b93505060005a905080851115612c5157612c4e612c3f8287612c7b90919063ffffffff16565b87612d3f90919063ffffffff16565b95505b8094505050612a44565b84600f819055508181600f549850985098505050505050505b9193909250565b6000612cbd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613366565b905092915050565b6000808303612cd75760009050612d39565b60008284612ce591906142a8565b9050828482612cf4919061417c565b14612d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2b90614a23565b60405180910390fd5b809150505b92915050565b6000808284612d4e91906145ce565b905083811015612d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8a90614a8f565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0b90614b21565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612e83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7a90614bb3565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612f619190613ae8565b60405180910390a3505050565b6000612f79836119ee565b905080821115612faa576000612f988284612c7b90919063ffffffff16565b9050612fa48482613448565b50612fd6565b80821015612fd5576000612fc78383612c7b90919063ffffffff16565b9050612fd38482613682565b505b5b505050565b6000808290506000811215612fef57600080fd5b80915050919050565b60008082846130079190614bd3565b90506000831215801561301a5750838112155b80613030575060008312801561302f57508381125b5b61303957600080fd5b8091505092915050565b60008082121561305257600080fd5b819050919050565b600080613066846131b7565b905060008111156131ab576000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506130c88183612d3f90919063ffffffff16565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508315158573ffffffffffffffffffffffffffffffffffffffff167fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf092846040516131989190613ae8565b60405180910390a36001925050506131b1565b60009150505b92915050565b6000806131c383611e17565b9050600081111561335b5761322081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3f90919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff167fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d826040516132a99190613ae8565b60405180910390a2601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b815260040161330e929190614c88565b6020604051808303816000875af115801561332d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061335191906145a1565b5080915050613361565b60009150505b919050565b60008383111582906133ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a591906139cb565b60405180910390fd5b50600083856133bd9190614cb1565b9050809150509392505050565b60008082846133d99190614ce5565b9050600083121580156133ec5750838113155b80613402575060008312801561340157508381135b5b61340b57600080fd5b8091505092915050565b6000428211156134285760009050613443565b60115461343e8342612c7b90919063ffffffff16565b101590505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036134b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ae90614dc5565b60405180910390fd5b6134cc81600754612d3f90919063ffffffff16565b60078190555061352481600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3f90919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135c59190613ae8565b60405180910390a361363b6135ed6135e883600154612cc590919063ffffffff16565b612fdb565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133ca90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036136f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136e890614e57565b60405180910390fd5b61375d81604051806060016040528060228152602001614e7860229139600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133669092919063ffffffff16565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137b581600754612c7b90919063ffffffff16565b600781905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516138199190613ae8565b60405180910390a361388f61384161383c83600154612cc590919063ffffffff16565b612fdb565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ff890919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613901826138d6565b9050919050565b613911816138f6565b82525050565b600060208201905061392c6000830184613908565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561396c578082015181840152602081019050613951565b8381111561397b576000848401525b50505050565b6000601f19601f8301169050919050565b600061399d82613932565b6139a7818561393d565b93506139b781856020860161394e565b6139c081613981565b840191505092915050565b600060208201905081810360008301526139e58184613992565b905092915050565b6000604051905090565b600080fd5b600080fd5b613a0a816138f6565b8114613a1557600080fd5b50565b600081359050613a2781613a01565b92915050565b6000819050919050565b613a4081613a2d565b8114613a4b57600080fd5b50565b600081359050613a5d81613a37565b92915050565b60008060408385031215613a7a57613a796139f7565b5b6000613a8885828601613a18565b9250506020613a9985828601613a4e565b9150509250929050565b60008115159050919050565b613ab881613aa3565b82525050565b6000602082019050613ad36000830184613aaf565b92915050565b613ae281613a2d565b82525050565b6000602082019050613afd6000830184613ad9565b92915050565b6000819050919050565b6000613b28613b23613b1e846138d6565b613b03565b6138d6565b9050919050565b6000613b3a82613b0d565b9050919050565b6000613b4c82613b2f565b9050919050565b613b5c81613b41565b82525050565b6000602082019050613b776000830184613b53565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613ba257613ba1613b7d565b5b8235905067ffffffffffffffff811115613bbf57613bbe613b82565b5b602083019150836020820283011115613bdb57613bda613b87565b5b9250929050565b60008083601f840112613bf857613bf7613b7d565b5b8235905067ffffffffffffffff811115613c1557613c14613b82565b5b602083019150836020820283011115613c3157613c30613b87565b5b9250929050565b60008060008060408587031215613c5257613c516139f7565b5b600085013567ffffffffffffffff811115613c7057613c6f6139fc565b5b613c7c87828801613b8c565b9450945050602085013567ffffffffffffffff811115613c9f57613c9e6139fc565b5b613cab87828801613be2565b925092505092959194509250565b600060208284031215613ccf57613cce6139f7565b5b6000613cdd84828501613a18565b91505092915050565b600080600060608486031215613cff57613cfe6139f7565b5b6000613d0d86828701613a18565b9350506020613d1e86828701613a18565b9250506040613d2f86828701613a4e565b9150509250925092565b600060208284031215613d4f57613d4e6139f7565b5b6000613d5d84828501613a4e565b91505092915050565b600060ff82169050919050565b613d7c81613d66565b82525050565b6000602082019050613d976000830184613d73565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613dd582613981565b810181811067ffffffffffffffff82111715613df457613df3613d9d565b5b80604052505050565b6000613e076139ed565b9050613e138282613dcc565b919050565b600067ffffffffffffffff821115613e3357613e32613d9d565b5b602082029050602081019050919050565b6000613e57613e5284613e18565b613dfd565b90508083825260208201905060208402830185811115613e7a57613e79613b87565b5b835b81811015613ea35780613e8f8882613a18565b845260208401935050602081019050613e7c565b5050509392505050565b600082601f830112613ec257613ec1613b7d565b5b8135613ed2848260208601613e44565b91505092915050565b600060208284031215613ef157613ef06139f7565b5b600082013567ffffffffffffffff811115613f0f57613f0e6139fc565b5b613f1b84828501613ead565b91505092915050565b6000613f2f826138d6565b9050919050565b613f3f81613f24565b8114613f4a57600080fd5b50565b600081359050613f5c81613f36565b92915050565b613f6b81613aa3565b8114613f7657600080fd5b50565b600081359050613f8881613f62565b92915050565b60008060408385031215613fa557613fa46139f7565b5b6000613fb385828601613f4d565b9250506020613fc485828601613f79565b9150509250929050565b60008060408385031215613fe557613fe46139f7565b5b6000613ff385828601613a18565b925050602061400485828601613a18565b9150509250929050565b6000819050919050565b6140218161400e565b82525050565b60006101008201905061403d600083018b613908565b61404a602083018a614018565b6140576040830189614018565b6140646060830188613ad9565b6140716080830187613ad9565b61407e60a0830186613ad9565b61408b60c0830185613ad9565b61409860e0830184613ad9565b9998505050505050505050565b60006060820190506140ba6000830186613ad9565b6140c76020830185613ad9565b6140d46040830184613ad9565b949350505050565b6000815190506140eb81613a37565b92915050565b600060208284031215614107576141066139f7565b5b6000614115848285016140dc565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061418782613a2d565b915061419283613a2d565b9250826141a2576141a161411e565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806141f457607f821691505b602082108103614207576142066141ad565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061424360208361393d565b915061424e8261420d565b602082019050919050565b6000602082019050818103600083015261427281614236565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006142b382613a2d565b91506142be83613a2d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142f7576142f661414d565b5b828202905092915050565b60006040820190506143176000830185613908565b6143246020830184613ad9565b9392505050565b600061433682613a2d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036143685761436761414d565b5b600182019050919050565b7f4e6f207472616e736665727320616c6c6f77656420696e206469766964656e6460008201527f20747261636b6572000000000000000000000000000000000000000000000000602082015250565b60006143cf60288361393d565b91506143da82614373565b604082019050919050565b600060208201905081810360008301526143fe816143c2565b9050919050565b60008151905061441481613a01565b92915050565b6000602082840312156144305761442f6139f7565b5b600061443e84828501614405565b91505092915050565b6000819050919050565b600061446c61446761446284614447565b613b03565b613a2d565b9050919050565b61447c81614451565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6144b7816138f6565b82525050565b60006144c983836144ae565b60208301905092915050565b6000602082019050919050565b60006144ed82614482565b6144f7818561448d565b93506145028361449e565b8060005b8381101561453357815161451a88826144bd565b9750614525836144d5565b925050600181019050614506565b5085935050505092915050565b60006080820190506145556000830187614473565b818103602083015261456781866144e2565b90506145766040830185613908565b6145836060830184613ad9565b95945050505050565b60008151905061459b81613f62565b92915050565b6000602082840312156145b7576145b66139f7565b5b60006145c58482850161458c565b91505092915050565b60006145d982613a2d565b91506145e483613a2d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156146195761461861414d565b5b828201905092915050565b60008160011c9050919050565b6000808291508390505b600185111561467b578086048111156146575761465661414d565b5b60018516156146665780820291505b808102905061467485614624565b945061463b565b94509492505050565b6000826146945760019050614750565b816146a25760009050614750565b81600181146146b857600281146146c2576146f1565b6001915050614750565b60ff8411156146d4576146d361414d565b5b8360020a9150848211156146eb576146ea61414d565b5b50614750565b5060208310610133831016604e8410600b84101617156147265782820a9050838111156147215761472061414d565b5b614750565b6147338484846001614631565b9250905081840481111561474a5761474961414d565b5b81810290505b9392505050565b600061476282613a2d565b915061476d83613d66565b925061479a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614684565b905092915050565b7f436c61696d57616974206d757374206265207570646174656420746f2062657460008201527f7765656e203120616e6420323420686f75727300000000000000000000000000602082015250565b60006147fe60338361393d565b9150614809826147a2565b604082019050919050565b6000602082019050818103600083015261482d816147f1565b9050919050565b7f43616e6e6f742075706461746520636c61696d5761697420746f2073616d652060008201527f76616c7565000000000000000000000000000000000000000000000000000000602082015250565b600061489060258361393d565b915061489b82614834565b604082019050919050565b600060208201905081810360008301526148bf81614883565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061492260268361393d565b915061492d826148c6565b604082019050919050565b6000602082019050818103600083015261495181614915565b9050919050565b6149618161400e565b811461496c57600080fd5b50565b60008151905061497e81614958565b92915050565b60006020828403121561499a576149996139f7565b5b60006149a88482850161496f565b91505092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a0d60218361393d565b9150614a18826149b1565b604082019050919050565b60006020820190508181036000830152614a3c81614a00565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614a79601b8361393d565b9150614a8482614a43565b602082019050919050565b60006020820190508181036000830152614aa881614a6c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614b0b60248361393d565b9150614b1682614aaf565b604082019050919050565b60006020820190508181036000830152614b3a81614afe565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b9d60228361393d565b9150614ba882614b41565b604082019050919050565b60006020820190508181036000830152614bcc81614b90565b9050919050565b6000614bde8261400e565b9150614be98361400e565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03831360008312151615614c2457614c2361414d565b5b817f8000000000000000000000000000000000000000000000000000000000000000038312600083121615614c5c57614c5b61414d565b5b828201905092915050565b6000614c7282613b2f565b9050919050565b614c8281614c67565b82525050565b6000604082019050614c9d6000830185614c79565b614caa6020830184613ad9565b9392505050565b6000614cbc82613a2d565b9150614cc783613a2d565b925082821015614cda57614cd961414d565b5b828203905092915050565b6000614cf08261400e565b9150614cfb8361400e565b9250827f800000000000000000000000000000000000000000000000000000000000000001821260008412151615614d3657614d3561414d565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018213600084121615614d6e57614d6d61414d565b5b828203905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000614daf601f8361393d565b9150614dba82614d79565b602082019050919050565b60006020820190508181036000830152614dde81614da2565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e4160218361393d565b9150614e4c82614de5565b604082019050919050565b60006020820190508181036000830152614e7081614e34565b905091905056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122051301c2e4360e8f49a3f3fc81200fed1909bcdbc4ccb477547928debe5bea59364736f6c634300080d0033
Deployed Bytecode Sourcemap
35234:14654:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41093:21;:19;:21::i;:::-;35234:14654;;;;;36877:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41465:622;;;:::i;:::-;;37047:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38080:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44752:115;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36965:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37324:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48922:473;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36453:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37737:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43670:247;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42095:503;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36413:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37233:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41262:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38257:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39105:703;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39816:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43925:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44628:116;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42608:106;;;;;;;;;;;;;:::i;:::-;;36509:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37432:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17816:148;;;;;;;;;;;;;:::i;:::-;;48296:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35981:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48141:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17180:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43231:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37138:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38483:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43361:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37567:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43535:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36098:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49714:169;;;;;;;;;;;;;:::i;:::-;;41130:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37929:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49479:151;;;;;;;;;;;;;:::i;:::-;;44511:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44131:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18119:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44875:1270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;46850:1283;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;41465:622;41546:1;41530:13;:11;:13::i;:::-;:17;41522:26;;;;;;41559:22;41584:9;;;;;;;;;;;:19;;;41612:4;41584:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41559:59;;41629:25;41644:9;41629:14;:25::i;:::-;41665:18;41686:54;41725:14;41686:9;;;;;;;;;;;:19;;;41714:4;41686:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:38;;:54;;;;:::i;:::-;41665:75;;41768:1;41755:10;:14;41751:329;;;41814:106;41892:13;:11;:13::i;:::-;41862:27;35437:8;41863:10;41862:16;;:27;;;;:::i;:::-;:43;;;;:::i;:::-;41814:25;;:29;;:106;;;;:::i;:::-;41786:25;:134;;;;41961:10;41940:44;;;41973:10;41940:44;;;;;;:::i;:::-;;;;;;;;42027:41;42057:10;42027:25;;:29;;:41;;;;:::i;:::-;41999:25;:69;;;;41751:329;41511:576;;41465:622::o;36877:71::-;;;;;;;;;;;;;:::o;37047:83::-;37084:13;37117:5;37110:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37047:83;:::o;38080:169::-;38163:4;38180:39;38189:12;:10;:12::i;:::-;38203:7;38212:6;38180:8;:39::i;:::-;38237:4;38230:11;;38080:169;;;;:::o;44752:115::-;44810:7;44837:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44830:29;;44752:115;:::o;36965:45::-;;;;;;;;;;;;;:::o;37324:100::-;37377:7;37404:12;;37397:19;;37324:100;:::o;48922:473::-;17402:12;:10;:12::i;:::-;17392:22;;:6;;;;;;;;;;:22;;;17384:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;49039:10:::1;49034:354;49063:10;;:17;;49055:5;:25;49034:354;;;49106:15;49124:10;;49135:5;49124:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;49106:35;;49156:14;49190:7;49173;;49181:5;49173:14;;;;;;;:::i;:::-;;;;;;;;:24;;;;:::i;:::-;49156:41;;49226:31;;49216:6;:41;49212:165;;49278:28;49290:7;49299:6;49278:11;:28::i;:::-;49325:15;;;;;;;;;;;:19;;;49345:7;49354:6;49325:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;49212:165;49091:297;;49082:7;;;;;:::i;:::-;;;;49034:354;;;;48922:473:::0;;;;:::o;36453:49::-;;;;;;;;;;;;;;;;;:::o;37737:184::-;37816:4;37841:5;37833:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;37909:4;37902:11;;37737:184;;;;;:::o;43670:247::-;43739:7;35437:8;43766:131;:115;43844:28;:36;43873:6;43844:36;;;;;;;;;;;;;;;;43766:63;:48;43796:17;43806:6;43796:9;:17::i;:::-;43766:25;;:29;;:48;;;;:::i;:::-;:61;:63::i;:::-;:77;;:115;;;;:::i;:::-;:129;:131::i;:::-;:143;;;;:::i;:::-;43759:150;;43670:247;;;:::o;42095:503::-;42214:21;42252:1;42238:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42214:40;;42275:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42265:4;42270:1;42265:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;42318:11;;;;;;;;;;;42308:4;42313:1;42308:7;;;;;;;;:::i;:::-;;;;;;;:21;;;;;;;;;;;42368:15;;;;;;;;;;;:66;;;42443:9;42468:1;42517:4;42544;42564:15;42368:222;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42145:453;42095:503;:::o;36413:33::-;;;;:::o;37233:83::-;37274:5;37299:9;;;;;;;;;;;37292:16;;37233:83;:::o;41262:195::-;17402:12;:10;:12::i;:::-;17392:22;;:6;;;;;;;;;;:22;;;17384:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41339:23:::1;41351:7;41360:1;41339:11;:23::i;:::-;41373:15;;;;;;;;;;;:22;;;41396:7;41373:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;41441:7;41420:29;;;;;;;;;;;;41262:195:::0;:::o;38257:218::-;38345:4;38362:83;38371:12;:10;:12::i;:::-;38385:7;38394:50;38433:10;38394:11;:25;38406:12;:10;:12::i;:::-;38394:25;;;;;;;;;;;;;;;:34;38420:7;38394:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;38362:8;:83::i;:::-;38463:4;38456:11;;38257:218;;;;:::o;39105:703::-;39165:15;39183:6;;;;;;;;;;;:16;;;39200:7;39183:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39165:43;;39224:6;;;;;;;;;;;:28;;;39253:7;39224:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39219:533;;39293:31;;39282:7;:42;39278:295;;39345:29;39357:7;39366;39345:11;:29::i;:::-;39393:15;;;;;;;;;;;:19;;;39413:7;39422;39393:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39278:295;;;39484:23;39496:7;39505:1;39484:11;:23::i;:::-;39526:15;;;;;;;;;;;:22;;;39549:7;39526:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39278:295;39219:533;;;39630:1;39609:18;39619:7;39609:9;:18::i;:::-;:22;39605:136;;;39652:23;39664:7;39673:1;39652:11;:23::i;:::-;39694:15;;;;;;;;;;;:22;;;39717:7;39694:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39605:136;39219:533;39762:38;39785:7;39795:4;39762:14;:38::i;:::-;;39154:654;39105:703;:::o;39816:227::-;39892:13;39920:116;39935:8;:15;39927:5;:23;39920:116;;;39967:32;39983:8;39992:5;39983:15;;;;;;;;:::i;:::-;;;;;;;;39967;:32::i;:::-;40023:1;40014:10;;;;;:::i;:::-;;;39920:116;;;39881:162;39816:227;:::o;43925:198::-;17402:12;:10;:12::i;:::-;17392:22;;:6;;;;;;;;;;:22;;;17384:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44105:9:::1;;;;;;;;;;;44099:2;:15;;;;:::i;:::-;44069:26;:46;;;;:::i;:::-;44035:31;:80;;;;43925:198:::0;:::o;44628:116::-;44678:7;44705:31;;44698:38;;44628:116;:::o;42608:106::-;42662:44;42694:10;42662:23;:44::i;:::-;;42608:106::o;36509:31::-;;;;:::o;37432:127::-;37506:7;37533:9;:18;37543:7;37533:18;;;;;;;;;;;;;;;;37526:25;;37432:127;;;:::o;17816:148::-;17402:12;:10;:12::i;:::-;17392:22;;:6;;;;;;;;;;:22;;;17384:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17923:1:::1;17886:40;;17907:6;::::0;::::1;;;;;;;;17886:40;;;;;;;;;;;;17954:1;17937:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17816:148::o:0;48296:128::-;48364:7;48391:16;:25;48408:7;48391:25;;;;;;;;;;;;;;;;48384:32;;48296:128;;;:::o;35981:40::-;;;;:::o;48141:147::-;17402:12;:10;:12::i;:::-;17392:22;;:6;;;;;;;;;;:22;;;17384:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;48246:34:::1;48261:7;48270:9;48246:14;:34::i;:::-;;48141:147:::0;;:::o;17180:79::-;17218:7;17245:6;;;;;;;;;;;17238:13;;17180:79;:::o;43231:122::-;43288:7;43315:30;43338:6;43315:22;:30::i;:::-;43308:37;;43231:122;;;:::o;37138:87::-;37177:13;37210:7;37203:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37138:87;:::o;38483:269::-;38576:4;38593:129;38602:12;:10;:12::i;:::-;38616:7;38625:96;38664:15;38625:96;;;;;;;;;;;;;;;;;:11;:25;38637:12;:10;:12::i;:::-;38625:25;;;;;;;;;;;;;;;:34;38651:7;38625:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;38593:8;:129::i;:::-;38740:4;38733:11;;38483:269;;;;:::o;43361:166::-;43430:7;43457:62;43492:18;:26;43511:6;43492:26;;;;;;;;;;;;;;;;43457:30;43480:6;43457:22;:30::i;:::-;:34;;:62;;;;:::i;:::-;43450:69;;43361:166;;;:::o;37567:162::-;37624:4;37649:5;37641:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;37717:4;37710:11;;37567:162;;;;:::o;43535:127::-;43601:7;43628:18;:26;43647:6;43628:26;;;;;;;;;;;;;;;;43621:33;;43535:127;;;:::o;36098:77::-;;;;:::o;49714:169::-;17402:12;:10;:12::i;:::-;17392:22;;:6;;;;;;;;;;:22;;;17384:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;49768:19:::1;49790:9;;;;;;;;;;;:19;;;49818:4;49790:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49768:56;;49835:9;;;;;;;;;;;:18;;;49854:7;:5;:7::i;:::-;49863:11;49835:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;49757:126;49714:169::o:0;41130:124::-;17402:12;:10;:12::i;:::-;17392:22;;:6;;;;;;;;;;:22;;;17384:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41232:12:::1;41208:6;;:38;;;;;;;;;;;;;;;;;;41130:124:::0;:::o;37929:143::-;38010:7;38037:11;:18;38049:5;38037:18;;;;;;;;;;;;;;;:27;38056:7;38037:27;;;;;;;;;;;;;;;;38030:34;;37929:143;;;;:::o;49479:151::-;17402:12;:10;:12::i;:::-;17392:22;;:6;;;;;;;;;;:22;;;17384:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;49532:18:::1;49553:21;49532:42;;49593:7;:5;:7::i;:::-;49585:25;;:37;49611:10;49585:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;49521:109;49479:151::o:0;44511:109::-;44567:7;44594:18;;44587:25;;44511:109;:::o;44131:372::-;17402:12;:10;:12::i;:::-;17392:22;;:6;;;;;;;;;;:22;;;17384:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44232:4:::1;44216:12;:20;;:45;;;;;44256:5;44240:12;:21;;44216:45;44208:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;44352:9;;44336:12;:25:::0;44328:75:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;44450:9;;44436:12;44419:41;;;;;;;;;;44483:12;44471:9;:24;;;;44131:372:::0;:::o;18119:244::-;17402:12;:10;:12::i;:::-;17392:22;;:6;;;;;;;;;;:22;;;17384:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18228:1:::1;18208:22;;:8;:22;;::::0;18200:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18318:8;18289:38;;18310:6;::::0;::::1;;;;;;;;18289:38;;;;;;;;;;;;18347:8;18338:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;18119:244:::0;:::o;44875:1270::-;44934:15;44951:12;44965:31;45007:29;45038:22;45062:21;45094;45117:38;45178:8;45168:18;;45205:15;;;;;;;;;;;:29;;;45235:7;45205:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45197:46;;45281:3;45254:30;;45308:1;45299:5;:10;45295:473;;45347:18;;45338:5;45330:35;45326:431;;;45413:37;45430:18;;45413:5;:9;;:37;;;;:::i;:::-;45386:64;;45326:431;;;45504:32;45564:18;;45539:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;:113;;45651:1;45539:113;;;45602:46;45629:18;;45602:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:26;;:46;;;;:::i;:::-;45539:113;45504:148;;45698:43;45715:24;45698:5;:9;;:43;;;;:::i;:::-;45671:70;;45485:272;45326:431;45295:473;45802:31;45825:7;45802:22;:31::i;:::-;45778:55;;45861:31;45884:7;45861:22;:31::i;:::-;45844:48;;45919:14;:23;45934:7;45919:23;;;;;;;;;;;;;;;;45903:39;;45985:1;45969:13;:17;:52;;46020:1;45969:52;;;45989:28;46007:9;;45989:13;:17;;:28;;;;:::i;:::-;45969:52;45953:68;;46081:15;46065:13;:31;:72;;46136:1;46065:72;;;46099:34;46117:15;46099:13;:17;;:34;;;;:::i;:::-;46065:72;46032:105;;44875:1270;;;;;;;;;:::o;46850:1283::-;46896:7;46905;46914;46934:28;46965:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46934:53;;47028:1;47004:20;:25;47000:91;;47054:1;47057;47060:18;;47046:33;;;;;;;;;47000:91;47101:27;47131:18;;47101:48;;47160:15;47190;47208:9;47190:27;;47228:18;47261:14;47290:727;47307:3;47297:7;:13;:50;;;;;47327:20;47314:10;:33;47297:50;47290:727;;;47364:21;;;;;:::i;:::-;;;;47427:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47404:19;:45;47400:109;;47492:1;47470:23;;47400:109;47523:15;47541;;;;;;;;;;;:29;;;47571:19;47541:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47523:68;;47610:37;47623:14;:23;47638:7;47623:23;;;;;;;;;;;;;;;;47610:12;:37::i;:::-;47606:172;;;47672:38;47695:7;47705:4;47672:14;:38::i;:::-;47668:95;;;47735:8;;;;;:::i;:::-;;;;47668:95;47606:172;47792:12;;;;;:::i;:::-;;;;47819:18;47840:9;47819:30;;47878:10;47868:7;:20;47864:107;;;47919:36;47931:23;47943:10;47931:7;:11;;:23;;;;:::i;:::-;47919:7;:11;;:36;;;;:::i;:::-;47909:46;;47864:107;47995:10;47985:20;;47349:668;;47290:727;;;48048:19;48027:18;:40;;;;48086:10;48098:6;48106:18;;48078:47;;;;;;;;;;;;46850:1283;;;;;;:::o;5560:136::-;5618:7;5645:43;5649:1;5652;5645:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5638:50;;5560:136;;;;:::o;6450:471::-;6508:7;6758:1;6753;:6;6749:47;;6783:1;6776:8;;;;6749:47;6808:9;6824:1;6820;:5;;;;:::i;:::-;6808:17;;6853:1;6848;6844;:5;;;;:::i;:::-;:10;6836:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;6912:1;6905:8;;;6450:471;;;;;:::o;5096:181::-;5154:7;5174:9;5190:1;5186;:5;;;;:::i;:::-;5174:17;;5215:1;5210;:6;;5202:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;5268:1;5261:8;;;5096:181;;;;:::o;9668:98::-;9721:7;9748:10;9741:17;;9668:98;:::o;38760:337::-;38870:1;38853:19;;:5;:19;;;38845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38951:1;38932:21;;:7;:21;;;38924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39035:6;39005:11;:18;39017:5;39005:18;;;;;;;;;;;;;;;:27;39024:7;39005:27;;;;;;;;;;;;;;;:36;;;;39073:7;39057:32;;39066:5;39057:32;;;39082:6;39057:32;;;;;;:::i;:::-;;;;;;;;38760:337;;;:::o;46393:449::-;46471:22;46496:18;46506:7;46496:9;:18::i;:::-;46471:43;;46542:14;46529:10;:27;46525:310;;;46573:18;46594:30;46609:14;46594:10;:14;;:30;;;;:::i;:::-;46573:51;;46639:26;46645:7;46654:10;46639:5;:26::i;:::-;46558:119;46525:310;;;46700:14;46687:10;:27;46683:152;;;46731:18;46752:30;46771:10;46752:14;:18;;:30;;;;:::i;:::-;46731:51;;46797:26;46803:7;46812:10;46797:5;:26::i;:::-;46716:119;46683:152;46525:310;46460:382;46393:449;;:::o;4101:148::-;4157:6;4176:8;4194:1;4176:20;;4220:1;4215;:6;;4207:15;;;;;;4240:1;4233:8;;;4101:148;;;:::o;3617:176::-;3673:6;3692:8;3707:1;3703;:5;;;;:::i;:::-;3692:16;;3733:1;3728;:6;;:16;;;;;3743:1;3738;:6;;3728:16;3727:38;;;;3754:1;3750;:5;:14;;;;;3763:1;3759;:5;3750:14;3727:38;3719:47;;;;;;3784:1;3777:8;;;3617:176;;;;:::o;3939:127::-;3995:7;4028:1;4023;:6;;4015:15;;;;;;4056:1;4041:17;;3939:127;;;:::o;48432:482::-;48514:4;48531:14;48548:32;48572:7;48548:23;:32::i;:::-;48531:49;;48604:1;48595:6;:10;48591:293;;;48622:20;48645:16;:25;48662:7;48645:25;;;;;;;;;;;;;;;;48622:48;;48713:24;48724:12;48713:6;:10;;:24;;;;:::i;:::-;48685:16;:25;48702:7;48685:25;;;;;;;;;;;;;;;:52;;;;48778:15;48752:14;:23;48767:7;48752:23;;;;;;;;;;;;;;;:41;;;;48836:9;48813:33;;48819:7;48813:33;;;48828:6;48813:33;;;;;;:::i;:::-;;;;;;;;48868:4;48861:11;;;;;;48591:293;48901:5;48894:12;;;48432:482;;;;;:::o;42722:497::-;42795:7;42815:29;42847:28;42870:4;42847:22;:28::i;:::-;42815:60;;42914:1;42890:21;:25;42886:307;;;42959:51;42988:21;42959:18;:24;42978:4;42959:24;;;;;;;;;;;;;;;;:28;;:51;;;;:::i;:::-;42932:18;:24;42951:4;42932:24;;;;;;;;;;;;;;;:78;;;;43048:4;43030:46;;;43054:21;43030:46;;;;;;:::i;:::-;;;;;;;;43091:9;;;;;;;;;;;:18;;;43110:4;43116:21;43091:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43160:21;43153:28;;;;;42886:307;43210:1;43203:8;;;42722:497;;;;:::o;5999:192::-;6085:7;6118:1;6113;:6;;6121:12;6105:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6145:9;6161:1;6157;:5;;;;:::i;:::-;6145:17;;6182:1;6175:8;;;5999:192;;;;;:::o;3433:176::-;3489:6;3508:8;3523:1;3519;:5;;;;:::i;:::-;3508:16;;3549:1;3544;:6;;:16;;;;;3559:1;3554;:6;;3544:16;3543:38;;;;3570:1;3566;:5;:14;;;;;3579:1;3575;:5;3566:14;3543:38;3535:47;;;;;;3600:1;3593:8;;;3433:176;;;;:::o;46153:232::-;46220:4;46257:15;46241:13;:31;46237:76;;;46296:5;46289:12;;;;46237:76;46368:9;;46330:34;46350:13;46330:15;:19;;:34;;;;:::i;:::-;:47;;46323:54;;46153:232;;;;:::o;40051:472::-;40154:1;40135:21;;:7;:21;;;40127:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;40218:24;40235:6;40218:12;;:16;;:24;;;;:::i;:::-;40203:12;:39;;;;40274:30;40297:6;40274:9;:18;40284:7;40274:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;40253:9;:18;40263:7;40253:18;;;;;;;;;;;;;;;:51;;;;40341:7;40320:37;;40337:1;40320:37;;;40350:6;40320:37;;;;;;:::i;:::-;;;;;;;;40408:107;40460:54;40461:37;40491:6;40461:25;;:29;;:37;;;;:::i;:::-;40460:52;:54::i;:::-;40408:28;:37;40437:7;40408:37;;;;;;;;;;;;;;;;:51;;:107;;;;:::i;:::-;40368:28;:37;40397:7;40368:37;;;;;;;;;;;;;;;:147;;;;40051:472;;:::o;40531:516::-;40634:1;40615:21;;:7;:21;;;40607:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40708:68;40731:6;40708:68;;;;;;;;;;;;;;;;;:9;:18;40718:7;40708:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;40687:9;:18;40697:7;40687:18;;;;;;;;;;;;;;;:89;;;;40802:24;40819:6;40802:12;;:16;;:24;;;;:::i;:::-;40787:12;:39;;;;40868:1;40842:37;;40851:7;40842:37;;;40872:6;40842:37;;;;;;:::i;:::-;;;;;;;;40932:107;40984:54;40985:37;41015:6;40985:25;;:29;;:37;;;;:::i;:::-;40984:52;:54::i;:::-;40932:28;:37;40961:7;40932:37;;;;;;;;;;;;;;;;:51;;:107;;;;:::i;:::-;40892:28;:37;40921:7;40892:37;;;;;;;;;;;;;;;:147;;;;40531:516;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:99::-;645:6;679:5;673:12;663:22;;593:99;;;:::o;698:169::-;782:11;816:6;811:3;804:19;856:4;851:3;847:14;832:29;;698:169;;;;:::o;873:307::-;941:1;951:113;965:6;962:1;959:13;951:113;;;1050:1;1045:3;1041:11;1035:18;1031:1;1026:3;1022:11;1015:39;987:2;984:1;980:10;975:15;;951:113;;;1082:6;1079:1;1076:13;1073:101;;;1162:1;1153:6;1148:3;1144:16;1137:27;1073:101;922:258;873:307;;;:::o;1186:102::-;1227:6;1278:2;1274:7;1269:2;1262:5;1258:14;1254:28;1244:38;;1186:102;;;:::o;1294:364::-;1382:3;1410:39;1443:5;1410:39;:::i;:::-;1465:71;1529:6;1524:3;1465:71;:::i;:::-;1458:78;;1545:52;1590:6;1585:3;1578:4;1571:5;1567:16;1545:52;:::i;:::-;1622:29;1644:6;1622:29;:::i;:::-;1617:3;1613:39;1606:46;;1386:272;1294:364;;;;:::o;1664:313::-;1777:4;1815:2;1804:9;1800:18;1792:26;;1864:9;1858:4;1854:20;1850:1;1839:9;1835:17;1828:47;1892:78;1965:4;1956:6;1892:78;:::i;:::-;1884:86;;1664:313;;;;:::o;1983:75::-;2016:6;2049:2;2043:9;2033:19;;1983:75;:::o;2064:117::-;2173:1;2170;2163:12;2187:117;2296:1;2293;2286:12;2310:122;2383:24;2401:5;2383:24;:::i;:::-;2376:5;2373:35;2363:63;;2422:1;2419;2412:12;2363:63;2310:122;:::o;2438:139::-;2484:5;2522:6;2509:20;2500:29;;2538:33;2565:5;2538:33;:::i;:::-;2438:139;;;;:::o;2583:77::-;2620:7;2649:5;2638:16;;2583:77;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:118::-;3933:24;3951:5;3933:24;:::i;:::-;3928:3;3921:37;3846:118;;:::o;3970:222::-;4063:4;4101:2;4090:9;4086:18;4078:26;;4114:71;4182:1;4171:9;4167:17;4158:6;4114:71;:::i;:::-;3970:222;;;;:::o;4198:60::-;4226:3;4247:5;4240:12;;4198:60;;;:::o;4264:142::-;4314:9;4347:53;4365:34;4374:24;4392:5;4374:24;:::i;:::-;4365:34;:::i;:::-;4347:53;:::i;:::-;4334:66;;4264:142;;;:::o;4412:126::-;4462:9;4495:37;4526:5;4495:37;:::i;:::-;4482:50;;4412:126;;;:::o;4544:139::-;4607:9;4640:37;4671:5;4640:37;:::i;:::-;4627:50;;4544:139;;;:::o;4689:157::-;4789:50;4833:5;4789:50;:::i;:::-;4784:3;4777:63;4689:157;;:::o;4852:248::-;4958:4;4996:2;4985:9;4981:18;4973:26;;5009:84;5090:1;5079:9;5075:17;5066:6;5009:84;:::i;:::-;4852:248;;;;:::o;5106:117::-;5215:1;5212;5205:12;5229:117;5338:1;5335;5328:12;5352:117;5461:1;5458;5451:12;5492:568;5565:8;5575:6;5625:3;5618:4;5610:6;5606:17;5602:27;5592:122;;5633:79;;:::i;:::-;5592:122;5746:6;5733:20;5723:30;;5776:18;5768:6;5765:30;5762:117;;;5798:79;;:::i;:::-;5762:117;5912:4;5904:6;5900:17;5888:29;;5966:3;5958:4;5950:6;5946:17;5936:8;5932:32;5929:41;5926:128;;;5973:79;;:::i;:::-;5926:128;5492:568;;;;;:::o;6083:::-;6156:8;6166:6;6216:3;6209:4;6201:6;6197:17;6193:27;6183:122;;6224:79;;:::i;:::-;6183:122;6337:6;6324:20;6314:30;;6367:18;6359:6;6356:30;6353:117;;;6389:79;;:::i;:::-;6353:117;6503:4;6495:6;6491:17;6479:29;;6557:3;6549:4;6541:6;6537:17;6527:8;6523:32;6520:41;6517:128;;;6564:79;;:::i;:::-;6517:128;6083:568;;;;;:::o;6657:934::-;6779:6;6787;6795;6803;6852:2;6840:9;6831:7;6827:23;6823:32;6820:119;;;6858:79;;:::i;:::-;6820:119;7006:1;6995:9;6991:17;6978:31;7036:18;7028:6;7025:30;7022:117;;;7058:79;;:::i;:::-;7022:117;7171:80;7243:7;7234:6;7223:9;7219:22;7171:80;:::i;:::-;7153:98;;;;6949:312;7328:2;7317:9;7313:18;7300:32;7359:18;7351:6;7348:30;7345:117;;;7381:79;;:::i;:::-;7345:117;7494:80;7566:7;7557:6;7546:9;7542:22;7494:80;:::i;:::-;7476:98;;;;7271:313;6657:934;;;;;;;:::o;7597:329::-;7656:6;7705:2;7693:9;7684:7;7680:23;7676:32;7673:119;;;7711:79;;:::i;:::-;7673:119;7831:1;7856:53;7901:7;7892:6;7881:9;7877:22;7856:53;:::i;:::-;7846:63;;7802:117;7597:329;;;;:::o;7932:619::-;8009:6;8017;8025;8074:2;8062:9;8053:7;8049:23;8045:32;8042:119;;;8080:79;;:::i;:::-;8042:119;8200:1;8225:53;8270:7;8261:6;8250:9;8246:22;8225:53;:::i;:::-;8215:63;;8171:117;8327:2;8353:53;8398:7;8389:6;8378:9;8374:22;8353:53;:::i;:::-;8343:63;;8298:118;8455:2;8481:53;8526:7;8517:6;8506:9;8502:22;8481:53;:::i;:::-;8471:63;;8426:118;7932:619;;;;;:::o;8557:329::-;8616:6;8665:2;8653:9;8644:7;8640:23;8636:32;8633:119;;;8671:79;;:::i;:::-;8633:119;8791:1;8816:53;8861:7;8852:6;8841:9;8837:22;8816:53;:::i;:::-;8806:63;;8762:117;8557:329;;;;:::o;8892:86::-;8927:7;8967:4;8960:5;8956:16;8945:27;;8892:86;;;:::o;8984:112::-;9067:22;9083:5;9067:22;:::i;:::-;9062:3;9055:35;8984:112;;:::o;9102:214::-;9191:4;9229:2;9218:9;9214:18;9206:26;;9242:67;9306:1;9295:9;9291:17;9282:6;9242:67;:::i;:::-;9102:214;;;;:::o;9322:180::-;9370:77;9367:1;9360:88;9467:4;9464:1;9457:15;9491:4;9488:1;9481:15;9508:281;9591:27;9613:4;9591:27;:::i;:::-;9583:6;9579:40;9721:6;9709:10;9706:22;9685:18;9673:10;9670:34;9667:62;9664:88;;;9732:18;;:::i;:::-;9664:88;9772:10;9768:2;9761:22;9551:238;9508:281;;:::o;9795:129::-;9829:6;9856:20;;:::i;:::-;9846:30;;9885:33;9913:4;9905:6;9885:33;:::i;:::-;9795:129;;;:::o;9930:311::-;10007:4;10097:18;10089:6;10086:30;10083:56;;;10119:18;;:::i;:::-;10083:56;10169:4;10161:6;10157:17;10149:25;;10229:4;10223;10219:15;10211:23;;9930:311;;;:::o;10264:710::-;10360:5;10385:81;10401:64;10458:6;10401:64;:::i;:::-;10385:81;:::i;:::-;10376:90;;10486:5;10515:6;10508:5;10501:21;10549:4;10542:5;10538:16;10531:23;;10602:4;10594:6;10590:17;10582:6;10578:30;10631:3;10623:6;10620:15;10617:122;;;10650:79;;:::i;:::-;10617:122;10765:6;10748:220;10782:6;10777:3;10774:15;10748:220;;;10857:3;10886:37;10919:3;10907:10;10886:37;:::i;:::-;10881:3;10874:50;10953:4;10948:3;10944:14;10937:21;;10824:144;10808:4;10803:3;10799:14;10792:21;;10748:220;;;10752:21;10366:608;;10264:710;;;;;:::o;10997:370::-;11068:5;11117:3;11110:4;11102:6;11098:17;11094:27;11084:122;;11125:79;;:::i;:::-;11084:122;11242:6;11229:20;11267:94;11357:3;11349:6;11342:4;11334:6;11330:17;11267:94;:::i;:::-;11258:103;;11074:293;10997:370;;;;:::o;11373:539::-;11457:6;11506:2;11494:9;11485:7;11481:23;11477:32;11474:119;;;11512:79;;:::i;:::-;11474:119;11660:1;11649:9;11645:17;11632:31;11690:18;11682:6;11679:30;11676:117;;;11712:79;;:::i;:::-;11676:117;11817:78;11887:7;11878:6;11867:9;11863:22;11817:78;:::i;:::-;11807:88;;11603:302;11373:539;;;;:::o;11918:104::-;11963:7;11992:24;12010:5;11992:24;:::i;:::-;11981:35;;11918:104;;;:::o;12028:138::-;12109:32;12135:5;12109:32;:::i;:::-;12102:5;12099:43;12089:71;;12156:1;12153;12146:12;12089:71;12028:138;:::o;12172:155::-;12226:5;12264:6;12251:20;12242:29;;12280:41;12315:5;12280:41;:::i;:::-;12172:155;;;;:::o;12333:116::-;12403:21;12418:5;12403:21;:::i;:::-;12396:5;12393:32;12383:60;;12439:1;12436;12429:12;12383:60;12333:116;:::o;12455:133::-;12498:5;12536:6;12523:20;12514:29;;12552:30;12576:5;12552:30;:::i;:::-;12455:133;;;;:::o;12594:484::-;12667:6;12675;12724:2;12712:9;12703:7;12699:23;12695:32;12692:119;;;12730:79;;:::i;:::-;12692:119;12850:1;12875:61;12928:7;12919:6;12908:9;12904:22;12875:61;:::i;:::-;12865:71;;12821:125;12985:2;13011:50;13053:7;13044:6;13033:9;13029:22;13011:50;:::i;:::-;13001:60;;12956:115;12594:484;;;;;:::o;13084:474::-;13152:6;13160;13209:2;13197:9;13188:7;13184:23;13180:32;13177:119;;;13215:79;;:::i;:::-;13177:119;13335:1;13360:53;13405:7;13396:6;13385:9;13381:22;13360:53;:::i;:::-;13350:63;;13306:117;13462:2;13488:53;13533:7;13524:6;13513:9;13509:22;13488:53;:::i;:::-;13478:63;;13433:118;13084:474;;;;;:::o;13564:76::-;13600:7;13629:5;13618:16;;13564:76;;;:::o;13646:115::-;13731:23;13748:5;13731:23;:::i;:::-;13726:3;13719:36;13646:115;;:::o;13767:989::-;14052:4;14090:3;14079:9;14075:19;14067:27;;14104:71;14172:1;14161:9;14157:17;14148:6;14104:71;:::i;:::-;14185:70;14251:2;14240:9;14236:18;14227:6;14185:70;:::i;:::-;14265;14331:2;14320:9;14316:18;14307:6;14265:70;:::i;:::-;14345:72;14413:2;14402:9;14398:18;14389:6;14345:72;:::i;:::-;14427:73;14495:3;14484:9;14480:19;14471:6;14427:73;:::i;:::-;14510;14578:3;14567:9;14563:19;14554:6;14510:73;:::i;:::-;14593;14661:3;14650:9;14646:19;14637:6;14593:73;:::i;:::-;14676;14744:3;14733:9;14729:19;14720:6;14676:73;:::i;:::-;13767:989;;;;;;;;;;;:::o;14762:442::-;14911:4;14949:2;14938:9;14934:18;14926:26;;14962:71;15030:1;15019:9;15015:17;15006:6;14962:71;:::i;:::-;15043:72;15111:2;15100:9;15096:18;15087:6;15043:72;:::i;:::-;15125;15193:2;15182:9;15178:18;15169:6;15125:72;:::i;:::-;14762:442;;;;;;:::o;15210:143::-;15267:5;15298:6;15292:13;15283:22;;15314:33;15341:5;15314:33;:::i;:::-;15210:143;;;;:::o;15359:351::-;15429:6;15478:2;15466:9;15457:7;15453:23;15449:32;15446:119;;;15484:79;;:::i;:::-;15446:119;15604:1;15629:64;15685:7;15676:6;15665:9;15661:22;15629:64;:::i;:::-;15619:74;;15575:128;15359:351;;;;:::o;15716:180::-;15764:77;15761:1;15754:88;15861:4;15858:1;15851:15;15885:4;15882:1;15875:15;15902:180;15950:77;15947:1;15940:88;16047:4;16044:1;16037:15;16071:4;16068:1;16061:15;16088:185;16128:1;16145:20;16163:1;16145:20;:::i;:::-;16140:25;;16179:20;16197:1;16179:20;:::i;:::-;16174:25;;16218:1;16208:35;;16223:18;;:::i;:::-;16208:35;16265:1;16262;16258:9;16253:14;;16088:185;;;;:::o;16279:180::-;16327:77;16324:1;16317:88;16424:4;16421:1;16414:15;16448:4;16445:1;16438:15;16465:320;16509:6;16546:1;16540:4;16536:12;16526:22;;16593:1;16587:4;16583:12;16614:18;16604:81;;16670:4;16662:6;16658:17;16648:27;;16604:81;16732:2;16724:6;16721:14;16701:18;16698:38;16695:84;;16751:18;;:::i;:::-;16695:84;16516:269;16465:320;;;:::o;16791:182::-;16931:34;16927:1;16919:6;16915:14;16908:58;16791:182;:::o;16979:366::-;17121:3;17142:67;17206:2;17201:3;17142:67;:::i;:::-;17135:74;;17218:93;17307:3;17218:93;:::i;:::-;17336:2;17331:3;17327:12;17320:19;;16979:366;;;:::o;17351:419::-;17517:4;17555:2;17544:9;17540:18;17532:26;;17604:9;17598:4;17594:20;17590:1;17579:9;17575:17;17568:47;17632:131;17758:4;17632:131;:::i;:::-;17624:139;;17351:419;;;:::o;17776:180::-;17824:77;17821:1;17814:88;17921:4;17918:1;17911:15;17945:4;17942:1;17935:15;17962:348;18002:7;18025:20;18043:1;18025:20;:::i;:::-;18020:25;;18059:20;18077:1;18059:20;:::i;:::-;18054:25;;18247:1;18179:66;18175:74;18172:1;18169:81;18164:1;18157:9;18150:17;18146:105;18143:131;;;18254:18;;:::i;:::-;18143:131;18302:1;18299;18295:9;18284:20;;17962:348;;;;:::o;18316:332::-;18437:4;18475:2;18464:9;18460:18;18452:26;;18488:71;18556:1;18545:9;18541:17;18532:6;18488:71;:::i;:::-;18569:72;18637:2;18626:9;18622:18;18613:6;18569:72;:::i;:::-;18316:332;;;;;:::o;18654:233::-;18693:3;18716:24;18734:5;18716:24;:::i;:::-;18707:33;;18762:66;18755:5;18752:77;18749:103;;18832:18;;:::i;:::-;18749:103;18879:1;18872:5;18868:13;18861:20;;18654:233;;;:::o;18893:227::-;19033:34;19029:1;19021:6;19017:14;19010:58;19102:10;19097:2;19089:6;19085:15;19078:35;18893:227;:::o;19126:366::-;19268:3;19289:67;19353:2;19348:3;19289:67;:::i;:::-;19282:74;;19365:93;19454:3;19365:93;:::i;:::-;19483:2;19478:3;19474:12;19467:19;;19126:366;;;:::o;19498:419::-;19664:4;19702:2;19691:9;19687:18;19679:26;;19751:9;19745:4;19741:20;19737:1;19726:9;19722:17;19715:47;19779:131;19905:4;19779:131;:::i;:::-;19771:139;;19498:419;;;:::o;19923:143::-;19980:5;20011:6;20005:13;19996:22;;20027:33;20054:5;20027:33;:::i;:::-;19923:143;;;;:::o;20072:351::-;20142:6;20191:2;20179:9;20170:7;20166:23;20162:32;20159:119;;;20197:79;;:::i;:::-;20159:119;20317:1;20342:64;20398:7;20389:6;20378:9;20374:22;20342:64;:::i;:::-;20332:74;;20288:128;20072:351;;;;:::o;20429:85::-;20474:7;20503:5;20492:16;;20429:85;;;:::o;20520:158::-;20578:9;20611:61;20629:42;20638:32;20664:5;20638:32;:::i;:::-;20629:42;:::i;:::-;20611:61;:::i;:::-;20598:74;;20520:158;;;:::o;20684:147::-;20779:45;20818:5;20779:45;:::i;:::-;20774:3;20767:58;20684:147;;:::o;20837:114::-;20904:6;20938:5;20932:12;20922:22;;20837:114;;;:::o;20957:184::-;21056:11;21090:6;21085:3;21078:19;21130:4;21125:3;21121:14;21106:29;;20957:184;;;;:::o;21147:132::-;21214:4;21237:3;21229:11;;21267:4;21262:3;21258:14;21250:22;;21147:132;;;:::o;21285:108::-;21362:24;21380:5;21362:24;:::i;:::-;21357:3;21350:37;21285:108;;:::o;21399:179::-;21468:10;21489:46;21531:3;21523:6;21489:46;:::i;:::-;21567:4;21562:3;21558:14;21544:28;;21399:179;;;;:::o;21584:113::-;21654:4;21686;21681:3;21677:14;21669:22;;21584:113;;;:::o;21733:732::-;21852:3;21881:54;21929:5;21881:54;:::i;:::-;21951:86;22030:6;22025:3;21951:86;:::i;:::-;21944:93;;22061:56;22111:5;22061:56;:::i;:::-;22140:7;22171:1;22156:284;22181:6;22178:1;22175:13;22156:284;;;22257:6;22251:13;22284:63;22343:3;22328:13;22284:63;:::i;:::-;22277:70;;22370:60;22423:6;22370:60;:::i;:::-;22360:70;;22216:224;22203:1;22200;22196:9;22191:14;;22156:284;;;22160:14;22456:3;22449:10;;21857:608;;;21733:732;;;;:::o;22471:720::-;22706:4;22744:3;22733:9;22729:19;22721:27;;22758:79;22834:1;22823:9;22819:17;22810:6;22758:79;:::i;:::-;22884:9;22878:4;22874:20;22869:2;22858:9;22854:18;22847:48;22912:108;23015:4;23006:6;22912:108;:::i;:::-;22904:116;;23030:72;23098:2;23087:9;23083:18;23074:6;23030:72;:::i;:::-;23112;23180:2;23169:9;23165:18;23156:6;23112:72;:::i;:::-;22471:720;;;;;;;:::o;23197:137::-;23251:5;23282:6;23276:13;23267:22;;23298:30;23322:5;23298:30;:::i;:::-;23197:137;;;;:::o;23340:345::-;23407:6;23456:2;23444:9;23435:7;23431:23;23427:32;23424:119;;;23462:79;;:::i;:::-;23424:119;23582:1;23607:61;23660:7;23651:6;23640:9;23636:22;23607:61;:::i;:::-;23597:71;;23553:125;23340:345;;;;:::o;23691:305::-;23731:3;23750:20;23768:1;23750:20;:::i;:::-;23745:25;;23784:20;23802:1;23784:20;:::i;:::-;23779:25;;23938:1;23870:66;23866:74;23863:1;23860:81;23857:107;;;23944:18;;:::i;:::-;23857:107;23988:1;23985;23981:9;23974:16;;23691:305;;;;:::o;24002:102::-;24044:8;24091:5;24088:1;24084:13;24063:34;;24002:102;;;:::o;24110:848::-;24171:5;24178:4;24202:6;24193:15;;24226:5;24217:14;;24240:712;24261:1;24251:8;24248:15;24240:712;;;24356:4;24351:3;24347:14;24341:4;24338:24;24335:50;;;24365:18;;:::i;:::-;24335:50;24415:1;24405:8;24401:16;24398:451;;;24830:4;24823:5;24819:16;24810:25;;24398:451;24880:4;24874;24870:15;24862:23;;24910:32;24933:8;24910:32;:::i;:::-;24898:44;;24240:712;;;24110:848;;;;;;;:::o;24964:1073::-;25018:5;25209:8;25199:40;;25230:1;25221:10;;25232:5;;25199:40;25258:4;25248:36;;25275:1;25266:10;;25277:5;;25248:36;25344:4;25392:1;25387:27;;;;25428:1;25423:191;;;;25337:277;;25387:27;25405:1;25396:10;;25407:5;;;25423:191;25468:3;25458:8;25455:17;25452:43;;;25475:18;;:::i;:::-;25452:43;25524:8;25521:1;25517:16;25508:25;;25559:3;25552:5;25549:14;25546:40;;;25566:18;;:::i;:::-;25546:40;25599:5;;;25337:277;;25723:2;25713:8;25710:16;25704:3;25698:4;25695:13;25691:36;25673:2;25663:8;25660:16;25655:2;25649:4;25646:12;25642:35;25626:111;25623:246;;;25779:8;25773:4;25769:19;25760:28;;25814:3;25807:5;25804:14;25801:40;;;25821:18;;:::i;:::-;25801:40;25854:5;;25623:246;25894:42;25932:3;25922:8;25916:4;25913:1;25894:42;:::i;:::-;25879:57;;;;25968:4;25963:3;25959:14;25952:5;25949:25;25946:51;;;25977:18;;:::i;:::-;25946:51;26026:4;26019:5;26015:16;26006:25;;24964:1073;;;;;;:::o;26043:281::-;26101:5;26125:23;26143:4;26125:23;:::i;:::-;26117:31;;26169:25;26185:8;26169:25;:::i;:::-;26157:37;;26213:104;26250:66;26240:8;26234:4;26213:104;:::i;:::-;26204:113;;26043:281;;;;:::o;26330:238::-;26470:34;26466:1;26458:6;26454:14;26447:58;26539:21;26534:2;26526:6;26522:15;26515:46;26330:238;:::o;26574:366::-;26716:3;26737:67;26801:2;26796:3;26737:67;:::i;:::-;26730:74;;26813:93;26902:3;26813:93;:::i;:::-;26931:2;26926:3;26922:12;26915:19;;26574:366;;;:::o;26946:419::-;27112:4;27150:2;27139:9;27135:18;27127:26;;27199:9;27193:4;27189:20;27185:1;27174:9;27170:17;27163:47;27227:131;27353:4;27227:131;:::i;:::-;27219:139;;26946:419;;;:::o;27371:224::-;27511:34;27507:1;27499:6;27495:14;27488:58;27580:7;27575:2;27567:6;27563:15;27556:32;27371:224;:::o;27601:366::-;27743:3;27764:67;27828:2;27823:3;27764:67;:::i;:::-;27757:74;;27840:93;27929:3;27840:93;:::i;:::-;27958:2;27953:3;27949:12;27942:19;;27601:366;;;:::o;27973:419::-;28139:4;28177:2;28166:9;28162:18;28154:26;;28226:9;28220:4;28216:20;28212:1;28201:9;28197:17;28190:47;28254:131;28380:4;28254:131;:::i;:::-;28246:139;;27973:419;;;:::o;28398:225::-;28538:34;28534:1;28526:6;28522:14;28515:58;28607:8;28602:2;28594:6;28590:15;28583:33;28398:225;:::o;28629:366::-;28771:3;28792:67;28856:2;28851:3;28792:67;:::i;:::-;28785:74;;28868:93;28957:3;28868:93;:::i;:::-;28986:2;28981:3;28977:12;28970:19;;28629:366;;;:::o;29001:419::-;29167:4;29205:2;29194:9;29190:18;29182:26;;29254:9;29248:4;29244:20;29240:1;29229:9;29225:17;29218:47;29282:131;29408:4;29282:131;:::i;:::-;29274:139;;29001:419;;;:::o;29426:120::-;29498:23;29515:5;29498:23;:::i;:::-;29491:5;29488:34;29478:62;;29536:1;29533;29526:12;29478:62;29426:120;:::o;29552:141::-;29608:5;29639:6;29633:13;29624:22;;29655:32;29681:5;29655:32;:::i;:::-;29552:141;;;;:::o;29699:349::-;29768:6;29817:2;29805:9;29796:7;29792:23;29788:32;29785:119;;;29823:79;;:::i;:::-;29785:119;29943:1;29968:63;30023:7;30014:6;30003:9;29999:22;29968:63;:::i;:::-;29958:73;;29914:127;29699:349;;;;:::o;30054:220::-;30194:34;30190:1;30182:6;30178:14;30171:58;30263:3;30258:2;30250:6;30246:15;30239:28;30054:220;:::o;30280:366::-;30422:3;30443:67;30507:2;30502:3;30443:67;:::i;:::-;30436:74;;30519:93;30608:3;30519:93;:::i;:::-;30637:2;30632:3;30628:12;30621:19;;30280:366;;;:::o;30652:419::-;30818:4;30856:2;30845:9;30841:18;30833:26;;30905:9;30899:4;30895:20;30891:1;30880:9;30876:17;30869:47;30933:131;31059:4;30933:131;:::i;:::-;30925:139;;30652:419;;;:::o;31077:177::-;31217:29;31213:1;31205:6;31201:14;31194:53;31077:177;:::o;31260:366::-;31402:3;31423:67;31487:2;31482:3;31423:67;:::i;:::-;31416:74;;31499:93;31588:3;31499:93;:::i;:::-;31617:2;31612:3;31608:12;31601:19;;31260:366;;;:::o;31632:419::-;31798:4;31836:2;31825:9;31821:18;31813:26;;31885:9;31879:4;31875:20;31871:1;31860:9;31856:17;31849:47;31913:131;32039:4;31913:131;:::i;:::-;31905:139;;31632:419;;;:::o;32057:223::-;32197:34;32193:1;32185:6;32181:14;32174:58;32266:6;32261:2;32253:6;32249:15;32242:31;32057:223;:::o;32286:366::-;32428:3;32449:67;32513:2;32508:3;32449:67;:::i;:::-;32442:74;;32525:93;32614:3;32525:93;:::i;:::-;32643:2;32638:3;32634:12;32627:19;;32286:366;;;:::o;32658:419::-;32824:4;32862:2;32851:9;32847:18;32839:26;;32911:9;32905:4;32901:20;32897:1;32886:9;32882:17;32875:47;32939:131;33065:4;32939:131;:::i;:::-;32931:139;;32658:419;;;:::o;33083:221::-;33223:34;33219:1;33211:6;33207:14;33200:58;33292:4;33287:2;33279:6;33275:15;33268:29;33083:221;:::o;33310:366::-;33452:3;33473:67;33537:2;33532:3;33473:67;:::i;:::-;33466:74;;33549:93;33638:3;33549:93;:::i;:::-;33667:2;33662:3;33658:12;33651:19;;33310:366;;;:::o;33682:419::-;33848:4;33886:2;33875:9;33871:18;33863:26;;33935:9;33929:4;33925:20;33921:1;33910:9;33906:17;33899:47;33963:131;34089:4;33963:131;:::i;:::-;33955:139;;33682:419;;;:::o;34107:525::-;34146:3;34165:19;34182:1;34165:19;:::i;:::-;34160:24;;34198:19;34215:1;34198:19;:::i;:::-;34193:24;;34386:1;34318:66;34314:74;34311:1;34307:82;34302:1;34299;34295:9;34288:17;34284:106;34281:132;;;34393:18;;:::i;:::-;34281:132;34573:1;34505:66;34501:74;34498:1;34494:82;34490:1;34487;34483:9;34479:98;34476:124;;;34580:18;;:::i;:::-;34476:124;34624:1;34621;34617:9;34610:16;;34107:525;;;;:::o;34638:134::-;34696:9;34729:37;34760:5;34729:37;:::i;:::-;34716:50;;34638:134;;;:::o;34778:147::-;34873:45;34912:5;34873:45;:::i;:::-;34868:3;34861:58;34778:147;;:::o;34931:348::-;35060:4;35098:2;35087:9;35083:18;35075:26;;35111:79;35187:1;35176:9;35172:17;35163:6;35111:79;:::i;:::-;35200:72;35268:2;35257:9;35253:18;35244:6;35200:72;:::i;:::-;34931:348;;;;;:::o;35285:191::-;35325:4;35345:20;35363:1;35345:20;:::i;:::-;35340:25;;35379:20;35397:1;35379:20;:::i;:::-;35374:25;;35418:1;35415;35412:8;35409:34;;;35423:18;;:::i;:::-;35409:34;35468:1;35465;35461:9;35453:17;;35285:191;;;;:::o;35482:527::-;35521:4;35541:19;35558:1;35541:19;:::i;:::-;35536:24;;35574:19;35591:1;35574:19;:::i;:::-;35569:24;;35763:1;35695:66;35691:74;35688:1;35684:82;35679:1;35676;35672:9;35665:17;35661:106;35658:132;;;35770:18;;:::i;:::-;35658:132;35949:1;35881:66;35877:74;35874:1;35870:82;35866:1;35863;35859:9;35855:98;35852:124;;;35956:18;;:::i;:::-;35852:124;36001:1;35998;35994:9;35986:17;;35482:527;;;;:::o;36015:181::-;36155:33;36151:1;36143:6;36139:14;36132:57;36015:181;:::o;36202:366::-;36344:3;36365:67;36429:2;36424:3;36365:67;:::i;:::-;36358:74;;36441:93;36530:3;36441:93;:::i;:::-;36559:2;36554:3;36550:12;36543:19;;36202:366;;;:::o;36574:419::-;36740:4;36778:2;36767:9;36763:18;36755:26;;36827:9;36821:4;36817:20;36813:1;36802:9;36798:17;36791:47;36855:131;36981:4;36855:131;:::i;:::-;36847:139;;36574:419;;;:::o;36999:220::-;37139:34;37135:1;37127:6;37123:14;37116:58;37208:3;37203:2;37195:6;37191:15;37184:28;36999:220;:::o;37225:366::-;37367:3;37388:67;37452:2;37447:3;37388:67;:::i;:::-;37381:74;;37464:93;37553:3;37464:93;:::i;:::-;37582:2;37577:3;37573:12;37566:19;;37225:366;;;:::o;37597:419::-;37763:4;37801:2;37790:9;37786:18;37778:26;;37850:9;37844:4;37840:20;37836:1;37825:9;37821:17;37814:47;37878:131;38004:4;37878:131;:::i;:::-;37870:139;;37597:419;;;:::o
Swarm Source
ipfs://8f034d826428144b4a877d6bd489e424527a07504e6a3d3a525603fea73006b6
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.