More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 7,678 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Sell Unit | 20551435 | 129 days ago | IN | 0 ETH | 0.00008826 | ||||
Sell Unit | 20551416 | 129 days ago | IN | 0 ETH | 0.00009416 | ||||
Sell Unit | 20551126 | 129 days ago | IN | 0 ETH | 0.00009278 | ||||
Sell Unit | 20551114 | 129 days ago | IN | 0 ETH | 0.00010781 | ||||
Sell Unit | 13860877 | 1098 days ago | IN | 0 ETH | 0.00440168 | ||||
Sell Unit | 11855801 | 1409 days ago | IN | 0 ETH | 0.00852474 | ||||
Sell Unit | 11855801 | 1409 days ago | IN | 0 ETH | 0.01676682 | ||||
Sell Unit | 11792185 | 1419 days ago | IN | 0 ETH | 0.00930708 | ||||
Sell Unit | 11787419 | 1420 days ago | IN | 0 ETH | 0.01457545 | ||||
Sell Unit | 11787117 | 1420 days ago | IN | 0 ETH | 0.00937397 | ||||
Sell Unit | 11785516 | 1420 days ago | IN | 0 ETH | 0.00960468 | ||||
Sell Unit | 11162815 | 1516 days ago | IN | 0 ETH | 0.00046272 | ||||
Sell Unit | 11162806 | 1516 days ago | IN | 0 ETH | 0.0004604 | ||||
Sell Unit | 11162695 | 1516 days ago | IN | 0 ETH | 0.00189236 | ||||
Sell Unit | 11162686 | 1516 days ago | IN | 0 ETH | 0.00190232 | ||||
Sell Unit | 11162675 | 1516 days ago | IN | 0 ETH | 0.00043958 | ||||
Sell Unit | 11162626 | 1516 days ago | IN | 0 ETH | 0.00323327 | ||||
Sell Unit | 11162615 | 1516 days ago | IN | 0 ETH | 0.00168856 | ||||
Sell Unit | 11162601 | 1516 days ago | IN | 0 ETH | 0.00172858 | ||||
Sell Unit | 10970156 | 1545 days ago | IN | 0 ETH | 0.00472205 | ||||
Sell Unit | 10292734 | 1650 days ago | IN | 0 ETH | 0.00363708 | ||||
Sell Unit | 10292730 | 1650 days ago | IN | 0 ETH | 0.00195081 | ||||
Sell Unit | 10080445 | 1683 days ago | IN | 0 ETH | 0.00109571 | ||||
Buy Unit | 9968327 | 1700 days ago | IN | 0 ETH | 0.00134539 | ||||
Sell Unit | 9905737 | 1710 days ago | IN | 0 ETH | 0.00016007 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
Units
Compiler Version
v0.4.25+commit.59dbf8f1
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-05-05 */ pragma solidity ^0.4.25; /** * * World War Goo - Competitive Idle Game * * https://ethergoo.io * */ contract Units { GooToken constant goo = GooToken(0xdf0960778c6e6597f197ed9a25f12f5d971da86c); Army army = Army(0x0); Clans clans = Clans(0x0); Factories constant factories = Factories(0xc81068cd335889736fc485592e4d73a82403d44b); mapping(address => mapping(uint256 => UnitsOwned)) public unitsOwned; mapping(address => mapping(uint256 => UnitExperience)) public unitExp; mapping(address => mapping(uint256 => uint256)) private unitMaxCap; mapping(address => mapping(uint256 => UnitUpgrades)) private unitUpgrades; mapping(address => mapping(uint256 => UpgradesOwned)) public upgradesOwned; // For each unitId, which upgrades owned (3 columns of uint64) mapping(uint256 => Unit) public unitList; mapping(uint256 => Upgrade) public upgradeList; mapping(address => bool) operator; address owner; constructor() public { owner = msg.sender; } struct UnitsOwned { uint80 units; uint8 factoryBuiltFlag; // Incase user sells units, we still want to keep factory } struct UnitExperience { uint224 experience; uint32 level; } struct UnitUpgrades { uint32 prodIncrease; uint32 prodMultiplier; uint32 attackIncrease; uint32 attackMultiplier; uint32 defenseIncrease; uint32 defenseMultiplier; uint32 lootingIncrease; uint32 lootingMultiplier; } struct UpgradesOwned { uint64 column0; uint64 column1; uint64 column2; } // Unit & Upgrade data: struct Unit { uint256 unitId; uint224 gooCost; uint256 baseProduction; uint80 attack; uint80 defense; uint80 looting; } struct Upgrade { uint256 upgradeId; uint224 gooCost; uint256 unitId; uint256 column; // Columns of upgrades (1st & 2nd are unit specific, then 3rd is capacity) uint256 prerequisiteUpgrade; uint256 unitMaxCapacityGain; uint32 prodIncrease; uint32 prodMultiplier; uint32 attackIncrease; uint32 attackMultiplier; uint32 defenseIncrease; uint32 defenseMultiplier; uint32 lootingIncrease; uint32 lootingMultiplier; } function setArmy(address armyContract) external { require(msg.sender == owner); army = Army(armyContract); } function setClans(address clansContract) external { require(msg.sender == owner); clans = Clans(clansContract); } function setOperator(address gameContract, bool isOperator) external { require(msg.sender == owner); operator[gameContract] = isOperator; } function mintUnitExternal(uint256 unit, uint80 amount, address player, uint8 chosenPosition) external { require(operator[msg.sender]); mintUnit(unit, amount, player, chosenPosition); } function mintUnit(uint256 unit, uint80 amount, address player, uint8 chosenPosition) internal { UnitsOwned storage existingUnits = unitsOwned[player][unit]; if (existingUnits.factoryBuiltFlag == 0) { // Edge case to create factory for player (on empty tile) where it is their first unit uint256[] memory existingFactories = factories.getFactories(player); uint256 length = existingFactories.length; // Provided position is not valid so find valid factory position if (chosenPosition >= factories.MAX_SIZE() || (chosenPosition < length && existingFactories[chosenPosition] > 0)) { chosenPosition = 0; while (chosenPosition < length && existingFactories[chosenPosition] > 0) { chosenPosition++; } } factories.addFactory(player, chosenPosition, unit); unitsOwned[player][unit] = UnitsOwned(amount, 1); // 1 = Flag to say factory exists } else { existingUnits.units += amount; } (uint80 attackStats, uint80 defenseStats, uint80 lootingStats) = getUnitsCurrentBattleStats(player, unit); if (attackStats > 0 || defenseStats > 0 || lootingStats > 0) { army.increasePlayersArmyPowerTrio(player, attackStats * amount, defenseStats * amount, lootingStats * amount); } else { uint256 prodIncrease = getUnitsCurrentProduction(player, unit) * amount; goo.increasePlayersGooProduction(player, prodIncrease / 100); } } function deleteUnitExternal(uint80 amount, uint256 unit, address player) external { require(operator[msg.sender]); deleteUnit(amount, unit, player); } function deleteUnit(uint80 amount, uint256 unit, address player) internal { (uint80 attackStats, uint80 defenseStats, uint80 lootingStats) = getUnitsCurrentBattleStats(player, unit); if (attackStats > 0 || defenseStats > 0 || lootingStats > 0) { army.decreasePlayersArmyPowerTrio(player, attackStats * amount, defenseStats * amount, lootingStats * amount); } else { uint256 prodDecrease = getUnitsCurrentProduction(player, unit) * amount; goo.decreasePlayersGooProduction(player, prodDecrease / 100); } unitsOwned[player][unit].units -= amount; } function getUnitsCurrentBattleStats(address player, uint256 unitId) internal view returns (uint80 attack, uint80 defense, uint80 looting) { Unit memory unit = unitList[unitId]; UnitUpgrades memory existingUpgrades = unitUpgrades[player][unitId]; attack = (unit.attack + existingUpgrades.attackIncrease) * (100 + existingUpgrades.attackMultiplier); defense = (unit.defense + existingUpgrades.defenseIncrease) * (100 + existingUpgrades.defenseMultiplier); looting = (unit.looting + existingUpgrades.lootingIncrease) * (100 + existingUpgrades.lootingMultiplier); } function getUnitsCurrentProduction(address player, uint256 unitId) public view returns (uint256) { UnitUpgrades memory existingUpgrades = unitUpgrades[player][unitId]; return (unitList[unitId].baseProduction + existingUpgrades.prodIncrease) * (100 + existingUpgrades.prodMultiplier); } function buyUnit(uint256 unitId, uint80 amount, uint8 position) external { uint224 gooCost = SafeMath224.mul(unitList[unitId].gooCost, amount); require(gooCost > 0); // Valid unit uint80 newTotal = unitsOwned[msg.sender][unitId].units + amount; if (newTotal > 99) { require(newTotal < 99 + unitMaxCap[msg.sender][unitId]); } // Clan discount uint224 unitDiscount = clans.getPlayersClanUpgrade(msg.sender, 1); // class 1 = unit discount uint224 reducedGooCost = gooCost - ((gooCost * unitDiscount) / 100); uint224 seventyFivePercentRefund = (gooCost * 3) / 4; // Update players goo goo.updatePlayersGooFromPurchase(msg.sender, reducedGooCost); goo.mintGoo(seventyFivePercentRefund, this); // 75% refund is stored (in this contract) for when player sells unit army.depositSpentGoo(reducedGooCost - seventyFivePercentRefund); // Upto 25% Goo spent goes to divs (Remaining is discount + 75% player gets back when selling unit) mintUnit(unitId, amount, msg.sender, position); } function sellUnit(uint256 unitId, uint80 amount) external { require(unitsOwned[msg.sender][unitId].units >= amount && amount > 0); uint224 gooCost = unitList[unitId].gooCost; require(gooCost > 0); goo.updatePlayersGoo(msg.sender); deleteUnit(amount, unitId, msg.sender); goo.transfer(msg.sender, (gooCost * amount * 3) / 4); // Refund 75% } function grantArmyExp(address player, uint256 unitId, uint224 amount) external returns(bool) { require(operator[msg.sender]); UnitExperience memory existingExp = unitExp[player][unitId]; uint224 expRequirement = (existingExp.level + 1) * 80; // Lvl 1: 80; Lvl 2: 160, Lvl 3: 240 (480 in total) etc. if (existingExp.experience + amount >= expRequirement) { existingExp.experience = (existingExp.experience + amount) - expRequirement; existingExp.level++; unitExp[player][unitId] = existingExp; // Grant buff to unit (5% additive multiplier) UnitUpgrades memory existingUpgrades = unitUpgrades[player][unitId]; existingUpgrades.attackMultiplier += 5; existingUpgrades.defenseMultiplier += 5; existingUpgrades.lootingMultiplier += 5; unitUpgrades[player][unitId] = existingUpgrades; // Increase player's army power uint80 multiplierGain = unitsOwned[player][unitId].units * 5; Unit memory unit = unitList[unitId]; uint80 attackGain = multiplierGain * (unit.attack + existingUpgrades.attackIncrease); uint80 defenseGain = multiplierGain * (unit.defense + existingUpgrades.defenseIncrease); uint80 lootingGain = multiplierGain * (unit.looting + existingUpgrades.lootingIncrease); army.increasePlayersArmyPowerTrio(player, attackGain, defenseGain, lootingGain); return true; } else { unitExp[player][unitId].experience += amount; return false; } } function increaseUnitCapacity(address player, uint256 upgradeGain, uint256 unitId) external { require(operator[msg.sender]); unitMaxCap[player][unitId] += upgradeGain; } function decreaseUnitCapacity(address player, uint256 upgradeGain, uint256 unitId) external { require(operator[msg.sender]); unitMaxCap[player][unitId] -= upgradeGain; } function increaseUpgradesExternal(address player, uint256 unitId, uint32 prodIncrease, uint32 prodMultiplier, uint32 attackIncrease, uint32 attackMultiplier, uint32 defenseIncrease, uint32 defenseMultiplier, uint32 lootingIncrease, uint32 lootingMultiplier) external { require(operator[msg.sender]); Upgrade memory upgrade = Upgrade(0,0,0,0,0,0, prodIncrease, prodMultiplier, attackIncrease, attackMultiplier, defenseIncrease, defenseMultiplier, lootingIncrease, lootingMultiplier); increaseUpgrades(player, upgrade, unitId); } function increaseUpgrades(address player, Upgrade upgrade, uint256 unitId) internal { uint80 units = unitsOwned[player][unitId].units; UnitUpgrades memory existingUpgrades = unitUpgrades[player][unitId]; Unit memory unit = unitList[unitId]; if (unit.baseProduction > 0) { // Increase goo production uint256 prodGain = units * upgrade.prodMultiplier * (unit.baseProduction + existingUpgrades.prodIncrease); // Multiplier gains prodGain += units * upgrade.prodIncrease * (100 + existingUpgrades.prodMultiplier); // Base prod gains goo.updatePlayersGoo(player); goo.increasePlayersGooProduction(player, prodGain / 100); } else { // Increase army power uint80 attackGain = units * upgrade.attackMultiplier * (unit.attack + existingUpgrades.attackIncrease); // Multiplier gains uint80 defenseGain = units * upgrade.defenseMultiplier * (unit.defense + existingUpgrades.defenseIncrease); // Multiplier gains uint80 lootingGain = units * upgrade.lootingMultiplier * (unit.looting + existingUpgrades.lootingIncrease); // Multiplier gains attackGain += units * upgrade.attackIncrease * (100 + existingUpgrades.attackMultiplier); // + Base gains defenseGain += units * upgrade.defenseIncrease * (100 + existingUpgrades.defenseMultiplier); // + Base gains lootingGain += units * upgrade.lootingIncrease * (100 + existingUpgrades.lootingMultiplier); // + Base gains army.increasePlayersArmyPowerTrio(player, attackGain, defenseGain, lootingGain); } existingUpgrades.prodIncrease += upgrade.prodIncrease; existingUpgrades.prodMultiplier += upgrade.prodMultiplier; existingUpgrades.attackIncrease += upgrade.attackIncrease; existingUpgrades.attackMultiplier += upgrade.attackMultiplier; existingUpgrades.defenseIncrease += upgrade.defenseIncrease; existingUpgrades.defenseMultiplier += upgrade.defenseMultiplier; existingUpgrades.lootingIncrease += upgrade.lootingIncrease; existingUpgrades.lootingMultiplier += upgrade.lootingMultiplier; unitUpgrades[player][unitId] = existingUpgrades; } function decreaseUpgradesExternal(address player, uint256 unitId, uint32 prodIncrease, uint32 prodMultiplier, uint32 attackIncrease, uint32 attackMultiplier, uint32 defenseIncrease, uint32 defenseMultiplier, uint32 lootingIncrease, uint32 lootingMultiplier) external { require(operator[msg.sender]); Upgrade memory upgrade = Upgrade(0,0,0,0,0,0, prodIncrease, prodMultiplier, attackIncrease, attackMultiplier, defenseIncrease, defenseMultiplier, lootingIncrease, lootingMultiplier); decreaseUpgrades(player, upgrade, unitId); } function decreaseUpgrades(address player, Upgrade upgrade, uint256 unitId) internal { uint80 units = unitsOwned[player][unitId].units; UnitUpgrades memory existingUpgrades = unitUpgrades[player][unitId]; Unit memory unit = unitList[unitId]; if (unit.baseProduction > 0) { // Decrease goo production uint256 prodLoss = units * upgrade.prodMultiplier * (unit.baseProduction + existingUpgrades.prodIncrease); // Multiplier losses prodLoss += units * upgrade.prodIncrease * (100 + existingUpgrades.prodMultiplier); // Base prod losses goo.updatePlayersGoo(player); goo.decreasePlayersGooProduction(player, prodLoss / 100); } else { // Decrease army power uint80 attackLoss = units * upgrade.attackMultiplier * (unit.attack + existingUpgrades.attackIncrease); // Multiplier losses uint80 defenseLoss = units * upgrade.defenseMultiplier * (unit.defense + existingUpgrades.defenseIncrease); // Multiplier losses uint80 lootingLoss = units * upgrade.lootingMultiplier * (unit.looting + existingUpgrades.lootingIncrease); // Multiplier losses attackLoss += units * upgrade.attackIncrease * (100 + existingUpgrades.attackMultiplier); // + Base losses defenseLoss += units * upgrade.defenseIncrease * (100 + existingUpgrades.defenseMultiplier); // + Base losses lootingLoss += units * upgrade.lootingIncrease * (100 + existingUpgrades.lootingMultiplier); // + Base losses army.decreasePlayersArmyPowerTrio(player, attackLoss, defenseLoss, lootingLoss); } existingUpgrades.prodIncrease -= upgrade.prodIncrease; existingUpgrades.prodMultiplier -= upgrade.prodMultiplier; existingUpgrades.attackIncrease -= upgrade.attackIncrease; existingUpgrades.attackMultiplier -= upgrade.attackMultiplier; existingUpgrades.defenseIncrease -= upgrade.defenseIncrease; existingUpgrades.defenseMultiplier -= upgrade.defenseMultiplier; existingUpgrades.lootingIncrease -= upgrade.lootingIncrease; existingUpgrades.lootingMultiplier -= upgrade.lootingMultiplier; unitUpgrades[player][unitId] = existingUpgrades; } function swapUpgradesExternal(address player, uint256 unitId, uint32[8] upgradeGains, uint32[8] upgradeLosses) external { require(operator[msg.sender]); UnitUpgrades memory existingUpgrades = unitUpgrades[player][unitId]; Unit memory unit = unitList[unitId]; if (unit.baseProduction > 0) { // Change goo production gooProductionChange(player, unitId, existingUpgrades, unit.baseProduction, upgradeGains, upgradeLosses); } else { // Change army power armyPowerChange(player, existingUpgrades, unit, upgradeGains, upgradeLosses); } } function armyPowerChange(address player, UnitUpgrades existingUpgrades, Unit unit, uint32[8] upgradeGains, uint32[8] upgradeLosses) internal { int256 existingAttack = int256((unit.attack + existingUpgrades.attackIncrease) * (100 + existingUpgrades.attackMultiplier)); int256 existingDefense = int256((unit.defense + existingUpgrades.defenseIncrease) * (100 + existingUpgrades.defenseMultiplier)); int256 existingLooting = int256((unit.looting + existingUpgrades.lootingIncrease) * (100 + existingUpgrades.lootingMultiplier)); existingUpgrades.attackIncrease = uint32(int(existingUpgrades.attackIncrease) + (int32(upgradeGains[2]) - int32(upgradeLosses[2]))); existingUpgrades.attackMultiplier = uint32(int(existingUpgrades.attackMultiplier) + (int32(upgradeGains[3]) - int32(upgradeLosses[3]))); existingUpgrades.defenseIncrease = uint32(int(existingUpgrades.defenseIncrease) + (int32(upgradeGains[4]) - int32(upgradeLosses[4]))); existingUpgrades.defenseMultiplier = uint32(int(existingUpgrades.defenseMultiplier) + (int32(upgradeGains[5]) - int32(upgradeLosses[5]))); existingUpgrades.lootingIncrease = uint32(int(existingUpgrades.lootingIncrease) + (int32(upgradeGains[6]) - int32(upgradeLosses[6]))); existingUpgrades.lootingMultiplier = uint32(int(existingUpgrades.lootingMultiplier) + (int32(upgradeGains[7]) - int32(upgradeLosses[7]))); int256 attackChange = ((int256(unit.attack) + existingUpgrades.attackIncrease) * (100 + existingUpgrades.attackMultiplier)) - existingAttack; int256 defenseChange = ((int256(unit.defense) + existingUpgrades.defenseIncrease) * (100 + existingUpgrades.defenseMultiplier)) - existingDefense; int256 lootingChange = ((int256(unit.looting) + existingUpgrades.lootingIncrease) * (100 + existingUpgrades.lootingMultiplier)) - existingLooting; uint256 unitId = unit.unitId; int256 units = int256(unitsOwned[player][unitId].units); army.changePlayersArmyPowerTrio(player, units * attackChange, units * defenseChange, units * lootingChange); unitUpgrades[player][unitId] = existingUpgrades; } function gooProductionChange(address player, uint256 unitId, UnitUpgrades existingUpgrades, uint256 baseProduction, uint32[8] upgradeGains, uint32[8] upgradeLosses) internal { goo.updatePlayersGoo(player); int256 existingProd = int256((baseProduction + existingUpgrades.prodIncrease) * (100 + existingUpgrades.prodMultiplier)); existingUpgrades.prodIncrease = uint32(int(existingUpgrades.prodIncrease) + (int32(upgradeGains[0]) - int32(upgradeLosses[0]))); existingUpgrades.prodMultiplier = uint32(int(existingUpgrades.prodMultiplier) + (int32(upgradeGains[1]) - int32(upgradeLosses[1]))); int256 prodChange = ((int256(baseProduction) + existingUpgrades.prodIncrease) * (100 + existingUpgrades.prodMultiplier)) - existingProd; if (prodChange > 0) { goo.increasePlayersGooProduction(player, (unitsOwned[player][unitId].units * uint256(prodChange)) / 100); } else { goo.decreasePlayersGooProduction(player, (unitsOwned[player][unitId].units * uint256(-prodChange)) / 100); } unitUpgrades[player][unitId] = existingUpgrades; } function addUnit(uint256 id, uint224 baseGooCost, uint256 baseGooProduction, uint80 baseAttack, uint80 baseDefense, uint80 baseLooting) external { require(operator[msg.sender]); unitList[id] = Unit(id, baseGooCost, baseGooProduction, baseAttack, baseDefense, baseLooting); } function addUpgrade(uint256 id, uint224 gooCost, uint256 unit, uint256 column, uint256 prereq, uint256 unitMaxCapacityGain, uint32[8] upgradeGains) external { require(operator[msg.sender]); upgradeList[id] = Upgrade(id, gooCost, unit, column, prereq, unitMaxCapacityGain, upgradeGains[0], upgradeGains[1], upgradeGains[2], upgradeGains[3], upgradeGains[4], upgradeGains[5], upgradeGains[6], upgradeGains[7]); } function buyUpgrade(uint64 upgradeId) external { Upgrade memory upgrade = upgradeList[upgradeId]; uint256 unitId = upgrade.unitId; UpgradesOwned memory ownedUpgrades = upgradesOwned[msg.sender][unitId]; uint64 latestUpgradeOwnedForColumn; if (upgrade.column == 0) { latestUpgradeOwnedForColumn = ownedUpgrades.column0; ownedUpgrades.column0 = upgradeId; // Update upgradesOwned } else if (upgrade.column == 1) { latestUpgradeOwnedForColumn = ownedUpgrades.column1; ownedUpgrades.column1 = upgradeId; // Update upgradesOwned } else if (upgrade.column == 2) { latestUpgradeOwnedForColumn = ownedUpgrades.column2; ownedUpgrades.column2 = upgradeId; // Update upgradesOwned } upgradesOwned[msg.sender][unitId] = ownedUpgrades; require(unitId > 0); // Valid upgrade require(latestUpgradeOwnedForColumn < upgradeId); // Haven't already purchased require(latestUpgradeOwnedForColumn >= upgrade.prerequisiteUpgrade); // Own prequisite // Clan discount uint224 upgradeDiscount = clans.getPlayersClanUpgrade(msg.sender, 0); // class 0 = upgrade discount uint224 reducedUpgradeCost = upgrade.gooCost - ((upgrade.gooCost * upgradeDiscount) / 100); // Update players goo goo.updatePlayersGooFromPurchase(msg.sender, reducedUpgradeCost); army.depositSpentGoo(reducedUpgradeCost); // Transfer to goo bankroll // Update stats for upgrade if (upgrade.column == 2) { unitMaxCap[msg.sender][unitId] += upgrade.unitMaxCapacityGain; } else if (upgrade.column == 1) { increaseUpgrades(msg.sender, upgrade, unitId); } else if (upgrade.column == 0) { increaseUpgrades(msg.sender, upgrade, unitId); } } } contract GooToken { function transfer(address to, uint256 tokens) external returns (bool); function increasePlayersGooProduction(address player, uint256 increase) external; function decreasePlayersGooProduction(address player, uint256 decrease) external; function updatePlayersGooFromPurchase(address player, uint224 purchaseCost) external; function updatePlayersGoo(address player) external; function mintGoo(uint224 amount, address player) external; } contract Army { function depositSpentGoo(uint224 gooSpent) external; function increasePlayersArmyPowerTrio(address player, uint80 attackGain, uint80 defenseGain, uint80 lootingGain) public; function decreasePlayersArmyPowerTrio(address player, uint80 attackLoss, uint80 defenseLoss, uint80 lootingLoss) public; function changePlayersArmyPowerTrio(address player, int attackChange, int defenseChange, int lootingChange) public; } contract Clans { mapping(uint256 => uint256) public clanTotalArmyPower; function totalSupply() external view returns (uint256); function depositGoo(uint256 amount, uint256 clanId) external; function getPlayerFees(address player) external view returns (uint224 clansFee, uint224 leadersFee, address leader, uint224 referalsFee, address referer); function getPlayersClanUpgrade(address player, uint256 upgradeClass) external view returns (uint224 upgradeGain); function mintGoo(address player, uint256 amount) external; function increaseClanPower(address player, uint256 amount) external; function decreaseClanPower(address player, uint256 amount) external; } contract Factories { uint256 public constant MAX_SIZE = 40; function getFactories(address player) external returns (uint256[]); function addFactory(address player, uint8 position, uint256 unitId) external; } library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint224 a, uint224 b) internal pure returns (uint224) { if (a == 0) { return 0; } uint224 c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } library SafeMath224 { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint224 a, uint224 b) internal pure returns (uint224) { if (a == 0) { return 0; } uint224 c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint224 a, uint224 b) internal pure returns (uint224) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint224 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint224 a, uint224 b) internal pure returns (uint224) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint224 a, uint224 b) internal pure returns (uint224) { uint224 c = a + b; assert(c >= a); return c; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"upgradesOwned","outputs":[{"name":"column0","type":"uint64"},{"name":"column1","type":"uint64"},{"name":"column2","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"unitList","outputs":[{"name":"unitId","type":"uint256"},{"name":"gooCost","type":"uint224"},{"name":"baseProduction","type":"uint256"},{"name":"attack","type":"uint80"},{"name":"defense","type":"uint80"},{"name":"looting","type":"uint80"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"unitExp","outputs":[{"name":"experience","type":"uint224"},{"name":"level","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint80"},{"name":"unit","type":"uint256"},{"name":"player","type":"address"}],"name":"deleteUnitExternal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"upgradeList","outputs":[{"name":"upgradeId","type":"uint256"},{"name":"gooCost","type":"uint224"},{"name":"unitId","type":"uint256"},{"name":"column","type":"uint256"},{"name":"prerequisiteUpgrade","type":"uint256"},{"name":"unitMaxCapacityGain","type":"uint256"},{"name":"prodIncrease","type":"uint32"},{"name":"prodMultiplier","type":"uint32"},{"name":"attackIncrease","type":"uint32"},{"name":"attackMultiplier","type":"uint32"},{"name":"defenseIncrease","type":"uint32"},{"name":"defenseMultiplier","type":"uint32"},{"name":"lootingIncrease","type":"uint32"},{"name":"lootingMultiplier","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"armyContract","type":"address"}],"name":"setArmy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"unit","type":"uint256"},{"name":"amount","type":"uint80"},{"name":"player","type":"address"},{"name":"chosenPosition","type":"uint8"}],"name":"mintUnitExternal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"player","type":"address"},{"name":"unitId","type":"uint256"},{"name":"upgradeGains","type":"uint32[8]"},{"name":"upgradeLosses","type":"uint32[8]"}],"name":"swapUpgradesExternal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"unitId","type":"uint256"},{"name":"amount","type":"uint80"},{"name":"position","type":"uint8"}],"name":"buyUnit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"upgradeId","type":"uint64"}],"name":"buyUpgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"player","type":"address"},{"name":"upgradeGain","type":"uint256"},{"name":"unitId","type":"uint256"}],"name":"increaseUnitCapacity","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"gameContract","type":"address"},{"name":"isOperator","type":"bool"}],"name":"setOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"player","type":"address"},{"name":"unitId","type":"uint256"},{"name":"amount","type":"uint224"}],"name":"grantArmyExp","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"player","type":"address"},{"name":"unitId","type":"uint256"},{"name":"prodIncrease","type":"uint32"},{"name":"prodMultiplier","type":"uint32"},{"name":"attackIncrease","type":"uint32"},{"name":"attackMultiplier","type":"uint32"},{"name":"defenseIncrease","type":"uint32"},{"name":"defenseMultiplier","type":"uint32"},{"name":"lootingIncrease","type":"uint32"},{"name":"lootingMultiplier","type":"uint32"}],"name":"decreaseUpgradesExternal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"player","type":"address"},{"name":"unitId","type":"uint256"},{"name":"prodIncrease","type":"uint32"},{"name":"prodMultiplier","type":"uint32"},{"name":"attackIncrease","type":"uint32"},{"name":"attackMultiplier","type":"uint32"},{"name":"defenseIncrease","type":"uint32"},{"name":"defenseMultiplier","type":"uint32"},{"name":"lootingIncrease","type":"uint32"},{"name":"lootingMultiplier","type":"uint32"}],"name":"increaseUpgradesExternal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"unitsOwned","outputs":[{"name":"units","type":"uint80"},{"name":"factoryBuiltFlag","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"player","type":"address"},{"name":"upgradeGain","type":"uint256"},{"name":"unitId","type":"uint256"}],"name":"decreaseUnitCapacity","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"uint256"},{"name":"baseGooCost","type":"uint224"},{"name":"baseGooProduction","type":"uint256"},{"name":"baseAttack","type":"uint80"},{"name":"baseDefense","type":"uint80"},{"name":"baseLooting","type":"uint80"}],"name":"addUnit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"player","type":"address"},{"name":"unitId","type":"uint256"}],"name":"getUnitsCurrentProduction","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"uint256"},{"name":"gooCost","type":"uint224"},{"name":"unit","type":"uint256"},{"name":"column","type":"uint256"},{"name":"prereq","type":"uint256"},{"name":"unitMaxCapacityGain","type":"uint256"},{"name":"upgradeGains","type":"uint32[8]"}],"name":"addUpgrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"unitId","type":"uint256"},{"name":"amount","type":"uint80"}],"name":"sellUnit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"clansContract","type":"address"}],"name":"setClans","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]
Contract Creation Code
608060405260008054600160a060020a031990811690915560018054909116905534801561002c57600080fd5b50600a8054600160a060020a031916331790556144758061004e6000396000f30060806040526004361061010e5763ffffffff60e060020a600035041663069d04f781146101135780630a8e987c146101635780630cdddceb146101c157806311d5aa931461020d578063126ef2801461023f57806312e68ddf146102e057806343f4e4dc14610301578063454764ac146103375780634705c18114610360578063511de2801461038a5780635352df60146103ac578063558a7297146103d357806360bada1c146103f9578063a442ed601461043d578063a9ed5b4314610496578063c1431eda146104ef578063c26c006d14610538578063c95186751461055f578063d1bf3d3f1461059e578063e00cf084146105d4578063e6fe72bb14610606578063f40b26bd1461062a575b600080fd5b34801561011f57600080fd5b50610137600160a060020a036004351660243561064b565b6040805167ffffffffffffffff9485168152928416602084015292168183015290519081900360600190f35b34801561016f57600080fd5b5061017b60043561068d565b60408051968752600160e060020a039095166020870152858501939093526001605060020a039182166060860152811660808501521660a0830152519081900360c00190f35b3480156101cd57600080fd5b506101e5600160a060020a03600435166024356106e4565b60408051600160e060020a03909316835263ffffffff90911660208301528051918290030190f35b34801561021957600080fd5b5061023d6001605060020a0360043516602435600160a060020a0360443516610719565b005b34801561024b57600080fd5b50610257600435610747565b604080519e8f52600160e060020a03909d1660208f01528d8d019b909b5260608d019990995260808c019790975260a08b019590955263ffffffff93841660c08b015291831660e08a015282166101008901528116610120880152908116610140870152908116610160860152908116610180850152166101a083015251908190036101c00190f35b3480156102ec57600080fd5b5061023d600160a060020a03600435166107ea565b34801561030d57600080fd5b5061023d6004356001605060020a0360243516600160a060020a036044351660ff60643516610830565b34801561034357600080fd5b5061023d600160a060020a03600435166024356044610144610860565b34801561036c57600080fd5b5061023d6004356001605060020a036024351660ff60443516610a73565b34801561039657600080fd5b5061023d67ffffffffffffffff60043516610d9f565b3480156103b857600080fd5b5061023d600160a060020a036004351660243560443561125f565b3480156103df57600080fd5b5061023d600160a060020a036004351660243515156112ac565b34801561040557600080fd5b50610429600160a060020a0360043516602435600160e060020a03604435166112ee565b604080519115158252519081900360200190f35b34801561044957600080fd5b5061023d600160a060020a036004351660243563ffffffff60443581169060643581169060843581169060a43581169060c43581169060e435811690610104358116906101243516611a76565b3480156104a257600080fd5b5061023d600160a060020a036004351660243563ffffffff60443581169060643581169060843581169060a43581169060c43581169060e435811690610104358116906101243516611b54565b3480156104fb57600080fd5b50610513600160a060020a0360043516602435611c25565b604080516001605060020a03909316835260ff90911660208301528051918290030190f35b34801561054457600080fd5b5061023d600160a060020a0360043516602435604435611c5e565b34801561056b57600080fd5b5061023d600435600160e060020a03602435166044356001605060020a0360643581169060843581169060a43516611cac565b3480156105aa57600080fd5b506105c2600160a060020a0360043516602435611ddf565b60408051918252519081900360200190f35b3480156105e057600080fd5b5061023d600435600160e060020a036024351660443560643560843560a43560c4611ebc565b34801561061257600080fd5b5061023d6004356001605060020a036024351661214a565b34801561063657600080fd5b5061023d600160a060020a0360043516612300565b600660209081526000928352604080842090915290825290205467ffffffffffffffff80821691680100000000000000008104821691608060020a9091041683565b60076020526000908152604090208054600182015460028301546003909301549192600160e060020a03909116916001605060020a03808216916a0100000000000000000000810482169160a060020a9091041686565b6003602090815260009283526040808420909152908252902054600160e060020a0381169060e060020a900463ffffffff1682565b3360009081526009602052604090205460ff16151561073757600080fd5b610742838383612346565b505050565b60086020526000908152604090208054600182015460028301546003840154600485015460058601546006909601549495600160e060020a03909416949293919290919063ffffffff8082169164010000000081048216916801000000000000000082048116916c010000000000000000000000008104821691608060020a820481169160a060020a810482169160c060020a820481169160e060020a9004168e565b600a54600160a060020a0316331461080157600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b3360009081526009602052604090205460ff16151561084e57600080fd5b61085a84848484612524565b50505050565b610868614305565b610870614349565b3360009081526009602052604090205460ff16151561088e57600080fd5b5050600160a060020a03841660009081526005602090815260408083208684528252808320815161010081018352905463ffffffff808216835264010000000082048116838601526801000000000000000082048116838501526c0100000000000000000000000082048116606080850191909152608060020a8304821660808086019190915260a060020a808504841660a08088019190915260c060020a8604851660c08089019190915260e060020a90960490941660e08701528b89526007885286892087519586018852805486526001810154600160e060020a03169886019890985260028801549685018790526003909701546001605060020a03808216938601939093526a010000000000000000000081048316918501919091529590950490941693810193909352921015610a1c57610a17868684846040015188600880602002604051908101604052809291908260086020028082843750506040805161010081810190925293508c925060089150839083908082843750612aae9350505050565b610a6b565b610a6b86838387600880602002604051908101604052809291908260086020028082843750506040805161010081810190925293508b925060089150839083908082843750612e7f9350505050565b505050505050565b6000838152600760205260408120600101548190819081908190610aa990600160e060020a03166001605060020a038916613333565b94506000600160e060020a03861611610ac157600080fd5b3360009081526002602090815260408083208b84529091529020546001605060020a039081168801945060639085161115610b28573360009081526004602090815260408083208b84529091529020546063016001605060020a03851610610b2857600080fd5b60018054604080517fa8be8329000000000000000000000000000000000000000000000000000000008152336004820152602481019390935251600160a060020a039091169163a8be83299160448083019260209291908290030181600087803b158015610b9557600080fd5b505af1158015610ba9573d6000803e3d6000fd5b505050506040513d6020811015610bbf57600080fd5b505192506064600160e060020a038685021604850391506004600160e060020a036003870216604080517fbb002ba8000000000000000000000000000000000000000000000000000000008152336004820152600160e060020a0386166024820152905192909104925060008051602061442a8339815191529163bb002ba89160448082019260009290919082900301818387803b158015610c6057600080fd5b505af1158015610c74573d6000803e3d6000fd5b5050604080517f4f03f17c000000000000000000000000000000000000000000000000000000008152600160e060020a0385166004820152306024820152905160008051602061442a8339815191529350634f03f17c9250604480830192600092919082900301818387803b158015610cec57600080fd5b505af1158015610d00573d6000803e3d6000fd5b505060008054604080517f1149ef5a000000000000000000000000000000000000000000000000000000008152600160e060020a038789031660048201529051600160a060020a039092169450631149ef5a9350602480820193929182900301818387803b158015610d7157600080fd5b505af1158015610d85573d6000803e3d6000fd5b50505050610d9588883389612524565b5050505050505050565b610da761437e565b6000610db16143f2565b50505067ffffffffffffffff808216600090815260086020908152604080832081516101c081018352815481526001820154600160e060020a03168185015260028201548184018190526003830154606080840191825260048501546080850152600585015460a085015260069485015463ffffffff80821660c08701526401000000008204811660e08701526801000000000000000080830482166101008801526c0100000000000000000000000083048216610120880152608060020a808404831661014089015260a060020a8404831661016089015260c060020a8404831661018089015260e060020a9093049091166101a0870152338a52958852868920848a5288528689208751928301885254808b1683529586048a169782019790975295909304909616928401929092525190939290819081901515610f0757835167ffffffffffffffff881685529250610f53565b856060015160011415610f2f5760208401805167ffffffffffffffff89169091529250610f53565b856060015160021415610f535760408401805167ffffffffffffffff891690915292505b336000908152600660209081526040808320888452825280832087518154938901519289015167ffffffffffffffff908116608060020a0277ffffffffffffffff000000000000000000000000000000001994821668010000000000000000026fffffffffffffffff0000000000000000199290931667ffffffffffffffff19909616959095171617919091169190911790558511610ff157600080fd5b67ffffffffffffffff8088169084161061100a57600080fd5b608086015167ffffffffffffffff8416101561102557600080fd5b600154604080517fa8be83290000000000000000000000000000000000000000000000000000000081523360048201526000602482018190529151600160a060020a039093169263a8be832992604480840193602093929083900390910190829087803b15801561109557600080fd5b505af11580156110a9573d6000803e3d6000fd5b505050506040513d60208110156110bf57600080fd5b50516020870151604080517fbb002ba80000000000000000000000000000000000000000000000000000000081523360048201526064600160e060020a038486028116919091049093039283166024820152905192945090925060008051602061442a8339815191529163bb002ba89160448082019260009290919082900301818387803b15801561115057600080fd5b505af1158015611164573d6000803e3d6000fd5b505060008054604080517f1149ef5a000000000000000000000000000000000000000000000000000000008152600160e060020a03871660048201529051600160a060020a039092169450631149ef5a9350602480820193929182900301818387803b1580156111d357600080fd5b505af11580156111e7573d6000803e3d6000fd5b505050508560600151600214156112235760a0860151336000908152600460209081526040808320898452909152902080549091019055611256565b8560600151600114156112405761123b338787613395565b611256565b6060860151151561125657611256338787613395565b50505050505050565b3360009081526009602052604090205460ff16151561127d57600080fd5b600160a060020a0390921660009081526004602090815260408083209483529390529190912080549091019055565b600a54600160a060020a031633146112c357600080fd5b600160a060020a03919091166000908152600960205260409020805460ff1916911515919091179055565b60006112f8614412565b6000611302614305565b600061130c614349565b336000908152600960205260408120548190819060ff16151561132e57600080fd5b600160a060020a038c1660009081526003602090815260408083208e8452825291829020825180840190935254600160e060020a0380821680855260e060020a90920463ffffffff908116938501849052939b5060019092016050029092169850908b01168711611a0d57868a896000015101038860000190600160e060020a03169081600160e060020a03168152505087602001805180919060010163ffffffff1663ffffffff168152505087600360008e600160a060020a0316600160a060020a0316815260200190815260200160002060008d815260200190815260200160002060008201518160000160006101000a815481600160e060020a030219169083600160e060020a03160217905550602082015181600001601c6101000a81548163ffffffff021916908363ffffffff160217905550905050600560008d600160a060020a0316600160a060020a0316815260200190815260200160002060008c815260200190815260200160002061010060405190810160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160089054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160008201600c9054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160109054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160189054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160008201601c9054906101000a900463ffffffff1663ffffffff1663ffffffff168152505095506005866060018181510191509063ffffffff16908163ffffffff168152505060058660a0018181510191509063ffffffff16908163ffffffff168152505060058660e0018181510191509063ffffffff16908163ffffffff168152505085600560008e600160a060020a0316600160a060020a0316815260200190815260200160002060008d815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001600c6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160000160106101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160000160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600001601c6101000a81548163ffffffff021916908363ffffffff160217905550905050600260008d600160a060020a0316600160a060020a0316815260200190815260200160002060008c815260200190815260200160002060000160009054906101000a90046001605060020a03166005029450600760008c815260200190815260200160002060c06040519081016040529081600082015481526020016001820160009054906101000a9004600160e060020a0316600160e060020a0316600160e060020a03168152602001600282015481526020016003820160009054906101000a90046001605060020a03166001605060020a03166001605060020a0316815260200160038201600a9054906101000a90046001605060020a03166001605060020a03166001605060020a031681526020016003820160149054906101000a90046001605060020a03166001605060020a03166001605060020a0316815250509350856040015163ffffffff1684606001510185029250856080015163ffffffff16846080015101850291508560c0015163ffffffff168460a0015101850290506000809054906101000a9004600160a060020a0316600160a060020a03166336bce9988d8585856040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a03168152602001846001605060020a03166001605060020a03168152602001836001605060020a03166001605060020a03168152602001826001605060020a03166001605060020a03168152602001945050505050600060405180830381600087803b1580156119ec57600080fd5b505af1158015611a00573d6000803e3d6000fd5b5050505060019850611a67565b600160a060020a038c1660009081526003602090815260408083208e845290915281208054600160e060020a038082168e01167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1990911617905598505b50505050505050509392505050565b611a7e61437e565b3360009081526009602052604090205460ff161515611a9c57600080fd5b6101c060405190810160405280600081526020016000600160e060020a03168152602001600081526020016000815260200160008152602001600081526020018a63ffffffff1681526020018963ffffffff1681526020018863ffffffff1681526020018763ffffffff1681526020018663ffffffff1681526020018563ffffffff1681526020018463ffffffff1681526020018363ffffffff168152509050611b478b828c613a98565b5050505050505050505050565b611b5c61437e565b3360009081526009602052604090205460ff161515611b7a57600080fd5b6101c060405190810160405280600081526020016000600160e060020a03168152602001600081526020016000815260200160008152602001600081526020018a63ffffffff1681526020018963ffffffff1681526020018863ffffffff1681526020018763ffffffff1681526020018663ffffffff1681526020018563ffffffff1681526020018463ffffffff1681526020018363ffffffff168152509050611b478b828c613395565b60026020908152600092835260408084209091529082529020546001605060020a038116906a0100000000000000000000900460ff1682565b3360009081526009602052604090205460ff161515611c7c57600080fd5b600160a060020a039092166000908152600460209081526040808320948352939052919091208054919091039055565b3360009081526009602052604090205460ff161515611cca57600080fd5b6040805160c081018252878152600160e060020a0396871660208083019182528284019788526001605060020a03968716606084019081529587166080840190815294871660a0840190815260009a8b526007909152929098209051815596516001880180547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191691909716179095559251600286015551600390940180549251935169ffffffffffffffffffff199093169482169490941773ffffffffffffffffffff0000000000000000000019166a010000000000000000000093821693909302929092177fffff00000000000000000000ffffffffffffffffffffffffffffffffffffffff1660a060020a9190921602179055565b6000611de9614305565b5050600160a060020a03821660009081526005602090815260408083208484528252808320815161010081018352905463ffffffff808216808452640100000000830482168487018190526801000000000000000084048316858701526c01000000000000000000000000840483166060860152608060020a84048316608086015260a060020a8404831660a086015260c060020a8404831660c086015260e060020a909304821660e08501528787526007909552929094206002015490920160649093011691909102905b5092915050565b3360009081526009602052604090205460ff161515611eda57600080fd5b604080516101c081018252888152600160e060020a0388166020808301919091528183018890526060808301889052608080840188905260a080850188905263ffffffff8735811660c08088019190915294880135811660e0870152958701358616610100860152918601358516610120850152850135841661014084015284013583166101608301528301359091166101808201526101a0810182600763ffffffff6020918202929092013582169092526000998a52600882526040998a90208351815591830151600183018054600160e060020a039283167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19909116179055998301516002830155606083015160038301556080830151600483015560a0830151600583015560c08301516006909201805460e08501516101008601516101208701516101408801516101608901516101808a01516101a0909a0151881660e060020a0299881660c060020a027fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff91891660a060020a0277ffffffff000000000000000000000000000000000000000019938a16608060020a0273ffffffff0000000000000000000000000000000019958b166c01000000000000000000000000026fffffffff00000000000000000000000019978c1668010000000000000000026bffffffff000000000000000019998d166401000000000267ffffffff00000000199e909d1663ffffffff19909b169a909a179c909c169a909a179690961696909617939093169790971716949094179490941693909317919091169190911790981617909655505050505050565b3360009081526002602090815260408083208584529091528120546001605060020a0380841691161080159061218957506000826001605060020a0316115b151561219457600080fd5b50600082815260076020526040812060010154600160e060020a03169081116121bc57600080fd5b604080517fb5967e16000000000000000000000000000000000000000000000000000000008152336004820152905160008051602061442a8339815191529163b5967e1691602480830192600092919082900301818387803b15801561222157600080fd5b505af1158015612235573d6000803e3d6000fd5b50505050612244828433612346565b60008051602061442a83398151915263a9059cbb336004600160e060020a0360036001605060020a03881687020216046040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182600160e060020a0316815260200192505050602060405180830381600087803b1580156122cf57600080fd5b505af11580156122e3573d6000803e3d6000fd5b505050506040513d60208110156122f957600080fd5b5050505050565b600a54600160a060020a0316331461231757600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600080600080612356858761419b565b9350935093506000846001605060020a0316118061237d57506000836001605060020a0316115b8061239157506000826001605060020a0316115b1561243c5760008054604080517ffa5ccd0b000000000000000000000000000000000000000000000000000000008152600160a060020a0389811660048301526001605060020a03898d0281166024840152888d0281166044840152878d021660648301529151919092169263fa5ccd0b926084808201939182900301818387803b15801561241f57600080fd5b505af1158015612433573d6000803e3d6000fd5b505050506124d7565b866001605060020a03166124508688611ddf565b02905060008051602061442a83398151915263add1dcfa86606484046040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050600060405180830381600087803b1580156124be57600080fd5b505af11580156124d2573d6000803e3d6000fd5b505050505b50505050600160a060020a0316600090815260026020908152604080832093835292905220805469ffffffffffffffffffff1981166001605060020a039182169390930316919091179055565b600160a060020a038216600090815260026020908152604080832087845290915281208054909160609181908190819081906a0100000000000000000000900460ff1615156128ba57604080517febff831f000000000000000000000000000000000000000000000000000000008152600160a060020a038b166004820152905173c81068cd335889736fc485592e4d73a82403d44b9163ebff831f91602480830192600092919082900301818387803b1580156125e157600080fd5b505af11580156125f5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561261e57600080fd5b81019080805164010000000081111561263657600080fd5b8201602081018481111561264957600080fd5b815185602082028301116401000000008211171561266657600080fd5b505092919050505095508551945073c81068cd335889736fc485592e4d73a82403d44b600160a060020a0316638d67799e6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156126c657600080fd5b505af11580156126da573d6000803e3d6000fd5b505050506040513d60208110156126f057600080fd5b505160ff891610158061272a5750848860ff1610801561272a57506000868960ff1681518110151561271e57fe5b90602001906020020151115b1561277057600097505b848860ff1610801561276057506000868960ff1681518110151561275457fe5b90602001906020020151115b1561277057600190970196612734565b604080517faf209cf8000000000000000000000000000000000000000000000000000000008152600160a060020a038b16600482015260ff8a166024820152604481018d9052905173c81068cd335889736fc485592e4d73a82403d44b9163af209cf891606480830192600092919082900301818387803b1580156127f457600080fd5b505af1158015612808573d6000803e3d6000fd5b5050505060408051908101604052808b6001605060020a03168152602001600160ff16815250600260008b600160a060020a0316600160a060020a0316815260200190815260200160002060008d815260200190815260200160002060008201518160000160006101000a8154816001605060020a0302191690836001605060020a03160217905550602082015181600001600a6101000a81548160ff021916908360ff1602179055509050506128dd565b86546001605060020a038082168c011669ffffffffffffffffffff199091161787555b6128e7898c61419b565b9350935093506000846001605060020a0316118061290e57506000836001605060020a0316115b8061292257506000826001605060020a0316115b15612a07576000809054906101000a9004600160a060020a0316600160a060020a03166336bce9988a8c87028d87028e87026040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a03168152602001846001605060020a03166001605060020a03168152602001836001605060020a03166001605060020a03168152602001826001605060020a03166001605060020a03168152602001945050505050600060405180830381600087803b1580156129ea57600080fd5b505af11580156129fe573d6000803e3d6000fd5b50505050611b47565b896001605060020a0316612a1b8a8d611ddf565b02905060008051602061442a83398151915263a732f9ac8a606484046040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050600060405180830381600087803b158015612a8957600080fd5b505af1158015612a9d573d6000803e3d6000fd5b505050505050505050505050505050565b604080517fb5967e16000000000000000000000000000000000000000000000000000000008152600160a060020a03881660048201529051600091829160008051602061442a8339815191529163b5967e16916024808301928692919082900301818387803b158015612b2057600080fd5b505af1158015612b34573d6000803e3d6000fd5b505050506020868101805188518651885163ffffffff928316919003600390810b82018316808d5289870151968b015196909603900b828416018216938490528901606492830182160295509101169086010282900390506000811315612c4d57600160a060020a03881660008181526002602090815260408083208b84529091528082205481517fa732f9ac000000000000000000000000000000000000000000000000000000008152600481019490945260646001605060020a0390911685020460248401525160008051602061442a8339815191529263a732f9ac92604480830193919282900301818387803b158015612c3057600080fd5b505af1158015612c44573d6000803e3d6000fd5b50505050612d03565b600160a060020a03881660008181526002602090815260408083208b84529091528082205481517fadd1dcfa000000000000000000000000000000000000000000000000000000008152600481019490945260646001605060020a03909116858403020460248401525160008051602061442a8339815191529263add1dcfa92604480830193919282900301818387803b158015612cea57600080fd5b505af1158015612cfe573d6000803e3d6000fd5b505050505b85600560008a600160a060020a0316600160a060020a03168152602001908152602001600020600089815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001600c6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160000160106101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160000160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600001601c6101000a81548163ffffffff021916908363ffffffff1602179055509050505050505050505050565b6000806000806000806000808b6060015160640163ffffffff168c6040015163ffffffff168c6060015101026001605060020a031697508b60a0015160640163ffffffff168c6080015163ffffffff168c6080015101026001605060020a031696508b60e0015160640163ffffffff168c60c0015163ffffffff168c60a0015101026001605060020a03169550886002600881101515612f1b57fe5b60200201518a6002602002015160408e01805192909103600390810b63ffffffff938416019092169052899060200201518a6003602002015160608e0180519290910360030b63ffffffff92831601909116905288600460200201518a6004602002015160808e0180519290910360030b63ffffffff92831601909116905288600560200201518a6005602002015160a08e0180519290910360030b63ffffffff92831601909116905288600660200201518a6006602002015160c08e0180519290910360030b63ffffffff92831601909116905288600760200201518a600760200201510360030b8c60e0015163ffffffff16018c60e0019063ffffffff16908163ffffffff1681525050878c6060015160640163ffffffff168d6040015163ffffffff168d606001516001605060020a03160102039450868c60a0015160640163ffffffff168d6080015163ffffffff168d608001516001605060020a03160102039350858c60e0015160640163ffffffff168d60c0015163ffffffff168d60a001516001605060020a031601020392508a600001519150600260008e600160a060020a0316600160a060020a03168152602001908152602001600020600083815260200190815260200160002060000160009054906101000a90046001605060020a03166001605060020a031690506000809054906101000a9004600160a060020a0316600160a060020a03166308688ce08e8784028785028786026040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a03168152602001848152602001838152602001828152602001945050505050600060405180830381600087803b15801561319a57600080fd5b505af11580156131ae573d6000803e3d6000fd5b505050508b600560008f600160a060020a0316600160a060020a03168152602001908152602001600020600084815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001600c6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160000160106101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160000160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600001601c6101000a81548163ffffffff021916908363ffffffff16021790555090505050505050505050505050505050565b600080600160e060020a038416151561334f5760009150611eb5565b828402905082600160e060020a031684600160e060020a031682600160e060020a031681151561337b57fe5b04600160e060020a031614151561338e57fe5b9392505050565b600061339f614305565b6133a7614349565b505050600160a060020a0383166000818152600260208181526040808420868552825280842054948452600582528084208685528252808420815161010081018352905463ffffffff808216835264010000000082048116838601526801000000000000000082048116838501526c0100000000000000000000000082048116606080850191909152608060020a8304821660808086019190915260a060020a808504841660a08088019190915260c060020a8604851660c08089019190915260e060020a90960490941660e08701528b8a5260078852868a2087519586018852805486526001810154600160e060020a031698860198909852978701549584018690526003909601546001605060020a03818116928501929092526a010000000000000000000081048216968401969096529590940485169381019390935292909416939192909181908190819081101561366557856000015163ffffffff168560400151018960e0015163ffffffff1688026001605060020a0316029350856020015160640163ffffffff168960c0015163ffffffff168802026001605060020a03168401935060008051602061442a833981519152600160a060020a031663b5967e168b6040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050600060405180830381600087803b1580156135b957600080fd5b505af11580156135cd573d6000803e3d6000fd5b5050604080517fa732f9ac000000000000000000000000000000000000000000000000000000008152600160a060020a038e166004820152606488046024820152905160008051602061442a833981519152935063a732f9ac9250604480830192600092919082900301818387803b15801561364857600080fd5b505af115801561365c573d6000803e3d6000fd5b50505050613804565b856040015163ffffffff1685606001510189610120015163ffffffff168802029250856080015163ffffffff1685608001510189610160015163ffffffff1688020291508560c0015163ffffffff168560a0015101896101a0015163ffffffff168802029050856060015160640163ffffffff1689610100015163ffffffff16880202830192508560a0015160640163ffffffff1689610140015163ffffffff16880202820191508560e0015160640163ffffffff1689610180015163ffffffff16880202810190506000809054906101000a9004600160a060020a0316600160a060020a03166336bce9988b8585856040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a03168152602001846001605060020a03166001605060020a03168152602001836001605060020a03166001605060020a03168152602001826001605060020a03166001605060020a03168152602001945050505050600060405180830381600087803b1580156137eb57600080fd5b505af11580156137ff573d6000803e3d6000fd5b505050505b8860c00151866000018181510191509063ffffffff16908163ffffffff16815250508860e00151866020018181510191509063ffffffff16908163ffffffff1681525050886101000151866040018181510191509063ffffffff16908163ffffffff1681525050886101200151866060018181510191509063ffffffff16908163ffffffff1681525050886101400151866080018181510191509063ffffffff16908163ffffffff16815250508861016001518660a0018181510191509063ffffffff16908163ffffffff16815250508861018001518660c0018181510191509063ffffffff16908163ffffffff1681525050886101a001518660e0018181510191509063ffffffff16908163ffffffff168152505085600560008c600160a060020a0316600160a060020a0316815260200190815260200160002060008a815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001600c6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160000160106101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160000160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600001601c6101000a81548163ffffffff021916908363ffffffff16021790555090505050505050505050505050565b6000613aa2614305565b613aaa614349565b505050600160a060020a0383166000818152600260208181526040808420868552825280842054948452600582528084208685528252808420815161010081018352905463ffffffff808216835264010000000082048116838601526801000000000000000082048116838501526c0100000000000000000000000082048116606080850191909152608060020a8304821660808086019190915260a060020a808504841660a08088019190915260c060020a8604851660c08089019190915260e060020a90960490941660e08701528b8a5260078852868a2087519586018852805486526001810154600160e060020a031698860198909852978701549584018690526003909601546001605060020a03818116928501929092526a0100000000000000000000810482169684019690965295909404851693810193909352929094169391929091819081908190811015613d6857856000015163ffffffff168560400151018960e0015163ffffffff1688026001605060020a0316029350856020015160640163ffffffff168960c0015163ffffffff168802026001605060020a03168401935060008051602061442a833981519152600160a060020a031663b5967e168b6040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050600060405180830381600087803b158015613cbc57600080fd5b505af1158015613cd0573d6000803e3d6000fd5b5050604080517fadd1dcfa000000000000000000000000000000000000000000000000000000008152600160a060020a038e166004820152606488046024820152905160008051602061442a833981519152935063add1dcfa9250604480830192600092919082900301818387803b158015613d4b57600080fd5b505af1158015613d5f573d6000803e3d6000fd5b50505050613f07565b856040015163ffffffff1685606001510189610120015163ffffffff168802029250856080015163ffffffff1685608001510189610160015163ffffffff1688020291508560c0015163ffffffff168560a0015101896101a0015163ffffffff168802029050856060015160640163ffffffff1689610100015163ffffffff16880202830192508560a0015160640163ffffffff1689610140015163ffffffff16880202820191508560e0015160640163ffffffff1689610180015163ffffffff16880202810190506000809054906101000a9004600160a060020a0316600160a060020a031663fa5ccd0b8b8585856040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a03168152602001846001605060020a03166001605060020a03168152602001836001605060020a03166001605060020a03168152602001826001605060020a03166001605060020a03168152602001945050505050600060405180830381600087803b158015613eee57600080fd5b505af1158015613f02573d6000803e3d6000fd5b505050505b8860c00151866000018181510391509063ffffffff16908163ffffffff16815250508860e00151866020018181510391509063ffffffff16908163ffffffff1681525050886101000151866040018181510391509063ffffffff16908163ffffffff1681525050886101200151866060018181510391509063ffffffff16908163ffffffff1681525050886101400151866080018181510391509063ffffffff16908163ffffffff16815250508861016001518660a0018181510391509063ffffffff16908163ffffffff16815250508861018001518660c0018181510391509063ffffffff16908163ffffffff1681525050886101a001518660e0018181510391509063ffffffff16908163ffffffff168152505085600560008c600160a060020a0316600160a060020a0316815260200190815260200160002060008a815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001600c6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160000160106101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160000160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600001601c6101000a81548163ffffffff021916908363ffffffff16021790555090505050505050505050505050565b60008060006141a8614349565b6141b0614305565b5050506000838152600760209081526040808320815160c08181018452825482526001830154600160e060020a0316828601526002830154828501526003909201546001605060020a0380821660608085019182526a010000000000000000000084048316608080870191825260a060020a9586900490941660a0968701908152600160a060020a03909e168a5260058952878a209c8a529b885297869020865161010081018852905463ffffffff8082168352640100000000820481169983019990995268010000000000000000810489169782018890526c01000000000000000000000000810489169982018a9052608060020a81048916938201849052938404881694810185905260c060020a8404881695810186905260e060020a909304871660e09093018390525199519a519990940160649687018616029a999093019085018416029796019201160292915050565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b604080516101c081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081019190915290565b604080516060810182526000808252602082018190529181019190915290565b6040805180820190915260008082526020820152905600000000000000000000000000df0960778c6e6597f197ed9a25f12f5d971da86ca165627a7a723058203bd0a86cbd4ae0e47ee49e040608015de08b9b9713307e3094cf6c2945d071590029
Deployed Bytecode
0x60806040526004361061010e5763ffffffff60e060020a600035041663069d04f781146101135780630a8e987c146101635780630cdddceb146101c157806311d5aa931461020d578063126ef2801461023f57806312e68ddf146102e057806343f4e4dc14610301578063454764ac146103375780634705c18114610360578063511de2801461038a5780635352df60146103ac578063558a7297146103d357806360bada1c146103f9578063a442ed601461043d578063a9ed5b4314610496578063c1431eda146104ef578063c26c006d14610538578063c95186751461055f578063d1bf3d3f1461059e578063e00cf084146105d4578063e6fe72bb14610606578063f40b26bd1461062a575b600080fd5b34801561011f57600080fd5b50610137600160a060020a036004351660243561064b565b6040805167ffffffffffffffff9485168152928416602084015292168183015290519081900360600190f35b34801561016f57600080fd5b5061017b60043561068d565b60408051968752600160e060020a039095166020870152858501939093526001605060020a039182166060860152811660808501521660a0830152519081900360c00190f35b3480156101cd57600080fd5b506101e5600160a060020a03600435166024356106e4565b60408051600160e060020a03909316835263ffffffff90911660208301528051918290030190f35b34801561021957600080fd5b5061023d6001605060020a0360043516602435600160a060020a0360443516610719565b005b34801561024b57600080fd5b50610257600435610747565b604080519e8f52600160e060020a03909d1660208f01528d8d019b909b5260608d019990995260808c019790975260a08b019590955263ffffffff93841660c08b015291831660e08a015282166101008901528116610120880152908116610140870152908116610160860152908116610180850152166101a083015251908190036101c00190f35b3480156102ec57600080fd5b5061023d600160a060020a03600435166107ea565b34801561030d57600080fd5b5061023d6004356001605060020a0360243516600160a060020a036044351660ff60643516610830565b34801561034357600080fd5b5061023d600160a060020a03600435166024356044610144610860565b34801561036c57600080fd5b5061023d6004356001605060020a036024351660ff60443516610a73565b34801561039657600080fd5b5061023d67ffffffffffffffff60043516610d9f565b3480156103b857600080fd5b5061023d600160a060020a036004351660243560443561125f565b3480156103df57600080fd5b5061023d600160a060020a036004351660243515156112ac565b34801561040557600080fd5b50610429600160a060020a0360043516602435600160e060020a03604435166112ee565b604080519115158252519081900360200190f35b34801561044957600080fd5b5061023d600160a060020a036004351660243563ffffffff60443581169060643581169060843581169060a43581169060c43581169060e435811690610104358116906101243516611a76565b3480156104a257600080fd5b5061023d600160a060020a036004351660243563ffffffff60443581169060643581169060843581169060a43581169060c43581169060e435811690610104358116906101243516611b54565b3480156104fb57600080fd5b50610513600160a060020a0360043516602435611c25565b604080516001605060020a03909316835260ff90911660208301528051918290030190f35b34801561054457600080fd5b5061023d600160a060020a0360043516602435604435611c5e565b34801561056b57600080fd5b5061023d600435600160e060020a03602435166044356001605060020a0360643581169060843581169060a43516611cac565b3480156105aa57600080fd5b506105c2600160a060020a0360043516602435611ddf565b60408051918252519081900360200190f35b3480156105e057600080fd5b5061023d600435600160e060020a036024351660443560643560843560a43560c4611ebc565b34801561061257600080fd5b5061023d6004356001605060020a036024351661214a565b34801561063657600080fd5b5061023d600160a060020a0360043516612300565b600660209081526000928352604080842090915290825290205467ffffffffffffffff80821691680100000000000000008104821691608060020a9091041683565b60076020526000908152604090208054600182015460028301546003909301549192600160e060020a03909116916001605060020a03808216916a0100000000000000000000810482169160a060020a9091041686565b6003602090815260009283526040808420909152908252902054600160e060020a0381169060e060020a900463ffffffff1682565b3360009081526009602052604090205460ff16151561073757600080fd5b610742838383612346565b505050565b60086020526000908152604090208054600182015460028301546003840154600485015460058601546006909601549495600160e060020a03909416949293919290919063ffffffff8082169164010000000081048216916801000000000000000082048116916c010000000000000000000000008104821691608060020a820481169160a060020a810482169160c060020a820481169160e060020a9004168e565b600a54600160a060020a0316331461080157600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b3360009081526009602052604090205460ff16151561084e57600080fd5b61085a84848484612524565b50505050565b610868614305565b610870614349565b3360009081526009602052604090205460ff16151561088e57600080fd5b5050600160a060020a03841660009081526005602090815260408083208684528252808320815161010081018352905463ffffffff808216835264010000000082048116838601526801000000000000000082048116838501526c0100000000000000000000000082048116606080850191909152608060020a8304821660808086019190915260a060020a808504841660a08088019190915260c060020a8604851660c08089019190915260e060020a90960490941660e08701528b89526007885286892087519586018852805486526001810154600160e060020a03169886019890985260028801549685018790526003909701546001605060020a03808216938601939093526a010000000000000000000081048316918501919091529590950490941693810193909352921015610a1c57610a17868684846040015188600880602002604051908101604052809291908260086020028082843750506040805161010081810190925293508c925060089150839083908082843750612aae9350505050565b610a6b565b610a6b86838387600880602002604051908101604052809291908260086020028082843750506040805161010081810190925293508b925060089150839083908082843750612e7f9350505050565b505050505050565b6000838152600760205260408120600101548190819081908190610aa990600160e060020a03166001605060020a038916613333565b94506000600160e060020a03861611610ac157600080fd5b3360009081526002602090815260408083208b84529091529020546001605060020a039081168801945060639085161115610b28573360009081526004602090815260408083208b84529091529020546063016001605060020a03851610610b2857600080fd5b60018054604080517fa8be8329000000000000000000000000000000000000000000000000000000008152336004820152602481019390935251600160a060020a039091169163a8be83299160448083019260209291908290030181600087803b158015610b9557600080fd5b505af1158015610ba9573d6000803e3d6000fd5b505050506040513d6020811015610bbf57600080fd5b505192506064600160e060020a038685021604850391506004600160e060020a036003870216604080517fbb002ba8000000000000000000000000000000000000000000000000000000008152336004820152600160e060020a0386166024820152905192909104925060008051602061442a8339815191529163bb002ba89160448082019260009290919082900301818387803b158015610c6057600080fd5b505af1158015610c74573d6000803e3d6000fd5b5050604080517f4f03f17c000000000000000000000000000000000000000000000000000000008152600160e060020a0385166004820152306024820152905160008051602061442a8339815191529350634f03f17c9250604480830192600092919082900301818387803b158015610cec57600080fd5b505af1158015610d00573d6000803e3d6000fd5b505060008054604080517f1149ef5a000000000000000000000000000000000000000000000000000000008152600160e060020a038789031660048201529051600160a060020a039092169450631149ef5a9350602480820193929182900301818387803b158015610d7157600080fd5b505af1158015610d85573d6000803e3d6000fd5b50505050610d9588883389612524565b5050505050505050565b610da761437e565b6000610db16143f2565b50505067ffffffffffffffff808216600090815260086020908152604080832081516101c081018352815481526001820154600160e060020a03168185015260028201548184018190526003830154606080840191825260048501546080850152600585015460a085015260069485015463ffffffff80821660c08701526401000000008204811660e08701526801000000000000000080830482166101008801526c0100000000000000000000000083048216610120880152608060020a808404831661014089015260a060020a8404831661016089015260c060020a8404831661018089015260e060020a9093049091166101a0870152338a52958852868920848a5288528689208751928301885254808b1683529586048a169782019790975295909304909616928401929092525190939290819081901515610f0757835167ffffffffffffffff881685529250610f53565b856060015160011415610f2f5760208401805167ffffffffffffffff89169091529250610f53565b856060015160021415610f535760408401805167ffffffffffffffff891690915292505b336000908152600660209081526040808320888452825280832087518154938901519289015167ffffffffffffffff908116608060020a0277ffffffffffffffff000000000000000000000000000000001994821668010000000000000000026fffffffffffffffff0000000000000000199290931667ffffffffffffffff19909616959095171617919091169190911790558511610ff157600080fd5b67ffffffffffffffff8088169084161061100a57600080fd5b608086015167ffffffffffffffff8416101561102557600080fd5b600154604080517fa8be83290000000000000000000000000000000000000000000000000000000081523360048201526000602482018190529151600160a060020a039093169263a8be832992604480840193602093929083900390910190829087803b15801561109557600080fd5b505af11580156110a9573d6000803e3d6000fd5b505050506040513d60208110156110bf57600080fd5b50516020870151604080517fbb002ba80000000000000000000000000000000000000000000000000000000081523360048201526064600160e060020a038486028116919091049093039283166024820152905192945090925060008051602061442a8339815191529163bb002ba89160448082019260009290919082900301818387803b15801561115057600080fd5b505af1158015611164573d6000803e3d6000fd5b505060008054604080517f1149ef5a000000000000000000000000000000000000000000000000000000008152600160e060020a03871660048201529051600160a060020a039092169450631149ef5a9350602480820193929182900301818387803b1580156111d357600080fd5b505af11580156111e7573d6000803e3d6000fd5b505050508560600151600214156112235760a0860151336000908152600460209081526040808320898452909152902080549091019055611256565b8560600151600114156112405761123b338787613395565b611256565b6060860151151561125657611256338787613395565b50505050505050565b3360009081526009602052604090205460ff16151561127d57600080fd5b600160a060020a0390921660009081526004602090815260408083209483529390529190912080549091019055565b600a54600160a060020a031633146112c357600080fd5b600160a060020a03919091166000908152600960205260409020805460ff1916911515919091179055565b60006112f8614412565b6000611302614305565b600061130c614349565b336000908152600960205260408120548190819060ff16151561132e57600080fd5b600160a060020a038c1660009081526003602090815260408083208e8452825291829020825180840190935254600160e060020a0380821680855260e060020a90920463ffffffff908116938501849052939b5060019092016050029092169850908b01168711611a0d57868a896000015101038860000190600160e060020a03169081600160e060020a03168152505087602001805180919060010163ffffffff1663ffffffff168152505087600360008e600160a060020a0316600160a060020a0316815260200190815260200160002060008d815260200190815260200160002060008201518160000160006101000a815481600160e060020a030219169083600160e060020a03160217905550602082015181600001601c6101000a81548163ffffffff021916908363ffffffff160217905550905050600560008d600160a060020a0316600160a060020a0316815260200190815260200160002060008c815260200190815260200160002061010060405190810160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160089054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160008201600c9054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160109054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160189054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160008201601c9054906101000a900463ffffffff1663ffffffff1663ffffffff168152505095506005866060018181510191509063ffffffff16908163ffffffff168152505060058660a0018181510191509063ffffffff16908163ffffffff168152505060058660e0018181510191509063ffffffff16908163ffffffff168152505085600560008e600160a060020a0316600160a060020a0316815260200190815260200160002060008d815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001600c6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160000160106101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160000160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600001601c6101000a81548163ffffffff021916908363ffffffff160217905550905050600260008d600160a060020a0316600160a060020a0316815260200190815260200160002060008c815260200190815260200160002060000160009054906101000a90046001605060020a03166005029450600760008c815260200190815260200160002060c06040519081016040529081600082015481526020016001820160009054906101000a9004600160e060020a0316600160e060020a0316600160e060020a03168152602001600282015481526020016003820160009054906101000a90046001605060020a03166001605060020a03166001605060020a0316815260200160038201600a9054906101000a90046001605060020a03166001605060020a03166001605060020a031681526020016003820160149054906101000a90046001605060020a03166001605060020a03166001605060020a0316815250509350856040015163ffffffff1684606001510185029250856080015163ffffffff16846080015101850291508560c0015163ffffffff168460a0015101850290506000809054906101000a9004600160a060020a0316600160a060020a03166336bce9988d8585856040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a03168152602001846001605060020a03166001605060020a03168152602001836001605060020a03166001605060020a03168152602001826001605060020a03166001605060020a03168152602001945050505050600060405180830381600087803b1580156119ec57600080fd5b505af1158015611a00573d6000803e3d6000fd5b5050505060019850611a67565b600160a060020a038c1660009081526003602090815260408083208e845290915281208054600160e060020a038082168e01167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1990911617905598505b50505050505050509392505050565b611a7e61437e565b3360009081526009602052604090205460ff161515611a9c57600080fd5b6101c060405190810160405280600081526020016000600160e060020a03168152602001600081526020016000815260200160008152602001600081526020018a63ffffffff1681526020018963ffffffff1681526020018863ffffffff1681526020018763ffffffff1681526020018663ffffffff1681526020018563ffffffff1681526020018463ffffffff1681526020018363ffffffff168152509050611b478b828c613a98565b5050505050505050505050565b611b5c61437e565b3360009081526009602052604090205460ff161515611b7a57600080fd5b6101c060405190810160405280600081526020016000600160e060020a03168152602001600081526020016000815260200160008152602001600081526020018a63ffffffff1681526020018963ffffffff1681526020018863ffffffff1681526020018763ffffffff1681526020018663ffffffff1681526020018563ffffffff1681526020018463ffffffff1681526020018363ffffffff168152509050611b478b828c613395565b60026020908152600092835260408084209091529082529020546001605060020a038116906a0100000000000000000000900460ff1682565b3360009081526009602052604090205460ff161515611c7c57600080fd5b600160a060020a039092166000908152600460209081526040808320948352939052919091208054919091039055565b3360009081526009602052604090205460ff161515611cca57600080fd5b6040805160c081018252878152600160e060020a0396871660208083019182528284019788526001605060020a03968716606084019081529587166080840190815294871660a0840190815260009a8b526007909152929098209051815596516001880180547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191691909716179095559251600286015551600390940180549251935169ffffffffffffffffffff199093169482169490941773ffffffffffffffffffff0000000000000000000019166a010000000000000000000093821693909302929092177fffff00000000000000000000ffffffffffffffffffffffffffffffffffffffff1660a060020a9190921602179055565b6000611de9614305565b5050600160a060020a03821660009081526005602090815260408083208484528252808320815161010081018352905463ffffffff808216808452640100000000830482168487018190526801000000000000000084048316858701526c01000000000000000000000000840483166060860152608060020a84048316608086015260a060020a8404831660a086015260c060020a8404831660c086015260e060020a909304821660e08501528787526007909552929094206002015490920160649093011691909102905b5092915050565b3360009081526009602052604090205460ff161515611eda57600080fd5b604080516101c081018252888152600160e060020a0388166020808301919091528183018890526060808301889052608080840188905260a080850188905263ffffffff8735811660c08088019190915294880135811660e0870152958701358616610100860152918601358516610120850152850135841661014084015284013583166101608301528301359091166101808201526101a0810182600763ffffffff6020918202929092013582169092526000998a52600882526040998a90208351815591830151600183018054600160e060020a039283167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19909116179055998301516002830155606083015160038301556080830151600483015560a0830151600583015560c08301516006909201805460e08501516101008601516101208701516101408801516101608901516101808a01516101a0909a0151881660e060020a0299881660c060020a027fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff91891660a060020a0277ffffffff000000000000000000000000000000000000000019938a16608060020a0273ffffffff0000000000000000000000000000000019958b166c01000000000000000000000000026fffffffff00000000000000000000000019978c1668010000000000000000026bffffffff000000000000000019998d166401000000000267ffffffff00000000199e909d1663ffffffff19909b169a909a179c909c169a909a179690961696909617939093169790971716949094179490941693909317919091169190911790981617909655505050505050565b3360009081526002602090815260408083208584529091528120546001605060020a0380841691161080159061218957506000826001605060020a0316115b151561219457600080fd5b50600082815260076020526040812060010154600160e060020a03169081116121bc57600080fd5b604080517fb5967e16000000000000000000000000000000000000000000000000000000008152336004820152905160008051602061442a8339815191529163b5967e1691602480830192600092919082900301818387803b15801561222157600080fd5b505af1158015612235573d6000803e3d6000fd5b50505050612244828433612346565b60008051602061442a83398151915263a9059cbb336004600160e060020a0360036001605060020a03881687020216046040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182600160e060020a0316815260200192505050602060405180830381600087803b1580156122cf57600080fd5b505af11580156122e3573d6000803e3d6000fd5b505050506040513d60208110156122f957600080fd5b5050505050565b600a54600160a060020a0316331461231757600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600080600080612356858761419b565b9350935093506000846001605060020a0316118061237d57506000836001605060020a0316115b8061239157506000826001605060020a0316115b1561243c5760008054604080517ffa5ccd0b000000000000000000000000000000000000000000000000000000008152600160a060020a0389811660048301526001605060020a03898d0281166024840152888d0281166044840152878d021660648301529151919092169263fa5ccd0b926084808201939182900301818387803b15801561241f57600080fd5b505af1158015612433573d6000803e3d6000fd5b505050506124d7565b866001605060020a03166124508688611ddf565b02905060008051602061442a83398151915263add1dcfa86606484046040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050600060405180830381600087803b1580156124be57600080fd5b505af11580156124d2573d6000803e3d6000fd5b505050505b50505050600160a060020a0316600090815260026020908152604080832093835292905220805469ffffffffffffffffffff1981166001605060020a039182169390930316919091179055565b600160a060020a038216600090815260026020908152604080832087845290915281208054909160609181908190819081906a0100000000000000000000900460ff1615156128ba57604080517febff831f000000000000000000000000000000000000000000000000000000008152600160a060020a038b166004820152905173c81068cd335889736fc485592e4d73a82403d44b9163ebff831f91602480830192600092919082900301818387803b1580156125e157600080fd5b505af11580156125f5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561261e57600080fd5b81019080805164010000000081111561263657600080fd5b8201602081018481111561264957600080fd5b815185602082028301116401000000008211171561266657600080fd5b505092919050505095508551945073c81068cd335889736fc485592e4d73a82403d44b600160a060020a0316638d67799e6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156126c657600080fd5b505af11580156126da573d6000803e3d6000fd5b505050506040513d60208110156126f057600080fd5b505160ff891610158061272a5750848860ff1610801561272a57506000868960ff1681518110151561271e57fe5b90602001906020020151115b1561277057600097505b848860ff1610801561276057506000868960ff1681518110151561275457fe5b90602001906020020151115b1561277057600190970196612734565b604080517faf209cf8000000000000000000000000000000000000000000000000000000008152600160a060020a038b16600482015260ff8a166024820152604481018d9052905173c81068cd335889736fc485592e4d73a82403d44b9163af209cf891606480830192600092919082900301818387803b1580156127f457600080fd5b505af1158015612808573d6000803e3d6000fd5b5050505060408051908101604052808b6001605060020a03168152602001600160ff16815250600260008b600160a060020a0316600160a060020a0316815260200190815260200160002060008d815260200190815260200160002060008201518160000160006101000a8154816001605060020a0302191690836001605060020a03160217905550602082015181600001600a6101000a81548160ff021916908360ff1602179055509050506128dd565b86546001605060020a038082168c011669ffffffffffffffffffff199091161787555b6128e7898c61419b565b9350935093506000846001605060020a0316118061290e57506000836001605060020a0316115b8061292257506000826001605060020a0316115b15612a07576000809054906101000a9004600160a060020a0316600160a060020a03166336bce9988a8c87028d87028e87026040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a03168152602001846001605060020a03166001605060020a03168152602001836001605060020a03166001605060020a03168152602001826001605060020a03166001605060020a03168152602001945050505050600060405180830381600087803b1580156129ea57600080fd5b505af11580156129fe573d6000803e3d6000fd5b50505050611b47565b896001605060020a0316612a1b8a8d611ddf565b02905060008051602061442a83398151915263a732f9ac8a606484046040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050600060405180830381600087803b158015612a8957600080fd5b505af1158015612a9d573d6000803e3d6000fd5b505050505050505050505050505050565b604080517fb5967e16000000000000000000000000000000000000000000000000000000008152600160a060020a03881660048201529051600091829160008051602061442a8339815191529163b5967e16916024808301928692919082900301818387803b158015612b2057600080fd5b505af1158015612b34573d6000803e3d6000fd5b505050506020868101805188518651885163ffffffff928316919003600390810b82018316808d5289870151968b015196909603900b828416018216938490528901606492830182160295509101169086010282900390506000811315612c4d57600160a060020a03881660008181526002602090815260408083208b84529091528082205481517fa732f9ac000000000000000000000000000000000000000000000000000000008152600481019490945260646001605060020a0390911685020460248401525160008051602061442a8339815191529263a732f9ac92604480830193919282900301818387803b158015612c3057600080fd5b505af1158015612c44573d6000803e3d6000fd5b50505050612d03565b600160a060020a03881660008181526002602090815260408083208b84529091528082205481517fadd1dcfa000000000000000000000000000000000000000000000000000000008152600481019490945260646001605060020a03909116858403020460248401525160008051602061442a8339815191529263add1dcfa92604480830193919282900301818387803b158015612cea57600080fd5b505af1158015612cfe573d6000803e3d6000fd5b505050505b85600560008a600160a060020a0316600160a060020a03168152602001908152602001600020600089815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001600c6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160000160106101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160000160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600001601c6101000a81548163ffffffff021916908363ffffffff1602179055509050505050505050505050565b6000806000806000806000808b6060015160640163ffffffff168c6040015163ffffffff168c6060015101026001605060020a031697508b60a0015160640163ffffffff168c6080015163ffffffff168c6080015101026001605060020a031696508b60e0015160640163ffffffff168c60c0015163ffffffff168c60a0015101026001605060020a03169550886002600881101515612f1b57fe5b60200201518a6002602002015160408e01805192909103600390810b63ffffffff938416019092169052899060200201518a6003602002015160608e0180519290910360030b63ffffffff92831601909116905288600460200201518a6004602002015160808e0180519290910360030b63ffffffff92831601909116905288600560200201518a6005602002015160a08e0180519290910360030b63ffffffff92831601909116905288600660200201518a6006602002015160c08e0180519290910360030b63ffffffff92831601909116905288600760200201518a600760200201510360030b8c60e0015163ffffffff16018c60e0019063ffffffff16908163ffffffff1681525050878c6060015160640163ffffffff168d6040015163ffffffff168d606001516001605060020a03160102039450868c60a0015160640163ffffffff168d6080015163ffffffff168d608001516001605060020a03160102039350858c60e0015160640163ffffffff168d60c0015163ffffffff168d60a001516001605060020a031601020392508a600001519150600260008e600160a060020a0316600160a060020a03168152602001908152602001600020600083815260200190815260200160002060000160009054906101000a90046001605060020a03166001605060020a031690506000809054906101000a9004600160a060020a0316600160a060020a03166308688ce08e8784028785028786026040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a03168152602001848152602001838152602001828152602001945050505050600060405180830381600087803b15801561319a57600080fd5b505af11580156131ae573d6000803e3d6000fd5b505050508b600560008f600160a060020a0316600160a060020a03168152602001908152602001600020600084815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001600c6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160000160106101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160000160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600001601c6101000a81548163ffffffff021916908363ffffffff16021790555090505050505050505050505050505050565b600080600160e060020a038416151561334f5760009150611eb5565b828402905082600160e060020a031684600160e060020a031682600160e060020a031681151561337b57fe5b04600160e060020a031614151561338e57fe5b9392505050565b600061339f614305565b6133a7614349565b505050600160a060020a0383166000818152600260208181526040808420868552825280842054948452600582528084208685528252808420815161010081018352905463ffffffff808216835264010000000082048116838601526801000000000000000082048116838501526c0100000000000000000000000082048116606080850191909152608060020a8304821660808086019190915260a060020a808504841660a08088019190915260c060020a8604851660c08089019190915260e060020a90960490941660e08701528b8a5260078852868a2087519586018852805486526001810154600160e060020a031698860198909852978701549584018690526003909601546001605060020a03818116928501929092526a010000000000000000000081048216968401969096529590940485169381019390935292909416939192909181908190819081101561366557856000015163ffffffff168560400151018960e0015163ffffffff1688026001605060020a0316029350856020015160640163ffffffff168960c0015163ffffffff168802026001605060020a03168401935060008051602061442a833981519152600160a060020a031663b5967e168b6040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050600060405180830381600087803b1580156135b957600080fd5b505af11580156135cd573d6000803e3d6000fd5b5050604080517fa732f9ac000000000000000000000000000000000000000000000000000000008152600160a060020a038e166004820152606488046024820152905160008051602061442a833981519152935063a732f9ac9250604480830192600092919082900301818387803b15801561364857600080fd5b505af115801561365c573d6000803e3d6000fd5b50505050613804565b856040015163ffffffff1685606001510189610120015163ffffffff168802029250856080015163ffffffff1685608001510189610160015163ffffffff1688020291508560c0015163ffffffff168560a0015101896101a0015163ffffffff168802029050856060015160640163ffffffff1689610100015163ffffffff16880202830192508560a0015160640163ffffffff1689610140015163ffffffff16880202820191508560e0015160640163ffffffff1689610180015163ffffffff16880202810190506000809054906101000a9004600160a060020a0316600160a060020a03166336bce9988b8585856040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a03168152602001846001605060020a03166001605060020a03168152602001836001605060020a03166001605060020a03168152602001826001605060020a03166001605060020a03168152602001945050505050600060405180830381600087803b1580156137eb57600080fd5b505af11580156137ff573d6000803e3d6000fd5b505050505b8860c00151866000018181510191509063ffffffff16908163ffffffff16815250508860e00151866020018181510191509063ffffffff16908163ffffffff1681525050886101000151866040018181510191509063ffffffff16908163ffffffff1681525050886101200151866060018181510191509063ffffffff16908163ffffffff1681525050886101400151866080018181510191509063ffffffff16908163ffffffff16815250508861016001518660a0018181510191509063ffffffff16908163ffffffff16815250508861018001518660c0018181510191509063ffffffff16908163ffffffff1681525050886101a001518660e0018181510191509063ffffffff16908163ffffffff168152505085600560008c600160a060020a0316600160a060020a0316815260200190815260200160002060008a815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001600c6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160000160106101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160000160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600001601c6101000a81548163ffffffff021916908363ffffffff16021790555090505050505050505050505050565b6000613aa2614305565b613aaa614349565b505050600160a060020a0383166000818152600260208181526040808420868552825280842054948452600582528084208685528252808420815161010081018352905463ffffffff808216835264010000000082048116838601526801000000000000000082048116838501526c0100000000000000000000000082048116606080850191909152608060020a8304821660808086019190915260a060020a808504841660a08088019190915260c060020a8604851660c08089019190915260e060020a90960490941660e08701528b8a5260078852868a2087519586018852805486526001810154600160e060020a031698860198909852978701549584018690526003909601546001605060020a03818116928501929092526a0100000000000000000000810482169684019690965295909404851693810193909352929094169391929091819081908190811015613d6857856000015163ffffffff168560400151018960e0015163ffffffff1688026001605060020a0316029350856020015160640163ffffffff168960c0015163ffffffff168802026001605060020a03168401935060008051602061442a833981519152600160a060020a031663b5967e168b6040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050600060405180830381600087803b158015613cbc57600080fd5b505af1158015613cd0573d6000803e3d6000fd5b5050604080517fadd1dcfa000000000000000000000000000000000000000000000000000000008152600160a060020a038e166004820152606488046024820152905160008051602061442a833981519152935063add1dcfa9250604480830192600092919082900301818387803b158015613d4b57600080fd5b505af1158015613d5f573d6000803e3d6000fd5b50505050613f07565b856040015163ffffffff1685606001510189610120015163ffffffff168802029250856080015163ffffffff1685608001510189610160015163ffffffff1688020291508560c0015163ffffffff168560a0015101896101a0015163ffffffff168802029050856060015160640163ffffffff1689610100015163ffffffff16880202830192508560a0015160640163ffffffff1689610140015163ffffffff16880202820191508560e0015160640163ffffffff1689610180015163ffffffff16880202810190506000809054906101000a9004600160a060020a0316600160a060020a031663fa5ccd0b8b8585856040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a03168152602001846001605060020a03166001605060020a03168152602001836001605060020a03166001605060020a03168152602001826001605060020a03166001605060020a03168152602001945050505050600060405180830381600087803b158015613eee57600080fd5b505af1158015613f02573d6000803e3d6000fd5b505050505b8860c00151866000018181510391509063ffffffff16908163ffffffff16815250508860e00151866020018181510391509063ffffffff16908163ffffffff1681525050886101000151866040018181510391509063ffffffff16908163ffffffff1681525050886101200151866060018181510391509063ffffffff16908163ffffffff1681525050886101400151866080018181510391509063ffffffff16908163ffffffff16815250508861016001518660a0018181510391509063ffffffff16908163ffffffff16815250508861018001518660c0018181510391509063ffffffff16908163ffffffff1681525050886101a001518660e0018181510391509063ffffffff16908163ffffffff168152505085600560008c600160a060020a0316600160a060020a0316815260200190815260200160002060008a815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001600c6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160000160106101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160000160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600001601c6101000a81548163ffffffff021916908363ffffffff16021790555090505050505050505050505050565b60008060006141a8614349565b6141b0614305565b5050506000838152600760209081526040808320815160c08181018452825482526001830154600160e060020a0316828601526002830154828501526003909201546001605060020a0380821660608085019182526a010000000000000000000084048316608080870191825260a060020a9586900490941660a0968701908152600160a060020a03909e168a5260058952878a209c8a529b885297869020865161010081018852905463ffffffff8082168352640100000000820481169983019990995268010000000000000000810489169782018890526c01000000000000000000000000810489169982018a9052608060020a81048916938201849052938404881694810185905260c060020a8404881695810186905260e060020a909304871660e09093018390525199519a519990940160649687018616029a999093019085018416029796019201160292915050565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b604080516101c081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081019190915290565b604080516060810182526000808252602082018190529181019190915290565b6040805180820190915260008082526020820152905600000000000000000000000000df0960778c6e6597f197ed9a25f12f5d971da86ca165627a7a723058203bd0a86cbd4ae0e47ee49e040608015de08b9b9713307e3094cf6c2945d071590029
Swarm Source
bzzr://3bd0a86cbd4ae0e47ee49e040608015de08b9b9713307e3094cf6c2945d07159
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.