Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 994 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Claim Token | 8017176 | 510 days ago | IN | 0 MOVR | 0.00071556 | ||||
| Claim Token | 5916934 | 746 days ago | IN | 0 MOVR | 0.00039352 | ||||
| Claim Token | 5643122 | 787 days ago | IN | 0 MOVR | 0.00039352 | ||||
| Claim Token | 4991915 | 881 days ago | IN | 0 MOVR | 0.00039234 | ||||
| Claim Token | 4991910 | 881 days ago | IN | 0 MOVR | 0.00039234 | ||||
| Claim Token | 4991904 | 881 days ago | IN | 0 MOVR | 0.00039843 | ||||
| Claim Token | 4141895 | 1002 days ago | IN | 0 MOVR | 0.00037675 | ||||
| Claim Token | 3817897 | 1048 days ago | IN | 0 MOVR | 0.00023035 | ||||
| Claim Token | 3702133 | 1065 days ago | IN | 0 MOVR | 0.0002698 | ||||
| Claim Token | 3522039 | 1090 days ago | IN | 0 MOVR | 0.0002698 | ||||
| Claim Token | 2812824 | 1193 days ago | IN | 0 MOVR | 0.0002208 | ||||
| Claim Token | 2787772 | 1197 days ago | IN | 0 MOVR | 0.00029045 | ||||
| Claim Token | 2430375 | 1251 days ago | IN | 0 MOVR | 0.0002208 | ||||
| Claim Token | 2249887 | 1282 days ago | IN | 0 MOVR | 0.00006308 | ||||
| Claim Token | 2135627 | 1302 days ago | IN | 0 MOVR | 0.00020746 | ||||
| Claim Token | 2081626 | 1311 days ago | IN | 0 MOVR | 0.00021975 | ||||
| Claim Token | 1995355 | 1325 days ago | IN | 0 MOVR | 0.0002894 | ||||
| Claim Token | 1970426 | 1329 days ago | IN | 0 MOVR | 0.0002208 | ||||
| Claim Token | 1970424 | 1329 days ago | IN | 0 MOVR | 0.0002894 | ||||
| Claim Token | 1845349 | 1349 days ago | IN | 0 MOVR | 0.00006308 | ||||
| Claim Token | 1800026 | 1357 days ago | IN | 0 MOVR | 0.0002208 | ||||
| Claim Token | 1795147 | 1358 days ago | IN | 0 MOVR | 0.00015771 | ||||
| Claim Token | 1786590 | 1360 days ago | IN | 0 MOVR | 0.00006308 | ||||
| Claim Token | 1786587 | 1360 days ago | IN | 0 MOVR | 0.00006278 | ||||
| Claim Token | 1775765 | 1363 days ago | IN | 0 MOVR | 0.0002208 |
Latest 1 internal transaction
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 1329269 | 1467 days ago | 504.4168 MOVR |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
PolkabridgeLaunchPadV2
Compiler Version
v0.6.2+commit.bacdbe57
Contract Source Code (Solidity)
/**
*Submitted for verification at moonriver.moonscan.io on 2022-01-18
*/
pragma solidity >=0.6.0;
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function transferWithoutDeflationary(address recipient, uint256 amount) external returns (bool) ;
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
library SafeMath {
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
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;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
// Solidity only automatically asserts when dividing by 0
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;
}
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
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 Converts an `address` into `address payable`. Note that this is
* simply a type cast: the actual underlying value is not changed.
*
* _Available since v2.4.0._
*/
function toPayable(address account) internal pure returns (address payable) {
return address(uint160(account));
}
/**
* @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].
*
* _Available since v2.4.0._
*/
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");
}
}
library SafeERC20 {
using SafeMath for uint256;
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
function safeApprove(IERC20 token, address spender, uint256 value) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
// solhint-disable-next-line max-line-length
require((value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).add(value);
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves.
// A Solidity high level call has three parts:
// 1. The target address is checked to verify it contains contract code
// 2. The call itself is made, and success asserted
// 3. The return value is decoded, which in turn checks the size of the returned data.
// solhint-disable-next-line max-line-length
require(address(token).isContract(), "SafeERC20: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = address(token).call(data);
require(success, "SafeERC20: low-level call failed");
if (returndata.length > 0) { // Return data is optional
// solhint-disable-next-line max-line-length
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
contract Context {
// Empty internal constructor, to prevent people from mistakenly deploying
// an instance of this contract, which should be used via inheritance.
constructor () internal { }
function _msgSender() internal view virtual returns (address payable) {
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;
}
}
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 () internal {
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(isOwner(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Returns true if the caller is the current owner.
*/
function isOwner() public view returns (bool) {
return _msgSender() == _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 {
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
*/
function _transferOwnership(address newOwner) internal virtual {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
abstract contract ReentrancyGuard {
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() internal {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and make it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}
library ECDSA {
/**
* @dev Recover signer address from a message by using their signature
* @param hash bytes32 message, the hash is the signed message. What is recovered is the signer address.
* @param signature bytes signature, the signature is generated using web3.eth.sign()
*/
function recover(bytes32 hash, bytes memory signature)
internal
pure
returns (address)
{
bytes32 r;
bytes32 s;
uint8 v;
// Check the signature length
if (signature.length != 65) {
return (address(0));
}
// Divide the signature in r, s and v variables with inline assembly.
assembly {
r := mload(add(signature, 0x20))
s := mload(add(signature, 0x40))
v := byte(0, mload(add(signature, 0x60)))
}
// Version of signature should be 27 or 28, but 0 and 1 are also possible versions
if (v < 27) {
v += 27;
}
// If the version is correct return the signer address
if (v != 27 && v != 28) {
return (address(0));
} else {
// solium-disable-next-line arg-overflow
return ecrecover(hash, v, r, s);
}
}
/**
* toEthSignedMessageHash
* @dev prefix a bytes32 value with "\x19Ethereum Signed Message:"
* and hash the result
*/
function toEthSignedMessageHash(bytes32 hash)
internal
pure
returns (bytes32)
{
return
keccak256(
abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)
);
}
}
contract PolkabridgeLaunchPadV2 is Ownable, ReentrancyGuard {
string public name = "PolkaBridge: LaunchPad V2";
using SafeMath for uint256;
using SafeERC20 for IERC20;
using ECDSA for bytes32;
address payable private ReceiveToken;
uint256 MinimumStakeAmount;
struct IDOPool {
uint256 Id;
uint256 Begin;
uint256 End;
uint256 Type; //1: comminity round, 2 stackers round, 3 whitelist, 4 guaranteed
IERC20 IDOToken;
uint256 MaxPurchaseTier1;
uint256 MaxPurchaseTier2; //==comminity tier
uint256 MaxPurchaseTier3;
uint256 MaxSpecialPurchase;
uint256 TotalCap;
uint256 MinimumTokenSoldout;
uint256 TotalToken; //total sale token for this pool
uint256 RatePerETH;
uint256 TotalSold; //total number of token sold
}
struct ClaimInfo {
uint256 ClaimTime1;
uint256 PercentClaim1;
uint256 ClaimTime2;
uint256 PercentClaim2;
uint256 ClaimTime3;
uint256 PercentClaim3;
uint256 ClaimTime4;
uint256 PercentClaim4;
uint256 ClaimTime5;
uint256 PercentClaim5;
uint256 ClaimTime6;
uint256 PercentClaim6;
uint256 ClaimTime7;
uint256 PercentClaim7;
}
struct User {
uint256 Id;
bool IsWhitelist;
uint256 TotalTokenPurchase;
uint256 TotalETHPurchase;
uint256 PurchaseTime;
uint256 LastClaimed;
uint256 TotalPercentClaimed;
uint256 NumberClaimed;
uint256 PurchaseAllocation;
}
mapping(uint256 => mapping(address => User)) public users; //poolid - listuser
IDOPool[] pools;
mapping(uint256 => ClaimInfo) public claimInfos; //pid
constructor(address payable receiveTokenAdd) public {
ReceiveToken = receiveTokenAdd;
MinimumStakeAmount=10000*1e18;
}
function addMulWhitelist(address[] memory user,uint256[] memory allocation, uint256 pid)///need pid in constantfile
public
onlyOwner
{
for (uint256 i = 0; i < user.length; i++) {
users[pid][user[i]].Id = pid;
users[pid][user[i]].PurchaseAllocation = allocation[i];
users[pid][user[i]].IsWhitelist = true;
}
}
function sign(address[] memory user, uint256 pid)///need pid in constantfile
public
onlyOwner
{
uint256 poolIndex = pid.sub(1);
uint256 maxSpeical= pools[poolIndex].MaxSpecialPurchase;
uint256 tokenAmount = maxSpeical.mul(pools[poolIndex].RatePerETH).div(1e18);
for (uint256 i = 0; i < user.length; i++) {
users[pid][user[i]].TotalTokenPurchase = tokenAmount;
}
}
function updateWhitelist(
address user,
uint256 pid,
bool isWhitelist
) public onlyOwner {
users[pid][user].IsWhitelist = isWhitelist;
}
function updateMinimumStake(
uint256 _minimum
) public onlyOwner {
MinimumStakeAmount=_minimum;
}
function IsWhitelist(
address user,
uint256 pid,
uint256 stackAmount
) public view returns (bool) {
uint256 poolIndex = pid.sub(1);
if (pools[poolIndex].Type == 1) // community round
{
return true;
} else if (pools[poolIndex].Type == 2) // stakers round
{
if (stackAmount >= MinimumStakeAmount) return true;
return false;
} else if (pools[poolIndex].Type == 3 ) //special round
{
if (users[pid][user].IsWhitelist) return true;
return false;
}
else if (pools[poolIndex].Type ==4) //guaranteed round
{
if (users[pid][user].IsWhitelist && stackAmount >= MinimumStakeAmount) return true;
return false;
} else {
return false;
}
}
function addPool(
uint256 begin,
uint256 end,
uint256 _type,
IERC20 idoToken,
uint256 maxPurchaseTier1,
uint256 maxPurchaseTier2,
uint256 maxPurchaseTier3,
uint256 maxSpecialPurchase,
uint256 totalCap,
uint256 totalToken,
uint256 ratePerETH,
uint256 minimumTokenSoldout
) public onlyOwner {
uint256 id = pools.length.add(1);
pools.push(
IDOPool({
Id: id,
Begin: begin,
End: end,
Type: _type,
IDOToken: idoToken,
MaxPurchaseTier1: maxPurchaseTier1,
MaxPurchaseTier2: maxPurchaseTier2,
MaxPurchaseTier3: maxPurchaseTier3,
MaxSpecialPurchase:maxSpecialPurchase,
TotalCap: totalCap,
TotalToken: totalToken,
RatePerETH: ratePerETH,
TotalSold: 0,
MinimumTokenSoldout: minimumTokenSoldout
})
);
}
function addClaimInfo(
uint256 percentClaim1,
uint256 claimTime1,
uint256 percentClaim2,
uint256 claimTime2,
uint256 percentClaim3,
uint256 claimTime3,
uint256 percentClaim4,
uint256 claimTime4,
uint256 percentClaim5,
uint256 claimTime5,
uint256 percentClaim6,
uint256 claimTime6,
uint256 percentClaim7,
uint256 claimTime7,
uint256 pid
) public onlyOwner {
claimInfos[pid].ClaimTime1 = claimTime1;
claimInfos[pid].PercentClaim1 = percentClaim1;
claimInfos[pid].ClaimTime2 = claimTime2;
claimInfos[pid].PercentClaim2 = percentClaim2;
claimInfos[pid].ClaimTime3 = claimTime3;
claimInfos[pid].PercentClaim3 = percentClaim3;
claimInfos[pid].ClaimTime4 = claimTime4;
claimInfos[pid].PercentClaim4 = percentClaim4;
claimInfos[pid].ClaimTime5 = claimTime5;
claimInfos[pid].PercentClaim5 = percentClaim5;
claimInfos[pid].ClaimTime6 = claimTime6;
claimInfos[pid].PercentClaim6 = percentClaim6;
claimInfos[pid].ClaimTime7 = claimTime7;
claimInfos[pid].PercentClaim7 = percentClaim7;
}
function updateClaimInfo(
uint256 percentClaim1,
uint256 claimTime1,
uint256 percentClaim2,
uint256 claimTime2,
uint256 percentClaim3,
uint256 claimTime3,
uint256 percentClaim4,
uint256 claimTime4,
uint256 percentClaim5,
uint256 claimTime5,
uint256 percentClaim6,
uint256 claimTime6,
uint256 percentClaim7,
uint256 claimTime7,
uint256 pid
) public onlyOwner {
if (claimTime1 > 0) {
claimInfos[pid].ClaimTime1 = claimTime1;
}
if (percentClaim1 > 0) {
claimInfos[pid].PercentClaim1 = percentClaim1;
}
if (claimTime2 > 0) {
claimInfos[pid].ClaimTime2 = claimTime2;
}
if (percentClaim2 > 0) {
claimInfos[pid].PercentClaim2 = percentClaim2;
}
if (claimTime3 > 0) {
claimInfos[pid].ClaimTime3 = claimTime3;
}
if (percentClaim3 > 0) {
claimInfos[pid].PercentClaim3 = percentClaim3;
}
if (claimTime4 > 0) {
claimInfos[pid].ClaimTime4 = claimTime4;
}
if (percentClaim4 > 0) {
claimInfos[pid].PercentClaim4 = percentClaim4;
}
if (claimTime5 > 0) {
claimInfos[pid].ClaimTime5 = claimTime5;
}
if (percentClaim5 > 0) {
claimInfos[pid].PercentClaim5 = percentClaim5;
}
if (claimTime6 > 0) {
claimInfos[pid].ClaimTime6 = claimTime6;
}
if (percentClaim6 > 0) {
claimInfos[pid].PercentClaim6 = percentClaim6;
}
if (claimTime7 > 0) {
claimInfos[pid].ClaimTime7 = claimTime7;
}
if (percentClaim7 > 0) {
claimInfos[pid].PercentClaim7 = percentClaim7;
}
}
function updatePool(
uint256 pid,
uint256 begin,
uint256 end,
uint256 maxPurchaseTier1,
uint256 maxPurchaseTier2,
uint256 maxPurchaseTier3,
uint256 maxSpecialPurchase,
uint256 totalCap,
uint256 totalToken,
uint256 ratePerETH,
IERC20 idoToken,
uint256 pooltype
) public onlyOwner {
uint256 poolIndex = pid.sub(1);
if (begin > 0) {
pools[poolIndex].Begin = begin;
}
if (end > 0) {
pools[poolIndex].End = end;
}
if (maxPurchaseTier1 > 0) {
pools[poolIndex].MaxPurchaseTier1 = maxPurchaseTier1;
}
if (maxPurchaseTier2 > 0) {
pools[poolIndex].MaxPurchaseTier2 = maxPurchaseTier2;
}
if (maxPurchaseTier3 > 0) {
pools[poolIndex].MaxPurchaseTier3 = maxPurchaseTier3;
}
if (maxSpecialPurchase > 0) {
pools[poolIndex].MaxSpecialPurchase = maxSpecialPurchase;
}
if (totalCap > 0) {
pools[poolIndex].TotalCap = totalCap;
}
if (totalToken > 0) {
pools[poolIndex].TotalToken = totalToken;
}
if (ratePerETH > 0) {
pools[poolIndex].RatePerETH = ratePerETH;
}
if (pooltype > 0) {
pools[poolIndex].Type = pooltype;
}
pools[poolIndex].IDOToken = idoToken;
}
function withdrawErc20(IERC20 token) public onlyOwner {
token.transfer(owner(), token.balanceOf(address(this)));
}
//withdraw ETH after IDO
function withdrawPoolFund() public onlyOwner {
uint256 balance = address(this).balance;
require(balance > 0, "not enough fund");
ReceiveToken.transfer(balance);
}
function purchaseIDO(
uint256 stakeAmount,
uint256 pid,
uint8 v,
bytes32 r,
bytes32 s
) public payable nonReentrant {
uint256 poolIndex = pid.sub(1);
if (pools[poolIndex].Type == 2 || pools[poolIndex].Type == 4) {
bytes32 _hash = keccak256(abi.encodePacked(msg.sender, stakeAmount));
bytes32 messageHash = _hash.toEthSignedMessageHash();
require(
owner() == ecrecover(messageHash, v, r, s),
"owner should sign purchase info"
);
}
require(
block.timestamp >= pools[poolIndex].Begin &&
block.timestamp <= pools[poolIndex].End,
"invalid time"
);
//check user
require(IsWhitelist(msg.sender, pid, stakeAmount), "invalid user");
//check amount
uint256 ethAmount = msg.value;
users[pid][msg.sender].TotalETHPurchase = users[pid][msg.sender]
.TotalETHPurchase
.add(ethAmount);
if (pools[poolIndex].Type == 2) {
//stackers round
if (stakeAmount < 1500 * 1e18) {
require(
users[pid][msg.sender].TotalETHPurchase <=
pools[poolIndex].MaxPurchaseTier1,
"invalid maximum purchase for tier1"
);
} else if (
stakeAmount >= 1500 * 1e18 && stakeAmount < 3000 * 1e18
) {
require(
users[pid][msg.sender].TotalETHPurchase <=
pools[poolIndex].MaxPurchaseTier2,
"invalid maximum purchase for tier2"
);
} else {
require(
users[pid][msg.sender].TotalETHPurchase <=
pools[poolIndex].MaxPurchaseTier3,
"invalid maximum purchase for tier3"
);
}
} else if (pools[poolIndex].Type == 1) {
//community round
require(
users[pid][msg.sender].TotalETHPurchase <=
pools[poolIndex].MaxPurchaseTier2,
"invalid maximum contribute"
);
} else if (pools[poolIndex].Type == 3){//special
require(
users[pid][msg.sender].TotalETHPurchase <=
pools[poolIndex].MaxSpecialPurchase,
"invalid contribute"
);
}else{//4 guaranteed
require(
users[pid][msg.sender].TotalETHPurchase <=
users[pid][msg.sender].PurchaseAllocation,
"invalid contribute"
);
}
uint256 tokenAmount = ethAmount.mul(pools[poolIndex].RatePerETH).div(
1e18
);
uint256 remainToken = getRemainIDOToken(pid);
require(
remainToken > pools[poolIndex].MinimumTokenSoldout,
"IDO sold out"
);
require(remainToken >= tokenAmount, "IDO sold out");
users[pid][msg.sender].TotalTokenPurchase = users[pid][msg.sender]
.TotalTokenPurchase
.add(tokenAmount);
pools[poolIndex].TotalSold = pools[poolIndex].TotalSold.add(
tokenAmount
);
}
function claimToken(uint256 pid) public nonReentrant {
require(
users[pid][msg.sender].TotalPercentClaimed < 100,
"you have claimed enough"
);
uint256 userBalance = getUserTotalPurchase(pid);
require(userBalance > 0, "invalid claim");
uint256 poolIndex = pid.sub(1);
if (users[pid][msg.sender].NumberClaimed == 0) {
require(
block.timestamp >= claimInfos[poolIndex].ClaimTime1,
"invalid time"
);
pools[poolIndex].IDOToken.safeTransfer(
msg.sender,
userBalance.mul(claimInfos[poolIndex].PercentClaim1).div(100)
);
users[pid][msg.sender].TotalPercentClaimed= users[pid][msg.sender].TotalPercentClaimed.add(
claimInfos[poolIndex].PercentClaim1
);
} else if (users[pid][msg.sender].NumberClaimed == 1) {
require(
block.timestamp >= claimInfos[poolIndex].ClaimTime2,
"invalid time"
);
pools[poolIndex].IDOToken.safeTransfer(
msg.sender,
userBalance.mul(claimInfos[poolIndex].PercentClaim2).div(100)
);
users[pid][msg.sender].TotalPercentClaimed=users[pid][msg.sender].TotalPercentClaimed.add(
claimInfos[poolIndex].PercentClaim2
);
} else if (users[pid][msg.sender].NumberClaimed == 2) {
require(
block.timestamp >= claimInfos[poolIndex].ClaimTime3,
"invalid time"
);
pools[poolIndex].IDOToken.safeTransfer(
msg.sender,
userBalance.mul(claimInfos[poolIndex].PercentClaim3).div(100)
);
users[pid][msg.sender].TotalPercentClaimed= users[pid][msg.sender].TotalPercentClaimed.add(
claimInfos[poolIndex].PercentClaim3
);
}
else if (users[pid][msg.sender].NumberClaimed == 3) {
require(
block.timestamp >= claimInfos[poolIndex].ClaimTime4,
"invalid time"
);
pools[poolIndex].IDOToken.safeTransfer(
msg.sender,
userBalance.mul(claimInfos[poolIndex].PercentClaim4).div(100)
);
users[pid][msg.sender].TotalPercentClaimed= users[pid][msg.sender].TotalPercentClaimed.add(
claimInfos[poolIndex].PercentClaim4
);
}
else if (users[pid][msg.sender].NumberClaimed == 4) {
require(
block.timestamp >= claimInfos[poolIndex].ClaimTime5,
"invalid time"
);
pools[poolIndex].IDOToken.safeTransfer(
msg.sender,
userBalance.mul(claimInfos[poolIndex].PercentClaim5).div(100)
);
users[pid][msg.sender].TotalPercentClaimed= users[pid][msg.sender].TotalPercentClaimed.add(
claimInfos[poolIndex].PercentClaim5
);
}
else if (users[pid][msg.sender].NumberClaimed == 5) {
require(
block.timestamp >= claimInfos[poolIndex].ClaimTime6,
"invalid time"
);
pools[poolIndex].IDOToken.safeTransfer(
msg.sender,
userBalance.mul(claimInfos[poolIndex].PercentClaim6).div(100)
);
users[pid][msg.sender].TotalPercentClaimed= users[pid][msg.sender].TotalPercentClaimed.add(
claimInfos[poolIndex].PercentClaim6
);
}
else if (users[pid][msg.sender].NumberClaimed == 6) {
require(
block.timestamp >= claimInfos[poolIndex].ClaimTime7,
"invalid time"
);
pools[poolIndex].IDOToken.safeTransfer(
msg.sender,
userBalance.mul(claimInfos[poolIndex].PercentClaim7).div(100)
);
users[pid][msg.sender].TotalPercentClaimed= users[pid][msg.sender].TotalPercentClaimed.add(
claimInfos[poolIndex].PercentClaim7
);
}
users[pid][msg.sender].LastClaimed = block.timestamp;
users[pid][msg.sender].NumberClaimed=users[pid][msg.sender].NumberClaimed.add(1);
}
function getUserTotalPurchase(uint256 pid) public view returns (uint256) {
return users[pid][msg.sender].TotalTokenPurchase;
}
function getRemainIDOToken(uint256 pid) public view returns (uint256) {
uint256 poolIndex = pid.sub(1);
uint256 tokenBalance = getBalanceTokenByPoolId(pid);
if (pools[poolIndex].TotalSold > tokenBalance) {
return 0;
}
return tokenBalance.sub(pools[poolIndex].TotalSold);
}
function getBalanceTokenByPoolId(uint256 pid)
public
view
returns (uint256)
{
uint256 poolIndex = pid.sub(1);
return pools[poolIndex].TotalToken;
}
function getPoolInfo(uint256 pid)
public
view
returns (
uint256,
uint256,
uint256,
uint256,
uint256,
uint256,
uint256,
IERC20
)
{
uint256 poolIndex = pid.sub(1);
return (
pools[poolIndex].Begin,
pools[poolIndex].End,
pools[poolIndex].Type,
pools[poolIndex].RatePerETH,
pools[poolIndex].TotalSold,
pools[poolIndex].TotalToken,
pools[poolIndex].TotalCap,
pools[poolIndex].IDOToken
);
}
function getClaimInfo(uint256 pid)
public
view
returns (
uint256,
uint256,
uint256,
uint256,
uint256,
uint256
)
{
uint256 poolIndex = pid.sub(1);
return (
claimInfos[poolIndex].ClaimTime1,
claimInfos[poolIndex].PercentClaim1,
claimInfos[poolIndex].ClaimTime2,
claimInfos[poolIndex].PercentClaim2,
claimInfos[poolIndex].ClaimTime3,
claimInfos[poolIndex].PercentClaim3
);
}
function getPoolSoldInfo(uint256 pid) public view returns (uint256) {
uint256 poolIndex = pid.sub(1);
return (pools[poolIndex].TotalSold);
}
function getWhitelistfo(uint256 pid)
public
view
returns (
bool,
uint256,
uint256
)
{
return (
users[pid][msg.sender].IsWhitelist,
users[pid][msg.sender].TotalTokenPurchase,
users[pid][msg.sender].TotalETHPurchase
);
}
function getUserInfo(uint256 pid, address user)
public
view
returns (
bool,
uint256,
uint256,
uint256
)
{
return (
users[pid][user].IsWhitelist,
users[pid][user].TotalTokenPurchase,
users[pid][user].TotalETHPurchase,
users[pid][user].TotalPercentClaimed
);
}
function getUserPurchaseAllocation(uint256 pid, address user)
public
view
returns (
uint256
)
{
return (
users[pid][user].PurchaseAllocation
);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address payable","name":"receiveTokenAdd","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint256","name":"stackAmount","type":"uint256"}],"name":"IsWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentClaim1","type":"uint256"},{"internalType":"uint256","name":"claimTime1","type":"uint256"},{"internalType":"uint256","name":"percentClaim2","type":"uint256"},{"internalType":"uint256","name":"claimTime2","type":"uint256"},{"internalType":"uint256","name":"percentClaim3","type":"uint256"},{"internalType":"uint256","name":"claimTime3","type":"uint256"},{"internalType":"uint256","name":"percentClaim4","type":"uint256"},{"internalType":"uint256","name":"claimTime4","type":"uint256"},{"internalType":"uint256","name":"percentClaim5","type":"uint256"},{"internalType":"uint256","name":"claimTime5","type":"uint256"},{"internalType":"uint256","name":"percentClaim6","type":"uint256"},{"internalType":"uint256","name":"claimTime6","type":"uint256"},{"internalType":"uint256","name":"percentClaim7","type":"uint256"},{"internalType":"uint256","name":"claimTime7","type":"uint256"},{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"addClaimInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"user","type":"address[]"},{"internalType":"uint256[]","name":"allocation","type":"uint256[]"},{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"addMulWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"begin","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"},{"internalType":"uint256","name":"_type","type":"uint256"},{"internalType":"contract IERC20","name":"idoToken","type":"address"},{"internalType":"uint256","name":"maxPurchaseTier1","type":"uint256"},{"internalType":"uint256","name":"maxPurchaseTier2","type":"uint256"},{"internalType":"uint256","name":"maxPurchaseTier3","type":"uint256"},{"internalType":"uint256","name":"maxSpecialPurchase","type":"uint256"},{"internalType":"uint256","name":"totalCap","type":"uint256"},{"internalType":"uint256","name":"totalToken","type":"uint256"},{"internalType":"uint256","name":"ratePerETH","type":"uint256"},{"internalType":"uint256","name":"minimumTokenSoldout","type":"uint256"}],"name":"addPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimInfos","outputs":[{"internalType":"uint256","name":"ClaimTime1","type":"uint256"},{"internalType":"uint256","name":"PercentClaim1","type":"uint256"},{"internalType":"uint256","name":"ClaimTime2","type":"uint256"},{"internalType":"uint256","name":"PercentClaim2","type":"uint256"},{"internalType":"uint256","name":"ClaimTime3","type":"uint256"},{"internalType":"uint256","name":"PercentClaim3","type":"uint256"},{"internalType":"uint256","name":"ClaimTime4","type":"uint256"},{"internalType":"uint256","name":"PercentClaim4","type":"uint256"},{"internalType":"uint256","name":"ClaimTime5","type":"uint256"},{"internalType":"uint256","name":"PercentClaim5","type":"uint256"},{"internalType":"uint256","name":"ClaimTime6","type":"uint256"},{"internalType":"uint256","name":"PercentClaim6","type":"uint256"},{"internalType":"uint256","name":"ClaimTime7","type":"uint256"},{"internalType":"uint256","name":"PercentClaim7","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"claimToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"getBalanceTokenByPoolId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"getClaimInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"getPoolInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"getPoolSoldInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"getRemainIDOToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"address","name":"user","type":"address"}],"name":"getUserInfo","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"address","name":"user","type":"address"}],"name":"getUserPurchaseAllocation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"getUserTotalPurchase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"getWhitelistfo","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakeAmount","type":"uint256"},{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"purchaseIDO","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"user","type":"address[]"},{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"sign","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentClaim1","type":"uint256"},{"internalType":"uint256","name":"claimTime1","type":"uint256"},{"internalType":"uint256","name":"percentClaim2","type":"uint256"},{"internalType":"uint256","name":"claimTime2","type":"uint256"},{"internalType":"uint256","name":"percentClaim3","type":"uint256"},{"internalType":"uint256","name":"claimTime3","type":"uint256"},{"internalType":"uint256","name":"percentClaim4","type":"uint256"},{"internalType":"uint256","name":"claimTime4","type":"uint256"},{"internalType":"uint256","name":"percentClaim5","type":"uint256"},{"internalType":"uint256","name":"claimTime5","type":"uint256"},{"internalType":"uint256","name":"percentClaim6","type":"uint256"},{"internalType":"uint256","name":"claimTime6","type":"uint256"},{"internalType":"uint256","name":"percentClaim7","type":"uint256"},{"internalType":"uint256","name":"claimTime7","type":"uint256"},{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"updateClaimInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimum","type":"uint256"}],"name":"updateMinimumStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint256","name":"begin","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"},{"internalType":"uint256","name":"maxPurchaseTier1","type":"uint256"},{"internalType":"uint256","name":"maxPurchaseTier2","type":"uint256"},{"internalType":"uint256","name":"maxPurchaseTier3","type":"uint256"},{"internalType":"uint256","name":"maxSpecialPurchase","type":"uint256"},{"internalType":"uint256","name":"totalCap","type":"uint256"},{"internalType":"uint256","name":"totalToken","type":"uint256"},{"internalType":"uint256","name":"ratePerETH","type":"uint256"},{"internalType":"contract IERC20","name":"idoToken","type":"address"},{"internalType":"uint256","name":"pooltype","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"bool","name":"isWhitelist","type":"bool"}],"name":"updateWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"users","outputs":[{"internalType":"uint256","name":"Id","type":"uint256"},{"internalType":"bool","name":"IsWhitelist","type":"bool"},{"internalType":"uint256","name":"TotalTokenPurchase","type":"uint256"},{"internalType":"uint256","name":"TotalETHPurchase","type":"uint256"},{"internalType":"uint256","name":"PurchaseTime","type":"uint256"},{"internalType":"uint256","name":"LastClaimed","type":"uint256"},{"internalType":"uint256","name":"TotalPercentClaimed","type":"uint256"},{"internalType":"uint256","name":"NumberClaimed","type":"uint256"},{"internalType":"uint256","name":"PurchaseAllocation","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawErc20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawPoolFund","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040526040518060400160405280601981526020017f506f6c6b614272696467653a204c61756e6368506164205632000000000000008152506002908051906020019062000051929190620001ae565b503480156200005f57600080fd5b50604051620059e9380380620059e9833981810160405260208110156200008557600080fd5b81019080805190602001909291905050506000620000a8620001a660201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506001808190555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555069021e19e0c9bab2400000600481905550506200025d565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620001f157805160ff191683800117855562000222565b8280016001018555821562000222579182015b828111156200022157825182559160200191906001019062000204565b5b50905062000231919062000235565b5090565b6200025a91905b80821115620002565760008160009055506001016200023c565b5090565b90565b61577c806200026d6000396000f3fe6080604052600436106101c25760003560e01c80638f32d59b116100f7578063c30ef48711610095578063d207019311610064578063d207019314610cb4578063db0cd5b714610d26578063ddbb8f0214610df5578063f2fde38b14610f58576101c2565b8063c30ef48714610b5a578063c734e25314610bbb578063c7e42b1b14610c0a578063d0d5527514610c5b576101c2565b8063a9e7c2e5116100d1578063a9e7c2e51461095d578063b7de030314610998578063b9d02df4146109e7578063bf1145a114610a92576101c2565b80638f32d59b1461083557806396f5fef514610864578063a48ebe821461090e576101c2565b806336c287f911610164578063521d7d901161013e578063521d7d9014610698578063715018a6146107585780638b881c751461076f5780638da5cb5b146107de576101c2565b806336c287f9146105205780634c41e8801461059d57806350933d4d146105d8576101c2565b80631440b196116101a05780631440b196146103465780631f4552cb1461040e5780632561ae02146104255780632f380b3514610474576101c2565b806306fdde03146101c757806308405e74146102575780631069f3b5146102be575b600080fd5b3480156101d357600080fd5b506101dc610fa9565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561021c578082015181840152602081019050610201565b50505050905090810190601f1680156102495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561026357600080fd5b506102bc6004803603606081101561027a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803515159060200190929190505050611047565b005b3480156102ca57600080fd5b50610317600480360360408110156102e157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611131565b604051808515151515815260200184815260200183815260200182815260200194505050505060405180910390f35b34801561035257600080fd5b5061040c60048036036101e081101561036a57600080fd5b810190808035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291905050506112a5565b005b34801561041a57600080fd5b506104236114aa565b005b34801561043157600080fd5b5061045e6004803603602081101561044857600080fd5b810190808035906020019092919050505061160b565b6040518082815260200191505060405180910390f35b34801561048057600080fd5b506104ad6004803603602081101561049757600080fd5b810190808035906020019092919050505061169d565b604051808981526020018881526020018781526020018681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019850505050505050505060405180910390f35b34801561052c57600080fd5b506105836004803603606081101561054357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291905050506117f5565b604051808215151515815260200191505060405180910390f35b3480156105a957600080fd5b506105d6600480360360208110156105c057600080fd5b81019080803590602001909291905050506119e0565b005b3480156105e457600080fd5b5061069660048036036101808110156105fc57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050611a64565b005b3480156106a457600080fd5b5061075660048036036101808110156106bc57600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c7b565b005b34801561076457600080fd5b5061076d611f3b565b005b34801561077b57600080fd5b506107c86004803603604081101561079257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612074565b6040518082815260200191505060405180910390f35b3480156107ea57600080fd5b506107f36120d2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561084157600080fd5b5061084a6120fb565b604051808215151515815260200191505060405180910390f35b34801561087057600080fd5b5061089d6004803603602081101561088757600080fd5b8101908080359060200190929190505050612159565b604051808f81526020018e81526020018d81526020018c81526020018b81526020018a81526020018981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019e50505050505050505050505050505060405180910390f35b34801561091a57600080fd5b506109476004803603602081101561093157600080fd5b81019080803590602001909291905050506121c5565b6040518082815260200191505060405180910390f35b34801561096957600080fd5b506109966004803603602081101561098057600080fd5b8101908080359060200190929190505050612222565b005b3480156109a457600080fd5b506109d1600480360360208110156109bb57600080fd5b81019080803590602001909291905050506135e6565b6040518082815260200191505060405180910390f35b3480156109f357600080fd5b50610a4060048036036040811015610a0a57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613626565b604051808a815260200189151515158152602001888152602001878152602001868152602001858152602001848152602001838152602001828152602001995050505050505050505060405180910390f35b348015610a9e57600080fd5b50610b5860048036036101e0811015610ab657600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919050505061368e565b005b348015610b6657600080fd5b50610b9360048036036020811015610b7d57600080fd5b810190808035906020019092919050505061391f565b6040518084151515158152602001838152602001828152602001935050505060405180910390f35b348015610bc757600080fd5b50610bf460048036036020811015610bde57600080fd5b8101908080359060200190929190505050613a3a565b6040518082815260200191505060405180910390f35b348015610c1657600080fd5b50610c5960048036036020811015610c2d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613a7a565b005b610cb2600480360360a0811015610c7157600080fd5b810190808035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050613c78565b005b348015610cc057600080fd5b50610ced60048036036020811015610cd757600080fd5b8101908080359060200190929190505050614977565b60405180878152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390f35b348015610d3257600080fd5b50610df360048036036040811015610d4957600080fd5b8101908080359060200190640100000000811115610d6657600080fd5b820183602082011115610d7857600080fd5b80359060200191846020830284011164010000000083111715610d9a57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050614a38565b005b348015610e0157600080fd5b50610f5660048036036060811015610e1857600080fd5b8101908080359060200190640100000000811115610e3557600080fd5b820183602082011115610e4757600080fd5b80359060200191846020830284011164010000000083111715610e6957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610ec957600080fd5b820183602082011115610edb57600080fd5b80359060200191846020830284011164010000000083111715610efd57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050614bcb565b005b348015610f6457600080fd5b50610fa760048036036020811015610f7b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614dcf565b005b60028054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561103f5780601f106110145761010080835404028352916020019161103f565b820191906000526020600020905b81548152906001019060200180831161102257829003601f168201915b505050505081565b61104f6120fb565b6110c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b806005600084815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff021916908315150217905550505050565b6000806000806005600087815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff166005600088815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546005600089815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154600560008a815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154935093509350935092959194509250565b6112ad6120fb565b61131f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8d60076000838152602001908152602001600020600001819055508e60076000838152602001908152602001600020600101819055508b60076000838152602001908152602001600020600201819055508c60076000838152602001908152602001600020600301819055508960076000838152602001908152602001600020600401819055508a60076000838152602001908152602001600020600501819055508760076000838152602001908152602001600020600601819055508860076000838152602001908152602001600020600701819055508560076000838152602001908152602001600020600801819055508660076000838152602001908152602001600020600901819055508360076000838152602001908152602001600020600a01819055508460076000838152602001908152602001600020600b01819055508160076000838152602001908152602001600020600c01819055508260076000838152602001908152602001600020600d0181905550505050505050505050505050505050565b6114b26120fb565b611524576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60004790506000811161159f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f6e6f7420656e6f7567682066756e64000000000000000000000000000000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611607573d6000803e3d6000fd5b5050565b600080611622600184614e5590919063ffffffff16565b9050600061162f846135e6565b9050806006838154811061163f57fe5b90600052602060002090600e0201600d0154111561166257600092505050611698565b6116936006838154811061167257fe5b90600052602060002090600e0201600d015482614e5590919063ffffffff16565b925050505b919050565b60008060008060008060008060006116bf60018b614e5590919063ffffffff16565b9050600681815481106116ce57fe5b90600052602060002090600e020160010154600682815481106116ed57fe5b90600052602060002090600e0201600201546006838154811061170c57fe5b90600052602060002090600e0201600301546006848154811061172b57fe5b90600052602060002090600e0201600c01546006858154811061174a57fe5b90600052602060002090600e0201600d01546006868154811061176957fe5b90600052602060002090600e0201600b01546006878154811061178857fe5b90600052602060002090600e020160090154600688815481106117a757fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169850985098509850985098509850985050919395975091939597565b60008061180c600185614e5590919063ffffffff16565b905060016006828154811061181d57fe5b90600052602060002090600e020160030154141561183f5760019150506119d9565b60026006828154811061184e57fe5b90600052602060002090600e02016003015414156118835760045483106118795760019150506119d9565b60009150506119d9565b60036006828154811061189257fe5b90600052602060002090600e0201600301541415611924576005600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff161561191a5760019150506119d9565b60009150506119d9565b60046006828154811061193357fe5b90600052602060002090600e02016003015414156119d3576005600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff1680156119ba57506004548310155b156119c95760019150506119d9565b60009150506119d9565b60009150505b9392505050565b6119e86120fb565b611a5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060048190555050565b611a6c6120fb565b611ade576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000611af96001600680549050614e9f90919063ffffffff16565b90506006604051806101c001604052808381526020018f81526020018e81526020018d81526020018c73ffffffffffffffffffffffffffffffffffffffff1681526020018b81526020018a8152602001898152602001888152602001878152602001848152602001868152602001858152602001600081525090806001815401808255809150506001900390600052602060002090600e02016000909190919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c01556101a082015181600d0155505050505050505050505050505050565b611c836120fb565b611cf5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000611d0b60018e614e5590919063ffffffff16565b905060008c1115611d3a578b60068281548110611d2457fe5b90600052602060002090600e0201600101819055505b60008b1115611d67578a60068281548110611d5157fe5b90600052602060002090600e0201600201819055505b60008a1115611d94578960068281548110611d7e57fe5b90600052602060002090600e0201600501819055505b6000891115611dc1578860068281548110611dab57fe5b90600052602060002090600e0201600601819055505b6000881115611dee578760068281548110611dd857fe5b90600052602060002090600e0201600701819055505b6000871115611e1b578660068281548110611e0557fe5b90600052602060002090600e0201600801819055505b6000861115611e48578560068281548110611e3257fe5b90600052602060002090600e0201600901819055505b6000851115611e75578460068281548110611e5f57fe5b90600052602060002090600e0201600b01819055505b6000841115611ea2578360068281548110611e8c57fe5b90600052602060002090600e0201600c01819055505b6000821115611ecf578160068281548110611eb957fe5b90600052602060002090600e0201600301819055505b8260068281548110611edd57fe5b90600052602060002090600e020160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505050505050505050565b611f436120fb565b611fb5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006005600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060080154905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661213d614f27565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600760205280600052604060002060009150905080600001549080600101549080600201549080600301549080600401549080600501549080600601549080600701549080600801549080600901549080600a01549080600b01549080600c01549080600d015490508e565b60006005600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549050919050565b6002600154141561229b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600260018190555060646005600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601541061236c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f796f75206861766520636c61696d656420656e6f75676800000000000000000081525060200191505060405180910390fd5b6000612377826121c5565b9050600081116123ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f696e76616c696420636c61696d0000000000000000000000000000000000000081525060200191505060405180910390fd5b6000612405600184614e5590919063ffffffff16565b905060006005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070154141561266b5760076000828152602001908152602001600020600001544210156124ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b6125933361252f6064612521600760008781526020019081526020016000206001015487614f2f90919063ffffffff16565b614fb590919063ffffffff16565b6006848154811061253c57fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614fff9092919063ffffffff16565b61260f60076000838152602001908152602001600020600101546005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154614e9f90919063ffffffff16565b6005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506134c4565b60016005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007015414156128cf576007600082815260200190815260200160002060020154421015612753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b6127f7336127936064612785600760008781526020019081526020016000206003015487614f2f90919063ffffffff16565b614fb590919063ffffffff16565b600684815481106127a057fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614fff9092919063ffffffff16565b61287360076000838152602001908152602001600020600301546005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154614e9f90919063ffffffff16565b6005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506134c3565b60026005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600701541415612b335760076000828152602001908152602001600020600401544210156129b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b612a5b336129f760646129e9600760008781526020019081526020016000206005015487614f2f90919063ffffffff16565b614fb590919063ffffffff16565b60068481548110612a0457fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614fff9092919063ffffffff16565b612ad760076000838152602001908152602001600020600501546005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154614e9f90919063ffffffff16565b6005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506134c2565b60036005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600701541415612d97576007600082815260200190815260200160002060060154421015612c1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b612cbf33612c5b6064612c4d600760008781526020019081526020016000206007015487614f2f90919063ffffffff16565b614fb590919063ffffffff16565b60068481548110612c6857fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614fff9092919063ffffffff16565b612d3b60076000838152602001908152602001600020600701546005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154614e9f90919063ffffffff16565b6005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506134c1565b60046005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600701541415612ffb576007600082815260200190815260200160002060080154421015612e7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b612f2333612ebf6064612eb1600760008781526020019081526020016000206009015487614f2f90919063ffffffff16565b614fb590919063ffffffff16565b60068481548110612ecc57fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614fff9092919063ffffffff16565b612f9f60076000838152602001908152602001600020600901546005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154614e9f90919063ffffffff16565b6005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506134c0565b600580600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070154141561325e5760076000828152602001908152602001600020600a01544210156130e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b61318633613122606461311460076000878152602001908152602001600020600b015487614f2f90919063ffffffff16565b614fb590919063ffffffff16565b6006848154811061312f57fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614fff9092919063ffffffff16565b61320260076000838152602001908152602001600020600b01546005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154614e9f90919063ffffffff16565b6005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506134bf565b60066005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007015414156134be5760076000828152602001908152602001600020600c0154421015613346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b6133ea33613386606461337860076000878152602001908152602001600020600d015487614f2f90919063ffffffff16565b614fb590919063ffffffff16565b6006848154811061339357fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614fff9092919063ffffffff16565b61346660076000838152602001908152602001600020600d01546005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154614e9f90919063ffffffff16565b6005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055505b5b5b5b5b5b5b426005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206005018190555061358360016005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070154614e9f90919063ffffffff16565b6005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007018190555050506001808190555050565b6000806135fd600184614e5590919063ffffffff16565b90506006818154811061360c57fe5b90600052602060002090600e0201600b0154915050919050565b6005602052816000526040600020602052806000526040600020600091509150508060000154908060010160009054906101000a900460ff16908060020154908060030154908060040154908060050154908060060154908060070154908060080154905089565b6136966120fb565b613708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008e111561372d578d60076000838152602001908152602001600020600001819055505b60008f1115613752578e60076000838152602001908152602001600020600101819055505b60008c1115613777578b60076000838152602001908152602001600020600201819055505b60008d111561379c578c60076000838152602001908152602001600020600301819055505b60008a11156137c1578960076000838152602001908152602001600020600401819055505b60008b11156137e6578a60076000838152602001908152602001600020600501819055505b600088111561380b578760076000838152602001908152602001600020600601819055505b6000891115613830578860076000838152602001908152602001600020600701819055505b6000861115613855578560076000838152602001908152602001600020600801819055505b600087111561387a578660076000838152602001908152602001600020600901819055505b600084111561389f578360076000838152602001908152602001600020600a01819055505b60008511156138c4578460076000838152602001908152602001600020600b01819055505b60008211156138e9578160076000838152602001908152602001600020600c01819055505b600083111561390e578260076000838152602001908152602001600020600d01819055505b505050505050505050505050505050565b60008060006005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff166005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546005600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301549250925092509193909250565b600080613a51600184614e5590919063ffffffff16565b905060068181548110613a6057fe5b90600052602060002090600e0201600d0154915050919050565b613a826120fb565b613af4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb613b186120d2565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613b9557600080fd5b505afa158015613ba9573d6000803e3d6000fd5b505050506040513d6020811015613bbf57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613c3957600080fd5b505af1158015613c4d573d6000803e3d6000fd5b505050506040513d6020811015613c6357600080fd5b81019080805190602001909291905050505050565b60026001541415613cf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026001819055506000613d0f600186614e5590919063ffffffff16565b9050600260068281548110613d2057fe5b90600052602060002090600e0201600301541480613d5c5750600460068281548110613d4857fe5b90600052602060002090600e020160030154145b15613ee15760003387604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401828152602001925050506040516020818303038152906040528051906020012090506000613dce826150b7565b905060018187878760405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613e2d573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16613e556120d2565b73ffffffffffffffffffffffffffffffffffffffff1614613ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f6f776e65722073686f756c64207369676e20707572636861736520696e666f0081525060200191505060405180910390fd5b50505b60068181548110613eee57fe5b90600052602060002090600e0201600101544210158015613f2d575060068181548110613f1757fe5b90600052602060002090600e0201600201544211155b613f9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b613faa3386886117f5565b61401c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642075736572000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000349050614087816005600089815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154614e9f90919063ffffffff16565b6005600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055506002600683815481106140ed57fe5b90600052602060002090600e02016003015414156143ab57685150ae84a8cdf000008710156141e5576006828154811061412357fe5b90600052602060002090600e0201600501546005600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015411156141e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806156d96022913960400191505060405180910390fd5b6143a6565b685150ae84a8cdf000008710158015614206575068a2a15d09519be0000087105b156142da576006828154811061421857fe5b90600052602060002090600e0201600601546005600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015411156142d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806156966022913960400191505060405180910390fd5b6143a5565b600682815481106142e757fe5b90600052602060002090600e0201600701546005600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015411156143a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806156fb6022913960400191505060405180910390fd5b5b5b6146f0565b6001600683815481106143ba57fe5b90600052602060002090600e02016003015414156144be57600682815481106143df57fe5b90600052602060002090600e0201600601546005600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015411156144b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f696e76616c6964206d6178696d756d20636f6e7472696275746500000000000081525060200191505060405180910390fd5b6146ef565b6003600683815481106144cd57fe5b90600052602060002090600e02016003015414156145d157600682815481106144f257fe5b90600052602060002090600e0201600801546005600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015411156145cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f696e76616c696420636f6e74726962757465000000000000000000000000000081525060200191505060405180910390fd5b6146ee565b6005600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600801546005600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015411156146ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f696e76616c696420636f6e74726962757465000000000000000000000000000081525060200191505060405180910390fd5b5b5b5b600061473d670de0b6b3a764000061472f6006868154811061470e57fe5b90600052602060002090600e0201600c015485614f2f90919063ffffffff16565b614fb590919063ffffffff16565b9050600061474a8861160b565b90506006848154811061475957fe5b90600052602060002090600e0201600a015481116147df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f49444f20736f6c64206f7574000000000000000000000000000000000000000081525060200191505060405180910390fd5b81811015614855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f49444f20736f6c64206f7574000000000000000000000000000000000000000081525060200191505060405180910390fd5b6148bb82600560008b815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154614e9f90919063ffffffff16565b600560008a815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550614943826006868154811061492357fe5b90600052602060002090600e0201600d0154614e9f90919063ffffffff16565b6006858154811061495057fe5b90600052602060002090600e0201600d018190555050505050600180819055505050505050565b6000806000806000806000614996600189614e5590919063ffffffff16565b90506007600082815260200190815260200160002060000154600760008381526020019081526020016000206001015460076000848152602001908152602001600020600201546007600085815260200190815260200160002060030154600760008681526020019081526020016000206004015460076000878152602001908152602001600020600501549650965096509650965096505091939550919395565b614a406120fb565b614ab2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000614ac8600183614e5590919063ffffffff16565b9050600060068281548110614ad957fe5b90600052602060002090600e02016008015490506000614b3a670de0b6b3a7640000614b2c60068681548110614b0b57fe5b90600052602060002090600e0201600c015485614f2f90919063ffffffff16565b614fb590919063ffffffff16565b905060008090505b8551811015614bc35781600560008781526020019081526020016000206000888481518110614b6d57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055508080600101915050614b42565b505050505050565b614bd36120fb565b614c45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008090505b8351811015614dc95781600560008481526020019081526020016000206000868481518110614c7657fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550828181518110614ccb57fe5b6020026020010151600560008481526020019081526020016000206000868481518110614cf457fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600801819055506001600560008481526020019081526020016000206000868481518110614d6057fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff0219169083151502179055508080600101915050614c4b565b50505050565b614dd76120fb565b614e49576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b614e528161510f565b50565b6000614e9783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615253565b905092915050565b600080828401905083811015614f1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b600080831415614f425760009050614faf565b6000828402905082848281614f5357fe5b0414614faa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806156b86021913960400191505060405180910390fd5b809150505b92915050565b6000614ff783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615313565b905092915050565b6150b28363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506153d9565b505050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415615195576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806156706026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000838311158290615300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156152c55780820151818401526020810190506152aa565b50505050905090810190601f1680156152f25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080831182906153bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615384578082015181840152602081019050615369565b50505050905090810190601f1680156153b15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816153cb57fe5b049050809150509392505050565b6153f88273ffffffffffffffffffffffffffffffffffffffff16615624565b61546a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b602083106154b95780518252602082019150602081019050602083039250615496565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461551b576040519150601f19603f3d011682016040523d82523d6000602084013e615520565b606091505b509150915081615598576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b60008151111561561e578080602001905160208110156155b757600080fd5b810190808051906020019092919050505061561d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061571d602a913960400191505060405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561566657506000801b8214155b9250505091905056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373696e76616c6964206d6178696d756d20707572636861736520666f72207469657232536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77696e76616c6964206d6178696d756d20707572636861736520666f72207469657231696e76616c6964206d6178696d756d20707572636861736520666f722074696572335361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122006aaf7266f9f053771769ead57f490edeff2172b6fc97d8890598949176ed8d564736f6c6343000602003300000000000000000000000057866ed63ca5f9744cef9aa270bd1f1dce935831
Deployed Bytecode
0x6080604052600436106101c25760003560e01c80638f32d59b116100f7578063c30ef48711610095578063d207019311610064578063d207019314610cb4578063db0cd5b714610d26578063ddbb8f0214610df5578063f2fde38b14610f58576101c2565b8063c30ef48714610b5a578063c734e25314610bbb578063c7e42b1b14610c0a578063d0d5527514610c5b576101c2565b8063a9e7c2e5116100d1578063a9e7c2e51461095d578063b7de030314610998578063b9d02df4146109e7578063bf1145a114610a92576101c2565b80638f32d59b1461083557806396f5fef514610864578063a48ebe821461090e576101c2565b806336c287f911610164578063521d7d901161013e578063521d7d9014610698578063715018a6146107585780638b881c751461076f5780638da5cb5b146107de576101c2565b806336c287f9146105205780634c41e8801461059d57806350933d4d146105d8576101c2565b80631440b196116101a05780631440b196146103465780631f4552cb1461040e5780632561ae02146104255780632f380b3514610474576101c2565b806306fdde03146101c757806308405e74146102575780631069f3b5146102be575b600080fd5b3480156101d357600080fd5b506101dc610fa9565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561021c578082015181840152602081019050610201565b50505050905090810190601f1680156102495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561026357600080fd5b506102bc6004803603606081101561027a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803515159060200190929190505050611047565b005b3480156102ca57600080fd5b50610317600480360360408110156102e157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611131565b604051808515151515815260200184815260200183815260200182815260200194505050505060405180910390f35b34801561035257600080fd5b5061040c60048036036101e081101561036a57600080fd5b810190808035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291905050506112a5565b005b34801561041a57600080fd5b506104236114aa565b005b34801561043157600080fd5b5061045e6004803603602081101561044857600080fd5b810190808035906020019092919050505061160b565b6040518082815260200191505060405180910390f35b34801561048057600080fd5b506104ad6004803603602081101561049757600080fd5b810190808035906020019092919050505061169d565b604051808981526020018881526020018781526020018681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019850505050505050505060405180910390f35b34801561052c57600080fd5b506105836004803603606081101561054357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291905050506117f5565b604051808215151515815260200191505060405180910390f35b3480156105a957600080fd5b506105d6600480360360208110156105c057600080fd5b81019080803590602001909291905050506119e0565b005b3480156105e457600080fd5b5061069660048036036101808110156105fc57600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190505050611a64565b005b3480156106a457600080fd5b5061075660048036036101808110156106bc57600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c7b565b005b34801561076457600080fd5b5061076d611f3b565b005b34801561077b57600080fd5b506107c86004803603604081101561079257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612074565b6040518082815260200191505060405180910390f35b3480156107ea57600080fd5b506107f36120d2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561084157600080fd5b5061084a6120fb565b604051808215151515815260200191505060405180910390f35b34801561087057600080fd5b5061089d6004803603602081101561088757600080fd5b8101908080359060200190929190505050612159565b604051808f81526020018e81526020018d81526020018c81526020018b81526020018a81526020018981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019e50505050505050505050505050505060405180910390f35b34801561091a57600080fd5b506109476004803603602081101561093157600080fd5b81019080803590602001909291905050506121c5565b6040518082815260200191505060405180910390f35b34801561096957600080fd5b506109966004803603602081101561098057600080fd5b8101908080359060200190929190505050612222565b005b3480156109a457600080fd5b506109d1600480360360208110156109bb57600080fd5b81019080803590602001909291905050506135e6565b6040518082815260200191505060405180910390f35b3480156109f357600080fd5b50610a4060048036036040811015610a0a57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613626565b604051808a815260200189151515158152602001888152602001878152602001868152602001858152602001848152602001838152602001828152602001995050505050505050505060405180910390f35b348015610a9e57600080fd5b50610b5860048036036101e0811015610ab657600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919050505061368e565b005b348015610b6657600080fd5b50610b9360048036036020811015610b7d57600080fd5b810190808035906020019092919050505061391f565b6040518084151515158152602001838152602001828152602001935050505060405180910390f35b348015610bc757600080fd5b50610bf460048036036020811015610bde57600080fd5b8101908080359060200190929190505050613a3a565b6040518082815260200191505060405180910390f35b348015610c1657600080fd5b50610c5960048036036020811015610c2d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613a7a565b005b610cb2600480360360a0811015610c7157600080fd5b810190808035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050613c78565b005b348015610cc057600080fd5b50610ced60048036036020811015610cd757600080fd5b8101908080359060200190929190505050614977565b60405180878152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390f35b348015610d3257600080fd5b50610df360048036036040811015610d4957600080fd5b8101908080359060200190640100000000811115610d6657600080fd5b820183602082011115610d7857600080fd5b80359060200191846020830284011164010000000083111715610d9a57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050614a38565b005b348015610e0157600080fd5b50610f5660048036036060811015610e1857600080fd5b8101908080359060200190640100000000811115610e3557600080fd5b820183602082011115610e4757600080fd5b80359060200191846020830284011164010000000083111715610e6957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610ec957600080fd5b820183602082011115610edb57600080fd5b80359060200191846020830284011164010000000083111715610efd57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050614bcb565b005b348015610f6457600080fd5b50610fa760048036036020811015610f7b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614dcf565b005b60028054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561103f5780601f106110145761010080835404028352916020019161103f565b820191906000526020600020905b81548152906001019060200180831161102257829003601f168201915b505050505081565b61104f6120fb565b6110c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b806005600084815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff021916908315150217905550505050565b6000806000806005600087815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff166005600088815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546005600089815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154600560008a815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154935093509350935092959194509250565b6112ad6120fb565b61131f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8d60076000838152602001908152602001600020600001819055508e60076000838152602001908152602001600020600101819055508b60076000838152602001908152602001600020600201819055508c60076000838152602001908152602001600020600301819055508960076000838152602001908152602001600020600401819055508a60076000838152602001908152602001600020600501819055508760076000838152602001908152602001600020600601819055508860076000838152602001908152602001600020600701819055508560076000838152602001908152602001600020600801819055508660076000838152602001908152602001600020600901819055508360076000838152602001908152602001600020600a01819055508460076000838152602001908152602001600020600b01819055508160076000838152602001908152602001600020600c01819055508260076000838152602001908152602001600020600d0181905550505050505050505050505050505050565b6114b26120fb565b611524576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60004790506000811161159f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f6e6f7420656e6f7567682066756e64000000000000000000000000000000000081525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611607573d6000803e3d6000fd5b5050565b600080611622600184614e5590919063ffffffff16565b9050600061162f846135e6565b9050806006838154811061163f57fe5b90600052602060002090600e0201600d0154111561166257600092505050611698565b6116936006838154811061167257fe5b90600052602060002090600e0201600d015482614e5590919063ffffffff16565b925050505b919050565b60008060008060008060008060006116bf60018b614e5590919063ffffffff16565b9050600681815481106116ce57fe5b90600052602060002090600e020160010154600682815481106116ed57fe5b90600052602060002090600e0201600201546006838154811061170c57fe5b90600052602060002090600e0201600301546006848154811061172b57fe5b90600052602060002090600e0201600c01546006858154811061174a57fe5b90600052602060002090600e0201600d01546006868154811061176957fe5b90600052602060002090600e0201600b01546006878154811061178857fe5b90600052602060002090600e020160090154600688815481106117a757fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169850985098509850985098509850985050919395975091939597565b60008061180c600185614e5590919063ffffffff16565b905060016006828154811061181d57fe5b90600052602060002090600e020160030154141561183f5760019150506119d9565b60026006828154811061184e57fe5b90600052602060002090600e02016003015414156118835760045483106118795760019150506119d9565b60009150506119d9565b60036006828154811061189257fe5b90600052602060002090600e0201600301541415611924576005600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff161561191a5760019150506119d9565b60009150506119d9565b60046006828154811061193357fe5b90600052602060002090600e02016003015414156119d3576005600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff1680156119ba57506004548310155b156119c95760019150506119d9565b60009150506119d9565b60009150505b9392505050565b6119e86120fb565b611a5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060048190555050565b611a6c6120fb565b611ade576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000611af96001600680549050614e9f90919063ffffffff16565b90506006604051806101c001604052808381526020018f81526020018e81526020018d81526020018c73ffffffffffffffffffffffffffffffffffffffff1681526020018b81526020018a8152602001898152602001888152602001878152602001848152602001868152602001858152602001600081525090806001815401808255809150506001900390600052602060002090600e02016000909190919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c01556101a082015181600d0155505050505050505050505050505050565b611c836120fb565b611cf5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000611d0b60018e614e5590919063ffffffff16565b905060008c1115611d3a578b60068281548110611d2457fe5b90600052602060002090600e0201600101819055505b60008b1115611d67578a60068281548110611d5157fe5b90600052602060002090600e0201600201819055505b60008a1115611d94578960068281548110611d7e57fe5b90600052602060002090600e0201600501819055505b6000891115611dc1578860068281548110611dab57fe5b90600052602060002090600e0201600601819055505b6000881115611dee578760068281548110611dd857fe5b90600052602060002090600e0201600701819055505b6000871115611e1b578660068281548110611e0557fe5b90600052602060002090600e0201600801819055505b6000861115611e48578560068281548110611e3257fe5b90600052602060002090600e0201600901819055505b6000851115611e75578460068281548110611e5f57fe5b90600052602060002090600e0201600b01819055505b6000841115611ea2578360068281548110611e8c57fe5b90600052602060002090600e0201600c01819055505b6000821115611ecf578160068281548110611eb957fe5b90600052602060002090600e0201600301819055505b8260068281548110611edd57fe5b90600052602060002090600e020160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505050505050505050565b611f436120fb565b611fb5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006005600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060080154905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661213d614f27565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600760205280600052604060002060009150905080600001549080600101549080600201549080600301549080600401549080600501549080600601549080600701549080600801549080600901549080600a01549080600b01549080600c01549080600d015490508e565b60006005600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549050919050565b6002600154141561229b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b600260018190555060646005600083815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601541061236c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f796f75206861766520636c61696d656420656e6f75676800000000000000000081525060200191505060405180910390fd5b6000612377826121c5565b9050600081116123ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f696e76616c696420636c61696d0000000000000000000000000000000000000081525060200191505060405180910390fd5b6000612405600184614e5590919063ffffffff16565b905060006005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070154141561266b5760076000828152602001908152602001600020600001544210156124ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b6125933361252f6064612521600760008781526020019081526020016000206001015487614f2f90919063ffffffff16565b614fb590919063ffffffff16565b6006848154811061253c57fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614fff9092919063ffffffff16565b61260f60076000838152602001908152602001600020600101546005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154614e9f90919063ffffffff16565b6005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506134c4565b60016005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007015414156128cf576007600082815260200190815260200160002060020154421015612753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b6127f7336127936064612785600760008781526020019081526020016000206003015487614f2f90919063ffffffff16565b614fb590919063ffffffff16565b600684815481106127a057fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614fff9092919063ffffffff16565b61287360076000838152602001908152602001600020600301546005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154614e9f90919063ffffffff16565b6005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506134c3565b60026005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600701541415612b335760076000828152602001908152602001600020600401544210156129b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b612a5b336129f760646129e9600760008781526020019081526020016000206005015487614f2f90919063ffffffff16565b614fb590919063ffffffff16565b60068481548110612a0457fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614fff9092919063ffffffff16565b612ad760076000838152602001908152602001600020600501546005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154614e9f90919063ffffffff16565b6005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506134c2565b60036005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600701541415612d97576007600082815260200190815260200160002060060154421015612c1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b612cbf33612c5b6064612c4d600760008781526020019081526020016000206007015487614f2f90919063ffffffff16565b614fb590919063ffffffff16565b60068481548110612c6857fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614fff9092919063ffffffff16565b612d3b60076000838152602001908152602001600020600701546005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154614e9f90919063ffffffff16565b6005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506134c1565b60046005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600701541415612ffb576007600082815260200190815260200160002060080154421015612e7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b612f2333612ebf6064612eb1600760008781526020019081526020016000206009015487614f2f90919063ffffffff16565b614fb590919063ffffffff16565b60068481548110612ecc57fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614fff9092919063ffffffff16565b612f9f60076000838152602001908152602001600020600901546005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154614e9f90919063ffffffff16565b6005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506134c0565b600580600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070154141561325e5760076000828152602001908152602001600020600a01544210156130e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b61318633613122606461311460076000878152602001908152602001600020600b015487614f2f90919063ffffffff16565b614fb590919063ffffffff16565b6006848154811061312f57fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614fff9092919063ffffffff16565b61320260076000838152602001908152602001600020600b01546005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154614e9f90919063ffffffff16565b6005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506134bf565b60066005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007015414156134be5760076000828152602001908152602001600020600c0154421015613346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b6133ea33613386606461337860076000878152602001908152602001600020600d015487614f2f90919063ffffffff16565b614fb590919063ffffffff16565b6006848154811061339357fe5b90600052602060002090600e020160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16614fff9092919063ffffffff16565b61346660076000838152602001908152602001600020600d01546005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154614e9f90919063ffffffff16565b6005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055505b5b5b5b5b5b5b426005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206005018190555061358360016005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070154614e9f90919063ffffffff16565b6005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007018190555050506001808190555050565b6000806135fd600184614e5590919063ffffffff16565b90506006818154811061360c57fe5b90600052602060002090600e0201600b0154915050919050565b6005602052816000526040600020602052806000526040600020600091509150508060000154908060010160009054906101000a900460ff16908060020154908060030154908060040154908060050154908060060154908060070154908060080154905089565b6136966120fb565b613708576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008e111561372d578d60076000838152602001908152602001600020600001819055505b60008f1115613752578e60076000838152602001908152602001600020600101819055505b60008c1115613777578b60076000838152602001908152602001600020600201819055505b60008d111561379c578c60076000838152602001908152602001600020600301819055505b60008a11156137c1578960076000838152602001908152602001600020600401819055505b60008b11156137e6578a60076000838152602001908152602001600020600501819055505b600088111561380b578760076000838152602001908152602001600020600601819055505b6000891115613830578860076000838152602001908152602001600020600701819055505b6000861115613855578560076000838152602001908152602001600020600801819055505b600087111561387a578660076000838152602001908152602001600020600901819055505b600084111561389f578360076000838152602001908152602001600020600a01819055505b60008511156138c4578460076000838152602001908152602001600020600b01819055505b60008211156138e9578160076000838152602001908152602001600020600c01819055505b600083111561390e578260076000838152602001908152602001600020600d01819055505b505050505050505050505050505050565b60008060006005600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff166005600086815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546005600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301549250925092509193909250565b600080613a51600184614e5590919063ffffffff16565b905060068181548110613a6057fe5b90600052602060002090600e0201600d0154915050919050565b613a826120fb565b613af4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb613b186120d2565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613b9557600080fd5b505afa158015613ba9573d6000803e3d6000fd5b505050506040513d6020811015613bbf57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613c3957600080fd5b505af1158015613c4d573d6000803e3d6000fd5b505050506040513d6020811015613c6357600080fd5b81019080805190602001909291905050505050565b60026001541415613cf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b60026001819055506000613d0f600186614e5590919063ffffffff16565b9050600260068281548110613d2057fe5b90600052602060002090600e0201600301541480613d5c5750600460068281548110613d4857fe5b90600052602060002090600e020160030154145b15613ee15760003387604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401828152602001925050506040516020818303038152906040528051906020012090506000613dce826150b7565b905060018187878760405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613e2d573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16613e556120d2565b73ffffffffffffffffffffffffffffffffffffffff1614613ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f6f776e65722073686f756c64207369676e20707572636861736520696e666f0081525060200191505060405180910390fd5b50505b60068181548110613eee57fe5b90600052602060002090600e0201600101544210158015613f2d575060068181548110613f1757fe5b90600052602060002090600e0201600201544211155b613f9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642074696d65000000000000000000000000000000000000000081525060200191505060405180910390fd5b613faa3386886117f5565b61401c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f696e76616c69642075736572000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000349050614087816005600089815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154614e9f90919063ffffffff16565b6005600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055506002600683815481106140ed57fe5b90600052602060002090600e02016003015414156143ab57685150ae84a8cdf000008710156141e5576006828154811061412357fe5b90600052602060002090600e0201600501546005600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015411156141e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806156d96022913960400191505060405180910390fd5b6143a6565b685150ae84a8cdf000008710158015614206575068a2a15d09519be0000087105b156142da576006828154811061421857fe5b90600052602060002090600e0201600601546005600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015411156142d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806156966022913960400191505060405180910390fd5b6143a5565b600682815481106142e757fe5b90600052602060002090600e0201600701546005600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015411156143a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806156fb6022913960400191505060405180910390fd5b5b5b6146f0565b6001600683815481106143ba57fe5b90600052602060002090600e02016003015414156144be57600682815481106143df57fe5b90600052602060002090600e0201600601546005600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015411156144b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f696e76616c6964206d6178696d756d20636f6e7472696275746500000000000081525060200191505060405180910390fd5b6146ef565b6003600683815481106144cd57fe5b90600052602060002090600e02016003015414156145d157600682815481106144f257fe5b90600052602060002090600e0201600801546005600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015411156145cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f696e76616c696420636f6e74726962757465000000000000000000000000000081525060200191505060405180910390fd5b6146ee565b6005600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600801546005600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015411156146ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f696e76616c696420636f6e74726962757465000000000000000000000000000081525060200191505060405180910390fd5b5b5b5b600061473d670de0b6b3a764000061472f6006868154811061470e57fe5b90600052602060002090600e0201600c015485614f2f90919063ffffffff16565b614fb590919063ffffffff16565b9050600061474a8861160b565b90506006848154811061475957fe5b90600052602060002090600e0201600a015481116147df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f49444f20736f6c64206f7574000000000000000000000000000000000000000081525060200191505060405180910390fd5b81811015614855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f49444f20736f6c64206f7574000000000000000000000000000000000000000081525060200191505060405180910390fd5b6148bb82600560008b815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154614e9f90919063ffffffff16565b600560008a815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550614943826006868154811061492357fe5b90600052602060002090600e0201600d0154614e9f90919063ffffffff16565b6006858154811061495057fe5b90600052602060002090600e0201600d018190555050505050600180819055505050505050565b6000806000806000806000614996600189614e5590919063ffffffff16565b90506007600082815260200190815260200160002060000154600760008381526020019081526020016000206001015460076000848152602001908152602001600020600201546007600085815260200190815260200160002060030154600760008681526020019081526020016000206004015460076000878152602001908152602001600020600501549650965096509650965096505091939550919395565b614a406120fb565b614ab2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000614ac8600183614e5590919063ffffffff16565b9050600060068281548110614ad957fe5b90600052602060002090600e02016008015490506000614b3a670de0b6b3a7640000614b2c60068681548110614b0b57fe5b90600052602060002090600e0201600c015485614f2f90919063ffffffff16565b614fb590919063ffffffff16565b905060008090505b8551811015614bc35781600560008781526020019081526020016000206000888481518110614b6d57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055508080600101915050614b42565b505050505050565b614bd36120fb565b614c45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008090505b8351811015614dc95781600560008481526020019081526020016000206000868481518110614c7657fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550828181518110614ccb57fe5b6020026020010151600560008481526020019081526020016000206000868481518110614cf457fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600801819055506001600560008481526020019081526020016000206000868481518110614d6057fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff0219169083151502179055508080600101915050614c4b565b50505050565b614dd76120fb565b614e49576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b614e528161510f565b50565b6000614e9783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250615253565b905092915050565b600080828401905083811015614f1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b600080831415614f425760009050614faf565b6000828402905082848281614f5357fe5b0414614faa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806156b86021913960400191505060405180910390fd5b809150505b92915050565b6000614ff783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615313565b905092915050565b6150b28363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506153d9565b505050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415615195576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806156706026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000838311158290615300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156152c55780820151818401526020810190506152aa565b50505050905090810190601f1680156152f25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080831182906153bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615384578082015181840152602081019050615369565b50505050905090810190601f1680156153b15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816153cb57fe5b049050809150509392505050565b6153f88273ffffffffffffffffffffffffffffffffffffffff16615624565b61546a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b602083106154b95780518252602082019150602081019050602083039250615496565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461551b576040519150601f19603f3d011682016040523d82523d6000602084013e615520565b606091505b509150915081615598576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b60008151111561561e578080602001905160208110156155b757600080fd5b810190808051906020019092919050505061561d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061571d602a913960400191505060405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561566657506000801b8214155b9250505091905056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373696e76616c6964206d6178696d756d20707572636861736520666f72207469657232536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77696e76616c6964206d6178696d756d20707572636861736520666f72207469657231696e76616c6964206d6178696d756d20707572636861736520666f722074696572335361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122006aaf7266f9f053771769ead57f490edeff2172b6fc97d8890598949176ed8d564736f6c63430006020033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000057866ed63ca5f9744cef9aa270bd1f1dce935831
-----Decoded View---------------
Arg [0] : receiveTokenAdd (address): 0x57866ed63cA5F9744CEf9aa270bD1f1dCe935831
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000057866ed63ca5f9744cef9aa270bd1f1dce935831
Deployed Bytecode Sourcemap
14385:21507:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14452:48;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14452:48:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;14452:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17297:191;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17297:191:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17297:191:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35220:426;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35220:426:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;35220:426:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19654:1251;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19654:1251:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;19654:1251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24574:194;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24574:194:0;;;:::i;:::-;;32818:337;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32818:337:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32818:337:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33375:665;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33375:665:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;33375:665:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17637:877;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17637:877:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17637:877:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17496:133;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17496:133:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17496:133:0;;;;;;;;;;;;;;;;;:::i;:::-;;18522:1124;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18522:1124:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;18522:1124:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22875:1525;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22875:1525:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;22875:1525:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10821:148;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10821:148:0;;;:::i;:::-;;35654:235;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35654:235:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;35654:235:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;10010:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10010:79:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10376:94;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10376:94:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16186:47;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16186:47:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16186:47:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32670:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32670:140:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32670:140:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28231:4431;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28231:4431:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28231:4431:0;;;;;;;;;;;;;;;;;:::i;:::-;;33163:204;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33163:204:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;33163:204:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16076:57;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16076:57:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16076:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20913:1954;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20913:1954:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;20913:1954:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34827:385;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34827:385:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;34827:385:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34656:163;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34656:163:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;34656:163:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24408:128;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24408:128:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24408:128:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;24776:3447;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;24776:3447:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34048:600;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34048:600:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;34048:600:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16812:477;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16812:477:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16812:477:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;16812:477:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16812:477:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;16812:477:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;16812:477:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16397:407;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16397:407:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16397:407:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;16397:407:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16397:407:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;16397:407:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;16397:407:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;16397:407:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16397:407:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;16397:407:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;16397:407:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11124:117;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11124:117:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11124:117:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;14452:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17297:191::-;10222:9;:7;:9::i;:::-;10214:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17460:11:::1;17429:5;:10;17435:3;17429:10;;;;;;;;;;;:16;17440:4;17429:16;;;;;;;;;;;;;;;:28;;;:42;;;;;;;;;;;;;;;;;;17297:191:::0;;;:::o;35220:426::-;35330:4;35349:7;35371;35393;35450:5;:10;35456:3;35450:10;;;;;;;;;;;:16;35461:4;35450:16;;;;;;;;;;;;;;;:28;;;;;;;;;;;;35493:5;:10;35499:3;35493:10;;;;;;;;;;;:16;35504:4;35493:16;;;;;;;;;;;;;;;:35;;;35543:5;:10;35549:3;35543:10;;;;;;;;;;;:16;35554:4;35543:16;;;;;;;;;;;;;;;:33;;;35591:5;:10;35597:3;35591:10;;;;;;;;;;;:16;35602:4;35591:16;;;;;;;;;;;;;;;:36;;;35428:210;;;;;;;;35220:426;;;;;;;:::o;19654:1251::-;10222:9;:7;:9::i;:::-;10214:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20193:10:::1;20164;:15;20175:3;20164:15;;;;;;;;;;;:26;;:39;;;;20246:13;20214:10;:15;20225:3;20214:15;;;;;;;;;;;:29;;:45;;;;20299:10;20270;:15;20281:3;20270:15;;;;;;;;;;;:26;;:39;;;;20352:13;20320:10;:15;20331:3;20320:15;;;;;;;;;;;:29;;:45;;;;20405:10;20376;:15;20387:3;20376:15;;;;;;;;;;;:26;;:39;;;;20458:13;20426:10;:15;20437:3;20426:15;;;;;;;;;;;:29;;:45;;;;20511:10;20482;:15;20493:3;20482:15;;;;;;;;;;;:26;;:39;;;;20564:13;20532:10;:15;20543:3;20532:15;;;;;;;;;;;:29;;:45;;;;20617:10;20588;:15;20599:3;20588:15;;;;;;;;;;;:26;;:39;;;;20670:13;20638:10;:15;20649:3;20638:15;;;;;;;;;;;:29;;:45;;;;20724:10;20695;:15;20706:3;20695:15;;;;;;;;;;;:26;;:39;;;;20777:13;20745:10;:15;20756:3;20745:15;;;;;;;;;;;:29;;:45;;;;20831:10;20802;:15;20813:3;20802:15;;;;;;;;;;;:26;;:39;;;;20884:13;20852:10;:15;20863:3;20852:15;;;;;;;;;;;:29;;:45;;;;19654:1251:::0;;;;;;;;;;;;;;;:::o;24574:194::-;10222:9;:7;:9::i;:::-;10214:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24630:15:::1;24648:21;24630:39;;24698:1;24688:7;:11;24680:39;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;24730:12;;;;;;;;;;;:21;;:30;24752:7;24730:30;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24730:30:0;10279:1;24574:194::o:0;32818:337::-;32879:7;32899:17;32919:10;32927:1;32919:3;:7;;:10;;;;:::i;:::-;32899:30;;32940:20;32963:28;32987:3;32963:23;:28::i;:::-;32940:51;;33035:12;33006:5;33012:9;33006:16;;;;;;;;;;;;;;;;;;:26;;;:41;33002:82;;;33071:1;33064:8;;;;;;33002:82;33103:44;33120:5;33126:9;33120:16;;;;;;;;;;;;;;;;;;:26;;;33103:12;:16;;:44;;;;:::i;:::-;33096:51;;;;32818:337;;;;:::o;33375:665::-;33471:7;33493;33515;33537;33559;33581;33604;33626:6;33660:17;33680:10;33688:1;33680:3;:7;;:10;;;;:::i;:::-;33660:30;;33723:5;33729:9;33723:16;;;;;;;;;;;;;;;;;;:22;;;33760:5;33766:9;33760:16;;;;;;;;;;;;;;;;;;:20;;;33795:5;33801:9;33795:16;;;;;;;;;;;;;;;;;;:21;;;33831:5;33837:9;33831:16;;;;;;;;;;;;;;;;;;:27;;;33873:5;33879:9;33873:16;;;;;;;;;;;;;;;;;;:26;;;33914:5;33920:9;33914:16;;;;;;;;;;;;;;;;;;:27;;;33956:5;33962:9;33956:16;;;;;;;;;;;;;;;;;;:25;;;33996:5;34002:9;33996:16;;;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;33701:331;;;;;;;;;;;;;;;;;33375:665;;;;;;;;;:::o;17637:877::-;17761:4;17778:17;17798:10;17806:1;17798:3;:7;;:10;;;;:::i;:::-;17778:30;;17848:1;17823:5;17829:9;17823:16;;;;;;;;;;;;;;;;;;:21;;;:26;17819:688;;;17901:4;17894:11;;;;;17819:688;17952:1;17927:5;17933:9;17927:16;;;;;;;;;;;;;;;;;;:21;;;:26;17923:584;;;18015:18;;18000:11;:33;17996:50;;18042:4;18035:11;;;;;17996:50;18068:5;18061:12;;;;;17923:584;18120:1;18095:5;18101:9;18095:16;;;;;;;;;;;;;;;;;;:21;;;:26;18091:416;;;18170:5;:10;18176:3;18170:10;;;;;;;;;;;:16;18181:4;18170:16;;;;;;;;;;;;;;;:28;;;;;;;;;;;;18166:45;;;18207:4;18200:11;;;;;18166:45;18233:5;18226:12;;;;;18091:416;18293:1;18269:5;18275:9;18269:16;;;;;;;;;;;;;;;;;;:21;;;:25;18265:242;;;18345:5;:10;18351:3;18345:10;;;;;;;;;;;:16;18356:4;18345:16;;;;;;;;;;;;;;;:28;;;;;;;;;;;;:65;;;;;18392:18;;18377:11;:33;;18345:65;18341:82;;;18419:4;18412:11;;;;;18341:82;18445:5;18438:12;;;;;18265:242;18490:5;18483:12;;;17637:877;;;;;;:::o;17496:133::-;10222:9;:7;:9::i;:::-;10214:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17604:8:::1;17585:18;:27;;;;17496:133:::0;:::o;18522:1124::-;10222:9;:7;:9::i;:::-;10214:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18944:10:::1;18957:19;18974:1;18957:5;:12;;;;:16;;:19;;;;:::i;:::-;18944:32;;18987:5;19012:615;;;;;;;;19043:2;19012:615;;;;19071:5;19012:615;;;;19100:3;19012:615;;;;19128:5;19012:615;;;;19162:8;19012:615;;;;;;19207:16;19012:615;;;;19260:16;19012:615;;;;19313:16;19012:615;;;;19367:18;19012:615;;;;19414:8;19012:615;;;;19575:19;19012:615;;;;19453:10;19012:615;;;;19494:10;19012:615;;;;19534:1;19012:615;;::::0;18987:651:::1;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;18987:651:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10279:1;18522:1124:::0;;;;;;;;;;;;:::o;22875:1525::-;10222:9;:7;:9::i;:::-;10214:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23296:17:::1;23316:10;23324:1;23316:3;:7;;:10;;;;:::i;:::-;23296:30;;23349:1;23341:5;:9;23337:72;;;23392:5;23367;23373:9;23367:16;;;;;;;;;;;;;;;;;;:22;;:30;;;;23337:72;23429:1;23423:3;:7;23419:66;;;23470:3;23447:5;23453:9;23447:16;;;;;;;;;;;;;;;;;;:20;;:26;;;;23419:66;23520:1;23501:16;:20;23497:105;;;23574:16;23538:5;23544:9;23538:16;;;;;;;;;;;;;;;;;;:33;;:52;;;;23497:105;23635:1;23616:16;:20;23612:105;;;23689:16;23653:5;23659:9;23653:16;;;;;;;;;;;;;;;;;;:33;;:52;;;;23612:105;23750:1;23731:16;:20;23727:105;;;23804:16;23768:5;23774:9;23768:16;;;;;;;;;;;;;;;;;;:33;;:52;;;;23727:105;23869:1;23848:18;:22;23844:111;;;23925:18;23887:5;23893:9;23887:16;;;;;;;;;;;;;;;;;;:35;;:56;;;;23844:111;23980:1;23969:8;:12;23965:81;;;24026:8;23998:5;24004:9;23998:16;;;;;;;;;;;;;;;;;;:25;;:36;;;;23965:81;24073:1;24060:10;:14;24056:87;;;24121:10;24091:5;24097:9;24091:16;;;;;;;;;;;;;;;;;;:27;;:40;;;;24056:87;24170:1;24157:10;:14;24153:87;;;24218:10;24188:5;24194:9;24188:16;;;;;;;;;;;;;;;;;;:27;;:40;;;;24153:87;24284:1;24273:8;:12;24269:77;;;24326:8;24302:5;24308:9;24302:16;;;;;;;;;;;;;;;;;;:21;;:32;;;;24269:77;24384:8;24356:5;24362:9;24356:16;;;;;;;;;;;;;;;;;;:25;;;:36;;;;;;;;;;;;;;;;;;10279:1;22875:1525:::0;;;;;;;;;;;;:::o;10821:148::-;10222:9;:7;:9::i;:::-;10214:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10928:1:::1;10891:40;;10912:6;::::0;::::1;;;;;;;;;10891:40;;;;;;;;;;;;10959:1;10942:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;10821:148::o:0;35654:235::-;35778:7;35835:5;:10;35841:3;35835:10;;;;;;;;;;;:16;35846:4;35835:16;;;;;;;;;;;;;;;:35;;;35813:68;;35654:235;;;;:::o;10010:79::-;10048:7;10075:6;;;;;;;;;;;10068:13;;10010:79;:::o;10376:94::-;10416:4;10456:6;;;;;;;;;;;10440:22;;:12;:10;:12::i;:::-;:22;;;10433:29;;10376:94;:::o;16186:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;32670:140::-;32734:7;32761:5;:10;32767:3;32761:10;;;;;;;;;;;:22;32772:10;32761:22;;;;;;;;;;;;;;;:41;;;32754:48;;32670:140;;;:::o;28231:4431::-;11714:1;12319:7;;:19;;12311:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11714:1;12452:7;:18;;;;28362:3:::1;28317:5;:10;28323:3;28317:10;;;;;;;;;;;:22;28328:10;28317:22;;;;;;;;;;;;;;;:42;;;:48;28295:121;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;28427:19;28449:25;28470:3;28449:20;:25::i;:::-;28427:47;;28507:1;28493:11;:15;28485:41;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;28539:17;28559:10;28567:1;28559:3;:7;;:10;;;;:::i;:::-;28539:30;;28624:1;28584:5;:10;28590:3;28584:10;;;;;;;;;;;:22;28595:10;28584:22;;;;;;;;;;;;;;;:36;;;:41;28580:3919;;;28687:10;:21;28698:9;28687:21;;;;;;;;;;;:32;;;28668:15;:51;;28642:125;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;28782:162;28839:10;28868:61;28925:3;28868:52;28884:10;:21;28895:9;28884:21;;;;;;;;;;;:35;;;28868:11;:15;;:52;;;;:::i;:::-;:56;;:61;;;;:::i;:::-;28782:5;28788:9;28782:16;;;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;:38;;;;:162;;;;;:::i;:::-;29002:115;29067:10;:21;29078:9;29067:21;;;;;;;;;;;:35;;;29002:5;:10;29008:3;29002:10;;;;;;;;;;;:22;29013:10;29002:22;;;;;;;;;;;;;;;:42;;;:46;;:115;;;;:::i;:::-;28957:5;:10;28963:3;28957:10;;;;;;;;;;;:22;28968:10;28957:22;;;;;;;;;;;;;;;:42;;:160;;;;28580:3919;;;29179:1;29139:5;:10;29145:3;29139:10;;;;;;;;;;;:22;29150:10;29139:22;;;;;;;;;;;;;;;:36;;;:41;29135:3364;;;29242:10;:21;29253:9;29242:21;;;;;;;;;;;:32;;;29223:15;:51;;29197:125;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;29337:162;29394:10;29423:61;29480:3;29423:52;29439:10;:21;29450:9;29439:21;;;;;;;;;;;:35;;;29423:11;:15;;:52;;;;:::i;:::-;:56;;:61;;;;:::i;:::-;29337:5;29343:9;29337:16;;;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;:38;;;;:162;;;;;:::i;:::-;29557:115;29622:10;:21;29633:9;29622:21;;;;;;;;;;;:35;;;29557:5;:10;29563:3;29557:10;;;;;;;;;;;:22;29568:10;29557:22;;;;;;;;;;;;;;;:42;;;:46;;:115;;;;:::i;:::-;29514:5;:10;29520:3;29514:10;;;;;;;;;;;:22;29525:10;29514:22;;;;;;;;;;;;;;;:42;;:158;;;;29135:3364;;;29734:1;29694:5;:10;29700:3;29694:10;;;;;;;;;;;:22;29705:10;29694:22;;;;;;;;;;;;;;;:36;;;:41;29690:2809;;;29797:10;:21;29808:9;29797:21;;;;;;;;;;;:32;;;29778:15;:51;;29752:125;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;29892:162;29949:10;29978:61;30035:3;29978:52;29994:10;:21;30005:9;29994:21;;;;;;;;;;;:35;;;29978:11;:15;;:52;;;;:::i;:::-;:56;;:61;;;;:::i;:::-;29892:5;29898:9;29892:16;;;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;:38;;;;:162;;;;;:::i;:::-;30112:115;30177:10;:21;30188:9;30177:21;;;;;;;;;;;:35;;;30112:5;:10;30118:3;30112:10;;;;;;;;;;;:22;30123:10;30112:22;;;;;;;;;;;;;;;:42;;;:46;;:115;;;;:::i;:::-;30068:5;:10;30074:3;30068:10;;;;;;;;;;;:22;30079:10;30068:22;;;;;;;;;;;;;;;:42;;:159;;;;29690:2809;;;30301:1;30261:5;:10;30267:3;30261:10;;;;;;;;;;;:22;30272:10;30261:22;;;;;;;;;;;;;;;:36;;;:41;30257:2242;;;30364:10;:21;30375:9;30364:21;;;;;;;;;;;:32;;;30345:15;:51;;30319:125;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;30459:162;30516:10;30545:61;30602:3;30545:52;30561:10;:21;30572:9;30561:21;;;;;;;;;;;:35;;;30545:11;:15;;:52;;;;:::i;:::-;:56;;:61;;;;:::i;:::-;30459:5;30465:9;30459:16;;;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;:38;;;;:162;;;;;:::i;:::-;30679:115;30744:10;:21;30755:9;30744:21;;;;;;;;;;;:35;;;30679:5;:10;30685:3;30679:10;;;;;;;;;;;:22;30690:10;30679:22;;;;;;;;;;;;;;;:42;;;:46;;:115;;;;:::i;:::-;30635:5;:10;30641:3;30635:10;;;;;;;;;;;:22;30646:10;30635:22;;;;;;;;;;;;;;;:42;;:159;;;;30257:2242;;;30866:1;30826:5;:10;30832:3;30826:10;;;;;;;;;;;:22;30837:10;30826:22;;;;;;;;;;;;;;;:36;;;:41;30822:1677;;;30929:10;:21;30940:9;30929:21;;;;;;;;;;;:32;;;30910:15;:51;;30884:125;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31024:162;31081:10;31110:61;31167:3;31110:52;31126:10;:21;31137:9;31126:21;;;;;;;;;;;:35;;;31110:11;:15;;:52;;;;:::i;:::-;:56;;:61;;;;:::i;:::-;31024:5;31030:9;31024:16;;;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;:38;;;;:162;;;;;:::i;:::-;31244:115;31309:10;:21;31320:9;31309:21;;;;;;;;;;;:35;;;31244:5;:10;31250:3;31244:10;;;;;;;;;;;:22;31255:10;31244:22;;;;;;;;;;;;;;;:42;;;:46;;:115;;;;:::i;:::-;31200:5;:10;31206:3;31200:10;;;;;;;;;;;:22;31211:10;31200:22;;;;;;;;;;;;;;;:42;;:159;;;;30822:1677;;;31430:1;31390:5:::0;:10:::1;31396:3;31390:10;;;;;;;;;;;:22;31401:10;31390:22;;;;;;;;;;;;;;;:36;;;:41;31386:1113;;;31493:10;:21;31504:9;31493:21;;;;;;;;;;;:32;;;31474:15;:51;;31448:125;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31588:162;31645:10;31674:61;31731:3;31674:52;31690:10;:21;31701:9;31690:21;;;;;;;;;;;:35;;;31674:11;:15;;:52;;;;:::i;:::-;:56;;:61;;;;:::i;:::-;31588:5;31594:9;31588:16;;;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;:38;;;;:162;;;;;:::i;:::-;31808:115;31873:10;:21;31884:9;31873:21;;;;;;;;;;;:35;;;31808:5;:10;31814:3;31808:10;;;;;;;;;;;:22;31819:10;31808:22;;;;;;;;;;;;;;;:42;;;:46;;:115;;;;:::i;:::-;31764:5;:10;31770:3;31764:10;;;;;;;;;;;:22;31775:10;31764:22;;;;;;;;;;;;;;;:42;;:159;;;;31386:1113;;;31994:1;31954:5;:10;31960:3;31954:10;;;;;;;;;;;:22;31965:10;31954:22;;;;;;;;;;;;;;;:36;;;:41;31950:549;;;32057:10;:21;32068:9;32057:21;;;;;;;;;;;:32;;;32038:15;:51;;32012:125;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;32152:162;32209:10;32238:61;32295:3;32238:52;32254:10;:21;32265:9;32254:21;;;;;;;;;;;:35;;;32238:11;:15;;:52;;;;:::i;:::-;:56;;:61;;;;:::i;:::-;32152:5;32158:9;32152:16;;;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;:38;;;;:162;;;;;:::i;:::-;32372:115;32437:10;:21;32448:9;32437:21;;;;;;;;;;;:35;;;32372:5;:10;32378:3;32372:10;;;;;;;;;;;:22;32383:10;32372:22;;;;;;;;;;;;;;;:42;;;:46;;:115;;;;:::i;:::-;32328:5;:10;32334:3;32328:10;;;;;;;;;;;:22;32339:10;32328:22;;;;;;;;;;;;;;;:42;;:159;;;;31950:549;31386:1113;30822:1677;30257:2242;29690:2809;29135:3364;28580:3919;32548:15;32511:5;:10;32517:3;32511:10;;;;;;;;;;;:22;32522:10;32511:22;;;;;;;;;;;;;;;:34;;:52;;;;32611:43;32652:1;32611:5;:10;32617:3;32611:10;;;;;;;;;;;:22;32622:10;32611:22;;;;;;;;;;;;;;;:36;;;:40;;:43;;;;:::i;:::-;32574:5;:10;32580:3;32574:10;;;;;;;;;;;:22;32585:10;32574:22;;;;;;;;;;;;;;;:36;;:80;;;;12483:1;;11670::::0;12631:7;:22;;;;28231:4431;:::o;33163:204::-;33257:7;33282:17;33302:10;33310:1;33302:3;:7;;:10;;;;:::i;:::-;33282:30;;33332:5;33338:9;33332:16;;;;;;;;;;;;;;;;;;:27;;;33325:34;;;33163:204;;;:::o;16076:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20913:1954::-;10222:9;:7;:9::i;:::-;10214:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21445:1:::1;21432:10;:14;21428:86;;;21492:10;21463;:15;21474:3;21463:15;;;;;;;;;;;:26;;:39;;;;21428:86;21546:1;21530:13;:17;21526:95;;;21596:13;21564:10;:15;21575:3;21564:15;;;;;;;;;;;:29;;:45;;;;21526:95;21648:1;21635:10;:14;21631:86;;;21695:10;21666;:15;21677:3;21666:15;;;;;;;;;;;:26;;:39;;;;21631:86;21749:1;21733:13;:17;21729:95;;;21799:13;21767:10;:15;21778:3;21767:15;;;;;;;;;;;:29;;:45;;;;21729:95;21853:1;21840:10;:14;21836:86;;;21900:10;21871;:15;21882:3;21871:15;;;;;;;;;;;:26;;:39;;;;21836:86;21954:1;21938:13;:17;21934:95;;;22004:13;21972:10;:15;21983:3;21972:15;;;;;;;;;;;:29;;:45;;;;21934:95;22060:1;22047:10;:14;22043:86;;;22107:10;22078;:15;22089:3;22078:15;;;;;;;;;;;:26;;:39;;;;22043:86;22161:1;22145:13;:17;22141:95;;;22211:13;22179:10;:15;22190:3;22179:15;;;;;;;;;;;:29;;:45;;;;22141:95;22268:1;22255:10;:14;22251:86;;;22315:10;22286;:15;22297:3;22286:15;;;;;;;;;;;:26;;:39;;;;22251:86;22369:1;22353:13;:17;22349:95;;;22419:13;22387:10;:15;22398:3;22387:15;;;;;;;;;;;:29;;:45;;;;22349:95;22476:1;22463:10;:14;22459:86;;;22523:10;22494;:15;22505:3;22494:15;;;;;;;;;;;:26;;:39;;;;22459:86;22577:1;22561:13;:17;22557:95;;;22627:13;22595:10;:15;22606:3;22595:15;;;;;;;;;;;:29;;:45;;;;22557:95;22684:1;22671:10;:14;22667:86;;;22731:10;22702;:15;22713:3;22702:15;;;;;;;;;;;:26;;:39;;;;22667:86;22785:1;22769:13;:17;22765:95;;;22835:13;22803:10;:15;22814:3;22803:15;;;;;;;;;;;:29;;:45;;;;22765:95;20913:1954:::0;;;;;;;;;;;;;;;:::o;34827:385::-;34938:4;34957:7;34979;35049:5;:10;35055:3;35049:10;;;;;;;;;;;:22;35060:10;35049:22;;;;;;;;;;;;;;;:34;;;;;;;;;;;;35098:5;:10;35104:3;35098:10;;;;;;;;;;;:22;35109:10;35098:22;;;;;;;;;;;;;;;:41;;;35154:5;:10;35160:3;35154:10;;;;;;;;;;;:22;35165:10;35154:22;;;;;;;;;;;;;;;:39;;;35014:190;;;;;;34827:385;;;;;:::o;34656:163::-;34715:7;34735:17;34755:10;34763:1;34755:3;:7;;:10;;;;:::i;:::-;34735:30;;34784:5;34790:9;34784:16;;;;;;;;;;;;;;;;;;:26;;;34776:35;;;34656:163;;;:::o;24408:128::-;10222:9;:7;:9::i;:::-;10214:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24473:5:::1;:14;;;24488:7;:5;:7::i;:::-;24497:5;:15;;;24521:4;24497:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;24497:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24497:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;24497:30:0;;;;;;;;;;;;;;;;24473:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;24473:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24473:55:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;24473:55:0;;;;;;;;;;;;;;;;;24408:128:::0;:::o;24776:3447::-;11714:1;12319:7;;:19;;12311:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11714:1;12452:7;:18;;;;24953:17:::1;24973:10;24981:1;24973:3;:7;;:10;;;;:::i;:::-;24953:30;;25025:1;25000:5;25006:9;25000:16;;;;;;;;;;;;;;;;;;:21;;;:26;:56;;;;25055:1;25030:5;25036:9;25030:16;;;;;;;;;;;;;;;;;;:21;;;:26;25000:56;24996:376;;;25073:13;25116:10;25128:11;25099:41;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;25099:41:0;;;25089:52;;;;;;25073:68;;25156:19;25178:30;:5;:28;:30::i;:::-;25156:52;;25262:31;25272:11;25285:1;25288;25291;25262:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25262:31:0;;;;;;;;25251:42;;:7;:5;:7::i;:::-;:42;;;25225:135;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;24996:376;;;25425:5;25431:9;25425:16;;;;;;;;;;;;;;;;;;:22;;;25406:15;:41;;:101;;;;;25487:5;25493:9;25487:16;;;;;;;;;;;;;;;;;;:20;;;25468:15;:39;;25406:101;25384:163;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;25588:41;25600:10;25612:3;25617:11;25588;:41::i;:::-;25580:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;25683:17;25703:9;25683:29;;25765:82;25837:9;25765:5;:10;25771:3;25765:10;;;;;;;;;;;:22;25776:10;25765:22;;;;;;;;;;;;;;;:53;;;:71;;:82;;;;:::i;:::-;25723:5;:10;25729:3;25723:10;;;;;;;;;;;:22;25734:10;25723:22;;;;;;;;;;;;;;;:39;;:124;;;;25889:1;25864:5;25870:9;25864:16;;;;;;;;;;;;;;;;;;:21;;;:26;25860:1751;;;25955:11;25941;:25;25937:868;;;26085:5;26091:9;26085:16;;;;;;;;;;;;;;;;;;:33;;;26017:5;:10;26023:3;26017:10;;;;;;;;;;;:22;26028:10;26017:22;;;;;;;;;;;;;;;:39;;;:101;;25987:209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25937:868;;;26255:11;26240;:26;;:55;;;;;26284:11;26270;:25;26240:55;26218:587;;;26428:5;26434:9;26428:16;;;;;;;;;;;;;;;;;;:33;;;26360:5;:10;26366:3;26360:10;;;;;;;;;;;:22;26371:10;26360:22;;;;;;;;;;;;;;;:39;;;:101;;26330:209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26218:587;;;26678:5;26684:9;26678:16;;;;;;;;;;;;;;;;;;:33;;;26610:5;:10;26616:3;26610:10;;;;;;;;;;;:22;26621:10;26610:22;;;;;;;;;;;;;;;:39;;;:101;;26580:209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26218:587;25937:868;25860:1751;;;26851:1;26826:5;26832:9;26826:16;;;;;;;;;;;;;;;;;;:21;;;:26;26822:789;;;26992:5;26998:9;26992:16;;;;;;;;;;;;;;;;;;:33;;;26928:5;:10;26934:3;26928:10;;;;;;;;;;;:22;26939:10;26928:22;;;;;;;;;;;;;;;:39;;;:97;;26902:185;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;26822:789;;;27135:1;27110:5;27116:9;27110:16;;;;;;;;;;;;;;;;;;:21;;;:26;27106:505;;;27265:5;27271:9;27265:16;;;;;;;;;;;;;;;;;;:35;;;27201:5;:10;27207:3;27201:10;;;;;;;;;;;:22;27212:10;27201:22;;;;;;;;;;;;;;;:39;;;:99;;27175:179;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;27106:505;;;27504:5;:10;27510:3;27504:10;;;;;;;;;;;:22;27515:10;27504:22;;;;;;;;;;;;;;;:41;;;27439:5;:10;27445:3;27439:10;;;;;;;;;;;:22;27450:10;27439:22;;;;;;;;;;;;;;;:39;;;:106;;27413:186;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;27106:505;26822:789;25860:1751;27623:19;27645:76;27706:4;27645:42;27659:5;27665:9;27659:16;;;;;;;;;;;;;;;;;;:27;;;27645:9;:13;;:42;;;;:::i;:::-;:46;;:76;;;;:::i;:::-;27623:98;;27734:19;27756:22;27774:3;27756:17;:22::i;:::-;27734:44;;27825:5;27831:9;27825:16;;;;;;;;;;;;;;;;;;:36;;;27811:11;:50;27789:112;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;27935:11;27920;:26;;27912:51;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;28020:86;28094:11;28020:5;:10;28026:3;28020:10;;;;;;;;;;;:22;28031:10;28020:22;;;;;;;;;;;;;;;:55;;;:73;;:86;;;;:::i;:::-;27976:5;:10;27982:3;27976:10;;;;;;;;;;;:22;27987:10;27976:22;;;;;;;;;;;;;;;:41;;:130;;;;28148:67;28193:11;28148:5;28154:9;28148:16;;;;;;;;;;;;;;;;;;:26;;;:30;;:67;;;;:::i;:::-;28119:5;28125:9;28119:16;;;;;;;;;;;;;;;;;;:26;;:96;;;;12483:1;;;;11670::::0;12631:7;:22;;;;24776:3447;;;;;:::o;34048:600::-;34145:7;34167;34189;34211;34233;34255;34290:17;34310:10;34318:1;34310:3;:7;;:10;;;;:::i;:::-;34290:30;;34353:10;:21;34364:9;34353:21;;;;;;;;;;;:32;;;34400:10;:21;34411:9;34400:21;;;;;;;;;;;:35;;;34450:10;:21;34461:9;34450:21;;;;;;;;;;;:32;;;34497:10;:21;34508:9;34497:21;;;;;;;;;;;:35;;;34547:10;:21;34558:9;34547:21;;;;;;;;;;;:32;;;34594:10;:21;34605:9;34594:21;;;;;;;;;;;:35;;;34331:309;;;;;;;;;;;;;34048:600;;;;;;;:::o;16812:477::-;10222:9;:7;:9::i;:::-;10214:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16940:17:::1;16960:10;16968:1;16960:3;:7;;:10;;;;:::i;:::-;16940:30;;16981:18;17001:5;17007:9;17001:16;;;;;;;;;;;;;;;;;;:35;;;16981:55;;17047:19;17069:53;17117:4;17069:43;17084:5;17090:9;17084:16;;;;;;;;;;;;;;;;;;:27;;;17069:10;:14;;:43;;;;:::i;:::-;:47;;:53;;;;:::i;:::-;17047:75;;17140:9;17152:1:::0;17140:13:::1;;17135:147;17159:4;:11;17155:1;:15;17135:147;;;17245:11;17204:5;:10;17210:3;17204:10;;;;;;;;;;;:19;17215:4;17220:1;17215:7;;;;;;;;;;;;;;17204:19;;;;;;;;;;;;;;;:38;;:52;;;;17172:3;;;;;;;17135:147;;;;10279:1;;;16812:477:::0;;:::o;16397:407::-;10222:9;:7;:9::i;:::-;10214:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16569:9:::1;16581:1:::0;16569:13:::1;;16564:233;16588:4;:11;16584:1;:15;16564:233;;;16646:3;16621:5;:10;16627:3;16621:10;;;;;;;;;;;:19;16632:4;16637:1;16632:7;;;;;;;;;;;;;;16621:19;;;;;;;;;;;;;;;:22;;:28;;;;16706:10;16717:1;16706:13;;;;;;;;;;;;;;16665:5;:10;16671:3;16665:10;;;;;;;;;;;:19;16676:4;16681:1;16676:7;;;;;;;;;;;;;;16665:19;;;;;;;;;;;;;;;:38;;:54;;;;16768:4;16734:5;:10;16740:3;16734:10;;;;;;;;;;;:19;16745:4;16750:1;16745:7;;;;;;;;;;;;;;16734:19;;;;;;;;;;;;;;;:31;;;:38;;;;;;;;;;;;;;;;;;16601:3;;;;;;;16564:233;;;;16397:407:::0;;;:::o;11124:117::-;10222:9;:7;:9::i;:::-;10214:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11205:28:::1;11224:8;11205:18;:28::i;:::-;11124:117:::0;:::o;1083:136::-;1141:7;1168:43;1172:1;1175;1168:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1161:50;;1083:136;;;;:::o;889:181::-;947:7;967:9;983:1;979;:5;967:17;;1008:1;1003;:6;;995:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1061:1;1054:8;;;889:181;;;;:::o;9157:106::-;9210:15;9245:10;9238:17;;9157:106;:::o;1438:471::-;1496:7;1746:1;1741;:6;1737:47;;;1771:1;1764:8;;;;1737:47;1796:9;1812:1;1808;:5;1796:17;;1841:1;1836;1832;:5;;;;;;:10;1824:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1900:1;1893:8;;;1438:471;;;;;:::o;1923:132::-;1981:7;2008:39;2012:1;2015;2008:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2001:46;;1923:132;;;;:::o;5784:176::-;5867:85;5886:5;5916:23;;;5941:2;5945:5;5893:58;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;5893:58:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;5893:58:0;5867:18;:85::i;:::-;5784:176;;;:::o;14128:250::-;14224:7;14350:4;14297:58;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;14297:58:0;;;14269:101;;;;;;14249:121;;14128:250;;;:::o;11347:237::-;11449:1;11429:22;;:8;:22;;;;11421:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11539:8;11510:38;;11531:6;;;;;;;;;;;11510:38;;;;;;;;;;;;11568:8;11559:6;;:17;;;;;;;;;;;;;;;;;;11347:237;:::o;1233:192::-;1319:7;1352:1;1347;:6;;1355:12;1339:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1339:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1379:9;1395:1;1391;:5;1379:17;;1416:1;1409:8;;;1233:192;;;;;:::o;2069:345::-;2155:7;2254:1;2250;:5;2257:12;2242:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2242:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2281:9;2297:1;2293;:5;;;;;;2281:17;;2405:1;2398:8;;;2069:345;;;;;:::o;7823:1114::-;8427:27;8435:5;8427:25;;;:27::i;:::-;8419:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8564:12;8578:23;8613:5;8605:19;;8625:4;8605:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;8605:25:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;8563:67:0;;;;8649:7;8641:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8730:1;8710:10;:17;:21;8706:224;;;8852:10;8841:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8841:30:0;;;;;;;;;;;;;;;;8833:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8706:224;7823:1114;;;;:::o;3353:619::-;3413:4;3675:16;3702:19;3724:66;3702:88;;;;3893:7;3881:20;3869:32;;3933:11;3921:8;:23;;:42;;;;;3960:3;3948:15;;:8;:15;;3921:42;3913:51;;;;3353:619;;;:::o
Swarm Source
ipfs://06aaf7266f9f053771769ead57f490edeff2172b6fc97d8890598949176ed8d5
Loading...
Loading
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.