Source Code
Latest 25 from a total of 969 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Pay Daily Income... | 7643991 | 2528 days ago | IN | 0 ETH | 0.00086262 | ||||
| Pay Daily Income... | 7643976 | 2528 days ago | IN | 0 ETH | 0.00015308 | ||||
| Transfer | 7643951 | 2528 days ago | IN | 1.7 ETH | 0.00228525 | ||||
| Put Presentee | 7643928 | 2528 days ago | IN | 0 ETH | 0.00326481 | ||||
| Transfer | 7422604 | 2563 days ago | IN | 2 ETH | 0.00208121 | ||||
| Transfer | 7419663 | 2563 days ago | IN | 1 ETH | 0.00253552 | ||||
| Transfer | 7419577 | 2563 days ago | IN | 1 ETH | 0.00355286 | ||||
| Set Env | 7418851 | 2563 days ago | IN | 0 ETH | 0.00016048 | ||||
| Pay Daily Income... | 7418807 | 2563 days ago | IN | 0 ETH | 0.00572371 | ||||
| Pay Daily Income... | 7418770 | 2563 days ago | IN | 0 ETH | 0.00102058 | ||||
| Pay Daily Income... | 7418754 | 2563 days ago | IN | 0 ETH | 0.00825016 | ||||
| Pay Daily Income... | 7418751 | 2563 days ago | IN | 0 ETH | 0.00829162 | ||||
| Pay Daily Income... | 7418747 | 2563 days ago | IN | 0 ETH | 0.00829162 | ||||
| Pay Daily Income... | 7418745 | 2563 days ago | IN | 0 ETH | 0.00829162 | ||||
| Pay Daily Income... | 7418734 | 2563 days ago | IN | 0 ETH | 0.00829162 | ||||
| Pay Daily Income... | 7418728 | 2563 days ago | IN | 0 ETH | 0.00101547 | ||||
| Pay Daily Income... | 7418726 | 2563 days ago | IN | 0 ETH | 0.00101547 | ||||
| Pay Daily Income... | 7418722 | 2563 days ago | IN | 0 ETH | 0.00102058 | ||||
| Pay Daily Income... | 7418718 | 2563 days ago | IN | 0 ETH | 0.00102058 | ||||
| Pay Daily Income... | 7418716 | 2563 days ago | IN | 0 ETH | 0.00102058 | ||||
| Deposit | 7418655 | 2563 days ago | IN | 100 ETH | 0.00045785 | ||||
| Deposit | 7418655 | 2563 days ago | IN | 100 ETH | 0.00045785 | ||||
| Deposit | 7418653 | 2563 days ago | IN | 100 ETH | 0.00045785 | ||||
| Deposit | 7418653 | 2563 days ago | IN | 100 ETH | 0.00045785 | ||||
| Deposit | 7418653 | 2563 days ago | IN | 100 ETH | 0.00045785 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| - | 7643991 | 2528 days ago | 0.4964 ETH | ||||
| - | 7643991 | 2528 days ago | 4.4676 ETH | ||||
| - | 7422604 | 2563 days ago | 0.02 ETH | ||||
| - | 7422604 | 2563 days ago | 0.18 ETH | ||||
| - | 7419663 | 2563 days ago | 0.01 ETH | ||||
| - | 7419663 | 2563 days ago | 0.09 ETH | ||||
| - | 7419577 | 2563 days ago | 0.01 ETH | ||||
| - | 7419577 | 2563 days ago | 0.09 ETH | ||||
| - | 7418807 | 2563 days ago | 18 ETH | ||||
| - | 7418807 | 2563 days ago | 162 ETH | ||||
| - | 7418754 | 2563 days ago | 30 ETH | ||||
| - | 7418754 | 2563 days ago | 270 ETH | ||||
| - | 7418751 | 2563 days ago | 30 ETH | ||||
| - | 7418751 | 2563 days ago | 270 ETH | ||||
| - | 7418747 | 2563 days ago | 30 ETH | ||||
| - | 7418747 | 2563 days ago | 270 ETH | ||||
| - | 7418745 | 2563 days ago | 30 ETH | ||||
| - | 7418745 | 2563 days ago | 270 ETH | ||||
| - | 7418734 | 2563 days ago | 30 ETH | ||||
| - | 7418734 | 2563 days ago | 270 ETH | ||||
| - | 7418582 | 2563 days ago | 30 ETH | ||||
| - | 7418582 | 2563 days ago | 270 ETH | ||||
| - | 7418523 | 2563 days ago | 30 ETH | ||||
| - | 7418523 | 2563 days ago | 270 ETH | ||||
| - | 7418521 | 2563 days ago | 30 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Operator
Compiler Version
v0.5.3+commit.10d17f24
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2019-02-27
*/
pragma solidity ^0.5.3;
contract Operator {
uint256 public ONE_DAY = 86400;
uint256 public MIN_DEP = 1 ether;
uint256 public MAX_DEP = 100 ether;
address public admin;
uint256 public depositedAmountGross = 0;
uint256 public paySystemCommissionTimes = 1;
uint256 public payDailyIncomeTimes = 1;
uint256 public lastPaySystemCommission = now;
uint256 public lastPayDailyIncome = now;
uint256 public contractStartAt = now;
uint256 public lastReset = now;
address payable public operationFund = 0xe1483B2b28643D424235D0E5920bD48A563A9737;
address[] public investorAddresses;
bytes32[] public investmentIds;
bytes32[] public withdrawalIds;
bytes32[] public maxOutIds;
mapping (address => Investor) investors;
mapping (bytes32 => Investment) public investments;
mapping (bytes32 => Withdrawal) public withdrawals;
mapping (bytes32 => MaxOut) public maxOuts;
uint256 public maxLevelsAddSale = 200;
uint256 public maximumMaxOutInWeek = 2;
bool public importing = true;
Vote public currentVote;
struct Vote {
uint256 startTime;
string reason;
mapping (address => uint8) votes; // 1 means no, 2 means yes, 3 mean non
address payable emergencyAddress;
uint256 yesPoint;
uint256 noPoint;
uint256 totalPoint;
}
struct Investment {
bytes32 id;
uint256 at;
uint256 amount;
address investor;
address nextInvestor;
bool nextBranch;
}
struct Withdrawal {
bytes32 id;
uint256 at;
uint256 amount;
address investor;
address presentee;
uint256 reason;
uint256 times;
}
struct Investor {
// part 1
bytes32 email;
address parent;
address leftChild;
address rightChild;
address presenter;
// part 2
uint256 generation;
uint256 depositedAmount;
uint256 withdrewAmount;
bool isDisabled;
// part 3
uint256 lastMaxOut;
uint256 maxOutTimes;
uint256 maxOutTimesInWeek;
uint256 totalSell;
uint256 sellThisMonth;
// part 4
uint256 rightSell;
uint256 leftSell;
uint256 reserveCommission;
uint256 dailyIncomeWithrewAmount;
uint256 registerTime;
uint256 minDeposit;
// part 5
address[] presentees;
bytes32[] investments;
bytes32[] withdrawals;
}
struct MaxOut {
bytes32 id;
address investor;
uint256 times;
uint256 at;
}
constructor () public { admin = msg.sender; }
modifier mustBeAdmin() { require(msg.sender == admin); _; }
modifier mustBeImporting() { require(importing); _; }
function () payable external { deposit(); }
function depositProcess(address sender) internal {
Investor storage investor = investors[sender];
require(investor.generation != 0);
if (investor.depositedAmount == 0) require(msg.value >= investor.minDeposit);
require(investor.maxOutTimesInWeek < maximumMaxOutInWeek);
require(investor.maxOutTimes < 60);
require(investor.maxOutTimes == 0 || now - investor.lastMaxOut < ONE_DAY * 7 || investor.depositedAmount != 0);
depositedAmountGross += msg.value;
bytes32 id = keccak256(abi.encodePacked(block.number, now, sender, msg.value));
uint256 investmentValue = investor.depositedAmount + msg.value <= MAX_DEP ? msg.value : MAX_DEP - investor.depositedAmount;
if (investmentValue == 0) return;
bool nextBranch = investors[investor.parent].leftChild == sender;
Investment memory investment = Investment({ id: id, at: now, amount: investmentValue, investor: sender, nextInvestor: investor.parent, nextBranch: nextBranch });
investments[id] = investment;
processInvestments(id);
investmentIds.push(id);
}
function pushNewMaxOut(address investorAddress, uint256 times, uint256 depositedAmount) internal {
bytes32 id = keccak256(abi.encodePacked(block.number, now, investorAddress, times));
MaxOut memory maxOut = MaxOut({ id: id, at: now, investor: investorAddress, times: times });
maxOutIds.push(id);
maxOuts[id] = maxOut;
investors[investorAddress].minDeposit = depositedAmount;
}
function deposit() payable public { depositProcess(msg.sender); }
function processInvestments(bytes32 investmentId) internal {
Investment storage investment = investments[investmentId];
uint256 amount = investment.amount;
Investor storage investor = investors[investment.investor];
investor.investments.push(investmentId);
investor.depositedAmount += amount;
address payable presenterAddress = address(uint160(investor.presenter));
Investor storage presenter = investors[presenterAddress];
if (presenterAddress != address(0)) {
presenter.totalSell += amount;
presenter.sellThisMonth += amount;
}
if (presenter.depositedAmount >= MIN_DEP && !presenter.isDisabled) {
sendEtherForInvestor(presenterAddress, amount / 10, 1, investment.investor, 0);
}
}
function addSellForParents(bytes32 investmentId) public mustBeAdmin {
Investment storage investment = investments[investmentId];
require(investment.nextInvestor != address(0));
uint256 amount = investment.amount;
uint256 loopCount = 0;
while (investment.nextInvestor != address(0) && loopCount < maxLevelsAddSale) {
Investor storage investor = investors[investment.nextInvestor];
if (investment.nextBranch) investor.leftSell += amount;
else investor.rightSell += amount;
investment.nextBranch = investors[investor.parent].leftChild == investment.nextInvestor;
investment.nextInvestor = investor.parent;
loopCount++;
}
}
function sendEtherForInvestor(address payable investorAddress, uint256 value, uint256 reason, address presentee, uint256 times) internal {
if (value == 0 && reason != 4) return;
if (investorAddress == address(0)) return;
Investor storage investor = investors[investorAddress];
uint256 totalPaidAfterThisTime = investor.reserveCommission + investor.withdrewAmount + getDailyIncomeForUser(investorAddress) + getUnpaidSystemCommission(investorAddress);
if (reason == 1) totalPaidAfterThisTime += value;
if (totalPaidAfterThisTime >= 3 * investor.depositedAmount) { //max out
payWithMaxOut(totalPaidAfterThisTime, investorAddress);
return;
}
if (investor.reserveCommission > 0) payWithNoMaxOut(investor.reserveCommission, investorAddress, 4, address(0), 0);
payWithNoMaxOut(value, investorAddress, reason, presentee, times);
}
function payWithNoMaxOut(uint256 amountToPay, address payable investorAddress, uint256 reason, address presentee, uint256 times) internal {
investors[investorAddress].withdrewAmount += amountToPay;
pay(amountToPay, investorAddress, reason, presentee, times);
}
function payWithMaxOut(uint256 totalPaidAfterThisTime, address payable investorAddress) internal {
Investor storage investor = investors[investorAddress];
uint256 amountToPay = investor.depositedAmount * 3 - investor.withdrewAmount;
uint256 amountToReserve = totalPaidAfterThisTime - amountToPay;
investor.maxOutTimes++;
investor.maxOutTimesInWeek++;
uint256 oldDepositedAmount = investor.depositedAmount;
investor.depositedAmount = 0;
investor.withdrewAmount = 0;
investor.lastMaxOut = now;
investor.dailyIncomeWithrewAmount = 0;
investor.reserveCommission = amountToReserve;
pushNewMaxOut(investorAddress, investor.maxOutTimes, oldDepositedAmount);
pay(amountToPay, investorAddress, 0, address(0), 0);
}
function pay(uint256 amountToPay, address payable investorAddress, uint256 reason, address presentee, uint256 times) internal {
if (amountToPay == 0) return;
investorAddress.transfer(amountToPay / 100 * 90);
operationFund.transfer(amountToPay / 100 * 10);
bytes32 id = keccak256(abi.encodePacked(block.difficulty, now, investorAddress, amountToPay, reason));
Withdrawal memory withdrawal = Withdrawal({ id: id, at: now, amount: amountToPay, investor: investorAddress, presentee: presentee, times: times, reason: reason });
withdrawals[id] = withdrawal;
investors[investorAddress].withdrawals.push(id);
withdrawalIds.push(id);
}
function getAllIncomeTilNow(address investorAddress) internal view returns(uint256 allIncome) {
Investor memory investor = investors[investorAddress];
uint256 unpaidDailyIncome = getDailyIncomeForUser(investorAddress);
uint256 withdrewAmount = investor.withdrewAmount;
uint256 unpaidSystemCommission = getUnpaidSystemCommission(investorAddress);
uint256 allIncomeNow = unpaidDailyIncome + withdrewAmount + unpaidSystemCommission;
return allIncomeNow;
}
function putPresentee(address presenterAddress, address presenteeAddress, address parentAddress, bytes32 presenteeEmail, bool isLeft) public mustBeAdmin {
Investor storage presenter = investors[presenterAddress];
Investor storage parent = investors[parentAddress];
if (investorAddresses.length != 0) {
require(presenter.generation != 0);
require(parent.generation != 0);
if (isLeft) {
require(parent.leftChild == address(0));
} else {
require(parent.rightChild == address(0));
}
}
if (presenter.generation != 0) presenter.presentees.push(presenteeAddress);
Investor memory investor = Investor({
email: presenteeEmail,
parent: parentAddress,
leftChild: address(0),
rightChild: address(0),
presenter: presenterAddress,
generation: parent.generation + 1,
presentees: new address[](0),
depositedAmount: 0,
withdrewAmount: 0,
isDisabled: false,
lastMaxOut: now,
maxOutTimes: 0,
maxOutTimesInWeek: 0,
totalSell: 0,
sellThisMonth: 0,
registerTime: now,
investments: new bytes32[](0),
withdrawals: new bytes32[](0),
minDeposit: MIN_DEP,
rightSell: 0,
leftSell: 0,
reserveCommission: 0,
dailyIncomeWithrewAmount: 0
});
investors[presenteeAddress] = investor;
investorAddresses.push(presenteeAddress);
if (parent.generation == 0) return;
if (isLeft) {
parent.leftChild = presenteeAddress;
} else {
parent.rightChild = presenteeAddress;
}
}
function getDailyIncomeForUser(address investorAddress) internal view returns(uint256 amount) {
Investor memory investor = investors[investorAddress];
uint256 investmentLength = investor.investments.length;
uint256 dailyIncome = 0;
for (uint256 i = 0; i < investmentLength; i++) {
Investment memory investment = investments[investor.investments[i]];
if (investment.at < investor.lastMaxOut) continue;
if (now - investment.at >= ONE_DAY) {
uint256 numberOfDay = (now - investment.at) / ONE_DAY;
uint256 totalDailyIncome = numberOfDay * investment.amount / 100;
dailyIncome = totalDailyIncome + dailyIncome;
}
}
return dailyIncome - investor.dailyIncomeWithrewAmount;
}
function payDailyIncomeForInvestor(address payable investorAddress, uint256 times) public mustBeAdmin {
uint256 dailyIncome = getDailyIncomeForUser(investorAddress);
Investor memory investor = investors[investorAddress];
if (times > ONE_DAY) {
uint256 investmentLength = investor.investments.length;
bytes32 lastInvestmentId = investor.investments[investmentLength - 1];
investments[lastInvestmentId].at -= times;
investors[investorAddress].lastMaxOut = investments[lastInvestmentId].at;
return;
}
if (investor.isDisabled) return;
investor.dailyIncomeWithrewAmount += dailyIncome;
sendEtherForInvestor(investorAddress, dailyIncome, 2, address(0), times);
}
function payDailyIncomeByIndex(uint256 from, uint256 to) public mustBeAdmin{
require(from >= 0 && to < investorAddresses.length);
for(uint256 i = from; i <= to; i++) {
payDailyIncomeForInvestor(address(uint160(investorAddresses[i])), payDailyIncomeTimes);
}
}
function getUnpaidSystemCommission(address investorAddress) public view returns(uint256 unpaid) {
Investor memory investor = investors[investorAddress];
uint256 depositedAmount = investor.depositedAmount;
uint256 totalSell = investor.totalSell;
uint256 leftSell = investor.leftSell;
uint256 rightSell = investor.rightSell;
uint256 sellThisMonth = investor.sellThisMonth;
uint256 sellToPaySystemCommission = rightSell < leftSell ? rightSell : leftSell;
uint256 commission = sellToPaySystemCommission * getPercentage(depositedAmount, totalSell, sellThisMonth) / 100;
return commission;
}
function paySystemCommissionInvestor(address payable investorAddress, uint256 times) public mustBeAdmin {
Investor storage investor = investors[investorAddress];
if (investor.isDisabled) return;
uint256 systemCommission = getUnpaidSystemCommission(investorAddress);
if (paySystemCommissionTimes > 3 && times != 0) {
investor.rightSell = 0;
investor.leftSell = 0;
} else if (investor.rightSell >= investor.leftSell) {
investor.rightSell = investor.rightSell - investor.leftSell;
investor.leftSell = 0;
} else {
investor.leftSell = investor.leftSell - investor.rightSell;
investor.rightSell = 0;
}
if (times != 0) investor.sellThisMonth = 0;
sendEtherForInvestor(investorAddress, systemCommission, 3, address(0), times);
}
function paySystemCommissionByIndex(uint256 from, uint256 to) public mustBeAdmin {
require(from >= 0 && to < investorAddresses.length);
// change 1 to 30
if (now <= 30 * ONE_DAY + contractStartAt) return;
for(uint256 i = from; i <= to; i++) {
paySystemCommissionInvestor(address(uint160(investorAddresses[i])), paySystemCommissionTimes);
}
}
function finishPayDailyIncome() public mustBeAdmin {
lastPayDailyIncome = now;
payDailyIncomeTimes++;
}
function finishPaySystemCommission() public mustBeAdmin {
lastPaySystemCommission = now;
paySystemCommissionTimes++;
}
function resetGame(uint256 from, uint256 to) public mustBeAdmin {
require(from >= 0 && to < investorAddresses.length);
require(currentVote.startTime != 0);
require(now - currentVote.startTime > 3 * ONE_DAY);
require(currentVote.yesPoint > currentVote.totalPoint / 2);
require(currentVote.emergencyAddress == address(0));
uint256 rootVote = currentVote.votes[investorAddresses[0]];
require(rootVote != 0);
lastReset = now;
for (uint256 i = from; i < to; i++) {
address investorAddress = investorAddresses[i];
Investor storage investor = investors[investorAddress];
uint256 currentVoteValue = currentVote.votes[investorAddress] != 0 ? currentVote.votes[investorAddress] : rootVote;
if (currentVoteValue == 2) {
if (investor.maxOutTimes > 0 || (investor.withdrewAmount >= investor.depositedAmount && investor.withdrewAmount != 0)) {
investor.lastMaxOut = now;
investor.depositedAmount = 0;
investor.withdrewAmount = 0;
investor.dailyIncomeWithrewAmount = 0;
}
investor.reserveCommission = 0;
investor.rightSell = 0;
investor.leftSell = 0;
investor.totalSell = 0;
investor.sellThisMonth = 0;
} else {
if (investor.maxOutTimes > 0 || (investor.withdrewAmount >= investor.depositedAmount && investor.withdrewAmount != 0)) {
investor.isDisabled = true;
investor.reserveCommission = 0;
investor.lastMaxOut = now;
investor.depositedAmount = 0;
investor.withdrewAmount = 0;
investor.dailyIncomeWithrewAmount = 0;
}
investor.reserveCommission = 0;
investor.rightSell = 0;
investor.leftSell = 0;
investor.totalSell = 0;
investor.sellThisMonth = 0;
}
}
}
function stopGame(uint256 percent, uint256 from, uint256 to) mustBeAdmin public {
require(currentVote.startTime != 0);
require(now - currentVote.startTime > 3 * ONE_DAY);
require(currentVote.noPoint > currentVote.totalPoint / 2);
require(currentVote.emergencyAddress == address(0));
require(percent <= 50);
require(from >= 0 && to < investorAddresses.length);
for (uint256 i = from; i <= to; i++) {
address payable investorAddress = address(uint160(investorAddresses[i]));
Investor storage investor = investors[investorAddress];
if (investor.maxOutTimes > 0) continue;
if (investor.isDisabled) continue;
uint256 depositedAmount = investor.depositedAmount;
uint256 withdrewAmount = investor.withdrewAmount;
if (withdrewAmount >= depositedAmount / 2) continue;
sendEtherForInvestor(investorAddress, depositedAmount * percent / 100 - withdrewAmount, 6, address(0), 0);
}
}
function revivalInvestor(address investor) public mustBeAdmin { investors[investor].lastMaxOut = now; }
function payToReachMaxOut(address payable investorAddress) public mustBeAdmin {
uint256 unpaidSystemCommissions = getUnpaidSystemCommission(investorAddress);
uint256 unpaidDailyIncomes = getDailyIncomeForUser(investorAddress);
uint256 withdrewAmount = investors[investorAddress].withdrewAmount;
uint256 depositedAmount = investors[investorAddress].depositedAmount;
uint256 reserveCommission = investors[investorAddress].reserveCommission;
require(depositedAmount > 0 && withdrewAmount + unpaidSystemCommissions + unpaidDailyIncomes + reserveCommission >= 3 * depositedAmount);
sendEtherForInvestor(investorAddress, 0, 4, address(0), 0);
}
function resetMaxOutInWeek(uint256 from, uint256 to) public mustBeAdmin {
require(from >= 0 && to < investorAddresses.length);
for (uint256 i = from; i < to; i++) {
address investorAddress = investorAddresses[i];
if (investors[investorAddress].maxOutTimesInWeek == 0) return;
investors[investorAddress].maxOutTimesInWeek = 0;
}
}
function setMaximumMaxOutTimes(address investorAddress, uint256 times) public mustBeAdmin{ investors[investorAddress].maxOutTimes = times; }
function disableInvestor(address investorAddress) public mustBeAdmin {
Investor storage investor = investors[investorAddress];
investor.isDisabled = true;
}
function enableInvestor(address investorAddress) public mustBeAdmin {
Investor storage investor = investors[investorAddress];
investor.isDisabled = false;
}
function donate() payable public { depositedAmountGross += msg.value; }
// Utils helpers
function getTotalSellLevel(uint256 totalSell) internal pure returns (uint256 level){
if (totalSell < 30 ether) return 0;
if (totalSell < 60 ether) return 1;
if (totalSell < 90 ether) return 2;
if (totalSell < 120 ether) return 3;
if (totalSell < 150 ether) return 4;
return 5;
}
function getSellThisMonthLevel(uint256 sellThisMonth) internal pure returns (uint256 level){
if (sellThisMonth < 2 ether) return 0;
if (sellThisMonth < 4 ether) return 1;
if (sellThisMonth < 6 ether) return 2;
if (sellThisMonth < 8 ether) return 3;
if (sellThisMonth < 10 ether) return 4;
return 5;
}
function getDepositLevel(uint256 sellThisMonth) internal pure returns (uint256 level){
if (sellThisMonth < 2 ether) return 0;
if (sellThisMonth < 4 ether) return 1;
if (sellThisMonth < 6 ether) return 2;
if (sellThisMonth < 8 ether) return 3;
if (sellThisMonth < 10 ether) return 4;
return 5;
}
function getPercentage(uint256 depositedAmount, uint256 totalSell, uint256 sellThisMonth) internal pure returns(uint256 level) {
uint256 totalSellLevel = getTotalSellLevel(totalSell);
uint256 depLevel = getDepositLevel(depositedAmount);
uint256 sellThisMonthLevel = getSellThisMonthLevel(sellThisMonth);
uint256 min12 = totalSellLevel < depLevel ? totalSellLevel : depLevel;
uint256 minLevel = sellThisMonthLevel < min12 ? sellThisMonthLevel : min12;
return minLevel * 2;
}
function stringToBytes32(string memory source) internal pure returns (bytes32 result) {
bytes memory tempEmptyStringTest = bytes(source);
if (tempEmptyStringTest.length == 0) return 0x0;
assembly { result := mload(add(source, 32)) }
}
// query investor helpers
function getInvestorPart1(address investorAddress) view public returns (bytes32 email, address parent, address leftChild, address rightChild, address presenter) {
Investor memory investor = investors[investorAddress];
return (investor.email, investor.parent, investor.leftChild, investor.rightChild, investor.presenter);
}
function getInvestorPart2(address investorAddress) view public returns (uint256 generation, uint256 depositedAmount, uint256 withdrewAmount, bool isDisabled) {
Investor memory investor = investors[investorAddress];
return (investor.generation, investor.depositedAmount, investor.withdrewAmount, investor.isDisabled);
}
function getInvestorPart3(address investorAddress) view public returns (uint256 lastMaxOut, uint256 maxOutTimes, uint256 maxOutTimesInWeek, uint256 totalSell, uint256 sellThisMonth) {
Investor memory investor = investors[investorAddress];
return (investor.lastMaxOut, investor.maxOutTimes, investor.maxOutTimesInWeek, investor.totalSell, investor.sellThisMonth);
}
function getInvestorPart4(address investorAddress) view public returns (uint256 rightSell, uint256 leftSell, uint256 reserveCommission, uint256 dailyIncomeWithrewAmount, uint256 registerTime) {
Investor memory investor = investors[investorAddress];
return (investor.rightSell, investor.leftSell, investor.reserveCommission, investor.dailyIncomeWithrewAmount, investor.registerTime);
}
function getInvestorPart5(address investorAddress) view public returns (uint256 unpaidSystemCommission, uint256 unpaidDailyIncome, uint256 minDeposit) {
return (
getUnpaidSystemCommission(investorAddress),
getDailyIncomeForUser(investorAddress),
investors[investorAddress].minDeposit
);
}
function getInvestorPart6(address investorAddress) view public returns (address[] memory presentees, bytes32[] memory _investments, bytes32[] memory _withdrawals) {
Investor memory investor = investors[investorAddress];
return (investor.presentees, investor.investments ,investor.withdrawals);
}
function getInvestorLength() view public returns(uint256) { return investorAddresses.length; }
function getMaxOutsLength() view public returns(uint256) { return maxOutIds.length; }
function getNodesAddresses(address rootNodeAddress) public view returns(address[] memory){
uint256 maxLength = investorAddresses.length;
address[] memory nodes = new address[](maxLength);
nodes[0] = rootNodeAddress;
uint256 processIndex = 0;
uint256 nextIndex = 1;
while (processIndex != nextIndex) {
Investor memory currentInvestor = investors[nodes[processIndex++]];
if (currentInvestor.leftChild != address(0)) nodes[nextIndex++] = currentInvestor.leftChild;
if (currentInvestor.rightChild != address(0)) nodes[nextIndex++] = currentInvestor.rightChild;
}
return nodes;
}
// query investments and withdrawals helpers
function getInvestmentsLength () public view returns(uint256 length) { return investmentIds.length; }
function getWithdrawalsLength() public view returns(uint256 length) { return withdrawalIds.length; }
// import helper
function importInvestor(bytes32 email, address[] memory addresses, bool isDisabled, uint256[] memory numbers) public mustBeImporting {
Investor memory investor = Investor({
email: email,
isDisabled: isDisabled,
parent: addresses[0],
leftChild: addresses[1],
rightChild: addresses[2],
presenter: addresses[3],
generation: numbers[0],
presentees: new address[](0),
depositedAmount: numbers[1],
withdrewAmount: numbers[2],
lastMaxOut: numbers[3],
maxOutTimes: numbers[4],
maxOutTimesInWeek: numbers[5],
totalSell: numbers[6],
sellThisMonth: numbers[7],
investments: new bytes32[](0),
withdrawals: new bytes32[](0),
rightSell: numbers[8],
leftSell: numbers[9],
reserveCommission: numbers[10],
dailyIncomeWithrewAmount: numbers[11],
registerTime: numbers[12],
minDeposit: MIN_DEP
});
investors[addresses[4]] = investor;
investorAddresses.push(addresses[4]);
if (addresses[3] == address(0)) return;
Investor storage presenter = investors[addresses[3]];
presenter.presentees.push(addresses[4]);
}
function importInvestments(bytes32 id, uint256 at, uint256 amount, address investorAddress) public mustBeImporting {
if (investments[id].at != 0) return;
Investment memory investment = Investment({ id: id, at: at, amount: amount, investor: investorAddress, nextInvestor: address(0), nextBranch: false });
investments[id] = investment;
investmentIds.push(id);
Investor storage investor = investors[investorAddress];
investor.investments.push(id);
depositedAmountGross += amount;
}
function importWithdrawals(bytes32 id, uint256 at, uint256 amount, address investorAddress, address presentee, uint256 reason, uint256 times) public mustBeImporting {
if (withdrawals[id].at != 0) return;
Withdrawal memory withdrawal = Withdrawal({ id: id, at: at, amount: amount, investor: investorAddress, presentee: presentee, times: times, reason: reason });
withdrawals[id] = withdrawal;
Investor storage investor = investors[investorAddress];
investor.withdrawals.push(id);
withdrawalIds.push(id);
}
function finishImporting() public mustBeAdmin { importing = false; }
function finalizeVotes(uint256 from, uint256 to) public mustBeAdmin {
require(now - currentVote.startTime > ONE_DAY);
uint8 rootVote = currentVote.votes[investorAddresses[0]];
require(rootVote != 0);
for (uint256 index = from; index < to; index++) {
address investorAddress = investorAddresses[index];
if (investors[investorAddress].depositedAmount == 0) continue;
if (currentVote.votes[investorAddress] != 0) continue;
currentVote.votes[investorAddress] = rootVote;
if (rootVote == 1) currentVote.noPoint += 1;
else currentVote.yesPoint += 1;
}
}
function createVote(string memory reason, address payable emergencyAddress) public mustBeAdmin {
require(currentVote.startTime == 0);
uint256 totalPoint = getAvailableToVote();
currentVote = Vote({
startTime: now,
reason: reason,
emergencyAddress: emergencyAddress,
yesPoint: 0,
noPoint: 0,
totalPoint: totalPoint
});
}
function removeVote() public mustBeAdmin {
currentVote.startTime = 0;
currentVote.reason = '';
currentVote.emergencyAddress = address(0);
currentVote.yesPoint = 0;
currentVote.noPoint = 0;
}
function sendEtherToNewContract() public mustBeAdmin {
require(currentVote.startTime != 0);
require(now - currentVote.startTime > 3 * ONE_DAY);
require(currentVote.yesPoint > currentVote.totalPoint / 2);
require(currentVote.emergencyAddress != address(0));
currentVote.emergencyAddress.transfer(address(this).balance);
}
function voteProcess(address investor, bool isYes) internal {
require(investors[investor].depositedAmount > 0);
require(now - currentVote.startTime < ONE_DAY);
uint8 newVoteValue = isYes ? 2 : 1;
uint8 currentVoteValue = currentVote.votes[investor];
require(newVoteValue != currentVoteValue);
updateVote(isYes);
if (currentVoteValue == 0) return;
if (isYes) {
currentVote.noPoint -= getVoteShare();
} else {
currentVote.yesPoint -= getVoteShare();
}
}
function vote(bool isYes) public { voteProcess(msg.sender, isYes); }
function updateVote(bool isYes) internal {
currentVote.votes[msg.sender] = isYes ? 2 : 1;
if (isYes) {
currentVote.yesPoint += getVoteShare();
} else {
currentVote.noPoint += getVoteShare();
}
}
function getVoteShare() public view returns(uint256) {
if (investors[msg.sender].generation >= 3) return 1;
if (currentVote.totalPoint > 40) return currentVote.totalPoint / 20;
return 2;
}
function getAvailableToVote() public view returns(uint256) {
uint256 count = 0;
for (uint256 i = 0; i < investorAddresses.length; i++) {
Investor memory investor = investors[investorAddresses[i]];
if (investor.depositedAmount > 0) count++;
}
return count;
}
function setEnv(uint256 _maxLevelsAddSale) public {
maxLevelsAddSale = _maxLevelsAddSale;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[],"name":"depositedAmountGross","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"sendEtherToNewContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paySystemCommissionTimes","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastPayDailyIncome","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"investorAddress","type":"address"}],"name":"enableInvestor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getVoteShare","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"importing","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getWithdrawalsLength","outputs":[{"name":"length","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"investorAddress","type":"address"}],"name":"getInvestorPart4","outputs":[{"name":"rightSell","type":"uint256"},{"name":"leftSell","type":"uint256"},{"name":"reserveCommission","type":"uint256"},{"name":"dailyIncomeWithrewAmount","type":"uint256"},{"name":"registerTime","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"withdrawalIds","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getInvestorLength","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"maxOutIds","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getInvestmentsLength","outputs":[{"name":"length","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getMaxOutsLength","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"rootNodeAddress","type":"address"}],"name":"getNodesAddresses","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"removeVote","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"isYes","type":"bool"}],"name":"vote","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"uint256"},{"name":"to","type":"uint256"}],"name":"resetMaxOutInWeek","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"finishPayDailyIncome","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"investorAddress","type":"address"},{"name":"times","type":"uint256"}],"name":"paySystemCommissionInvestor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"maxOuts","outputs":[{"name":"id","type":"bytes32"},{"name":"investor","type":"address"},{"name":"times","type":"uint256"},{"name":"at","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"investorAddress","type":"address"}],"name":"getInvestorPart5","outputs":[{"name":"unpaidSystemCommission","type":"uint256"},{"name":"unpaidDailyIncome","type":"uint256"},{"name":"minDeposit","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"bytes32"},{"name":"at","type":"uint256"},{"name":"amount","type":"uint256"},{"name":"investorAddress","type":"address"}],"name":"importInvestments","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"investorAddress","type":"address"}],"name":"getInvestorPart2","outputs":[{"name":"generation","type":"uint256"},{"name":"depositedAmount","type":"uint256"},{"name":"withdrewAmount","type":"uint256"},{"name":"isDisabled","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"uint256"},{"name":"to","type":"uint256"}],"name":"resetGame","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"MIN_DEP","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"presenterAddress","type":"address"},{"name":"presenteeAddress","type":"address"},{"name":"parentAddress","type":"address"},{"name":"presenteeEmail","type":"bytes32"},{"name":"isLeft","type":"bool"}],"name":"putPresentee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"uint256"},{"name":"to","type":"uint256"}],"name":"paySystemCommissionByIndex","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"reason","type":"string"},{"name":"emergencyAddress","type":"address"}],"name":"createVote","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ONE_DAY","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maximumMaxOutInWeek","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"bytes32"},{"name":"at","type":"uint256"},{"name":"amount","type":"uint256"},{"name":"investorAddress","type":"address"},{"name":"presentee","type":"address"},{"name":"reason","type":"uint256"},{"name":"times","type":"uint256"}],"name":"importWithdrawals","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"lastPaySystemCommission","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"investorAddress","type":"address"},{"name":"times","type":"uint256"}],"name":"setMaximumMaxOutTimes","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"investorAddresses","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"email","type":"bytes32"},{"name":"addresses","type":"address[]"},{"name":"isDisabled","type":"bool"},{"name":"numbers","type":"uint256[]"}],"name":"importInvestor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"contractStartAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MAX_DEP","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"uint256"},{"name":"to","type":"uint256"}],"name":"finalizeVotes","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"payDailyIncomeTimes","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"uint256"},{"name":"to","type":"uint256"}],"name":"payDailyIncomeByIndex","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_maxLevelsAddSale","type":"uint256"}],"name":"setEnv","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"finishPaySystemCommission","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"lastReset","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"investorAddress","type":"address"}],"name":"getInvestorPart1","outputs":[{"name":"email","type":"bytes32"},{"name":"parent","type":"address"},{"name":"leftChild","type":"address"},{"name":"rightChild","type":"address"},{"name":"presenter","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finishImporting","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"investorAddress","type":"address"}],"name":"getUnpaidSystemCommission","outputs":[{"name":"unpaid","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"investorAddress","type":"address"}],"name":"getInvestorPart6","outputs":[{"name":"presentees","type":"address[]"},{"name":"_investments","type":"bytes32[]"},{"name":"_withdrawals","type":"bytes32[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"deposit","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"investorAddress","type":"address"},{"name":"times","type":"uint256"}],"name":"payDailyIncomeForInvestor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"investor","type":"address"}],"name":"revivalInvestor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"investments","outputs":[{"name":"id","type":"bytes32"},{"name":"at","type":"uint256"},{"name":"amount","type":"uint256"},{"name":"investor","type":"address"},{"name":"nextInvestor","type":"address"},{"name":"nextBranch","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"percent","type":"uint256"},{"name":"from","type":"uint256"},{"name":"to","type":"uint256"}],"name":"stopGame","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"operationFund","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"investmentIds","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"donate","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"withdrawals","outputs":[{"name":"id","type":"bytes32"},{"name":"at","type":"uint256"},{"name":"amount","type":"uint256"},{"name":"investor","type":"address"},{"name":"presentee","type":"address"},{"name":"reason","type":"uint256"},{"name":"times","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"investorAddress","type":"address"}],"name":"disableInvestor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxLevelsAddSale","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAvailableToVote","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentVote","outputs":[{"name":"startTime","type":"uint256"},{"name":"reason","type":"string"},{"name":"emergencyAddress","type":"address"},{"name":"yesPoint","type":"uint256"},{"name":"noPoint","type":"uint256"},{"name":"totalPoint","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"investmentId","type":"bytes32"}],"name":"addSellForParents","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"investorAddress","type":"address"}],"name":"getInvestorPart3","outputs":[{"name":"lastMaxOut","type":"uint256"},{"name":"maxOutTimes","type":"uint256"},{"name":"maxOutTimesInWeek","type":"uint256"},{"name":"totalSell","type":"uint256"},{"name":"sellThisMonth","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"investorAddress","type":"address"}],"name":"payToReachMaxOut","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"}]Contract Creation Code
6080604052620151806000908155670de0b6b3a7640000600190815568056bc75e2d6310000060029081556004929092556005819055600681905542600781905560088190556009819055600a55600b8054600160a060020a03191673e1483b2b28643d424235d0e5920bd48a563a973717905560c86014556015919091556016805460ff1916909117905534801561009757600080fd5b5060038054600160a060020a03191633179055615510806100b96000396000f3fe6080604052600436106103eb576000357c01000000000000000000000000000000000000000000000000000000009004806394dd27d21161021a578063d0e30db011610135578063efbf64a7116100c8578063f851a44011610097578063f851a44014611111578063f9b137d714611126578063fa2e15c9146111e8578063faa5a22514611212578063fd5e79aa14611245576103eb565b8063efbf64a714611048578063f142ca5e146110b4578063f6610aa6146110e7578063f76c705d146110fc576103eb565b8063df40da2911610104578063df40da2914610fcb578063e544804814611001578063e83a25c514611016578063ed88c68e14611040576103eb565b8063d0e30db0146103eb578063d202925b14610ef7578063d51527d114610f30578063d7eb937914610f63576103eb565b8063b4dd4890116101ad578063c9f58d4c1161017c578063c9f58d4c14610d32578063ca5e586614610d9e578063cb60930d14610db3578063cefe43eb14610de6576103eb565b8063b4dd489014610cae578063bdb60f6714610cde578063c8f4095614610d08578063c9a1e7b214610d1d576103eb565b8063a363fc96116101e9578063a363fc9614610c3f578063a9e4176f14610c54578063ac1d1abe14610c69578063b30e3b3814610c99576103eb565b806394dd27d214610a66578063952867c114610a7b57806395a25efa14610ab45780639e45103414610afa576103eb565b80634b9f5c981161030a5780637726b16b1161029d5780637e4ca6cc1161026c5780637e4ca6cc14610923578063863e76db146109e15780638ed24df1146109f65780638f0fb9e014610a0b576103eb565b80637726b16b1461085d5780637a9506ed1461088d5780637dbfa329146108a25780637dded8f2146108f3576103eb565b80636a86e8fd116102d95780636a86e8fd146107145780636a9408411461076c5780636d462ae1146107bd57806376a1f04f14610802576103eb565b80634b9f5c981461066a5780634c6de5091461069657806359aab5f1146106c65780635bdbeb34146106db576103eb565b80632f89ddf811610382578063395bf56211610351578063395bf562146105a85780633f310896146105bd578063479537b6146105d257806349aa4ee214610655576103eb565b80632f89ddf8146104e15780632fb011fa1461053f57806337f6a7ee146105695780633865079f1461057e576103eb565b80631b3f8e44116103be5780631b3f8e441461045b57806326969b671461048e57806327f6ae8c146104a35780632d9b7f4d146104cc576103eb565b8063097d42e0146103f55780630e8ac5c11461041c57806314e53a4014610431578063152ad43314610446575b6103f3611278565b005b34801561040157600080fd5b5061040a611283565b60408051918252519081900360200190f35b34801561042857600080fd5b506103f3611289565b34801561043d57600080fd5b5061040a611331565b34801561045257600080fd5b5061040a611337565b34801561046757600080fd5b506103f36004803603602081101561047e57600080fd5b5035600160a060020a031661133d565b34801561049a57600080fd5b5061040a611378565b3480156104af57600080fd5b506104b86113b9565b604080519115158252519081900360200190f35b3480156104d857600080fd5b5061040a6113c2565b3480156104ed57600080fd5b506105146004803603602081101561050457600080fd5b5035600160a060020a03166113c8565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b34801561054b57600080fd5b5061040a6004803603602081101561056257600080fd5b503561161a565b34801561057557600080fd5b5061040a611639565b34801561058a57600080fd5b5061040a600480360360208110156105a157600080fd5b503561163f565b3480156105b457600080fd5b5061040a61164d565b3480156105c957600080fd5b5061040a611653565b3480156105de57600080fd5b50610605600480360360208110156105f557600080fd5b5035600160a060020a0316611659565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610641578181015183820152602001610629565b505050509050019250505060405180910390f35b34801561066157600080fd5b506103f3611994565b34801561067657600080fd5b506103f36004803603602081101561068d57600080fd5b503515156119eb565b3480156106a257600080fd5b506103f3600480360360408110156106b957600080fd5b50803590602001356119f5565b3480156106d257600080fd5b506103f3611aa5565b3480156106e757600080fd5b506103f3600480360360408110156106fe57600080fd5b50600160a060020a038135169060200135611acb565b34801561072057600080fd5b5061073e6004803603602081101561073757600080fd5b5035611ba7565b60408051948552600160a060020a039093166020850152838301919091526060830152519081900360800190f35b34801561077857600080fd5b5061079f6004803603602081101561078f57600080fd5b5035600160a060020a0316611bd8565b60408051938452602084019290925282820152519081900360600190f35b3480156107c957600080fd5b506103f3600480360360808110156107e057600080fd5b5080359060208101359060408101359060600135600160a060020a0316611c17565b34801561080e57600080fd5b506108356004803603602081101561082557600080fd5b5035600160a060020a0316611d5c565b6040805194855260208501939093528383019190915215156060830152519081900360800190f35b34801561086957600080fd5b506103f36004803603604081101561088057600080fd5b5080359060200135611fa1565b34801561089957600080fd5b5061040a6121ff565b3480156108ae57600080fd5b506103f3600480360360a08110156108c557600080fd5b50600160a060020a038135811691602081013582169160408201351690606081013590608001351515612205565b3480156108ff57600080fd5b506103f36004803603604081101561091657600080fd5b508035906020013561266e565b34801561092f57600080fd5b506103f36004803603604081101561094657600080fd5b81019060208101813564010000000081111561096157600080fd5b82018360208201111561097357600080fd5b8035906020019184600183028401116401000000008311171561099557600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050509035600160a060020a031691506126fa9050565b3480156109ed57600080fd5b5061040a6127cd565b348015610a0257600080fd5b5061040a6127d3565b348015610a1757600080fd5b506103f3600480360360e0811015610a2e57600080fd5b50803590602081013590604081013590600160a060020a03606082013581169160808101359091169060a08101359060c001356127d9565b348015610a7257600080fd5b5061040a612988565b348015610a8757600080fd5b506103f360048036036040811015610a9e57600080fd5b50600160a060020a03813516906020013561298e565b348015610ac057600080fd5b50610ade60048036036020811015610ad757600080fd5b50356129c4565b60408051600160a060020a039092168252519081900360200190f35b348015610b0657600080fd5b506103f360048036036080811015610b1d57600080fd5b81359190810190604081016020820135640100000000811115610b3f57600080fd5b820183602082011115610b5157600080fd5b80359060200191846020830284011164010000000083111715610b7357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929584351515959094909350604081019250602001359050640100000000811115610bcd57600080fd5b820183602082011115610bdf57600080fd5b80359060200191846020830284011164010000000083111715610c0157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506129ec945050505050565b348015610c4b57600080fd5b5061040a612f3a565b348015610c6057600080fd5b5061040a612f40565b348015610c7557600080fd5b506103f360048036036040811015610c8c57600080fd5b5080359060200135612f46565b348015610ca557600080fd5b5061040a613089565b348015610cba57600080fd5b506103f360048036036040811015610cd157600080fd5b508035906020013561308f565b348015610cea57600080fd5b506103f360048036036020811015610d0157600080fd5b5035613106565b348015610d1457600080fd5b506103f361310b565b348015610d2957600080fd5b5061040a613131565b348015610d3e57600080fd5b50610d6560048036036020811015610d5557600080fd5b5035600160a060020a0316613137565b60408051958652600160a060020a0394851660208701529284168584015290831660608501529091166080830152519081900360a00190f35b348015610daa57600080fd5b506103f3613382565b348015610dbf57600080fd5b5061040a60048036036020811015610dd657600080fd5b5035600160a060020a03166133a5565b348015610df257600080fd5b50610e1960048036036020811015610e0957600080fd5b5035600160a060020a0316613622565b60405180806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b83811015610e61578181015183820152602001610e49565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015610ea0578181015183820152602001610e88565b50505050905001848103825285818151815260200191508051906020019060200280838360005b83811015610edf578181015183820152602001610ec7565b50505050905001965050505050505060405180910390f35b348015610f0357600080fd5b506103f360048036036040811015610f1a57600080fd5b50600160a060020a038135169060200135613860565b348015610f3c57600080fd5b506103f360048036036020811015610f5357600080fd5b5035600160a060020a0316613b34565b348015610f6f57600080fd5b50610f8d60048036036020811015610f8657600080fd5b5035613b6b565b60408051968752602087019590955285850193909352600160a060020a039182166060860152166080840152151560a0830152519081900360c00190f35b348015610fd757600080fd5b506103f360048036036060811015610fee57600080fd5b5080359060208101359060400135613bb3565b34801561100d57600080fd5b50610ade613cef565b34801561102257600080fd5b5061040a6004803603602081101561103957600080fd5b5035613cfe565b6103f3613d0c565b34801561105457600080fd5b506110726004803603602081101561106b57600080fd5b5035613d16565b60408051978852602088019690965286860194909452600160a060020a0392831660608701529116608085015260a084015260c0830152519081900360e00190f35b3480156110c057600080fd5b506103f3600480360360208110156110d757600080fd5b5035600160a060020a0316613d5f565b3480156110f357600080fd5b5061040a613d9d565b34801561110857600080fd5b5061040a613da3565b34801561111d57600080fd5b50610ade614011565b34801561113257600080fd5b5061113b614020565b604051808781526020018060200186600160a060020a0316600160a060020a03168152602001858152602001848152602001838152602001828103825287818151815260200191508051906020019080838360005b838110156111a8578181015183820152602001611190565b50505050905090810190601f1680156111d55780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b3480156111f457600080fd5b506103f36004803603602081101561120b57600080fd5b50356140da565b34801561121e57600080fd5b506105146004803603602081101561123557600080fd5b5035600160a060020a03166141fa565b34801561125157600080fd5b506103f36004803603602081101561126857600080fd5b5035600160a060020a031661444c565b611281336144e5565b565b60045481565b600354600160a060020a031633146112a057600080fd5b60175415156112ae57600080fd5b60005460030260176000015442031115156112c857600080fd5b601d54601b546002909104106112dd57600080fd5b601a54600160a060020a031615156112f457600080fd5b601a54604051600160a060020a0390911690303180156108fc02916000818181858888f1935050505015801561132e573d6000803e3d6000fd5b50565b60055481565b60085481565b600354600160a060020a0316331461135457600080fd5b600160a060020a03166000908152601060205260409020600801805460ff19169055565b3360009081526010602052604081206005015460031161139a575060016113b6565b601d54602810156113b25750601d54601490046113b6565b5060025b90565b60165460ff1681565b600e5490565b60008060008060006113d861521d565b600160a060020a0380881660009081526010602081815260409283902083516102e081018552815481526001820154861681840152600282015486168186015260038201548616606082015260048201549095166080860152600581015460a0860152600681015460c0860152600781015460e0860152600881015460ff1615156101008601526009810154610120860152600a810154610140860152600b810154610160860152600c810154610180860152600d8101546101a0860152600e8101546101c0860152600f8101546101e0860152918201546102008501526011820154610220850152601282015461024085015260138201546102608501526014820180548451818402810184019095528085529293610280860193909283018282801561152f57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311611511575b505050505081526020016015820180548060200260200160405190810160405280929190818152602001828054801561158757602002820191906000526020600020905b815481526020019060010190808311611573575b50505050508152602001601682018054806020026020016040519081016040528092919081815260200182805480156115df57602002820191906000526020600020905b8154815260200190600101908083116115cb575b505050919092525050506101c08101516101e082015161020083015161022084015161024090940151929b919a509850919650945092505050565b600e80548290811061162857fe5b600091825260209091200154905081565b600c5490565b600f80548290811061162857fe5b600d5490565b600f5490565b600c5460408051828152602080840282010190915260609190829082801561168b578160200160208202803883390190505b5090508381600081518110151561169e57fe5b600160a060020a03909216602092830290910190910152600060015b818114611988576116c961521d565b83516001840193601091600091879181106116e057fe5b6020908102909101810151600160a060020a03908116835282820193909352604091820160002082516102e081018452815481526001820154851681840152600282015485168185015260038201548516606082015260048201549094166080850152600581015460a0850152600681015460c0850152600781015460e0850152600881015460ff1615156101008501526009810154610120850152600a810154610140850152600b810154610160850152600c810154610180850152600d8101546101a0850152600e8101546101c0850152600f8101546101e08501526010810154610200850152601181015461022085015260128101546102408501526013810154610260850152601481018054845181850281018501909552808552919361028086019390929083018282801561184357602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311611825575b505050505081526020016015820180548060200260200160405190810160405280929190818152602001828054801561189b57602002820191906000526020600020905b815481526020019060010190808311611887575b50505050508152602001601682018054806020026020016040519081016040528092919081815260200182805480156118f357602002820191906000526020600020905b8154815260200190600101908083116118df575b505050919092525050506040810151909150600160a060020a031615611941576040810151845160018401938691811061192957fe5b600160a060020a039092166020928302909101909101525b6060810151600160a060020a031615611982576060810151845160018401938691811061196a57fe5b600160a060020a039092166020928302909101909101525b506116ba565b5090925050505b919050565b600354600160a060020a031633146119ab57600080fd5b600060178190556040805160208101918290528290526119ce91601891906152f5565b50601a8054600160a060020a03191690556000601b819055601c55565b61132e3382614748565b600354600160a060020a03163314611a0c57600080fd5b60008210158015611a1e5750600c5481105b1515611a2957600080fd5b815b81811015611a9f576000600c82815481101515611a4457fe5b6000918252602080832090910154600160a060020a031680835260109091526040909120600b01549091501515611a7c575050611aa1565b600160a060020a03166000908152601060205260408120600b0155600101611a2b565b505b5050565b600354600160a060020a03163314611abc57600080fd5b42600855600680546001019055565b600354600160a060020a03163314611ae257600080fd5b600160a060020a0382166000908152601060205260409020600881015460ff1615611b0d5750611aa1565b6000611b18846133a5565b90506003600554118015611b2b57508215155b15611b43576000600e8301819055600f830155611b84565b600f820154600e83015410611b6d57600f82018054600e8401805491909103905560009055611b84565b600e82018054600f84018054919091039055600090555b8215611b92576000600d8301555b611ba184826003600087614810565b50505050565b60136020526000908152604090208054600182015460028301546003909301549192600160a060020a039091169184565b6000806000611be6846133a5565b611bef856148d0565b600160a060020a03959095166000908152601060205260409020601301549095909350915050565b60165460ff161515611c2857600080fd5b60008481526011602052604090206001015415611c4457611ba1565b611c4c615373565b506040805160c0810182528581526020808201868152828401868152600160a060020a038087166060860181815260006080880181815260a089018281528e8352601189528a832099518a55965160018a810191909155955160028a01559151600389018054918616600160a060020a03199283161790559151600498890180549751151560a060020a0274ff0000000000000000000000000000000000000000199290961697909316969096179590951692909217909155600d80548084019091557fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb5018a90558252601083529381206015018054948501815581522090910185905580548301905550505050565b600080600080611d6a61521d565b600160a060020a0380871660009081526010602081815260409283902083516102e081018552815481526001820154861681840152600282015486168186015260038201548616606082015260048201549095166080860152600581015460a0860152600681015460c0860152600781015460e0860152600881015460ff1615156101008601526009810154610120860152600a810154610140860152600b810154610160860152600c810154610180860152600d8101546101a0860152600e8101546101c0860152600f8101546101e08601529182015461020085015260118201546102208501526012820154610240850152601382015461026085015260148201805484518184028101840190955280855292936102808601939092830182828015611ec157602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311611ea3575b5050505050815260200160158201805480602002602001604051908101604052809291908181526020018280548015611f1957602002820191906000526020600020905b815481526020019060010190808311611f05575b5050505050815260200160168201805480602002602001604051908101604052809291908181526020018280548015611f7157602002820191906000526020600020905b815481526020019060010190808311611f5d575b50505050508152505090508060a001518160c001518260e001518361010001519450945094509450509193509193565b600354600160a060020a03163314611fb857600080fd5b60008210158015611fca5750600c5481105b1515611fd557600080fd5b6017541515611fe357600080fd5b6000546003026017600001544203111515611ffd57600080fd5b601d54601b5460029091041061201257600080fd5b601a54600160a060020a03161561202857600080fd5b600060176002016000600c600081548110151561204157fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff16905080151561207757600080fd5b42600a55825b82811015611ba1576000600c8281548110151561209657fe5b6000918252602080832090910154600160a060020a0316808352601082526040808420601990935283205490935090919060ff1615156120d657846120f3565b600160a060020a03831660009081526019602052604090205460ff165b9050806002141561217057600082600a01541180612127575081600601548260070154101580156121275750600782015415155b15612148574260098301556000600683018190556007830181905560118301555b600060108301819055600e8301819055600f8301819055600c8301819055600d8301556121f4565b600082600a01541180612199575081600601548260070154101580156121995750600782015415155b156121d05760088201805460ff19166001179055600060108301819055426009840155600683018190556007830181905560118301555b600060108301819055600e8301819055600f8301819055600c8301819055600d8301555b50505060010161207d565b60015481565b600354600160a060020a0316331461221c57600080fd5b600160a060020a0380861660009081526010602052604080822092861682529020600c54156122a0576005820154151561225557600080fd5b6005810154151561226557600080fd5b8215612288576002810154600160a060020a03161561228357600080fd5b6122a0565b6003810154600160a060020a0316156122a057600080fd5b6005820154156122db5760148201805460018101825560009182526020909120018054600160a060020a031916600160a060020a0388161790555b6122e361521d565b6102e06040519081016040528086815260200187600160a060020a031681526020016000600160a060020a031681526020016000600160a060020a0316815260200189600160a060020a031681526020018360050154600101815260200160008152602001600081526020016000151581526020014281526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001428152602001600154815260200160006040519080825280602002602001820160405280156123cf578160200160208202803883390190505b5081526020016000604051908082528060200260200182016040528015612400578160200160208202803883390190505b5081526020016000604051908082528060200260200182016040528015612431578160200160208202803883390190505b509052600160a060020a038881166000908152601060208181526040928390208551815585820151600182018054600160a060020a031990811692881692909217905593860151600282018054861691871691909117905560608601516003820180548616918716919091179055608086015160048201805490951695169490941790925560a0840151600584015560c0840151600684015560e0840151600784015561010084015160088401805460ff19169115159190911790556101208401516009840155610140840151600a840155610160840151600b840155610180840151600c8401556101a0840151600d8401556101c0840151600e8401556101e0840151600f840155610200840151908301556102208301516011830155610240830151601283015561026083015160138301556102808301518051939450849361258292601485019201906153a8565b506102a0820151805161259f916015840191602090910190615409565b506102c082015180516125bc916016840191602090910190615409565b5050600c80546001810182556000919091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7018054600160a060020a031916600160a060020a038a16179055506005820154151561261d57505050612667565b831561264557600282018054600160a060020a031916600160a060020a038916179055612663565b600382018054600160a060020a031916600160a060020a0389161790555b5050505b5050505050565b600354600160a060020a0316331461268557600080fd5b600082101580156126975750600c5481105b15156126a257600080fd5b600954600054601e020142116126b757611aa1565b815b818111611a9f576126f2600c828154811015156126d257fe5b600091825260209091200154600554600160a060020a0390911690611acb565b6001016126b9565b600354600160a060020a0316331461271157600080fd5b6017541561271e57600080fd5b6000612728613da3565b6040805160c081018252428082526020808301889052600160a060020a03871693830193909352600060608301819052608083015260a082018490526017908155865193945090929091612781916018918801906152f5565b506040820151600382018054600160a060020a031916600160a060020a03909216919091179055606082015160048201556080820151600582015560a090910151600690910155505050565b60005481565b60155481565b60165460ff1615156127ea57600080fd5b600087815260126020526040902060010154156128065761297f565b61280e615443565b60e06040519081016040528089815260200188815260200187815260200186600160a060020a0316815260200185600160a060020a0316815260200184815260200183815250905080601260008a815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a815481600160a060020a030219169083600160a060020a0316021790555060808201518160040160006101000a815481600160a060020a030219169083600160a060020a0316021790555060a0820151816005015560c0820151816006015590505060006010600087600160a060020a0316600160a060020a03168152602001908152602001600020905080601601899080600181540180825580915050906001820390600052602060002001600090919290919091505550600e89908060018154018082558091505090600182039060005260206000200160009091929091909150555050505b50505050505050565b60075481565b600354600160a060020a031633146129a557600080fd5b600160a060020a039091166000908152601060205260409020600a0155565b600c8054829081106129d257fe5b600091825260209091200154600160a060020a0316905081565b60165460ff1615156129fd57600080fd5b612a0561521d565b6102e060405190810160405280868152602001856000815181101515612a2757fe5b90602001906020020151600160a060020a03168152602001856001815181101515612a4e57fe5b90602001906020020151600160a060020a03168152602001856002815181101515612a7557fe5b90602001906020020151600160a060020a03168152602001856003815181101515612a9c57fe5b90602001906020020151600160a060020a03168152602001836000815181101515612ac357fe5b906020019060200201518152602001836001815181101515612ae157fe5b906020019060200201518152602001836002815181101515612aff57fe5b9060200190602002015181526020018415158152602001836003815181101515612b2557fe5b906020019060200201518152602001836004815181101515612b4357fe5b906020019060200201518152602001836005815181101515612b6157fe5b906020019060200201518152602001836006815181101515612b7f57fe5b906020019060200201518152602001836007815181101515612b9d57fe5b906020019060200201518152602001836008815181101515612bbb57fe5b906020019060200201518152602001836009815181101515612bd957fe5b90602001906020020151815260200183600a815181101515612bf757fe5b90602001906020020151815260200183600b815181101515612c1557fe5b90602001906020020151815260200183600c815181101515612c3357fe5b6020908102919091018101518252600154828201526040805160008082528184018352828501919091528151818152808401835260608501528151818152928301909152608090920152855191925082916010919087906004908110612c9557fe5b602090810291909101810151600160a060020a0390811683528282019390935260409182016000208451815584820151600182018054600160a060020a031990811692871692909217905592850151600282018054851691861691909117905560608501516003820180548516918616919091179055608085015160048201805490941694169390931790915560a0830151600583015560c0830151600683015560e0830151600783015561010083015160088301805460ff19169115159190911790556101208301516009830155610140830151600a830155610160830151600b830155610180830151600c8301556101a0830151600d8301556101c0830151600e8301556101e0830151600f83015561020083015160108301556102208301516011830155610240830151601283015561026083015160138301556102808301518051612dea92601485019201906153a8565b506102a08201518051612e07916015840191602090910190615409565b506102c08201518051612e24916016840191602090910190615409565b50905050600c846004815181101515612e3957fe5b602090810291909101810151825460018101845560009384529183209091018054600160a060020a031916600160a060020a03909216919091179055845185906003908110612e8457fe5b90602001906020020151600160a060020a03161415612ea35750611ba1565b600060106000866003815181101515612eb857fe5b90602001906020020151600160a060020a0316600160a060020a03168152602001908152602001600020905080601401856004815181101515612ef757fe5b6020908102919091018101518254600181018455600093845291909220018054600160a060020a031916600160a060020a03909216919091179055505050505050565b60095481565b60025481565b600354600160a060020a03163314612f5d57600080fd5b600054601754420311612f6f57600080fd5b600060176002016000600c6000815481101515612f8857fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff169050801515612fbe57600080fd5b825b82811015611ba1576000600c82815481101515612fd957fe5b6000918252602080832090910154600160a060020a0316808352601090915260409091206006015490915015156130105750613081565b600160a060020a03811660009081526019602052604090205460ff16156130375750613081565b600160a060020a0381166000908152601960205260409020805460ff191660ff85169081179091556001141561307557601c8054600101905561307f565b601b805460010190555b505b600101612fc0565b60065481565b600354600160a060020a031633146130a657600080fd5b600082101580156130b85750600c5481105b15156130c357600080fd5b815b818111611a9f576130fe600c828154811015156130de57fe5b600091825260209091200154600654600160a060020a0390911690613860565b6001016130c5565b601455565b600354600160a060020a0316331461312257600080fd5b42600755600580546001019055565b600a5481565b600080600080600061314761521d565b600160a060020a0380881660009081526010602081815260409283902083516102e081018552815481526001820154861681840152600282015486168186015260038201548616606082015260048201549095166080860152600581015460a0860152600681015460c0860152600781015460e0860152600881015460ff1615156101008601526009810154610120860152600a810154610140860152600b810154610160860152600c810154610180860152600d8101546101a0860152600e8101546101c0860152600f8101546101e0860152918201546102008501526011820154610220850152601282015461024085015260138201546102608501526014820180548451818402810184019095528085529293610280860193909283018282801561329e57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311613280575b50505050508152602001601582018054806020026020016040519081016040528092919081815260200182805480156132f657602002820191906000526020600020905b8154815260200190600101908083116132e2575b505050505081526020016016820180548060200260200160405190810160405280929190818152602001828054801561334e57602002820191906000526020600020905b81548152602001906001019080831161333a575b5050509190925250508151602083015160408401516060850151608090950151929c919b5099509297509550909350505050565b600354600160a060020a0316331461339957600080fd5b6016805460ff19169055565b60006133af61521d565b600160a060020a0380841660009081526010602081815260409283902083516102e081018552815481526001820154861681840152600282015486168186015260038201548616606082015260048201549095166080860152600581015460a0860152600681015460c0860152600781015460e0860152600881015460ff1615156101008601526009810154610120860152600a810154610140860152600b810154610160860152600c810154610180860152600d8101546101a0860152600e8101546101c0860152600f8101546101e0860152918201546102008501526011820154610220850152601282015461024085015260138201546102608501526014820180548451818402810184019095528085529293610280860193909283018282801561350657602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116134e8575b505050505081526020016015820180548060200260200160405190810160405280929190818152602001828054801561355e57602002820191906000526020600020905b81548152602001906001019080831161354a575b50505050508152602001601682018054806020026020016040519081016040528092919081815260200182805480156135b657602002820191906000526020600020905b8154815260200190600101908083116135a2575b5050509190925250505060c08101516101808201516101e08301516101c08401516101a085015194955092939192909160008383106135f557836135f7565b825b905060006064613608888886614c08565b830281151561361357fe5b049a9950505050505050505050565b606080606061362f61521d565b600160a060020a0380861660009081526010602081815260409283902083516102e081018552815481526001820154861681840152600282015486168186015260038201548616606082015260048201549095166080860152600581015460a0860152600681015460c0860152600781015460e0860152600881015460ff1615156101008601526009810154610120860152600a810154610140860152600b810154610160860152600c810154610180860152600d8101546101a0860152600e8101546101c0860152600f8101546101e0860152918201546102008501526011820154610220850152601282015461024085015260138201546102608501526014820180548451818402810184019095528085529293610280860193909283018282801561378657602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311613768575b50505050508152602001601582018054806020026020016040519081016040528092919081815260200182805480156137de57602002820191906000526020600020905b8154815260200190600101908083116137ca575b505050505081526020016016820180548060200260200160405190810160405280929190818152602001828054801561383657602002820191906000526020600020905b815481526020019060010190808311613822575b505050919092525050506102808101516102a08201516102c0909201519097919650945092505050565b600354600160a060020a0316331461387757600080fd5b6000613882836148d0565b905061388c61521d565b600160a060020a0380851660009081526010602081815260409283902083516102e081018552815481526001820154861681840152600282015486168186015260038201548616606082015260048201549095166080860152600581015460a0860152600681015460c0860152600781015460e0860152600881015460ff1615156101008601526009810154610120860152600a810154610140860152600b810154610160860152600c810154610180860152600d8101546101a0860152600e8101546101c0860152600f8101546101e086015291820154610200850152601182015461022085015260128201546102408501526013820154610260850152601482018054845181840281018401909552808552929361028086019390928301828280156139e357602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116139c5575b5050505050815260200160158201805480602002602001604051908101604052809291908181526020018280548015613a3b57602002820191906000526020600020905b815481526020019060010190808311613a27575b5050505050815260200160168201805480602002602001604051908101604052809291908181526020018280548015613a9357602002820191906000526020600020905b815481526020019060010190808311613a7f575b5050505050815250509050600054831115613b08576102a08101518051906000906000198301838110613ac257fe5b60209081029091018101516000908152601182526040808220600101805489900390819055600160a060020a038a168352601090935290206009015550611aa192505050565b80610100015115613b1a575050611aa1565b6102208101805183019052611ba184836002600087614810565b600354600160a060020a03163314613b4b57600080fd5b600160a060020a0316600090815260106020526040902042600990910155565b60116020526000908152604090208054600182015460028301546003840154600490940154929391929091600160a060020a03908116919081169060a060020a900460ff1686565b600354600160a060020a03163314613bca57600080fd5b6017541515613bd857600080fd5b6000546003026017600001544203111515613bf257600080fd5b601d54601c54600290910410613c0757600080fd5b601a54600160a060020a031615613c1d57600080fd5b6032831115613c2b57600080fd5b60008210158015613c3d5750600c5481105b1515613c4857600080fd5b815b818111611ba1576000600c82815481101515613c6257fe5b6000918252602080832090910154600160a060020a0316808352601090915260408220600a810154919350911015613c9b575050613ce7565b600881015460ff1615613caf575050613ce7565b60068101546007820154600282048110613ccc5750505050613ce7565b613ce284826064858c0204036006600080614810565b505050505b600101613c4a565b600b54600160a060020a031681565b600d80548290811061162857fe5b6004805434019055565b6012602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154949593949293600160a060020a0392831693929091169187565b600354600160a060020a03163314613d7657600080fd5b600160a060020a03166000908152601060205260409020600801805460ff19166001179055565b60145481565b600080805b600c5481101561400b57613dba61521d565b60106000600c84815481101515613dcd57fe5b6000918252602080832090910154600160a060020a03908116845283820194909452604092830190912082516102e081018452815481526001820154851681840152600282015485168185015260038201548516606082015260048201549094166080850152600581015460a0850152600681015460c0850152600781015460e0850152600881015460ff1615156101008501526009810154610120850152600a810154610140850152600b810154610160850152600c810154610180850152600d8101546101a0850152600e8101546101c0850152600f8101546101e085015260108101546102008501526011810154610220850152601281015461024085015260138101546102608501526014810180548451818502810185019095528085529193610280860193909290830182828015613f3357602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311613f15575b5050505050815260200160158201805480602002602001604051908101604052809291908181526020018280548015613f8b57602002820191906000526020600020905b815481526020019060010190808311613f77575b5050505050815260200160168201805480602002602001604051908101604052809291908181526020018280548015613fe357602002820191906000526020600020905b815481526020019060010190808311613fcf575b505050505081525050905060008160c001511115614002576001909201915b50600101613da8565b50905090565b600354600160a060020a031681565b601780546018805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815293949392918301828280156140ad5780601f10614082576101008083540402835291602001916140ad565b820191906000526020600020905b81548152906001019060200180831161409057829003601f168201915b505050506003830154600484015460058501546006909501549394600160a060020a039092169390925086565b600354600160a060020a031633146140f157600080fd5b60008181526011602052604090206004810154600160a060020a0316151561411857600080fd5b600281015460005b6004830154600160a060020a03161580159061413d575060145481105b15611ba1576004830154600160a060020a03811660009081526010602052604090209060a060020a900460ff161561417e57600f8101805484019055614189565b600e81018054840190555b60048401805460019283018054600160a060020a0390811660009081526010602052604090206002015460a060020a908216828516140274ff000000000000000000000000000000000000000019909316929092178084559054600160a060020a0319909116911617905501614120565b600080600080600061420a61521d565b600160a060020a0380881660009081526010602081815260409283902083516102e081018552815481526001820154861681840152600282015486168186015260038201548616606082015260048201549095166080860152600581015460a0860152600681015460c0860152600781015460e0860152600881015460ff1615156101008601526009810154610120860152600a810154610140860152600b810154610160860152600c810154610180860152600d8101546101a0860152600e8101546101c0860152600f8101546101e0860152918201546102008501526011820154610220850152601282015461024085015260138201546102608501526014820180548451818402810184019095528085529293610280860193909283018282801561436157602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311614343575b50505050508152602001601582018054806020026020016040519081016040528092919081815260200182805480156143b957602002820191906000526020600020905b8154815260200190600101908083116143a5575b505050505081526020016016820180548060200260200160405190810160405280929190818152602001828054801561441157602002820191906000526020600020905b8154815260200190600101908083116143fd575b505050919092525050506101208101516101408201516101608301516101808401516101a090940151929b919a509850919650945092505050565b600354600160a060020a0316331461446357600080fd5b600061446e826133a5565b9050600061447b836148d0565b600160a060020a0384166000908152601060208190526040822060078101546006820154919092015493945090929091821180156144c25750816003028185878601010110155b15156144cd57600080fd5b6144dd8660006004600080614810565b505050505050565b600160a060020a03811660009081526010602052604090206005810154151561450d57600080fd5b6006810154151561452957601381015434101561452957600080fd5b601554600b8201541061453b57600080fd5b600a810154603c1161454c57600080fd5b600a8101541580614567575060005460070281600901544203105b806145755750600681015415155b151561458057600080fd5b6004805434908101909155604080514360208083019190915242828401526c01000000000000000000000000600160a060020a03871602606083015260748083018590528351808403909101815260949092019092528051910120600254600684015491926000920111156145fd578260060154600254036145ff565b345b90508015156146105750505061132e565b6001830154600160a060020a03908116600090815260106020526040902060020154811690851614614640615373565b506040805160c081018252848152426020808301918252828401868152600160a060020a03808b16606086019081526001808c015483166080880190815289151560a0890190815260008d815260119097529890952087518155955190860155915160028501559051600384018054918316600160a060020a03199283161790559151600490930180549551151560a060020a0274ff000000000000000000000000000000000000000019949092169590921694909417919091169290921790915561470b84614c64565b5050600d80546001810182556000919091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50191909155505050565b600160a060020a0382166000908152601060205260408120600601541161476e57600080fd5b60005460175442031061478057600080fd5b60008161478e576001614791565b60025b600160a060020a03841660009081526019602052604090205490915060ff9081169082168114156147c157600080fd5b6147ca83614d25565b60ff811615156147db575050611aa1565b82156147f8576147e9611378565b601c8054919091039055611ba1565b614800611378565b601b805491909103905550505050565b8315801561481f575082600414155b1561482957612667565b600160a060020a038516151561483e57612667565b600160a060020a038516600090815260106020526040812090614860876133a5565b614869886148d0565b83600701548460100154010101905084600114156148845785015b600682015460030281106148a35761489c8188614d85565b5050612667565b6000826010015411156148c3576148c38260100154886004600080614e09565b61297f8688878787614e09565b60006148da61521d565b600160a060020a0380841660009081526010602081815260409283902083516102e081018552815481526001820154861681840152600282015486168186015260038201548616606082015260048201549095166080860152600581015460a0860152600681015460c0860152600781015460e0860152600881015460ff1615156101008601526009810154610120860152600a810154610140860152600b810154610160860152600c810154610180860152600d8101546101a0860152600e8101546101c0860152600f8101546101e08601529182015461020085015260118201546102208501526012820154610240850152601382015461026085015260148201805484518184028101840190955280855292936102808601939092830182828015614a3157602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311614a13575b5050505050815260200160158201805480602002602001604051908101604052809291908181526020018280548015614a8957602002820191906000526020600020905b815481526020019060010190808311614a75575b5050505050815260200160168201805480602002602001604051908101604052809291908181526020018280548015614ae157602002820191906000526020600020905b815481526020019060010190808311614acd575b505050919092525050506102a0810151519091506000805b82811015614bf657614b09615373565b60116000866102a0015184815181101515614b2057fe5b60209081029091018101518252818101929092526040908101600020815160c0810183528154815260018201549381018490526002820154928101929092526003810154600160a060020a039081166060840152600490910154908116608083015260ff60a060020a90910416151560a08201526101208701519092501115614ba95750614bee565b6000546020820151420310614bec576000805482602001514203811515614bcc57fe5b0490506000606483604001518302811515614be357fe5b04949094019350505b505b600101614af9565b50610220909201519091039392505050565b600080614c1484614e37565b90506000614c2186614ebe565b90506000614c2e85614ebe565b90506000828410614c3f5782614c41565b835b90506000818310614c525781614c54565b825b6002029998505050505050505050565b600081815260116020908152604080832060028101546003820154600160a060020a03908116865260108552838620601581018054600181018255908852958720909501879055600685018054830190556004850154168086529290942090939291908115614ce257600c8101805485019055600d81018054850190555b600154816006015410158015614cfd5750600881015460ff16155b156144dd576144dd82600a86600389015491900490600190600160a060020a03166000614810565b80614d31576001614d34565b60025b336000908152601960205260409020805460ff191660ff929092169190911790558015614d7157614d63611378565b601b8054909101905561132e565b614d79611378565b601c8054909101905550565b600160a060020a03811660009081526010602081905260408220600781018054600683018054600a85018054600190810191829055600b8701805490910190559187905592869055426009850155601184019590955560038202038087039383018490559193919291614dfa90869083614f38565b6144dd8386600080600061503b565b600160a060020a0384166000908152601060205260409020600701805486019055612667858585858561503b565b60006801a055690d9db80000821015614e525750600061198f565b680340aad21b3b700000821015614e6b5750600161198f565b6804e1003b28d9280000821015614e845750600261198f565b68068155a43676e00000821015614e9d5750600361198f565b680821ab0d4414980000821015614eb65750600461198f565b506005919050565b6000671bc16d674ec80000821015614ed85750600061198f565b673782dace9d900000821015614ef05750600161198f565b6753444835ec580000821015614f085750600261198f565b676f05b59d3b200000821015614f205750600361198f565b678ac7230489e80000821015614eb65750600461198f565b604080514360208083019190915242828401526c01000000000000000000000000600160a060020a03871602606083015260748083018690528351808403909101815260949092019092528051910120614f9061547f565b5060408051608081018252828152600160a060020a0395861660208083018281528385019788524260608501908152600f805460018082019092557f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80201889055600097885260138085528789209651875592519086018054600160a060020a03191691909b161790995596516002840155965160039092019190915582526010909452929092200155565b84151561504757612667565b604051600160a060020a03851690605a606488040280156108fc02916000818181858888f19350505050158015615082573d6000803e3d6000fd5b50600b54604051600160a060020a0390911690600a606488040280156108fc02916000818181858888f193505050501580156150c2573d6000803e3d6000fd5b50604080514460208083019190915242828401526c01000000000000000000000000600160a060020a0388160260608301526074820188905260948083018790528351808403909101815260b49092019092528051910120615122615443565b506040805160e081018252828152426020808301918252828401998a52600160a060020a0398891660608401818152978a166080850190815260a08501998a5260c085019788526000878152601284528681209551865593516001808701919091559b5160028601559751600385018054600160a060020a0319908116928d1692909217905597516004850180549099169a16999099179096559551600582015592516006909301929092559383526010825282206016018054808601825590835290822001829055600e8054938401815590527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd90910155565b6102e060405190810160405280600080191681526020016000600160a060020a031681526020016000600160a060020a031681526020016000600160a060020a031681526020016000600160a060020a0316815260200160008152602001600081526020016000815260200160001515815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016060815260200160608152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061533657805160ff1916838001178555615363565b82800160010185558215615363579182015b82811115615363578251825591602001919060010190615348565b5061536f9291506154a6565b5090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b8280548282559060005260206000209081019282156153fd579160200282015b828111156153fd5782518254600160a060020a031916600160a060020a039091161782556020909201916001909101906153c8565b5061536f9291506154c0565b8280548282559060005260206000209081019282156153635791602002820182811115615363578251825591602001919060010190615348565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b60408051608081018252600080825260208201819052918101829052606081019190915290565b6113b691905b8082111561536f57600081556001016154ac565b6113b691905b8082111561536f578054600160a060020a03191681556001016154c656fea165627a7a7230582000c3d29af7eed117860728c9e73518c0ccbcf0e39506072c73e7bda3b44000c10029
Deployed Bytecode
0x6080604052600436106103eb576000357c01000000000000000000000000000000000000000000000000000000009004806394dd27d21161021a578063d0e30db011610135578063efbf64a7116100c8578063f851a44011610097578063f851a44014611111578063f9b137d714611126578063fa2e15c9146111e8578063faa5a22514611212578063fd5e79aa14611245576103eb565b8063efbf64a714611048578063f142ca5e146110b4578063f6610aa6146110e7578063f76c705d146110fc576103eb565b8063df40da2911610104578063df40da2914610fcb578063e544804814611001578063e83a25c514611016578063ed88c68e14611040576103eb565b8063d0e30db0146103eb578063d202925b14610ef7578063d51527d114610f30578063d7eb937914610f63576103eb565b8063b4dd4890116101ad578063c9f58d4c1161017c578063c9f58d4c14610d32578063ca5e586614610d9e578063cb60930d14610db3578063cefe43eb14610de6576103eb565b8063b4dd489014610cae578063bdb60f6714610cde578063c8f4095614610d08578063c9a1e7b214610d1d576103eb565b8063a363fc96116101e9578063a363fc9614610c3f578063a9e4176f14610c54578063ac1d1abe14610c69578063b30e3b3814610c99576103eb565b806394dd27d214610a66578063952867c114610a7b57806395a25efa14610ab45780639e45103414610afa576103eb565b80634b9f5c981161030a5780637726b16b1161029d5780637e4ca6cc1161026c5780637e4ca6cc14610923578063863e76db146109e15780638ed24df1146109f65780638f0fb9e014610a0b576103eb565b80637726b16b1461085d5780637a9506ed1461088d5780637dbfa329146108a25780637dded8f2146108f3576103eb565b80636a86e8fd116102d95780636a86e8fd146107145780636a9408411461076c5780636d462ae1146107bd57806376a1f04f14610802576103eb565b80634b9f5c981461066a5780634c6de5091461069657806359aab5f1146106c65780635bdbeb34146106db576103eb565b80632f89ddf811610382578063395bf56211610351578063395bf562146105a85780633f310896146105bd578063479537b6146105d257806349aa4ee214610655576103eb565b80632f89ddf8146104e15780632fb011fa1461053f57806337f6a7ee146105695780633865079f1461057e576103eb565b80631b3f8e44116103be5780631b3f8e441461045b57806326969b671461048e57806327f6ae8c146104a35780632d9b7f4d146104cc576103eb565b8063097d42e0146103f55780630e8ac5c11461041c57806314e53a4014610431578063152ad43314610446575b6103f3611278565b005b34801561040157600080fd5b5061040a611283565b60408051918252519081900360200190f35b34801561042857600080fd5b506103f3611289565b34801561043d57600080fd5b5061040a611331565b34801561045257600080fd5b5061040a611337565b34801561046757600080fd5b506103f36004803603602081101561047e57600080fd5b5035600160a060020a031661133d565b34801561049a57600080fd5b5061040a611378565b3480156104af57600080fd5b506104b86113b9565b604080519115158252519081900360200190f35b3480156104d857600080fd5b5061040a6113c2565b3480156104ed57600080fd5b506105146004803603602081101561050457600080fd5b5035600160a060020a03166113c8565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b34801561054b57600080fd5b5061040a6004803603602081101561056257600080fd5b503561161a565b34801561057557600080fd5b5061040a611639565b34801561058a57600080fd5b5061040a600480360360208110156105a157600080fd5b503561163f565b3480156105b457600080fd5b5061040a61164d565b3480156105c957600080fd5b5061040a611653565b3480156105de57600080fd5b50610605600480360360208110156105f557600080fd5b5035600160a060020a0316611659565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610641578181015183820152602001610629565b505050509050019250505060405180910390f35b34801561066157600080fd5b506103f3611994565b34801561067657600080fd5b506103f36004803603602081101561068d57600080fd5b503515156119eb565b3480156106a257600080fd5b506103f3600480360360408110156106b957600080fd5b50803590602001356119f5565b3480156106d257600080fd5b506103f3611aa5565b3480156106e757600080fd5b506103f3600480360360408110156106fe57600080fd5b50600160a060020a038135169060200135611acb565b34801561072057600080fd5b5061073e6004803603602081101561073757600080fd5b5035611ba7565b60408051948552600160a060020a039093166020850152838301919091526060830152519081900360800190f35b34801561077857600080fd5b5061079f6004803603602081101561078f57600080fd5b5035600160a060020a0316611bd8565b60408051938452602084019290925282820152519081900360600190f35b3480156107c957600080fd5b506103f3600480360360808110156107e057600080fd5b5080359060208101359060408101359060600135600160a060020a0316611c17565b34801561080e57600080fd5b506108356004803603602081101561082557600080fd5b5035600160a060020a0316611d5c565b6040805194855260208501939093528383019190915215156060830152519081900360800190f35b34801561086957600080fd5b506103f36004803603604081101561088057600080fd5b5080359060200135611fa1565b34801561089957600080fd5b5061040a6121ff565b3480156108ae57600080fd5b506103f3600480360360a08110156108c557600080fd5b50600160a060020a038135811691602081013582169160408201351690606081013590608001351515612205565b3480156108ff57600080fd5b506103f36004803603604081101561091657600080fd5b508035906020013561266e565b34801561092f57600080fd5b506103f36004803603604081101561094657600080fd5b81019060208101813564010000000081111561096157600080fd5b82018360208201111561097357600080fd5b8035906020019184600183028401116401000000008311171561099557600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050509035600160a060020a031691506126fa9050565b3480156109ed57600080fd5b5061040a6127cd565b348015610a0257600080fd5b5061040a6127d3565b348015610a1757600080fd5b506103f3600480360360e0811015610a2e57600080fd5b50803590602081013590604081013590600160a060020a03606082013581169160808101359091169060a08101359060c001356127d9565b348015610a7257600080fd5b5061040a612988565b348015610a8757600080fd5b506103f360048036036040811015610a9e57600080fd5b50600160a060020a03813516906020013561298e565b348015610ac057600080fd5b50610ade60048036036020811015610ad757600080fd5b50356129c4565b60408051600160a060020a039092168252519081900360200190f35b348015610b0657600080fd5b506103f360048036036080811015610b1d57600080fd5b81359190810190604081016020820135640100000000811115610b3f57600080fd5b820183602082011115610b5157600080fd5b80359060200191846020830284011164010000000083111715610b7357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929584351515959094909350604081019250602001359050640100000000811115610bcd57600080fd5b820183602082011115610bdf57600080fd5b80359060200191846020830284011164010000000083111715610c0157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506129ec945050505050565b348015610c4b57600080fd5b5061040a612f3a565b348015610c6057600080fd5b5061040a612f40565b348015610c7557600080fd5b506103f360048036036040811015610c8c57600080fd5b5080359060200135612f46565b348015610ca557600080fd5b5061040a613089565b348015610cba57600080fd5b506103f360048036036040811015610cd157600080fd5b508035906020013561308f565b348015610cea57600080fd5b506103f360048036036020811015610d0157600080fd5b5035613106565b348015610d1457600080fd5b506103f361310b565b348015610d2957600080fd5b5061040a613131565b348015610d3e57600080fd5b50610d6560048036036020811015610d5557600080fd5b5035600160a060020a0316613137565b60408051958652600160a060020a0394851660208701529284168584015290831660608501529091166080830152519081900360a00190f35b348015610daa57600080fd5b506103f3613382565b348015610dbf57600080fd5b5061040a60048036036020811015610dd657600080fd5b5035600160a060020a03166133a5565b348015610df257600080fd5b50610e1960048036036020811015610e0957600080fd5b5035600160a060020a0316613622565b60405180806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b83811015610e61578181015183820152602001610e49565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015610ea0578181015183820152602001610e88565b50505050905001848103825285818151815260200191508051906020019060200280838360005b83811015610edf578181015183820152602001610ec7565b50505050905001965050505050505060405180910390f35b348015610f0357600080fd5b506103f360048036036040811015610f1a57600080fd5b50600160a060020a038135169060200135613860565b348015610f3c57600080fd5b506103f360048036036020811015610f5357600080fd5b5035600160a060020a0316613b34565b348015610f6f57600080fd5b50610f8d60048036036020811015610f8657600080fd5b5035613b6b565b60408051968752602087019590955285850193909352600160a060020a039182166060860152166080840152151560a0830152519081900360c00190f35b348015610fd757600080fd5b506103f360048036036060811015610fee57600080fd5b5080359060208101359060400135613bb3565b34801561100d57600080fd5b50610ade613cef565b34801561102257600080fd5b5061040a6004803603602081101561103957600080fd5b5035613cfe565b6103f3613d0c565b34801561105457600080fd5b506110726004803603602081101561106b57600080fd5b5035613d16565b60408051978852602088019690965286860194909452600160a060020a0392831660608701529116608085015260a084015260c0830152519081900360e00190f35b3480156110c057600080fd5b506103f3600480360360208110156110d757600080fd5b5035600160a060020a0316613d5f565b3480156110f357600080fd5b5061040a613d9d565b34801561110857600080fd5b5061040a613da3565b34801561111d57600080fd5b50610ade614011565b34801561113257600080fd5b5061113b614020565b604051808781526020018060200186600160a060020a0316600160a060020a03168152602001858152602001848152602001838152602001828103825287818151815260200191508051906020019080838360005b838110156111a8578181015183820152602001611190565b50505050905090810190601f1680156111d55780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b3480156111f457600080fd5b506103f36004803603602081101561120b57600080fd5b50356140da565b34801561121e57600080fd5b506105146004803603602081101561123557600080fd5b5035600160a060020a03166141fa565b34801561125157600080fd5b506103f36004803603602081101561126857600080fd5b5035600160a060020a031661444c565b611281336144e5565b565b60045481565b600354600160a060020a031633146112a057600080fd5b60175415156112ae57600080fd5b60005460030260176000015442031115156112c857600080fd5b601d54601b546002909104106112dd57600080fd5b601a54600160a060020a031615156112f457600080fd5b601a54604051600160a060020a0390911690303180156108fc02916000818181858888f1935050505015801561132e573d6000803e3d6000fd5b50565b60055481565b60085481565b600354600160a060020a0316331461135457600080fd5b600160a060020a03166000908152601060205260409020600801805460ff19169055565b3360009081526010602052604081206005015460031161139a575060016113b6565b601d54602810156113b25750601d54601490046113b6565b5060025b90565b60165460ff1681565b600e5490565b60008060008060006113d861521d565b600160a060020a0380881660009081526010602081815260409283902083516102e081018552815481526001820154861681840152600282015486168186015260038201548616606082015260048201549095166080860152600581015460a0860152600681015460c0860152600781015460e0860152600881015460ff1615156101008601526009810154610120860152600a810154610140860152600b810154610160860152600c810154610180860152600d8101546101a0860152600e8101546101c0860152600f8101546101e0860152918201546102008501526011820154610220850152601282015461024085015260138201546102608501526014820180548451818402810184019095528085529293610280860193909283018282801561152f57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311611511575b505050505081526020016015820180548060200260200160405190810160405280929190818152602001828054801561158757602002820191906000526020600020905b815481526020019060010190808311611573575b50505050508152602001601682018054806020026020016040519081016040528092919081815260200182805480156115df57602002820191906000526020600020905b8154815260200190600101908083116115cb575b505050919092525050506101c08101516101e082015161020083015161022084015161024090940151929b919a509850919650945092505050565b600e80548290811061162857fe5b600091825260209091200154905081565b600c5490565b600f80548290811061162857fe5b600d5490565b600f5490565b600c5460408051828152602080840282010190915260609190829082801561168b578160200160208202803883390190505b5090508381600081518110151561169e57fe5b600160a060020a03909216602092830290910190910152600060015b818114611988576116c961521d565b83516001840193601091600091879181106116e057fe5b6020908102909101810151600160a060020a03908116835282820193909352604091820160002082516102e081018452815481526001820154851681840152600282015485168185015260038201548516606082015260048201549094166080850152600581015460a0850152600681015460c0850152600781015460e0850152600881015460ff1615156101008501526009810154610120850152600a810154610140850152600b810154610160850152600c810154610180850152600d8101546101a0850152600e8101546101c0850152600f8101546101e08501526010810154610200850152601181015461022085015260128101546102408501526013810154610260850152601481018054845181850281018501909552808552919361028086019390929083018282801561184357602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311611825575b505050505081526020016015820180548060200260200160405190810160405280929190818152602001828054801561189b57602002820191906000526020600020905b815481526020019060010190808311611887575b50505050508152602001601682018054806020026020016040519081016040528092919081815260200182805480156118f357602002820191906000526020600020905b8154815260200190600101908083116118df575b505050919092525050506040810151909150600160a060020a031615611941576040810151845160018401938691811061192957fe5b600160a060020a039092166020928302909101909101525b6060810151600160a060020a031615611982576060810151845160018401938691811061196a57fe5b600160a060020a039092166020928302909101909101525b506116ba565b5090925050505b919050565b600354600160a060020a031633146119ab57600080fd5b600060178190556040805160208101918290528290526119ce91601891906152f5565b50601a8054600160a060020a03191690556000601b819055601c55565b61132e3382614748565b600354600160a060020a03163314611a0c57600080fd5b60008210158015611a1e5750600c5481105b1515611a2957600080fd5b815b81811015611a9f576000600c82815481101515611a4457fe5b6000918252602080832090910154600160a060020a031680835260109091526040909120600b01549091501515611a7c575050611aa1565b600160a060020a03166000908152601060205260408120600b0155600101611a2b565b505b5050565b600354600160a060020a03163314611abc57600080fd5b42600855600680546001019055565b600354600160a060020a03163314611ae257600080fd5b600160a060020a0382166000908152601060205260409020600881015460ff1615611b0d5750611aa1565b6000611b18846133a5565b90506003600554118015611b2b57508215155b15611b43576000600e8301819055600f830155611b84565b600f820154600e83015410611b6d57600f82018054600e8401805491909103905560009055611b84565b600e82018054600f84018054919091039055600090555b8215611b92576000600d8301555b611ba184826003600087614810565b50505050565b60136020526000908152604090208054600182015460028301546003909301549192600160a060020a039091169184565b6000806000611be6846133a5565b611bef856148d0565b600160a060020a03959095166000908152601060205260409020601301549095909350915050565b60165460ff161515611c2857600080fd5b60008481526011602052604090206001015415611c4457611ba1565b611c4c615373565b506040805160c0810182528581526020808201868152828401868152600160a060020a038087166060860181815260006080880181815260a089018281528e8352601189528a832099518a55965160018a810191909155955160028a01559151600389018054918616600160a060020a03199283161790559151600498890180549751151560a060020a0274ff0000000000000000000000000000000000000000199290961697909316969096179590951692909217909155600d80548084019091557fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb5018a90558252601083529381206015018054948501815581522090910185905580548301905550505050565b600080600080611d6a61521d565b600160a060020a0380871660009081526010602081815260409283902083516102e081018552815481526001820154861681840152600282015486168186015260038201548616606082015260048201549095166080860152600581015460a0860152600681015460c0860152600781015460e0860152600881015460ff1615156101008601526009810154610120860152600a810154610140860152600b810154610160860152600c810154610180860152600d8101546101a0860152600e8101546101c0860152600f8101546101e08601529182015461020085015260118201546102208501526012820154610240850152601382015461026085015260148201805484518184028101840190955280855292936102808601939092830182828015611ec157602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311611ea3575b5050505050815260200160158201805480602002602001604051908101604052809291908181526020018280548015611f1957602002820191906000526020600020905b815481526020019060010190808311611f05575b5050505050815260200160168201805480602002602001604051908101604052809291908181526020018280548015611f7157602002820191906000526020600020905b815481526020019060010190808311611f5d575b50505050508152505090508060a001518160c001518260e001518361010001519450945094509450509193509193565b600354600160a060020a03163314611fb857600080fd5b60008210158015611fca5750600c5481105b1515611fd557600080fd5b6017541515611fe357600080fd5b6000546003026017600001544203111515611ffd57600080fd5b601d54601b5460029091041061201257600080fd5b601a54600160a060020a03161561202857600080fd5b600060176002016000600c600081548110151561204157fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff16905080151561207757600080fd5b42600a55825b82811015611ba1576000600c8281548110151561209657fe5b6000918252602080832090910154600160a060020a0316808352601082526040808420601990935283205490935090919060ff1615156120d657846120f3565b600160a060020a03831660009081526019602052604090205460ff165b9050806002141561217057600082600a01541180612127575081600601548260070154101580156121275750600782015415155b15612148574260098301556000600683018190556007830181905560118301555b600060108301819055600e8301819055600f8301819055600c8301819055600d8301556121f4565b600082600a01541180612199575081600601548260070154101580156121995750600782015415155b156121d05760088201805460ff19166001179055600060108301819055426009840155600683018190556007830181905560118301555b600060108301819055600e8301819055600f8301819055600c8301819055600d8301555b50505060010161207d565b60015481565b600354600160a060020a0316331461221c57600080fd5b600160a060020a0380861660009081526010602052604080822092861682529020600c54156122a0576005820154151561225557600080fd5b6005810154151561226557600080fd5b8215612288576002810154600160a060020a03161561228357600080fd5b6122a0565b6003810154600160a060020a0316156122a057600080fd5b6005820154156122db5760148201805460018101825560009182526020909120018054600160a060020a031916600160a060020a0388161790555b6122e361521d565b6102e06040519081016040528086815260200187600160a060020a031681526020016000600160a060020a031681526020016000600160a060020a0316815260200189600160a060020a031681526020018360050154600101815260200160008152602001600081526020016000151581526020014281526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001428152602001600154815260200160006040519080825280602002602001820160405280156123cf578160200160208202803883390190505b5081526020016000604051908082528060200260200182016040528015612400578160200160208202803883390190505b5081526020016000604051908082528060200260200182016040528015612431578160200160208202803883390190505b509052600160a060020a038881166000908152601060208181526040928390208551815585820151600182018054600160a060020a031990811692881692909217905593860151600282018054861691871691909117905560608601516003820180548616918716919091179055608086015160048201805490951695169490941790925560a0840151600584015560c0840151600684015560e0840151600784015561010084015160088401805460ff19169115159190911790556101208401516009840155610140840151600a840155610160840151600b840155610180840151600c8401556101a0840151600d8401556101c0840151600e8401556101e0840151600f840155610200840151908301556102208301516011830155610240830151601283015561026083015160138301556102808301518051939450849361258292601485019201906153a8565b506102a0820151805161259f916015840191602090910190615409565b506102c082015180516125bc916016840191602090910190615409565b5050600c80546001810182556000919091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7018054600160a060020a031916600160a060020a038a16179055506005820154151561261d57505050612667565b831561264557600282018054600160a060020a031916600160a060020a038916179055612663565b600382018054600160a060020a031916600160a060020a0389161790555b5050505b5050505050565b600354600160a060020a0316331461268557600080fd5b600082101580156126975750600c5481105b15156126a257600080fd5b600954600054601e020142116126b757611aa1565b815b818111611a9f576126f2600c828154811015156126d257fe5b600091825260209091200154600554600160a060020a0390911690611acb565b6001016126b9565b600354600160a060020a0316331461271157600080fd5b6017541561271e57600080fd5b6000612728613da3565b6040805160c081018252428082526020808301889052600160a060020a03871693830193909352600060608301819052608083015260a082018490526017908155865193945090929091612781916018918801906152f5565b506040820151600382018054600160a060020a031916600160a060020a03909216919091179055606082015160048201556080820151600582015560a090910151600690910155505050565b60005481565b60155481565b60165460ff1615156127ea57600080fd5b600087815260126020526040902060010154156128065761297f565b61280e615443565b60e06040519081016040528089815260200188815260200187815260200186600160a060020a0316815260200185600160a060020a0316815260200184815260200183815250905080601260008a815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a815481600160a060020a030219169083600160a060020a0316021790555060808201518160040160006101000a815481600160a060020a030219169083600160a060020a0316021790555060a0820151816005015560c0820151816006015590505060006010600087600160a060020a0316600160a060020a03168152602001908152602001600020905080601601899080600181540180825580915050906001820390600052602060002001600090919290919091505550600e89908060018154018082558091505090600182039060005260206000200160009091929091909150555050505b50505050505050565b60075481565b600354600160a060020a031633146129a557600080fd5b600160a060020a039091166000908152601060205260409020600a0155565b600c8054829081106129d257fe5b600091825260209091200154600160a060020a0316905081565b60165460ff1615156129fd57600080fd5b612a0561521d565b6102e060405190810160405280868152602001856000815181101515612a2757fe5b90602001906020020151600160a060020a03168152602001856001815181101515612a4e57fe5b90602001906020020151600160a060020a03168152602001856002815181101515612a7557fe5b90602001906020020151600160a060020a03168152602001856003815181101515612a9c57fe5b90602001906020020151600160a060020a03168152602001836000815181101515612ac357fe5b906020019060200201518152602001836001815181101515612ae157fe5b906020019060200201518152602001836002815181101515612aff57fe5b9060200190602002015181526020018415158152602001836003815181101515612b2557fe5b906020019060200201518152602001836004815181101515612b4357fe5b906020019060200201518152602001836005815181101515612b6157fe5b906020019060200201518152602001836006815181101515612b7f57fe5b906020019060200201518152602001836007815181101515612b9d57fe5b906020019060200201518152602001836008815181101515612bbb57fe5b906020019060200201518152602001836009815181101515612bd957fe5b90602001906020020151815260200183600a815181101515612bf757fe5b90602001906020020151815260200183600b815181101515612c1557fe5b90602001906020020151815260200183600c815181101515612c3357fe5b6020908102919091018101518252600154828201526040805160008082528184018352828501919091528151818152808401835260608501528151818152928301909152608090920152855191925082916010919087906004908110612c9557fe5b602090810291909101810151600160a060020a0390811683528282019390935260409182016000208451815584820151600182018054600160a060020a031990811692871692909217905592850151600282018054851691861691909117905560608501516003820180548516918616919091179055608085015160048201805490941694169390931790915560a0830151600583015560c0830151600683015560e0830151600783015561010083015160088301805460ff19169115159190911790556101208301516009830155610140830151600a830155610160830151600b830155610180830151600c8301556101a0830151600d8301556101c0830151600e8301556101e0830151600f83015561020083015160108301556102208301516011830155610240830151601283015561026083015160138301556102808301518051612dea92601485019201906153a8565b506102a08201518051612e07916015840191602090910190615409565b506102c08201518051612e24916016840191602090910190615409565b50905050600c846004815181101515612e3957fe5b602090810291909101810151825460018101845560009384529183209091018054600160a060020a031916600160a060020a03909216919091179055845185906003908110612e8457fe5b90602001906020020151600160a060020a03161415612ea35750611ba1565b600060106000866003815181101515612eb857fe5b90602001906020020151600160a060020a0316600160a060020a03168152602001908152602001600020905080601401856004815181101515612ef757fe5b6020908102919091018101518254600181018455600093845291909220018054600160a060020a031916600160a060020a03909216919091179055505050505050565b60095481565b60025481565b600354600160a060020a03163314612f5d57600080fd5b600054601754420311612f6f57600080fd5b600060176002016000600c6000815481101515612f8857fe5b6000918252602080832090910154600160a060020a0316835282019290925260400190205460ff169050801515612fbe57600080fd5b825b82811015611ba1576000600c82815481101515612fd957fe5b6000918252602080832090910154600160a060020a0316808352601090915260409091206006015490915015156130105750613081565b600160a060020a03811660009081526019602052604090205460ff16156130375750613081565b600160a060020a0381166000908152601960205260409020805460ff191660ff85169081179091556001141561307557601c8054600101905561307f565b601b805460010190555b505b600101612fc0565b60065481565b600354600160a060020a031633146130a657600080fd5b600082101580156130b85750600c5481105b15156130c357600080fd5b815b818111611a9f576130fe600c828154811015156130de57fe5b600091825260209091200154600654600160a060020a0390911690613860565b6001016130c5565b601455565b600354600160a060020a0316331461312257600080fd5b42600755600580546001019055565b600a5481565b600080600080600061314761521d565b600160a060020a0380881660009081526010602081815260409283902083516102e081018552815481526001820154861681840152600282015486168186015260038201548616606082015260048201549095166080860152600581015460a0860152600681015460c0860152600781015460e0860152600881015460ff1615156101008601526009810154610120860152600a810154610140860152600b810154610160860152600c810154610180860152600d8101546101a0860152600e8101546101c0860152600f8101546101e0860152918201546102008501526011820154610220850152601282015461024085015260138201546102608501526014820180548451818402810184019095528085529293610280860193909283018282801561329e57602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311613280575b50505050508152602001601582018054806020026020016040519081016040528092919081815260200182805480156132f657602002820191906000526020600020905b8154815260200190600101908083116132e2575b505050505081526020016016820180548060200260200160405190810160405280929190818152602001828054801561334e57602002820191906000526020600020905b81548152602001906001019080831161333a575b5050509190925250508151602083015160408401516060850151608090950151929c919b5099509297509550909350505050565b600354600160a060020a0316331461339957600080fd5b6016805460ff19169055565b60006133af61521d565b600160a060020a0380841660009081526010602081815260409283902083516102e081018552815481526001820154861681840152600282015486168186015260038201548616606082015260048201549095166080860152600581015460a0860152600681015460c0860152600781015460e0860152600881015460ff1615156101008601526009810154610120860152600a810154610140860152600b810154610160860152600c810154610180860152600d8101546101a0860152600e8101546101c0860152600f8101546101e0860152918201546102008501526011820154610220850152601282015461024085015260138201546102608501526014820180548451818402810184019095528085529293610280860193909283018282801561350657602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116134e8575b505050505081526020016015820180548060200260200160405190810160405280929190818152602001828054801561355e57602002820191906000526020600020905b81548152602001906001019080831161354a575b50505050508152602001601682018054806020026020016040519081016040528092919081815260200182805480156135b657602002820191906000526020600020905b8154815260200190600101908083116135a2575b5050509190925250505060c08101516101808201516101e08301516101c08401516101a085015194955092939192909160008383106135f557836135f7565b825b905060006064613608888886614c08565b830281151561361357fe5b049a9950505050505050505050565b606080606061362f61521d565b600160a060020a0380861660009081526010602081815260409283902083516102e081018552815481526001820154861681840152600282015486168186015260038201548616606082015260048201549095166080860152600581015460a0860152600681015460c0860152600781015460e0860152600881015460ff1615156101008601526009810154610120860152600a810154610140860152600b810154610160860152600c810154610180860152600d8101546101a0860152600e8101546101c0860152600f8101546101e0860152918201546102008501526011820154610220850152601282015461024085015260138201546102608501526014820180548451818402810184019095528085529293610280860193909283018282801561378657602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311613768575b50505050508152602001601582018054806020026020016040519081016040528092919081815260200182805480156137de57602002820191906000526020600020905b8154815260200190600101908083116137ca575b505050505081526020016016820180548060200260200160405190810160405280929190818152602001828054801561383657602002820191906000526020600020905b815481526020019060010190808311613822575b505050919092525050506102808101516102a08201516102c0909201519097919650945092505050565b600354600160a060020a0316331461387757600080fd5b6000613882836148d0565b905061388c61521d565b600160a060020a0380851660009081526010602081815260409283902083516102e081018552815481526001820154861681840152600282015486168186015260038201548616606082015260048201549095166080860152600581015460a0860152600681015460c0860152600781015460e0860152600881015460ff1615156101008601526009810154610120860152600a810154610140860152600b810154610160860152600c810154610180860152600d8101546101a0860152600e8101546101c0860152600f8101546101e086015291820154610200850152601182015461022085015260128201546102408501526013820154610260850152601482018054845181840281018401909552808552929361028086019390928301828280156139e357602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116139c5575b5050505050815260200160158201805480602002602001604051908101604052809291908181526020018280548015613a3b57602002820191906000526020600020905b815481526020019060010190808311613a27575b5050505050815260200160168201805480602002602001604051908101604052809291908181526020018280548015613a9357602002820191906000526020600020905b815481526020019060010190808311613a7f575b5050505050815250509050600054831115613b08576102a08101518051906000906000198301838110613ac257fe5b60209081029091018101516000908152601182526040808220600101805489900390819055600160a060020a038a168352601090935290206009015550611aa192505050565b80610100015115613b1a575050611aa1565b6102208101805183019052611ba184836002600087614810565b600354600160a060020a03163314613b4b57600080fd5b600160a060020a0316600090815260106020526040902042600990910155565b60116020526000908152604090208054600182015460028301546003840154600490940154929391929091600160a060020a03908116919081169060a060020a900460ff1686565b600354600160a060020a03163314613bca57600080fd5b6017541515613bd857600080fd5b6000546003026017600001544203111515613bf257600080fd5b601d54601c54600290910410613c0757600080fd5b601a54600160a060020a031615613c1d57600080fd5b6032831115613c2b57600080fd5b60008210158015613c3d5750600c5481105b1515613c4857600080fd5b815b818111611ba1576000600c82815481101515613c6257fe5b6000918252602080832090910154600160a060020a0316808352601090915260408220600a810154919350911015613c9b575050613ce7565b600881015460ff1615613caf575050613ce7565b60068101546007820154600282048110613ccc5750505050613ce7565b613ce284826064858c0204036006600080614810565b505050505b600101613c4a565b600b54600160a060020a031681565b600d80548290811061162857fe5b6004805434019055565b6012602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154949593949293600160a060020a0392831693929091169187565b600354600160a060020a03163314613d7657600080fd5b600160a060020a03166000908152601060205260409020600801805460ff19166001179055565b60145481565b600080805b600c5481101561400b57613dba61521d565b60106000600c84815481101515613dcd57fe5b6000918252602080832090910154600160a060020a03908116845283820194909452604092830190912082516102e081018452815481526001820154851681840152600282015485168185015260038201548516606082015260048201549094166080850152600581015460a0850152600681015460c0850152600781015460e0850152600881015460ff1615156101008501526009810154610120850152600a810154610140850152600b810154610160850152600c810154610180850152600d8101546101a0850152600e8101546101c0850152600f8101546101e085015260108101546102008501526011810154610220850152601281015461024085015260138101546102608501526014810180548451818502810185019095528085529193610280860193909290830182828015613f3357602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311613f15575b5050505050815260200160158201805480602002602001604051908101604052809291908181526020018280548015613f8b57602002820191906000526020600020905b815481526020019060010190808311613f77575b5050505050815260200160168201805480602002602001604051908101604052809291908181526020018280548015613fe357602002820191906000526020600020905b815481526020019060010190808311613fcf575b505050505081525050905060008160c001511115614002576001909201915b50600101613da8565b50905090565b600354600160a060020a031681565b601780546018805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815293949392918301828280156140ad5780601f10614082576101008083540402835291602001916140ad565b820191906000526020600020905b81548152906001019060200180831161409057829003601f168201915b505050506003830154600484015460058501546006909501549394600160a060020a039092169390925086565b600354600160a060020a031633146140f157600080fd5b60008181526011602052604090206004810154600160a060020a0316151561411857600080fd5b600281015460005b6004830154600160a060020a03161580159061413d575060145481105b15611ba1576004830154600160a060020a03811660009081526010602052604090209060a060020a900460ff161561417e57600f8101805484019055614189565b600e81018054840190555b60048401805460019283018054600160a060020a0390811660009081526010602052604090206002015460a060020a908216828516140274ff000000000000000000000000000000000000000019909316929092178084559054600160a060020a0319909116911617905501614120565b600080600080600061420a61521d565b600160a060020a0380881660009081526010602081815260409283902083516102e081018552815481526001820154861681840152600282015486168186015260038201548616606082015260048201549095166080860152600581015460a0860152600681015460c0860152600781015460e0860152600881015460ff1615156101008601526009810154610120860152600a810154610140860152600b810154610160860152600c810154610180860152600d8101546101a0860152600e8101546101c0860152600f8101546101e0860152918201546102008501526011820154610220850152601282015461024085015260138201546102608501526014820180548451818402810184019095528085529293610280860193909283018282801561436157602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311614343575b50505050508152602001601582018054806020026020016040519081016040528092919081815260200182805480156143b957602002820191906000526020600020905b8154815260200190600101908083116143a5575b505050505081526020016016820180548060200260200160405190810160405280929190818152602001828054801561441157602002820191906000526020600020905b8154815260200190600101908083116143fd575b505050919092525050506101208101516101408201516101608301516101808401516101a090940151929b919a509850919650945092505050565b600354600160a060020a0316331461446357600080fd5b600061446e826133a5565b9050600061447b836148d0565b600160a060020a0384166000908152601060208190526040822060078101546006820154919092015493945090929091821180156144c25750816003028185878601010110155b15156144cd57600080fd5b6144dd8660006004600080614810565b505050505050565b600160a060020a03811660009081526010602052604090206005810154151561450d57600080fd5b6006810154151561452957601381015434101561452957600080fd5b601554600b8201541061453b57600080fd5b600a810154603c1161454c57600080fd5b600a8101541580614567575060005460070281600901544203105b806145755750600681015415155b151561458057600080fd5b6004805434908101909155604080514360208083019190915242828401526c01000000000000000000000000600160a060020a03871602606083015260748083018590528351808403909101815260949092019092528051910120600254600684015491926000920111156145fd578260060154600254036145ff565b345b90508015156146105750505061132e565b6001830154600160a060020a03908116600090815260106020526040902060020154811690851614614640615373565b506040805160c081018252848152426020808301918252828401868152600160a060020a03808b16606086019081526001808c015483166080880190815289151560a0890190815260008d815260119097529890952087518155955190860155915160028501559051600384018054918316600160a060020a03199283161790559151600490930180549551151560a060020a0274ff000000000000000000000000000000000000000019949092169590921694909417919091169290921790915561470b84614c64565b5050600d80546001810182556000919091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50191909155505050565b600160a060020a0382166000908152601060205260408120600601541161476e57600080fd5b60005460175442031061478057600080fd5b60008161478e576001614791565b60025b600160a060020a03841660009081526019602052604090205490915060ff9081169082168114156147c157600080fd5b6147ca83614d25565b60ff811615156147db575050611aa1565b82156147f8576147e9611378565b601c8054919091039055611ba1565b614800611378565b601b805491909103905550505050565b8315801561481f575082600414155b1561482957612667565b600160a060020a038516151561483e57612667565b600160a060020a038516600090815260106020526040812090614860876133a5565b614869886148d0565b83600701548460100154010101905084600114156148845785015b600682015460030281106148a35761489c8188614d85565b5050612667565b6000826010015411156148c3576148c38260100154886004600080614e09565b61297f8688878787614e09565b60006148da61521d565b600160a060020a0380841660009081526010602081815260409283902083516102e081018552815481526001820154861681840152600282015486168186015260038201548616606082015260048201549095166080860152600581015460a0860152600681015460c0860152600781015460e0860152600881015460ff1615156101008601526009810154610120860152600a810154610140860152600b810154610160860152600c810154610180860152600d8101546101a0860152600e8101546101c0860152600f8101546101e08601529182015461020085015260118201546102208501526012820154610240850152601382015461026085015260148201805484518184028101840190955280855292936102808601939092830182828015614a3157602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311614a13575b5050505050815260200160158201805480602002602001604051908101604052809291908181526020018280548015614a8957602002820191906000526020600020905b815481526020019060010190808311614a75575b5050505050815260200160168201805480602002602001604051908101604052809291908181526020018280548015614ae157602002820191906000526020600020905b815481526020019060010190808311614acd575b505050919092525050506102a0810151519091506000805b82811015614bf657614b09615373565b60116000866102a0015184815181101515614b2057fe5b60209081029091018101518252818101929092526040908101600020815160c0810183528154815260018201549381018490526002820154928101929092526003810154600160a060020a039081166060840152600490910154908116608083015260ff60a060020a90910416151560a08201526101208701519092501115614ba95750614bee565b6000546020820151420310614bec576000805482602001514203811515614bcc57fe5b0490506000606483604001518302811515614be357fe5b04949094019350505b505b600101614af9565b50610220909201519091039392505050565b600080614c1484614e37565b90506000614c2186614ebe565b90506000614c2e85614ebe565b90506000828410614c3f5782614c41565b835b90506000818310614c525781614c54565b825b6002029998505050505050505050565b600081815260116020908152604080832060028101546003820154600160a060020a03908116865260108552838620601581018054600181018255908852958720909501879055600685018054830190556004850154168086529290942090939291908115614ce257600c8101805485019055600d81018054850190555b600154816006015410158015614cfd5750600881015460ff16155b156144dd576144dd82600a86600389015491900490600190600160a060020a03166000614810565b80614d31576001614d34565b60025b336000908152601960205260409020805460ff191660ff929092169190911790558015614d7157614d63611378565b601b8054909101905561132e565b614d79611378565b601c8054909101905550565b600160a060020a03811660009081526010602081905260408220600781018054600683018054600a85018054600190810191829055600b8701805490910190559187905592869055426009850155601184019590955560038202038087039383018490559193919291614dfa90869083614f38565b6144dd8386600080600061503b565b600160a060020a0384166000908152601060205260409020600701805486019055612667858585858561503b565b60006801a055690d9db80000821015614e525750600061198f565b680340aad21b3b700000821015614e6b5750600161198f565b6804e1003b28d9280000821015614e845750600261198f565b68068155a43676e00000821015614e9d5750600361198f565b680821ab0d4414980000821015614eb65750600461198f565b506005919050565b6000671bc16d674ec80000821015614ed85750600061198f565b673782dace9d900000821015614ef05750600161198f565b6753444835ec580000821015614f085750600261198f565b676f05b59d3b200000821015614f205750600361198f565b678ac7230489e80000821015614eb65750600461198f565b604080514360208083019190915242828401526c01000000000000000000000000600160a060020a03871602606083015260748083018690528351808403909101815260949092019092528051910120614f9061547f565b5060408051608081018252828152600160a060020a0395861660208083018281528385019788524260608501908152600f805460018082019092557f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80201889055600097885260138085528789209651875592519086018054600160a060020a03191691909b161790995596516002840155965160039092019190915582526010909452929092200155565b84151561504757612667565b604051600160a060020a03851690605a606488040280156108fc02916000818181858888f19350505050158015615082573d6000803e3d6000fd5b50600b54604051600160a060020a0390911690600a606488040280156108fc02916000818181858888f193505050501580156150c2573d6000803e3d6000fd5b50604080514460208083019190915242828401526c01000000000000000000000000600160a060020a0388160260608301526074820188905260948083018790528351808403909101815260b49092019092528051910120615122615443565b506040805160e081018252828152426020808301918252828401998a52600160a060020a0398891660608401818152978a166080850190815260a08501998a5260c085019788526000878152601284528681209551865593516001808701919091559b5160028601559751600385018054600160a060020a0319908116928d1692909217905597516004850180549099169a16999099179096559551600582015592516006909301929092559383526010825282206016018054808601825590835290822001829055600e8054938401815590527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd90910155565b6102e060405190810160405280600080191681526020016000600160a060020a031681526020016000600160a060020a031681526020016000600160a060020a031681526020016000600160a060020a0316815260200160008152602001600081526020016000815260200160001515815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016060815260200160608152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061533657805160ff1916838001178555615363565b82800160010185558215615363579182015b82811115615363578251825591602001919060010190615348565b5061536f9291506154a6565b5090565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b8280548282559060005260206000209081019282156153fd579160200282015b828111156153fd5782518254600160a060020a031916600160a060020a039091161782556020909201916001909101906153c8565b5061536f9291506154c0565b8280548282559060005260206000209081019282156153635791602002820182811115615363578251825591602001919060010190615348565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b60408051608081018252600080825260208201819052918101829052606081019190915290565b6113b691905b8082111561536f57600081556001016154ac565b6113b691905b8082111561536f578054600160a060020a03191681556001016154c656fea165627a7a7230582000c3d29af7eed117860728c9e73518c0ccbcf0e39506072c73e7bda3b44000c10029
Swarm Source
bzzr://00c3d29af7eed117860728c9e73518c0ccbcf0e39506072c73e7bda3b44000c1
Loading...
Loading
Loading...
Loading
Net Worth in USD
$57.54
Net Worth in ETH
0.028744
Token Allocations
ETH
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $2,002.89 | 0.0287 | $57.54 |
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.