More Info
Private Name Tags
ContractCreator
Multichain Info
Latest 12 from a total of 12 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer Ownersh... | 17046400 | 508 days ago | IN | 0 ETH | 0.00123756 | ||||
Set Dev Rescue E... | 17046395 | 508 days ago | IN | 0 ETH | 0.00182867 | ||||
Set Game Contrac... | 15966047 | 659 days ago | IN | 0 ETH | 0.00058802 | ||||
Set Game Contrac... | 15966006 | 659 days ago | IN | 0 ETH | 0.00032602 | ||||
Set Game Contrac... | 15899319 | 669 days ago | IN | 0 ETH | 0.00112474 | ||||
Set Game Contrac... | 15899319 | 669 days ago | IN | 0 ETH | 0.00112474 | ||||
Set Game Contrac... | 15899317 | 669 days ago | IN | 0 ETH | 0.00101848 | ||||
Set Game Contrac... | 15899315 | 669 days ago | IN | 0 ETH | 0.00108588 | ||||
Set Game Contrac... | 15899314 | 669 days ago | IN | 0 ETH | 0.00115227 | ||||
Set Game Contrac... | 15899313 | 669 days ago | IN | 0 ETH | 0.00117445 | ||||
Set Game Contrac... | 15899312 | 669 days ago | IN | 0 ETH | 0.00115961 | ||||
0x60803462 | 15899296 | 669 days ago | IN | 0 ETH | 0.10742106 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
MetatopiaSeason2Hub
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT LICENSE pragma solidity 0.8.17; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol"; import "../interfaces/ITopia.sol"; import "../interfaces/IGenesis.sol"; // all in one contract for receiving staked NFTs and distributing daily topia payouts contract MetatopiaSeason2Hub is Ownable, IERC721Receiver { IGenesis public GenesisInterface; ITopia public TopiaInterface; IERC721 public Genesis = IERC721(0x810FeDb4a6927D02A6427f7441F6110d7A1096d5); // Genesis NFT contract IERC721 public Alpha = IERC721(0x96Af517c414B3726c1B2Ecc744ebf9d292DCbF60); IERC721 public Wastelands = IERC721(0x0b21144dbf11feb286d24cD42A7c3B0f90c32aC8); // 1=runner, 2=bull, 3=matador // 4=cadet, 5=alien, 6=general, // 7=baker, 8=foodie, 9=shopowner, // 10=cat, 11=dog, 12=vet mapping(uint16 => uint8) public genesisIdentifier; mapping(address => bool) gameContracts; // ******* BULLRUN ******* uint16 private numRunnersStaked; uint16 private numBullsStaked; mapping(uint16 => address) private OriginalMatadorOwner; mapping(uint16 => address) private OriginalBullOwner; mapping(uint16 => address) private OriginalRunnerOwner; // ************ MOONFORCE ************ uint16 private numCadetsStaked; // staked cadet nft ids uint16 private numGeneralsStaked; mapping(uint16 => address) private OriginalCadetOwner; mapping(uint16 => address) private OriginalAlienOwner; mapping(uint16 => address) private OriginalGeneralOwner; // ************ DOGEWORLD ************ uint16 private numCatsStaked; uint16 private numDogsStaked; mapping(uint16 => address) private OriginalCatOwner; mapping(uint16 => address) private OriginalDogOwner; mapping(uint16 => address) private OriginalVetOwner; // ************ PYE MARKET ************ uint16 private numBakersStaked; // staked baker nft ids uint16 private numFoodiesStaked; // .. mapping(uint16 => address) private OriginalBakerOwner; mapping(uint16 => address) private OriginalFoodieOwner; mapping(uint16 => address) private OriginalShopOwnerOwner; // ------------------------------------ // mapping for alpha token id to wallet of staker mapping(uint16 => address) private OriginalAlphaOwner; // mapping for rat token id to wallet of staker mapping(uint16 => address) private OriginalRatOwner; // all alpha ids staked mapping(uint8 => uint16[]) private alphaIds; // mapping to arrays of stealing ids mapping(uint8 => uint16[]) private stakedIds; // 1 = Matadors, 2 = Aliens, 3 = Vets, 4 = Shop Owners // array of Owned Genesis token ids mapping(address => mapping(uint8 => uint16[])) genesisOwnedIds; // array of Owned Alpha token ids mapping(address => mapping(uint8 => uint16[])) alphaOwnedIds; // array of Owned Rat token ids mapping(address => uint16[]) ratOwnedIds; // number of Genesis staked uint256 public numGenesisStaked; // number of Alpha staked uint256 public numAlphasStaked; // number of rats staked; uint16 public numRatsStaked; // amount of $TOPIA earned so far per holder mapping(address => uint256) public totalHolderTOPIA; // mapping for alpha tokenId to game it's being staked in mapping(uint16 => uint8) public alphaGameIdentifier; // mapping for genesis tokenId to game it's being staked in mapping(uint16 => uint8) genesisGameIdentifier; // amount of $TOPIA earned so far uint256 public totalTOPIAEarned; bool public rescueEnabled; bool public devRescueEnabled; function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) { return this.onERC721Received.selector; } constructor(address _topia) { TopiaInterface = ITopia(_topia); } // ************* EVENTS event TopiaClaimed (address indexed owner, uint256 earned, uint256 blockNum, uint256 timeStamp); event AlphaReceived (address indexed _originalOwner, uint16 _id); event AlphaReturned (address indexed _originalOwner, uint16 _id); event RatReceived (address indexed _originalOwner, uint16 _id); event RatReturned (address indexed _originalOwner, uint16 _id); event BullReceived (address indexed _originalOwner, uint16 _id); event BullReturned (address indexed _returnee, uint16 _id); event MatadorReceived (address indexed _originalOwner, uint16 _id); event MatadorReturned (address indexed _returnee, uint16 _id); event RunnerReceived (address indexed _originalOwner, uint16 _id); event RunnerReturned (address indexed _returnee, uint16 _id); event CadetReceived (address indexed _originalOwner, uint16 _id); event CadetReturned (address indexed _returnee, uint16 _id); event AlienReceived (address indexed _originalOwner, uint16 _id); event AlienReturned (address indexed _returnee, uint16 _id); event GeneralReceived (address indexed _originalOwner, uint16 _id); event GeneralReturned (address indexed _returnee, uint16 _id); event CatReceived (address indexed _originalOwner, uint16 _id); event CatReturned (address indexed _returnee, uint16 _id); event DogReceived (address indexed _originalOwner, uint16 _id); event DogReturned (address indexed _returnee, uint16 _id); event VetReceived (address indexed _originalOwner, uint16 _id); event VetReturned (address indexed _returnee, uint16 _id); event BakerReceived (address indexed _originalOwner, uint16 _id); event BakerReturned (address indexed _returnee, uint16 _id); event FoodieReceived (address indexed _originalOwner, uint16 _id); event FoodieReturned (address indexed _returnee, uint16 _id); event ShopOwnerReceived (address indexed _originalOwner, uint16 _id); event ShopOwnerReturned (address indexed _returnee, uint16 _id); event NFTStolen (address indexed _thief, address indexed _victim, uint16 _id); event PlatoonCreated (address indexed _creator, uint16[] cadets); event LitterCreated (address indexed _creator, uint16[] cats); event MobCreated (address indexed _creator, uint16[] runners); event UnionCreated (address indexed _creator, uint16[] bakers); event CadetAdded (address indexed _owner, uint16 _id); event CatAdded (address indexed _owner, uint16 _id); event RunnerAdded (address indexed _owner, uint16 _id); event BakerAdded (address indexed _owner, uint16 _id); event GroupUnstaked (address indexed _unstaker, uint8 _gameId, uint80 timestamp); event MatadorMigrated (address indexed _owner, uint16 _id); event GeneralMigrated (address indexed _owner, uint16 _id); event ShopOwnerMigrated (address indexed _owner, uint16 _id); event VetMigrated (address indexed _owner, uint16 _id); // ************* Universal TOPIA functions function pay(address _to, uint256 _amount) external onlyGames() { TopiaInterface.mint(_to, _amount); totalHolderTOPIA[_to] += _amount; totalTOPIAEarned += _amount; emit TopiaClaimed(_to, _amount, block.number, block.timestamp); } function burnFrom(address _to, uint256 _amount) external onlyGames() { TopiaInterface.burnFrom(_to, _amount); } // ************* MODIFIERS modifier onlyGames() { require(gameContracts[msg.sender], "only game contract allowed"); _; } // ************* SETTERS function setGenesis(address _genesis) external onlyOwner { Genesis = IERC721(_genesis); GenesisInterface = IGenesis(_genesis); } function setTopia(address _topia) external onlyOwner { TopiaInterface = ITopia(_topia); } // mass update the genesisIdentifier mapping function batchSetGenesisIdentifier(uint16[] calldata _idNumbers, uint8[] calldata _types) external onlyOwner { require(_idNumbers.length == _types.length); for (uint16 i = 0; i < _idNumbers.length;) { require(_types[i] != 0 && _types[i] <= 12); genesisIdentifier[_idNumbers[i]] = _types[i]; unchecked{ i++; } } } function setRescueEnabled(bool _flag) external onlyOwner { rescueEnabled = _flag; } function setDevRescueEnabled(bool _flag) external onlyOwner { devRescueEnabled = _flag; } // ************* EVENT FXNS function balanceOf(address owner) external view returns (uint256) { uint256 gen; for(uint8 i = 1; i <= 5; i++) { gen += genesisOwnedIds[owner][i].length; } uint256 alph; for(uint8 i = 1; i <= 5; i++) { alph += alphaOwnedIds[owner][i].length; } uint256 stakedBalance = alph + gen; return stakedBalance; } function getUserGenesisStaked(address owner) external view returns (uint16[] memory stakedGenesis) { uint256 length; for(uint8 i = 1; i <= 5; i++) { length += genesisOwnedIds[owner][i].length; } stakedGenesis = new uint16[](length); uint y = 0; for(uint8 i = 1; i <= 5; i++) { uint256 L = genesisOwnedIds[owner][i].length; for(uint z = 0; z < L; z++) { stakedGenesis[y] = uint16(genesisOwnedIds[owner][i][z]); y++; } } } function getUserStakedGenesisGame(address owner, uint8 game) external view returns (uint16[] memory stakedGenesis) { uint256 length = genesisOwnedIds[owner][game].length; stakedGenesis = new uint16[](length); for(uint i = 0; i < length;) { stakedGenesis[i] = uint16(genesisOwnedIds[owner][game][i]); unchecked{ i++; } } } function getUserAlphaStaked(address owner) external view returns (uint16[] memory stakedAlphas) { uint256 length; for(uint8 i = 1; i <= 5; i++) { length += alphaOwnedIds[owner][i].length; } stakedAlphas = new uint16[](length); uint y = 0; for(uint8 i = 1; i <= 5; i++) { uint256 L = alphaOwnedIds[owner][i].length; for(uint z = 0; z < L; z++) { stakedAlphas[y] = uint16(alphaOwnedIds[owner][i][z]); y++; } } } function getUserStakedAlphaGame(address owner, uint8 game) external view returns (uint16[] memory stakedAlphas) { uint256 length = alphaOwnedIds[owner][game].length; stakedAlphas = new uint16[](length); for(uint i = 0; i < length;) { stakedAlphas[i] = uint16(alphaOwnedIds[owner][game][i]); unchecked{ i++; } } } function getUserRatStaked(address owner) external view returns (uint16[] memory stakedRats) { uint256 length = ratOwnedIds[owner].length; stakedRats = new uint16[](length); for(uint i = 0; i < length;) { stakedRats[i] = uint16(ratOwnedIds[owner][i]); unchecked{ i++; } } } // ************ ALPHA NFT RECEIVE AND RETURN FUNCTIONS // @param: _gameIdentifier 1 = BullRun, 2 = MoonForce, 3 = Doge World, 4 = PYE Market, 5 = Wastelands function receiveAlpha(address _originalOwner, uint16 _id, uint8 _gameIdentifier) external onlyGames { require(_gameIdentifier >= 1 && _gameIdentifier <= 5 , "invalid id"); IERC721(Alpha).safeTransferFrom(_originalOwner, address(this), _id); OriginalAlphaOwner[_id] = _originalOwner; alphaIds[_gameIdentifier].push(_id); alphaGameIdentifier[_id] = _gameIdentifier; alphaOwnedIds[_originalOwner][_gameIdentifier].push(_id); numAlphasStaked++; emit AlphaReceived(_originalOwner, _id); } function returnAlphaToOwner(address _returnee, uint16 _id, uint8 _gameIdentifier) external onlyGames { require(_returnee == OriginalAlphaOwner[_id], "not owner"); IERC721(Alpha).safeTransferFrom(address(this), _returnee, _id); delete OriginalAlphaOwner[_id]; delete alphaGameIdentifier[_id]; uint256 d = uint256(_id); uint256 x = alphaOwnedIds[_returnee][_gameIdentifier].length; for(uint i = 0; i < x;) { if(alphaOwnedIds[_returnee][_gameIdentifier][i] == d) { alphaOwnedIds[_returnee][_gameIdentifier][i] = alphaOwnedIds[_returnee][_gameIdentifier][x - 1]; alphaOwnedIds[_returnee][_gameIdentifier].pop(); break; } else { unchecked{ i++; } continue; } } uint256 y = alphaIds[_gameIdentifier].length; uint256 m = (0 & (y - 1)) + (0 ^ (y - 1)) / 2; unchecked { for(uint i = 0; i < y;) { if(alphaIds[_gameIdentifier][i] == d) { alphaIds[_gameIdentifier][i] = alphaIds[_gameIdentifier][y - 1]; alphaIds[_gameIdentifier].pop(); break; } else if(alphaIds[_gameIdentifier][y - i - 1] == d) { alphaIds[_gameIdentifier][i] = alphaIds[_gameIdentifier][y - 1]; alphaIds[_gameIdentifier].pop(); break; } else if(alphaIds[_gameIdentifier][m - i] == d) { alphaIds[_gameIdentifier][i] = alphaIds[_gameIdentifier][y - 1]; alphaIds[_gameIdentifier].pop(); break; } else if(alphaIds[_gameIdentifier][m + i] == d) { alphaIds[_gameIdentifier][i] = alphaIds[_gameIdentifier][y - 1]; alphaIds[_gameIdentifier].pop(); break; } else { i++; continue; } } } numAlphasStaked--; emit AlphaReturned(_returnee, _id); } function emergencyRescueAlpha(uint16 _id, address _account) external { if(devRescueEnabled && msg.sender == owner()) { IERC721(Alpha).safeTransferFrom(address(this), _account, _id); } else if (rescueEnabled && msg.sender == OriginalAlphaOwner[_id]) { IERC721(Alpha).safeTransferFrom(address(this), _account, _id); } } // ************ WASTELANDS NFT RECEIVE AND RETURN FUNCTIONS function receiveRat(address _originalOwner, uint16 _id) external onlyGames { IERC721(Wastelands).safeTransferFrom(_originalOwner, address(this), _id); OriginalRatOwner[_id] = _originalOwner; ratOwnedIds[_originalOwner].push(_id); numRatsStaked++; emit RatReceived(_originalOwner, _id); } function returnRatToOwner(address _returnee, uint16 _id) external onlyGames { require(_returnee == OriginalRatOwner[_id], "not owner"); IERC721(Wastelands).safeTransferFrom(address(this), _returnee, _id); delete OriginalRatOwner[_id]; uint256 x = ratOwnedIds[_returnee].length; for(uint i = 0; i < x;) { if(ratOwnedIds[_returnee][i] == _id) { ratOwnedIds[_returnee][i] = ratOwnedIds[_returnee][x - 1]; ratOwnedIds[_returnee].pop(); break; } else { unchecked{ i++; } continue; } } numRatsStaked--; emit RatReturned(_returnee, _id); } function emergencyRescueRat(uint16 _id, address _account) external { if(devRescueEnabled && msg.sender == owner()) { IERC721(Wastelands).safeTransferFrom(address(this), _account, _id); } else if (rescueEnabled && msg.sender == OriginalRatOwner[_id]) { IERC721(Wastelands).safeTransferFrom(address(this), _account, _id); } } // ************ METATOPIA WASTELANDS FUNCTIONS // for tier 3 NFTS being sent to wastelands // @param: _gameId: 1 = bullrun, 2 = MF, 3 = DW, 4 = PM // @param: returningFromWastelands, if the NFT has already been in the wastelands and user is trying to get it back function migrate(uint16 _id, address _originalOwner, uint8 _gameId, bool returningFromWastelands) external onlyGames { require(_gameId >= 1 && _gameId <= 4, "Invalid game id"); if (_gameId == 1) { // incoming matador if (!returningFromWastelands) { // nft is being sent to the wastes OriginalMatadorOwner[_id] = _originalOwner; emit MatadorMigrated(_originalOwner, _id); } else { // nft is going back to original owner delete OriginalMatadorOwner[_id]; emit MatadorReturned(_originalOwner, _id); } } else if (_gameId == 2) { // incoming general if (!returningFromWastelands) { // nft is being sent to the wastes OriginalGeneralOwner[_id] = _originalOwner; emit GeneralMigrated(_originalOwner, _id); } else { // nft is going back to original owner delete OriginalGeneralOwner[_id]; emit GeneralReturned(_originalOwner, _id); } } else if (_gameId == 3) { // incoming vet if (!returningFromWastelands) { // nft is being sent to the wastes OriginalVetOwner[_id] = _originalOwner; emit VetMigrated(_originalOwner, _id); } else { // nft is going back to original owner delete OriginalVetOwner[_id]; emit VetReturned(_originalOwner, _id); } } else if (_gameId == 4) { // incoming shopowner if (!returningFromWastelands) { // nft is being sent to the wastes OriginalShopOwnerOwner[_id] = _originalOwner; emit ShopOwnerMigrated(_originalOwner, _id); } else { // nft is going back to original owner delete OriginalShopOwnerOwner[_id]; emit ShopOwnerReturned(_originalOwner, _id); } } if (!returningFromWastelands) { // nft is being sent to the wastes Genesis.safeTransferFrom(_originalOwner, address(this), _id); genesisGameIdentifier[_id] = 5; // NFT goes to Wastelands genesisOwnedIds[_originalOwner][5].push(_id); } else { Genesis.safeTransferFrom(address(this), _originalOwner, _id); delete genesisGameIdentifier[_id]; removeGenesisArray(_id, _originalOwner, 5); } } // ************ METATOPIA GENESIS NFT RECEIVE AND RETURN FUNCTIONS // @param: _gameId: 1 = bullrun, 2 = MF, 3 = DW, 4 = PM, 5 = Wastelands // 1=runner, 2=bull, 3=matador // 4=cadet, 5=alien, 6=general, // 7=baker, 8=foodie, 9=shopowner, // 10=cat, 11=dog, 12=vet function receieveManyGenesis(address _originalOwner, uint16[] memory _ids, uint8[] memory identifiers, uint8 _gameIdentifier) external onlyGames { for(uint i = 0; i < _ids.length;) { if (identifiers[i] == 1) { OriginalRunnerOwner[_ids[i]] = _originalOwner; numRunnersStaked++; emit RunnerReceived(_originalOwner, _ids[i]); } else if (identifiers[i] == 2) { OriginalBullOwner[_ids[i]] = _originalOwner; numBullsStaked++; emit BullReceived(_originalOwner, _ids[i]); } else if (identifiers[i] == 3) { OriginalMatadorOwner[_ids[i]] = _originalOwner; stakedIds[1].push(_ids[i]); emit MatadorReceived(_originalOwner, _ids[i]); } else if (identifiers[i] == 4) { OriginalCadetOwner[_ids[i]] = _originalOwner; numCadetsStaked++; emit CadetReceived(_originalOwner, _ids[i]); } else if (identifiers[i] == 5) { OriginalAlienOwner[_ids[i]] = _originalOwner; stakedIds[2].push(_ids[i]); emit AlienReceived(_originalOwner, _ids[i]); } else if (identifiers[i] == 6) { OriginalGeneralOwner[_ids[i]] = _originalOwner; numGeneralsStaked++; emit GeneralReceived(_originalOwner, _ids[i]); } else if (identifiers[i] == 7) { OriginalBakerOwner[_ids[i]] = _originalOwner; numBakersStaked++; emit BakerReceived(_originalOwner, _ids[i]); } else if (identifiers[i] == 8) { OriginalFoodieOwner[_ids[i]] = _originalOwner; numFoodiesStaked++; emit FoodieReceived(_originalOwner, _ids[i]); } else if (identifiers[i] == 9) { OriginalShopOwnerOwner[_ids[i]] = _originalOwner; stakedIds[4].push(_ids[i]); emit ShopOwnerReceived(_originalOwner, _ids[i]); } else if (identifiers[i] == 10) { OriginalCatOwner[_ids[i]] = _originalOwner; numCatsStaked++; emit CatReceived(_originalOwner, _ids[i]); } else if (identifiers[i] == 11) { OriginalDogOwner[_ids[i]] = _originalOwner; numDogsStaked++; emit DogReceived(_originalOwner, _ids[i]); } else if (identifiers[i] == 12) { OriginalVetOwner[_ids[i]] = _originalOwner; stakedIds[3].push(_ids[i]); emit VetReceived(_originalOwner, _ids[i]); } genesisGameIdentifier[_ids[i]] = _gameIdentifier; if (genesisIdentifier[_ids[i]] == 0) { genesisIdentifier[_ids[i]] = identifiers[i]; } genesisOwnedIds[_originalOwner][_gameIdentifier].push(_ids[i]); Genesis.safeTransferFrom(_originalOwner, address(this), _ids[i]); unchecked{ i++; } } numGenesisStaked += _ids.length; } function returnGenesisToOwner(address _returnee, uint16 _id, uint8 identifier, uint8 _gameIdentifier) external onlyGames { if (identifier == 1) { require(_returnee == OriginalRunnerOwner[_id], "not owner"); delete OriginalRunnerOwner[_id]; delete genesisGameIdentifier[_id]; numRunnersStaked--; emit RunnerReturned(_returnee, _id); } else if (identifier == 2) { require(_returnee == OriginalBullOwner[_id], "not owner"); delete OriginalBullOwner[_id]; delete genesisGameIdentifier[_id]; numBullsStaked--; emit BullReturned(_returnee, _id); } else if (identifier == 3) { require(_returnee == OriginalMatadorOwner[_id], "not owner"); delete OriginalMatadorOwner[_id]; delete genesisGameIdentifier[_id]; removeStakedArray(_id, 1); emit MatadorReturned(_returnee, _id); } else if (identifier == 4) { require(_returnee == OriginalCadetOwner[_id], "not owner"); delete OriginalCadetOwner[_id]; delete genesisGameIdentifier[_id]; numCadetsStaked--; emit CadetReturned(_returnee, _id); } else if (identifier == 5) { require(_returnee == OriginalAlienOwner[_id], "not owner"); delete OriginalAlienOwner[_id]; delete genesisGameIdentifier[_id]; removeStakedArray(_id, 2); emit AlienReturned(_returnee, _id); } else if (identifier == 6) { require(_returnee == OriginalGeneralOwner[_id], "not owner"); delete OriginalGeneralOwner[_id]; delete genesisGameIdentifier[_id]; numGeneralsStaked--; emit GeneralReturned(_returnee, _id); } else if (identifier == 7) { require(_returnee == OriginalBakerOwner[_id], "not owner"); delete OriginalBakerOwner[_id]; delete genesisGameIdentifier[_id]; numBakersStaked--; emit BakerReturned(_returnee, _id); } else if (identifier == 8) { require(_returnee == OriginalFoodieOwner[_id], "not owner"); delete OriginalFoodieOwner[_id]; delete genesisGameIdentifier[_id]; numFoodiesStaked--; emit FoodieReturned(_returnee, _id); } else if (identifier == 9) { require(_returnee == OriginalShopOwnerOwner[_id], "not owner"); delete OriginalShopOwnerOwner[_id]; delete genesisGameIdentifier[_id]; removeStakedArray(_id, 4); emit ShopOwnerReturned(_returnee, _id); } else if (identifier == 10) { require(_returnee == OriginalCatOwner[_id], "not owner"); delete OriginalCatOwner[_id]; delete genesisGameIdentifier[_id]; numCatsStaked--; emit CatReturned(_returnee, _id); } else if (identifier == 11) { require(_returnee == OriginalDogOwner[_id], "not owner"); delete OriginalDogOwner[_id]; delete genesisGameIdentifier[_id]; numDogsStaked--; emit DogReturned(_returnee, _id); } else if (identifier == 12) { require(_returnee == OriginalVetOwner[_id], "not owner"); delete OriginalVetOwner[_id]; delete genesisGameIdentifier[_id]; removeStakedArray(_id, 3); emit VetReturned(_returnee, _id); } removeGenesisArray(_id, _returnee, _gameIdentifier); numGenesisStaked--; IERC721(Genesis).safeTransferFrom(address(this), _returnee, _id); } function removeGenesisArray(uint16 _id, address _returnee, uint8 _gameIdentifier) internal { uint256 x = genesisOwnedIds[_returnee][_gameIdentifier].length; for(uint i = 0; i < x;) { if(genesisOwnedIds[_returnee][_gameIdentifier][i] == _id) { genesisOwnedIds[_returnee][_gameIdentifier][i] = genesisOwnedIds[_returnee][_gameIdentifier][x - 1]; genesisOwnedIds[_returnee][_gameIdentifier].pop(); break; } else { unchecked{ i++; } continue; } } } function removeStakedArray(uint16 _id, uint8 _type) internal { uint256 x = stakedIds[_type].length; for(uint i = 0; i < x;) { if(stakedIds[_type][i] == _id) { stakedIds[_type][i] = stakedIds[_type][x - 1]; stakedIds[_type].pop(); break; } else { unchecked{ i++; } continue; } } } function emergencyRescueGenesis(uint16 _id, address _account) external { require(devRescueEnabled && msg.sender == owner()); IERC721(Genesis).safeTransferFrom(address(this), _account, _id); } // ************** STEALING LOGIC *************** // @param: _gameId: 1 = bullrun, 2 = MF, 3 = DW, 4 = PM, 5 = Wastelands // @param _id: the actual NFT id // @param: identifier: // 1=runner, 2=bull, 3=matador // 4=cadet, 5=alien, 6=general, // 7=baker, 8=foodie, 9=shopowner, // 10=cat, 11=dog, 12=vet function stealGenesis(uint16 _id, uint256 seed, uint8 _gameId, uint8 identifier, address _victim) external onlyGames returns (address thief) { uint256 bucket = (seed & 0xFFFFFFFF); if (_gameId == 1) { // is a bullrun nft if (identifier == 1) { // is a runner thief = OriginalAlphaOwner[uint16(alphaIds[1][bucket % alphaIds[1].length])]; delete OriginalRunnerOwner[_id]; numRunnersStaked--; } else if (identifier == 2) { // is a bull thief = OriginalMatadorOwner[uint16(stakedIds[1][(bucket % stakedIds[1].length)])]; delete OriginalBullOwner[_id]; numBullsStaked--; } } else if (_gameId == 2) { // is a mf nft, aliens can't be stolen if (identifier == 4) { // is a cadet thief = OriginalAlienOwner[uint16(stakedIds[2][(bucket % stakedIds[2].length)])]; delete OriginalCadetOwner[_id]; numCadetsStaked--; } } else if (_gameId == 3) { // is a dw nft if (identifier == 10) { // is a cat thief = OriginalAlphaOwner[uint16(alphaIds[3][bucket % alphaIds[3].length])]; delete OriginalCatOwner[_id]; numCatsStaked--; } else if (identifier == 11) { // is a dog thief = OriginalVetOwner[uint16(stakedIds[3][(bucket % stakedIds[3].length)])]; delete OriginalDogOwner[_id]; numDogsStaked--; } } else if (_gameId == 4) { // is a pm nft if (identifier == 7) { // is a baker thief = OriginalAlphaOwner[uint16(alphaIds[4][bucket % alphaIds[4].length])]; delete OriginalBakerOwner[_id]; numBakersStaked--; } else if (identifier == 8) { // is a foodie thief = OriginalShopOwnerOwner[uint16(stakedIds[4][(bucket % stakedIds[4].length)])]; delete OriginalFoodieOwner[_id]; numFoodiesStaked--; } } removeGenesisArray(_id, _victim, _gameId); IERC721(Genesis).safeTransferFrom(address(this), thief, _id); emit NFTStolen(thief, _victim, _id); } // only tier 3 nfts can be stolen during wastelands migration // for tier 3's being SENT to wastes function stealMigratingGenesis(uint16 _id, uint256 seed, uint8 _gameId, address _victim, bool returningFromWastelands) external onlyGames returns (address thief) { uint256 bucket = (seed & 0xFFFFFFFF); if (_gameId == 1) { // steal matador thief = OriginalAlienOwner[uint16(stakedIds[2][(bucket % stakedIds[2].length)])]; if (!returningFromWastelands) { // if NFT is going to wastelands IERC721(Genesis).safeTransferFrom(_victim, thief, _id); } else { // user is bringing NFT back from wastelands IERC721(Genesis).safeTransferFrom(address(this), thief, _id); } delete OriginalMatadorOwner[_id]; } else if (_gameId == 2) { // steal general thief = OriginalAlienOwner[uint16(stakedIds[2][(bucket % stakedIds[2].length)])]; if (!returningFromWastelands) { // if NFT is going to wastelands IERC721(Genesis).safeTransferFrom(_victim, thief, _id); } else { // user is bringing NFT back from wastelands IERC721(Genesis).safeTransferFrom(address(this), thief, _id); } delete OriginalGeneralOwner[_id]; } else if (_gameId == 3) { // steal vet thief = OriginalAlienOwner[uint16(stakedIds[2][(bucket % stakedIds[2].length)])]; if (!returningFromWastelands) { // if NFT is going to wastelands IERC721(Genesis).safeTransferFrom(_victim, thief, _id); } else { // user is bringing NFT back from wastelands IERC721(Genesis).safeTransferFrom(address(this), thief, _id); } delete OriginalVetOwner[_id]; } else if (_gameId == 4) { // steal shopowner thief = OriginalAlienOwner[uint16(stakedIds[2][(bucket % stakedIds[2].length)])]; if (!returningFromWastelands) { // if NFT is going to wastelands IERC721(Genesis).safeTransferFrom(_victim, thief, _id); } else { // user is bringing NFT back from wastelands IERC721(Genesis).safeTransferFrom(address(this), thief, _id); } delete OriginalShopOwnerOwner[_id]; } emit NFTStolen(thief, _victim, _id); } // ************ UNIVERSAL NFT GROUPING FXNS (PLATOONS, MOBS, LITTERS, UNIONS) ************* // @param: _ids: NFT ids being staked together to form a platoon, litter... etc // @param: _creator: address of the person creating their group (staker) // @param: _gameIdentifier: 1 = bullrun, 2 = MF, 3 = DW, 4 = PM function createGroup(uint16[] calldata _ids, address _creator, uint8 _gameIdentifier) external onlyGames { uint16 length = uint16(_ids.length); for (uint i = 0; i < length;) { uint8 identifier; if (_gameIdentifier == 1) { // must be mob Genesis.safeTransferFrom(_creator, address(this), _ids[i]); OriginalRunnerOwner[_ids[i]] = _creator; numRunnersStaked++; identifier = 1; emit RunnerReceived(_creator, _ids[i]); } else if (_gameIdentifier == 2) { // must be platoon Genesis.safeTransferFrom(_creator, address(this), _ids[i]); OriginalCadetOwner[_ids[i]] = _creator; numCadetsStaked++; identifier = 4; emit CadetReceived(_creator, _ids[i]); } else if (_gameIdentifier == 3) { // must be litter Genesis.safeTransferFrom(_creator, address(this), _ids[i]); OriginalCatOwner[_ids[i]] = _creator; numCatsStaked++; identifier = 10; emit CatReceived(_creator, _ids[i]); } else if (_gameIdentifier == 4) { // must be union IERC721(Genesis).safeTransferFrom(_creator, address(this), _ids[i]); OriginalBakerOwner[_ids[i]] = _creator; numBakersStaked++; identifier = 7; emit BakerReceived(_creator, _ids[i]); } genesisGameIdentifier[_ids[i]] = _gameIdentifier; if (genesisIdentifier[_ids[i]] == 0) { genesisIdentifier[_ids[i]] = identifier; } genesisOwnedIds[_creator][_gameIdentifier].push(_ids[i]); unchecked { i++; } } numGenesisStaked += length; if (_gameIdentifier == 1) { emit MobCreated(_creator, _ids); } else if (_gameIdentifier == 2) { emit PlatoonCreated(_creator, _ids); } else if (_gameIdentifier == 3) { emit LitterCreated(_creator, _ids); } else if (_gameIdentifier == 4) { emit UnionCreated(_creator, _ids); } } function addToGroup(uint16 _id, address _creator, uint8 _gameIdentifier) external onlyGames { if (_gameIdentifier == 1) { // must be mob IERC721(Genesis).safeTransferFrom(_creator, address(this), _id); OriginalRunnerOwner[_id] = _creator; numRunnersStaked++; emit RunnerReceived(_creator, _id); } else if (_gameIdentifier == 2) { // must be platoon IERC721(Genesis).safeTransferFrom(_creator, address(this), _id); OriginalCadetOwner[_id] = _creator; numCadetsStaked++; emit CadetReceived(_creator, _id); } else if (_gameIdentifier == 3) { // must be litter IERC721(Genesis).safeTransferFrom(_creator, address(this), _id); OriginalCatOwner[_id] = _creator; numCatsStaked++; emit CatReceived(_creator, _id); } else if (_gameIdentifier == 4) { // must be union IERC721(Genesis).safeTransferFrom(_creator, address(this), _id); OriginalBakerOwner[_id] = _creator; numBakersStaked++; emit BakerReceived(_creator, _id); } numGenesisStaked++; genesisOwnedIds[_creator][_gameIdentifier].push(_id); if (_gameIdentifier == 1) { if (genesisIdentifier[_id] == 0) { genesisIdentifier[_id] = 1; } emit RunnerAdded(_creator, _id); } else if (_gameIdentifier == 2) { if (genesisIdentifier[_id] == 0) { genesisIdentifier[_id] = 4; } emit CadetAdded(_creator, _id); } else if (_gameIdentifier == 3) { if (genesisIdentifier[_id] == 0) { genesisIdentifier[_id] = 10; } emit CatAdded(_creator, _id); } else if (_gameIdentifier == 4) { if (genesisIdentifier[_id] == 0) { genesisIdentifier[_id] = 7; } emit BakerAdded(_creator, _id); } } function unstakeGroup(address _creator, uint8 _gameIdentifier) external onlyGames { emit GroupUnstaked(_creator, _gameIdentifier, uint80(block.timestamp)); } // ************ BULLRUN GAME FUNCTIONS function getBullOwner(uint16 _id) external view returns (address) { return OriginalBullOwner[_id]; } function getMatadorOwner(uint16 _id) external view returns (address) { return OriginalMatadorOwner[_id]; } function getRunnerOwner(uint16 _id) external view returns (address) { return OriginalRunnerOwner[_id]; } function matadorCount() public view returns (uint16) { return uint16(stakedIds[1].length); } function bullCount() public view returns (uint16) { return numBullsStaked; } function runnerCount() public view returns (uint16) { return numRunnersStaked; } // ************ MOONFORCE GAME FUNCTIONS function getCadetOwner(uint16 _id) external view returns (address) { return OriginalCadetOwner[_id]; } function getAlienOwner(uint16 _id) external view returns (address) { return OriginalAlienOwner[_id]; } function getGeneralOwner(uint16 _id) external view returns (address) { return OriginalGeneralOwner[_id]; } function cadetCount() external view returns (uint16) { return numCadetsStaked; } function alienCount() external view returns (uint16) { return uint16(stakedIds[2].length); } function generalCount() external view returns (uint16) { return numGeneralsStaked; } // ************ DOGE WORLD GAME FUNCTIONS function getCatOwner(uint16 _id) external view returns (address) { return OriginalCatOwner[_id]; } function getDogOwner(uint16 _id) external view returns (address) { return OriginalDogOwner[_id]; } function getVetOwner(uint16 _id) external view returns (address) { return OriginalVetOwner[_id]; } function catCount() external view returns (uint16) { // return uint16(catIds.length()); return numCatsStaked; } function dogCount() external view returns (uint16) { // return uint16(dogIds.length()); return numDogsStaked; } function vetCount() external view returns (uint16) { return uint16(stakedIds[3].length); } // ************ PYE MARKET GAME FUNCTIONS function getBakerOwner(uint16 _id) external view returns (address) { return OriginalBakerOwner[_id]; } function getFoodieOwner(uint16 _id) external view returns (address) { return OriginalFoodieOwner[_id]; } function getShopOwnerOwner(uint16 _id) external view returns (address) { return OriginalShopOwnerOwner[_id]; } function bakerCount() external view returns (uint16) { return numBakersStaked; } function foodieCount() external view returns (uint16) { return numFoodiesStaked; } function shopOwnerCount() external view returns (uint16) { return uint16(stakedIds[4].length); } function setGameContract(address _contract, bool flag) external onlyOwner { gameContracts[_contract] = flag; } // ************ ALPHA AND RAT COUNT *************** function alphaCount(uint8 _gameIdentifier) external view returns (uint16) { return uint16(alphaIds[_gameIdentifier].length); } function allAlphaCount() external view returns (uint16 count) { count += uint16(alphaIds[1].length); count += uint16(alphaIds[2].length); count += uint16(alphaIds[3].length); count += uint16(alphaIds[4].length); count += uint16(alphaIds[5].length); } function ratCount() external view returns (uint16) { return numRatsStaked; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; interface IGenesis { function walletOfOwner(address _owner) external view returns (uint256[] memory); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; interface ITopia { function burn(uint256 _amount) external; function mint(address _to, uint256 _amount) external; function burnFrom(address _from, uint256 _amount) external; function decimals() external pure returns (uint8); function balanceOf(address owner) external view returns (uint); function updateOriginAccess() external; function transferFrom(address sender, address recipient, uint256 amount) external returns(bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./extensions/IERC721Metadata.sol"; import "../../utils/Address.sol"; import "../../utils/Context.sol"; import "../../utils/Strings.sol"; import "../../utils/introspection/ERC165.sol"; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: address zero is not a valid owner"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: invalid token ID"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { _requireMinted(tokenId); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not token owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _safeTransfer(from, to, tokenId, data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { /// @solidity memory-safe-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; import "../IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
{ "optimizer": { "enabled": true, "runs": 999 }, "viaIR": true, "evmVersion": "istanbul", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_topia","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_originalOwner","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"AlienReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_returnee","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"AlienReturned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_originalOwner","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"AlphaReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_originalOwner","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"AlphaReturned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"BakerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_originalOwner","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"BakerReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_returnee","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"BakerReturned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_originalOwner","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"BullReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_returnee","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"BullReturned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"CadetAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_originalOwner","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"CadetReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_returnee","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"CadetReturned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"CatAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_originalOwner","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"CatReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_returnee","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"CatReturned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_originalOwner","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"DogReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_returnee","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"DogReturned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_originalOwner","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"FoodieReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_returnee","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"FoodieReturned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"GeneralMigrated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_originalOwner","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"GeneralReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_returnee","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"GeneralReturned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_unstaker","type":"address"},{"indexed":false,"internalType":"uint8","name":"_gameId","type":"uint8"},{"indexed":false,"internalType":"uint80","name":"timestamp","type":"uint80"}],"name":"GroupUnstaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_creator","type":"address"},{"indexed":false,"internalType":"uint16[]","name":"cats","type":"uint16[]"}],"name":"LitterCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"MatadorMigrated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_originalOwner","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"MatadorReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_returnee","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"MatadorReturned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_creator","type":"address"},{"indexed":false,"internalType":"uint16[]","name":"runners","type":"uint16[]"}],"name":"MobCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_thief","type":"address"},{"indexed":true,"internalType":"address","name":"_victim","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"NFTStolen","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_creator","type":"address"},{"indexed":false,"internalType":"uint16[]","name":"cadets","type":"uint16[]"}],"name":"PlatoonCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_originalOwner","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"RatReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_originalOwner","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"RatReturned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"RunnerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_originalOwner","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"RunnerReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_returnee","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"RunnerReturned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"ShopOwnerMigrated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_originalOwner","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"ShopOwnerReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_returnee","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"ShopOwnerReturned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"earned","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"blockNum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timeStamp","type":"uint256"}],"name":"TopiaClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_creator","type":"address"},{"indexed":false,"internalType":"uint16[]","name":"bakers","type":"uint16[]"}],"name":"UnionCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"VetMigrated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_originalOwner","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"VetReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_returnee","type":"address"},{"indexed":false,"internalType":"uint16","name":"_id","type":"uint16"}],"name":"VetReturned","type":"event"},{"inputs":[],"name":"Alpha","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Genesis","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GenesisInterface","outputs":[{"internalType":"contract IGenesis","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TopiaInterface","outputs":[{"internalType":"contract ITopia","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Wastelands","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_id","type":"uint16"},{"internalType":"address","name":"_creator","type":"address"},{"internalType":"uint8","name":"_gameIdentifier","type":"uint8"}],"name":"addToGroup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"alienCount","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allAlphaCount","outputs":[{"internalType":"uint16","name":"count","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_gameIdentifier","type":"uint8"}],"name":"alphaCount","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"alphaGameIdentifier","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bakerCount","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"_idNumbers","type":"uint16[]"},{"internalType":"uint8[]","name":"_types","type":"uint8[]"}],"name":"batchSetGenesisIdentifier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bullCount","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cadetCount","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"catCount","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"_ids","type":"uint16[]"},{"internalType":"address","name":"_creator","type":"address"},{"internalType":"uint8","name":"_gameIdentifier","type":"uint8"}],"name":"createGroup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devRescueEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dogCount","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_id","type":"uint16"},{"internalType":"address","name":"_account","type":"address"}],"name":"emergencyRescueAlpha","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_id","type":"uint16"},{"internalType":"address","name":"_account","type":"address"}],"name":"emergencyRescueGenesis","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_id","type":"uint16"},{"internalType":"address","name":"_account","type":"address"}],"name":"emergencyRescueRat","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"foodieCount","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"generalCount","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"genesisIdentifier","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_id","type":"uint16"}],"name":"getAlienOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_id","type":"uint16"}],"name":"getBakerOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_id","type":"uint16"}],"name":"getBullOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_id","type":"uint16"}],"name":"getCadetOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_id","type":"uint16"}],"name":"getCatOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_id","type":"uint16"}],"name":"getDogOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_id","type":"uint16"}],"name":"getFoodieOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_id","type":"uint16"}],"name":"getGeneralOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_id","type":"uint16"}],"name":"getMatadorOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_id","type":"uint16"}],"name":"getRunnerOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_id","type":"uint16"}],"name":"getShopOwnerOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"getUserAlphaStaked","outputs":[{"internalType":"uint16[]","name":"stakedAlphas","type":"uint16[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"getUserGenesisStaked","outputs":[{"internalType":"uint16[]","name":"stakedGenesis","type":"uint16[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"getUserRatStaked","outputs":[{"internalType":"uint16[]","name":"stakedRats","type":"uint16[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint8","name":"game","type":"uint8"}],"name":"getUserStakedAlphaGame","outputs":[{"internalType":"uint16[]","name":"stakedAlphas","type":"uint16[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint8","name":"game","type":"uint8"}],"name":"getUserStakedGenesisGame","outputs":[{"internalType":"uint16[]","name":"stakedGenesis","type":"uint16[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_id","type":"uint16"}],"name":"getVetOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"matadorCount","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_id","type":"uint16"},{"internalType":"address","name":"_originalOwner","type":"address"},{"internalType":"uint8","name":"_gameId","type":"uint8"},{"internalType":"bool","name":"returningFromWastelands","type":"bool"}],"name":"migrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"numAlphasStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numGenesisStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numRatsStaked","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"pay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ratCount","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_originalOwner","type":"address"},{"internalType":"uint16[]","name":"_ids","type":"uint16[]"},{"internalType":"uint8[]","name":"identifiers","type":"uint8[]"},{"internalType":"uint8","name":"_gameIdentifier","type":"uint8"}],"name":"receieveManyGenesis","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_originalOwner","type":"address"},{"internalType":"uint16","name":"_id","type":"uint16"},{"internalType":"uint8","name":"_gameIdentifier","type":"uint8"}],"name":"receiveAlpha","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_originalOwner","type":"address"},{"internalType":"uint16","name":"_id","type":"uint16"}],"name":"receiveRat","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_returnee","type":"address"},{"internalType":"uint16","name":"_id","type":"uint16"},{"internalType":"uint8","name":"_gameIdentifier","type":"uint8"}],"name":"returnAlphaToOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_returnee","type":"address"},{"internalType":"uint16","name":"_id","type":"uint16"},{"internalType":"uint8","name":"identifier","type":"uint8"},{"internalType":"uint8","name":"_gameIdentifier","type":"uint8"}],"name":"returnGenesisToOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_returnee","type":"address"},{"internalType":"uint16","name":"_id","type":"uint16"}],"name":"returnRatToOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"runnerCount","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setDevRescueEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"setGameContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_genesis","type":"address"}],"name":"setGenesis","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setRescueEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_topia","type":"address"}],"name":"setTopia","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shopOwnerCount","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_id","type":"uint16"},{"internalType":"uint256","name":"seed","type":"uint256"},{"internalType":"uint8","name":"_gameId","type":"uint8"},{"internalType":"uint8","name":"identifier","type":"uint8"},{"internalType":"address","name":"_victim","type":"address"}],"name":"stealGenesis","outputs":[{"internalType":"address","name":"thief","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_id","type":"uint16"},{"internalType":"uint256","name":"seed","type":"uint256"},{"internalType":"uint8","name":"_gameId","type":"uint8"},{"internalType":"address","name":"_victim","type":"address"},{"internalType":"bool","name":"returningFromWastelands","type":"bool"}],"name":"stealMigratingGenesis","outputs":[{"internalType":"address","name":"thief","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalHolderTOPIA","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTOPIAEarned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_creator","type":"address"},{"internalType":"uint8","name":"_gameIdentifier","type":"uint8"}],"name":"unstakeGroup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vetCount","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080346200010757601f620060c938819003918201601f19168301916001600160401b038311848410176200010c578084926020946040528339810103126200010757516001600160a01b039081811690819003620001075760005460018060a01b0319903382821617600055604051933391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a373810fedb4a6927d02a6427f7441f6110d7a1096d58160035416176003557396af517c414b3726c1b2ecc744ebf9d292dcbf60816004541617600455730b21144dbf11feb286d24cd42a7c3b0f90c32ac88160055416176005556002541617600255615fa69081620001238239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe608080604052600436101561001357600080fd5b600090813560e01c90816302e70ab8146159de57508063030f8a09146159895780630adc84b01461528457806314b7f4c51461525e578063150b7a021461519e57806316372ab0146151795780632145cee51461513d57806324a811651461510157806327b3c190146150da5780632c8499c514613a755780632e02e658146150b35780632e19e73f14614eb4578063333dab5614614e0657806337d4fc8414614ddf57806339db714f14614dbc578063410e2b2914614d81578063438531f614614d55578063466bed6914614d2e5780634dd306cf14614cf25780634e5a18f91461480d578063516d60bc146147e85780635190357b146146f6578063588604f8146146d45780635e09f8741461469557806361888e8914614659578063624f99321461461d578063645b9fde146145e15780636a5085a9146145a55780636bf6eaff1461457e5780636e03c1761461403557806370a0823114613f75578063715018a614613f1b578063758854a214613d615780637653100814613d2c5780637804eb1f14613cf0578063795d336714613cd257806379cc679014613c3e5780637a6cae4e14613c025780638833241514613be05780638d89af4614613abd5780638da5cb5b14613a9757806391e4d98f14613a7557806391e761ca14612e425780639762942414612e0a5780639b479cfe14612dce5780639c312dc314612db15780639ddcba1d14612c84578063a3509fc814612c48578063a5e8364714612c1c578063a697361214612ac5578063a6cab4cd14612383578063a8ed28b4146122c2578063aac33aad1461229d578063bd48652e1461227f578063bd82fc78146117a4578063be5db8e414611782578063befec7051461165e578063c03f2ca614611622578063c407687614611506578063c6f654a014611481578063d8689691146113d3578063d885ce61146113a7578063d8e08e571461131d578063db1f5196146112fb578063e72f7cd5146112c5578063eb14b3531461127c578063f2fde38b146111a2578063f49d3955146110f8578063f5afe20f146110d3578063f70956c714610fd2578063f754ffa6146109f9578063f80b988c146103b9578063fb10c3d21461037d5763fd95856d1461034f57600080fd5b3461037a578060031936011261037a5761ffff604082600360209452601b8452205416604051908152f35b80fd5b503461037a57602036600319011261037a576001600160a01b03604060209261ffff6103a7615a11565b16815260138452205416604051908152f35b503461037a57608036600319011261037a576103d3615a11565b6103db615a58565b906103e4615a7d565b6064358015908115036109f45733855260ff6020926007845261040c82604089205416615bd9565b169060019182811015806109e9575b156109a5578083036107665750801561070f5761ffff8416808752600984527f10aae1ead4e36e8b41865adb3d322a33942fda91e1cb168046dd1c972ad0cc5a8460408920926001600160a01b03891693846001600160a01b0319825416179055604051908152a25b1561054857506001600160a01b03848160035416803b1561054457604051632142170760e11b81526001600160a01b038716600482015230602482015261ffff861660448201529082908290606490829084905af1801561053957610521575b505061051e9361ffff841686526024835260408620600560ff19825416179055168452601c81526040842090600585525260408320615d13565b80f35b61052a90615aad565b6105355784386104e4565b8480fd5b6040513d84823e3d90fd5b5080fd5b90916001600160a01b036003918682845416803b1561054457604051632142170760e11b81523060048201526001600160a01b038916602482015261ffff841660448201529082908290606490829084905af18015610539576106f7575b505061ffff939193809116938488526024968787526040892060ff198154169055169283600052601c94858752604060002097600598896000528852604060002054916000955b838710610603575b505050505050505050505080f35b87600052888a5260406000208b6000528a528186610625896040600020615cdc565b905490881b1c16036106ee57505085600052868852604060002089600052885260406000209060001983019283116106da57509161066b6106ae95949261068e94615cdc565b9054911b1c16918460005285875260406000208860005287526040600020615cdc565b90919082549060031b9161ffff9283811b93849216901b16911916179055565b6000528152604060002091600052526106ca6040600020615d88565b38808080808080808080806105f5565b634e487b7160e01b60005260116004526000fd5b958601956105ed565b61070090615aad565b61070b5786386105a6565b8680fd5b61ffff841680875260098452604087206001600160a01b031981541690556040519081527f65d7389b4b92a26ff3bda27f72e7035cfd365bdbeb67007bcdb592126acefd2c846001600160a01b03881692a2610484565b60028103610827575080156107d05761ffff8416808752600f84527f46462c42057db0f7a9f7c9f2b722d215f11ca2a0f5d38132b877843437a3b3c78460408920926001600160a01b03891693846001600160a01b0319825416179055604051908152a25b610484565b61ffff8416808752600f8452604087206001600160a01b031981541690556040519081527f1a91fc99f7ba6670afa9040ced9846e2e4ae5773fbd2d747eda6c2f5d8633c31846001600160a01b03881692a2610484565b600381036108e7575080156108905761ffff8416808752601384527fff9aa68430939f0c14075554dd842fa38c14c98977ca2a8a8759d2d9b7e2e8f78460408920926001600160a01b03891693846001600160a01b0319825416179055604051908152a2610484565b61ffff841680875260138452604087206001600160a01b031981541690556040519081527f9a55333272105310d1eac580297eb36abed153aeff87b7e87a264f62aac44850846001600160a01b03881692a2610484565b6004036107cb57801561094e5761ffff8416808752601784527fdd39053acc4ab51c644b0c68af41f73ce1fb879c3dd04e461fc66cd17affce778460408920926001600160a01b03891693846001600160a01b0319825416179055604051908152a2610484565b61ffff841680875260178452604087206001600160a01b031981541690556040519081527f0e86cc5d4242083c8e47d8d91f8b65ad3b640a0888c9c25da628544950cdef53846001600160a01b03881692a2610484565b6064846040519062461bcd60e51b82526004820152600f60248201527f496e76616c69642067616d6520696400000000000000000000000000000000006044820152fd5b50600481111561041b565b600080fd5b503461037a57606036600319011261037a57610a13615a11565b610a1b615a58565b90610a24615a7d565b3384526020906007825260ff8091610a4182604089205416615bd9565b16600181149485600014610cf1576001600160a01b0390878260035416803b1561054457604051632142170760e11b81526001600160a01b038416600482015230602482015261ffff891660448201529082908290606490829084905af1801561053957610cd9575b50506001600160a01b03917f3b08482ce1d83b0dee10c90274f7810c243fbed81e317303e9d4122e4c5fde248661ffff808a1690818d52600b835260408d2094861694856001600160a01b031982541617905560085490610b0c818316615dd3565b169061ffff191617600855604051908152a25b610b2a601f54615ccd565b601f551694858752601c845260408720826000528452610b4e856040600020615d13565b15610bac575061ffff7f6e4545ce7f7c3065c966e407a27add18a2d3340269a5dad3ddcd827a71996fe29316908186526006835260408620541615610b98575b604051908152a280f35b60408520805460ff19166001179055610b8e565b60028103610c0c575061ffff7f962a0bf2885f7d878689e8c2eb763bb44b7c19948ae428235e045cb084f7656f9316908186526006835260408620541615610bf857604051908152a280f35b60408520805460ff19166004179055610b8e565b60038103610c6c575061ffff7f177e7001afeb32d52fe86555fbf04a17d9d818e7f43c0df56227c119181a468f9316908186526006835260408620541615610c5857604051908152a280f35b60408520805460ff1916600a179055610b8e565b600414610c7b575b5050505080f35b61ffff7fba4cbf5fb6c4f19c4f9babe604b3c642f71e99006a1b9023bd2df354cb457e759316908186526006835260408620541615610cc5575b604051908152a238808080610c74565b60408520805460ff19166007179055610cb5565b610ce290615aad565b610ced578738610aaa565b8780fd5b60028203610de1576001600160a01b0390878260035416803b1561054457604051632142170760e11b81526001600160a01b038416600482015230602482015261ffff891660448201529082908290606490829084905af1801561053957610dcd575b50506001600160a01b03917f12874fc41971beedec32d7f3f5b92907f7baf9c4b390743a7c6f6399946fdf808661ffff808a1690818d52600d835260408d2094861694856001600160a01b0319825416179055600c5490610db6818316615dd3565b169061ffff191617600c55604051908152a2610b1f565b610dd690615aad565b610ced578738610d54565b60038203610ed1576001600160a01b0390878260035416803b1561054457604051632142170760e11b81526001600160a01b038416600482015230602482015261ffff891660448201529082908290606490829084905af1801561053957610ebd575b50506001600160a01b03917fad2ada2b0e0da621bbd929f37cad7f2c23b91c1307a6ef37587abe30b665cffa8661ffff808a1690818d526011835260408d2094861694856001600160a01b031982541617905560105490610ea6818316615dd3565b169061ffff191617601055604051908152a2610b1f565b610ec690615aad565b610ced578738610e44565b60048214610ee8575b6001600160a01b0390610b1f565b6001600160a01b0390878260035416803b1561054457604051632142170760e11b81526001600160a01b038416600482015230602482015261ffff891660448201529082908290606490829084905af1801561053957610fbe575b50506001600160a01b03917f5c25e0d917fafc03501d2c33e030668127f9fb3205f83c3a86f6fbd4d70504df8661ffff808a1690818d526015835260408d2094861694856001600160a01b031982541617905560145490610fa5818316615dd3565b169061ffff191617601455604051908152a29050610eda565b610fc790615aad565b610ced578738610f43565b503461037a57604036600319011261037a5767ffffffffffffffff6004358181116110cf57611005903690600401615b38565b916024359081116110cb5761101e903690600401615b38565b9190611028615b81565b82840361053557845b61ffff9081811690868210156110c75760ff9182611058611053838a89615c47565b615c6d565b161515806110ad575b156110a9576001928461108b61108661107e611053868d8c615c47565b948c8b615c47565b615c7b565b168a52600660205260408a20911660ff198254161790550116611031565b8880fd5b50600c836110bf611053848b8a615c47565b161115611061565b8780f35b8380fd5b8280fd5b503461037a578060031936011261037a57602061ffff60145460101c16604051908152f35b503461037a578060031936011261037a5760018152602090601a825261ffff908160408220541682811161118e579082604061117361115f61114b6111859660028752601a8a5285858820541690615f5a565b60038652601a895284848720541690615f5a565b60048552601a885283838620541690615f5a565b9260058152601a875220541690615f5a565b60405191168152f35b602482634e487b7160e01b81526011600452fd5b503461037a57602036600319011261037a576111bc615a42565b6111c4615b81565b6001600160a01b0380911690811561121257600054826001600160a01b0319821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a380f35b608460405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b503461037a57602036600319011261037a576001600160a01b0361129e615a42565b6112a6615b81565b166001600160a01b031981816003541617600355600154161760015580f35b503461037a57602036600319011261037a5760ff604060209261ffff6112e9615a11565b16815260238452205416604051908152f35b503461037a578060031936011261037a57602061ffff600c5416604051908152f35b503461037a57602080600319360112610544576001600160a01b03611340615a42565b1691828152601e80835260408220549261135984615c9b565b94835b85811061137557604051806113718982615af9565b0390f35b60019082865284845261ffff61138e8260408920615cdc565b90549060031b1c166113a0828a615cff565b520161135c565b503461037a578060031936011261037a5761ffff604082600160209452601b8452205416604051908152f35b503461037a57604036600319011261037a576113ed615a42565b906001600160a01b036113fe615a8d565b921691828252601d9160209083825260ff604082209316928360005282526040600020549361142c85615c9b565b95825b86811061144457604051806113718a82615af9565b6001908285528386526040852087600052865261ffff611468826040600020615cdc565b90549060031b1c1661147a828b615cff565b520161142f565b503461037a57604036600319011261037a5761149b615a42565b7fd77603b1586d29d109a38f629a93cb445a0fe05dbda55a782d5d43e53df04d7960406001600160a01b036114ce615a8d565b9333865260076020526114e660ff8488205416615bd9565b60ff83519516855269ffffffffffffffffffff421660208601521692a280f35b503461037a57604036600319011261037a57611520615a42565b60243590338352600760205261153c60ff604085205416615bd9565b6001600160a01b0390838260025416803b15610544576040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602481018690529082908290604490829084905af180156105395761160e575b50507ff15ef988e0cab7863e51b16028ffd8ac865deaa333c9a9596b702ee6692e10819160609116928385526022602052604085206115e7828254615c24565b90556115f581602554615c24565b602555604051908152436020820152426040820152a280f35b61161790615aad565b6110cb5783386115a7565b503461037a57602036600319011261037a576001600160a01b03604060209261ffff61164c615a11565b16815260178452205416604051908152f35b503461037a576020908160031936011261037a5761167a615a42565b9181906001600160a01b0360019416915b60ff8516600581116116c8576116c2916116bc91858752601c85526040872090600052845260406000205490615c24565b94615c8a565b9361168b565b50916116d48493615c9b565b839060015b60ff81166005811161177457848752601c808752604088208260005287526040600020549188915b83831061171a575050505061171590615c8a565b6116d9565b919561176261176891898c9b969a94979b5284865260408c2087600052865261ffff61174a8a6040600020615cdc565b90549060031b1c1661175c828a615cff565b52615ccd565b96615ccd565b91979390969297611701565b604051806113718582615af9565b503461037a578060031936011261037a57602061ffff60085416604051908152f35b503461037a57608036600319011261037a576117be615a42565b67ffffffffffffffff906024358281116110cb57366023820112156110cb578060040135906117ec82615b69565b916117fa6040519384615ad7565b8083526024602084019160051b8301019136831161070b57602401905b828210612267575050506044359283116110cb57366023840112156110cb57826004013561184481615b69565b936118526040519586615ad7565b8185526024602086019260051b8201019036821161070b579060248794939201915b81831061224457505050611886615a9d565b338352600760205261189e60ff604085205416615bd9565b60ff16825b825181101561223057600160ff6118ba8389615cff565b511603611aa55761ffff806118cf8386615cff565b51168552600b602052604085206001600160a01b0387166001600160a01b03198254161790556008805482611905818316615dd3565b169061ffff19161790556119198285615cff565b51166040519081527f3b08482ce1d83b0dee10c90274f7810c243fbed81e317303e9d4122e4c5fde2460206001600160a01b03881692a25b61ffff61195e8285615cff565b5116845260246020526040842060ff1990838282541617905561ffff6119848386615cff565b5116855260068060205260ff60408720541615611a70575b50506001600160a01b0385168452601c60205260408420826000526020526119d7604060002061ffff6119cf8487615cff565b511690615d13565b6001600160a01b036003541661ffff6119f08386615cff565b511690803b15611a6c57604051632142170760e11b81526001600160a01b038816600482015230602482015261ffff92909216604483015285908290606490829084905af1908115611a61578591611a4d575b50506001016118a3565b611a5690615aad565b6110cb578338611a43565b6040513d87823e3d90fd5b8580fd5b60ff611a7c848a615cff565b51169061ffff611a8c8588615cff565b511687526020526040862091825416179055388061199c565b60028060ff611ab4848a615cff565b511603611b5c575061ffff80611aca8386615cff565b51168552600a602052604085206001600160a01b0387166001600160a01b03198254161790556008805463ffff00006010611b088584831c16615dd3565b901b169063ffff00001916179055611b208285615cff565b51166040519081527f4e0d1b237501159b8d5c2a1777b73a3090fd95d5a0de2806ddd8ca535e447f9360206001600160a01b03881692a2611951565b60038060ff611b6b858b615cff565b511603611c0957505061ffff80611b828386615cff565b511685526009602052604085206001600160a01b0387166001600160a01b031982541617905560018552601b602052611bc360408620826119cf8588615cff565b611bcd8285615cff565b51166040519081527f77268c18aa294555f638ca631483843e5e99f579965e7ab82ad8dc9c92622d0b60206001600160a01b03881692a2611951565b600460ff611c17858b615cff565b511603611cb457505061ffff80611c2e8386615cff565b51168552600d602052604085206001600160a01b0387166001600160a01b0319825416179055600c805482611c64818316615dd3565b169061ffff1916179055611c788285615cff565b51166040519081527f12874fc41971beedec32d7f3f5b92907f7baf9c4b390743a7c6f6399946fdf8060206001600160a01b03881692a2611951565b600560ff611cc2858b615cff565b511603611d5e575061ffff9081611cd98487615cff565b51168652600e602052604086206001600160a01b0388166001600160a01b03198254161790558552601b602052611d1860408620826119cf8588615cff565b611d228285615cff565b51166040519081527f43cf9d3931bdfd22950a871bb4f31d7c0ab0f71c1a3a0236ce2f883ead41ee7a60206001600160a01b03881692a2611951565b9050600660ff611d6e848a615cff565b511603611e16575061ffff80611d848386615cff565b51168552600f602052604085206001600160a01b0387166001600160a01b0319825416179055600c805463ffff00006010611dc28584831c16615dd3565b901b169063ffff00001916179055611dda8285615cff565b51166040519081527fa8477a27ecdfcfd7615fbe783fe10961e52aba38d67c0f8224df7e918bb3370f60206001600160a01b03881692a2611951565b600760ff611e24848a615cff565b511603611ec0575061ffff80611e3a8386615cff565b511685526015602052604085206001600160a01b0387166001600160a01b03198254161790556014805482611e70818316615dd3565b169061ffff1916179055611e848285615cff565b51166040519081527f5c25e0d917fafc03501d2c33e030668127f9fb3205f83c3a86f6fbd4d70504df60206001600160a01b03881692a2611951565b600860ff611ece848a615cff565b511603611f76575061ffff80611ee48386615cff565b511685526016602052604085206001600160a01b0387166001600160a01b03198254161790556014805463ffff00006010611f228584831c16615dd3565b901b169063ffff00001916179055611f3a8285615cff565b51166040519081527fa105eb1c1aeb2a96bd4e193c3a9b3bf73f2a8a1181b1b7e6dacda6c6a9a3554960206001600160a01b03881692a2611951565b600960ff611f84848a615cff565b511603612021575061ffff80611f9a8386615cff565b511685526017602052604085206001600160a01b0387166001600160a01b031982541617905560048552601b602052611fdb60408620826119cf8588615cff565b611fe58285615cff565b51166040519081527fb582b14f2ac3955bf383ef03f14b6d49c4740aaf044a02486db8aa68b728595e60206001600160a01b03881692a2611951565b600a60ff61202f848a615cff565b5116036120cb575061ffff806120458386615cff565b511685526011602052604085206001600160a01b0387166001600160a01b0319825416179055601080548261207b818316615dd3565b169061ffff191617905561208f8285615cff565b51166040519081527fad2ada2b0e0da621bbd929f37cad7f2c23b91c1307a6ef37587abe30b665cffa60206001600160a01b03881692a2611951565b600b60ff6120d9848a615cff565b51160361217f575061ffff806120ef8386615cff565b511685526012602052604085206001600160a01b0387166001600160a01b03198254161790556010805463ffff000061212b8483851c16615dd3565b831b169063ffff000019161790556121438285615cff565b51166040519081527fdf31d7124bfd2f8787d236d3e4d5545a7b4de7ed54a53733bcec0a941883d00e60206001600160a01b03881692a2611951565b600c60ff61218d848a615cff565b51161461219b575b50611951565b61ffff90816121aa8487615cff565b511686526013602052604086206001600160a01b0388166001600160a01b03198254161790558552601b6020526121e960408620826119cf8588615cff565b6121f38285615cff565b51166040519081527fabc0672b455df3350544c04ba51f9896a8c558f26a9c99ac08f286aae725459960206001600160a01b03881692a238612195565b8361223e8451601f54615c24565b601f5580f35b9091809394503560ff811681036109f45781528693926020908101929101611874565b6020809161227484615a33565b815201910190611817565b503461037a578060031936011261037a576020602554604051908152f35b503461037a578060031936011261037a57602061ffff60105460101c16604051908152f35b503461037a57604036600319011261037a57806122dd615a11565b6122e5615a58565b60ff60265460081c1680612370575b1561236c576001600160a01b036003541691823b1561236757604051632142170760e11b81523060048201526001600160a01b03909216602483015261ffff1660448201529082908290818381606481015b03925af18015610539576123575750f35b61236090615aad565b61037a5780f35b505050fd5b5050fd5b506001600160a01b0383541633146122f4565b503461037a57606036600319011261037a5760043567ffffffffffffffff8111610544576123b5903690600401615b38565b906123be615a58565b916123c7615a7d565b33855260076020526123df60ff604087205416615bd9565b845b61ffff8316811015612978578560ff83166001036125dd5750856001600160a01b0360035416612415611086848789615c47565b90803b156110cf57604051632142170760e11b81526001600160a01b038916600482015230602482015261ffff92909216604483015282908290606490829084905af18015610539576125c9575b50508061ffff6124796110866001948789615c47565b168752600b602052604087206001600160a01b0387166001600160a01b03198254161790556008805461ffff6124b0818316615dd3565b169061ffff1916179055816124c9611086838789615c47565b61ffff604051911681527f3b08482ce1d83b0dee10c90274f7810c243fbed81e317303e9d4122e4c5fde2460206001600160a01b038a1692a25b61ffff61251461108684888a615c47565b16885260246020526040882060ff199060ff86168282541617905561ffff61254061108685898b615c47565b16895260068060205260ff60408b2054161561259b575b5050506001600160a01b0386168752601c6020526040872060ff8416600052602052612595604060002061258f61108684888a615c47565b90615d13565b016123e1565b61ffff6125ac611086868a8c615c47565b168a5260205260ff60408a20921690825416179055388080612557565b6125d290615aad565b611a6c578538612463565b60ff831660020361270b5750856001600160a01b0360035416612604611086848789615c47565b90803b156110cf57604051632142170760e11b81526001600160a01b038916600482015230602482015261ffff92909216604483015282908290606490829084905af18015610539576126f7575b50508061ffff6126686110866001948789615c47565b168752600d602052604087206001600160a01b0387166001600160a01b0319825416179055600c805461ffff61269f818316615dd3565b169061ffff191617905560046126b9611086838789615c47565b61ffff604051911681527f12874fc41971beedec32d7f3f5b92907f7baf9c4b390743a7c6f6399946fdf8060206001600160a01b038a1692a2612503565b61270090615aad565b611a6c578538612652565b86600360ff8516810361283a576001600160a01b039192505416612733611086848789615c47565b90803b156110cf57604051632142170760e11b81526001600160a01b038916600482015230602482015261ffff92909216604483015282908290606490829084905af1801561053957612826575b50508061ffff6127976110866001948789615c47565b1687526011602052604087206001600160a01b0387166001600160a01b03198254161790556010805461ffff6127ce818316615dd3565b169061ffff1916179055600a6127e8611086838789615c47565b61ffff604051911681527fad2ada2b0e0da621bbd929f37cad7f2c23b91c1307a6ef37587abe30b665cffa60206001600160a01b038a1692a2612503565b61282f90615aad565b611a6c578538612781565b600460ff861614612851575b505090600191612503565b6001600160a01b03919250541661286c611086848789615c47565b90803b156110cf57604051632142170760e11b81526001600160a01b038916600482015230602482015261ffff92909216604483015282908290606490829084905af1801561053957612964575b50508061ffff6128d06110866001948789615c47565b1687526015602052604087206001600160a01b0387166001600160a01b03198254161790556014805461ffff612907818316615dd3565b169061ffff19161790556007612921611086838789615c47565b61ffff604051911681527f5c25e0d917fafc03501d2c33e030668127f9fb3205f83c3a86f6fbd4d70504df60206001600160a01b038a1692a29091508638612846565b61296d90615aad565b611a6c5785386128ba565b5092919261298c61ffff8316601f54615c24565b601f5560ff81166001036129dd57507fa8da7b1e0d970b1eafd389eff60f1af7bc99d29f12e6251e77bc1ad40fa79786916129d76001600160a01b0392604051938493169583615f13565b0390a280f35b60ff8116600203612a2557507f060119b04c405bda169a7f1d2fed0a8d391cb7ce23c2bd031185475978e6a7a2916129d76001600160a01b0392604051938493169583615f13565b60ff8116600303612a6d57507f655f67d36ab8e6c4bdda185fc5bf82b880bac26ec421c4fc741ff0e57fc36232916129d76001600160a01b0392604051938493169583615f13565b60ff16600414612a7e575b50505080f35b7f062c99098d2ce454eea75921396a62949c49c49d493384ca7644d329101b57b191612aba6001600160a01b0392604051938493169583615f13565b0390a2388080612a78565b503461037a57604036600319011261037a5780612ae0615a11565b612ae8615a58565b60265460ff8160081c1680612c09575b15612b5e57506001600160a01b036005541691823b1561236757604051632142170760e11b81523060048201526001600160a01b03909216602483015261ffff1660448201529082908290818381606481015b03925af180156105395761235757505080f35b60ff1680612be7575b612b715750505080f35b6001600160a01b036005541691823b1561236757604051632142170760e11b81523060048201526001600160a01b03909216602483015261ffff1660448201529082908290818381606481015b03925af1801561053957612bd3575b80612a78565b612bdc90615aad565b61037a578038612bcd565b5061ffff8216835260196020526001600160a01b036040842054163314612b67565b506001600160a01b038454163314612af8565b503461037a578060031936011261037a5761ffff604082600260209452601b8452205416604051908152f35b503461037a57602036600319011261037a576001600160a01b03604060209261ffff612c72615a11565b16815260118452205416604051908152f35b503461037a57604036600319011261037a57612c9e615a42565b612ca6615a22565b3383526007602052612cbe60ff604085205416615bd9565b6001600160a01b0390838260055416803b1561054457604051632142170760e11b81526001600160a01b038616600482015230602482015261ffff841660448201529082908290606490829084905af1801561053957612d9d575b50507f8b6eebbdec11343459b3554f4b96ba6b00fb0f1c9803e175df47bbf4f7e0a0bb91602091612d7961ffff91828116938489526019865260408920971696876001600160a01b0319825416179055868852601e855260408820615d13565b60215490612d88818316615dd3565b169061ffff191617602155604051908152a280f35b612da690615aad565b6110cb578338612d19565b503461037a578060031936011261037a5760208054604051908152f35b503461037a57602036600319011261037a576001600160a01b03604060209261ffff612df8615a11565b16815260098452205416604051908152f35b503461037a57602036600319011261037a5760406020916001600160a01b03612e31615a42565b168152602283522054604051908152f35b503461037a57608036600319011261037a57612e5c615a42565b90612e65615a22565b612e6d615a7d565b92612e76615a9d565b9333845260ff60209160078352612e9282604088205416615bd9565b166001808203612fa15750508394612f42917f353dc3aef968a6a73b5fee216416835a4f8cb955339ecd211d9a9e07bdc76bc561ffff91828716808952600b82526001600160a01b0393612ef18560408c205416958916958614615d3d565b818a52600b83526040808b2080546001600160a01b0319169055602484528a20805460ff1916905560085490612f28818316615de6565b169061ffff191617600855604051908152a25b8284615df7565b612f4d601f54615dc6565b601f556001600160a01b036003541691823b1561236757604051632142170760e11b81523060048201526001600160a01b03909216602483015261ffff166044820152908290829081838160648101612346565b600282810361305b575050508394612f42917f7d4e06c18795f0a46e6788c6fb3d66ffd90ecf8977ec9f1e2baa9051eb42eeb161ffff91828716808952600a82526001600160a01b03936130008560408c205416958916958614615d3d565b818a52600a835260408a206001600160a01b031981541690556024835260408a2060ff19815416905563ffff000061303f600854928360101c16615de6565b60101b169063ffff0000191617600855604051908152a2612f3b565b600393928085036131d357505061ffff9283861691828852600984526001600160a01b03946130958660408b205416968816968714615d3d565b83895260098552604089206001600160a01b0319815416905560249081865260408a2060ff19815416905582600052601b938487526040600020546000935b818510613118575b50505050505050917f65d7389b4b92a26ff3bda27f72e7035cfd365bdbeb67007bcdb592126acefd2c869792612f4294604051908152a2612f3b565b85600052868952858885613130886040600020615cdc565b905490871b1c16036131ca5760005286895260406000209060001983019283116106da57509361068e7f65d7389b4b92a26ff3bda27f72e7035cfd365bdbeb67007bcdb592126acefd2c97948e9f9a97946131936131ab95612f429e9c99615cdc565b9054911b1c1691846000528588526040600020615cdc565b60005282526131bd6040600020615d88565b92948194993880806130dc565b909401936130d4565b929390926004810361328457505050508394612f42917ffc6cbfef07cde2a0f8e48ee78e5bcc2c1e67e3d3d384a6098a6a450742263ebd61ffff91828716808952600d82526001600160a01b03936132368560408c205416958916958614615d3d565b818a52600d83526040808b2080546001600160a01b0319169055602484528a20805460ff19169055600c549061326d818316615de6565b169061ffff191617600c55604051908152a2612f3b565b929392600581036133e7575061ffff9384871692838952600e85526001600160a01b03956132bd8760408c205416978916978814615d3d565b848a52600e865260408a206001600160a01b0319815416905560249384875260408b2060ff19815416905583600052601b94858852604060002054906000945b828610613342575b5050505050505050917fb1c64268b67eef6584cea022efe1cfe7314634f05b6f9bb974257bdc0383243f869792612f4294604051908152a2612f3b565b86600052878a528885613359886040600020615cdc565b905490871b1c16036133de57508560005286895260406000209060001983019283116106da57509361068e7fb1c64268b67eef6584cea022efe1cfe7314634f05b6f9bb974257bdc0383243f97948e9f9a97946131936133be95612f429e9c99615cdc565b60005282526133d06040600020615d88565b929481949938808080613305565b809501946132fd565b90979350600681036134a557505084955090612f42917f1a91fc99f7ba6670afa9040ced9846e2e4ae5773fbd2d747eda6c2f5d8633c3161ffff91828716808952600f82526001600160a01b039361344a8560408c205416958916958614615d3d565b818a52600f835260408a206001600160a01b031981541690556024835260408a2060ff19815416905563ffff0000613489600c54928360101c16615de6565b60101b169063ffff0000191617600c55604051908152a2612f3b565b6007810361355257505084955090612f42917f83622d58cf015c18e226a0d9d17619745b99d952a5740e4a60cd8942360c2c6b61ffff91828716808952601582526001600160a01b03936135048560408c205416958916958614615d3d565b818a52601583526040808b2080546001600160a01b0319169055602484528a20805460ff191690556014549061353b818316615de6565b169061ffff191617601455604051908152a2612f3b565b6008810361360c57505084955090612f42917f3fa3aa79eea014342138abcf13a240683fb1a7ec35fdcfc4d3cc0bd7b8c1303061ffff91828716808952601682526001600160a01b03936135b18560408c205416958916958614615d3d565b818a526016835260408a206001600160a01b031981541690556024835260408a2060ff19815416905563ffff00006135f0601454928360101c16615de6565b60101b169063ffff0000191617601455604051908152a2612f3b565b60098103613787575061ffff9687861691828852601784526001600160a01b03986136428a60408b2054169a88169a8b14615d3d565b83895260178552604089206001600160a01b0319815416905560249283865260408a2060ff1981541690556004600052601b93848752604060002054906000945b8286106136c7575b50505050505050957f0e86cc5d4242083c8e47d8d91f8b65ad3b640a0888c9c25da628544950cdef53612f4293928798604051908152a2612f3b565b600460005286895287856136df886040600020615cdc565b905490871b1c160361377e5750600460005285885260406000209060001983019283116106da57509361068e8c9d97947f0e86cc5d4242083c8e47d8d91f8b65ad3b640a0888c9c25da628544950cdef53979461374461375d95612f429d9c99615cdc565b9054911b1c169160046000528487526040600020615cdc565b600460005282526137716040600020615d88565b929881949538808061368b565b80950194613683565b909690600a810361383757505084955090612f42917f3b09adbdbbf3a9a7099a6851c3126ee181d4645531ed78837f2a0c105156231461ffff91828716808952601182526001600160a01b03936137e98560408c205416958916958614615d3d565b818a52601183526040808b2080546001600160a01b0319169055602484528a20805460ff1916905560105490613820818316615de6565b169061ffff191617601055604051908152a2612f3b565b600b81036138f157505084955090612f42917fc7566e16b1dfb6ea96eca0b07ecc81ac60913a7e91a31829e986b65acf3948ca61ffff91828716808952601282526001600160a01b03936138968560408c205416958916958614615d3d565b818a526012835260408a206001600160a01b031981541690556024835260408a2060ff19815416905563ffff00006138d5601054928360101c16615de6565b60101b169063ffff0000191617601055604051908152a2612f3b565b600c14613907575b5050839450612f4290612f3b565b61ffff80861691828852601384526001600160a01b03986139338a60408b2054169a88169a8b14615d3d565b83895260138552604089206001600160a01b0319815416905560249283865260408a2060ff19815416905582600052601b93848752604060002054906000935b8285106139b9575b50505050505050957f9a55333272105310d1eac580297eb36abed153aeff87b7e87a264f62aac44850612f4293928798604051908152a290386138f9565b8560005286895287846139d0876040600020615cdc565b905490891b1c1603613a6c57508460005285885260406000209060001983019283116106da57508b9c969361068e7f9a55333272105310d1eac580297eb36abed153aeff87b7e87a264f62aac448509794613a34612f429c9b9895613a4d95615cdc565b905490861b1c1691846000528588526040600020615cdc565b6000528252613a5f6040600020615d88565b929881949538808061397b565b80940193613973565b503461037a578060031936011261037a57602061ffff60215416604051908152f35b503461037a578060031936011261037a576001600160a01b036020915416604051908152f35b503461037a57604036600319011261037a5780613ad8615a11565b613ae0615a58565b60265460ff8160081c1680613bcd575b15613b4757506001600160a01b036004541691823b1561236757604051632142170760e11b81523060048201526001600160a01b03909216602483015261ffff166044820152908290829081838160648101612b4b565b60ff1680613bab575b613b5a5750505080f35b6001600160a01b036004541691823b1561236757604051632142170760e11b81523060048201526001600160a01b03909216602483015261ffff166044820152908290829081838160648101612bbe565b5061ffff8216835260186020526001600160a01b036040842054163314613b50565b506001600160a01b038454163314613af0565b503461037a578060031936011261037a57602061ffff60105416604051908152f35b503461037a57602036600319011261037a576001600160a01b03604060209261ffff613c2c615a11565b16815260128452205416604051908152f35b503461037a57604036600319011261037a5780613c59615a42565b3382526007602052613c7160ff604084205416615bd9565b6001600160a01b0360025416803b1561236c576040517f79cc67900000000000000000000000000000000000000000000000000000000081526001600160a01b03909216600483015260248035908301528290829081838160448101612346565b503461037a578060031936011261037a576020601f54604051908152f35b503461037a57602036600319011261037a576001600160a01b03604060209261ffff613d1a615a11565b168152600a8452205416604051908152f35b503461037a57602036600319011261037a57613d46615a6e565b613d4e615b81565b60ff801960265416911515161760265580f35b503461037a57606036600319011261037a57613d7b615a42565b613d83615a22565b613d8b615a7d565b33845260ff60209160078352613da682604088205416615bd9565b16600181101580613f10575b15613ecc576001600160a01b0390858260045416803b1561054457604051632142170760e11b81526001600160a01b038816600482015230602482015261ffff871660448201529082908290606490829084905af1801561053957613eb8575b505083613ea29161ffff7ff21b092d2b78057537987c15cf87ef20f0d705bd1bcccc46a317d554e10c78c99616938489526018865260408920971696876001600160a01b0319825416179055808852601a8552613e728260408a20615d13565b83885260238552604088208160ff19825416179055868852601d8552604088209060005284526040600020615d13565b613eac8254615ccd565b8255604051908152a280f35b613ec190615aad565b611a6c578538613e12565b6064826040519062461bcd60e51b82526004820152600a60248201527f696e76616c6964206964000000000000000000000000000000000000000000006044820152fd5b506005811115613db2565b503461037a578060031936011261037a57613f34615b81565b60006001600160a01b0381546001600160a01b031981168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461037a576020806003193601126105445790613f91615a42565b6001600160a01b031691600190825b60ff831660058111613fdd57613fd791613fd191878752601c85526040872090600052845260406000205490615c24565b92615c8a565b91613fa0565b600186838588805b60ff8616600581116140225761401c9161401691878552601d86526040852090600052855260406000205490615c24565b95615c8a565b94613fe5565b8361402d8684615c24565b604051908152f35b503461037a5760a036600319011261037a5761404f615a11565b614057615a7d565b61405f615a9d565b916084356001600160a01b0394858216938483036109f4573382526020956007875260ff61409281604086205416615bd9565b839063ffffffff60243516928185166001811460001461427a575016600181036141da57505060018352601a875260408320805461413893926140df92916140d991615ef3565b90615cdc565b949061ffff958691549060031b1c1684526018885288604085205416948087168552600b8952604085206001600160a01b0319815416905560085490614126818316615de6565b169061ffff1916176008555b85615df7565b8560035416803b1561054457604051632142170760e11b81523060048201526001600160a01b038416602482015261ffff851660448201529082908290606490829084905af18015610539576141c6575b505083947fd94293c5b4390a09be50f17655e06e594ae18d15ccd204fd98851ab26d273f9f911693849261ffff60405191168152a3604051908152f35b6141d08291615aad565b61037a5780614189565b909491906002146141f1575b509061413891614132565b60018452601b88526040842080549295506141389392614215926140d99190615ef3565b949061ffff958691549060031b1c1684526009885288604085205416948087168552600a8952604085206001600160a01b0319815416905563ffff0000614263600854928360101c16615de6565b60101b169063ffff000019161760085590916141e6565b96929594939190600288036143205760049293949596975016146142a357509061413891614132565b60028452601b885260408420805492955061413893926142c7926140d99190615ef3565b949061ffff958691549060031b1c168452600e885288604085205416948087168552600d8952604085206001600160a01b03198154169055600c549061430e818316615de6565b169061ffff191617600c5590916141e6565b600397808903614445575016600a81036143ab5750858452601a895260408420805494955061413894614357926140d99190615ef3565b9561ffff96879254911b1c168452601888528860408520541694808716855260118952604085206001600160a01b031981541690556010549061439b818316615de6565b169061ffff191617601055614132565b600b146143c0575b5061413892939450614132565b858452601b8952604084208054949550614138946143e2926140d99190615ef3565b9561ffff96879254911b1c168452601388528860408520541694808716855260128952604085206001600160a01b0319815416905563ffff000061442d601054928360101c16615de6565b60101b169063ffff00001916176010558493926143b3565b60041461445c575b50505061413892939450614132565b16600781036144e3575060048452601a895260408420805494955061413894614489926140d99190615ef3565b9561ffff96879254911b1c168452601888528860408520541694808716855260158952604085206001600160a01b03198154169055601454906144cd818316615de6565b169061ffff1916176014555b849392388061444d565b6008146144f8575b50614138929394506144d9565b60048452601b89526040842080549495506141389461451b926140d99190615ef3565b9561ffff96879254911b1c168452601788528860408520541694808716855260168952604085206001600160a01b0319815416905563ffff0000614566601454928360101c16615de6565b60101b169063ffff00001916176014558493926144eb565b503461037a578060031936011261037a5760206001600160a01b0360035416604051908152f35b503461037a57602036600319011261037a576001600160a01b03604060209261ffff6145cf615a11565b168152600b8452205416604051908152f35b503461037a57602036600319011261037a576001600160a01b03604060209261ffff61460b615a11565b16815260168452205416604051908152f35b503461037a57602036600319011261037a576001600160a01b03604060209261ffff614647615a11565b168152600e8452205416604051908152f35b503461037a57602036600319011261037a576001600160a01b03604060209261ffff614683615a11565b16815260158452205416604051908152f35b503461037a57602036600319011261037a576001600160a01b036146b7615a42565b6146bf615b81565b166001600160a01b0319600254161760025580f35b503461037a578060031936011261037a57602061ffff60145416604051908152f35b503461037a576020908160031936011261037a57614712615a42565b9181906001600160a01b0360019416915b60ff85166005811161475a57614754916116bc91858752601d85526040872090600052845260406000205490615c24565b93614723565b50916147668493615c9b565b839060015b60ff81166005811161177457848752601d808752604088208260005287526040600020549188915b8383106147ac57505050506147a790615c8a565b61476b565b91956117626147dc91898c9b969a94979b5284865260408c2087600052865261ffff61174a8a6040600020615cdc565b91979390969297614793565b503461037a578060031936011261037a57602061ffff60085460101c16604051908152f35b503461037a57606036600319011261037a57614827615a42565b61482f615a22565b90614838615a7d565b90338452600760205261485160ff604086205416615bd9565b61ffff8316845260186020526001600160a01b03916148798360408720541684841614615d3d565b848360045416803b1561054457604051632142170760e11b81523060048201526001600160a01b038516602482015261ffff871660448201529082908290606490829084905af1801561053957614cde575b505061ffff841685526018602052604085206001600160a01b0319815416905560236020526040852060ff1981541690558282168552601d806020526040862060ff831660005260205260406000205486905b808210614bf2575b50505060ff81168552601a602052604085205480600019810111614bde5785908190600019810160011c5b81841061499c575b82887fe7f8eae92cdda88e12bf251d1c6110e00b3d777ad50500a0f47e685f5e3e38eb60208a8a61498a8354615dc6565b835561ffff604051951685521692a280f35b60ff85168352601a60205261ffff6149b78560408620615cdc565b919054818b169260031b1c1614600014614a53575092614a346020959361068e61ffff614a1960ff9660407fe7f8eae92cdda88e12bf251d1c6110e00b3d777ad50500a0f47e685f5e3e38eb9c9a8989168352601a8d52600019019120615cdc565b90549060031b1c16918585168c52601a895260408c20615cdc565b168652601a8352614a4760408720615d88565b91819350853880614959565b60ff85168352601a60205261ffff614a75604085206000198786030190615cdc565b905460039190911b1c811690891603614ad6575092614a346020959361068e61ffff614a1960ff9660407fe7f8eae92cdda88e12bf251d1c6110e00b3d777ad50500a0f47e685f5e3e38eb9c9a8989168352601a8d52600019019120615cdc565b60ff85168352601a60205261ffff614af46040852086840390615cdc565b905460039190911b1c811690891603614b55575092614a346020959361068e61ffff614a1960ff9660407fe7f8eae92cdda88e12bf251d1c6110e00b3d777ad50500a0f47e685f5e3e38eb9c9a8989168352601a8d52600019019120615cdc565b60ff85168352601a60205261ffff614b736040852086840190615cdc565b905460039190911b1c811690891603614bd4575092614a346020959361068e61ffff614a1960ff9660407fe7f8eae92cdda88e12bf251d1c6110e00b3d777ad50500a0f47e685f5e3e38eb9c9a8989168352601a8d52600019019120615cdc565b9260010192614951565b602486634e487b7160e01b81526011600452fd5b8585168852826020526040882060ff8516600052602052614c17826040600020615cdc565b905460039291831b1c61ffff90811690891603614cd2578686168952836020526040892060ff861660005260205260406000206000198201918211614cbe57614c939392614c6b61068e9361ffff93615cdc565b9054911b1c16918787168a528460205260408a2060ff87166000526020526040600020615cdc565b83831686526020526040852060ff8216600052602052614cb66040600020615d88565b388080614926565b60248a634e487b7160e01b81526011600452fd5b9160019150019061491e565b614ce790615aad565b6105355784386148cb565b503461037a57602036600319011261037a57614d0c615a6e565b614d14615b81565b61ff0060265491151560081b169061ff0019161760265580f35b503461037a578060031936011261037a5760206001600160a01b0360015416604051908152f35b503461037a578060031936011261037a5761ffff604082600460209452601b8452205416604051908152f35b503461037a57602036600319011261037a576004359060ff82168092036109f45760408160209361ffff9352601a8452205416604051908152f35b503461037a578060031936011261037a57602060ff602654166040519015158152f35b503461037a578060031936011261037a5760206001600160a01b0360045416604051908152f35b503461037a57604036600319011261037a57614e20615a42565b906001600160a01b03614e31615a8d565b921691828252601c9160209083825260ff6040822093169283600052825260406000205493614e5f85615c9b565b95825b868110614e7757604051806113718a82615af9565b6001908285528386526040852087600052865261ffff614e9b826040600020615cdc565b90549060031b1c16614ead828b615cff565b5201614e62565b503461037a57604036600319011261037a57614ece615a42565b90614ed7615a22565b91338252602060078152614ef160ff604085205416615bd9565b61ffff9384811690818552601983526001600160a01b03938460408720541694614f1f818316968714615d3d565b6005541690813b1561070b57604051632142170760e11b81523060048201526001600160a01b03909116602482015261ffff9092166044830152859082908183816064810103925af18015611a615790859161509f575b5081905260198252604084206001600160a01b03198154169055828452601e9485835260408520549585965b808810614fde575b50506021547f99175dc3ea3b7c111b073fe0a90ef647baf911324dd47b428e8fb6f2f22bfe80939291612d88828216615de6565b829086885282865284614ff48a60408b20615cdc565b905460039491851b1c16036150935786885282865260408820600019820191821161507f57846150659361504f7f99175dc3ea3b7c111b073fe0a90ef647baf911324dd47b428e8fb6f2f22bfe809a9b9c9461068e94615cdc565b9054911b1c1691898b5284885260408b20615cdc565b858752835261507660408720615d88565b85949338614faa565b602489634e487b7160e01b81526011600452fd5b97600191500196614fa2565b6150a890615aad565b6110cb578338614f76565b503461037a578060031936011261037a5760206001600160a01b0360025416604051908152f35b503461037a578060031936011261037a5760206001600160a01b0360055416604051908152f35b503461037a57602036600319011261037a576001600160a01b03604060209261ffff61512b615a11565b168152600f8452205416604051908152f35b503461037a57602036600319011261037a576001600160a01b03604060209261ffff615167615a11565b168152600d8452205416604051908152f35b503461037a578060031936011261037a57602061ffff600c5460101c16604051908152f35b503461037a57608036600319011261037a576151b8615a42565b506151c1615a58565b5060643567ffffffffffffffff8082116110cf57366023830112156110cf57816004013590811161524a57604051615203601f8301601f191660200182615ad7565b81815236602483850101116110cb57816024602094018483013701015260206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b602483634e487b7160e01b81526041600452fd5b503461037a578060031936011261037a57602060ff60265460081c166040519015158152f35b503461037a5760a036600319011261037a5761529e615a11565b6152a6615a7d565b606435916001600160a01b0380841692838503611a6c576084359081159182150361070b57338752602095600787526152e560ff60408a205416615bd9565b60ff9091169060243563ffffffff1688600184036154a3575061531f91925060028952601b88526140d960408a209160408b205490615ef3565b919061ffff928391549060031b1c168852600e8752836040892054169260001461540f5787846003541691823b1561054457604051632142170760e11b81526001600160a01b039182166004820152908516602482015261ffff87166044820152918290606490829084905af18015615404576153f0575b5090604086977fd94293c5b4390a09be50f17655e06e594ae18d15ccd204fd98851ab26d273f9f94935b8616815260098852206001600160a01b031981541690555b1693849261ffff60405191168152a3604051908152f35b6153fa8891615aad565b61070b5738615397565b6040513d8a823e3d90fd5b508260035416803b15610ced57604051632142170760e11b81523060048201526001600160a01b038416602482015261ffff861660448201529088908290606490829084905af180156154045761548f575b5090604086977fd94293c5b4390a09be50f17655e06e594ae18d15ccd204fd98851ab26d273f9f94936153c1565b6154998891615aad565b61070b5738615461565b6002840361563357506154cd91925060028952601b88526140d960408a209160408b205490615ef3565b919061ffff928391549060031b1c168852600e8752836040892054169260001461559f5787846003541691823b1561054457604051632142170760e11b81526001600160a01b039182166004820152908516602482015261ffff87166044820152918290606490829084905af180156154045761558b575b5090604086977fd94293c5b4390a09be50f17655e06e594ae18d15ccd204fd98851ab26d273f9f94935b86168152600f8852206001600160a01b031981541690556153d9565b6155958891615aad565b61070b5738615545565b508260035416803b15610ced57604051632142170760e11b81523060048201526001600160a01b038416602482015261ffff861660448201529088908290606490829084905af180156154045761561f575b5090604086977fd94293c5b4390a09be50f17655e06e594ae18d15ccd204fd98851ab26d273f9f949361556f565b6156298891615aad565b61070b57386155f1565b6003938085036157c0575050846156608a9260028452601b8b526140d96040852091604086205490615ef3565b949061ffff9586915490831b1c168352600e8a52816040842054169560001461572d57541691823b1561054457604051632142170760e11b81526001600160a01b039182166004820152908516602482015261ffff87166044820152918290606490829084905af1801561540457615719575b5090604086977fd94293c5b4390a09be50f17655e06e594ae18d15ccd204fd98851ab26d273f9f94935b8616815260138852206001600160a01b031981541690556153d9565b6157238891615aad565b61070b57386156d3565b5416915050803b15610ced57604051632142170760e11b81523060048201526001600160a01b038416602482015261ffff861660448201529088908290606490829084905af18015615404576157ac575b5090604086977fd94293c5b4390a09be50f17655e06e594ae18d15ccd204fd98851ab26d273f9f94936156fd565b6157b68891615aad565b61070b573861577e565b91999094909392916004146157ff575b50505050849550907fd94293c5b4390a09be50f17655e06e594ae18d15ccd204fd98851ab26d273f9f916153d9565b91935091615823819960028352601b8a526140d96040842091604085205490615ef3565b939061ffff9485915490871b1c168252600e895285806040842054169586946000146158f7575416803b156110cf57604051632142170760e11b81526001600160a01b03928316600482015293909116602484015261ffff871660448401528290606490829084905af18015615404576158e3575b5090604086977fd94293c5b4390a09be50f17655e06e594ae18d15ccd204fd98851ab26d273f9f94935b8616815260178852206001600160a01b0319815416905590913880806157d0565b6158ed8891615aad565b61070b5738615898565b541692505050803b15610ced57604051632142170760e11b81523060048201526001600160a01b038416602482015261ffff861660448201529088908290606490829084905af18015615404579187986040927fd94293c5b4390a09be50f17655e06e594ae18d15ccd204fd98851ab26d273f9f96959461597a575b50906158c2565b61598390615aad565b38615973565b503461037a57604036600319011261037a576159a3615a42565b602435908115158092036110cf576001600160a01b03906159c2615b81565b1682526007602052604082209060ff8019835416911617905580f35b9050346105445760203660031901126105445760ff604060209361ffff615a03615a11565b168152600685522054168152f35b6004359061ffff821682036109f457565b6024359061ffff821682036109f457565b359061ffff821682036109f457565b600435906001600160a01b03821682036109f457565b602435906001600160a01b03821682036109f457565b6004359081151582036109f457565b6044359060ff821682036109f457565b6024359060ff821682036109f457565b6064359060ff821682036109f457565b67ffffffffffffffff8111615ac157604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117615ac157604052565b6020908160408183019282815285518094520193019160005b828110615b20575050505090565b835161ffff1685529381019392810192600101615b12565b9181601f840112156109f45782359167ffffffffffffffff83116109f4576020808501948460051b0101116109f457565b67ffffffffffffffff8111615ac15760051b60200190565b6001600160a01b03600054163303615b9557565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b15615be057565b606460405162461bcd60e51b815260206004820152601a60248201527f6f6e6c792067616d6520636f6e747261637420616c6c6f7765640000000000006044820152fd5b91908201809211615c3157565b634e487b7160e01b600052601160045260246000fd5b9190811015615c575760051b0190565b634e487b7160e01b600052603260045260246000fd5b3560ff811681036109f45790565b3561ffff811681036109f45790565b60ff1660ff8114615c315760010190565b90615ca582615b69565b615cb26040519182615ad7565b8281528092615cc3601f1991615b69565b0190602036910137565b6000198114615c315760010190565b9190918054831015615c5757600052601e60206000208360041c019260011b1690565b8051821015615c575760209160051b010190565b9081549168010000000000000000831015615ac1578261068e916001615d3b95018155615cdc565b565b15615d4457565b606460405162461bcd60e51b815260206004820152600960248201527f6e6f74206f776e657200000000000000000000000000000000000000000000006044820152fd5b80548015615db0576000190190615d9f8282615cdc565b61ffff82549160031b1b1916905555565b634e487b7160e01b600052603160045260246000fd5b8015615c31576000190190565b61ffff809116908114615c315760010190565b61ffff168015615c31576000190190565b9291906001600160a01b031690600090828252601c60209080825260409460ff86862094169384865283528585205485985b818a10615e3d575b50505050505050509050565b8287528385528787208688528552615e578a898920615cdc565b9290549161ffff938460039481841692861b1c1614600014615ee457508388528486528888208789528652888820600019820191821161507f5792615ed69a9b92615ea861068e93615ec596615cdc565b9054911b1c1691848952858752898920888a528752898920615cdc565b845281528383209183525220615d88565b803880808080808080615e31565b9a909250600191500198615e29565b8115615efd570690565b634e487b7160e01b600052601260045260246000fd5b90916040602092828482018583525201929160005b828110615f36575050505090565b90919293828060019261ffff615f4b89615a33565b16815201950193929101615f28565b91909161ffff80809416911601918211615c315756fea264697066735822122090ad14d3cbe7c32d98e42e3f2db2e72bb27c64d6683e6f7c052a499fb95ef10764736f6c6343000811003300000000000000000000000041473032b82a4205ddde155cc7ed210b000b014d
Deployed Bytecode
0x608080604052600436101561001357600080fd5b600090813560e01c90816302e70ab8146159de57508063030f8a09146159895780630adc84b01461528457806314b7f4c51461525e578063150b7a021461519e57806316372ab0146151795780632145cee51461513d57806324a811651461510157806327b3c190146150da5780632c8499c514613a755780632e02e658146150b35780632e19e73f14614eb4578063333dab5614614e0657806337d4fc8414614ddf57806339db714f14614dbc578063410e2b2914614d81578063438531f614614d55578063466bed6914614d2e5780634dd306cf14614cf25780634e5a18f91461480d578063516d60bc146147e85780635190357b146146f6578063588604f8146146d45780635e09f8741461469557806361888e8914614659578063624f99321461461d578063645b9fde146145e15780636a5085a9146145a55780636bf6eaff1461457e5780636e03c1761461403557806370a0823114613f75578063715018a614613f1b578063758854a214613d615780637653100814613d2c5780637804eb1f14613cf0578063795d336714613cd257806379cc679014613c3e5780637a6cae4e14613c025780638833241514613be05780638d89af4614613abd5780638da5cb5b14613a9757806391e4d98f14613a7557806391e761ca14612e425780639762942414612e0a5780639b479cfe14612dce5780639c312dc314612db15780639ddcba1d14612c84578063a3509fc814612c48578063a5e8364714612c1c578063a697361214612ac5578063a6cab4cd14612383578063a8ed28b4146122c2578063aac33aad1461229d578063bd48652e1461227f578063bd82fc78146117a4578063be5db8e414611782578063befec7051461165e578063c03f2ca614611622578063c407687614611506578063c6f654a014611481578063d8689691146113d3578063d885ce61146113a7578063d8e08e571461131d578063db1f5196146112fb578063e72f7cd5146112c5578063eb14b3531461127c578063f2fde38b146111a2578063f49d3955146110f8578063f5afe20f146110d3578063f70956c714610fd2578063f754ffa6146109f9578063f80b988c146103b9578063fb10c3d21461037d5763fd95856d1461034f57600080fd5b3461037a578060031936011261037a5761ffff604082600360209452601b8452205416604051908152f35b80fd5b503461037a57602036600319011261037a576001600160a01b03604060209261ffff6103a7615a11565b16815260138452205416604051908152f35b503461037a57608036600319011261037a576103d3615a11565b6103db615a58565b906103e4615a7d565b6064358015908115036109f45733855260ff6020926007845261040c82604089205416615bd9565b169060019182811015806109e9575b156109a5578083036107665750801561070f5761ffff8416808752600984527f10aae1ead4e36e8b41865adb3d322a33942fda91e1cb168046dd1c972ad0cc5a8460408920926001600160a01b03891693846001600160a01b0319825416179055604051908152a25b1561054857506001600160a01b03848160035416803b1561054457604051632142170760e11b81526001600160a01b038716600482015230602482015261ffff861660448201529082908290606490829084905af1801561053957610521575b505061051e9361ffff841686526024835260408620600560ff19825416179055168452601c81526040842090600585525260408320615d13565b80f35b61052a90615aad565b6105355784386104e4565b8480fd5b6040513d84823e3d90fd5b5080fd5b90916001600160a01b036003918682845416803b1561054457604051632142170760e11b81523060048201526001600160a01b038916602482015261ffff841660448201529082908290606490829084905af18015610539576106f7575b505061ffff939193809116938488526024968787526040892060ff198154169055169283600052601c94858752604060002097600598896000528852604060002054916000955b838710610603575b505050505050505050505080f35b87600052888a5260406000208b6000528a528186610625896040600020615cdc565b905490881b1c16036106ee57505085600052868852604060002089600052885260406000209060001983019283116106da57509161066b6106ae95949261068e94615cdc565b9054911b1c16918460005285875260406000208860005287526040600020615cdc565b90919082549060031b9161ffff9283811b93849216901b16911916179055565b6000528152604060002091600052526106ca6040600020615d88565b38808080808080808080806105f5565b634e487b7160e01b60005260116004526000fd5b958601956105ed565b61070090615aad565b61070b5786386105a6565b8680fd5b61ffff841680875260098452604087206001600160a01b031981541690556040519081527f65d7389b4b92a26ff3bda27f72e7035cfd365bdbeb67007bcdb592126acefd2c846001600160a01b03881692a2610484565b60028103610827575080156107d05761ffff8416808752600f84527f46462c42057db0f7a9f7c9f2b722d215f11ca2a0f5d38132b877843437a3b3c78460408920926001600160a01b03891693846001600160a01b0319825416179055604051908152a25b610484565b61ffff8416808752600f8452604087206001600160a01b031981541690556040519081527f1a91fc99f7ba6670afa9040ced9846e2e4ae5773fbd2d747eda6c2f5d8633c31846001600160a01b03881692a2610484565b600381036108e7575080156108905761ffff8416808752601384527fff9aa68430939f0c14075554dd842fa38c14c98977ca2a8a8759d2d9b7e2e8f78460408920926001600160a01b03891693846001600160a01b0319825416179055604051908152a2610484565b61ffff841680875260138452604087206001600160a01b031981541690556040519081527f9a55333272105310d1eac580297eb36abed153aeff87b7e87a264f62aac44850846001600160a01b03881692a2610484565b6004036107cb57801561094e5761ffff8416808752601784527fdd39053acc4ab51c644b0c68af41f73ce1fb879c3dd04e461fc66cd17affce778460408920926001600160a01b03891693846001600160a01b0319825416179055604051908152a2610484565b61ffff841680875260178452604087206001600160a01b031981541690556040519081527f0e86cc5d4242083c8e47d8d91f8b65ad3b640a0888c9c25da628544950cdef53846001600160a01b03881692a2610484565b6064846040519062461bcd60e51b82526004820152600f60248201527f496e76616c69642067616d6520696400000000000000000000000000000000006044820152fd5b50600481111561041b565b600080fd5b503461037a57606036600319011261037a57610a13615a11565b610a1b615a58565b90610a24615a7d565b3384526020906007825260ff8091610a4182604089205416615bd9565b16600181149485600014610cf1576001600160a01b0390878260035416803b1561054457604051632142170760e11b81526001600160a01b038416600482015230602482015261ffff891660448201529082908290606490829084905af1801561053957610cd9575b50506001600160a01b03917f3b08482ce1d83b0dee10c90274f7810c243fbed81e317303e9d4122e4c5fde248661ffff808a1690818d52600b835260408d2094861694856001600160a01b031982541617905560085490610b0c818316615dd3565b169061ffff191617600855604051908152a25b610b2a601f54615ccd565b601f551694858752601c845260408720826000528452610b4e856040600020615d13565b15610bac575061ffff7f6e4545ce7f7c3065c966e407a27add18a2d3340269a5dad3ddcd827a71996fe29316908186526006835260408620541615610b98575b604051908152a280f35b60408520805460ff19166001179055610b8e565b60028103610c0c575061ffff7f962a0bf2885f7d878689e8c2eb763bb44b7c19948ae428235e045cb084f7656f9316908186526006835260408620541615610bf857604051908152a280f35b60408520805460ff19166004179055610b8e565b60038103610c6c575061ffff7f177e7001afeb32d52fe86555fbf04a17d9d818e7f43c0df56227c119181a468f9316908186526006835260408620541615610c5857604051908152a280f35b60408520805460ff1916600a179055610b8e565b600414610c7b575b5050505080f35b61ffff7fba4cbf5fb6c4f19c4f9babe604b3c642f71e99006a1b9023bd2df354cb457e759316908186526006835260408620541615610cc5575b604051908152a238808080610c74565b60408520805460ff19166007179055610cb5565b610ce290615aad565b610ced578738610aaa565b8780fd5b60028203610de1576001600160a01b0390878260035416803b1561054457604051632142170760e11b81526001600160a01b038416600482015230602482015261ffff891660448201529082908290606490829084905af1801561053957610dcd575b50506001600160a01b03917f12874fc41971beedec32d7f3f5b92907f7baf9c4b390743a7c6f6399946fdf808661ffff808a1690818d52600d835260408d2094861694856001600160a01b0319825416179055600c5490610db6818316615dd3565b169061ffff191617600c55604051908152a2610b1f565b610dd690615aad565b610ced578738610d54565b60038203610ed1576001600160a01b0390878260035416803b1561054457604051632142170760e11b81526001600160a01b038416600482015230602482015261ffff891660448201529082908290606490829084905af1801561053957610ebd575b50506001600160a01b03917fad2ada2b0e0da621bbd929f37cad7f2c23b91c1307a6ef37587abe30b665cffa8661ffff808a1690818d526011835260408d2094861694856001600160a01b031982541617905560105490610ea6818316615dd3565b169061ffff191617601055604051908152a2610b1f565b610ec690615aad565b610ced578738610e44565b60048214610ee8575b6001600160a01b0390610b1f565b6001600160a01b0390878260035416803b1561054457604051632142170760e11b81526001600160a01b038416600482015230602482015261ffff891660448201529082908290606490829084905af1801561053957610fbe575b50506001600160a01b03917f5c25e0d917fafc03501d2c33e030668127f9fb3205f83c3a86f6fbd4d70504df8661ffff808a1690818d526015835260408d2094861694856001600160a01b031982541617905560145490610fa5818316615dd3565b169061ffff191617601455604051908152a29050610eda565b610fc790615aad565b610ced578738610f43565b503461037a57604036600319011261037a5767ffffffffffffffff6004358181116110cf57611005903690600401615b38565b916024359081116110cb5761101e903690600401615b38565b9190611028615b81565b82840361053557845b61ffff9081811690868210156110c75760ff9182611058611053838a89615c47565b615c6d565b161515806110ad575b156110a9576001928461108b61108661107e611053868d8c615c47565b948c8b615c47565b615c7b565b168a52600660205260408a20911660ff198254161790550116611031565b8880fd5b50600c836110bf611053848b8a615c47565b161115611061565b8780f35b8380fd5b8280fd5b503461037a578060031936011261037a57602061ffff60145460101c16604051908152f35b503461037a578060031936011261037a5760018152602090601a825261ffff908160408220541682811161118e579082604061117361115f61114b6111859660028752601a8a5285858820541690615f5a565b60038652601a895284848720541690615f5a565b60048552601a885283838620541690615f5a565b9260058152601a875220541690615f5a565b60405191168152f35b602482634e487b7160e01b81526011600452fd5b503461037a57602036600319011261037a576111bc615a42565b6111c4615b81565b6001600160a01b0380911690811561121257600054826001600160a01b0319821617600055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a380f35b608460405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152fd5b503461037a57602036600319011261037a576001600160a01b0361129e615a42565b6112a6615b81565b166001600160a01b031981816003541617600355600154161760015580f35b503461037a57602036600319011261037a5760ff604060209261ffff6112e9615a11565b16815260238452205416604051908152f35b503461037a578060031936011261037a57602061ffff600c5416604051908152f35b503461037a57602080600319360112610544576001600160a01b03611340615a42565b1691828152601e80835260408220549261135984615c9b565b94835b85811061137557604051806113718982615af9565b0390f35b60019082865284845261ffff61138e8260408920615cdc565b90549060031b1c166113a0828a615cff565b520161135c565b503461037a578060031936011261037a5761ffff604082600160209452601b8452205416604051908152f35b503461037a57604036600319011261037a576113ed615a42565b906001600160a01b036113fe615a8d565b921691828252601d9160209083825260ff604082209316928360005282526040600020549361142c85615c9b565b95825b86811061144457604051806113718a82615af9565b6001908285528386526040852087600052865261ffff611468826040600020615cdc565b90549060031b1c1661147a828b615cff565b520161142f565b503461037a57604036600319011261037a5761149b615a42565b7fd77603b1586d29d109a38f629a93cb445a0fe05dbda55a782d5d43e53df04d7960406001600160a01b036114ce615a8d565b9333865260076020526114e660ff8488205416615bd9565b60ff83519516855269ffffffffffffffffffff421660208601521692a280f35b503461037a57604036600319011261037a57611520615a42565b60243590338352600760205261153c60ff604085205416615bd9565b6001600160a01b0390838260025416803b15610544576040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602481018690529082908290604490829084905af180156105395761160e575b50507ff15ef988e0cab7863e51b16028ffd8ac865deaa333c9a9596b702ee6692e10819160609116928385526022602052604085206115e7828254615c24565b90556115f581602554615c24565b602555604051908152436020820152426040820152a280f35b61161790615aad565b6110cb5783386115a7565b503461037a57602036600319011261037a576001600160a01b03604060209261ffff61164c615a11565b16815260178452205416604051908152f35b503461037a576020908160031936011261037a5761167a615a42565b9181906001600160a01b0360019416915b60ff8516600581116116c8576116c2916116bc91858752601c85526040872090600052845260406000205490615c24565b94615c8a565b9361168b565b50916116d48493615c9b565b839060015b60ff81166005811161177457848752601c808752604088208260005287526040600020549188915b83831061171a575050505061171590615c8a565b6116d9565b919561176261176891898c9b969a94979b5284865260408c2087600052865261ffff61174a8a6040600020615cdc565b90549060031b1c1661175c828a615cff565b52615ccd565b96615ccd565b91979390969297611701565b604051806113718582615af9565b503461037a578060031936011261037a57602061ffff60085416604051908152f35b503461037a57608036600319011261037a576117be615a42565b67ffffffffffffffff906024358281116110cb57366023820112156110cb578060040135906117ec82615b69565b916117fa6040519384615ad7565b8083526024602084019160051b8301019136831161070b57602401905b828210612267575050506044359283116110cb57366023840112156110cb57826004013561184481615b69565b936118526040519586615ad7565b8185526024602086019260051b8201019036821161070b579060248794939201915b81831061224457505050611886615a9d565b338352600760205261189e60ff604085205416615bd9565b60ff16825b825181101561223057600160ff6118ba8389615cff565b511603611aa55761ffff806118cf8386615cff565b51168552600b602052604085206001600160a01b0387166001600160a01b03198254161790556008805482611905818316615dd3565b169061ffff19161790556119198285615cff565b51166040519081527f3b08482ce1d83b0dee10c90274f7810c243fbed81e317303e9d4122e4c5fde2460206001600160a01b03881692a25b61ffff61195e8285615cff565b5116845260246020526040842060ff1990838282541617905561ffff6119848386615cff565b5116855260068060205260ff60408720541615611a70575b50506001600160a01b0385168452601c60205260408420826000526020526119d7604060002061ffff6119cf8487615cff565b511690615d13565b6001600160a01b036003541661ffff6119f08386615cff565b511690803b15611a6c57604051632142170760e11b81526001600160a01b038816600482015230602482015261ffff92909216604483015285908290606490829084905af1908115611a61578591611a4d575b50506001016118a3565b611a5690615aad565b6110cb578338611a43565b6040513d87823e3d90fd5b8580fd5b60ff611a7c848a615cff565b51169061ffff611a8c8588615cff565b511687526020526040862091825416179055388061199c565b60028060ff611ab4848a615cff565b511603611b5c575061ffff80611aca8386615cff565b51168552600a602052604085206001600160a01b0387166001600160a01b03198254161790556008805463ffff00006010611b088584831c16615dd3565b901b169063ffff00001916179055611b208285615cff565b51166040519081527f4e0d1b237501159b8d5c2a1777b73a3090fd95d5a0de2806ddd8ca535e447f9360206001600160a01b03881692a2611951565b60038060ff611b6b858b615cff565b511603611c0957505061ffff80611b828386615cff565b511685526009602052604085206001600160a01b0387166001600160a01b031982541617905560018552601b602052611bc360408620826119cf8588615cff565b611bcd8285615cff565b51166040519081527f77268c18aa294555f638ca631483843e5e99f579965e7ab82ad8dc9c92622d0b60206001600160a01b03881692a2611951565b600460ff611c17858b615cff565b511603611cb457505061ffff80611c2e8386615cff565b51168552600d602052604085206001600160a01b0387166001600160a01b0319825416179055600c805482611c64818316615dd3565b169061ffff1916179055611c788285615cff565b51166040519081527f12874fc41971beedec32d7f3f5b92907f7baf9c4b390743a7c6f6399946fdf8060206001600160a01b03881692a2611951565b600560ff611cc2858b615cff565b511603611d5e575061ffff9081611cd98487615cff565b51168652600e602052604086206001600160a01b0388166001600160a01b03198254161790558552601b602052611d1860408620826119cf8588615cff565b611d228285615cff565b51166040519081527f43cf9d3931bdfd22950a871bb4f31d7c0ab0f71c1a3a0236ce2f883ead41ee7a60206001600160a01b03881692a2611951565b9050600660ff611d6e848a615cff565b511603611e16575061ffff80611d848386615cff565b51168552600f602052604085206001600160a01b0387166001600160a01b0319825416179055600c805463ffff00006010611dc28584831c16615dd3565b901b169063ffff00001916179055611dda8285615cff565b51166040519081527fa8477a27ecdfcfd7615fbe783fe10961e52aba38d67c0f8224df7e918bb3370f60206001600160a01b03881692a2611951565b600760ff611e24848a615cff565b511603611ec0575061ffff80611e3a8386615cff565b511685526015602052604085206001600160a01b0387166001600160a01b03198254161790556014805482611e70818316615dd3565b169061ffff1916179055611e848285615cff565b51166040519081527f5c25e0d917fafc03501d2c33e030668127f9fb3205f83c3a86f6fbd4d70504df60206001600160a01b03881692a2611951565b600860ff611ece848a615cff565b511603611f76575061ffff80611ee48386615cff565b511685526016602052604085206001600160a01b0387166001600160a01b03198254161790556014805463ffff00006010611f228584831c16615dd3565b901b169063ffff00001916179055611f3a8285615cff565b51166040519081527fa105eb1c1aeb2a96bd4e193c3a9b3bf73f2a8a1181b1b7e6dacda6c6a9a3554960206001600160a01b03881692a2611951565b600960ff611f84848a615cff565b511603612021575061ffff80611f9a8386615cff565b511685526017602052604085206001600160a01b0387166001600160a01b031982541617905560048552601b602052611fdb60408620826119cf8588615cff565b611fe58285615cff565b51166040519081527fb582b14f2ac3955bf383ef03f14b6d49c4740aaf044a02486db8aa68b728595e60206001600160a01b03881692a2611951565b600a60ff61202f848a615cff565b5116036120cb575061ffff806120458386615cff565b511685526011602052604085206001600160a01b0387166001600160a01b0319825416179055601080548261207b818316615dd3565b169061ffff191617905561208f8285615cff565b51166040519081527fad2ada2b0e0da621bbd929f37cad7f2c23b91c1307a6ef37587abe30b665cffa60206001600160a01b03881692a2611951565b600b60ff6120d9848a615cff565b51160361217f575061ffff806120ef8386615cff565b511685526012602052604085206001600160a01b0387166001600160a01b03198254161790556010805463ffff000061212b8483851c16615dd3565b831b169063ffff000019161790556121438285615cff565b51166040519081527fdf31d7124bfd2f8787d236d3e4d5545a7b4de7ed54a53733bcec0a941883d00e60206001600160a01b03881692a2611951565b600c60ff61218d848a615cff565b51161461219b575b50611951565b61ffff90816121aa8487615cff565b511686526013602052604086206001600160a01b0388166001600160a01b03198254161790558552601b6020526121e960408620826119cf8588615cff565b6121f38285615cff565b51166040519081527fabc0672b455df3350544c04ba51f9896a8c558f26a9c99ac08f286aae725459960206001600160a01b03881692a238612195565b8361223e8451601f54615c24565b601f5580f35b9091809394503560ff811681036109f45781528693926020908101929101611874565b6020809161227484615a33565b815201910190611817565b503461037a578060031936011261037a576020602554604051908152f35b503461037a578060031936011261037a57602061ffff60105460101c16604051908152f35b503461037a57604036600319011261037a57806122dd615a11565b6122e5615a58565b60ff60265460081c1680612370575b1561236c576001600160a01b036003541691823b1561236757604051632142170760e11b81523060048201526001600160a01b03909216602483015261ffff1660448201529082908290818381606481015b03925af18015610539576123575750f35b61236090615aad565b61037a5780f35b505050fd5b5050fd5b506001600160a01b0383541633146122f4565b503461037a57606036600319011261037a5760043567ffffffffffffffff8111610544576123b5903690600401615b38565b906123be615a58565b916123c7615a7d565b33855260076020526123df60ff604087205416615bd9565b845b61ffff8316811015612978578560ff83166001036125dd5750856001600160a01b0360035416612415611086848789615c47565b90803b156110cf57604051632142170760e11b81526001600160a01b038916600482015230602482015261ffff92909216604483015282908290606490829084905af18015610539576125c9575b50508061ffff6124796110866001948789615c47565b168752600b602052604087206001600160a01b0387166001600160a01b03198254161790556008805461ffff6124b0818316615dd3565b169061ffff1916179055816124c9611086838789615c47565b61ffff604051911681527f3b08482ce1d83b0dee10c90274f7810c243fbed81e317303e9d4122e4c5fde2460206001600160a01b038a1692a25b61ffff61251461108684888a615c47565b16885260246020526040882060ff199060ff86168282541617905561ffff61254061108685898b615c47565b16895260068060205260ff60408b2054161561259b575b5050506001600160a01b0386168752601c6020526040872060ff8416600052602052612595604060002061258f61108684888a615c47565b90615d13565b016123e1565b61ffff6125ac611086868a8c615c47565b168a5260205260ff60408a20921690825416179055388080612557565b6125d290615aad565b611a6c578538612463565b60ff831660020361270b5750856001600160a01b0360035416612604611086848789615c47565b90803b156110cf57604051632142170760e11b81526001600160a01b038916600482015230602482015261ffff92909216604483015282908290606490829084905af18015610539576126f7575b50508061ffff6126686110866001948789615c47565b168752600d602052604087206001600160a01b0387166001600160a01b0319825416179055600c805461ffff61269f818316615dd3565b169061ffff191617905560046126b9611086838789615c47565b61ffff604051911681527f12874fc41971beedec32d7f3f5b92907f7baf9c4b390743a7c6f6399946fdf8060206001600160a01b038a1692a2612503565b61270090615aad565b611a6c578538612652565b86600360ff8516810361283a576001600160a01b039192505416612733611086848789615c47565b90803b156110cf57604051632142170760e11b81526001600160a01b038916600482015230602482015261ffff92909216604483015282908290606490829084905af1801561053957612826575b50508061ffff6127976110866001948789615c47565b1687526011602052604087206001600160a01b0387166001600160a01b03198254161790556010805461ffff6127ce818316615dd3565b169061ffff1916179055600a6127e8611086838789615c47565b61ffff604051911681527fad2ada2b0e0da621bbd929f37cad7f2c23b91c1307a6ef37587abe30b665cffa60206001600160a01b038a1692a2612503565b61282f90615aad565b611a6c578538612781565b600460ff861614612851575b505090600191612503565b6001600160a01b03919250541661286c611086848789615c47565b90803b156110cf57604051632142170760e11b81526001600160a01b038916600482015230602482015261ffff92909216604483015282908290606490829084905af1801561053957612964575b50508061ffff6128d06110866001948789615c47565b1687526015602052604087206001600160a01b0387166001600160a01b03198254161790556014805461ffff612907818316615dd3565b169061ffff19161790556007612921611086838789615c47565b61ffff604051911681527f5c25e0d917fafc03501d2c33e030668127f9fb3205f83c3a86f6fbd4d70504df60206001600160a01b038a1692a29091508638612846565b61296d90615aad565b611a6c5785386128ba565b5092919261298c61ffff8316601f54615c24565b601f5560ff81166001036129dd57507fa8da7b1e0d970b1eafd389eff60f1af7bc99d29f12e6251e77bc1ad40fa79786916129d76001600160a01b0392604051938493169583615f13565b0390a280f35b60ff8116600203612a2557507f060119b04c405bda169a7f1d2fed0a8d391cb7ce23c2bd031185475978e6a7a2916129d76001600160a01b0392604051938493169583615f13565b60ff8116600303612a6d57507f655f67d36ab8e6c4bdda185fc5bf82b880bac26ec421c4fc741ff0e57fc36232916129d76001600160a01b0392604051938493169583615f13565b60ff16600414612a7e575b50505080f35b7f062c99098d2ce454eea75921396a62949c49c49d493384ca7644d329101b57b191612aba6001600160a01b0392604051938493169583615f13565b0390a2388080612a78565b503461037a57604036600319011261037a5780612ae0615a11565b612ae8615a58565b60265460ff8160081c1680612c09575b15612b5e57506001600160a01b036005541691823b1561236757604051632142170760e11b81523060048201526001600160a01b03909216602483015261ffff1660448201529082908290818381606481015b03925af180156105395761235757505080f35b60ff1680612be7575b612b715750505080f35b6001600160a01b036005541691823b1561236757604051632142170760e11b81523060048201526001600160a01b03909216602483015261ffff1660448201529082908290818381606481015b03925af1801561053957612bd3575b80612a78565b612bdc90615aad565b61037a578038612bcd565b5061ffff8216835260196020526001600160a01b036040842054163314612b67565b506001600160a01b038454163314612af8565b503461037a578060031936011261037a5761ffff604082600260209452601b8452205416604051908152f35b503461037a57602036600319011261037a576001600160a01b03604060209261ffff612c72615a11565b16815260118452205416604051908152f35b503461037a57604036600319011261037a57612c9e615a42565b612ca6615a22565b3383526007602052612cbe60ff604085205416615bd9565b6001600160a01b0390838260055416803b1561054457604051632142170760e11b81526001600160a01b038616600482015230602482015261ffff841660448201529082908290606490829084905af1801561053957612d9d575b50507f8b6eebbdec11343459b3554f4b96ba6b00fb0f1c9803e175df47bbf4f7e0a0bb91602091612d7961ffff91828116938489526019865260408920971696876001600160a01b0319825416179055868852601e855260408820615d13565b60215490612d88818316615dd3565b169061ffff191617602155604051908152a280f35b612da690615aad565b6110cb578338612d19565b503461037a578060031936011261037a5760208054604051908152f35b503461037a57602036600319011261037a576001600160a01b03604060209261ffff612df8615a11565b16815260098452205416604051908152f35b503461037a57602036600319011261037a5760406020916001600160a01b03612e31615a42565b168152602283522054604051908152f35b503461037a57608036600319011261037a57612e5c615a42565b90612e65615a22565b612e6d615a7d565b92612e76615a9d565b9333845260ff60209160078352612e9282604088205416615bd9565b166001808203612fa15750508394612f42917f353dc3aef968a6a73b5fee216416835a4f8cb955339ecd211d9a9e07bdc76bc561ffff91828716808952600b82526001600160a01b0393612ef18560408c205416958916958614615d3d565b818a52600b83526040808b2080546001600160a01b0319169055602484528a20805460ff1916905560085490612f28818316615de6565b169061ffff191617600855604051908152a25b8284615df7565b612f4d601f54615dc6565b601f556001600160a01b036003541691823b1561236757604051632142170760e11b81523060048201526001600160a01b03909216602483015261ffff166044820152908290829081838160648101612346565b600282810361305b575050508394612f42917f7d4e06c18795f0a46e6788c6fb3d66ffd90ecf8977ec9f1e2baa9051eb42eeb161ffff91828716808952600a82526001600160a01b03936130008560408c205416958916958614615d3d565b818a52600a835260408a206001600160a01b031981541690556024835260408a2060ff19815416905563ffff000061303f600854928360101c16615de6565b60101b169063ffff0000191617600855604051908152a2612f3b565b600393928085036131d357505061ffff9283861691828852600984526001600160a01b03946130958660408b205416968816968714615d3d565b83895260098552604089206001600160a01b0319815416905560249081865260408a2060ff19815416905582600052601b938487526040600020546000935b818510613118575b50505050505050917f65d7389b4b92a26ff3bda27f72e7035cfd365bdbeb67007bcdb592126acefd2c869792612f4294604051908152a2612f3b565b85600052868952858885613130886040600020615cdc565b905490871b1c16036131ca5760005286895260406000209060001983019283116106da57509361068e7f65d7389b4b92a26ff3bda27f72e7035cfd365bdbeb67007bcdb592126acefd2c97948e9f9a97946131936131ab95612f429e9c99615cdc565b9054911b1c1691846000528588526040600020615cdc565b60005282526131bd6040600020615d88565b92948194993880806130dc565b909401936130d4565b929390926004810361328457505050508394612f42917ffc6cbfef07cde2a0f8e48ee78e5bcc2c1e67e3d3d384a6098a6a450742263ebd61ffff91828716808952600d82526001600160a01b03936132368560408c205416958916958614615d3d565b818a52600d83526040808b2080546001600160a01b0319169055602484528a20805460ff19169055600c549061326d818316615de6565b169061ffff191617600c55604051908152a2612f3b565b929392600581036133e7575061ffff9384871692838952600e85526001600160a01b03956132bd8760408c205416978916978814615d3d565b848a52600e865260408a206001600160a01b0319815416905560249384875260408b2060ff19815416905583600052601b94858852604060002054906000945b828610613342575b5050505050505050917fb1c64268b67eef6584cea022efe1cfe7314634f05b6f9bb974257bdc0383243f869792612f4294604051908152a2612f3b565b86600052878a528885613359886040600020615cdc565b905490871b1c16036133de57508560005286895260406000209060001983019283116106da57509361068e7fb1c64268b67eef6584cea022efe1cfe7314634f05b6f9bb974257bdc0383243f97948e9f9a97946131936133be95612f429e9c99615cdc565b60005282526133d06040600020615d88565b929481949938808080613305565b809501946132fd565b90979350600681036134a557505084955090612f42917f1a91fc99f7ba6670afa9040ced9846e2e4ae5773fbd2d747eda6c2f5d8633c3161ffff91828716808952600f82526001600160a01b039361344a8560408c205416958916958614615d3d565b818a52600f835260408a206001600160a01b031981541690556024835260408a2060ff19815416905563ffff0000613489600c54928360101c16615de6565b60101b169063ffff0000191617600c55604051908152a2612f3b565b6007810361355257505084955090612f42917f83622d58cf015c18e226a0d9d17619745b99d952a5740e4a60cd8942360c2c6b61ffff91828716808952601582526001600160a01b03936135048560408c205416958916958614615d3d565b818a52601583526040808b2080546001600160a01b0319169055602484528a20805460ff191690556014549061353b818316615de6565b169061ffff191617601455604051908152a2612f3b565b6008810361360c57505084955090612f42917f3fa3aa79eea014342138abcf13a240683fb1a7ec35fdcfc4d3cc0bd7b8c1303061ffff91828716808952601682526001600160a01b03936135b18560408c205416958916958614615d3d565b818a526016835260408a206001600160a01b031981541690556024835260408a2060ff19815416905563ffff00006135f0601454928360101c16615de6565b60101b169063ffff0000191617601455604051908152a2612f3b565b60098103613787575061ffff9687861691828852601784526001600160a01b03986136428a60408b2054169a88169a8b14615d3d565b83895260178552604089206001600160a01b0319815416905560249283865260408a2060ff1981541690556004600052601b93848752604060002054906000945b8286106136c7575b50505050505050957f0e86cc5d4242083c8e47d8d91f8b65ad3b640a0888c9c25da628544950cdef53612f4293928798604051908152a2612f3b565b600460005286895287856136df886040600020615cdc565b905490871b1c160361377e5750600460005285885260406000209060001983019283116106da57509361068e8c9d97947f0e86cc5d4242083c8e47d8d91f8b65ad3b640a0888c9c25da628544950cdef53979461374461375d95612f429d9c99615cdc565b9054911b1c169160046000528487526040600020615cdc565b600460005282526137716040600020615d88565b929881949538808061368b565b80950194613683565b909690600a810361383757505084955090612f42917f3b09adbdbbf3a9a7099a6851c3126ee181d4645531ed78837f2a0c105156231461ffff91828716808952601182526001600160a01b03936137e98560408c205416958916958614615d3d565b818a52601183526040808b2080546001600160a01b0319169055602484528a20805460ff1916905560105490613820818316615de6565b169061ffff191617601055604051908152a2612f3b565b600b81036138f157505084955090612f42917fc7566e16b1dfb6ea96eca0b07ecc81ac60913a7e91a31829e986b65acf3948ca61ffff91828716808952601282526001600160a01b03936138968560408c205416958916958614615d3d565b818a526012835260408a206001600160a01b031981541690556024835260408a2060ff19815416905563ffff00006138d5601054928360101c16615de6565b60101b169063ffff0000191617601055604051908152a2612f3b565b600c14613907575b5050839450612f4290612f3b565b61ffff80861691828852601384526001600160a01b03986139338a60408b2054169a88169a8b14615d3d565b83895260138552604089206001600160a01b0319815416905560249283865260408a2060ff19815416905582600052601b93848752604060002054906000935b8285106139b9575b50505050505050957f9a55333272105310d1eac580297eb36abed153aeff87b7e87a264f62aac44850612f4293928798604051908152a290386138f9565b8560005286895287846139d0876040600020615cdc565b905490891b1c1603613a6c57508460005285885260406000209060001983019283116106da57508b9c969361068e7f9a55333272105310d1eac580297eb36abed153aeff87b7e87a264f62aac448509794613a34612f429c9b9895613a4d95615cdc565b905490861b1c1691846000528588526040600020615cdc565b6000528252613a5f6040600020615d88565b929881949538808061397b565b80940193613973565b503461037a578060031936011261037a57602061ffff60215416604051908152f35b503461037a578060031936011261037a576001600160a01b036020915416604051908152f35b503461037a57604036600319011261037a5780613ad8615a11565b613ae0615a58565b60265460ff8160081c1680613bcd575b15613b4757506001600160a01b036004541691823b1561236757604051632142170760e11b81523060048201526001600160a01b03909216602483015261ffff166044820152908290829081838160648101612b4b565b60ff1680613bab575b613b5a5750505080f35b6001600160a01b036004541691823b1561236757604051632142170760e11b81523060048201526001600160a01b03909216602483015261ffff166044820152908290829081838160648101612bbe565b5061ffff8216835260186020526001600160a01b036040842054163314613b50565b506001600160a01b038454163314613af0565b503461037a578060031936011261037a57602061ffff60105416604051908152f35b503461037a57602036600319011261037a576001600160a01b03604060209261ffff613c2c615a11565b16815260128452205416604051908152f35b503461037a57604036600319011261037a5780613c59615a42565b3382526007602052613c7160ff604084205416615bd9565b6001600160a01b0360025416803b1561236c576040517f79cc67900000000000000000000000000000000000000000000000000000000081526001600160a01b03909216600483015260248035908301528290829081838160448101612346565b503461037a578060031936011261037a576020601f54604051908152f35b503461037a57602036600319011261037a576001600160a01b03604060209261ffff613d1a615a11565b168152600a8452205416604051908152f35b503461037a57602036600319011261037a57613d46615a6e565b613d4e615b81565b60ff801960265416911515161760265580f35b503461037a57606036600319011261037a57613d7b615a42565b613d83615a22565b613d8b615a7d565b33845260ff60209160078352613da682604088205416615bd9565b16600181101580613f10575b15613ecc576001600160a01b0390858260045416803b1561054457604051632142170760e11b81526001600160a01b038816600482015230602482015261ffff871660448201529082908290606490829084905af1801561053957613eb8575b505083613ea29161ffff7ff21b092d2b78057537987c15cf87ef20f0d705bd1bcccc46a317d554e10c78c99616938489526018865260408920971696876001600160a01b0319825416179055808852601a8552613e728260408a20615d13565b83885260238552604088208160ff19825416179055868852601d8552604088209060005284526040600020615d13565b613eac8254615ccd565b8255604051908152a280f35b613ec190615aad565b611a6c578538613e12565b6064826040519062461bcd60e51b82526004820152600a60248201527f696e76616c6964206964000000000000000000000000000000000000000000006044820152fd5b506005811115613db2565b503461037a578060031936011261037a57613f34615b81565b60006001600160a01b0381546001600160a01b031981168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461037a576020806003193601126105445790613f91615a42565b6001600160a01b031691600190825b60ff831660058111613fdd57613fd791613fd191878752601c85526040872090600052845260406000205490615c24565b92615c8a565b91613fa0565b600186838588805b60ff8616600581116140225761401c9161401691878552601d86526040852090600052855260406000205490615c24565b95615c8a565b94613fe5565b8361402d8684615c24565b604051908152f35b503461037a5760a036600319011261037a5761404f615a11565b614057615a7d565b61405f615a9d565b916084356001600160a01b0394858216938483036109f4573382526020956007875260ff61409281604086205416615bd9565b839063ffffffff60243516928185166001811460001461427a575016600181036141da57505060018352601a875260408320805461413893926140df92916140d991615ef3565b90615cdc565b949061ffff958691549060031b1c1684526018885288604085205416948087168552600b8952604085206001600160a01b0319815416905560085490614126818316615de6565b169061ffff1916176008555b85615df7565b8560035416803b1561054457604051632142170760e11b81523060048201526001600160a01b038416602482015261ffff851660448201529082908290606490829084905af18015610539576141c6575b505083947fd94293c5b4390a09be50f17655e06e594ae18d15ccd204fd98851ab26d273f9f911693849261ffff60405191168152a3604051908152f35b6141d08291615aad565b61037a5780614189565b909491906002146141f1575b509061413891614132565b60018452601b88526040842080549295506141389392614215926140d99190615ef3565b949061ffff958691549060031b1c1684526009885288604085205416948087168552600a8952604085206001600160a01b0319815416905563ffff0000614263600854928360101c16615de6565b60101b169063ffff000019161760085590916141e6565b96929594939190600288036143205760049293949596975016146142a357509061413891614132565b60028452601b885260408420805492955061413893926142c7926140d99190615ef3565b949061ffff958691549060031b1c168452600e885288604085205416948087168552600d8952604085206001600160a01b03198154169055600c549061430e818316615de6565b169061ffff191617600c5590916141e6565b600397808903614445575016600a81036143ab5750858452601a895260408420805494955061413894614357926140d99190615ef3565b9561ffff96879254911b1c168452601888528860408520541694808716855260118952604085206001600160a01b031981541690556010549061439b818316615de6565b169061ffff191617601055614132565b600b146143c0575b5061413892939450614132565b858452601b8952604084208054949550614138946143e2926140d99190615ef3565b9561ffff96879254911b1c168452601388528860408520541694808716855260128952604085206001600160a01b0319815416905563ffff000061442d601054928360101c16615de6565b60101b169063ffff00001916176010558493926143b3565b60041461445c575b50505061413892939450614132565b16600781036144e3575060048452601a895260408420805494955061413894614489926140d99190615ef3565b9561ffff96879254911b1c168452601888528860408520541694808716855260158952604085206001600160a01b03198154169055601454906144cd818316615de6565b169061ffff1916176014555b849392388061444d565b6008146144f8575b50614138929394506144d9565b60048452601b89526040842080549495506141389461451b926140d99190615ef3565b9561ffff96879254911b1c168452601788528860408520541694808716855260168952604085206001600160a01b0319815416905563ffff0000614566601454928360101c16615de6565b60101b169063ffff00001916176014558493926144eb565b503461037a578060031936011261037a5760206001600160a01b0360035416604051908152f35b503461037a57602036600319011261037a576001600160a01b03604060209261ffff6145cf615a11565b168152600b8452205416604051908152f35b503461037a57602036600319011261037a576001600160a01b03604060209261ffff61460b615a11565b16815260168452205416604051908152f35b503461037a57602036600319011261037a576001600160a01b03604060209261ffff614647615a11565b168152600e8452205416604051908152f35b503461037a57602036600319011261037a576001600160a01b03604060209261ffff614683615a11565b16815260158452205416604051908152f35b503461037a57602036600319011261037a576001600160a01b036146b7615a42565b6146bf615b81565b166001600160a01b0319600254161760025580f35b503461037a578060031936011261037a57602061ffff60145416604051908152f35b503461037a576020908160031936011261037a57614712615a42565b9181906001600160a01b0360019416915b60ff85166005811161475a57614754916116bc91858752601d85526040872090600052845260406000205490615c24565b93614723565b50916147668493615c9b565b839060015b60ff81166005811161177457848752601d808752604088208260005287526040600020549188915b8383106147ac57505050506147a790615c8a565b61476b565b91956117626147dc91898c9b969a94979b5284865260408c2087600052865261ffff61174a8a6040600020615cdc565b91979390969297614793565b503461037a578060031936011261037a57602061ffff60085460101c16604051908152f35b503461037a57606036600319011261037a57614827615a42565b61482f615a22565b90614838615a7d565b90338452600760205261485160ff604086205416615bd9565b61ffff8316845260186020526001600160a01b03916148798360408720541684841614615d3d565b848360045416803b1561054457604051632142170760e11b81523060048201526001600160a01b038516602482015261ffff871660448201529082908290606490829084905af1801561053957614cde575b505061ffff841685526018602052604085206001600160a01b0319815416905560236020526040852060ff1981541690558282168552601d806020526040862060ff831660005260205260406000205486905b808210614bf2575b50505060ff81168552601a602052604085205480600019810111614bde5785908190600019810160011c5b81841061499c575b82887fe7f8eae92cdda88e12bf251d1c6110e00b3d777ad50500a0f47e685f5e3e38eb60208a8a61498a8354615dc6565b835561ffff604051951685521692a280f35b60ff85168352601a60205261ffff6149b78560408620615cdc565b919054818b169260031b1c1614600014614a53575092614a346020959361068e61ffff614a1960ff9660407fe7f8eae92cdda88e12bf251d1c6110e00b3d777ad50500a0f47e685f5e3e38eb9c9a8989168352601a8d52600019019120615cdc565b90549060031b1c16918585168c52601a895260408c20615cdc565b168652601a8352614a4760408720615d88565b91819350853880614959565b60ff85168352601a60205261ffff614a75604085206000198786030190615cdc565b905460039190911b1c811690891603614ad6575092614a346020959361068e61ffff614a1960ff9660407fe7f8eae92cdda88e12bf251d1c6110e00b3d777ad50500a0f47e685f5e3e38eb9c9a8989168352601a8d52600019019120615cdc565b60ff85168352601a60205261ffff614af46040852086840390615cdc565b905460039190911b1c811690891603614b55575092614a346020959361068e61ffff614a1960ff9660407fe7f8eae92cdda88e12bf251d1c6110e00b3d777ad50500a0f47e685f5e3e38eb9c9a8989168352601a8d52600019019120615cdc565b60ff85168352601a60205261ffff614b736040852086840190615cdc565b905460039190911b1c811690891603614bd4575092614a346020959361068e61ffff614a1960ff9660407fe7f8eae92cdda88e12bf251d1c6110e00b3d777ad50500a0f47e685f5e3e38eb9c9a8989168352601a8d52600019019120615cdc565b9260010192614951565b602486634e487b7160e01b81526011600452fd5b8585168852826020526040882060ff8516600052602052614c17826040600020615cdc565b905460039291831b1c61ffff90811690891603614cd2578686168952836020526040892060ff861660005260205260406000206000198201918211614cbe57614c939392614c6b61068e9361ffff93615cdc565b9054911b1c16918787168a528460205260408a2060ff87166000526020526040600020615cdc565b83831686526020526040852060ff8216600052602052614cb66040600020615d88565b388080614926565b60248a634e487b7160e01b81526011600452fd5b9160019150019061491e565b614ce790615aad565b6105355784386148cb565b503461037a57602036600319011261037a57614d0c615a6e565b614d14615b81565b61ff0060265491151560081b169061ff0019161760265580f35b503461037a578060031936011261037a5760206001600160a01b0360015416604051908152f35b503461037a578060031936011261037a5761ffff604082600460209452601b8452205416604051908152f35b503461037a57602036600319011261037a576004359060ff82168092036109f45760408160209361ffff9352601a8452205416604051908152f35b503461037a578060031936011261037a57602060ff602654166040519015158152f35b503461037a578060031936011261037a5760206001600160a01b0360045416604051908152f35b503461037a57604036600319011261037a57614e20615a42565b906001600160a01b03614e31615a8d565b921691828252601c9160209083825260ff6040822093169283600052825260406000205493614e5f85615c9b565b95825b868110614e7757604051806113718a82615af9565b6001908285528386526040852087600052865261ffff614e9b826040600020615cdc565b90549060031b1c16614ead828b615cff565b5201614e62565b503461037a57604036600319011261037a57614ece615a42565b90614ed7615a22565b91338252602060078152614ef160ff604085205416615bd9565b61ffff9384811690818552601983526001600160a01b03938460408720541694614f1f818316968714615d3d565b6005541690813b1561070b57604051632142170760e11b81523060048201526001600160a01b03909116602482015261ffff9092166044830152859082908183816064810103925af18015611a615790859161509f575b5081905260198252604084206001600160a01b03198154169055828452601e9485835260408520549585965b808810614fde575b50506021547f99175dc3ea3b7c111b073fe0a90ef647baf911324dd47b428e8fb6f2f22bfe80939291612d88828216615de6565b829086885282865284614ff48a60408b20615cdc565b905460039491851b1c16036150935786885282865260408820600019820191821161507f57846150659361504f7f99175dc3ea3b7c111b073fe0a90ef647baf911324dd47b428e8fb6f2f22bfe809a9b9c9461068e94615cdc565b9054911b1c1691898b5284885260408b20615cdc565b858752835261507660408720615d88565b85949338614faa565b602489634e487b7160e01b81526011600452fd5b97600191500196614fa2565b6150a890615aad565b6110cb578338614f76565b503461037a578060031936011261037a5760206001600160a01b0360025416604051908152f35b503461037a578060031936011261037a5760206001600160a01b0360055416604051908152f35b503461037a57602036600319011261037a576001600160a01b03604060209261ffff61512b615a11565b168152600f8452205416604051908152f35b503461037a57602036600319011261037a576001600160a01b03604060209261ffff615167615a11565b168152600d8452205416604051908152f35b503461037a578060031936011261037a57602061ffff600c5460101c16604051908152f35b503461037a57608036600319011261037a576151b8615a42565b506151c1615a58565b5060643567ffffffffffffffff8082116110cf57366023830112156110cf57816004013590811161524a57604051615203601f8301601f191660200182615ad7565b81815236602483850101116110cb57816024602094018483013701015260206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b602483634e487b7160e01b81526041600452fd5b503461037a578060031936011261037a57602060ff60265460081c166040519015158152f35b503461037a5760a036600319011261037a5761529e615a11565b6152a6615a7d565b606435916001600160a01b0380841692838503611a6c576084359081159182150361070b57338752602095600787526152e560ff60408a205416615bd9565b60ff9091169060243563ffffffff1688600184036154a3575061531f91925060028952601b88526140d960408a209160408b205490615ef3565b919061ffff928391549060031b1c168852600e8752836040892054169260001461540f5787846003541691823b1561054457604051632142170760e11b81526001600160a01b039182166004820152908516602482015261ffff87166044820152918290606490829084905af18015615404576153f0575b5090604086977fd94293c5b4390a09be50f17655e06e594ae18d15ccd204fd98851ab26d273f9f94935b8616815260098852206001600160a01b031981541690555b1693849261ffff60405191168152a3604051908152f35b6153fa8891615aad565b61070b5738615397565b6040513d8a823e3d90fd5b508260035416803b15610ced57604051632142170760e11b81523060048201526001600160a01b038416602482015261ffff861660448201529088908290606490829084905af180156154045761548f575b5090604086977fd94293c5b4390a09be50f17655e06e594ae18d15ccd204fd98851ab26d273f9f94936153c1565b6154998891615aad565b61070b5738615461565b6002840361563357506154cd91925060028952601b88526140d960408a209160408b205490615ef3565b919061ffff928391549060031b1c168852600e8752836040892054169260001461559f5787846003541691823b1561054457604051632142170760e11b81526001600160a01b039182166004820152908516602482015261ffff87166044820152918290606490829084905af180156154045761558b575b5090604086977fd94293c5b4390a09be50f17655e06e594ae18d15ccd204fd98851ab26d273f9f94935b86168152600f8852206001600160a01b031981541690556153d9565b6155958891615aad565b61070b5738615545565b508260035416803b15610ced57604051632142170760e11b81523060048201526001600160a01b038416602482015261ffff861660448201529088908290606490829084905af180156154045761561f575b5090604086977fd94293c5b4390a09be50f17655e06e594ae18d15ccd204fd98851ab26d273f9f949361556f565b6156298891615aad565b61070b57386155f1565b6003938085036157c0575050846156608a9260028452601b8b526140d96040852091604086205490615ef3565b949061ffff9586915490831b1c168352600e8a52816040842054169560001461572d57541691823b1561054457604051632142170760e11b81526001600160a01b039182166004820152908516602482015261ffff87166044820152918290606490829084905af1801561540457615719575b5090604086977fd94293c5b4390a09be50f17655e06e594ae18d15ccd204fd98851ab26d273f9f94935b8616815260138852206001600160a01b031981541690556153d9565b6157238891615aad565b61070b57386156d3565b5416915050803b15610ced57604051632142170760e11b81523060048201526001600160a01b038416602482015261ffff861660448201529088908290606490829084905af18015615404576157ac575b5090604086977fd94293c5b4390a09be50f17655e06e594ae18d15ccd204fd98851ab26d273f9f94936156fd565b6157b68891615aad565b61070b573861577e565b91999094909392916004146157ff575b50505050849550907fd94293c5b4390a09be50f17655e06e594ae18d15ccd204fd98851ab26d273f9f916153d9565b91935091615823819960028352601b8a526140d96040842091604085205490615ef3565b939061ffff9485915490871b1c168252600e895285806040842054169586946000146158f7575416803b156110cf57604051632142170760e11b81526001600160a01b03928316600482015293909116602484015261ffff871660448401528290606490829084905af18015615404576158e3575b5090604086977fd94293c5b4390a09be50f17655e06e594ae18d15ccd204fd98851ab26d273f9f94935b8616815260178852206001600160a01b0319815416905590913880806157d0565b6158ed8891615aad565b61070b5738615898565b541692505050803b15610ced57604051632142170760e11b81523060048201526001600160a01b038416602482015261ffff861660448201529088908290606490829084905af18015615404579187986040927fd94293c5b4390a09be50f17655e06e594ae18d15ccd204fd98851ab26d273f9f96959461597a575b50906158c2565b61598390615aad565b38615973565b503461037a57604036600319011261037a576159a3615a42565b602435908115158092036110cf576001600160a01b03906159c2615b81565b1682526007602052604082209060ff8019835416911617905580f35b9050346105445760203660031901126105445760ff604060209361ffff615a03615a11565b168152600685522054168152f35b6004359061ffff821682036109f457565b6024359061ffff821682036109f457565b359061ffff821682036109f457565b600435906001600160a01b03821682036109f457565b602435906001600160a01b03821682036109f457565b6004359081151582036109f457565b6044359060ff821682036109f457565b6024359060ff821682036109f457565b6064359060ff821682036109f457565b67ffffffffffffffff8111615ac157604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117615ac157604052565b6020908160408183019282815285518094520193019160005b828110615b20575050505090565b835161ffff1685529381019392810192600101615b12565b9181601f840112156109f45782359167ffffffffffffffff83116109f4576020808501948460051b0101116109f457565b67ffffffffffffffff8111615ac15760051b60200190565b6001600160a01b03600054163303615b9557565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b15615be057565b606460405162461bcd60e51b815260206004820152601a60248201527f6f6e6c792067616d6520636f6e747261637420616c6c6f7765640000000000006044820152fd5b91908201809211615c3157565b634e487b7160e01b600052601160045260246000fd5b9190811015615c575760051b0190565b634e487b7160e01b600052603260045260246000fd5b3560ff811681036109f45790565b3561ffff811681036109f45790565b60ff1660ff8114615c315760010190565b90615ca582615b69565b615cb26040519182615ad7565b8281528092615cc3601f1991615b69565b0190602036910137565b6000198114615c315760010190565b9190918054831015615c5757600052601e60206000208360041c019260011b1690565b8051821015615c575760209160051b010190565b9081549168010000000000000000831015615ac1578261068e916001615d3b95018155615cdc565b565b15615d4457565b606460405162461bcd60e51b815260206004820152600960248201527f6e6f74206f776e657200000000000000000000000000000000000000000000006044820152fd5b80548015615db0576000190190615d9f8282615cdc565b61ffff82549160031b1b1916905555565b634e487b7160e01b600052603160045260246000fd5b8015615c31576000190190565b61ffff809116908114615c315760010190565b61ffff168015615c31576000190190565b9291906001600160a01b031690600090828252601c60209080825260409460ff86862094169384865283528585205485985b818a10615e3d575b50505050505050509050565b8287528385528787208688528552615e578a898920615cdc565b9290549161ffff938460039481841692861b1c1614600014615ee457508388528486528888208789528652888820600019820191821161507f5792615ed69a9b92615ea861068e93615ec596615cdc565b9054911b1c1691848952858752898920888a528752898920615cdc565b845281528383209183525220615d88565b803880808080808080615e31565b9a909250600191500198615e29565b8115615efd570690565b634e487b7160e01b600052601260045260246000fd5b90916040602092828482018583525201929160005b828110615f36575050505090565b90919293828060019261ffff615f4b89615a33565b16815201950193929101615f28565b91909161ffff80809416911601918211615c315756fea264697066735822122090ad14d3cbe7c32d98e42e3f2db2e72bb27c64d6683e6f7c052a499fb95ef10764736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000041473032b82a4205ddde155cc7ed210b000b014d
-----Decoded View---------------
Arg [0] : _topia (address): 0x41473032b82a4205DDDe155CC7ED210B000b014D
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000041473032b82a4205ddde155cc7ed210b000b014d
Deployed Bytecode Sourcemap
404:40381:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3161:30;404:40381;3161:30;;;404:40381;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39300:9;404:40381;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;-1:-1:-1;;;;;404:40381:10;;;;;;:::i;:::-;;;;38917:16;404:40381;;;;;;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;;;:::i;:::-;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;7494:10;404:40381;;;;;7480:13;404:40381;;7472:64;404:40381;;;;;;7472:64;:::i;:::-;404:40381;16327:1;;16316:12;;;;;:28;;;404:40381;;;;16378:12;;;16327:1;;-1:-1:-1;16430:24:10;;;;404:40381;;;;;;16509:20;404:40381;;16574:36;404:40381;;;;;-1:-1:-1;;;;;404:40381:10;;;;-1:-1:-1;;;;;;404:40381:10;;;;;;;;;;;16574:36;16426:368;18115:24;;;404:40381;-1:-1:-1;;;;;404:40381:10;;;;;18190:60;;;;;404:40381;;-1:-1:-1;;;18190:60:10;;-1:-1:-1;;;;;404:40381:10;;;18190:60;;404:40381;18239:4;404:40381;;;;;;;;;;;;;;;;;;;;;;18190:60;;;;;;;;18111:472;404:40381;;18334:44;404:40381;;;;;;;;;;;;;;;;;;;;;;;;18334:15;404:40381;;;;;;;;;;;;;18334:44;:::i;:::-;404:40381;;18190:60;;;;:::i;:::-;404:40381;;18190:60;;;;404:40381;;;;18190:60;404:40381;;;;;;;;;18190:60;404:40381;;;18111:472;404:40381;;-1:-1:-1;;;;;404:40381:10;;;;;;;18409:60;;;;;404:40381;;-1:-1:-1;;;18409:60:10;;18442:4;404:40381;18409:60;;404:40381;-1:-1:-1;;;;;404:40381:10;;;;;;;;;;;;;;;;;;;;;;;;18409:60;;;;;;;;18111:472;404:40381;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26087:15;404:40381;;;;;;;;;;;;;;;;;;;26151:10;404:40381;26147:411;26163:5;;;;;;26147:411;18111:472;;;;;;;;;;;404:40381;;26151:10;404:40381;;;;;;;;;;;;;;;;26188:46;404:40381;;;;26188:46;:::i;:::-;404:40381;;;;;;;26188:53;404:40381;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26310:51;;;26261:100;26310:51;;;26261:46;26310:51;;:::i;:::-;404:40381;;;;;;;;;;;;;;;;;;;;;;;;26261:46;:::i;:::-;:100;404:40381;;;;;;;;;;;;;;;;;;;;;;;;;;;26261:100;404:40381;;;;;;;;;;;26379:47;404:40381;;;26379:47;:::i;:::-;26447:5;;;;;;;;;;;;;404:40381;-1:-1:-1;;;404:40381:10;;;;;;;26185:363;404:40381;;;;26151:10;;18409:60;;;;:::i;:::-;404:40381;;18409:60;;;;404:40381;;;;16426:368;404:40381;;;;;;16695:20;404:40381;;;;;-1:-1:-1;;;;;;404:40381:10;;;;;;;;;;16743:36;404:40381;-1:-1:-1;;;;;404:40381:10;;16743:36;;16426:368;;16374:1728;16825:1;16814:12;;16825:1;;-1:-1:-1;16866:24:10;;;;404:40381;;;;;;16945:20;404:40381;;17010:36;404:40381;;;;;-1:-1:-1;;;;;404:40381:10;;;;-1:-1:-1;;;;;;404:40381:10;;;;;;;;;;;17010:36;16862:368;16374:1728;;16862:368;404:40381;;;;;;17131:20;404:40381;;;;;-1:-1:-1;;;;;;404:40381:10;;;;;;;;;;17179:36;404:40381;-1:-1:-1;;;;;404:40381:10;;17179:36;;16374:1728;;16810:1292;404:40381;17250:12;;17261:1;;-1:-1:-1;17298:24:10;;;;404:40381;;;;;;17377:16;404:40381;;17438:32;404:40381;;;;;-1:-1:-1;;;;;404:40381:10;;;;-1:-1:-1;;;;;;404:40381:10;;;;;;;;;;;17438:32;16374:1728;;17294:352;404:40381;;;;;;17555:16;404:40381;;;;;-1:-1:-1;;;;;;404:40381:10;;;;;;;;;;17599:32;404:40381;-1:-1:-1;;;;;404:40381:10;;17599:32;;16374:1728;;17246:856;404:40381;17666:12;16810:1292;17662:440;17720:24;;;;404:40381;;;;;;17799:22;404:40381;;17866:38;404:40381;;;;;-1:-1:-1;;;;;404:40381:10;;;;-1:-1:-1;;;;;;404:40381:10;;;;;;;;;;;17866:38;16374:1728;;17716:376;404:40381;;;;;;17989:22;404:40381;;;;;-1:-1:-1;;;;;;404:40381:10;;;;;;;;;;18039:38;404:40381;-1:-1:-1;;;;;404:40381:10;;18039:38;;16374:1728;;404:40381;;;;;;-1:-1:-1;;;404:40381:10;;;;;;;;;;;;;;;;;16316:28;16332:12;404:40381;16332:12;;;16316:28;;404:40381;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;;;:::i;:::-;;;:::i;:::-;;;;:::i;:::-;7494:10;404:40381;;;;7480:13;404:40381;;;;;7472:64;404:40381;;;;;;7472:64;:::i;:::-;404:40381;34969:1;34950:20;;34946:1108;;;;;;-1:-1:-1;;;;;404:40381:10;;;;;;35005:63;;;;;404:40381;;-1:-1:-1;;;35005:63:10;;-1:-1:-1;;;;;404:40381:10;;;35005:63;;404:40381;35057:4;404:40381;;;;;;;;;;;;;;;;;;;;;;35005:63;;;;;;;;34946:1108;404:40381;;-1:-1:-1;;;;;404:40381:10;35180:29;404:40381;;;;;;;;;35086:19;404:40381;;;;;;;;;;-1:-1:-1;;;;;;404:40381:10;;;;;;35139:18;404:40381;;35139:18;404:40381;;;35139:18;:::i;:::-;404:40381;;;;;;35139:18;404:40381;;;;;;35180:29;34946:1108;36063:18;;404:40381;36063:18;:::i;:::-;;404:40381;;;;;;36091:15;404:40381;;;;;;;;;;36091:52;404:40381;;;;36091:52;:::i;:::-;36163:768;;;404:40381;;36314:26;404:40381;;;;;;36208:17;404:40381;;;;;;;36208:27;36204:92;;36163:768;404:40381;;;;;36314:26;404:40381;;36204:92;404:40381;;;;;-1:-1:-1;;404:40381:10;34969:1;404:40381;;;36204:92;;36163:768;36381:1;36362:20;;36381:1;;404:40381;;36509:25;404:40381;;;;;;36403:17;404:40381;;;;;;;36403:27;36399:92;;404:40381;;;;;36509:25;404:40381;;36399:92;404:40381;;;;;-1:-1:-1;;404:40381:10;;;;;36399:92;;36358:573;404:40381;36556:20;;36575:1;;404:40381;;36704:23;404:40381;;;;;;36597:17;404:40381;;;;;;;36597:27;36593:93;;404:40381;;;;;36704:23;404:40381;;36593:93;404:40381;;;;;-1:-1:-1;;404:40381:10;;;;;36593:93;;36552:379;404:40381;36748:20;36744:187;;36552:379;;;;;404:40381;;36744:187;404:40381;36895:25;404:40381;;;;;;36789:17;404:40381;;;;;;;36789:27;36785:92;;36744:187;404:40381;;;;;36895:25;36744:187;;;;;;36785:92;404:40381;;;;;-1:-1:-1;;404:40381:10;7480:13;404:40381;;;36785:92;;35005:63;;;;:::i;:::-;404:40381;;35005:63;;;;404:40381;;;;34946:1108;35249:1;35230:20;;35249:1;;-1:-1:-1;;;;;404:40381:10;;;;;;35289:63;;;;;404:40381;;-1:-1:-1;;;35289:63:10;;-1:-1:-1;;;;;404:40381:10;;;35289:63;;404:40381;35341:4;404:40381;;;;;;;;;;;;;;;;;;;;;;35289:63;;;;;;;;35226:828;404:40381;;-1:-1:-1;;;;;404:40381:10;35462:28;404:40381;;;;;;;;;35370:18;404:40381;;;;;;;;;;-1:-1:-1;;;;;;404:40381:10;;;;;;35422:17;404:40381;;35422:17;404:40381;;;35422:17;:::i;:::-;404:40381;;;;;;35422:17;404:40381;;;;;;35462:28;34946:1108;;35289:63;;;;:::i;:::-;404:40381;;35289:63;;;;35226:828;404:40381;35511:20;;35530:1;;-1:-1:-1;;;;;404:40381:10;;;;;;35569:63;;;;;404:40381;;-1:-1:-1;;;35569:63:10;;-1:-1:-1;;;;;404:40381:10;;;35569:63;;404:40381;35621:4;404:40381;;;;;;;;;;;;;;;;;;;;;;35569:63;;;;;;;;35507:547;404:40381;;-1:-1:-1;;;;;404:40381:10;35738:26;404:40381;;;;;;;;;35650:16;404:40381;;;;;;;;;;-1:-1:-1;;;;;;404:40381:10;;;;;;35700:15;404:40381;;35700:15;404:40381;;;35700:15;:::i;:::-;404:40381;;;;;;35700:15;404:40381;;;;;;35738:26;34946:1108;;35569:63;;;;:::i;:::-;404:40381;;35569:63;;;;35507:547;404:40381;35785:20;;35781:273;;35507:547;-1:-1:-1;;;;;35507:547:10;34946:1108;;35781:273;-1:-1:-1;;;;;404:40381:10;;;;;;35842:63;;;;;404:40381;;-1:-1:-1;;;35842:63:10;;-1:-1:-1;;;;;404:40381:10;;;35842:63;;404:40381;35894:4;404:40381;;;;;;;;;;;;;;;;;;;;;;35842:63;;;;;;;;35781:273;404:40381;;-1:-1:-1;;;;;404:40381:10;36015:28;404:40381;;;;;;;;;35923:18;404:40381;;;;;;;;;;-1:-1:-1;;;;;;404:40381:10;;;;;;35975:17;404:40381;;35975:17;404:40381;;;35975:17;:::i;:::-;404:40381;;;;;;35975:17;404:40381;;;;;;36015:28;35781:273;;;;35842:63;;;;:::i;:::-;404:40381;;35842:63;;;;404:40381;;;;;;;-1:-1:-1;;404:40381:10;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;1063:62:0;;;;:::i;:::-;8027:34:10;;;404:40381;;8077:12;;404:40381;;;;;8091:21;;;;;;;404:40381;8137:9;;;;;;;;:::i;:::-;;:::i;:::-;404:40381;8137:14;;:33;;;8077:12;404:40381;;;;8220:9;;8203:13;;8220:9;;;;;;:::i;:::-;8203:13;;;;:::i;:::-;;:::i;:::-;404:40381;;;8185:17;404:40381;;;;;;;;;;;;;;;;;8077:12;;404:40381;;;;8137:33;8155:9;8168:2;8155:9;;;;;;;:::i;:::-;404:40381;8155:15;;8137:33;;8091:21;;404:40381;;;;;;;;;;;;;;;;;;;;;;;;;39923:16;404:40381;;;;;;;;;;;;;;;;;;;;;;;40492:1;404:40381;;;;40483:8;404:40381;;;;;;;;;;;;;;;;;;40602:35;40557;40512;40647;404:40381;40537:1;404:40381;;40483:8;404:40381;;;;;;;;40512:35;;:::i;:::-;404:40381;;;40483:8;404:40381;;;;;;;;40557:35;;:::i;:::-;404:40381;;;40483:8;404:40381;;;;;;;;40602:35;;:::i;:::-;404:40381;40672:1;404:40381;;40483:8;404:40381;;;;;40647:35;;:::i;:::-;404:40381;;;;;;;;;;-1:-1:-1;;;404:40381:10;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;;;:::i;:::-;1063:62:0;;:::i;:::-;-1:-1:-1;;;;;404:40381:10;;;2169:22:0;;;404:40381:10;;;;;-1:-1:-1;;;;;;404:40381:10;;;;;;2573:40:0;404:40381:10;2573:40:0;;404:40381:10;;;;;;-1:-1:-1;;;404:40381:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;-1:-1:-1;;;;;404:40381:10;;:::i;:::-;1063:62:0;;:::i;:::-;404:40381:10;-1:-1:-1;;;;;;404:40381:10;;;;;;;;7694:37;404:40381;;;7694:37;404:40381;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;;;;;;;;:::i;:::-;;;;3429:51;404:40381;;;;;;;;;;;;;;;;;;;;;;;;;;38312:15;404:40381;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;404:40381:10;;:::i;:::-;;;;;;10935:11;404:40381;;;;;;;10983:20;;;;:::i;:::-;11018:10;;11030;;;;;;404:40381;;;;;;;:::i;:::-;;;;11018:10;404:40381;;;;;;;;;11080:21;404:40381;;;;11080:21;:::i;:::-;404:40381;;;;;;;11057:45;;;;:::i;:::-;404:40381;;11018:10;;404:40381;;;;;;;;;;;;;;;;37617:1;404:40381;;;37607:9;404:40381;;;;;;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;;;:::i;:::-;;-1:-1:-1;;;;;404:40381:10;;:::i;:::-;;;;;;;10576:13;404:40381;;;;;;;;;;;;;;;;;;;;;;10634:20;;;;:::i;:::-;10669:10;;10681;;;;;;404:40381;;;;;;;:::i;10669:10::-;404:40381;;;;;;;;;;;;;;;;;10733:29;404:40381;;;;10733:29;:::i;:::-;404:40381;;;;;;;10708:55;;;;:::i;:::-;404:40381;;10669:10;;404:40381;;;;;;;-1:-1:-1;;404:40381:10;;;;;;:::i;:::-;37043:65;404:40381;-1:-1:-1;;;;;404:40381:10;;:::i;:::-;7494:10;;404:40381;;7480:13;404:40381;;7472:64;404:40381;;;;;;7472:64;:::i;:::-;404:40381;;;;;;;;37091:15;404:40381;;;;;;37043:65;;404:40381;;;;;;;;;-1:-1:-1;;404:40381:10;;;;;;:::i;:::-;;;7494:10;;404:40381;;7480:13;404:40381;;7472:64;404:40381;;;;;;7472:64;:::i;:::-;-1:-1:-1;;;;;404:40381:10;;;7083:14;404:40381;;7083:33;;;;;404:40381;;;7083:33;;-1:-1:-1;;;;;404:40381:10;;;7083:33;;404:40381;;;;;;;;;;;;;;;;;;7083:33;;;;;;;;404:40381;;;7210:57;404:40381;;;;;;;;7126:16;404:40381;;;;;7126:32;404:40381;;;7126:32;:::i;:::-;404:40381;;7168:27;404:40381;7168:27;404:40381;7168:27;:::i;:::-;;404:40381;;;;;;7237:12;404:40381;;;;7251:15;404:40381;;;;7210:57;404:40381;;7083:33;;;;:::i;:::-;404:40381;;7083:33;;;;404:40381;;;;;;;-1:-1:-1;;404:40381:10;;;;-1:-1:-1;;;;;404:40381:10;;;;;;:::i;:::-;;;;39714:22;404:40381;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9035:14;;9063:11;-1:-1:-1;;;;;9073:1:10;404:40381;;9059:97;9084:3;404:40381;;;9081:1;9076:6;;;;9084:3;404:40381;9103:42;404:40381;;;;9113:15;404:40381;;;;;;;;;;;;;;9103:42;;:::i;:::-;9084:3;;:::i;:::-;9063:11;;;9076:6;;;9182:20;9076:6;;9182:20;:::i;:::-;9212:10;9236:11;9073:1;9257:3;404:40381;;;9081:1;9249:6;;;;404:40381;;;9113:15;404:40381;;;;;;;;;;;;;;;9338:10;;9334:137;9350:5;;;;;;9257:3;;;;;;;:::i;:::-;9236:11;;9357:3;404:40381;;9453:3;9357;404:40381;;;;;;;;;;;;;;;;;;;;;;9406:28;404:40381;;;;9406:28;:::i;:::-;404:40381;;;;;;;9380:55;;;;:::i;:::-;404:40381;9453:3;:::i;:::-;9357;;:::i;:::-;9338:10;;;;;;;;;9249:6;404:40381;;;;9249:6;404:40381;;:::i;:::-;;;;;;;;;;;;;;;37803:16;404:40381;;;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7494:10;404:40381;;7480:13;404:40381;;7472:64;404:40381;;;;;;7472:64;:::i;:::-;404:40381;;19044:10;;404:40381;;19056:15;;;;;19110:1;404:40381;19092:14;;;;:::i;:::-;404:40381;;19092:19;19110:1;;404:40381;19167:7;;;;;:::i;:::-;404:40381;;;;19147:19;404:40381;;;;;-1:-1:-1;;;;;404:40381:10;;-1:-1:-1;;;;;;404:40381:10;;;;;;19210:18;404:40381;;;19210:18;404:40381;;;19210:18;:::i;:::-;404:40381;;;;;;;;19298:7;;;;:::i;:::-;404:40381;;;;;;;19267:39;404:40381;-1:-1:-1;;;;;404:40381:10;;19267:39;;19088:2743;404:40381;21867:7;;;;:::i;:::-;404:40381;;;;;;;;;;;;;;;;;;;;;;21929:7;;;;:::i;:::-;404:40381;;;;21911:17;404:40381;;;;;;;;;21911:31;21907:113;;19088:2743;404:40381;;-1:-1:-1;;;;;404:40381:10;;;;22034:15;404:40381;;;;;;;;;;22034:62;404:40381;;;;22088:7;;;;:::i;:::-;404:40381;;22034:62;;:::i;:::-;-1:-1:-1;;;;;404:40381:10;;;;22166:7;;;;:::i;:::-;404:40381;;22110:64;;;;;;404:40381;;-1:-1:-1;;;22110:64:10;;-1:-1:-1;;;;;404:40381:10;;;22110:64;;404:40381;22159:4;404:40381;;;;;;;;;;;;;;;;;;;;;;;22110:64;;;;;;;;;;;19088:2743;404:40381;;19110:1;404:40381;19044:10;;22110:64;;;;:::i;:::-;404:40381;;22110:64;;;;;404:40381;;;;;;;;;22110:64;404:40381;;;21907:113;404:40381;21991:14;;;;:::i;:::-;404:40381;;21980:7;404:40381;21980:7;;;;:::i;:::-;404:40381;;;;;;;;;;;;;;;;21907:113;;;;19088:2743;19349:1;19331:14;404:40381;19331:14;;;;:::i;:::-;404:40381;;19331:19;19349:1;;404:40381;;19404:7;;;;;:::i;:::-;404:40381;;;;19386:17;404:40381;;;;;-1:-1:-1;;;;;404:40381:10;;-1:-1:-1;;;;;;404:40381:10;;;;;;19447:16;404:40381;;;;19447:16;404:40381;;;;;19447:16;:::i;:::-;404:40381;;;;;;;;;;19531:7;;;;:::i;:::-;404:40381;;;;;;;19502:37;404:40381;-1:-1:-1;;;;;404:40381:10;;19502:37;;19088:2743;;19327:2504;404:40381;19564:14;404:40381;19564:14;;;;:::i;:::-;404:40381;;19564:19;22110:7;;404:40381;;;19640:7;;;;;:::i;:::-;404:40381;;;;19619:20;404:40381;;;;;-1:-1:-1;;;;;404:40381:10;;-1:-1:-1;;;;;;404:40381:10;;;;;;19110:1;404:40381;;19683:9;404:40381;;19683:26;404:40381;;;19701:7;;;;;:::i;19683:26::-;19780:7;;;;:::i;:::-;404:40381;;;;;;;19748:40;404:40381;-1:-1:-1;;;;;404:40381:10;;19748:40;;19088:2743;;19560:2271;404:40381;;19813:14;;;;:::i;:::-;404:40381;;19813:19;404:40381;;;;;19887:7;;;;;:::i;:::-;404:40381;;;;19868:18;404:40381;;;;;-1:-1:-1;;;;;404:40381:10;;-1:-1:-1;;;;;;404:40381:10;;;;;;19930:17;404:40381;;;19930:17;404:40381;;;19930:17;:::i;:::-;404:40381;;;;;;;;20016:7;;;;:::i;:::-;404:40381;;;;;;;19986:38;404:40381;-1:-1:-1;;;;;404:40381:10;;19986:38;;19088:2743;;19809:2022;404:40381;;20049:14;;;;:::i;:::-;404:40381;;20049:19;404:40381;;;;20123:7;;;;;;:::i;:::-;404:40381;;;;20104:18;404:40381;;;;;-1:-1:-1;;;;;404:40381:10;;-1:-1:-1;;;;;;404:40381:10;;;;;;;;20166:9;404:40381;;20166:26;404:40381;;;20184:7;;;;;:::i;20166:26::-;20262:7;;;;:::i;:::-;404:40381;;;;;;;20232:38;404:40381;-1:-1:-1;;;;;404:40381:10;;20232:38;;19088:2743;;20045:1786;20295:14;;21911:17;404:40381;20295:14;;;;:::i;:::-;404:40381;;20295:19;21911:17;;404:40381;;20371:7;;;;;:::i;:::-;404:40381;;;;20350:20;404:40381;;;;;-1:-1:-1;;;;;404:40381:10;;-1:-1:-1;;;;;;404:40381:10;;;;;;20414:19;404:40381;;;;20414:19;404:40381;;;;;20414:19;:::i;:::-;404:40381;;;;;;;;;;20504:7;;;;:::i;:::-;404:40381;;;;;;;20472:40;404:40381;-1:-1:-1;;;;;404:40381:10;;20472:40;;19088:2743;;20291:1540;7480:13;404:40381;20537:14;;;;:::i;:::-;404:40381;;20537:19;7480:13;;404:40381;;20611:7;;;;;:::i;:::-;404:40381;;;;20592:18;404:40381;;;;;-1:-1:-1;;;;;404:40381:10;;-1:-1:-1;;;;;;404:40381:10;;;;;;20654:17;404:40381;;;20654:17;404:40381;;;20654:17;:::i;:::-;404:40381;;;;;;;;20740:7;;;;:::i;:::-;404:40381;;;;;;;20710:38;404:40381;-1:-1:-1;;;;;404:40381:10;;20710:38;;19088:2743;;20533:1298;20791:1;404:40381;20773:14;;;;:::i;:::-;404:40381;;20773:19;20791:1;;404:40381;;20848:7;;;;;:::i;:::-;404:40381;;;;20828:19;404:40381;;;;;-1:-1:-1;;;;;404:40381:10;;-1:-1:-1;;;;;;404:40381:10;;;;;;20891:18;404:40381;;;;20891:18;404:40381;;;;;20891:18;:::i;:::-;404:40381;;;;;;;;;;20971:7;;;;:::i;:::-;404:40381;;;;;;;20940:39;404:40381;-1:-1:-1;;;;;404:40381:10;;20940:39;;19088:2743;;20769:1062;21022:1;404:40381;21004:14;;;;:::i;:::-;404:40381;;21004:19;21022:1;;404:40381;;21071:7;;;;;:::i;:::-;404:40381;;;;21048:22;404:40381;;;;;-1:-1:-1;;;;;404:40381:10;;-1:-1:-1;;;;;;404:40381:10;;;;;;;;;21115:9;404:40381;;21115:26;404:40381;;;21133:7;;;;;:::i;21115:26::-;21199:7;;;;:::i;:::-;404:40381;;;;;;;21165:42;404:40381;-1:-1:-1;;;;;404:40381:10;;21165:42;;19088:2743;;21000:831;21250:2;404:40381;21232:14;;;;:::i;:::-;404:40381;;21232:20;21250:2;;404:40381;;21289:7;;;;;:::i;:::-;404:40381;;;;21272:16;404:40381;;;;;-1:-1:-1;;;;;404:40381:10;;-1:-1:-1;;;;;;404:40381:10;;;;;;21332:15;404:40381;;;21332:15;404:40381;;;21332:15;:::i;:::-;404:40381;;;;;;;;21398:7;;;;:::i;:::-;404:40381;;;;;;;21370:36;404:40381;-1:-1:-1;;;;;404:40381:10;;21370:36;;19088:2743;;21228:603;21449:2;404:40381;21431:14;;;;:::i;:::-;404:40381;;21431:20;21449:2;;404:40381;;21488:7;;;;;:::i;:::-;404:40381;;;;21471:16;404:40381;;;;;-1:-1:-1;;;;;404:40381:10;;-1:-1:-1;;;;;;404:40381:10;;;;;;21531:15;404:40381;;;21531:15;404:40381;;;;;21531:15;:::i;:::-;404:40381;;;;;;;;;;21597:7;;;;:::i;:::-;404:40381;;;;;;;21569:36;404:40381;-1:-1:-1;;;;;404:40381:10;;21569:36;;19088:2743;;21427:404;21648:2;404:40381;21630:14;;;;:::i;:::-;404:40381;;21630:20;21626:205;;21427:404;;19088:2743;;21626:205;404:40381;21687:7;;;;;;:::i;:::-;404:40381;;;;21670:16;404:40381;;;;;-1:-1:-1;;;;;404:40381:10;;-1:-1:-1;;;;;;404:40381:10;;;;;;;;21730:9;404:40381;;21730:26;404:40381;;;21748:7;;;;;:::i;21730:26::-;21808:7;;;;:::i;:::-;404:40381;;;;;;;21780:36;404:40381;-1:-1:-1;;;;;404:40381:10;;21780:36;;21626:205;;;19056:15;;22225:31;19056:15;404:40381;;;22225:31;:::i;:::-;404:40381;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3640:31;404:40381;;;;;;;;;;;;;;;;;;;;;;39199:13;404:40381;39199:13;404:40381;;;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;;;;:::i;:::-;;;:::i;:::-;;27090:16;404:40381;;;;27090:41;;;404:40381;;;;-1:-1:-1;;;;;404:40381:10;;;27142:63;;;;;;404:40381;;-1:-1:-1;;;27142:63:10;;27184:4;404:40381;27142:63;;404:40381;-1:-1:-1;;;;;404:40381:10;;;;;;;;;;;;;;;;;;;;;;;;27142:63;;;;;;;;;;;404:40381;;27142:63;;;;:::i;:::-;404:40381;;27142:63;404:40381;27142:63;404:40381;;;;;;;;27090:41;404:40381;-1:-1:-1;;;;;404:40381:10;;;27110:10;:21;27090:41;;404:40381;;;;;;;-1:-1:-1;;404:40381:10;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;7494:10;404:40381;;7480:13;404:40381;;7472:64;404:40381;;;;;;7472:64;:::i;:::-;32704:10;;404:40381;;;32716:10;;;;;32743:16;404:40381;;;32796:1;32777:20;32796:1;;404:40381;;-1:-1:-1;;;;;404:40381:10;;;32886:7;;;;;;:::i;:::-;32836:58;;;;;;404:40381;;-1:-1:-1;;;32836:58:10;;-1:-1:-1;;;;;404:40381:10;;;32836:58;;404:40381;32879:4;404:40381;;;;;;;;;;;;;;;;;;;;;;;32836:58;;;;;;;;32773:1354;32936:7;;;404:40381;32936:7;;32796:1;32936:7;;;;:::i;:::-;404:40381;;;32916:19;404:40381;;;;;-1:-1:-1;;;;;404:40381:10;;-1:-1:-1;;;;;;404:40381:10;;;;;;32977:18;404:40381;;;32977:18;404:40381;;;32977:18;:::i;:::-;404:40381;;;;;;;;33017:14;33083:7;;;;;;:::i;:::-;404:40381;;;;;;;33058:33;404:40381;-1:-1:-1;;;;;404:40381:10;;33058:33;;32773:1354;404:40381;34162:7;;;;;;:::i;:::-;404:40381;;;;;;;;;;;;;;;;;;;;;;;34224:7;;;;;;:::i;:::-;404:40381;;;34206:17;404:40381;;;;;;;;;34206:31;34202:109;;32773:1354;404:40381;;;-1:-1:-1;;;;;404:40381:10;;;;34325:15;404:40381;;;;;;;;;;;;34325:56;404:40381;;;34373:7;;;;;;:::i;:::-;34325:56;;:::i;:::-;404:40381;32704:10;;34202:109;404:40381;34275:7;;;;;;:::i;:::-;404:40381;;;;;;;;;;;;;;;;;;34202:109;;;;;32836:58;;;;:::i;:::-;404:40381;;32836:58;;;;32773:1354;404:40381;;;33135:1;33116:20;33135:1;;404:40381;;-1:-1:-1;;;;;404:40381:10;;;33229:7;;;;;;:::i;:::-;33179:58;;;;;;404:40381;;-1:-1:-1;;;33179:58:10;;-1:-1:-1;;;;;404:40381:10;;;33179:58;;404:40381;33222:4;404:40381;;;;;;;;;;;;;;;;;;;;;;;33179:58;;;;;;;;33112:1015;33278:7;;;404:40381;33278:7;;32796:1;33278:7;;;;:::i;:::-;404:40381;;;33259:18;404:40381;;;;;-1:-1:-1;;;;;404:40381:10;;-1:-1:-1;;;;;;404:40381:10;;;;;;33319:17;404:40381;;;33319:17;404:40381;;;33319:17;:::i;:::-;404:40381;;;;;;;;;33423:7;;;;;;:::i;:::-;404:40381;;;;;;;33399:32;404:40381;-1:-1:-1;;;;;404:40381:10;;33399:32;;32773:1354;;33179:58;;;;:::i;:::-;404:40381;;33179:58;;;;33112:1015;404:40381;;;;;33456:20;;33475:1;;-1:-1:-1;;;;;404:40381:10;;;;;33568:7;;;;;;:::i;:::-;33518:58;;;;;;404:40381;;-1:-1:-1;;;33518:58:10;;-1:-1:-1;;;;;404:40381:10;;;33518:58;;404:40381;33561:4;404:40381;;;;;;;;;;;;;;;;;;;;;;;33518:58;;;;;;;;33452:675;33615:7;;;404:40381;33615:7;;32796:1;33615:7;;;;:::i;:::-;404:40381;;;33598:16;404:40381;;;;;-1:-1:-1;;;;;404:40381:10;;-1:-1:-1;;;;;;404:40381:10;;;;;;33656:15;404:40381;;;33656:15;404:40381;;;33656:15;:::i;:::-;404:40381;;;;;;;;33706:2;33757:7;;;;;;:::i;:::-;404:40381;;;;;;;33735:30;404:40381;-1:-1:-1;;;;;404:40381:10;;33735:30;;32773:1354;;33518:58;;;;:::i;:::-;404:40381;;33518:58;;;;33452:675;404:40381;;;;33790:20;33786:341;;33452:675;;;;32796:1;33452:675;32773:1354;;33786:341;-1:-1:-1;;;;;404:40381:10;;;;;33910:7;;;;;;:::i;:::-;33851:67;;;;;;404:40381;;-1:-1:-1;;;33851:67:10;;-1:-1:-1;;;;;404:40381:10;;;33851:67;;404:40381;33903:4;404:40381;;;;;;;;;;;;;;;;;;;;;;;33851:67;;;;;;;;33786:341;33959:7;;;404:40381;33959:7;;32796:1;33959:7;;;;:::i;:::-;404:40381;;;33940:18;404:40381;;;;;-1:-1:-1;;;;;404:40381:10;;-1:-1:-1;;;;;;404:40381:10;;;;;;34000:17;404:40381;;;34000:17;404:40381;;;34000:17;:::i;:::-;404:40381;;;;;;;;7480:13;34104:7;;;;;;:::i;:::-;404:40381;;;;;;;34080:32;404:40381;-1:-1:-1;;;;;404:40381:10;;34080:32;;33786:341;;;;;;;33851:67;;;;:::i;:::-;404:40381;;33851:67;;;;32716:10;-1:-1:-1;;;;34433:26:10;404:40381;;;34433:26;404:40381;34433:26;:::i;:::-;;404:40381;;;;32796:1;32777:20;32796:1;;404:40381;34516:26;404:40381;34516:26;-1:-1:-1;;;;;404:40381:10;;;;;;;34516:26;;;:::i;:::-;;;;404:40381;;34470:361;404:40381;;;34583:1;34564:20;34583:1;;404:40381;34606:30;404:40381;34606:30;-1:-1:-1;;;;;404:40381:10;;;;;;;34606:30;;;:::i;34560:271::-;404:40381;;;;34658:20;34677:1;;404:40381;34700:29;404:40381;34700:29;-1:-1:-1;;;;;404:40381:10;;;;;;;34700:29;;;:::i;34654:177::-;404:40381;;;34750:20;34746:85;;34654:177;;;;404:40381;;34746:85;34792:28;404:40381;34792:28;-1:-1:-1;;;;;404:40381:10;;;;;;;34792:28;;;:::i;:::-;;;;34746:85;;;;;404:40381;;;;;;;-1:-1:-1;;404:40381:10;;;;;;;:::i;:::-;;;:::i;:::-;15599:16;404:40381;;;;;;15599:41;;;404:40381;15596:292;;;404:40381;-1:-1:-1;;;;;15664:10:10;404:40381;;15656:66;;;;;;404:40381;;-1:-1:-1;;;15656:66:10;;15701:4;404:40381;15656:66;;404:40381;-1:-1:-1;;;;;404:40381:10;;;;;;;;;;;;;;;;;;;;;;;;15656:66;;;;;;;;;;;15596:292;;404:40381;;15596:292;404:40381;;15743:52;;;15596:292;15739:149;;15596:292;;;404:40381;;15739:149;-1:-1:-1;;;;;15819:10:10;404:40381;;15811:66;;;;;;404:40381;;-1:-1:-1;;;15811:66:10;;15856:4;404:40381;15811:66;;404:40381;-1:-1:-1;;;;;404:40381:10;;;;;;;;;;;;;;;;;;;;;;;;15811:66;;;;;;;;;;;15739:149;;;;15811:66;;;;:::i;:::-;404:40381;;15811:66;;;;15743:52;404:40381;;;;;;15774:16;404:40381;;-1:-1:-1;;;;;404:40381:10;;;;;15760:10;:35;15743:52;;15599:41;404:40381;-1:-1:-1;;;;;404:40381:10;;;15619:10;:21;15599:41;;404:40381;;;;;;;;;;;;;;;;38427:1;404:40381;;;38417:9;404:40381;;;;;;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;-1:-1:-1;;;;;404:40381:10;;;;;;:::i;:::-;;;;38685:16;404:40381;;;;;;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;;;:::i;:::-;;;:::i;:::-;7494:10;404:40381;;7480:13;404:40381;;7472:64;404:40381;;;;;;7472:64;:::i;:::-;-1:-1:-1;;;;;404:40381:10;;;14551:10;404:40381;;14543:72;;;;;404:40381;;-1:-1:-1;;;14543:72:10;;-1:-1:-1;;;;;404:40381:10;;;14543:72;;404:40381;14604:4;404:40381;;;;;;;;;;;;;;;;;;;;;;14543:72;;;;;;;;404:40381;;;14750:32;404:40381;;;14673:37;404:40381;;;;;;;;;14625:16;404:40381;;;;;;;;;-1:-1:-1;;;;;;404:40381:10;;;;;;;;;14673:11;404:40381;;;;;14673:37;:::i;:::-;14720:15;404:40381;;14720:15;404:40381;;;14720:15;:::i;:::-;404:40381;;;;;;14720:15;404:40381;;;;;;14750:32;404:40381;;14543:72;;;;:::i;:::-;404:40381;;14543:72;;;;404:40381;;;;;;;;;;;;;3161:30;404:40381;;;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;-1:-1:-1;;;;;404:40381:10;;;;;;:::i;:::-;;;;37370:20;404:40381;;;;;;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;;;;-1:-1:-1;;;;;404:40381:10;;:::i;:::-;;;;3310:51;404:40381;;;;;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;;;:::i;:::-;;;;:::i;:::-;;;:::i;:::-;;;;:::i;:::-;7494:10;;404:40381;;;;;7480:13;404:40381;;7472:64;404:40381;;;;;;7472:64;:::i;:::-;404:40381;22418:1;22404:15;;;22418:1;;404:40381;;;;25842:15;404:40381;22638:30;404:40381;;;;;;;;22456:19;404:40381;;-1:-1:-1;;;;;404:40381:10;22435:59;404:40381;;;;;;;;;22443:37;;;22435:59;:::i;:::-;404:40381;;;22456:19;404:40381;;;;;;;;-1:-1:-1;;;;;;404:40381:10;;;;;;;;;;-1:-1:-1;;404:40381:10;;;22600:18;404:40381;;22600:18;404:40381;;;22600:18;:::i;:::-;404:40381;;;;;;22600:18;404:40381;;;;;;22638:30;22400:3398;25842:15;;;:::i;:::-;25868:18;;404:40381;25868:18;:::i;:::-;;404:40381;-1:-1:-1;;;;;404:40381:10;;;25897:64;;;;;;404:40381;;-1:-1:-1;;;25897:64:10;;25939:4;404:40381;25897:64;;404:40381;-1:-1:-1;;;;;404:40381:10;;;;;;;;;;;;;;;;;;;;;;;;25897:64;404:40381;22400:3398;22703:1;22689:15;;;22703:1;;404:40381;;;;;25842:15;404:40381;22916:28;404:40381;;;;;;;;22741:17;404:40381;;-1:-1:-1;;;;;404:40381:10;22720:57;404:40381;;;;;;;;;22728:35;;;22720:57;:::i;:::-;404:40381;;;22741:17;404:40381;;;;;-1:-1:-1;;;;;;404:40381:10;;;;;;;;;;;;;;;;;;;22881:16;;404:40381;;;;;;22881:16;:::i;:::-;404:40381;;;;;;;;22881:16;404:40381;;;;;;22916:28;22400:3398;;22685:3113;404:40381;;;22965:15;;;22979:1;;404:40381;;;;;;;;;;;23017:20;404:40381;;-1:-1:-1;;;;;404:40381:10;22996:60;404:40381;;;;;;;;;23004:38;;;22996:60;:::i;:::-;404:40381;;;23017:20;404:40381;;;;;-1:-1:-1;;;;;;404:40381:10;;;;;;;;;;;;;;;;;;;;;;;26653:9;404:40381;;;;;;;;;26686:303;26702:5;;;;;;26686:303;404:40381;;;;;;;;23207:31;404:40381;;;25842:15;404:40381;;;;;;23207:31;22400:3398;;26690:10;404:40381;;;;;;;;;26727:19;404:40381;;;;26727:19;:::i;:::-;404:40381;;;;;;;26727:26;404:40381;;;;;;;;;;;;;;;;;;;;26795:24;;26773:19;23207:31;26795:24;;;;;;;;26773:46;26795:24;25842:15;26795:24;;;;:::i;:::-;404:40381;;;;;;;;;;;;;;;;26773:19;:::i;:46::-;404:40381;;;;26837:20;404:40381;;;26837:20;:::i;:::-;26878:5;;;;;;;;;;26724:255;404:40381;;;26956:8;26690:10;;22961:2837;23259:15;;;;404:40381;23259:15;;404:40381;;;;;;;;25842:15;404:40381;23489:29;404:40381;;;;;;;;23311:18;404:40381;;-1:-1:-1;;;;;404:40381:10;23290:58;404:40381;;;;;;;;;23298:36;;;23290:58;:::i;:::-;404:40381;;;23311:18;404:40381;;;;;;;;-1:-1:-1;;;;;;404:40381:10;;;;;;;;;;-1:-1:-1;;404:40381:10;;;23453:17;404:40381;;23453:17;404:40381;;;23453:17;:::i;:::-;404:40381;;;;;;23453:17;404:40381;;;;;;23489:29;22400:3398;;23255:2543;23539:15;;;23553:1;23539:15;;23553:1;;404:40381;;;;;;;;;;23591:18;404:40381;;-1:-1:-1;;;;;404:40381:10;23570:58;404:40381;;;;;;;;;23578:36;;;23570:58;:::i;:::-;404:40381;;;23591:18;404:40381;;;;;-1:-1:-1;;;;;;404:40381:10;;;;;;;;;;;;;;;;;;;;;;;26653:9;404:40381;;;;;;;;26690:10;404:40381;26686:303;26702:5;;;;;;26686:303;404:40381;;;;;;;;;23777:29;404:40381;;;25842:15;404:40381;;;;;;23777:29;22400:3398;;26690:10;404:40381;;;;;;;;26727:19;404:40381;;;;26727:19;:::i;:::-;404:40381;;;;;;;26727:26;404:40381;;;;;;;;;;;;;;;;;;;;;;26795:24;;26773:19;23777:29;26795:24;;;;;;;;26773:46;26795:24;25842:15;26795:24;;;;:::i;26773:46::-;404:40381;;;;26837:20;404:40381;;;26837:20;:::i;:::-;26878:5;;;;;;;;;;;26724:255;404:40381;;;26956:8;26690:10;;23535:2263;23827:15;;;-1:-1:-1;23841:1:10;23827:15;;23841:1;;404:40381;;;;;;25842:15;404:40381;24063:31;404:40381;;;;;;;;23879:20;404:40381;;-1:-1:-1;;;;;404:40381:10;23858:60;404:40381;;;;;;;;;23866:38;;;23858:60;:::i;:::-;404:40381;;;23879:20;404:40381;;;;;-1:-1:-1;;;;;;404:40381:10;;;;;;;;;;;;;;;;;;;24025:19;;404:40381;;;;;;24025:19;:::i;:::-;404:40381;;;;;;;;24025:19;404:40381;;;;;;24063:31;22400:3398;;23823:1975;7480:13;24115:15;;7480:13;;404:40381;;;;;;25842:15;404:40381;24345:29;404:40381;;;;;;;;24167:18;404:40381;;-1:-1:-1;;;;;404:40381:10;24146:58;404:40381;;;;;;;;;24154:36;;;24146:58;:::i;:::-;404:40381;;;24167:18;404:40381;;;;;;;;-1:-1:-1;;;;;;404:40381:10;;;;;;;;;;-1:-1:-1;;404:40381:10;;;24309:17;404:40381;;24309:17;404:40381;;;24309:17;:::i;:::-;404:40381;;;;;;24309:17;404:40381;;;;;;24345:29;22400:3398;;24111:1687;24409:1;24395:15;;24409:1;;404:40381;;;;;;25842:15;404:40381;24628:30;404:40381;;;;;;;;24447:19;404:40381;;-1:-1:-1;;;;;404:40381:10;24426:59;404:40381;;;;;;;;;24434:37;;;24426:59;:::i;:::-;404:40381;;;24447:19;404:40381;;;;;-1:-1:-1;;;;;;404:40381:10;;;;;;;;;;;;;;;;;;;24591:18;;404:40381;;;;;;24591:18;:::i;:::-;404:40381;;;;;;;;24591:18;404:40381;;;;;;24628:30;22400:3398;;24391:1407;24693:1;24679:15;;24693:1;;404:40381;;;;;;;;;;24731:22;404:40381;;-1:-1:-1;;;;;404:40381:10;24710:62;404:40381;;;;;;;;;24718:40;;;24710:62;:::i;:::-;404:40381;;;24731:22;404:40381;;;;;-1:-1:-1;;;;;;404:40381:10;;;;;;;;;;;;;;;;;;;;;;;26653:9;404:40381;;;;;;;;26690:10;404:40381;26686:303;26702:5;;;;;;26686:303;404:40381;;;;;;;;24925:33;25842:15;404:40381;;;;;;;;;24925:33;22400:3398;;26690:10;404:40381;;;;;;;;26727:19;404:40381;;;;26727:19;:::i;:::-;404:40381;;;;;;;26727:26;404:40381;;;;;;;;;;;;;;;;;;;;;;26795:24;;26773:19;26795:24;;;;24925:33;26795:24;;;26773:46;26795:24;25842:15;26795:24;;;;:::i;:::-;404:40381;;;;;;;;;;;;;;;;26773:19;:::i;:46::-;404:40381;;;;;26837:20;404:40381;;;26837:20;:::i;:::-;26878:5;;;;;;;;;;26724:255;404:40381;;;26956:8;26690:10;;24675:1123;24979:16;;;24993:2;24979:16;;24993:2;;404:40381;;;;;;25842:15;404:40381;25204:27;404:40381;;;;;;;;25032:16;404:40381;;-1:-1:-1;;;;;404:40381:10;25011:56;404:40381;;;;;;;;;25019:34;;;25011:56;:::i;:::-;404:40381;;;25032:16;404:40381;;;;;;;;-1:-1:-1;;;;;;404:40381:10;;;;;;;;;;-1:-1:-1;;404:40381:10;;;25170:15;404:40381;;25170:15;404:40381;;;25170:15;:::i;:::-;404:40381;;;;;;25170:15;404:40381;;;;;;25204:27;22400:3398;;24975:823;25266:2;25252:16;;25266:2;;404:40381;;;;;;25842:15;404:40381;25477:27;404:40381;;;;;;;;25305:16;404:40381;;-1:-1:-1;;;;;404:40381:10;25284:56;404:40381;;;;;;;;;25292:34;;;25284:56;:::i;:::-;404:40381;;;25305:16;404:40381;;;;;-1:-1:-1;;;;;;404:40381:10;;;;;;;;;;;;;;;;;;;25443:15;;404:40381;;;25443:15;404:40381;;25443:15;:::i;:::-;;404:40381;;;;;;;25443:15;404:40381;;;;;;25477:27;22400:3398;;25248:550;25539:2;25525:16;25521:277;;25248:550;;;;;;25842:15;25248:550;22400:3398;;25521:277;404:40381;;;;;;;;25578:16;404:40381;;-1:-1:-1;;;;;404:40381:10;25557:56;404:40381;;;;;;;;;25565:34;;;25557:56;:::i;:::-;404:40381;;;25578:16;404:40381;;;;;-1:-1:-1;;;;;;404:40381:10;;;;;;;;;;;;;;;;;;;;;;;26653:9;404:40381;;;;;;;;26690:10;404:40381;26686:303;26702:5;;;;;;26686:303;404:40381;;;;;;;;25760:27;25842:15;404:40381;;;;;;;;;25760:27;25521:277;;;;26690:10;404:40381;;;;;;;;26727:19;404:40381;;;;26727:19;:::i;:::-;404:40381;;;;;;;26727:26;404:40381;;;;;;;;;;;;;;;;;;;;;;26795:24;;;;;26773:19;25760:27;26795:24;;;25842:15;26795:24;;;;26773:46;26795:24;;:::i;:::-;404:40381;;;;;;;;;;;;;;;;;26773:19;:::i;:46::-;404:40381;;;;26837:20;404:40381;;;26837:20;:::i;:::-;26878:5;;;;;;;;;;26724:255;404:40381;;;26956:8;26690:10;;404:40381;;;;;;;;;;;;;;;40763:13;404:40381;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;404:40381:10;;;;;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;;;;:::i;:::-;;;:::i;:::-;14100:16;404:40381;;;;;;14100:41;;;404:40381;14097:284;;;404:40381;-1:-1:-1;;;;;404:40381:10;;;14157:61;;;;;;404:40381;;-1:-1:-1;;;14157:61:10;;14197:4;404:40381;14157:61;;404:40381;-1:-1:-1;;;;;404:40381:10;;;;;;;;;;;;;;;;;;;;;;;;14157:61;404:40381;14097:284;404:40381;;14239:54;;;14097:284;14235:146;;14097:284;;;404:40381;;14235:146;-1:-1:-1;;;;;404:40381:10;;;14309:61;;;;;;404:40381;;-1:-1:-1;;;14309:61:10;;14349:4;404:40381;14309:61;;404:40381;-1:-1:-1;;;;;404:40381:10;;;;;;;;;;;;;;;;;;;;;;;;14309:61;404:40381;14239:54;404:40381;;;;;;14270:18;404:40381;;-1:-1:-1;;;;;404:40381:10;;;;;14256:10;:37;14239:54;;14100:41;404:40381;-1:-1:-1;;;;;404:40381:10;;;14120:10;:21;14100:41;;404:40381;;;;;;;;;;;;;;;39062:13;404:40381;;;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;-1:-1:-1;;;;;404:40381:10;;;;;;:::i;:::-;;;;38801:16;404:40381;;;;;;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;;;;:::i;:::-;7494:10;404:40381;;7480:13;404:40381;;7472:64;404:40381;;;;;;7472:64;:::i;:::-;-1:-1:-1;;;;;7359:14:10;404:40381;;7359:37;;;;;404:40381;;;7359:37;;-1:-1:-1;;;;;404:40381:10;;;;7359:37;;404:40381;;;;;;;;;;;;;;;;;;7359:37;404:40381;;;;;;;;;;;;;;;3094:31;404:40381;;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;-1:-1:-1;;;;;404:40381:10;;;;;;:::i;:::-;;;;37249:17;404:40381;;;;;;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;;;:::i;:::-;1063:62:0;;:::i;:::-;404:40381:10;;;8349:21;404:40381;;;;;;;8349:21;404:40381;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;;;:::i;:::-;;;:::i;:::-;;;:::i;:::-;7494:10;404:40381;;;;;7480:13;404:40381;;7472:64;404:40381;;;;;;7472:64;:::i;:::-;404:40381;11458:1;11439:20;;;:44;;;404:40381;;;;-1:-1:-1;;;;;404:40381:10;;;;;;11509:67;;;;;404:40381;;-1:-1:-1;;;11509:67:10;;-1:-1:-1;;;;;404:40381:10;;;11509:67;;404:40381;11565:4;404:40381;;;;;;;;;;;;;;;;;;;;;;11509:67;;;;;;;;404:40381;;;;11733:56;404:40381;;11831:34;404:40381;;;;;;11586:18;404:40381;;;;;;;;;-1:-1:-1;;;;;;404:40381:10;;;;;;;;;11636:8;404:40381;;11636:35;404:40381;;;;11636:35;:::i;:::-;404:40381;;;11681:19;404:40381;;;;;;;;;;;;;;;;;11733:13;404:40381;;;;;;;;;;;;;11733:56;:::i;:::-;11799:17;404:40381;;11799:17;:::i;:::-;404:40381;;;;;;;11831:34;404:40381;;11509:67;;;;:::i;:::-;404:40381;;11509:67;;;;404:40381;;;;;;-1:-1:-1;;;404:40381:10;;;;;;;;;;;;;;;;;11439:44;11463:20;11482:1;11463:20;;;11439:44;;404:40381;;;;;;;;;;;;;1063:62:0;;:::i;:::-;404:40381:10;-1:-1:-1;;;;;404:40381:10;;-1:-1:-1;;;;;;404:40381:10;;;;;2573:40:0;;;;404:40381:10;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;404:40381:10;;8634:1;;8599:11;8645:3;404:40381;;;8642:1;8637:6;;;;8645:3;404:40381;8664:39;404:40381;;;;8671:15;404:40381;;;;;;;;;;;;;;8664:39;;:::i;:::-;8645:3;;:::i;:::-;8624:11;;;8637:6;8634:1;8637:6;;;;;8771:3;404:40381;;;8642:1;8763:6;;;;8771:3;404:40381;8790:38;404:40381;;;;8798:13;404:40381;;;;;;;;;;;;;;8790:38;;:::i;:::-;8771:3;;:::i;:::-;8750:11;;;8763:6;;8873:10;8763:6;;8873:10;:::i;:::-;404:40381;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;;;:::i;:::-;;;:::i;:::-;;;:::i;:::-;;;;-1:-1:-1;;;;;404:40381:10;;;;;;;;;;7494:10;404:40381;;;;7480:13;404:40381;;;7472:64;404:40381;;;;;;7472:64;:::i;:::-;27553:2279;404:40381;27729:10;404:40381;;27722:17;404:40381;;;;;27754:12;;27750:1910;404:40381;;;-1:-1:-1;404:40381:10;;27806:15;;404:40381;;-1:-1:-1;;404:40381:10;;;27890:8;404:40381;;;;;;;29702:7;;404:40381;27890:40;;404:40381;27902:27;;;:::i;:::-;27890:40;;:::i;:::-;404:40381;;;;;;;;;;;;;;27864:18;404:40381;;;;;;;;;;;;;;27957:19;404:40381;;;;;-1:-1:-1;;;;;;404:40381:10;;;;;27999:18;404:40381;;27999:18;404:40381;;;27999:18;:::i;:::-;404:40381;;;;;;27999:18;404:40381;27802:466;29702:7;;:::i;:::-;404:40381;;;;29720:60;;;;;404:40381;;-1:-1:-1;;;29720:60:10;;29762:4;404:40381;29720:60;;404:40381;-1:-1:-1;;;;;404:40381:10;;;;;;;;;;;;;;;;;;;;;;;;29720:60;;;;;;;;27750:1910;404:40381;;;;29795:30;404:40381;;;;;;;;;;;;29795:30;404:40381;;;;;;29720:60;;;;;:::i;:::-;404:40381;;29720:60;;;27802:466;28042:15;;;;28056:1;28042:15;28038:230;;27802:466;;;29702:7;27802:466;;;28038:230;404:40381;;;28126:9;404:40381;;;;;;;;;-1:-1:-1;29702:7:10;;404:40381;28126:44;;28140:28;;404:40381;28140:28;:::i;28126:44::-;404:40381;;;;;;;;;;;;;;28098:20;404:40381;;;;;;;;;;;;;;28197:17;404:40381;;;;;-1:-1:-1;;;;;;404:40381:10;;;;;;28237:16;;404:40381;;;;;;28237:16;:::i;:::-;404:40381;;;;;;;;28237:16;404:40381;28038:230;;;;27750:1910;28288:12;;;;;;;28299:1;28288:12;;28299:1;;404:40381;;;;;;;;;28359:15;28355:231;;28284:1376;;29702:7;28284:1376;27750:1910;;28355:231;28299:1;404:40381;;28442:9;404:40381;;;;;;;;;-1:-1:-1;29702:7:10;;404:40381;28442:44;;28456:28;;404:40381;28456:28;:::i;28442:44::-;404:40381;;;;;;;;;;;;;;28416:18;404:40381;;;;;;;;;;;;;;28513:18;404:40381;;;;;-1:-1:-1;;;;;;404:40381:10;;;;;28554:17;404:40381;;28554:17;404:40381;;;28554:17;:::i;:::-;404:40381;;;;;;28554:17;404:40381;28355:231;;;;28284:1376;404:40381;;28606:12;;;28617:1;;-1:-1:-1;404:40381:10;28667:2;28653:16;;28667:2;;-1:-1:-1;404:40381:10;;;28735:8;404:40381;;;;;;;;;-1:-1:-1;29702:7:10;;28735:40;;28747:27;;404:40381;28747:27;:::i;28735:40::-;404:40381;;;;;;;;;;;;28709:18;404:40381;;;;;;;;;;;;;;28802:16;404:40381;;;;;-1:-1:-1;;;;;;404:40381:10;;;;;28841:15;404:40381;;28841:15;404:40381;;;28841:15;:::i;:::-;404:40381;;;;;;28841:15;404:40381;27750:1910;;28649:467;28895:2;28881:16;28877:239;;28649:467;;29702:7;28649:467;;;;27750:1910;;28877:239;404:40381;;;28961:9;404:40381;;;;;;;;;-1:-1:-1;29702:7:10;;28961:44;;28975:28;;404:40381;28975:28;:::i;28961:44::-;404:40381;;;;;;;;;;;;28937:16;404:40381;;;;;;;;;;;;;;29032:16;404:40381;;;;;-1:-1:-1;;;;;;404:40381:10;;;;;;29071:15;;404:40381;;;29071:15;404:40381;;29071:15;:::i;:::-;;404:40381;;;;;;;29071:15;404:40381;28877:239;;;;;28602:1058;404:40381;29136:12;29132:528;;28602:1058;;;;29702:7;28602:1058;;;;27750:1910;;29132:528;404:40381;7480:13;29183:15;;7480:13;;-1:-1:-1;404:40381:10;;;29266:8;404:40381;;;;;;;;;-1:-1:-1;29702:7:10;;29266:40;;29278:27;;404:40381;29278:27;:::i;29266:40::-;404:40381;;;;;;;;;;;;29240:18;404:40381;;;;;;;;;;;;;;29333:18;404:40381;;;;;-1:-1:-1;;;;;;404:40381:10;;;;;29374:17;404:40381;;29374:17;404:40381;;;29374:17;:::i;:::-;404:40381;;;;;;29374:17;404:40381;29179:471;29132:528;;;;;;;29179:471;29430:1;29416:15;29412:238;;29179:471;;29702:7;29179:471;;;;;;29412:238;404:40381;;;29504:9;404:40381;;;;;;;;;-1:-1:-1;29702:7:10;;29504:44;;29518:28;;404:40381;29518:28;:::i;29504:44::-;404:40381;;;;;;;;;;;;29474:22;404:40381;;;;;;;;;;;;;;29575:19;404:40381;;;;;-1:-1:-1;;;;;;404:40381:10;;;;;;29617:18;;404:40381;;;;;;29617:18;:::i;:::-;404:40381;;;;;;;;29617:18;404:40381;29412:238;;;;;404:40381;;;;;;;;;;;;;;-1:-1:-1;;;;;404:40381:10;;;;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;-1:-1:-1;;;;;404:40381:10;;;;;;:::i;:::-;;;;37493:19;404:40381;;;;;;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;-1:-1:-1;;;;;404:40381:10;;;;;;:::i;:::-;;;;39589:19;404:40381;;;;;;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;-1:-1:-1;;;;;404:40381:10;;;;;;:::i;:::-;;;;38082:18;404:40381;;;;;;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;-1:-1:-1;;;;;404:40381:10;;;;;;:::i;:::-;;;;39468:18;404:40381;;;;;;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;-1:-1:-1;;;;;404:40381:10;;:::i;:::-;1063:62:0;;:::i;:::-;404:40381:10;-1:-1:-1;;;;;;7807:31:10;404:40381;;;7807:31;404:40381;;;;;;;;;;;;;;;;;;39824:15;404:40381;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9987:14;;10015:11;-1:-1:-1;;;;;10025:1:10;404:40381;;10011:95;10036:3;404:40381;;;10033:1;10028:6;;;;10036:3;404:40381;10055:40;404:40381;;;;10065:13;404:40381;;;;;;;;;;;;;;10055:40;;:::i;10036:3::-;10015:11;;;10028:6;;;10131:20;10028:6;;10131:20;:::i;:::-;10161:10;10185:11;10025:1;10206:3;404:40381;;;10033:1;10198:6;;;;404:40381;;;10065:13;404:40381;;;;;;;;;;;;;;;10285:10;;10281:134;10297:5;;;;;;10206:3;;;;;;;:::i;:::-;10185:11;;10304:3;404:40381;;10397:3;10304;404:40381;;;;;;;;;;;;;;;;;;;;;;10352:26;404:40381;;;;10352:26;:::i;10304:3::-;10285:10;;;;;;;;;404:40381;;;;;;;;;;;;;;;37707:14;404:40381;;;;;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;;;:::i;:::-;;;:::i;:::-;;;;:::i;:::-;7494:10;;404:40381;;7480:13;404:40381;;7472:64;404:40381;;;;;;7472:64;:::i;:::-;404:40381;;;;;12010:18;404:40381;;-1:-1:-1;;;;;404:40381:10;11989:58;404:40381;;;;;;;;;11997:36;11989:58;:::i;:::-;404:40381;;;;;12057:62;;;;;404:40381;;-1:-1:-1;;;12057:62:10;;12097:4;404:40381;12057:62;;404:40381;-1:-1:-1;;;;;404:40381:10;;;;;;;;;;;;;;;;;;;;;;;;12057:62;;;;;;;;404:40381;;;;;;;;12010:18;404:40381;;;;;-1:-1:-1;;;;;;404:40381:10;;;;;12176:19;404:40381;;;;;;;;;;;;;;;;;12256:13;404:40381;;;;;;;;;;;;;;;;;12318:10;12314:401;12330:5;;;;;;12314:401;404:40381;;;;;;;;12736:8;404:40381;;;;;;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;12800:1;404:40381;12874:5;;;;;;12858:1066;404:40381;;13976:29;404:40381;;;13943:17;404:40381;;13943:17;:::i;:::-;404:40381;;;;;;;;;;13976:29;;404:40381;;12862:10;404:40381;;;;;12736:8;404:40381;;;12903:28;404:40381;;;;12903:28;:::i;:::-;404:40381;;;;;;;;;;;12903:33;12900:1010;404:40381;;;;;12960:64;404:40381;;;12960:28;404:40381;12991:33;404:40381;;;13976:29;404:40381;;;;;;;12736:8;404:40381;;;;;;;12991:33;:::i;:::-;404:40381;;;;;;;;;;;;;12736:8;404:40381;;;;;12960:28;:::i;:64::-;404:40381;;;12736:8;404:40381;;13046:29;404:40381;;;13046:29;:::i;:::-;13100:5;;;;;;;;;12900:1010;404:40381;;;;;12736:8;404:40381;;;13133:36;404:40381;;;;;;;;;13133:36;;:::i;:::-;404:40381;;;;;;;;;;;;;13133:41;404:40381;;;;13198:64;404:40381;;;13198:28;404:40381;13229:33;404:40381;;;13976:29;404:40381;;;;;;;12736:8;404:40381;;;;;;;13229:33;:::i;13130:780::-;404:40381;;;;;12736:8;404:40381;;;13371:32;404:40381;;;;;;13371:32;;:::i;:::-;404:40381;;;;;;;;;;;;;13371:37;404:40381;;;;13432:64;404:40381;;;13432:28;404:40381;13463:33;404:40381;;;13976:29;404:40381;;;;;;;12736:8;404:40381;;;;;;;13463:33;:::i;13368:542::-;404:40381;;;;;12736:8;404:40381;;;13605:32;404:40381;;;;;;13605:32;;:::i;:::-;404:40381;;;;;;;;;;;;;13605:37;404:40381;;;;13666:64;404:40381;;;13666:28;404:40381;13697:33;404:40381;;;13976:29;404:40381;;;;;;;12736:8;404:40381;;;;;;;13697:33;:::i;13602:308::-;404:40381;12800:1;404:40381;13883:8;12862:10;;404:40381;;;-1:-1:-1;;;404:40381:10;;;;;;12318:10;404:40381;;;;;;;;;;;;;;;;;;12355:44;404:40381;;;;12355:44;:::i;:::-;404:40381;;;;;;;;;;;;;;;12355:49;404:40381;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12424:96;12471:49;;;12424:44;12471:49;404:40381;12471:49;;:::i;:::-;404:40381;;;;;;;;;;;;;;;;;;;;;;;;;;;;12424:44;:::i;:96::-;404:40381;;;;;;;;;;;;;;;;;12538:45;404:40381;;;12538:45;:::i;:::-;12604:5;;;;;404:40381;;;-1:-1:-1;;;404:40381:10;;;;;;12352:353;404:40381;;;;;12682:8;12318:10;;12057:62;;;;:::i;:::-;404:40381;;12057:62;;;;404:40381;;;;;;;-1:-1:-1;;404:40381:10;;;;;;:::i;:::-;1063:62:0;;:::i;:::-;404:40381:10;8453:24;404:40381;;;;;;;;;;;;8453:24;404:40381;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;468:32:10;404:40381;;;;;;;;;;;;;;;;;;;;;;;;;;;;40033:9;404:40381;;;;;;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;;;;;;;;;;;;;;;;;;;40349:8;404:40381;;;;;;;;;;;;;;;;;;;;;;;;;;3678:25;404:40381;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;404:40381:10;;;;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;;;:::i;:::-;;-1:-1:-1;;;;;404:40381:10;;:::i;:::-;;;;;;;9635:15;404:40381;;;;;;;;;;;;;;;;;;;;;;9696:20;;;;:::i;:::-;9731:10;;9743;;;;;;404:40381;;;;;;;:::i;9731:10::-;404:40381;;;;;;;;;;;;;;;;;9796:31;404:40381;;;;9796:31;:::i;:::-;404:40381;;;;;;;9770:58;;;;:::i;:::-;404:40381;;9731:10;;404:40381;;;;;;;-1:-1:-1;;404:40381:10;;;;;;:::i;:::-;;;;:::i;:::-;7494:10;;404:40381;;;7480:13;404:40381;;7472:64;404:40381;;;;;;7472:64;:::i;:::-;404:40381;;;;;;;;;14902:16;404:40381;;-1:-1:-1;;;;;404:40381:10;;;;;;;;14881:56;404:40381;;;14889:34;;;14881:56;:::i;:::-;14955:10;404:40381;;14947:67;;;;;;404:40381;;-1:-1:-1;;;14947:67:10;;14992:4;404:40381;14947:67;;404:40381;-1:-1:-1;;;;;404:40381:10;;;;;;;;;;;;;;;;;;;;;;;;;14947:67;;;;;;;;;;;;;404:40381;;;;;14902:16;404:40381;;;;;-1:-1:-1;;;;;;404:40381:10;;;;;;;;15074:11;404:40381;;;;;;;;15117:10;;15113:327;15129:5;;;;;;15113:327;-1:-1:-1;;15449:15:10;404:40381;15479:27;;404:40381;;15449:15;404:40381;;;15449:15;:::i;15117:10::-;404:40381;;;;;;;;;15154:25;404:40381;;;;15154:25;:::i;:::-;404:40381;;;;;;;;;15154:32;404:40381;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;;;;15234:30;15206:58;15234:30;;15479:27;15234:30;;;;15206:25;15234:30;;:::i;:::-;404:40381;;;;;;;;;;;;;;;;15206:25;:::i;:58::-;404:40381;;;;;15282:26;404:40381;;;15282:26;:::i;:::-;15329:5;;;;;;404:40381;;;-1:-1:-1;;;404:40381:10;;;;;;15151:279;404:40381;;;;;15407:8;15117:10;;14947:67;;;;:::i;:::-;404:40381;;14947:67;;;;404:40381;;;;;;;;;;;;;;-1:-1:-1;;;;;506:28:10;404:40381;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;726:79:10;404:40381;;;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;-1:-1:-1;;;;;404:40381:10;;;;;;:::i;:::-;;;;38204:20;404:40381;;;;;;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;-1:-1:-1;;;;;404:40381:10;;;;;;:::i;:::-;;;;37962:18;404:40381;;;;;;;;;;;;;;;;;;;;;;;;;;38522:17;404:40381;;;;;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;404:40381:10;;;;;;;;;;;;;;;;;;;;;3709:28;404:40381;;;;;;;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;;;:::i;:::-;;;:::i;:::-;;;;-1:-1:-1;;;;;404:40381:10;;;;;;;;;;;;;;;;;;;;7494:10;404:40381;;;;7480:13;404:40381;;7472:64;404:40381;;;;;;7472:64;:::i;:::-;404:40381;;;;;;;30147:10;30140:17;29950:2255;404:40381;30172:12;;404:40381;;;30251:44;404:40381;;;30261:1;404:40381;;30251:9;404:40381;;30265:28;404:40381;;;;;;;;30265:28;;:::i;30251:44::-;404:40381;;;;;;;;;;;;;;30225:18;404:40381;;;;;;;;30311:294;;30315:24;;;404:40381;;;;;30392:54;;;;;;404:40381;;-1:-1:-1;;;30392:54:10;;-1:-1:-1;;;;;404:40381:10;;;;30392:54;;404:40381;;;;;;;;;;;;;;;;;;;;;;;;30392:54;;;;;;;;30311:294;;;404:40381;30311:294;;32168:30;30311:294;;;404:40381;;;;30625:20;404:40381;;;-1:-1:-1;;;;;;404:40381:10;;;;;30168:1986;404:40381;;;;;;;;;;;32168:30;404:40381;;;;;;30392:54;;;;;:::i;:::-;404:40381;;30392:54;;;;404:40381;;;;;;;;;30311:294;404:40381;;;;;30530:60;;;;;404:40381;;-1:-1:-1;;;30530:60:10;;30572:4;404:40381;30530:60;;404:40381;-1:-1:-1;;;;;404:40381:10;;;;;;;;;;;;;;;;;;;;;;;;30530:60;;;;;;;;30311:294;;;404:40381;30311:294;;32168:30;30311:294;;;;30530:60;;;;;:::i;:::-;404:40381;;30530:60;;;30168:1986;30682:1;30671:12;;30682:1;;404:40381;30750:44;404:40381;;;30682:1;404:40381;;30750:9;404:40381;;30764:28;404:40381;;;;;;;;30764:28;;:::i;30750:44::-;404:40381;;;;;;;;;;;;;;30724:18;404:40381;;;;;;;;30810:294;;30814:24;;;404:40381;;;;;30891:54;;;;;;404:40381;;-1:-1:-1;;;30891:54:10;;-1:-1:-1;;;;;404:40381:10;;;;30891:54;;404:40381;;;;;;;;;;;;;;;;;;;;;;;;30891:54;;;;;;;;30810:294;;;404:40381;30810:294;;32168:30;30810:294;;;404:40381;;;;31124:20;404:40381;;;-1:-1:-1;;;;;;404:40381:10;;;;;30168:1986;;30891:54;;;;;:::i;:::-;404:40381;;30891:54;;;30810:294;404:40381;;;;;31029:60;;;;;404:40381;;-1:-1:-1;;;31029:60:10;;31071:4;404:40381;31029:60;;404:40381;-1:-1:-1;;;;;404:40381:10;;;;;;;;;;;;;;;;;;;;;;;;31029:60;;;;;;;;30810:294;;;404:40381;30810:294;;32168:30;30810:294;;;;31029:60;;;;;:::i;:::-;404:40381;;31029:60;;;30667:1487;404:40381;;31170:12;;;31181:1;;404:40381;;;31245:44;404:40381;;30682:1;404:40381;;31245:9;404:40381;;31259:28;404:40381;;;;;;;;31259:28;;:::i;31245:44::-;404:40381;;;;;;;;;;;;;;31219:18;404:40381;;;;;;;;31305:294;;31309:24;;;404:40381;;31386:54;;;;;;404:40381;;-1:-1:-1;;;31386:54:10;;-1:-1:-1;;;;;404:40381:10;;;;31386:54;;404:40381;;;;;;;;;;;;;;;;;;;;;;;;31386:54;;;;;;;;31305:294;;;404:40381;31305:294;;32168:30;31305:294;;;404:40381;;;;31619:16;404:40381;;;-1:-1:-1;;;;;;404:40381:10;;;;;30168:1986;;31386:54;;;;;:::i;:::-;404:40381;;31386:54;;;31305:294;404:40381;;;-1:-1:-1;;31524:60:10;;;;;404:40381;;-1:-1:-1;;;31524:60:10;;31566:4;404:40381;31524:60;;404:40381;-1:-1:-1;;;;;404:40381:10;;;;;;;;;;;;;;;;;;;;;;;;31524:60;;;;;;;;31305:294;;;404:40381;31305:294;;32168:30;31305:294;;;;31524:60;;;;;:::i;:::-;404:40381;;31524:60;;;31166:988;31661:12;;;;;;;;404:40381;31661:12;31657:497;;31166:988;;;;;;;;;32168:30;31166:988;30168:1986;;31657:497;404:40381;;;;31742:44;404:40381;;30682:1;404:40381;;31742:9;404:40381;;31756:28;404:40381;;;;;;;;31756:28;;:::i;31742:44::-;404:40381;;;;;;;;;;;;;;31716:18;404:40381;;;;;;;;;31708:80;;31802:294;;31806:24;;;404:40381;;31883:54;;;;;404:40381;;-1:-1:-1;;;31883:54:10;;-1:-1:-1;;;;;404:40381:10;;;;31883:54;;404:40381;;;;;;;;;;;;;;;;;;;;;;;;31883:54;;;;;;;;31802:294;;;404:40381;31802:294;;32168:30;31802:294;;;404:40381;;;;32116:22;404:40381;;;-1:-1:-1;;;;;;404:40381:10;;;;;31657:497;;;;;;;31883:54;;;;;:::i;:::-;404:40381;;31883:54;;;31802:294;404:40381;;;-1:-1:-1;;;32021:60:10;;;;;404:40381;;-1:-1:-1;;;32021:60:10;;32063:4;404:40381;32021:60;;404:40381;-1:-1:-1;;;;;404:40381:10;;;;;;;;;;;;;;;;;;;;;;;;32021:60;;;;;;;;;404:40381;32021:60;32168:30;32021:60;;;;;31802:294;;;;;32021:60;;;;:::i;:::-;;;;404:40381;;;;;;;-1:-1:-1;;404:40381:10;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1063:62:0;;;:::i;:::-;404:40381:10;;;40150:13;404:40381;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;;;;;;;;:::i;:::-;;;;954:49;404:40381;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;404:40381:10;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;404:40381:10;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;-1:-1:-1;;;404:40381:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;1359:130:0:-;-1:-1:-1;;;;;1273:6:0;404:40381:10;;719:10:6;1422:23:0;404:40381:10;;1359:130:0:o;404:40381:10:-;;;;-1:-1:-1;;;404:40381:10;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;;;404:40381:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;404:40381:10;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;404:40381:10;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;-1:-1:-1;;404:40381:10;;;;;;;:::o;:::-;;;;;;;;;;;-1:-1:-1;404:40381:10;;;-1:-1:-1;404:40381:10;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;;:::o;:::-;;;;-1:-1:-1;;;404:40381:10;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;;;:::i;:::-;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;404:40381:10;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;404:40381:10;;:::o;25974:590::-;;;;-1:-1:-1;;;;;404:40381:10;-1:-1:-1;;404:40381:10;;;;26087:15;404:40381;;;;;;;;;;;;;;;;;;;;;;;26151:10;26147:411;26163:5;;;;;;26147:411;25974:590;;;;;;;;;;:::o;26151:10::-;404:40381;;;;;;;;;;;;;;26188:46;404:40381;;;;26188:46;:::i;:::-;404:40381;;;;;;;;;;;;;;;;;26188:53;26185:363;404:40381;;;-1:-1:-1;404:40381:10;;;;;;;;;;;;;;;;;-1:-1:-1;;404:40381:10;;;;;;;26310:51;26379:47;26310:51;;;;26261:46;26310:51;26261:100;26310:51;;:::i;:::-;404:40381;;;;;;;;;;;;;;;;;;;;;;;;26261:46;:::i;:100::-;404:40381;;;;;;;;;;;;26379:47;:::i;:::-;26447:5;;;;;;;;;;;26185:363;404:40381;;;;;;;;26525:8;26151:10;;404:40381;;;;;;;:::o;:::-;-1:-1:-1;;;404:40381:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://90ad14d3cbe7c32d98e42e3f2db2e72bb27c64d6683e6f7c052a499fb95ef107
Loading...
Loading
Loading...
Loading
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.