Contract Overview
Balance:
5.9 AVAX
AVAX Value:
$98.88 (@ $16.76/AVAX)
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
TreeGameOneVsOne
Compiler Version
v0.8.14+commit.80d49f37
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.14; import "VRFCoordinatorV2Interface.sol"; import "VRFConsumerBaseV2.sol"; import "Ownable.sol"; /* _____ ___ /__ \ _ __ ___ ___ / _ \ __ _ _ __ ___ ___ / /\/| '__| / _ \ / _ \ / /_\/ / _` || '_ ` _ \ / _ \ / / | | | __/| __/ / /_\\ | (_| || | | | | || __/ \/ |_| \___| \___| \____/ \__,_||_| |_| |_| \___| ___ __ ___ /___\ _ __ ___ /\ /\ / _\ /___\ _ __ ___ // //| '_ \ / _ \ \ \ / / \ \ // //| '_ \ / _ \ / \_// | | | || __/ \ V / _\ \ / \_// | | | || __/ \___/ |_| |_| \___| \_/ \__/ \___/ |_| |_| \___| Discord: http://discord.io/PlantATree Website: https://treegame.live/onevsone.html */ interface ERC721Interface { function ownerOf(uint256) external view returns (address); } interface PlantATreeRewardSystem { function PlantATree(address ref) external payable; } contract TreeGameOneVsOne is VRFConsumerBaseV2, Ownable { // [Chainlink VRF config block] VRFCoordinatorV2Interface COORDINATOR; // subscription ID. uint64 s_subscriptionId; bytes32 keyHash; uint32 callbackGasLimit = 2500000; //100000; // The default is 3, but you can set this higher. uint16 requestConfirmations = 3; // For this example, retrieve 2 random values in one request. // Cannot exceed VRFCoordinatorV2.MAX_NUM_WORDS. uint32 constant numWords = 1; // [End of Chainlink VRF config block] // Win percentages and Race track values enum SORT_TYPE { TOTAL_WIN, TOTAL_GAMES } uint256[] private WIN_PERCENTAGES = [0, 50, 100]; uint256 public constant MAX_NFT_SUPPLY = 600; uint256 public constant PLAYERS_COUNT = 2; uint256 private pvtIndex; uint256 private pvtGamesCount; // TressGame Data Structure struct Game { uint256 id; uint256[PLAYERS_COUNT] players; uint256 timestamp; uint256 winnerTokenId; uint256 map; uint256 text; uint256 rndResult; } struct TreesToken { uint256 tokenId; uint256 totalGamesPlayed; uint256 totalWonGames; uint256 totalLostGames; uint256 balance; } // Dev addresses address public artist; address public dev; address public PAT_Address; address public ref; // Total Games Value uint256 public totalGamesValues = 0 ether; // Balances & Shares uint256 public teamBalance = 0 ether; // NFT TressContract . Used to check ownership of a token ERC721Interface internal TREES_CONTRACT; address public TreesNFTContractAddress; // Minimum Game Value set to 2. This means minimum entry fee is 1 uint256 public constant MINIMUM_GAME_VALUE = 0.2 ether; //2 ether; // Initial values of total game value and their disturbtions. Initial values don't matter here as it has to be passed in the constructor anyway. uint256 public GAME_VALUE = 0.2 ether; //2 ether; // disturbtions based on total game value uint256 public ENTRY_FEE = 1 ether; //1 ether; uint256 public WIN_SHARE = 1.75 ether; //1.75 ether; uint256 public TEAM_SHARE = 0.15 ether; //0.15 ether; uint256 public DynamicRewardsSystem_Share = 0.1 ether; //0.1 ether; uint256 public DynamicRewards_Balance = 0; // Players waiting to start the game mapping(uint256 => uint256) public pendingPlayers; uint256 public pendingPlayersCount; // Games & Tokens data mapping(uint256 => TreesToken) public treesTokens; mapping(uint256 => Game) public games; uint256 public gamesCounter; bool public GameIsAcive = false; // Random range minimum and maximum uint256 private constant min = 1; uint256 private constant max = 100; // VRF Request Id => Games Ids mapping(uint256 => uint256) public requestIdToGameId; // Limit of top trees uint256 public constant TOP_LIMIT = 30; // index to tokenId mapping(uint256 => uint256) public topTokensBytotalWonGames; mapping(uint256 => uint256) public topTokensByTotalGamesPlayed; // Game Events event GameJoined(uint256 _TreeTokenId); event GameStarted(Game _game); event GameEnded(uint256 _GameId, uint256 _TreeTokenId); // Config Events event VRFConfigUpdated( uint64 subscriptionId, uint32 _callbackGasLimit, uint16 _requestConfirmations, bytes32 _keyHash ); event EntryFeeUpdated(uint256 totalGameValue); event TeamAddressesUpdated(address artist, address dev); constructor( uint256 _gamesCounter, uint64 subscriptionId, bytes32 _keyHash, address _vrfCoordinator, address TreesNFTAddress_, address _PAT_Address, address _ref, address _dev, address _artist ) VRFConsumerBaseV2(_vrfCoordinator) { require(TreesNFTAddress_ != address(0)); require(_vrfCoordinator != address(0)); TreesNFTContractAddress = TreesNFTAddress_; TREES_CONTRACT = ERC721Interface(TreesNFTContractAddress); COORDINATOR = VRFCoordinatorV2Interface(_vrfCoordinator); s_subscriptionId = subscriptionId; keyHash = _keyHash; PAT_Address = _PAT_Address; ref = _ref; setTeamAddresses(_artist, _dev); //scores migrated from old contract gamesCounter = _gamesCounter; totalGamesValues = gamesCounter * GAME_VALUE; } // change VRF config if needed. for example, if subscription Id changed ...etc. function setVRFConfig( uint64 subscriptionId, uint32 _callbackGasLimit, uint16 _requestConfirmations, bytes32 _keyHash ) external onlyOwner { s_subscriptionId = subscriptionId; callbackGasLimit = _callbackGasLimit; requestConfirmations = _requestConfirmations; keyHash = _keyHash; emit VRFConfigUpdated( subscriptionId, _callbackGasLimit, _requestConfirmations, _keyHash ); } // Requets a random number from ChainLink function getRandomNumber() internal returns (uint256 requestId) { return COORDINATOR.requestRandomWords( keyHash, s_subscriptionId, requestConfirmations, callbackGasLimit, numWords ); } // Receive the requested random number from ChainLink function fulfillRandomWords(uint256 requestId, uint256[] memory randomWords) internal override { uint256 gameId = requestIdToGameId[requestId]; uint256 randomResult = (randomWords[0] % max) + min; pickWinner(gameId, randomResult); } // get game map function getMap(uint256 baseNum) internal pure returns (uint256) { return ((baseNum * 7) % 4) + 1; } // get game text function getText(uint256 baseNum) internal pure returns (uint256) { return (baseNum % 10) + 1; } // get game effect function getEffect(uint256 baseNum, uint256 MBTokenId) internal pure returns (uint256) { return ((baseNum + MBTokenId) % 6) + 1; } // Select the winner based on the random result considering total games played for each player function pickWinner(uint256 gameId, uint256 randomResult) internal { Game storage game = games[gameId]; game.winnerTokenId = getWinnerTokenId(gameId, randomResult); game.rndResult = randomResult; game.timestamp = block.timestamp; // randomResult is between 1 and 100 game.map = getMap(randomResult + gamesCounter); game.text = getText(randomResult + gamesCounter + 3); // Winner and Losers shares calculateShares(gameId); // Keep track of top winners bool alreadyAdded = false; uint256 smallestTokenIdIndex = 1; //topTokensBytotalWonGames[1]; if ( topTokensBytotalWonGames[smallestTokenIdIndex] == game.winnerTokenId ) { alreadyAdded = true; } if (!alreadyAdded) { for (uint256 k = 2; k <= TOP_LIMIT; k++) { if (topTokensBytotalWonGames[k] == game.winnerTokenId) { alreadyAdded = true; break; } if ( treesTokens[topTokensBytotalWonGames[k]].totalWonGames < treesTokens[topTokensBytotalWonGames[smallestTokenIdIndex]] .totalWonGames ) { smallestTokenIdIndex = k; } } } // update only if it wasn't added before if ( !alreadyAdded && treesTokens[topTokensBytotalWonGames[smallestTokenIdIndex]] .totalWonGames < treesTokens[game.winnerTokenId].totalWonGames ) { topTokensBytotalWonGames[smallestTokenIdIndex] = game.winnerTokenId; } emit GameEnded(gameId, games[gameId].winnerTokenId); } // sort players by total games played . index 0 -> lowest . index 3 -> highest function sortPlayersByTotalGamesPlayed(uint256 gameId) internal { Game storage game = games[gameId]; uint256 l = game.players.length; for (uint256 i = 0; i < l; i++) { for (uint256 j = i + 1; j < l; j++) { if ( treesTokens[game.players[i]].totalGamesPlayed > treesTokens[game.players[j]].totalGamesPlayed ) { uint256 temp = game.players[i]; game.players[i] = game.players[j]; game.players[j] = temp; } } } } // get the winner token id based on WIN_PERCENTAGES and the random result function getWinnerTokenId(uint256 gameId, uint256 randomResult) internal view returns (uint256 winnerTokenId) { require( randomResult >= 1 && randomResult <= 100, "Random result is out of range" ); uint256 l = WIN_PERCENTAGES.length; for (uint256 i = 1; i < l; i++) { if ( randomResult > WIN_PERCENTAGES[i - 1] && randomResult <= WIN_PERCENTAGES[i] ) { return games[gameId].players[i - 1]; } } } // get games as array within the range from-to function getGames(uint256 gameIdFrom, uint256 gameIdTo) external view returns (Game[] memory) { uint256 length = gameIdTo - gameIdFrom; Game[] memory gamesArr = new Game[](length + 1); uint256 j = 0; for (uint256 i = gameIdFrom; i <= gameIdTo; i++) { gamesArr[j] = games[i]; j++; } return gamesArr; } // get top Trees by wins or total played games function getTopTreesNFT(SORT_TYPE sortType) external view returns (TreesToken[] memory) { TreesToken[] memory treesArr = new TreesToken[](TOP_LIMIT); if (sortType == SORT_TYPE.TOTAL_WIN) { for (uint256 i = 1; i <= TOP_LIMIT; i++) { treesArr[i - 1] = treesTokens[topTokensBytotalWonGames[i]]; } } if (sortType == SORT_TYPE.TOTAL_GAMES) { for (uint256 i = 1; i <= TOP_LIMIT; i++) { treesArr[i - 1] = treesTokens[topTokensByTotalGamesPlayed[i]]; } } return treesArr; } // get players by game function getGamePlayers(uint256 gameId) external view returns (uint256[PLAYERS_COUNT] memory) { return games[gameId].players; } // calculate the players (including the winner), community and dev shares function calculateShares(uint256 gameId) internal { Game storage game = games[gameId]; // Winner specific // Add the wining share to the winner token uint256 winnerTokenId = game.winnerTokenId; treesTokens[winnerTokenId].totalWonGames++; treesTokens[winnerTokenId].totalGamesPlayed++; treesTokens[winnerTokenId].balance += WIN_SHARE; // Distribute the losing share to the losers tokens uint256 l = game.players.length; for (uint256 i = 0; i < l; i++) { uint256 tokenId = game.players[i]; if (tokenId != winnerTokenId) { treesTokens[tokenId].totalGamesPlayed++; treesTokens[tokenId].totalLostGames++; } } // Dev share teamBalance += TEAM_SHARE; } // Claim the balance of a Trees token function claim(uint256 _tokenId) external { require( _tokenId > 0 && _tokenId <= MAX_NFT_SUPPLY, "Tresstoken Id must be between 1 and 600" ); require( ownerOfTreesNFT(_tokenId), "Please make sure you own this Tresstoken" ); uint256 mbBalance = treesTokens[_tokenId].balance; require(mbBalance > 0, "Balance is zero"); require( address(this).balance >= mbBalance, "Insufficient contract balance" ); treesTokens[_tokenId].balance = 0; payable(msg.sender).transfer(mbBalance); } // Claim the balance of the dev function devClaim() public { require(_msgSender() == artist || _msgSender() == dev , "not allowed"); require(artist != address(0), "artist address can not be zero"); require(dev != address(0), "dev address can not be zero"); require(teamBalance > 0, "team Balance must be greater than zero"); uint256 _teamBalance = teamBalance; teamBalance = 0; uint256 _artist = _teamBalance / 3; //5% _teamBalance = _teamBalance - _artist; uint256 _dev = _teamBalance; //10% payable(artist).transfer(_artist); payable(dev).transfer(_dev); } // Set addresses of the team function setTeamAddresses(address _artist, address _dev) public onlyOwner { require( _artist != address(0) && _dev != address(0), "address can not be zero" ); artist = _artist; dev = _dev; emit TeamAddressesUpdated(_artist, _dev); } // Set Entry Fee function setEntryFeeWithGameShare( uint256 _totalGameValue, uint256 _ENTRY_FEE, uint256 _WIN_SHARE, uint256 _TEAM_SHARE, uint256 _DyanmicRewardsSystem_Share ) public onlyOwner { require(_totalGameValue >= MINIMUM_GAME_VALUE); // set the game value GAME_VALUE = _totalGameValue; ENTRY_FEE = _ENTRY_FEE; TEAM_SHARE = _TEAM_SHARE; WIN_SHARE = _WIN_SHARE; DynamicRewardsSystem_Share = _DyanmicRewardsSystem_Share; if ( WIN_SHARE + TEAM_SHARE + DynamicRewardsSystem_Share != _totalGameValue ) { revert(); } emit EntryFeeUpdated(_totalGameValue); } // Join a new game function joinGame(uint256 _tokenId) external payable { require(GameIsAcive == true, "Game not Active"); require(_tokenId > 0 && _tokenId <= MAX_NFT_SUPPLY); require(ownerOfTreesNFT(_tokenId)); require( treesTokenIsNotPlaying(_tokenId), "This Tress token is already in a game" ); require( pendingPlayersCount < PLAYERS_COUNT, "Please wait few seconds and try joining again" ); require(msg.value == ENTRY_FEE, "ENTRY FEE incorrect"); pendingPlayersCount++; pendingPlayers[pendingPlayersCount] = _tokenId; treesTokens[_tokenId].tokenId = _tokenId; // Keep track of top by total games played // get top of the 2 players uint256 playerTokenId = _tokenId; bool alreadyAdded = false; uint256 smallestTokenIdIndex = 1; if ( topTokensByTotalGamesPlayed[smallestTokenIdIndex] == playerTokenId ) { alreadyAdded = true; } if (!alreadyAdded) { for (uint256 k = 2; k <= TOP_LIMIT; k++) { if (topTokensByTotalGamesPlayed[k] == playerTokenId) { alreadyAdded = true; break; } if ( treesTokens[topTokensByTotalGamesPlayed[k]] .totalGamesPlayed < treesTokens[ topTokensByTotalGamesPlayed[smallestTokenIdIndex] ].totalGamesPlayed ) { smallestTokenIdIndex = k; } } } // update only if it wasn't added before if ( !alreadyAdded && treesTokens[topTokensByTotalGamesPlayed[smallestTokenIdIndex]] .totalGamesPlayed < treesTokens[playerTokenId].totalGamesPlayed ) { topTokensByTotalGamesPlayed[smallestTokenIdIndex] = playerTokenId; } emit GameJoined(_tokenId); if (pendingPlayersCount == PLAYERS_COUNT) { // Start the game as we have already 2 players startGame(); } } function setTreeNFTContract(address TreesNFTAddress_) public onlyOwner { TreesNFTContractAddress = TreesNFTAddress_; TREES_CONTRACT = ERC721Interface(TreesNFTContractAddress); } function ownerOfTreesNFT(uint256 _tokenId) internal view returns (bool) { address tokenOwnerAddress = TREES_CONTRACT.ownerOf(_tokenId); return (tokenOwnerAddress == msg.sender); } function treesTokenIsNotPlaying(uint256 _tokenId) internal view returns (bool) { for (uint256 i = 0; i < pendingPlayersCount; i++) { if (pendingPlayers[i + 1] == _tokenId) { return false; } } return true; } // Start the game and clear daata including pending players for a new game function startGame() private { gamesCounter++; totalGamesValues += GAME_VALUE; uint256[PLAYERS_COUNT] memory _players; _players[0] = pendingPlayers[1]; _players[1] = pendingPlayers[2]; games[gamesCounter] = Game(gamesCounter, _players, 0, 0, 0, 0, 0); // reset pendingPlayers[1] = 0; pendingPlayers[2] = 0; pendingPlayersCount = 0; // end emit GameStarted(games[gamesCounter]); uint256 requestId = getRandomNumber(); requestIdToGameId[requestId] = gamesCounter; // feed the DyanmicRewardsSystem DynamicRewards_Balance += DynamicRewardsSystem_Share; } function processGame(uint256 gameId, uint256 rnd) internal { pickWinner(gameId, rnd); } function setGameActive(bool _isActive) public onlyOwner { GameIsAcive = _isActive; } function feedRewardsPool() public { require(DynamicRewards_Balance >= 0.1 ether, "no enough balance"); PlantATreeRewardSystem(PAT_Address).PlantATree{ value: DynamicRewards_Balance }(ref); DynamicRewards_Balance = 0; } function setConfig( address PATaddr, address _ref ) external onlyOwner { if (PATaddr != address(0)) PAT_Address = PATaddr; if (_ref != address(0)) ref = _ref; } }
// 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) (access/Ownable.sol) pragma solidity ^0.8.0; import "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 pragma solidity ^0.8.4; /** **************************************************************************** * @notice Interface for contracts using VRF randomness * ***************************************************************************** * @dev PURPOSE * * @dev Reggie the Random Oracle (not his real job) wants to provide randomness * @dev to Vera the verifier in such a way that Vera can be sure he's not * @dev making his output up to suit himself. Reggie provides Vera a public key * @dev to which he knows the secret key. Each time Vera provides a seed to * @dev Reggie, he gives back a value which is computed completely * @dev deterministically from the seed and the secret key. * * @dev Reggie provides a proof by which Vera can verify that the output was * @dev correctly computed once Reggie tells it to her, but without that proof, * @dev the output is indistinguishable to her from a uniform random sample * @dev from the output space. * * @dev The purpose of this contract is to make it easy for unrelated contracts * @dev to talk to Vera the verifier about the work Reggie is doing, to provide * @dev simple access to a verifiable source of randomness. It ensures 2 things: * @dev 1. The fulfillment came from the VRFCoordinator * @dev 2. The consumer contract implements fulfillRandomWords. * ***************************************************************************** * @dev USAGE * * @dev Calling contracts must inherit from VRFConsumerBase, and can * @dev initialize VRFConsumerBase's attributes in their constructor as * @dev shown: * * @dev contract VRFConsumer { * @dev constructor(<other arguments>, address _vrfCoordinator, address _link) * @dev VRFConsumerBase(_vrfCoordinator) public { * @dev <initialization with other arguments goes here> * @dev } * @dev } * * @dev The oracle will have given you an ID for the VRF keypair they have * @dev committed to (let's call it keyHash). Create subscription, fund it * @dev and your consumer contract as a consumer of it (see VRFCoordinatorInterface * @dev subscription management functions). * @dev Call requestRandomWords(keyHash, subId, minimumRequestConfirmations, * @dev callbackGasLimit, numWords), * @dev see (VRFCoordinatorInterface for a description of the arguments). * * @dev Once the VRFCoordinator has received and validated the oracle's response * @dev to your request, it will call your contract's fulfillRandomWords method. * * @dev The randomness argument to fulfillRandomWords is a set of random words * @dev generated from your requestId and the blockHash of the request. * * @dev If your contract could have concurrent requests open, you can use the * @dev requestId returned from requestRandomWords to track which response is associated * @dev with which randomness request. * @dev See "SECURITY CONSIDERATIONS" for principles to keep in mind, * @dev if your contract could have multiple requests in flight simultaneously. * * @dev Colliding `requestId`s are cryptographically impossible as long as seeds * @dev differ. * * ***************************************************************************** * @dev SECURITY CONSIDERATIONS * * @dev A method with the ability to call your fulfillRandomness method directly * @dev could spoof a VRF response with any random value, so it's critical that * @dev it cannot be directly called by anything other than this base contract * @dev (specifically, by the VRFConsumerBase.rawFulfillRandomness method). * * @dev For your users to trust that your contract's random behavior is free * @dev from malicious interference, it's best if you can write it so that all * @dev behaviors implied by a VRF response are executed *during* your * @dev fulfillRandomness method. If your contract must store the response (or * @dev anything derived from it) and use it later, you must ensure that any * @dev user-significant behavior which depends on that stored value cannot be * @dev manipulated by a subsequent VRF request. * * @dev Similarly, both miners and the VRF oracle itself have some influence * @dev over the order in which VRF responses appear on the blockchain, so if * @dev your contract could have multiple VRF requests in flight simultaneously, * @dev you must ensure that the order in which the VRF responses arrive cannot * @dev be used to manipulate your contract's user-significant behavior. * * @dev Since the block hash of the block which contains the requestRandomness * @dev call is mixed into the input to the VRF *last*, a sufficiently powerful * @dev miner could, in principle, fork the blockchain to evict the block * @dev containing the request, forcing the request to be included in a * @dev different block with a different hash, and therefore a different input * @dev to the VRF. However, such an attack would incur a substantial economic * @dev cost. This cost scales with the number of blocks the VRF oracle waits * @dev until it calls responds to a request. It is for this reason that * @dev that you can signal to an oracle you'd like them to wait longer before * @dev responding to the request (however this is not enforced in the contract * @dev and so remains effective only in the case of unmodified oracle software). */ abstract contract VRFConsumerBaseV2 { error OnlyCoordinatorCanFulfill(address have, address want); address private immutable vrfCoordinator; /** * @param _vrfCoordinator address of VRFCoordinator contract */ constructor(address _vrfCoordinator) { vrfCoordinator = _vrfCoordinator; } /** * @notice fulfillRandomness handles the VRF response. Your contract must * @notice implement it. See "SECURITY CONSIDERATIONS" above for important * @notice principles to keep in mind when implementing your fulfillRandomness * @notice method. * * @dev VRFConsumerBaseV2 expects its subcontracts to have a method with this * @dev signature, and will call it once it has verified the proof * @dev associated with the randomness. (It is triggered via a call to * @dev rawFulfillRandomness, below.) * * @param requestId The Id initially returned by requestRandomness * @param randomWords the VRF output expanded to the requested number of words */ function fulfillRandomWords(uint256 requestId, uint256[] memory randomWords) internal virtual; // rawFulfillRandomness is called by VRFCoordinator when it receives a valid VRF // proof. rawFulfillRandomness then calls fulfillRandomness, after validating // the origin of the call function rawFulfillRandomWords(uint256 requestId, uint256[] memory randomWords) external { if (msg.sender != vrfCoordinator) { revert OnlyCoordinatorCanFulfill(msg.sender, vrfCoordinator); } fulfillRandomWords(requestId, randomWords); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface VRFCoordinatorV2Interface { /** * @notice Get configuration relevant for making requests * @return minimumRequestConfirmations global min for request confirmations * @return maxGasLimit global max for request gas limit * @return s_provingKeyHashes list of registered key hashes */ function getRequestConfig() external view returns ( uint16, uint32, bytes32[] memory ); /** * @notice Request a set of random words. * @param keyHash - Corresponds to a particular oracle job which uses * that key for generating the VRF proof. Different keyHash's have different gas price * ceilings, so you can select a specific one to bound your maximum per request cost. * @param subId - The ID of the VRF subscription. Must be funded * with the minimum subscription balance required for the selected keyHash. * @param minimumRequestConfirmations - How many blocks you'd like the * oracle to wait before responding to the request. See SECURITY CONSIDERATIONS * for why you may want to request more. The acceptable range is * [minimumRequestBlockConfirmations, 200]. * @param callbackGasLimit - How much gas you'd like to receive in your * fulfillRandomWords callback. Note that gasleft() inside fulfillRandomWords * may be slightly less than this amount because of gas used calling the function * (argument decoding etc.), so you may need to request slightly more than you expect * to have inside fulfillRandomWords. The acceptable range is * [0, maxGasLimit] * @param numWords - The number of uint256 random values you'd like to receive * in your fulfillRandomWords callback. Note these numbers are expanded in a * secure way by the VRFCoordinator from a single random value supplied by the oracle. * @return requestId - A unique identifier of the request. Can be used to match * a request to a response in fulfillRandomWords. */ function requestRandomWords( bytes32 keyHash, uint64 subId, uint16 minimumRequestConfirmations, uint32 callbackGasLimit, uint32 numWords ) external returns (uint256 requestId); /** * @notice Create a VRF subscription. * @return subId - A unique subscription id. * @dev You can manage the consumer set dynamically with addConsumer/removeConsumer. * @dev Note to fund the subscription, use transferAndCall. For example * @dev LINKTOKEN.transferAndCall( * @dev address(COORDINATOR), * @dev amount, * @dev abi.encode(subId)); */ function createSubscription() external returns (uint64 subId); /** * @notice Get a VRF subscription. * @param subId - ID of the subscription * @return balance - LINK balance of the subscription in juels. * @return reqCount - number of requests for this subscription, determines fee tier. * @return owner - owner of the subscription. * @return consumers - list of consumer address which are able to use this subscription. */ function getSubscription(uint64 subId) external view returns ( uint96 balance, uint64 reqCount, address owner, address[] memory consumers ); /** * @notice Request subscription owner transfer. * @param subId - ID of the subscription * @param newOwner - proposed new owner of the subscription */ function requestSubscriptionOwnerTransfer(uint64 subId, address newOwner) external; /** * @notice Request subscription owner transfer. * @param subId - ID of the subscription * @dev will revert if original owner of subId has * not requested that msg.sender become the new owner. */ function acceptSubscriptionOwnerTransfer(uint64 subId) external; /** * @notice Add a consumer to a VRF subscription. * @param subId - ID of the subscription * @param consumer - New consumer which can use the subscription */ function addConsumer(uint64 subId, address consumer) external; /** * @notice Remove a consumer from a VRF subscription. * @param subId - ID of the subscription * @param consumer - Consumer to remove from the subscription */ function removeConsumer(uint64 subId, address consumer) external; /** * @notice Cancel a subscription * @param subId - ID of the subscription * @param to - Where to send the remaining LINK to */ function cancelSubscription(uint64 subId, address to) external; /* * @notice Check to see if there exists a request commitment consumers * for all consumers and keyhashes for a given sub. * @param subId - ID of the subscription * @return true if there exists at least one unfulfilled request for the subscription, false * otherwise. */ function pendingRequestExists(uint64 subId) external view returns (bool); }
[{"inputs":[{"internalType":"uint256","name":"_gamesCounter","type":"uint256"},{"internalType":"uint64","name":"subscriptionId","type":"uint64"},{"internalType":"bytes32","name":"_keyHash","type":"bytes32"},{"internalType":"address","name":"_vrfCoordinator","type":"address"},{"internalType":"address","name":"TreesNFTAddress_","type":"address"},{"internalType":"address","name":"_PAT_Address","type":"address"},{"internalType":"address","name":"_ref","type":"address"},{"internalType":"address","name":"_dev","type":"address"},{"internalType":"address","name":"_artist","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"have","type":"address"},{"internalType":"address","name":"want","type":"address"}],"name":"OnlyCoordinatorCanFulfill","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalGameValue","type":"uint256"}],"name":"EntryFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_GameId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_TreeTokenId","type":"uint256"}],"name":"GameEnded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_TreeTokenId","type":"uint256"}],"name":"GameJoined","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256[2]","name":"players","type":"uint256[2]"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"winnerTokenId","type":"uint256"},{"internalType":"uint256","name":"map","type":"uint256"},{"internalType":"uint256","name":"text","type":"uint256"},{"internalType":"uint256","name":"rndResult","type":"uint256"}],"indexed":false,"internalType":"struct TreeGameOneVsOne.Game","name":"_game","type":"tuple"}],"name":"GameStarted","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":false,"internalType":"address","name":"artist","type":"address"},{"indexed":false,"internalType":"address","name":"dev","type":"address"}],"name":"TeamAddressesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"subscriptionId","type":"uint64"},{"indexed":false,"internalType":"uint32","name":"_callbackGasLimit","type":"uint32"},{"indexed":false,"internalType":"uint16","name":"_requestConfirmations","type":"uint16"},{"indexed":false,"internalType":"bytes32","name":"_keyHash","type":"bytes32"}],"name":"VRFConfigUpdated","type":"event"},{"inputs":[],"name":"DynamicRewardsSystem_Share","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DynamicRewards_Balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENTRY_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GAME_VALUE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GameIsAcive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_NFT_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINIMUM_GAME_VALUE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAT_Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PLAYERS_COUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TEAM_SHARE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOP_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TreesNFTContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WIN_SHARE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"artist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dev","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feedRewardsPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"games","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"winnerTokenId","type":"uint256"},{"internalType":"uint256","name":"map","type":"uint256"},{"internalType":"uint256","name":"text","type":"uint256"},{"internalType":"uint256","name":"rndResult","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gamesCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId","type":"uint256"}],"name":"getGamePlayers","outputs":[{"internalType":"uint256[2]","name":"","type":"uint256[2]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameIdFrom","type":"uint256"},{"internalType":"uint256","name":"gameIdTo","type":"uint256"}],"name":"getGames","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256[2]","name":"players","type":"uint256[2]"},{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"winnerTokenId","type":"uint256"},{"internalType":"uint256","name":"map","type":"uint256"},{"internalType":"uint256","name":"text","type":"uint256"},{"internalType":"uint256","name":"rndResult","type":"uint256"}],"internalType":"struct TreeGameOneVsOne.Game[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum TreeGameOneVsOne.SORT_TYPE","name":"sortType","type":"uint8"}],"name":"getTopTreesNFT","outputs":[{"components":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"totalGamesPlayed","type":"uint256"},{"internalType":"uint256","name":"totalWonGames","type":"uint256"},{"internalType":"uint256","name":"totalLostGames","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"}],"internalType":"struct TreeGameOneVsOne.TreesToken[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"joinGame","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pendingPlayers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingPlayersCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"},{"internalType":"uint256[]","name":"randomWords","type":"uint256[]"}],"name":"rawFulfillRandomWords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ref","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"requestIdToGameId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"PATaddr","type":"address"},{"internalType":"address","name":"_ref","type":"address"}],"name":"setConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_totalGameValue","type":"uint256"},{"internalType":"uint256","name":"_ENTRY_FEE","type":"uint256"},{"internalType":"uint256","name":"_WIN_SHARE","type":"uint256"},{"internalType":"uint256","name":"_TEAM_SHARE","type":"uint256"},{"internalType":"uint256","name":"_DyanmicRewardsSystem_Share","type":"uint256"}],"name":"setEntryFeeWithGameShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setGameActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_artist","type":"address"},{"internalType":"address","name":"_dev","type":"address"}],"name":"setTeamAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"TreesNFTAddress_","type":"address"}],"name":"setTreeNFTContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"subscriptionId","type":"uint64"},{"internalType":"uint32","name":"_callbackGasLimit","type":"uint32"},{"internalType":"uint16","name":"_requestConfirmations","type":"uint16"},{"internalType":"bytes32","name":"_keyHash","type":"bytes32"}],"name":"setVRFConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"teamBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"topTokensByTotalGamesPlayed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"topTokensBytotalWonGames","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalGamesValues","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":"uint256","name":"","type":"uint256"}],"name":"treesTokens","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"totalGamesPlayed","type":"uint256"},{"internalType":"uint256","name":"totalWonGames","type":"uint256"},{"internalType":"uint256","name":"totalLostGames","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a0604052622625a0600360006101000a81548163ffffffff021916908363ffffffff16021790555060038060046101000a81548161ffff021916908361ffff1602179055506040518060600160405280600060ff168152602001603260ff168152602001606460ff1681525060049060036200007e929190620006bd565b506000600b556000600c556702c68af0bb140000600f55670de0b6b3a76400006010556718493fba64ef0000601155670214e8348c4f000060125567016345785d8a000060135560006014556000601a60006101000a81548160ff021916908315150217905550348015620000f257600080fd5b5060405162004ecb38038062004ecb833981810160405281019062000118919062000858565b858073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050506200016e62000162620003b960201b60201c565b620003c160201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603620001a857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603620001e257600080fd5b84600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508660028190555083600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200038b81836200048560201b60201c565b88601981905550600f54601954620003a4919062000966565b600b8190555050505050505050505062000afa565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620004956200060360201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015620005005750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b62000542576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005399062000a28565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f5b65288e2d560d9dd6a3f51aeacd4a1b63fd42c65a06e25cc090f3443a7eb0558282604051620005f792919062000a5b565b60405180910390a15050565b62000613620003b960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006396200069460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000692576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006899062000ad8565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805482825590600052602060002090810192821562000701579160200282015b8281111562000700578251829060ff16905591602001919060010190620006de565b5b50905062000710919062000714565b5090565b5b808211156200072f57600081600090555060010162000715565b5090565b600080fd5b6000819050919050565b6200074d8162000738565b81146200075957600080fd5b50565b6000815190506200076d8162000742565b92915050565b600067ffffffffffffffff82169050919050565b620007928162000773565b81146200079e57600080fd5b50565b600081519050620007b28162000787565b92915050565b6000819050919050565b620007cd81620007b8565b8114620007d957600080fd5b50565b600081519050620007ed81620007c2565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200082082620007f3565b9050919050565b620008328162000813565b81146200083e57600080fd5b50565b600081519050620008528162000827565b92915050565b60008060008060008060008060006101208a8c0312156200087e576200087d62000733565b5b60006200088e8c828d016200075c565b9950506020620008a18c828d01620007a1565b9850506040620008b48c828d01620007dc565b9750506060620008c78c828d0162000841565b9650506080620008da8c828d0162000841565b95505060a0620008ed8c828d0162000841565b94505060c0620009008c828d0162000841565b93505060e0620009138c828d0162000841565b925050610100620009278c828d0162000841565b9150509295985092959850929598565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620009738262000738565b9150620009808362000738565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620009bc57620009bb62000937565b5b828202905092915050565b600082825260208201905092915050565b7f616464726573732063616e206e6f74206265207a65726f000000000000000000600082015250565b600062000a10601783620009c7565b915062000a1d82620009d8565b602082019050919050565b6000602082019050818103600083015262000a438162000a01565b9050919050565b62000a558162000813565b82525050565b600060408201905062000a72600083018562000a4a565b62000a81602083018462000a4a565b9392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000ac0602083620009c7565b915062000acd8262000a88565b602082019050919050565b6000602082019050818103600083015262000af38162000ab1565b9050919050565b6080516143ae62000b1d60003960008181610c280152610c7c01526143ae6000f3fe60806040526004361061025c5760003560e01c80637ec9ff9611610144578063c1a45417116100b6578063e9f1cc6b1161007a578063e9f1cc6b146108e5578063ece31e7914610910578063efaa55a01461094d578063f2879bf114610969578063f2fde38b14610994578063f6d361cc146109bd5761025c565b8063c1a45417146107fe578063c2463d8814610829578063ccc0897414610854578063dbede0f01461087d578063e6094261146108a85761025c565b80638de3130b116101085780638de3130b1461070057806391cca3db1461072b578063ac45118514610756578063ae979ae614610793578063b5077f44146107aa578063b602024b146107d55761025c565b80637ec9ff961461062b5780637f3f24b41461065657806389e852171461066d5780638b470d86146106985780638da5cb5b146106d55761025c565b806321a78f68116101dd57806343bc1612116101a157806343bc16121461053d5780635eb6a78f14610568578063666352d4146105935780636d0083e8146105be578063714d4370146105e9578063715018a6146106145761025c565b806321a78f6814610456578063299ae8ad1461048157806335e4b8f6146104aa578063379607f5146104eb57806342b75595146105145761025c565b806315a40f491161022457806315a40f491461034d5780631a16dddb1461038a5780631aff478b146103b35780631fa072db146103f05780631fe543e31461042d5761025c565b806305943a151461026157806307bcd85f1461028c57806309e7d2de146102b5578063109ad32f146102e0578063117a5b901461030b575b600080fd5b34801561026d57600080fd5b506102766109e8565b6040516102839190612b1a565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae9190612c35565b6109ee565b005b3480156102c157600080fd5b506102ca610aa7565b6040516102d79190612b1a565b60405180910390f35b3480156102ec57600080fd5b506102f5610aad565b6040516103029190612b1a565b60405180910390f35b34801561031757600080fd5b50610332600480360381019061032d9190612cc8565b610ab3565b60405161034496959493929190612cf5565b60405180910390f35b34801561035957600080fd5b50610374600480360381019061036f9190612cc8565b610aef565b6040516103819190612e01565b60405180910390f35b34801561039657600080fd5b506103b160048036038101906103ac9190612e1c565b610b50565b005b3480156103bf57600080fd5b506103da60048036038101906103d59190612cc8565b610bf6565b6040516103e79190612b1a565b60405180910390f35b3480156103fc57600080fd5b5061041760048036038101906104129190612cc8565b610c0e565b6040516104249190612b1a565b60405180910390f35b34801561043957600080fd5b50610454600480360381019061044f9190612ff0565b610c26565b005b34801561046257600080fd5b5061046b610ce6565b604051610478919061308d565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a391906130d4565b610d0c565b005b3480156104b657600080fd5b506104d160048036038101906104cc9190612cc8565b610dbb565b6040516104e2959493929190613101565b60405180910390f35b3480156104f757600080fd5b50610512600480360381019061050d9190612cc8565b610df1565b005b34801561052057600080fd5b5061053b60048036038101906105369190613154565b610f92565b005b34801561054957600080fd5b50610552611102565b60405161055f919061308d565b60405180910390f35b34801561057457600080fd5b5061057d611128565b60405161058a9190612b1a565b60405180910390f35b34801561059f57600080fd5b506105a861112e565b6040516105b59190612b1a565b60405180910390f35b3480156105ca57600080fd5b506105d3611134565b6040516105e09190612b1a565b60405180910390f35b3480156105f557600080fd5b506105fe611139565b60405161060b919061308d565b60405180910390f35b34801561062057600080fd5b5061062961115f565b005b34801561063757600080fd5b50610640611173565b60405161064d9190612b1a565b60405180910390f35b34801561066257600080fd5b5061066b611178565b005b34801561067957600080fd5b50610682611281565b60405161068f9190612b1a565b60405180910390f35b3480156106a457600080fd5b506106bf60048036038101906106ba9190612cc8565b611287565b6040516106cc9190612b1a565b60405180910390f35b3480156106e157600080fd5b506106ea61129f565b6040516106f7919061308d565b60405180910390f35b34801561070c57600080fd5b506107156112c8565b6040516107229190612b1a565b60405180910390f35b34801561073757600080fd5b506107406112ce565b60405161074d919061308d565b60405180910390f35b34801561076257600080fd5b5061077d60048036038101906107789190613194565b6112f4565b60405161078a9190613375565b60405180910390f35b34801561079f57600080fd5b506107a8611463565b005b3480156107b657600080fd5b506107bf6117ca565b6040516107cc9190612b1a565b60405180910390f35b3480156107e157600080fd5b506107fc60048036038101906107f79190613154565b6117d0565b005b34801561080a57600080fd5b506108136118c8565b6040516108209190612b1a565b60405180910390f35b34801561083557600080fd5b5061083e6118ce565b60405161084b91906133b2565b60405180910390f35b34801561086057600080fd5b5061087b600480360381019061087691906133f9565b6118e1565b005b34801561088957600080fd5b50610892611906565b60405161089f919061308d565b60405180910390f35b3480156108b457600080fd5b506108cf60048036038101906108ca9190612cc8565b61192c565b6040516108dc9190612b1a565b60405180910390f35b3480156108f157600080fd5b506108fa611944565b6040516109079190612b1a565b60405180910390f35b34801561091c57600080fd5b506109376004803603810190610932919061344b565b61194a565b604051610944919061358f565b60405180910390f35b61096760048036038101906109629190612cc8565b611b67565b005b34801561097557600080fd5b5061097e611e97565b60405161098b9190612b1a565b60405180910390f35b3480156109a057600080fd5b506109bb60048036038101906109b691906130d4565b611ea3565b005b3480156109c957600080fd5b506109d2611f26565b6040516109df9190612b1a565b60405180910390f35b60125481565b6109f6611f2c565b83600160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600360006101000a81548163ffffffff021916908363ffffffff16021790555081600360046101000a81548161ffff021916908361ffff160217905550806002819055507f21c3280824c4b41c8107036783a63f9dc0ac271a24f7b296ce7e05811b12e32184848484604051610a9994939291906135ed565b60405180910390a150505050565b600b5481565b60145481565b60186020528060005260406000206000915090508060000154908060030154908060040154908060050154908060060154908060070154905086565b610af7612a10565b60186000838152602001908152602001600020600101600280602002604051908101604052809291908260028015610b44576020028201915b815481526020019060010190808311610b30575b50505050509050919050565b610b58611f2c565b6702c68af0bb140000851015610b6d57600080fd5b84600f819055508360108190555081601281905550826011819055508060138190555084601354601254601154610ba49190613661565b610bae9190613661565b14610bb857600080fd5b7f24a0b2e591795f2c27be52ff14a57d0a39ac957304305bc05e8b04be49e8fe1585604051610be79190612b1a565b60405180910390a15050505050565b601d6020528060005260406000206000915090505481565b601b6020528060005260406000206000915090505481565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cd857337f00000000000000000000000000000000000000000000000000000000000000006040517f1cf993f4000000000000000000000000000000000000000000000000000000008152600401610ccf9291906136b7565b60405180910390fd5b610ce28282611faa565b5050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d14611f2c565b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60176020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154905085565b600081118015610e0357506102588111155b610e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3990613763565b60405180910390fd5b610e4b8161200a565b610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e81906137f5565b60405180910390fd5b60006017600083815260200190815260200160002060040154905060008111610ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edf90613861565b60405180910390fd5b80471015610f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f22906138cd565b60405180910390fd5b600060176000848152602001908152602001600020600401819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610f8d573d6000803e3d6000fd5b505050565b610f9a611f2c565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156110045750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b611043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103a90613939565b60405180910390fd5b81600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f5b65288e2d560d9dd6a3f51aeacd4a1b63fd42c65a06e25cc090f3443a7eb05582826040516110f69291906136b7565b60405180910390a15050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b60115481565b600281565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611167611f2c565b61117160006120e2565b565b601e81565b67016345785d8a000060145410156111c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bc906139a5565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636d3e7807601454600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611245919061308d565b6000604051808303818588803b15801561125e57600080fd5b505af1158015611272573d6000803e3d6000fd5b50505050506000601481905550565b600c5481565b60156020528060005260406000206000915090505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606000838361130491906139c5565b905060006001826113159190613661565b67ffffffffffffffff81111561132e5761132d612ead565b5b60405190808252806020026020018201604052801561136757816020015b611354612a32565b81526020019060019003908161134c5790505b5090506000808690505b85811161145657601860008281526020019081526020016000206040518060e001604052908160008201548152602001600182016002806020026040519081016040528092919082600280156113dc576020028201915b8154815260200190600101908083116113c8575b505050505081526020016003820154815260200160048201548152602001600582015481526020016006820154815260200160078201548152505083838151811061142a576114296139f9565b5b6020026020010181905250818061144090613a28565b925050808061144e90613a28565b915050611371565b5081935050505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166114a46121a6565b73ffffffffffffffffffffffffffffffffffffffff16148061151a5750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166115026121a6565b73ffffffffffffffffffffffffffffffffffffffff16145b611559576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155090613abc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036115ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e190613b28565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361167b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167290613b94565b60405180910390fd5b6000600c54116116c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b790613c26565b60405180910390fd5b6000600c5490506000600c8190555060006003826116de9190613c75565b905080826116ec91906139c5565b91506000829050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f1935050505015801561175b573d6000803e3d6000fd5b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156117c4573d6000803e3d6000fd5b50505050565b61025881565b6117d8611f2c565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461184e5781600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146118c45780600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b600f5481565b601a60009054906101000a900460ff1681565b6118e9611f2c565b80601a60006101000a81548160ff02191690831515021790555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601c6020528060005260406000206000915090505481565b60165481565b60606000601e67ffffffffffffffff81111561196957611968612ead565b5b6040519080825280602002602001820160405280156119a257816020015b61198f612a75565b8152602001906001900390816119875790505b509050600060018111156119b9576119b8613ca6565b5b8360018111156119cc576119cb613ca6565b5b03611a82576000600190505b601e8111611a805760176000601c60008481526020019081526020016000205481526020019081526020016000206040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152505082600183611a5191906139c5565b81518110611a6257611a616139f9565b5b60200260200101819052508080611a7890613a28565b9150506119d8565b505b600180811115611a9557611a94613ca6565b5b836001811115611aa857611aa7613ca6565b5b03611b5e576000600190505b601e8111611b5c5760176000601d60008481526020019081526020016000205481526020019081526020016000206040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152505082600183611b2d91906139c5565b81518110611b3e57611b3d6139f9565b5b60200260200101819052508080611b5490613a28565b915050611ab4565b505b80915050919050565b60011515601a60009054906101000a900460ff16151514611bbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb490613d21565b60405180910390fd5b600081118015611bcf57506102588111155b611bd857600080fd5b611be18161200a565b611bea57600080fd5b611bf3816121ae565b611c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2990613db3565b60405180910390fd5b600260165410611c77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6e90613e45565b60405180910390fd5b6010543414611cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb290613eb1565b60405180910390fd5b60166000815480929190611cce90613a28565b9190505550806015600060165481526020019081526020016000208190555080601760008381526020019081526020016000206000018190555060008190506000806001905082601d60008381526020019081526020016000205403611d3357600191505b81611ddd576000600290505b601e8111611ddb5783601d60008381526020019081526020016000205403611d6a5760019250611ddb565b60176000601d60008581526020019081526020016000205481526020019081526020016000206001015460176000601d6000858152602001908152602001600020548152602001908152602001600020600101541015611dc8578091505b8080611dd390613a28565b915050611d3f565b505b81158015611e295750601760008481526020019081526020016000206001015460176000601d600085815260200190815260200160002054815260200190815260200160002060010154105b15611e475782601d6000838152602001908152602001600020819055505b7ffe9befc84fdb142bebdf33b7564a6dc1d47e60864b996a5f6c7949c210d1f54484604051611e769190612b1a565b60405180910390a1600260165403611e9157611e9061220e565b5b50505050565b6702c68af0bb14000081565b611eab611f2c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1190613f43565b60405180910390fd5b611f23816120e2565b50565b60105481565b611f346121a6565b73ffffffffffffffffffffffffffffffffffffffff16611f5261129f565b73ffffffffffffffffffffffffffffffffffffffff1614611fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9f90613faf565b60405180910390fd5b565b6000601b600084815260200190815260200160002054905060006001606484600081518110611fdc57611fdb6139f9565b5b6020026020010151611fee9190613fcf565b611ff89190613661565b9050612004828261241f565b50505050565b600080600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004016120689190612b1a565b602060405180830381865afa158015612085573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a99190614015565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b600080600090505b6016548110156122035782601560006001846121d29190613661565b815260200190815260200160002054036121f0576000915050612209565b80806121fb90613a28565b9150506121b6565b50600190505b919050565b6019600081548092919061222190613a28565b9190505550600f54600b600082825461223a9190613661565b92505081905550612249612a10565b60156000600181526020019081526020016000205481600060028110612272576122716139f9565b5b602002018181525050601560006002815260200190815260200160002054816001600281106122a4576122a36139f9565b5b6020020181815250506040518060e0016040528060195481526020018281526020016000815260200160008152602001600081526020016000815260200160008152506018600060195481526020019081526020016000206000820151816000015560208201518160010190600261231d929190612aa4565b5060408201518160030155606082015181600401556080820151816005015560a0820151816006015560c082015181600701559050506000601560006001815260200190815260200160002081905550600060156000600281526020019081526020016000208190555060006016819055507f619f1fc433ab29ed255e57e5be28fd39fc31c366c27153b0a775ddb3889365d06018600060195481526020019081526020016000206040516123d291906141d8565b60405180910390a160006123e461264b565b9050601954601b600083815260200190815260200160002081905550601354601460008282546124149190613661565b925050819055505050565b60006018600084815260200190815260200160002090506124408383612733565b81600401819055508181600701819055504281600301819055506124706019548361246b9190613661565b612856565b816005018190555061249a60036019548461248b9190613661565b6124959190613661565b612884565b81600601819055506124ab836128a6565b600080600190508260040154601c600083815260200190815260200160002054036124d557600191505b81612583576000600290505b601e8111612581578360040154601c600083815260200190815260200160002054036125105760019250612581565b60176000601c60008581526020019081526020016000205481526020019081526020016000206002015460176000601c600085815260200190815260200160002054815260200190815260200160002060020154101561256e578091505b808061257990613a28565b9150506124e1565b505b811580156125d3575060176000846004015481526020019081526020016000206002015460176000601c600085815260200190815260200160002054815260200190815260200160002060020154105b156125f5578260040154601c6000838152602001908152602001600020819055505b7f4c4660db760944215f41e957066d756ad5fd0eed1b4640632322eb06f77b034d85601860008881526020019081526020016000206004015460405161263c9291906141f4565b60405180910390a15050505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635d3b1d30600254600160149054906101000a900467ffffffffffffffff16600360049054906101000a900461ffff16600360009054906101000a900463ffffffff1660016040518663ffffffff1660e01b81526004016126eb95949392919061421d565b6020604051808303816000875af115801561270a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272e9190614285565b905090565b600060018210158015612747575060648211155b612786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277d906142fe565b60405180910390fd5b600060048054905090506000600190505b8181101561284d5760046001826127ae91906139c5565b815481106127bf576127be6139f9565b5b9060005260206000200154841180156127f65750600481815481106127e7576127e66139f9565b5b90600052602060002001548411155b1561283a576018600086815260200190815260200160002060010160018261281e91906139c5565b6002811061282f5761282e6139f9565b5b015492505050612850565b808061284590613a28565b915050612797565b50505b92915050565b600060016004600784612869919061431e565b6128739190613fcf565b61287d9190613661565b9050919050565b60006001600a836128959190613fcf565b61289f9190613661565b9050919050565b60006018600083815260200190815260200160002090506000816004015490506017600082815260200190815260200160002060020160008154809291906128ed90613a28565b919050555060176000828152602001908152602001600020600101600081548092919061291990613a28565b91905055506011546017600083815260200190815260200160002060040160008282546129469190613661565b9250508190555060006002905060005b818110156129ee576000846001018260028110612976576129756139f9565b5b015490508381146129da576017600082815260200190815260200160002060010160008154809291906129a890613a28565b91905055506017600082815260200190815260200160002060030160008154809291906129d490613a28565b91905055505b5080806129e690613a28565b915050612956565b50601254600c6000828254612a039190613661565b9250508190555050505050565b6040518060400160405280600290602082028036833780820191505090505090565b6040518060e0016040528060008152602001612a4c612a10565b815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b8260028101928215612ad3579160200282015b82811115612ad2578251825591602001919060010190612ab7565b5b509050612ae09190612ae4565b5090565b5b80821115612afd576000816000905550600101612ae5565b5090565b6000819050919050565b612b1481612b01565b82525050565b6000602082019050612b2f6000830184612b0b565b92915050565b6000604051905090565b600080fd5b600080fd5b600067ffffffffffffffff82169050919050565b612b6681612b49565b8114612b7157600080fd5b50565b600081359050612b8381612b5d565b92915050565b600063ffffffff82169050919050565b612ba281612b89565b8114612bad57600080fd5b50565b600081359050612bbf81612b99565b92915050565b600061ffff82169050919050565b612bdc81612bc5565b8114612be757600080fd5b50565b600081359050612bf981612bd3565b92915050565b6000819050919050565b612c1281612bff565b8114612c1d57600080fd5b50565b600081359050612c2f81612c09565b92915050565b60008060008060808587031215612c4f57612c4e612b3f565b5b6000612c5d87828801612b74565b9450506020612c6e87828801612bb0565b9350506040612c7f87828801612bea565b9250506060612c9087828801612c20565b91505092959194509250565b612ca581612b01565b8114612cb057600080fd5b50565b600081359050612cc281612c9c565b92915050565b600060208284031215612cde57612cdd612b3f565b5b6000612cec84828501612cb3565b91505092915050565b600060c082019050612d0a6000830189612b0b565b612d176020830188612b0b565b612d246040830187612b0b565b612d316060830186612b0b565b612d3e6080830185612b0b565b612d4b60a0830184612b0b565b979650505050505050565b600060029050919050565b600081905092915050565b6000819050919050565b612d7f81612b01565b82525050565b6000612d918383612d76565b60208301905092915050565b6000602082019050919050565b612db381612d56565b612dbd8184612d61565b9250612dc882612d6c565b8060005b83811015612df9578151612de08782612d85565b9650612deb83612d9d565b925050600181019050612dcc565b505050505050565b6000604082019050612e166000830184612daa565b92915050565b600080600080600060a08688031215612e3857612e37612b3f565b5b6000612e4688828901612cb3565b9550506020612e5788828901612cb3565b9450506040612e6888828901612cb3565b9350506060612e7988828901612cb3565b9250506080612e8a88828901612cb3565b9150509295509295909350565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612ee582612e9c565b810181811067ffffffffffffffff82111715612f0457612f03612ead565b5b80604052505050565b6000612f17612b35565b9050612f238282612edc565b919050565b600067ffffffffffffffff821115612f4357612f42612ead565b5b602082029050602081019050919050565b600080fd5b6000612f6c612f6784612f28565b612f0d565b90508083825260208201905060208402830185811115612f8f57612f8e612f54565b5b835b81811015612fb85780612fa48882612cb3565b845260208401935050602081019050612f91565b5050509392505050565b600082601f830112612fd757612fd6612e97565b5b8135612fe7848260208601612f59565b91505092915050565b6000806040838503121561300757613006612b3f565b5b600061301585828601612cb3565b925050602083013567ffffffffffffffff81111561303657613035612b44565b5b61304285828601612fc2565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006130778261304c565b9050919050565b6130878161306c565b82525050565b60006020820190506130a2600083018461307e565b92915050565b6130b18161306c565b81146130bc57600080fd5b50565b6000813590506130ce816130a8565b92915050565b6000602082840312156130ea576130e9612b3f565b5b60006130f8848285016130bf565b91505092915050565b600060a0820190506131166000830188612b0b565b6131236020830187612b0b565b6131306040830186612b0b565b61313d6060830185612b0b565b61314a6080830184612b0b565b9695505050505050565b6000806040838503121561316b5761316a612b3f565b5b6000613179858286016130bf565b925050602061318a858286016130bf565b9150509250929050565b600080604083850312156131ab576131aa612b3f565b5b60006131b985828601612cb3565b92505060206131ca85828601612cb3565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081905092915050565b61321481612d56565b61321e8184613200565b925061322982612d6c565b8060005b8381101561325a5781516132418782612d85565b965061324c83612d9d565b92505060018101905061322d565b505050505050565b610100820160008201516132796000850182612d76565b50602082015161328c602085018261320b565b50604082015161329f6060850182612d76565b5060608201516132b26080850182612d76565b5060808201516132c560a0850182612d76565b5060a08201516132d860c0850182612d76565b5060c08201516132eb60e0850182612d76565b50505050565b60006132fd8383613262565b6101008301905092915050565b6000602082019050919050565b6000613322826131d4565b61332c81856131df565b9350613337836131f0565b8060005b8381101561336857815161334f88826132f1565b975061335a8361330a565b92505060018101905061333b565b5085935050505092915050565b6000602082019050818103600083015261338f8184613317565b905092915050565b60008115159050919050565b6133ac81613397565b82525050565b60006020820190506133c760008301846133a3565b92915050565b6133d681613397565b81146133e157600080fd5b50565b6000813590506133f3816133cd565b92915050565b60006020828403121561340f5761340e612b3f565b5b600061341d848285016133e4565b91505092915050565b6002811061343357600080fd5b50565b60008135905061344581613426565b92915050565b60006020828403121561346157613460612b3f565b5b600061346f84828501613436565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60a0820160008201516134ba6000850182612d76565b5060208201516134cd6020850182612d76565b5060408201516134e06040850182612d76565b5060608201516134f36060850182612d76565b5060808201516135066080850182612d76565b50505050565b600061351883836134a4565b60a08301905092915050565b6000602082019050919050565b600061353c82613478565b6135468185613483565b935061355183613494565b8060005b83811015613582578151613569888261350c565b975061357483613524565b925050600181019050613555565b5085935050505092915050565b600060208201905081810360008301526135a98184613531565b905092915050565b6135ba81612b49565b82525050565b6135c981612b89565b82525050565b6135d881612bc5565b82525050565b6135e781612bff565b82525050565b600060808201905061360260008301876135b1565b61360f60208301866135c0565b61361c60408301856135cf565b61362960608301846135de565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061366c82612b01565b915061367783612b01565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136ac576136ab613632565b5b828201905092915050565b60006040820190506136cc600083018561307e565b6136d9602083018461307e565b9392505050565b600082825260208201905092915050565b7f5472657373746f6b656e204964206d757374206265206265747765656e20312060008201527f616e642036303000000000000000000000000000000000000000000000000000602082015250565b600061374d6027836136e0565b9150613758826136f1565b604082019050919050565b6000602082019050818103600083015261377c81613740565b9050919050565b7f506c65617365206d616b65207375726520796f75206f776e207468697320547260008201527f657373746f6b656e000000000000000000000000000000000000000000000000602082015250565b60006137df6028836136e0565b91506137ea82613783565b604082019050919050565b6000602082019050818103600083015261380e816137d2565b9050919050565b7f42616c616e6365206973207a65726f0000000000000000000000000000000000600082015250565b600061384b600f836136e0565b915061385682613815565b602082019050919050565b6000602082019050818103600083015261387a8161383e565b9050919050565b7f496e73756666696369656e7420636f6e74726163742062616c616e6365000000600082015250565b60006138b7601d836136e0565b91506138c282613881565b602082019050919050565b600060208201905081810360008301526138e6816138aa565b9050919050565b7f616464726573732063616e206e6f74206265207a65726f000000000000000000600082015250565b60006139236017836136e0565b915061392e826138ed565b602082019050919050565b6000602082019050818103600083015261395281613916565b9050919050565b7f6e6f20656e6f7567682062616c616e6365000000000000000000000000000000600082015250565b600061398f6011836136e0565b915061399a82613959565b602082019050919050565b600060208201905081810360008301526139be81613982565b9050919050565b60006139d082612b01565b91506139db83612b01565b9250828210156139ee576139ed613632565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613a3382612b01565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613a6557613a64613632565b5b600182019050919050565b7f6e6f7420616c6c6f776564000000000000000000000000000000000000000000600082015250565b6000613aa6600b836136e0565b9150613ab182613a70565b602082019050919050565b60006020820190508181036000830152613ad581613a99565b9050919050565b7f61727469737420616464726573732063616e206e6f74206265207a65726f0000600082015250565b6000613b12601e836136e0565b9150613b1d82613adc565b602082019050919050565b60006020820190508181036000830152613b4181613b05565b9050919050565b7f64657620616464726573732063616e206e6f74206265207a65726f0000000000600082015250565b6000613b7e601b836136e0565b9150613b8982613b48565b602082019050919050565b60006020820190508181036000830152613bad81613b71565b9050919050565b7f7465616d2042616c616e6365206d75737420626520677265617465722074686160008201527f6e207a65726f0000000000000000000000000000000000000000000000000000602082015250565b6000613c106026836136e0565b9150613c1b82613bb4565b604082019050919050565b60006020820190508181036000830152613c3f81613c03565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613c8082612b01565b9150613c8b83612b01565b925082613c9b57613c9a613c46565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f47616d65206e6f74204163746976650000000000000000000000000000000000600082015250565b6000613d0b600f836136e0565b9150613d1682613cd5565b602082019050919050565b60006020820190508181036000830152613d3a81613cfe565b9050919050565b7f5468697320547265737320746f6b656e20697320616c726561647920696e206160008201527f2067616d65000000000000000000000000000000000000000000000000000000602082015250565b6000613d9d6025836136e0565b9150613da882613d41565b604082019050919050565b60006020820190508181036000830152613dcc81613d90565b9050919050565b7f506c65617365207761697420666577207365636f6e647320616e64207472792060008201527f6a6f696e696e6720616761696e00000000000000000000000000000000000000602082015250565b6000613e2f602d836136e0565b9150613e3a82613dd3565b604082019050919050565b60006020820190508181036000830152613e5e81613e22565b9050919050565b7f454e5452592046454520696e636f727265637400000000000000000000000000600082015250565b6000613e9b6013836136e0565b9150613ea682613e65565b602082019050919050565b60006020820190508181036000830152613eca81613e8e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613f2d6026836136e0565b9150613f3882613ed1565b604082019050919050565b60006020820190508181036000830152613f5c81613f20565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613f996020836136e0565b9150613fa482613f63565b602082019050919050565b60006020820190508181036000830152613fc881613f8c565b9050919050565b6000613fda82612b01565b9150613fe583612b01565b925082613ff557613ff4613c46565b5b828206905092915050565b60008151905061400f816130a8565b92915050565b60006020828403121561402b5761402a612b3f565b5b600061403984828501614000565b91505092915050565b60008160001c9050919050565b6000819050919050565b600061406c61406783614042565b61404f565b9050919050565b600060029050919050565b6000819050919050565b60006140948254614059565b9050919050565b6000600182019050919050565b6140b181614073565b6140bb8184613200565b92506140c68261407e565b8060005b838110156140fe576140db82614088565b6140e58782612d85565b96506140f08361409b565b9250506001810190506140ca565b505050505050565b6101008201600080830154905061411c81614059565b6141296000860182612d76565b506001830161413b60208601826140a8565b506003830154905061414c81614059565b6141596060860182612d76565b506004830154905061416a81614059565b6141776080860182612d76565b506005830154905061418881614059565b61419560a0860182612d76565b50600683015490506141a681614059565b6141b360c0860182612d76565b50600783015490506141c481614059565b6141d160e0860182612d76565b5050505050565b6000610100820190506141ee6000830184614106565b92915050565b60006040820190506142096000830185612b0b565b6142166020830184612b0b565b9392505050565b600060a08201905061423260008301886135de565b61423f60208301876135b1565b61424c60408301866135cf565b61425960608301856135c0565b61426660808301846135c0565b9695505050505050565b60008151905061427f81612c9c565b92915050565b60006020828403121561429b5761429a612b3f565b5b60006142a984828501614270565b91505092915050565b7f52616e646f6d20726573756c74206973206f7574206f662072616e6765000000600082015250565b60006142e8601d836136e0565b91506142f3826142b2565b602082019050919050565b60006020820190508181036000830152614317816142db565b9050919050565b600061432982612b01565b915061433483612b01565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561436d5761436c613632565b5b82820290509291505056fea2646970667358221220e64bf34664c7442c2b0ef425c141d5a74dbf786fe543c57c367df638c5ab768464736f6c634300080e00330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005683250c5584ffa93feb6ee082981c5ebe484c865196750b39835ad4f13780435d000000000000000000000000d5d517abe5cf79b7e95ec98db0f0277788aff63400000000000000000000000055a41741a5f737ce420156081f9145b444d41636000000000000000000000000fd97c61962ff2ae3d08491db4805e7e46f38c50200000000000000000000000098ab9ba6ae262abf61dfde07fc04ba7006696e1300000000000000000000000098ab9ba6ae262abf61dfde07fc04ba7006696e13000000000000000000000000b69a4f612a8378c64a4153182068479f74789134
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005683250c5584ffa93feb6ee082981c5ebe484c865196750b39835ad4f13780435d000000000000000000000000d5d517abe5cf79b7e95ec98db0f0277788aff63400000000000000000000000055a41741a5f737ce420156081f9145b444d41636000000000000000000000000fd97c61962ff2ae3d08491db4805e7e46f38c50200000000000000000000000098ab9ba6ae262abf61dfde07fc04ba7006696e1300000000000000000000000098ab9ba6ae262abf61dfde07fc04ba7006696e13000000000000000000000000b69a4f612a8378c64a4153182068479f74789134
-----Decoded View---------------
Arg [0] : _gamesCounter (uint256): 0
Arg [1] : subscriptionId (uint64): 86
Arg [2] : _keyHash (bytes32): 0x83250c5584ffa93feb6ee082981c5ebe484c865196750b39835ad4f13780435d
Arg [3] : _vrfCoordinator (address): 0xd5d517abe5cf79b7e95ec98db0f0277788aff634
Arg [4] : TreesNFTAddress_ (address): 0x55a41741a5f737ce420156081f9145b444d41636
Arg [5] : _PAT_Address (address): 0xfd97c61962ff2ae3d08491db4805e7e46f38c502
Arg [6] : _ref (address): 0x98ab9ba6ae262abf61dfde07fc04ba7006696e13
Arg [7] : _dev (address): 0x98ab9ba6ae262abf61dfde07fc04ba7006696e13
Arg [8] : _artist (address): 0xb69a4f612a8378c64a4153182068479f74789134
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000056
Arg [2] : 83250c5584ffa93feb6ee082981c5ebe484c865196750b39835ad4f13780435d
Arg [3] : 000000000000000000000000d5d517abe5cf79b7e95ec98db0f0277788aff634
Arg [4] : 00000000000000000000000055a41741a5f737ce420156081f9145b444d41636
Arg [5] : 000000000000000000000000fd97c61962ff2ae3d08491db4805e7e46f38c502
Arg [6] : 00000000000000000000000098ab9ba6ae262abf61dfde07fc04ba7006696e13
Arg [7] : 00000000000000000000000098ab9ba6ae262abf61dfde07fc04ba7006696e13
Arg [8] : 000000000000000000000000b69a4f612a8378c64a4153182068479f74789134
Deployed ByteCode Sourcemap
1169:19251:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3484:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5955:527;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2697:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3616;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3891:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;12245:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15106:742;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4394:62;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4168:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6618:256:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2640:18:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18160:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3835:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;13400:648;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14766:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2554:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3935:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3426:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1971:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2929:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1822:101:1;;;;;;;;;;;;;:::i;:::-;;4256:38:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19911:288;;;;;;;;;;;;;:::i;:::-;;2775:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3708:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1192:85:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3543:53:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2582:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11090:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14093:631;;;;;;;;;;;;;:::i;:::-;;1920:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20207:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3272:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3969:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19805:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2607:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4328:59;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3764:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11567:642;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15880:2270;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3048:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2072:198:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3374:34:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3484:38;;;;:::o;5955:527::-;1085:13:1;:11;:13::i;:::-;6166:14:2::1;6147:16;;:33;;;;;;;;;;;;;;;;;;6210:17;6191:16;;:36;;;;;;;;;;;;;;;;;;6261:21;6238:20;;:44;;;;;;;;;;;;;;;;;;6303:8;6293:7;:18;;;;6327:147;6358:14;6387:17;6419:21;6455:8;6327:147;;;;;;;;;:::i;:::-;;;;;;;;5955:527:::0;;;;:::o;2697:41::-;;;;:::o;3616:::-;;;;:::o;3891:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12245:173::-;12335:29;;:::i;:::-;12389:5;:13;12395:6;12389:13;;;;;;;;;;;:21;;12382:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12245:173;;;:::o;15106:742::-;1085:13:1;:11;:13::i;:::-;3093:9:2::1;15351:15;:37;;15343:46;;;::::0;::::1;;15446:15;15433:10;:28;;;;15484:10;15472:9;:22;;;;15518:11;15505:10;:24;;;;15552:10;15540:9;:22;;;;15602:27;15573:26;:56;;;;15729:15;15685:26;;15672:10;;15660:9;;:22;;;;:::i;:::-;:51;;;;:::i;:::-;:84;15642:149;;15771:8;::::0;::::1;15642:149;15808:32;15824:15;15808:32;;;;;;:::i;:::-;;;;;;;;15106:742:::0;;;;;:::o;4394:62::-;;;;;;;;;;;;;;;;;:::o;4168:52::-;;;;;;;;;;;;;;;;;:::o;6618:256:3:-;6731:14;6717:28;;:10;:28;;;6713:109;;6788:10;6800:14;6762:53;;;;;;;;;;;;:::i;:::-;;;;;;;;6713:109;6827:42;6846:9;6857:11;6827:18;:42::i;:::-;6618:256;;:::o;2640:18:2:-;;;;;;;;;;;;;:::o;18160:200::-;1085:13:1;:11;:13::i;:::-;18268:16:2::1;18242:23;;:42;;;;;;;;;;;;;;;;;;18328:23;;;;;;;;;;;18295:14;;:57;;;;;;;;;;;;;;;;;;18160:200:::0;:::o;3835:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13400:648::-;13486:1;13475:8;:12;:42;;;;;1961:3;13491:8;:26;;13475:42;13453:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;13617:25;13633:8;13617:15;:25::i;:::-;13595:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;13721:17;13741:11;:21;13753:8;13741:21;;;;;;;;;;;:29;;;13721:49;;13801:1;13789:9;:13;13781:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;13880:9;13855:21;:34;;13833:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;13989:1;13957:11;:21;13969:8;13957:21;;;;;;;;;;;:29;;:33;;;;14009:10;14001:28;;:39;14030:9;14001:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13442:606;13400:648;:::o;14766:310::-;1085:13:1;:11;:13::i;:::-;14892:1:2::1;14873:21;;:7;:21;;;;:43;;;;;14914:1;14898:18;;:4;:18;;;;14873:43;14851:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14987:7;14978:6;;:16;;;;;;;;;;;;;;;;;;15011:4;15005:3;;:10;;;;;;;;;;;;;;;;;;15033:35;15054:7;15063:4;15033:35;;;;;;;:::i;:::-;;;;;;;;14766:310:::0;;:::o;2554:21::-;;;;;;;;;;;;;:::o;3935:27::-;;;;:::o;3426:37::-;;;;:::o;1971:41::-;2011:1;1971:41;:::o;2929:38::-;;;;;;;;;;;;;:::o;1822:101:1:-;1085:13;:11;:13::i;:::-;1886:30:::1;1913:1;1886:18;:30::i;:::-;1822:101::o:0;4256:38:2:-;4292:2;4256:38;:::o;19911:288::-;19990:9;19964:22;;:35;;19956:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;20059:11;;;;;;;;;;;20036:46;;;20108:22;;20146:3;;;;;;;;;;;20036:114;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20190:1;20165:22;:26;;;;19911:288::o;2775:36::-;;;;:::o;3708:49::-;;;;;;;;;;;;;;;;;:::o;1192:85:1:-;1238:7;1264:6;;;;;;;;;;;1257:13;;1192:85;:::o;3543:53:2:-;;;;:::o;2582:18::-;;;;;;;;;;;;;:::o;11090:417::-;11196:13;11227:14;11255:10;11244:8;:21;;;;:::i;:::-;11227:38;;11276:22;11321:1;11312:6;:10;;;;:::i;:::-;11301:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;11276:47;;11334:9;11363;11375:10;11363:22;;11358:116;11392:8;11387:1;:13;11358:116;;11436:5;:8;11442:1;11436:8;;;;;;;;;;;11422:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:8;11431:1;11422:11;;;;;;;;:::i;:::-;;;;;;;:22;;;;11459:3;;;;;:::i;:::-;;;;11402;;;;;:::i;:::-;;;;11358:116;;;;11491:8;11484:15;;;;;11090:417;;;;:::o;14093:631::-;14156:6;;;;;;;;;;;14140:22;;:12;:10;:12::i;:::-;:22;;;:45;;;;14182:3;;;;;;;;;;;14166:19;;:12;:10;:12::i;:::-;:19;;;14140:45;14132:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14239:1;14221:20;;:6;;;;;;;;;;;:20;;;14213:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;14310:1;14295:17;;:3;;;;;;;;;;;:17;;;14287:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;14377:1;14363:11;;:15;14355:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;14432:20;14455:11;;14432:34;;14491:1;14477:11;:15;;;;14503;14536:1;14521:12;:16;;;;:::i;:::-;14503:34;;14583:7;14568:12;:22;;;;:::i;:::-;14553:37;;14601:12;14616;14601:27;;14653:6;;;;;;;;;;;14645:24;;:33;14670:7;14645:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14697:3;;;;;;;;;;;14689:21;;:27;14711:4;14689:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14121:603;;;14093:631::o;1920:44::-;1961:3;1920:44;:::o;20207:206::-;1085:13:1;:11;:13::i;:::-;20335:1:2::1;20316:21;;:7;:21;;;20312:48;;20353:7;20339:11;;:21;;;;;;;;;;;;;;;;;;20312:48;20391:1;20375:18;;:4;:18;;;20371:34;;20401:4;20395:3;;:10;;;;;;;;;;;;;;;;;;20371:34;20207:206:::0;;:::o;3272:37::-;;;;:::o;3969:31::-;;;;;;;;;;;;;:::o;19805:98::-;1085:13:1;:11;:13::i;:::-;19886:9:2::1;19872:11;;:23;;;;;;;;;;;;;;;;;;19805:98:::0;:::o;2607:26::-;;;;;;;;;;;;;:::o;4328:59::-;;;;;;;;;;;;;;;;;:::o;3764:34::-;;;;:::o;11567:642::-;11661:19;11698:28;4292:2;11729:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;11698:58;;11783:19;11771:31;;;;;;;;:::i;:::-;;:8;:31;;;;;;;;:::i;:::-;;;11767:197;;11824:9;11836:1;11824:13;;11819:134;4292:2;11839:1;:14;11819:134;;11897:11;:40;11909:24;:27;11934:1;11909:27;;;;;;;;;;;;11897:40;;;;;;;;;;;11879:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:8;11892:1;11888;:5;;;;:::i;:::-;11879:15;;;;;;;;:::i;:::-;;;;;;;:58;;;;11855:3;;;;;:::i;:::-;;;;11819:134;;;;11767:197;11990:21;11978:33;;;;;;;;:::i;:::-;;:8;:33;;;;;;;;:::i;:::-;;;11974:202;;12033:9;12045:1;12033:13;;12028:137;4292:2;12048:1;:14;12028:137;;12106:11;:43;12118:27;:30;12146:1;12118:30;;;;;;;;;;;;12106:43;;;;;;;;;;;12088:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:8;12101:1;12097;:5;;;;:::i;:::-;12088:15;;;;;;;;:::i;:::-;;;;;;;:61;;;;12064:3;;;;;:::i;:::-;;;;12028:137;;;;11974:202;12193:8;12186:15;;;11567:642;;;:::o;15880:2270::-;15967:4;15952:19;;:11;;;;;;;;;;;:19;;;15944:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;16023:1;16012:8;:12;:42;;;;;1961:3;16028:8;:26;;16012:42;16004:51;;;;;;16074:25;16090:8;16074:15;:25::i;:::-;16066:34;;;;;;16133:32;16156:8;16133:22;:32::i;:::-;16111:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;2011:1;16263:19;;:35;16241:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;16403:9;;16390;:22;16382:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;16449:19;;:21;;;;;;;;;:::i;:::-;;;;;;16519:8;16481:14;:35;16496:19;;16481:35;;;;;;;;;;;:46;;;;16570:8;16538:11;:21;16550:8;16538:21;;;;;;;;;;;:29;;:40;;;;16680:21;16704:8;16680:32;;16723:17;16759:28;16790:1;16759:32;;16873:13;16820:27;:49;16848:20;16820:49;;;;;;;;;;;;:66;16802:142;;16928:4;16913:19;;16802:142;16959:12;16954:631;;16993:9;17005:1;16993:13;;16988:586;4292:2;17008:1;:14;16988:586;;17086:13;17052:27;:30;17080:1;17052:30;;;;;;;;;;;;:47;17048:143;;17139:4;17124:19;;17166:5;;17048:143;17345:11;:110;17383:27;:49;17411:20;17383:49;;;;;;;;;;;;17345:110;;;;;;;;;;;:127;;;17235:11;:43;17247:27;:30;17275:1;17247:30;;;;;;;;;;;;17235:43;;;;;;;;;;;:86;;;:237;17209:350;;;17538:1;17515:24;;17209:350;17024:3;;;;;:::i;:::-;;;;16988:586;;;;16954:631;17664:12;17663:13;:186;;;;;17806:11;:26;17818:13;17806:26;;;;;;;;;;;:43;;;17693:11;:62;17705:27;:49;17733:20;17705:49;;;;;;;;;;;;17693:62;;;;;;;;;;;:97;;;:156;17663:186;17645:308;;;17928:13;17876:27;:49;17904:20;17876:49;;;;;;;;;;;:65;;;;17645:308;17970:20;17981:8;17970:20;;;;;;:::i;:::-;;;;;;;;2011:1;18007:19;;:36;18003:140;;18120:11;:9;:11::i;:::-;18003:140;15933:2217;;;15880:2270;:::o;3048:54::-;3093:9;3048:54;:::o;2072:198:1:-;1085:13;:11;:13::i;:::-;2180:1:::1;2160:22;;:8;:22;;::::0;2152:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2235:28;2254:8;2235:18;:28::i;:::-;2072:198:::0;:::o;3374:34:2:-;;;;:::o;1350:130:1:-;1424:12;:10;:12::i;:::-;1413:23;;:7;:5;:7::i;:::-;:23;;;1405:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1350:130::o;6914:287:2:-;7043:14;7060:17;:28;7078:9;7060:28;;;;;;;;;;;;7043:45;;7099:20;4081:1;4120:3;7123:11;7135:1;7123:14;;;;;;;;:::i;:::-;;;;;;;;:20;;;;:::i;:::-;7122:28;;;;:::i;:::-;7099:51;;7161:32;7172:6;7180:12;7161:10;:32::i;:::-;7032:169;;6914:287;;:::o;18368:202::-;18434:4;18451:25;18479:14;;;;;;;;;;;:22;;;18502:8;18479:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18451:60;;18551:10;18530:31;;:17;:31;;;18522:40;;;18368:202;;;:::o;2424:187:1:-;2497:16;2516:6;;;;;;;;;;;2497:25;;2541:8;2532:6;;:17;;;;;;;;;;;;;;;;;;2595:8;2564:40;;2585:8;2564:40;;;;;;;;;;;;2487:124;2424:187;:::o;640:96:0:-;693:7;719:10;712:17;;640:96;:::o;18578:313:2:-;18678:4;18705:9;18717:1;18705:13;;18700:162;18724:19;;18720:1;:23;18700:162;;;18794:8;18769:14;:21;18788:1;18784;:5;;;;:::i;:::-;18769:21;;;;;;;;;;;;:33;18765:86;;18830:5;18823:12;;;;;18765:86;18745:3;;;;;:::i;:::-;;;;18700:162;;;;18879:4;18872:11;;18578:313;;;;:::o;18979:709::-;19019:12;;:14;;;;;;;;;:::i;:::-;;;;;;19064:10;;19044:16;;:30;;;;;;;:::i;:::-;;;;;;;;19085:38;;:::i;:::-;19148:14;:17;19163:1;19148:17;;;;;;;;;;;;19134:8;19143:1;19134:11;;;;;;;:::i;:::-;;;;;:31;;;;;19190:14;:17;19205:1;19190:17;;;;;;;;;;;;19176:8;19185:1;19176:11;;;;;;;:::i;:::-;;;;;:31;;;;;19242:43;;;;;;;;19247:12;;19242:43;;;;19261:8;19242:43;;;;19271:1;19242:43;;;;19274:1;19242:43;;;;19277:1;19242:43;;;;19280:1;19242:43;;;;19283:1;19242:43;;;19220:5;:19;19226:12;;19220:19;;;;;;;;;;;:65;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19336:1;19316:14;:17;19331:1;19316:17;;;;;;;;;;;:21;;;;19368:1;19348:14;:17;19363:1;19348:17;;;;;;;;;;;:21;;;;19402:1;19380:19;:23;;;;19437:32;19449:5;:19;19455:12;;19449:19;;;;;;;;;;;19437:32;;;;;;:::i;:::-;;;;;;;;19482:17;19502;:15;:17::i;:::-;19482:37;;19561:12;;19530:17;:28;19548:9;19530:28;;;;;;;;;;;:43;;;;19654:26;;19628:22;;:52;;;;;;;:::i;:::-;;;;;;;;19008:680;;18979:709::o;7800:1828::-;7878:17;7898:5;:13;7904:6;7898:13;;;;;;;;;;;7878:33;;7943:38;7960:6;7968:12;7943:16;:38::i;:::-;7922:4;:18;;:59;;;;8009:12;7992:4;:14;;:29;;;;8049:15;8032:4;:14;;:32;;;;8132:35;8154:12;;8139;:27;;;;:::i;:::-;8132:6;:35::i;:::-;8121:4;:8;;:46;;;;8190:40;8228:1;8213:12;;8198;:27;;;;:::i;:::-;:31;;;;:::i;:::-;8190:7;:40::i;:::-;8178:4;:9;;:52;;;;8280:23;8296:6;8280:15;:23::i;:::-;8354:17;8390:28;8421:1;8390:32;;8532:4;:18;;;8482:24;:46;8507:20;8482:46;;;;;;;;;;;;:68;8464:144;;8592:4;8577:19;;8464:144;8623:12;8618:573;;8657:9;8669:1;8657:13;;8652:528;4292:2;8672:1;:14;8652:528;;8747:4;:18;;;8716:24;:27;8741:1;8716:27;;;;;;;;;;;;:49;8712:145;;8805:4;8790:19;;8832:5;;8712:145;8979:11;:59;8991:24;:46;9016:20;8991:46;;;;;;;;;;;;8979:59;;;;;;;;;;;:99;;;8901:11;:40;8913:24;:27;8938:1;8913:27;;;;;;;;;;;;8901:40;;;;;;;;;;;:54;;;:177;8875:290;;;9144:1;9121:24;;8875:290;8688:3;;;;;:::i;:::-;;;;8652:528;;;;8618:573;9270:12;9269:13;:182;;;;;9406:11;:31;9418:4;:18;;;9406:31;;;;;;;;;;;:45;;;9299:11;:59;9311:24;:46;9336:20;9311:46;;;;;;;;;;;;9299:59;;;;;;;;;;;:91;;;:152;9269:182;9251:306;;;9527:4;:18;;;9478:24;:46;9503:20;9478:46;;;;;;;;;;;:67;;;;9251:306;9574:46;9584:6;9592:5;:13;9598:6;9592:13;;;;;;;;;;;:27;;;9574:46;;;;;;;:::i;:::-;;;;;;;;7867:1761;;;7800:1828;;:::o;6537:310::-;6582:17;6632:11;;;;;;;;;;;:30;;;6681:7;;6707:16;;;;;;;;;;;6742:20;;;;;;;;;;;6781:16;;;;;;;;;;;1689:1;6632:207;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6612:227;;6537:310;:::o;10437:593::-;10551:21;10628:1;10612:12;:17;;:40;;;;;10649:3;10633:12;:19;;10612:40;10590:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;10720:9;10732:15;:22;;;;10720:34;;10770:9;10782:1;10770:13;;10765:258;10789:1;10785;:5;10765:258;;;10849:15;10869:1;10865;:5;;;;:::i;:::-;10849:22;;;;;;;;:::i;:::-;;;;;;;;;;10834:12;:37;:92;;;;;10908:15;10924:1;10908:18;;;;;;;;:::i;:::-;;;;;;;;;;10892:12;:34;;10834:92;10812:200;;;10968:5;:13;10974:6;10968:13;;;;;;;;;;;:21;;10994:1;10990;:5;;;;:::i;:::-;10968:28;;;;;;;:::i;:::-;;;;10961:35;;;;;;10812:200;10792:3;;;;;:::i;:::-;;;;10765:258;;;;10579:451;10437:593;;;;;:::o;7230:114::-;7286:7;7335:1;7330;7325;7315:7;:11;;;;:::i;:::-;7314:17;;;;:::i;:::-;7313:23;;;;:::i;:::-;7306:30;;7230:114;;;:::o;7374:110::-;7431:7;7475:1;7469:2;7459:7;:12;;;;:::i;:::-;7458:18;;;;:::i;:::-;7451:25;;7374:110;;;:::o;12505:844::-;12566:17;12586:5;:13;12592:6;12586:13;;;;;;;;;;;12566:33;;12691:21;12715:4;:18;;;12691:42;;12744:11;:26;12756:13;12744:26;;;;;;;;;;;:40;;;:42;;;;;;;;;:::i;:::-;;;;;;12797:11;:26;12809:13;12797:26;;;;;;;;;;;:43;;;:45;;;;;;;;;:::i;:::-;;;;;;12891:9;;12853:11;:26;12865:13;12853:26;;;;;;;;;;;:34;;;:47;;;;;;;:::i;:::-;;;;;;;;12974:9;12986:19;12974:31;;13021:9;13016:266;13040:1;13036;:5;13016:266;;;13063:15;13081:4;:12;;13094:1;13081:15;;;;;;;:::i;:::-;;;;13063:33;;13126:13;13115:7;:24;13111:160;;13160:11;:20;13172:7;13160:20;;;;;;;;;;;:37;;;:39;;;;;;;;;:::i;:::-;;;;;;13218:11;:20;13230:7;13218:20;;;;;;;;;;;:35;;;:37;;;;;;;;;:::i;:::-;;;;;;13111:160;13048:234;13043:3;;;;;:::i;:::-;;;;13016:266;;;;13331:10;;13316:11;;:25;;;;;;;:::i;:::-;;;;;;;;12555:794;;;12505:844;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:77:5:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:75::-;475:6;508:2;502:9;492:19;;442:75;:::o;523:117::-;632:1;629;622:12;646:117;755:1;752;745:12;769:101;805:7;845:18;838:5;834:30;823:41;;769:101;;;:::o;876:120::-;948:23;965:5;948:23;:::i;:::-;941:5;938:34;928:62;;986:1;983;976:12;928:62;876:120;:::o;1002:137::-;1047:5;1085:6;1072:20;1063:29;;1101:32;1127:5;1101:32;:::i;:::-;1002:137;;;;:::o;1145:93::-;1181:7;1221:10;1214:5;1210:22;1199:33;;1145:93;;;:::o;1244:120::-;1316:23;1333:5;1316:23;:::i;:::-;1309:5;1306:34;1296:62;;1354:1;1351;1344:12;1296:62;1244:120;:::o;1370:137::-;1415:5;1453:6;1440:20;1431:29;;1469:32;1495:5;1469:32;:::i;:::-;1370:137;;;;:::o;1513:89::-;1549:7;1589:6;1582:5;1578:18;1567:29;;1513:89;;;:::o;1608:120::-;1680:23;1697:5;1680:23;:::i;:::-;1673:5;1670:34;1660:62;;1718:1;1715;1708:12;1660:62;1608:120;:::o;1734:137::-;1779:5;1817:6;1804:20;1795:29;;1833:32;1859:5;1833:32;:::i;:::-;1734:137;;;;:::o;1877:77::-;1914:7;1943:5;1932:16;;1877:77;;;:::o;1960:122::-;2033:24;2051:5;2033:24;:::i;:::-;2026:5;2023:35;2013:63;;2072:1;2069;2062:12;2013:63;1960:122;:::o;2088:139::-;2134:5;2172:6;2159:20;2150:29;;2188:33;2215:5;2188:33;:::i;:::-;2088:139;;;;:::o;2233:759::-;2316:6;2324;2332;2340;2389:3;2377:9;2368:7;2364:23;2360:33;2357:120;;;2396:79;;:::i;:::-;2357:120;2516:1;2541:52;2585:7;2576:6;2565:9;2561:22;2541:52;:::i;:::-;2531:62;;2487:116;2642:2;2668:52;2712:7;2703:6;2692:9;2688:22;2668:52;:::i;:::-;2658:62;;2613:117;2769:2;2795:52;2839:7;2830:6;2819:9;2815:22;2795:52;:::i;:::-;2785:62;;2740:117;2896:2;2922:53;2967:7;2958:6;2947:9;2943:22;2922:53;:::i;:::-;2912:63;;2867:118;2233:759;;;;;;;:::o;2998:122::-;3071:24;3089:5;3071:24;:::i;:::-;3064:5;3061:35;3051:63;;3110:1;3107;3100:12;3051:63;2998:122;:::o;3126:139::-;3172:5;3210:6;3197:20;3188:29;;3226:33;3253:5;3226:33;:::i;:::-;3126:139;;;;:::o;3271:329::-;3330:6;3379:2;3367:9;3358:7;3354:23;3350:32;3347:119;;;3385:79;;:::i;:::-;3347:119;3505:1;3530:53;3575:7;3566:6;3555:9;3551:22;3530:53;:::i;:::-;3520:63;;3476:117;3271:329;;;;:::o;3606:775::-;3839:4;3877:3;3866:9;3862:19;3854:27;;3891:71;3959:1;3948:9;3944:17;3935:6;3891:71;:::i;:::-;3972:72;4040:2;4029:9;4025:18;4016:6;3972:72;:::i;:::-;4054;4122:2;4111:9;4107:18;4098:6;4054:72;:::i;:::-;4136;4204:2;4193:9;4189:18;4180:6;4136:72;:::i;:::-;4218:73;4286:3;4275:9;4271:19;4262:6;4218:73;:::i;:::-;4301;4369:3;4358:9;4354:19;4345:6;4301:73;:::i;:::-;3606:775;;;;;;;;;:::o;4387:104::-;4452:6;4480:4;4470:14;;4387:104;;;:::o;4497:143::-;4594:11;4631:3;4616:18;;4497:143;;;;:::o;4646:98::-;4711:4;4734:3;4726:11;;4646:98;;;:::o;4750:108::-;4827:24;4845:5;4827:24;:::i;:::-;4822:3;4815:37;4750:108;;:::o;4864:179::-;4933:10;4954:46;4996:3;4988:6;4954:46;:::i;:::-;5032:4;5027:3;5023:14;5009:28;;4864:179;;;;:::o;5049:111::-;5117:4;5149;5144:3;5140:14;5132:22;;5049:111;;;:::o;5198:694::-;5334:52;5380:5;5334:52;:::i;:::-;5402:84;5479:6;5474:3;5402:84;:::i;:::-;5395:91;;5510:54;5558:5;5510:54;:::i;:::-;5587:7;5618:1;5603:282;5628:6;5625:1;5622:13;5603:282;;;5704:6;5698:13;5731:63;5790:3;5775:13;5731:63;:::i;:::-;5724:70;;5817:58;5868:6;5817:58;:::i;:::-;5807:68;;5663:222;5650:1;5647;5643:9;5638:14;;5603:282;;;5607:14;5310:582;;;5198:694;;:::o;5898:314::-;6037:4;6075:2;6064:9;6060:18;6052:26;;6088:117;6202:1;6191:9;6187:17;6178:6;6088:117;:::i;:::-;5898:314;;;;:::o;6218:911::-;6313:6;6321;6329;6337;6345;6394:3;6382:9;6373:7;6369:23;6365:33;6362:120;;;6401:79;;:::i;:::-;6362:120;6521:1;6546:53;6591:7;6582:6;6571:9;6567:22;6546:53;:::i;:::-;6536:63;;6492:117;6648:2;6674:53;6719:7;6710:6;6699:9;6695:22;6674:53;:::i;:::-;6664:63;;6619:118;6776:2;6802:53;6847:7;6838:6;6827:9;6823:22;6802:53;:::i;:::-;6792:63;;6747:118;6904:2;6930:53;6975:7;6966:6;6955:9;6951:22;6930:53;:::i;:::-;6920:63;;6875:118;7032:3;7059:53;7104:7;7095:6;7084:9;7080:22;7059:53;:::i;:::-;7049:63;;7003:119;6218:911;;;;;;;;:::o;7135:117::-;7244:1;7241;7234:12;7258:102;7299:6;7350:2;7346:7;7341:2;7334:5;7330:14;7326:28;7316:38;;7258:102;;;:::o;7366:180::-;7414:77;7411:1;7404:88;7511:4;7508:1;7501:15;7535:4;7532:1;7525:15;7552:281;7635:27;7657:4;7635:27;:::i;:::-;7627:6;7623:40;7765:6;7753:10;7750:22;7729:18;7717:10;7714:34;7711:62;7708:88;;;7776:18;;:::i;:::-;7708:88;7816:10;7812:2;7805:22;7595:238;7552:281;;:::o;7839:129::-;7873:6;7900:20;;:::i;:::-;7890:30;;7929:33;7957:4;7949:6;7929:33;:::i;:::-;7839:129;;;:::o;7974:311::-;8051:4;8141:18;8133:6;8130:30;8127:56;;;8163:18;;:::i;:::-;8127:56;8213:4;8205:6;8201:17;8193:25;;8273:4;8267;8263:15;8255:23;;7974:311;;;:::o;8291:117::-;8400:1;8397;8390:12;8431:710;8527:5;8552:81;8568:64;8625:6;8568:64;:::i;:::-;8552:81;:::i;:::-;8543:90;;8653:5;8682:6;8675:5;8668:21;8716:4;8709:5;8705:16;8698:23;;8769:4;8761:6;8757:17;8749:6;8745:30;8798:3;8790:6;8787:15;8784:122;;;8817:79;;:::i;:::-;8784:122;8932:6;8915:220;8949:6;8944:3;8941:15;8915:220;;;9024:3;9053:37;9086:3;9074:10;9053:37;:::i;:::-;9048:3;9041:50;9120:4;9115:3;9111:14;9104:21;;8991:144;8975:4;8970:3;8966:14;8959:21;;8915:220;;;8919:21;8533:608;;8431:710;;;;;:::o;9164:370::-;9235:5;9284:3;9277:4;9269:6;9265:17;9261:27;9251:122;;9292:79;;:::i;:::-;9251:122;9409:6;9396:20;9434:94;9524:3;9516:6;9509:4;9501:6;9497:17;9434:94;:::i;:::-;9425:103;;9241:293;9164:370;;;;:::o;9540:684::-;9633:6;9641;9690:2;9678:9;9669:7;9665:23;9661:32;9658:119;;;9696:79;;:::i;:::-;9658:119;9816:1;9841:53;9886:7;9877:6;9866:9;9862:22;9841:53;:::i;:::-;9831:63;;9787:117;9971:2;9960:9;9956:18;9943:32;10002:18;9994:6;9991:30;9988:117;;;10024:79;;:::i;:::-;9988:117;10129:78;10199:7;10190:6;10179:9;10175:22;10129:78;:::i;:::-;10119:88;;9914:303;9540:684;;;;;:::o;10230:126::-;10267:7;10307:42;10300:5;10296:54;10285:65;;10230:126;;;:::o;10362:96::-;10399:7;10428:24;10446:5;10428:24;:::i;:::-;10417:35;;10362:96;;;:::o;10464:118::-;10551:24;10569:5;10551:24;:::i;:::-;10546:3;10539:37;10464:118;;:::o;10588:222::-;10681:4;10719:2;10708:9;10704:18;10696:26;;10732:71;10800:1;10789:9;10785:17;10776:6;10732:71;:::i;:::-;10588:222;;;;:::o;10816:122::-;10889:24;10907:5;10889:24;:::i;:::-;10882:5;10879:35;10869:63;;10928:1;10925;10918:12;10869:63;10816:122;:::o;10944:139::-;10990:5;11028:6;11015:20;11006:29;;11044:33;11071:5;11044:33;:::i;:::-;10944:139;;;;:::o;11089:329::-;11148:6;11197:2;11185:9;11176:7;11172:23;11168:32;11165:119;;;11203:79;;:::i;:::-;11165:119;11323:1;11348:53;11393:7;11384:6;11373:9;11369:22;11348:53;:::i;:::-;11338:63;;11294:117;11089:329;;;;:::o;11424:664::-;11629:4;11667:3;11656:9;11652:19;11644:27;;11681:71;11749:1;11738:9;11734:17;11725:6;11681:71;:::i;:::-;11762:72;11830:2;11819:9;11815:18;11806:6;11762:72;:::i;:::-;11844;11912:2;11901:9;11897:18;11888:6;11844:72;:::i;:::-;11926;11994:2;11983:9;11979:18;11970:6;11926:72;:::i;:::-;12008:73;12076:3;12065:9;12061:19;12052:6;12008:73;:::i;:::-;11424:664;;;;;;;;:::o;12094:474::-;12162:6;12170;12219:2;12207:9;12198:7;12194:23;12190:32;12187:119;;;12225:79;;:::i;:::-;12187:119;12345:1;12370:53;12415:7;12406:6;12395:9;12391:22;12370:53;:::i;:::-;12360:63;;12316:117;12472:2;12498:53;12543:7;12534:6;12523:9;12519:22;12498:53;:::i;:::-;12488:63;;12443:118;12094:474;;;;;:::o;12574:::-;12642:6;12650;12699:2;12687:9;12678:7;12674:23;12670:32;12667:119;;;12705:79;;:::i;:::-;12667:119;12825:1;12850:53;12895:7;12886:6;12875:9;12871:22;12850:53;:::i;:::-;12840:63;;12796:117;12952:2;12978:53;13023:7;13014:6;13003:9;12999:22;12978:53;:::i;:::-;12968:63;;12923:118;12574:474;;;;;:::o;13054:135::-;13142:6;13176:5;13170:12;13160:22;;13054:135;;;:::o;13195:205::-;13315:11;13349:6;13344:3;13337:19;13389:4;13384:3;13380:14;13365:29;;13195:205;;;;:::o;13406:153::-;13494:4;13517:3;13509:11;;13547:4;13542:3;13538:14;13530:22;;13406:153;;;:::o;13565:133::-;13652:11;13689:3;13674:18;;13565:133;;;;:::o;13736:674::-;13862:52;13908:5;13862:52;:::i;:::-;13930:74;13997:6;13992:3;13930:74;:::i;:::-;13923:81;;14028:54;14076:5;14028:54;:::i;:::-;14105:7;14136:1;14121:282;14146:6;14143:1;14140:13;14121:282;;;14222:6;14216:13;14249:63;14308:3;14293:13;14249:63;:::i;:::-;14242:70;;14335:58;14386:6;14335:58;:::i;:::-;14325:68;;14181:222;14168:1;14165;14161:9;14156:14;;14121:282;;;14125:14;13838:572;;;13736:674;;:::o;14484:1426::-;14613:6;14608:3;14604:16;14700:4;14693:5;14689:16;14683:23;14719:63;14776:4;14771:3;14767:14;14753:12;14719:63;:::i;:::-;14630:162;14877:4;14870:5;14866:16;14860:23;14896:109;14999:4;14994:3;14990:14;14976:12;14896:109;:::i;:::-;14802:213;15102:4;15095:5;15091:16;15085:23;15121:63;15178:4;15173:3;15169:14;15155:12;15121:63;:::i;:::-;15025:169;15285:4;15278:5;15274:16;15268:23;15304:63;15361:4;15356:3;15352:14;15338:12;15304:63;:::i;:::-;15204:173;15458:4;15451:5;15447:16;15441:23;15477:63;15534:4;15529:3;15525:14;15511:12;15477:63;:::i;:::-;15387:163;15632:4;15625:5;15621:16;15615:23;15651:63;15708:4;15703:3;15699:14;15685:12;15651:63;:::i;:::-;15560:164;15811:4;15804:5;15800:16;15794:23;15830:63;15887:4;15882:3;15878:14;15864:12;15830:63;:::i;:::-;15734:169;14582:1328;14484:1426;;:::o;15916:265::-;16027:10;16048:88;16132:3;16124:6;16048:88;:::i;:::-;16168:6;16163:3;16159:16;16145:30;;15916:265;;;;:::o;16187:134::-;16278:4;16310;16305:3;16301:14;16293:22;;16187:134;;;:::o;16399:900::-;16560:3;16589:75;16658:5;16589:75;:::i;:::-;16680:107;16780:6;16775:3;16680:107;:::i;:::-;16673:114;;16811:77;16882:5;16811:77;:::i;:::-;16911:7;16942:1;16927:347;16952:6;16949:1;16946:13;16927:347;;;17028:6;17022:13;17055:105;17156:3;17141:13;17055:105;:::i;:::-;17048:112;;17183:81;17257:6;17183:81;:::i;:::-;17173:91;;16987:287;16974:1;16971;16967:9;16962:14;;16927:347;;;16931:14;17290:3;17283:10;;16565:734;;;16399:900;;;;:::o;17305:457::-;17490:4;17528:2;17517:9;17513:18;17505:26;;17577:9;17571:4;17567:20;17563:1;17552:9;17548:17;17541:47;17605:150;17750:4;17741:6;17605:150;:::i;:::-;17597:158;;17305:457;;;;:::o;17768:90::-;17802:7;17845:5;17838:13;17831:21;17820:32;;17768:90;;;:::o;17864:109::-;17945:21;17960:5;17945:21;:::i;:::-;17940:3;17933:34;17864:109;;:::o;17979:210::-;18066:4;18104:2;18093:9;18089:18;18081:26;;18117:65;18179:1;18168:9;18164:17;18155:6;18117:65;:::i;:::-;17979:210;;;;:::o;18195:116::-;18265:21;18280:5;18265:21;:::i;:::-;18258:5;18255:32;18245:60;;18301:1;18298;18291:12;18245:60;18195:116;:::o;18317:133::-;18360:5;18398:6;18385:20;18376:29;;18414:30;18438:5;18414:30;:::i;:::-;18317:133;;;;:::o;18456:323::-;18512:6;18561:2;18549:9;18540:7;18536:23;18532:32;18529:119;;;18567:79;;:::i;:::-;18529:119;18687:1;18712:50;18754:7;18745:6;18734:9;18730:22;18712:50;:::i;:::-;18702:60;;18658:114;18456:323;;;;:::o;18785:112::-;18871:1;18864:5;18861:12;18851:40;;18887:1;18884;18877:12;18851:40;18785:112;:::o;18903:165::-;18962:5;19000:6;18987:20;18978:29;;19016:46;19056:5;19016:46;:::i;:::-;18903:165;;;;:::o;19074:355::-;19146:6;19195:2;19183:9;19174:7;19170:23;19166:32;19163:119;;;19201:79;;:::i;:::-;19163:119;19321:1;19346:66;19404:7;19395:6;19384:9;19380:22;19346:66;:::i;:::-;19336:76;;19292:130;19074:355;;;;:::o;19435:141::-;19529:6;19563:5;19557:12;19547:22;;19435:141;;;:::o;19582:211::-;19708:11;19742:6;19737:3;19730:19;19782:4;19777:3;19773:14;19758:29;;19582:211;;;;:::o;19799:159::-;19893:4;19916:3;19908:11;;19946:4;19941:3;19937:14;19929:22;;19799:159;;;:::o;20044:1060::-;20185:4;20180:3;20176:14;20275:4;20268:5;20264:16;20258:23;20294:63;20351:4;20346:3;20342:14;20328:12;20294:63;:::i;:::-;20200:167;20461:4;20454:5;20450:16;20444:23;20480:63;20537:4;20532:3;20528:14;20514:12;20480:63;:::i;:::-;20377:176;20644:4;20637:5;20633:16;20627:23;20663:63;20720:4;20715:3;20711:14;20697:12;20663:63;:::i;:::-;20563:173;20828:4;20821:5;20817:16;20811:23;20847:63;20904:4;20899:3;20895:14;20881:12;20847:63;:::i;:::-;20746:174;21005:4;20998:5;20994:16;20988:23;21024:63;21081:4;21076:3;21072:14;21058:12;21024:63;:::i;:::-;20930:167;20154:950;20044:1060;;:::o;21110:287::-;21233:10;21254:100;21350:3;21342:6;21254:100;:::i;:::-;21386:4;21381:3;21377:14;21363:28;;21110:287;;;;:::o;21403:140::-;21500:4;21532;21527:3;21523:14;21515:22;;21403:140;;;:::o;21633:948::-;21806:3;21835:81;21910:5;21835:81;:::i;:::-;21932:113;22038:6;22033:3;21932:113;:::i;:::-;21925:120;;22069:83;22146:5;22069:83;:::i;:::-;22175:7;22206:1;22191:365;22216:6;22213:1;22210:13;22191:365;;;22292:6;22286:13;22319:117;22432:3;22417:13;22319:117;:::i;:::-;22312:124;;22459:87;22539:6;22459:87;:::i;:::-;22449:97;;22251:305;22238:1;22235;22231:9;22226:14;;22191:365;;;22195:14;22572:3;22565:10;;21811:770;;;21633:948;;;;:::o;22587:481::-;22784:4;22822:2;22811:9;22807:18;22799:26;;22871:9;22865:4;22861:20;22857:1;22846:9;22842:17;22835:47;22899:162;23056:4;23047:6;22899:162;:::i;:::-;22891:170;;22587:481;;;;:::o;23074:115::-;23159:23;23176:5;23159:23;:::i;:::-;23154:3;23147:36;23074:115;;:::o;23195:::-;23280:23;23297:5;23280:23;:::i;:::-;23275:3;23268:36;23195:115;;:::o;23316:::-;23401:23;23418:5;23401:23;:::i;:::-;23396:3;23389:36;23316:115;;:::o;23437:118::-;23524:24;23542:5;23524:24;:::i;:::-;23519:3;23512:37;23437:118;;:::o;23561:541::-;23732:4;23770:3;23759:9;23755:19;23747:27;;23784:69;23850:1;23839:9;23835:17;23826:6;23784:69;:::i;:::-;23863:70;23929:2;23918:9;23914:18;23905:6;23863:70;:::i;:::-;23943;24009:2;23998:9;23994:18;23985:6;23943:70;:::i;:::-;24023:72;24091:2;24080:9;24076:18;24067:6;24023:72;:::i;:::-;23561:541;;;;;;;:::o;24108:180::-;24156:77;24153:1;24146:88;24253:4;24250:1;24243:15;24277:4;24274:1;24267:15;24294:305;24334:3;24353:20;24371:1;24353:20;:::i;:::-;24348:25;;24387:20;24405:1;24387:20;:::i;:::-;24382:25;;24541:1;24473:66;24469:74;24466:1;24463:81;24460:107;;;24547:18;;:::i;:::-;24460:107;24591:1;24588;24584:9;24577:16;;24294:305;;;;:::o;24605:332::-;24726:4;24764:2;24753:9;24749:18;24741:26;;24777:71;24845:1;24834:9;24830:17;24821:6;24777:71;:::i;:::-;24858:72;24926:2;24915:9;24911:18;24902:6;24858:72;:::i;:::-;24605:332;;;;;:::o;24943:169::-;25027:11;25061:6;25056:3;25049:19;25101:4;25096:3;25092:14;25077:29;;24943:169;;;;:::o;25118:226::-;25258:34;25254:1;25246:6;25242:14;25235:58;25327:9;25322:2;25314:6;25310:15;25303:34;25118:226;:::o;25350:366::-;25492:3;25513:67;25577:2;25572:3;25513:67;:::i;:::-;25506:74;;25589:93;25678:3;25589:93;:::i;:::-;25707:2;25702:3;25698:12;25691:19;;25350:366;;;:::o;25722:419::-;25888:4;25926:2;25915:9;25911:18;25903:26;;25975:9;25969:4;25965:20;25961:1;25950:9;25946:17;25939:47;26003:131;26129:4;26003:131;:::i;:::-;25995:139;;25722:419;;;:::o;26147:227::-;26287:34;26283:1;26275:6;26271:14;26264:58;26356:10;26351:2;26343:6;26339:15;26332:35;26147:227;:::o;26380:366::-;26522:3;26543:67;26607:2;26602:3;26543:67;:::i;:::-;26536:74;;26619:93;26708:3;26619:93;:::i;:::-;26737:2;26732:3;26728:12;26721:19;;26380:366;;;:::o;26752:419::-;26918:4;26956:2;26945:9;26941:18;26933:26;;27005:9;26999:4;26995:20;26991:1;26980:9;26976:17;26969:47;27033:131;27159:4;27033:131;:::i;:::-;27025:139;;26752:419;;;:::o;27177:165::-;27317:17;27313:1;27305:6;27301:14;27294:41;27177:165;:::o;27348:366::-;27490:3;27511:67;27575:2;27570:3;27511:67;:::i;:::-;27504:74;;27587:93;27676:3;27587:93;:::i;:::-;27705:2;27700:3;27696:12;27689:19;;27348:366;;;:::o;27720:419::-;27886:4;27924:2;27913:9;27909:18;27901:26;;27973:9;27967:4;27963:20;27959:1;27948:9;27944:17;27937:47;28001:131;28127:4;28001:131;:::i;:::-;27993:139;;27720:419;;;:::o;28145:179::-;28285:31;28281:1;28273:6;28269:14;28262:55;28145:179;:::o;28330:366::-;28472:3;28493:67;28557:2;28552:3;28493:67;:::i;:::-;28486:74;;28569:93;28658:3;28569:93;:::i;:::-;28687:2;28682:3;28678:12;28671:19;;28330:366;;;:::o;28702:419::-;28868:4;28906:2;28895:9;28891:18;28883:26;;28955:9;28949:4;28945:20;28941:1;28930:9;28926:17;28919:47;28983:131;29109:4;28983:131;:::i;:::-;28975:139;;28702:419;;;:::o;29127:173::-;29267:25;29263:1;29255:6;29251:14;29244:49;29127:173;:::o;29306:366::-;29448:3;29469:67;29533:2;29528:3;29469:67;:::i;:::-;29462:74;;29545:93;29634:3;29545:93;:::i;:::-;29663:2;29658:3;29654:12;29647:19;;29306:366;;;:::o;29678:419::-;29844:4;29882:2;29871:9;29867:18;29859:26;;29931:9;29925:4;29921:20;29917:1;29906:9;29902:17;29895:47;29959:131;30085:4;29959:131;:::i;:::-;29951:139;;29678:419;;;:::o;30103:167::-;30243:19;30239:1;30231:6;30227:14;30220:43;30103:167;:::o;30276:366::-;30418:3;30439:67;30503:2;30498:3;30439:67;:::i;:::-;30432:74;;30515:93;30604:3;30515:93;:::i;:::-;30633:2;30628:3;30624:12;30617:19;;30276:366;;;:::o;30648:419::-;30814:4;30852:2;30841:9;30837:18;30829:26;;30901:9;30895:4;30891:20;30887:1;30876:9;30872:17;30865:47;30929:131;31055:4;30929:131;:::i;:::-;30921:139;;30648:419;;;:::o;31073:191::-;31113:4;31133:20;31151:1;31133:20;:::i;:::-;31128:25;;31167:20;31185:1;31167:20;:::i;:::-;31162:25;;31206:1;31203;31200:8;31197:34;;;31211:18;;:::i;:::-;31197:34;31256:1;31253;31249:9;31241:17;;31073:191;;;;:::o;31270:180::-;31318:77;31315:1;31308:88;31415:4;31412:1;31405:15;31439:4;31436:1;31429:15;31456:233;31495:3;31518:24;31536:5;31518:24;:::i;:::-;31509:33;;31564:66;31557:5;31554:77;31551:103;;31634:18;;:::i;:::-;31551:103;31681:1;31674:5;31670:13;31663:20;;31456:233;;;:::o;31695:161::-;31835:13;31831:1;31823:6;31819:14;31812:37;31695:161;:::o;31862:366::-;32004:3;32025:67;32089:2;32084:3;32025:67;:::i;:::-;32018:74;;32101:93;32190:3;32101:93;:::i;:::-;32219:2;32214:3;32210:12;32203:19;;31862:366;;;:::o;32234:419::-;32400:4;32438:2;32427:9;32423:18;32415:26;;32487:9;32481:4;32477:20;32473:1;32462:9;32458:17;32451:47;32515:131;32641:4;32515:131;:::i;:::-;32507:139;;32234:419;;;:::o;32659:180::-;32799:32;32795:1;32787:6;32783:14;32776:56;32659:180;:::o;32845:366::-;32987:3;33008:67;33072:2;33067:3;33008:67;:::i;:::-;33001:74;;33084:93;33173:3;33084:93;:::i;:::-;33202:2;33197:3;33193:12;33186:19;;32845:366;;;:::o;33217:419::-;33383:4;33421:2;33410:9;33406:18;33398:26;;33470:9;33464:4;33460:20;33456:1;33445:9;33441:17;33434:47;33498:131;33624:4;33498:131;:::i;:::-;33490:139;;33217:419;;;:::o;33642:177::-;33782:29;33778:1;33770:6;33766:14;33759:53;33642:177;:::o;33825:366::-;33967:3;33988:67;34052:2;34047:3;33988:67;:::i;:::-;33981:74;;34064:93;34153:3;34064:93;:::i;:::-;34182:2;34177:3;34173:12;34166:19;;33825:366;;;:::o;34197:419::-;34363:4;34401:2;34390:9;34386:18;34378:26;;34450:9;34444:4;34440:20;34436:1;34425:9;34421:17;34414:47;34478:131;34604:4;34478:131;:::i;:::-;34470:139;;34197:419;;;:::o;34622:225::-;34762:34;34758:1;34750:6;34746:14;34739:58;34831:8;34826:2;34818:6;34814:15;34807:33;34622:225;:::o;34853:366::-;34995:3;35016:67;35080:2;35075:3;35016:67;:::i;:::-;35009:74;;35092:93;35181:3;35092:93;:::i;:::-;35210:2;35205:3;35201:12;35194:19;;34853:366;;;:::o;35225:419::-;35391:4;35429:2;35418:9;35414:18;35406:26;;35478:9;35472:4;35468:20;35464:1;35453:9;35449:17;35442:47;35506:131;35632:4;35506:131;:::i;:::-;35498:139;;35225:419;;;:::o;35650:180::-;35698:77;35695:1;35688:88;35795:4;35792:1;35785:15;35819:4;35816:1;35809:15;35836:185;35876:1;35893:20;35911:1;35893:20;:::i;:::-;35888:25;;35927:20;35945:1;35927:20;:::i;:::-;35922:25;;35966:1;35956:35;;35971:18;;:::i;:::-;35956:35;36013:1;36010;36006:9;36001:14;;35836:185;;;;:::o;36027:180::-;36075:77;36072:1;36065:88;36172:4;36169:1;36162:15;36196:4;36193:1;36186:15;36213:165;36353:17;36349:1;36341:6;36337:14;36330:41;36213:165;:::o;36384:366::-;36526:3;36547:67;36611:2;36606:3;36547:67;:::i;:::-;36540:74;;36623:93;36712:3;36623:93;:::i;:::-;36741:2;36736:3;36732:12;36725:19;;36384:366;;;:::o;36756:419::-;36922:4;36960:2;36949:9;36945:18;36937:26;;37009:9;37003:4;36999:20;36995:1;36984:9;36980:17;36973:47;37037:131;37163:4;37037:131;:::i;:::-;37029:139;;36756:419;;;:::o;37181:224::-;37321:34;37317:1;37309:6;37305:14;37298:58;37390:7;37385:2;37377:6;37373:15;37366:32;37181:224;:::o;37411:366::-;37553:3;37574:67;37638:2;37633:3;37574:67;:::i;:::-;37567:74;;37650:93;37739:3;37650:93;:::i;:::-;37768:2;37763:3;37759:12;37752:19;;37411:366;;;:::o;37783:419::-;37949:4;37987:2;37976:9;37972:18;37964:26;;38036:9;38030:4;38026:20;38022:1;38011:9;38007:17;38000:47;38064:131;38190:4;38064:131;:::i;:::-;38056:139;;37783:419;;;:::o;38208:232::-;38348:34;38344:1;38336:6;38332:14;38325:58;38417:15;38412:2;38404:6;38400:15;38393:40;38208:232;:::o;38446:366::-;38588:3;38609:67;38673:2;38668:3;38609:67;:::i;:::-;38602:74;;38685:93;38774:3;38685:93;:::i;:::-;38803:2;38798:3;38794:12;38787:19;;38446:366;;;:::o;38818:419::-;38984:4;39022:2;39011:9;39007:18;38999:26;;39071:9;39065:4;39061:20;39057:1;39046:9;39042:17;39035:47;39099:131;39225:4;39099:131;:::i;:::-;39091:139;;38818:419;;;:::o;39243:169::-;39383:21;39379:1;39371:6;39367:14;39360:45;39243:169;:::o;39418:366::-;39560:3;39581:67;39645:2;39640:3;39581:67;:::i;:::-;39574:74;;39657:93;39746:3;39657:93;:::i;:::-;39775:2;39770:3;39766:12;39759:19;;39418:366;;;:::o;39790:419::-;39956:4;39994:2;39983:9;39979:18;39971:26;;40043:9;40037:4;40033:20;40029:1;40018:9;40014:17;40007:47;40071:131;40197:4;40071:131;:::i;:::-;40063:139;;39790:419;;;:::o;40215:225::-;40355:34;40351:1;40343:6;40339:14;40332:58;40424:8;40419:2;40411:6;40407:15;40400:33;40215:225;:::o;40446:366::-;40588:3;40609:67;40673:2;40668:3;40609:67;:::i;:::-;40602:74;;40685:93;40774:3;40685:93;:::i;:::-;40803:2;40798:3;40794:12;40787:19;;40446:366;;;:::o;40818:419::-;40984:4;41022:2;41011:9;41007:18;40999:26;;41071:9;41065:4;41061:20;41057:1;41046:9;41042:17;41035:47;41099:131;41225:4;41099:131;:::i;:::-;41091:139;;40818:419;;;:::o;41243:182::-;41383:34;41379:1;41371:6;41367:14;41360:58;41243:182;:::o;41431:366::-;41573:3;41594:67;41658:2;41653:3;41594:67;:::i;:::-;41587:74;;41670:93;41759:3;41670:93;:::i;:::-;41788:2;41783:3;41779:12;41772:19;;41431:366;;;:::o;41803:419::-;41969:4;42007:2;41996:9;41992:18;41984:26;;42056:9;42050:4;42046:20;42042:1;42031:9;42027:17;42020:47;42084:131;42210:4;42084:131;:::i;:::-;42076:139;;41803:419;;;:::o;42228:176::-;42260:1;42277:20;42295:1;42277:20;:::i;:::-;42272:25;;42311:20;42329:1;42311:20;:::i;:::-;42306:25;;42350:1;42340:35;;42355:18;;:::i;:::-;42340:35;42396:1;42393;42389:9;42384:14;;42228:176;;;;:::o;42410:143::-;42467:5;42498:6;42492:13;42483:22;;42514:33;42541:5;42514:33;:::i;:::-;42410:143;;;;:::o;42559:351::-;42629:6;42678:2;42666:9;42657:7;42653:23;42649:32;42646:119;;;42684:79;;:::i;:::-;42646:119;42804:1;42829:64;42885:7;42876:6;42865:9;42861:22;42829:64;:::i;:::-;42819:74;;42775:128;42559:351;;;;:::o;42916:102::-;42958:8;43005:5;43002:1;42998:13;42977:34;;42916:102;;;:::o;43024:90::-;43074:7;43103:5;43092:16;;43024:90;;;:::o;43120:166::-;43189:5;43214:66;43245:34;43268:10;43245:34;:::i;:::-;43214:66;:::i;:::-;43205:75;;43120:166;;;:::o;43292:101::-;43354:6;43382:4;43372:14;;43292:101;;;:::o;43399:95::-;43461:4;43484:3;43476:11;;43399:95;;;:::o;43500:144::-;43555:5;43580:57;43631:4;43625:11;43580:57;:::i;:::-;43571:66;;43500:144;;;:::o;43650:108::-;43715:4;43747;43742:3;43738:14;43730:22;;43650:108;;;:::o;43796:693::-;43919:49;43962:5;43919:49;:::i;:::-;43984:74;44051:6;44046:3;43984:74;:::i;:::-;43977:81;;44082:51;44127:5;44082:51;:::i;:::-;44156:7;44187:1;44172:310;44197:6;44194:1;44191:13;44172:310;;;44267:44;44304:6;44267:44;:::i;:::-;44331:63;44390:3;44375:13;44331:63;:::i;:::-;44324:70;;44417:55;44465:6;44417:55;:::i;:::-;44407:65;;44232:250;44219:1;44216;44212:9;44207:14;;44172:310;;;44176:14;43895:594;;;43796:693;;:::o;44563:1930::-;44699:6;44694:3;44690:16;44732:1;44805:4;44798:5;44794:16;44788:23;44775:36;;44844:55;44889:9;44844:55;:::i;:::-;44912:63;44969:4;44964:3;44960:14;44946:12;44912:63;:::i;:::-;44743:242;45064:4;45057:5;45053:16;45082:106;45182:4;45177:3;45173:14;45159:12;45082:106;:::i;:::-;44995:203;45277:4;45270:5;45266:16;45260:23;45247:36;;45316:55;45361:9;45316:55;:::i;:::-;45384:63;45441:4;45436:3;45432:14;45418:12;45384:63;:::i;:::-;45208:249;45540:4;45533:5;45529:16;45523:23;45510:36;;45579:55;45624:9;45579:55;:::i;:::-;45647:63;45704:4;45699:3;45695:14;45681:12;45647:63;:::i;:::-;45467:253;45793:4;45786:5;45782:16;45776:23;45763:36;;45832:55;45877:9;45832:55;:::i;:::-;45900:63;45957:4;45952:3;45948:14;45934:12;45900:63;:::i;:::-;45730:243;46047:4;46040:5;46036:16;46030:23;46017:36;;46086:55;46131:9;46086:55;:::i;:::-;46154:63;46211:4;46206:3;46202:14;46188:12;46154:63;:::i;:::-;45983:244;46306:4;46299:5;46295:16;46289:23;46276:36;;46345:55;46390:9;46345:55;:::i;:::-;46413:63;46470:4;46465:3;46461:14;46447:12;46413:63;:::i;:::-;46237:249;44668:1825;;44563:1930;;:::o;46499:301::-;46631:4;46669:3;46658:9;46654:19;46646:27;;46683:110;46790:1;46779:9;46775:17;46766:6;46683:110;:::i;:::-;46499:301;;;;:::o;46806:332::-;46927:4;46965:2;46954:9;46950:18;46942:26;;46978:71;47046:1;47035:9;47031:17;47022:6;46978:71;:::i;:::-;47059:72;47127:2;47116:9;47112:18;47103:6;47059:72;:::i;:::-;46806:332;;;;;:::o;47144:648::-;47341:4;47379:3;47368:9;47364:19;47356:27;;47393:71;47461:1;47450:9;47446:17;47437:6;47393:71;:::i;:::-;47474:70;47540:2;47529:9;47525:18;47516:6;47474:70;:::i;:::-;47554;47620:2;47609:9;47605:18;47596:6;47554:70;:::i;:::-;47634;47700:2;47689:9;47685:18;47676:6;47634:70;:::i;:::-;47714:71;47780:3;47769:9;47765:19;47756:6;47714:71;:::i;:::-;47144:648;;;;;;;;:::o;47798:143::-;47855:5;47886:6;47880:13;47871:22;;47902:33;47929:5;47902:33;:::i;:::-;47798:143;;;;:::o;47947:351::-;48017:6;48066:2;48054:9;48045:7;48041:23;48037:32;48034:119;;;48072:79;;:::i;:::-;48034:119;48192:1;48217:64;48273:7;48264:6;48253:9;48249:22;48217:64;:::i;:::-;48207:74;;48163:128;47947:351;;;;:::o;48304:179::-;48444:31;48440:1;48432:6;48428:14;48421:55;48304:179;:::o;48489:366::-;48631:3;48652:67;48716:2;48711:3;48652:67;:::i;:::-;48645:74;;48728:93;48817:3;48728:93;:::i;:::-;48846:2;48841:3;48837:12;48830:19;;48489:366;;;:::o;48861:419::-;49027:4;49065:2;49054:9;49050:18;49042:26;;49114:9;49108:4;49104:20;49100:1;49089:9;49085:17;49078:47;49142:131;49268:4;49142:131;:::i;:::-;49134:139;;48861:419;;;:::o;49286:348::-;49326:7;49349:20;49367:1;49349:20;:::i;:::-;49344:25;;49383:20;49401:1;49383:20;:::i;:::-;49378:25;;49571:1;49503:66;49499:74;49496:1;49493:81;49488:1;49481:9;49474:17;49470:105;49467:131;;;49578:18;;:::i;:::-;49467:131;49626:1;49623;49619:9;49608:20;;49286:348;;;;:::o
Swarm Source
ipfs://e64bf34664c7442c2b0ef425c141d5a74dbf786fe543c57c367df638c5ab7684
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.