Overview
APE Balance
APE Value
$10.54 (@ $0.19/APE)Multichain Info
Latest 25 from a total of 10,277 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Play | 32784203 | 28 mins ago | IN | 1.07321158 APE | 0.06896389 | ||||
| Play | 32784169 | 29 mins ago | IN | 1.07321158 APE | 0.06896399 | ||||
| Play | 32784158 | 29 mins ago | IN | 1.07321158 APE | 0.06867928 | ||||
| Play | 32784148 | 29 mins ago | IN | 1.07321158 APE | 0.07244154 | ||||
| Play | 32780902 | 2 hrs ago | IN | 100.07321158 APE | 0.06896399 | ||||
| Play | 32780887 | 2 hrs ago | IN | 100.07321158 APE | 0.06896399 | ||||
| Play | 32780877 | 2 hrs ago | IN | 300.07321158 APE | 0.06896399 | ||||
| Play | 32780856 | 2 hrs ago | IN | 100.07321158 APE | 0.06896389 | ||||
| Play | 32780842 | 2 hrs ago | IN | 100.07321158 APE | 0.06896399 | ||||
| Play | 32780825 | 2 hrs ago | IN | 300.07321158 APE | 0.06896389 | ||||
| Play | 32780800 | 2 hrs ago | IN | 100.07321158 APE | 0.06896277 | ||||
| Play | 32780782 | 2 hrs ago | IN | 100.07321158 APE | 0.06896399 | ||||
| Play | 32780767 | 2 hrs ago | IN | 100.07321158 APE | 0.06896389 | ||||
| Play | 32780746 | 2 hrs ago | IN | 100.07321158 APE | 0.06896267 | ||||
| Play | 32780739 | 2 hrs ago | IN | 100.07321158 APE | 0.06896033 | ||||
| Play | 32777556 | 3 hrs ago | IN | 1.07321158 APE | 0.06896399 | ||||
| Play | 32777545 | 3 hrs ago | IN | 1.07321158 APE | 0.06896399 | ||||
| Play | 32777528 | 3 hrs ago | IN | 1.07321158 APE | 0.06896399 | ||||
| Play | 32777514 | 3 hrs ago | IN | 1.07321158 APE | 0.07244032 | ||||
| Play | 32754682 | 14 hrs ago | IN | 3.07321158 APE | 0.07121718 | ||||
| Play | 32754670 | 14 hrs ago | IN | 3.07321158 APE | 0.07121718 | ||||
| Play | 32754278 | 15 hrs ago | IN | 300.07321158 APE | 0.06898961 | ||||
| Play | 32754266 | 15 hrs ago | IN | 300.07321158 APE | 0.06898961 | ||||
| Play | 32754252 | 15 hrs ago | IN | 300.07321158 APE | 0.06898839 | ||||
| Play | 32754241 | 15 hrs ago | IN | 300.07321158 APE | 0.06898961 |
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 32784206 | 28 mins ago | 0.99 APE | ||||
| 32784203 | 28 mins ago | 0.07321158 APE | ||||
| 32784203 | 28 mins ago | 0.01 APE | ||||
| 32784172 | 29 mins ago | 0.99 APE | ||||
| 32784169 | 29 mins ago | 0.07321158 APE | ||||
| 32784169 | 29 mins ago | 0.01 APE | ||||
| 32784159 | 29 mins ago | 0.99 APE | ||||
| 32784158 | 29 mins ago | 0.07321158 APE | ||||
| 32784158 | 29 mins ago | 0.01 APE | ||||
| 32784150 | 29 mins ago | 0.99 APE | ||||
| 32784148 | 29 mins ago | 0.07321158 APE | ||||
| 32784148 | 29 mins ago | 0.01 APE | ||||
| 32780904 | 2 hrs ago | 99 APE | ||||
| 32780902 | 2 hrs ago | 0.07321158 APE | ||||
| 32780902 | 2 hrs ago | 1 APE | ||||
| 32780891 | 2 hrs ago | 99 APE | ||||
| 32780887 | 2 hrs ago | 0.07321158 APE | ||||
| 32780887 | 2 hrs ago | 1 APE | ||||
| 32780878 | 2 hrs ago | 297 APE | ||||
| 32780877 | 2 hrs ago | 0.07321158 APE | ||||
| 32780877 | 2 hrs ago | 3 APE | ||||
| 32780857 | 2 hrs ago | 99 APE | ||||
| 32780856 | 2 hrs ago | 0.07321158 APE | ||||
| 32780856 | 2 hrs ago | 1 APE | ||||
| 32780843 | 2 hrs ago | 99 APE |
Cross-Chain Transactions
Contract Source Code (Solidity)
/**
*Submitted for verification at apescan.io on 2025-06-10
*/
//SPDX-License-Identifier: MIT
pragma solidity 0.8.28;
interface IGovernanceManager {
function RNG() external view returns (address);
function owner() external view returns (address);
function referralManager() external view returns (address);
function feeReceiver() external view returns (address);
function claimManager() external view returns (address);
function house() external view returns (address);
function isGame(address game) external view returns (bool);
function userInfoTracker() external view returns (address);
function canPlayForOthers(address addr) external view returns (bool);
function paused() external view returns (bool);
function isAdmin(address admin) external view returns (bool);
}
interface IRNG {
function requestRandom(bytes32 userRandomNumber, uint8 numWords) external payable returns (uint64);
function getFee() external view returns (uint256);
}
contract ApeOwnable {
// Governance Manager
IGovernanceManager public constant manager = IGovernanceManager(0x8632f22e5A921C751CFbBFF92F058A3b11E96b8a);
modifier onlyOwner() {
require(
msg.sender == manager.owner(),
'Only Owner'
);
_;
}
modifier onlyGame() {
require(
manager.isGame(msg.sender),
'UnAuthorized'
);
_;
}
modifier onlyRNG() {
require(
msg.sender == manager.RNG(),
'Only RNG Contract'
);
_;
}
modifier validatePlayer(address player) {
if (player != msg.sender) {
require(
manager.canPlayForOthers(msg.sender),
'UnAuthorized To Play For Others'
);
}
_;
}
modifier notPaused() {
require(
manager.paused() == false,
'All Games Paused'
);
_;
}
modifier onlyAdmin() {
require(
manager.isAdmin(msg.sender),
'UnAuthorized'
);
_;
}
}
interface IGame {
/**
Callback to provide us with randomness
*/
function fulfillRandomWords(
uint64 requestId,
uint256[] calldata randomWords
) external;
function play(address user, bytes calldata gameData) external payable;
}
interface IUserInfoTracker {
function wagered(address user, uint256 amount, uint256 GAME_ID) external;
}
interface IClaimManager {
function credit(
uint256 GAME_ID,
address user
) external payable;
}
interface IHistoryManager {
function addData(address user, uint256 GAME_ID, uint256 gameId) external;
}
interface IFeeRecipient {
function takeFee(address ref, address player) external payable;
}
// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
function safeApprove(
address token,
address to,
uint256 value
) internal {
// bytes4(keccak256(bytes('approve(address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
require(
success && (data.length == 0 || abi.decode(data, (bool))),
'TransferHelper::safeApprove: approve failed'
);
}
function safeTransfer(
address token,
address to,
uint256 value
) internal {
// bytes4(keccak256(bytes('transfer(address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
require(
success && (data.length == 0 || abi.decode(data, (bool))),
'TransferHelper::safeTransfer: transfer failed'
);
}
function safeTransferFrom(
address token,
address from,
address to,
uint256 value
) internal {
// bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
require(
success && (data.length == 0 || abi.decode(data, (bool))),
'TransferHelper::transferFrom: transferFrom failed'
);
}
function safeTransferETH(address to, uint256 value) internal {
(bool success, ) = to.call{value: value}(new bytes(0));
require(success, 'TransferHelper::safeTransferETH: ETH transfer failed');
}
}
interface IHouse {
/**
House has profited from game, call this to send value into the house and emit the correct event for SubGraphs
*/
function houseProfit(uint256 GAME_ID) external payable;
/**
Function Games Call to tell the house that a user has won the bet
*/
function payout(uint256 GAME_ID, address user, uint256 value) external;
/**
Read function to determine the maximum payout allowed by the house at the current time
*/
function maxPayout() external view returns (uint256);
/**
Randomness has been requested, withdrawals are paused until it is resolved by called `randomRequestResolved()`
*/
function randomRequested() external;
/**
Resolves a random request from chainlink, allowing house users to withdraw
*/
function randomRequestResolved() external;
}
/**
Game Master Class, any inheriting game must pass the necessary fields into the constructor
*/
contract GameMasterclass is ApeOwnable, IGame {
// GAME ID
uint256 public immutable GAME_ID;
// History Manager
IHistoryManager public immutable history;
/** Game Is Either Paused Or Unpaused */
bool public paused = false;
/** List of all used game ids */
uint256[] public usedGameIds;
mapping ( uint256 => bool ) internal isUsedGameId;
// request ID => GameID
mapping ( uint64 => uint256 ) private requestToGame;
/// @notice emitted after a random request has been sent out
event RandomnessRequested(uint256 gameId);
/**
Builds The Necessary Components Of Any Game
*/
constructor(
uint256 GAME_ID_,
address history_
) {
// set other variables
GAME_ID = GAME_ID_;
history = IHistoryManager(history_);
}
//////////////////////////////////////
/////// OWNER FUNCTIONS ////////
//////////////////////////////////////
function pause() external onlyOwner {
paused = true;
}
function resume() external onlyOwner {
paused = false;
}
function withdrawETH(address to, uint256 amount) external onlyOwner {
(bool s,) = payable(to).call{value: amount}("");
require(s);
}
function withdrawToken(address token, uint amount) external onlyOwner {
TransferHelper.safeTransfer(token, msg.sender, amount);
}
function _registerBet(address user, uint256 amount) internal {
IUserInfoTracker(manager.userInfoTracker()).wagered(user, amount, GAME_ID);
}
function _processFee(uint256 feeAmount, address ref, address player) internal {
IFeeRecipient(manager.feeReceiver()).takeFee{value: feeAmount}(ref, player);
}
function getVRFFee() public view returns (uint256) {
return IRNG(manager.RNG()).getFee();
}
function fulfillRandomWords(uint64 requestId, uint256[] calldata randomWords) external virtual {}
function play(address player, bytes calldata gameData) external payable override validatePlayer(player) notPaused() {
require(
!paused,
'Paused'
);
// play game
_playGame(player, gameData);
}
function _playGame(address player, bytes calldata gameData) internal virtual {}
function _handlePayout(address player, uint256 totalToPayout, uint256 amountForHouse) internal {
if (totalToPayout > 0) {
// there is a payout, we won something
if (totalToPayout >= amountForHouse) {
// the user has won more than we are giving to the house
// this means we need to send them (to claim manager) amountForHouse directly
// and only request that the house `payout` the difference!
// add to user's claim manager the amount for the house
IClaimManager(manager.claimManager()).credit{value: amountForHouse}(
GAME_ID,
player
);
// get the difference
uint256 remaining = totalToPayout - amountForHouse;
if (remaining > 0) {
// payout the rest from the house
IHouse(manager.house()).payout(GAME_ID, player, remaining);
}
} else {
// the user has won less than we are giving to the house
// pay them out directly in full, send whatever is left over to the house
// add to user's claim manager the amount for the house
IClaimManager(manager.claimManager()).credit{value: totalToPayout}(
GAME_ID,
player
);
// calculate remaining left for the house
uint256 remaining = amountForHouse - totalToPayout;
// send the remaining to the house
IHouse(manager.house()).houseProfit{value: remaining }(GAME_ID);
}
} else {
// we won nothing, send the house everything
IHouse(manager.house()).houseProfit{value: amountForHouse }(GAME_ID);
}
}
/// @dev logs the gameId in the used list and adds game to player's history
function _registerGameId(address player, uint256 gameId) internal {
// set history data
history.addData(player, GAME_ID, gameId);
// add to list of used game ids
usedGameIds.push(gameId);
isUsedGameId[gameId] = true;
}
function _requestRandom(uint256 gameId, uint8 numWords, bytes32 userRandomWord) internal {
// request random words from RNG contract
uint64 requestId = IRNG(manager.RNG()).requestRandom{value: getVRFFee()}(
userRandomWord, // random user seed
numWords // the number of random results to return
);
// require that the requestId is unused
require(
requestToGame[requestId] == 0,
'RequestId In Use'
);
// map this request ID to the game it belongs to
requestToGame[requestId] = gameId;
// set data in house
IHouse(manager.house()).randomRequested();
// emit event
emit RandomnessRequested(gameId);
}
function _resolveRandom(uint64 requestId) internal {
// resolve request in house
IHouse(manager.house()).randomRequestResolved();
// clear storage
delete requestToGame[requestId];
}
function getGameIdFromRequest(uint64 requestId) internal view returns (uint256) {
return requestToGame[requestId];
}
function getHouse() public view returns (address) {
return manager.house();
}
function isValidGameId(uint256 gameId) public view returns (bool) {
return isUsedGameId[gameId] == false && gameId > 0;
}
function batchCallIsUsedGameId(uint256[] calldata gameIds) external view returns (bool[] memory isUsed) {
uint len = gameIds.length;
isUsed = new bool[](len);
for (uint i = 0; i < len;) {
isUsed[i] = isUsedGameId[gameIds[i]];
unchecked { ++i; }
}
}
function paginateUsedGameIDs(uint256 start, uint256 end) external view returns (uint256[] memory) {
if (end > usedGameIds.length) {
end = usedGameIds.length;
}
uint256[] memory ids = new uint256[](end - start);
for (uint i = start; i < end;) {
ids[i - start] = usedGameIds[i];
unchecked { ++i; }
}
return ids;
}
function numUsedGameIDs() external view returns (uint256) {
return usedGameIds.length;
}
function getEssentialGameInfo(uint256[] calldata gameIds) external view virtual returns (
address[] memory players,
uint256[] memory buyInAmounts,
uint256[] memory totalPayouts,
uint256[] memory timestamps,
bool[] memory hasEndeds
) {}
function batchRawGameInfo(uint256[] calldata gameIds) external view virtual returns (bytes[] memory) {}
}
/**
Baccarat PvH Game
*/
contract Baccarat is GameMasterclass {
// payouts
uint256 public constant PLAYER_PAYOUT = 200;
uint256 public constant BANKER_PAYOUT = 195;
uint256 public constant TIE_PAYOUT = 900;
// fees
uint256 public playerBankerFee = 100;
uint256 public tieFee = 300;
/** Fee Denominator */
uint256 private constant FEE_DENOM = 10_000;
// Game Struct
struct Game {
uint256 playerBankerBet;
uint256 tieBet;
uint256 payout;
uint256 amountForHouse;
address user;
bool betOnBanker;
uint8[] playerCards;
uint8[] bankerCards;
bool hasEnded;
uint256 timestamp;
}
// return type
struct GameInfoReturnType {
uint256 playerBankerBet;
uint256 tieBet;
uint256 payout;
address user;
bool betOnBanker;
uint8[] playerCards;
uint8[] bankerCards;
bool hasEnded;
uint256 timestamp;
}
// mapping from GameID => Game
mapping ( uint256 => Game ) public games;
// request ID => GameID
mapping ( uint256 => uint256 ) private requestToGame;
// Gas to call the RNG
uint32 public gasToCallRandom;
// Min Buy In Gas
uint256 public minBuyInGas;
/// @notice emitted when the platform fee is changed
event SetPlatformFees(uint256 newPlayerBankerFee, uint256 newTieFee);
/// @notice emitted after a game has been started at a specific table
event GameStarted(address indexed user, uint256 gameId);
/// @notice Emitted after the VRF comes back with the index of the winning player
event GameEnded(
address indexed user,
uint256 gameId,
uint256 buyIn,
uint256 payout
);
/// @notice Emitted if the fulfilRandomWords function needs to return out for any reason
event FulfilRandomFailed(uint256 requestId, uint256 gameId, uint256[] randomWords);
constructor(
// Game ID
uint256 GAME_ID_,
/** History Manager */
address history_
) GameMasterclass(GAME_ID_, history_) {}
function setPlatformFees(uint256 newPlayerBankerFee, uint256 newTieFee) external onlyOwner {
require(
newPlayerBankerFee <= 120,
'Cannot Exceed 1.2% Fee'
);
require(
newTieFee <= 1_000,
'Cannot Exceed 10% Fee'
);
playerBankerFee = newPlayerBankerFee;
tieFee = newTieFee;
emit SetPlatformFees(newPlayerBankerFee, newTieFee);
}
function _playGame(address player, bytes calldata gameData) internal override {
// determine vrf fee
uint256 vrfFee = getVRFFee();
// decode game data
(
uint256 gameId,
uint256 playerBankerBet,
uint256 tieBet,
bool isBanker,
address ref,
bytes32 userRandomWord
) = abi.decode(gameData, (uint256, uint256, uint256, bool, address, bytes32));
// validate inputs
require(
msg.value >= vrfFee,
'ERR: MIN BUY IN'
);
require(
isValidGameId(gameId) == true,
'Invalid Game ID'
);
// determine total bet amount
uint256 totalBetAmount = msg.value - vrfFee;
require(
totalBetAmount > 0,
'Invalid Bet Amount'
);
require(
totalBetAmount == playerBankerBet + tieBet,
'Invalid Bet Amounts'
);
// take platform fee out of the buy in
uint256 platformFeeAmount;
// calculate fee based on bets
if (playerBankerBet > 0) {
unchecked {
platformFeeAmount += ( playerBankerBet * playerBankerFee ) / FEE_DENOM;
}
}
if (tieBet > 0) {
unchecked {
platformFeeAmount += ( tieBet * tieFee ) / FEE_DENOM;
}
}
// send to platform receiver (taking ref into account)
_processFee(platformFeeAmount, ref, player);
// set game data
games[gameId] = Game({
playerBankerBet: playerBankerBet,
tieBet: tieBet,
payout: 0,
amountForHouse: totalBetAmount - platformFeeAmount,
user: player,
betOnBanker: isBanker,
playerCards: new uint8[](3),
bankerCards: new uint8[](3),
hasEnded: false,
timestamp: block.timestamp
});
// register game Id
_registerGameId(player, gameId);
// register bet
_registerBet(player, totalBetAmount);
// emit event
emit GameStarted(player, gameId);
// fetch random number
_requestRandom(gameId, 6, userRandomWord);
}
/**
Callback to provide us with randomness
*/
function fulfillRandomWords(
uint64 requestId,
uint256[] calldata randomWords
) external override onlyRNG {
// get game ID from requestId
uint256 gameId = getGameIdFromRequest(requestId);
// resolve randomness
_resolveRandom(requestId);
// if faulty ID, remove
if (gameId == 0 || games[gameId].user == address(0) || games[gameId].hasEnded == true) {
emit FulfilRandomFailed(requestId, gameId, randomWords);
return;
}
// set game has ended
games[gameId].hasEnded = true;
// set player and banker cards based on input
games[gameId].playerCards[0] = uint8((randomWords[0] % 13) + 1);
games[gameId].playerCards[1] = uint8((randomWords[1] % 13) + 1);
games[gameId].bankerCards[0] = uint8((randomWords[2] % 13) + 1);
games[gameId].bankerCards[1] = uint8((randomWords[3] % 13) + 1);
// set bonus cards anyway -- maybe scrap this, but this is what they are
games[gameId].playerCards[2] = uint8((randomWords[4] % 13) + 1);
games[gameId].bankerCards[2] = uint8((randomWords[5] % 13) + 1);
// determine winner
uint8 winner = determineWinner(games[gameId].playerCards, games[gameId].bankerCards);
// handle payout
uint256 payout = getPayoutAmount(games[gameId].playerBankerBet, games[gameId].tieBet, games[gameId].betOnBanker, winner);
// set payout
games[gameId].payout = payout;
// handle payout
_handlePayout(games[gameId].user, payout, games[gameId].amountForHouse);
// Emit Game Ended Event
emit GameEnded(games[gameId].user, gameId, games[gameId].playerBankerBet + games[gameId].tieBet, payout);
}
/**
returns 0 if player wins, 1 if banker wins, 2 if tie
*/
function determineWinner(uint8[] memory playerCards, uint8[] memory bankerCards) public pure returns (uint8) {
// 1 is Ace
// 2 is 2... 9 is 9
// 10, 11 (J), 12 (Q), 13 (K) are 0
// player and banker totals - start at 0 and add cards, then modulo 10
uint8 playerTotal;
uint8 bankerTotal;
for (uint8 i = 0; i < 2;) {
if (playerCards[i] < 10) {
unchecked {
playerTotal += playerCards[i];
}
}
if (bankerCards[i] < 10) {
unchecked {
bankerTotal += bankerCards[i];
}
}
unchecked { ++i; }
}
// modulo 10
playerTotal %= 10;
bankerTotal %= 10;
// check if natural 8 or 9
if (playerTotal == 8 || playerTotal == 9 || bankerTotal == 8 || bankerTotal == 9) {
// natural 8 or 9, determine winner
if (playerTotal > bankerTotal) {
return 0;
} else if (playerTotal < bankerTotal) {
return 1;
} else {
return 2;
}
}
// if the player has a score of 0-5, they draw a third card
if (playerTotal <= 5) {
// draw third for player
if (playerCards[2] < 10) {
unchecked {
playerTotal += playerCards[2];
}
playerTotal %= 10;
}
// now we check if the banker draws a third card
if (bankerTotal <= 2) {
// if 0-2, always draw
if (bankerCards[2] < 10) {
unchecked {
bankerTotal += bankerCards[2];
}
bankerTotal %= 10;
}
} else if (bankerTotal == 3) {
// if banker has 3, they draw unless player draws an 8
if (playerCards[2] != 8) {
if (bankerCards[2] < 10) {
unchecked {
bankerTotal += bankerCards[2];
}
bankerTotal %= 10;
}
}
} else if (bankerTotal == 4) {
// The Banker draws if the Player's third card is 2, 3, 4, 5, 6, or 7
if (playerCards[2] >= 2 && playerCards[2] <= 7) {
if (bankerCards[2] < 10) {
unchecked {
bankerTotal += bankerCards[2];
}
bankerTotal %= 10;
}
}
} else if (bankerTotal == 5) {
// The Banker draws if the Player's third card is 4, 5, 6, or 7
if (playerCards[2] >= 4 && playerCards[2] <= 7) {
if (bankerCards[2] < 10) {
unchecked {
bankerTotal += bankerCards[2];
}
bankerTotal %= 10;
}
}
} else if (bankerTotal == 6) {
// The Banker draws if the Player's third card is 6 or 7
if (playerCards[2] == 6 || playerCards[2] == 7) {
if (bankerCards[2] < 10) {
unchecked {
bankerTotal += bankerCards[2];
}
bankerTotal %= 10;
}
}
}
} else {
// player has a score of six or seven, they stand, so the Banker draws a third card if they have 0-5
if (bankerTotal <= 5) {
if (bankerCards[2] < 10) {
unchecked {
bankerTotal += bankerCards[2];
}
bankerTotal %= 10;
}
}
}
if (playerTotal > bankerTotal) {
return 0;
} else if (playerTotal < bankerTotal) {
return 1;
} else {
return 2;
}
}
function getPayoutAmount(uint256 playerBankerBet, uint256 tieBet, bool isBanker, uint8 winner) public pure returns (uint256 payout) {
if (winner == 0 && isBanker == false) {
// player win
payout = ( playerBankerBet * PLAYER_PAYOUT ) / 100;
} else if (winner == 1 && isBanker == true) {
// banker win
payout = ( playerBankerBet * BANKER_PAYOUT ) / 100;
}
if (winner == 2) {
// tie
if (tieBet > 0) {
// user bet on tie
unchecked {
payout += ( tieBet * TIE_PAYOUT ) / 100;
}
}
if (playerBankerBet > 0) {
// refund player banker bet
unchecked {
payout += playerBankerBet;
}
}
}
}
function getGameInfo(uint256 _gameId) public view returns (
GameInfoReturnType memory
) {
return GameInfoReturnType({
playerBankerBet: games[_gameId].playerBankerBet,
tieBet: games[_gameId].tieBet,
payout: games[_gameId].payout,
user: games[_gameId].user,
betOnBanker: games[_gameId].betOnBanker,
playerCards: games[_gameId].playerCards,
bankerCards: games[_gameId].bankerCards,
hasEnded: games[_gameId].hasEnded,
timestamp: games[_gameId].timestamp
});
}
function batchRawGameInfo(uint256[] calldata gameIds) external view override returns (bytes[] memory) {
uint len = gameIds.length;
bytes[] memory retTypes = new bytes[](len);
for (uint i = 0; i < len;) {
retTypes[i] = abi.encode(getGameInfo(gameIds[i]));
unchecked { ++i; }
}
return retTypes;
}
function getEssentialGameInfo(uint256[] calldata gameIds) external view override returns (
address[] memory players,
uint256[] memory buyInAmounts,
uint256[] memory totalPayouts,
uint256[] memory timestamps,
bool[] memory hasEndeds
) {
uint len = gameIds.length;
players = new address[](len);
buyInAmounts = new uint256[](len);
totalPayouts = new uint256[](len);
timestamps = new uint256[](len);
hasEndeds = new bool[](len);
for (uint i = 0; i < len;) {
players[i] = games[gameIds[i]].user;
buyInAmounts[i] = games[gameIds[i]].playerBankerBet + games[gameIds[i]].tieBet;
totalPayouts[i] = games[gameIds[i]].payout;
timestamps[i] = games[gameIds[i]].timestamp;
hasEndeds[i] = games[gameIds[i]].hasEnded;
unchecked { ++i; }
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"uint256","name":"GAME_ID_","type":"uint256"},{"internalType":"address","name":"history_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"randomWords","type":"uint256[]"}],"name":"FulfilRandomFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"payout","type":"uint256"}],"name":"GameEnded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"}],"name":"GameStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"gameId","type":"uint256"}],"name":"RandomnessRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newPlayerBankerFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newTieFee","type":"uint256"}],"name":"SetPlatformFees","type":"event"},{"inputs":[],"name":"BANKER_PAYOUT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GAME_ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PLAYER_PAYOUT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIE_PAYOUT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"gameIds","type":"uint256[]"}],"name":"batchCallIsUsedGameId","outputs":[{"internalType":"bool[]","name":"isUsed","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"gameIds","type":"uint256[]"}],"name":"batchRawGameInfo","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8[]","name":"playerCards","type":"uint8[]"},{"internalType":"uint8[]","name":"bankerCards","type":"uint8[]"}],"name":"determineWinner","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint64","name":"requestId","type":"uint64"},{"internalType":"uint256[]","name":"randomWords","type":"uint256[]"}],"name":"fulfillRandomWords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"games","outputs":[{"internalType":"uint256","name":"playerBankerBet","type":"uint256"},{"internalType":"uint256","name":"tieBet","type":"uint256"},{"internalType":"uint256","name":"payout","type":"uint256"},{"internalType":"uint256","name":"amountForHouse","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"betOnBanker","type":"bool"},{"internalType":"bool","name":"hasEnded","type":"bool"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gasToCallRandom","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"gameIds","type":"uint256[]"}],"name":"getEssentialGameInfo","outputs":[{"internalType":"address[]","name":"players","type":"address[]"},{"internalType":"uint256[]","name":"buyInAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"totalPayouts","type":"uint256[]"},{"internalType":"uint256[]","name":"timestamps","type":"uint256[]"},{"internalType":"bool[]","name":"hasEndeds","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_gameId","type":"uint256"}],"name":"getGameInfo","outputs":[{"components":[{"internalType":"uint256","name":"playerBankerBet","type":"uint256"},{"internalType":"uint256","name":"tieBet","type":"uint256"},{"internalType":"uint256","name":"payout","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"betOnBanker","type":"bool"},{"internalType":"uint8[]","name":"playerCards","type":"uint8[]"},{"internalType":"uint8[]","name":"bankerCards","type":"uint8[]"},{"internalType":"bool","name":"hasEnded","type":"bool"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"internalType":"struct Baccarat.GameInfoReturnType","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHouse","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"playerBankerBet","type":"uint256"},{"internalType":"uint256","name":"tieBet","type":"uint256"},{"internalType":"bool","name":"isBanker","type":"bool"},{"internalType":"uint8","name":"winner","type":"uint8"}],"name":"getPayoutAmount","outputs":[{"internalType":"uint256","name":"payout","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getVRFFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"history","outputs":[{"internalType":"contract IHistoryManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gameId","type":"uint256"}],"name":"isValidGameId","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"contract IGovernanceManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBuyInGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numUsedGameIDs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"paginateUsedGameIDs","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"},{"internalType":"bytes","name":"gameData","type":"bytes"}],"name":"play","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"playerBankerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"resume","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPlayerBankerFee","type":"uint256"},{"internalType":"uint256","name":"newTieFee","type":"uint256"}],"name":"setPlatformFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tieFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"usedGameIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60c06040526000805460ff19169055606460045561012c60055534801561002557600080fd5b50604051613ad0380380613ad08339810160408190526100449161005b565b6080919091526001600160a01b031660a052610098565b6000806040838503121561006e57600080fd5b825160208401519092506001600160a01b038116811461008d57600080fd5b809150509250929050565b60805160a0516139db6100f5600039600081816105510152612c5301526000818161067a0152818161224f0152818161235a0152818161245a015281816125610152818161265701528181612c260152612d9101526139db6000f3fe6080604052600436106101d85760003560e01c80637c274abe11610102578063af31b8b311610095578063cc81d05511610064578063cc81d0551461060c578063f0034a7e14610621578063fa3208ff14610636578063fdcdb06b1461066857600080fd5b8063af31b8b314610593578063bad8054b146105b3578063c4fd5d6d146105c8578063c811ad71146105f957600080fd5b806389fc2c0f116100d157806389fc2c0f146104f257806391ea41e61461051257806398daac831461053f5780639e281a981461057357600080fd5b80637c274abe1461047f5780637e0a9b29146104955780638456cb59146104ab578063896c0591146104c057600080fd5b806351e925591161017a578063720f428f11610149578063720f428f146103fc57806372b4916114610412578063749fa03c146104325780637b8d38791461045257600080fd5b806351e92559146103795780635c975abb146103a95780635ca79647146103c35780636d3f47ff146103e657600080fd5b806332883e7e116101b657806332883e7e146102dd5780634782f7791461030a57806347e1d5501461032a578063481c6a751461035757600080fd5b8063046f7da2146101dd57806304e2064f146101f4578063117a5b9014610226575b600080fd5b3480156101e957600080fd5b506101f261069c565b005b34801561020057600080fd5b50610209610751565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561023257600080fd5b50610295610241366004613110565b600660205260009081526040902080546001820154600283015460038401546004850154600786015460089096015494959394929391926001600160a01b0382169260ff600160a01b909304831692169088565b6040805198895260208901979097529587019490945260608601929092526001600160a01b03166080850152151560a0840152151560c083015260e08201526101000161021d565b3480156102e957600080fd5b506102fd6102f8366004613129565b6107c8565b60405161021d9190613187565b34801561031657600080fd5b506101f26103253660046131b9565b61088c565b34801561033657600080fd5b5061034a610345366004613110565b610991565b60405161021d919061321a565b34801561036357600080fd5b5061020960008051602061398683398151915281565b34801561038557600080fd5b50610399610394366004613110565b610b79565b604051901515815260200161021d565b3480156103b557600080fd5b506000546103999060ff1681565b3480156103cf57600080fd5b506103d860c881565b60405190815260200161021d565b3480156103f257600080fd5b506103d860045481565b34801561040857600080fd5b506103d860095481565b34801561041e57600080fd5b506101f261042d366004613129565b610b99565b34801561043e57600080fd5b506101f261044d36600461332a565b610d14565b34801561045e57600080fd5b5061047261046d36600461337e565b61138d565b60405161021d91906133f3565b34801561048b57600080fd5b506103d860055481565b3480156104a157600080fd5b506103d861038481565b3480156104b757600080fd5b506101f261144a565b3480156104cc57600080fd5b506104e06104db3660046134d6565b6114f9565b60405160ff909116815260200161021d565b3480156104fe57600080fd5b506103d861050d366004613110565b6118b1565b34801561051e57600080fd5b5061053261052d36600461337e565b6118d2565b60405161021d9190613561565b34801561054b57600080fd5b506102097f000000000000000000000000000000000000000000000000000000000000000081565b34801561057f57600080fd5b506101f261058e3660046131b9565b61199e565b34801561059f57600080fd5b506103d86105ae3660046135ef565b611a4d565b3480156105bf57600080fd5b506103d860c381565b3480156105d457600080fd5b506105e86105e336600461337e565b611ae1565b60405161021d959493929190613637565b6101f26106073660046136d7565b611e4d565b34801561061857600080fd5b506001546103d8565b34801561062d57600080fd5b506103d8612014565b34801561064257600080fd5b506008546106539063ffffffff1681565b60405163ffffffff909116815260200161021d565b34801561067457600080fd5b506103d87f000000000000000000000000000000000000000000000000000000000000000081565b6000805160206139868339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070c919061375c565b6001600160a01b0316336001600160a01b0316146107455760405162461bcd60e51b815260040161073c90613779565b60405180910390fd5b6000805460ff19169055565b60006000805160206139868339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561079f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c3919061375c565b905090565b6001546060908211156107db5760015491505b60006107e784846137b3565b6001600160401b038111156107fe576107fe613406565b604051908082528060200260200182016040528015610827578160200160208202803683370190505b509050835b838110156108825760018181548110610847576108476137c6565b906000526020600020015482868361085f91906137b3565b8151811061086f5761086f6137c6565b602090810291909101015260010161082c565b5090505b92915050565b6000805160206139868339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc919061375c565b6001600160a01b0316336001600160a01b03161461092c5760405162461bcd60e51b815260040161073c90613779565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610979576040519150601f19603f3d011682016040523d82523d6000602084013e61097e565b606091505b505090508061098c57600080fd5b505050565b6109ed60405180610120016040528060008152602001600081526020016000815260200160006001600160a01b031681526020016000151581526020016060815260200160608152602001600015158152602001600081525090565b60408051610120810182526000848152600660208181528483208054855260018101548286015260028101548587015260048101546001600160a01b0381166060870152600160a01b900460ff16151560808601529287905290815260059091018054845181840281018401909552808552929360a08501939092830182828015610ab557602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610a865790505b5050505050815260200160066000858152602001908152602001600020600601805480602002602001604051908101604052809291908181526020018280548015610b3d57602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610b0e5790505b50505091835250506000848152600660208181526040808420600781015460ff1615158387015297909352526008909401549301929092525090565b60008181526002602052604081205460ff16158015610886575050151590565b6000805160206139868339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610be5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c09919061375c565b6001600160a01b0316336001600160a01b031614610c395760405162461bcd60e51b815260040161073c90613779565b6078821115610c835760405162461bcd60e51b815260206004820152601660248201527543616e6e6f742045786365656420312e32252046656560501b604482015260640161073c565b6103e8811115610ccd5760405162461bcd60e51b815260206004820152601560248201527443616e6e6f7420457863656564203130252046656560581b604482015260640161073c565b6004829055600581905560408051838152602081018390527f5dba31167d97811cf01a09fa52c7a1e9a3c9cb574cce8d0bf8dc7eadbb7ce252910160405180910390a15050565b6000805160206139868339815191526001600160a01b031663f71492206040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d84919061375c565b6001600160a01b0316336001600160a01b031614610dd85760405162461bcd60e51b815260206004820152601160248201527013db9b1e48149391c810dbdb9d1c9858dd607a1b604482015260640161073c565b6001600160401b038316600090815260036020526040902054610dfa846120e7565b801580610e1f57506000818152600660205260409020600401546001600160a01b0316155b80610e40575060008181526006602052604090206007015460ff1615156001145b15610e88577f2acb79a40a39601d6c546f6db7b37fd1018c0401f5f5e07754bff874ce6ac8a584828585604051610e7a94939291906137dc565b60405180910390a150505050565b6000818152600660205260408120600701805460ff19166001179055600d908490849081610eb857610eb86137c6565b90506020020135610ec99190613844565b610ed4906001613858565b60008281526006602052604081206005018054909190610ef657610ef66137c6565b90600052602060002090602091828204019190066101000a81548160ff021916908360ff160217905550600d83836001818110610f3557610f356137c6565b90506020020135610f469190613844565b610f51906001613858565b600082815260066020526040902060050180546001908110610f7557610f756137c6565b90600052602060002090602091828204019190066101000a81548160ff021916908360ff160217905550600d83836002818110610fb457610fb46137c6565b90506020020135610fc59190613844565b610fd0906001613858565b60008281526006602081905260408220018054909190610ff257610ff26137c6565b90600052602060002090602091828204019190066101000a81548160ff021916908360ff160217905550600d83836003818110611031576110316137c6565b905060200201356110429190613844565b61104d906001613858565b60008281526006602081905260409091200180546001908110611072576110726137c6565b90600052602060002090602091828204019190066101000a81548160ff021916908360ff160217905550600d838360048181106110b1576110b16137c6565b905060200201356110c29190613844565b6110cd906001613858565b6000828152600660205260409020600501805460029081106110f1576110f16137c6565b90600052602060002090602091828204019190066101000a81548160ff021916908360ff160217905550600d83836005818110611130576111306137c6565b905060200201356111419190613844565b61114c906001613858565b60008281526006602081905260409091200180546002908110611171576111716137c6565b90600052602060002090602091828204019190066101000a81548160ff021916908360ff16021790555060006112a36006600084815260200190815260200160002060050180548060200260200160405190810160405280929190818152602001828054801561121e57602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116111ef5790505b5050506000868152600660208181526040928390209091018054835181840281018401909452808452929450925083018282801561129957602002820191906000526020600020906000905b825461010083900a900460ff1681526020600192830181810494850194909303909202910180841161126a5790505b50505050506114f9565b60008381526006602052604081208054600182015460049092015493945091926112d9929190600160a01b900460ff1685611a4d565b6000848152600660205260409020600281018290556004810154600390910154919250611313916001600160a01b039091169083906121c3565b60008381526006602052604090206004810154600182015491546001600160a01b03909116917fc542d3f545425a3b913c4056355fd70bae2039ab35205203499d8bfd03c01ae891869161136691613858565b604080519283526020830191909152810184905260600160405180910390a2505050505050565b606081806001600160401b038111156113a8576113a8613406565b6040519080825280602002602001820160405280156113d1578160200160208202803683370190505b50915060005b8181101561144257600260008686848181106113f5576113f56137c6565b90506020020135815260200190815260200160002060009054906101000a900460ff1683828151811061142a5761142a6137c6565b911515602092830291909101909101526001016113d7565b505092915050565b6000805160206139868339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611496573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ba919061375c565b6001600160a01b0316336001600160a01b0316146114ea5760405162461bcd60e51b815260040161073c90613779565b6000805460ff19166001179055565b60008080805b60028160ff1610156115a757600a868260ff1681518110611522576115226137c6565b602002602001015160ff16101561155557858160ff1681518110611548576115486137c6565b6020026020010151830192505b600a858260ff168151811061156c5761156c6137c6565b602002602001015160ff16101561159f57848160ff1681518110611592576115926137c6565b6020026020010151820191505b6001016114ff565b506115b3600a8361386b565b91506115c0600a8261386b565b90508160ff16600814806115d757508160ff166009145b806115e557508060ff166008145b806115f357508060ff166009145b15611635578060ff168260ff16111561161157600092505050610886565b8060ff168260ff16101561162a57600192505050610886565b600292505050610886565b60058260ff161161183a57600a85600281518110611655576116556137c6565b602002602001015160ff1610156116955784600281518110611679576116796137c6565b602002602001015182019150600a82611692919061386b565b91505b60028160ff16116116f857600a846002815181106116b5576116b56137c6565b602002602001015160ff1610156116f357836002815181106116d9576116d96137c6565b6020908102919091010151016116f0600a8261386b565b90505b611898565b8060ff1660030361173d5784600281518110611716576117166137c6565b602002602001015160ff166008146116f357600a846002815181106116b5576116b56137c6565b8060ff166004036117ae5760028560028151811061175d5761175d6137c6565b602002602001015160ff16101580156117945750600785600281518110611786576117866137c6565b602002602001015160ff1611155b156116f357600a846002815181106116b5576116b56137c6565b8060ff166005036117ce5760048560028151811061175d5761175d6137c6565b8060ff166006036116f357846002815181106117ec576117ec6137c6565b602002602001015160ff1660061480611794575084600281518110611813576118136137c6565b602002602001015160ff166007036116f357600a846002815181106116b5576116b56137c6565b60058160ff161161189857600a8460028151811061185a5761185a6137c6565b602002602001015160ff161015611898578360028151811061187e5761187e6137c6565b602090810291909101015101611895600a8261386b565b90505b8060ff168260ff16111561161157600092505050610886565b600181815481106118c157600080fd5b600091825260209091200154905081565b6060816000816001600160401b038111156118ef576118ef613406565b60405190808252806020026020018201604052801561192257816020015b606081526020019060019003908161190d5790505b50905060005b8281101561199557611951868683818110611945576119456137c6565b90506020020135610991565b604051602001611961919061321a565b604051602081830303815290604052828281518110611982576119826137c6565b6020908102919091010152600101611928565b50949350505050565b6000805160206139868339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119ea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0e919061375c565b6001600160a01b0316336001600160a01b031614611a3e5760405162461bcd60e51b815260040161073c90613779565b611a498233836126ad565b5050565b600060ff8216158015611a5e575082155b15611a81576064611a7060c88761388d565b611a7a91906138a4565b9050611ab5565b8160ff166001148015611a9657506001831515145b15611ab5576064611aa860c38761388d565b611ab291906138a4565b90505b8160ff16600203611ad9578315611ad0576064610384850204015b8415611ad95784015b949350505050565b60608080808085806001600160401b03811115611b0057611b00613406565b604051908082528060200260200182016040528015611b29578160200160208202803683370190505b509550806001600160401b03811115611b4457611b44613406565b604051908082528060200260200182016040528015611b6d578160200160208202803683370190505b509450806001600160401b03811115611b8857611b88613406565b604051908082528060200260200182016040528015611bb1578160200160208202803683370190505b509350806001600160401b03811115611bcc57611bcc613406565b604051908082528060200260200182016040528015611bf5578160200160208202803683370190505b509250806001600160401b03811115611c1057611c10613406565b604051908082528060200260200182016040528015611c39578160200160208202803683370190505b50915060005b81811015611e4157600660008a8a84818110611c5d57611c5d6137c6565b90506020020135815260200190815260200160002060040160009054906101000a90046001600160a01b0316878281518110611c9b57611c9b6137c6565b60200260200101906001600160a01b031690816001600160a01b031681525050600660008a8a84818110611cd157611cd16137c6565b90506020020135815260200190815260200160002060010154600660008b8b85818110611d0057611d006137c6565b90506020020135815260200190815260200160002060000154611d239190613858565b868281518110611d3557611d356137c6565b602002602001018181525050600660008a8a84818110611d5757611d576137c6565b90506020020135815260200190815260200160002060020154858281518110611d8257611d826137c6565b602002602001018181525050600660008a8a84818110611da457611da46137c6565b90506020020135815260200190815260200160002060080154848281518110611dcf57611dcf6137c6565b602002602001018181525050600660008a8a84818110611df157611df16137c6565b90506020020135815260200190815260200160002060070160009054906101000a900460ff16838281518110611e2957611e296137c6565b91151560209283029190910190910152600101611c3f565b50509295509295909350565b826001600160a01b0381163314611f1757604051636d6d50a160e11b81523360048201526000805160206139868339815191529063dadaa14290602401602060405180830381865afa158015611ea7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ecb91906138b8565b611f175760405162461bcd60e51b815260206004820152601f60248201527f556e417574686f72697a656420546f20506c617920466f72204f746865727300604482015260640161073c565b6000805160206139868339815191526001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f8791906138b8565b15611fc75760405162461bcd60e51b815260206004820152601060248201526f105b1b0811d85b595cc814185d5cd95960821b604482015260640161073c565b60005460ff16156120035760405162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015260640161073c565b61200e8484846127de565b50505050565b60006000805160206139868339815191526001600160a01b031663f71492206040518163ffffffff1660e01b8152600401602060405180830381865afa158015612062573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612086919061375c565b6001600160a01b031663ced72f876040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c391906138d5565b6000805160206139868339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612133573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612157919061375c565b6001600160a01b0316638b3939f26040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561219157600080fd5b505af11580156121a5573d6000803e3d6000fd5b505050506001600160401b0316600090815260036020526040812055565b81156125d6578082106123db576000805160206139868339815191526001600160a01b031663a9a36dcd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561221c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612240919061375c565b6040516304ff60cf60e51b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b0385811660248301529190911690639fec19e09083906044016000604051808303818588803b1580156122ac57600080fd5b505af11580156122c0573d6000803e3d6000fd5b5050505050600081836122d391906137b3565b9050801561200e576000805160206139868339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234b919061375c565b60405163ae2f5d9360e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b03868116602483015260448201849052919091169063ae2f5d9390606401600060405180830381600087803b1580156123bd57600080fd5b505af11580156123d1573d6000803e3d6000fd5b5050505050505050565b6000805160206139868339815191526001600160a01b031663a9a36dcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612427573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061244b919061375c565b6040516304ff60cf60e51b81527f000000000000000000000000000000000000000000000000000000000000000060048201526001600160a01b0385811660248301529190911690639fec19e09084906044016000604051808303818588803b1580156124b757600080fd5b505af11580156124cb573d6000803e3d6000fd5b5050505050600082826124de91906137b3565b90506000805160206139868339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561252c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612550919061375c565b6001600160a01b031663b3cb6f1a827f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b815260040161259e91815260200190565b6000604051808303818588803b1580156125b757600080fd5b505af11580156125cb573d6000803e3d6000fd5b505050505050505050565b6000805160206139868339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612622573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612646919061375c565b6001600160a01b031663b3cb6f1a827f00000000000000000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b815260040161269491815260200190565b6000604051808303818588803b1580156123bd57600080fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283929087169161270991906138ee565b6000604051808303816000865af19150503d8060008114612746576040519150601f19603f3d011682016040523d82523d6000602084013e61274b565b606091505b509150915081801561277557508051158061277557508080602001905181019061277591906138b8565b6127d75760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b606482015260840161073c565b5050505050565b60006127e8612014565b9050600080808080806127fd888a018a61390a565b9550955095509550955095508634101561284b5760405162461bcd60e51b815260206004820152600f60248201526e22a9291d1026a4a710212aac9024a760891b604482015260640161073c565b61285486610b79565b15156001146128975760405162461bcd60e51b815260206004820152600f60248201526e125b9d985b1a590811d85b59481251608a1b604482015260640161073c565b60006128a388346137b3565b9050600081116128ea5760405162461bcd60e51b8152602060048201526012602482015271125b9d985b1a590810995d08105b5bdd5b9d60721b604482015260640161073c565b6128f48587613858565b81146129385760405162461bcd60e51b8152602060048201526013602482015272496e76616c69642042657420416d6f756e747360681b604482015260640161073c565b60008615612958576127106004548802816129555761295561382e565b04015b8515612976576127106005548702816129735761297361382e565b04015b61298181858e612b5d565b6040518061014001604052808881526020018781526020016000815260200182846129ac91906137b3565b81526001600160a01b038e166020820152861515604082015260600160036040519080825280602002602001820160405280156129f3578160200160208202803683370190505b50815260408051600380825260808201909252602092830192909190820160608036833701905050815260006020808301829052426040938401528b825260068152908290208351815583820151600182015591830151600283015560608301516003830155608083015160048301805460a08601511515600160a01b026001600160a81b03199091166001600160a01b039093169290921791909117905560c08301518051612aa99260058501920190613055565b5060e08201518051612ac5916006840191602090910190613055565b5061010082015160078201805460ff191691151591909117905561012090910151600890910155612af68c89612c07565b612b008c83612cfb565b8b6001600160a01b03167fea32a03505fd9f04d664676d72295a86c5fb0465e69654751907ca305bc1d1c789604051612b3b91815260200190565b60405180910390a2612b4f88600685612df9565b505050505050505050505050565b6000805160206139868339815191526001600160a01b031663b3f006746040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bcd919061375c565b60405163bc5101e560e01b81526001600160a01b0384811660048301528381166024830152919091169063bc5101e5908590604401612694565b604051639a4918c160e01b81526001600160a01b0383811660048301527f00000000000000000000000000000000000000000000000000000000000000006024830152604482018390527f00000000000000000000000000000000000000000000000000000000000000001690639a4918c190606401600060405180830381600087803b158015612c9757600080fd5b505af1158015612cab573d6000803e3d6000fd5b50506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601849055600093845260026020526040909320805460ff1916909317909255505050565b6000805160206139868339815191526001600160a01b031663846c43986040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6b919061375c565b60405163759ecdf560e11b81526001600160a01b038481166004830152602482018490527f00000000000000000000000000000000000000000000000000000000000000006044830152919091169063eb3d9bea90606401600060405180830381600087803b158015612ddd57600080fd5b505af1158015612df1573d6000803e3d6000fd5b505050505050565b60006000805160206139868339815191526001600160a01b031663f71492206040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e6b919061375c565b6001600160a01b03166397cca7af612e81612014565b6040516001600160e01b031960e084901b1681526004810186905260ff8716602482015260440160206040518083038185885af1158015612ec6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612eeb9190613968565b6001600160401b03811660009081526003602052604090205490915015612f475760405162461bcd60e51b815260206004820152601060248201526f52657175657374496420496e2055736560801b604482015260640161073c565b6001600160401b038116600090815260036020908152604091829020869055815160016264c53160e01b0319815291516000805160206139868339815191529263ff9b3acf9260048083019391928290030181865afa158015612fae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd2919061375c565b6001600160a01b0316638d7fe4786040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561300c57600080fd5b505af1158015613020573d6000803e3d6000fd5b505050507f9ac10fb18c93d33ad7b0a941897aef048d0f8d30756684e82b4552ba12764d4584604051610e7a91815260200190565b82805482825590600052602060002090601f016020900481019282156130eb5791602002820160005b838211156130bc57835183826101000a81548160ff021916908360ff160217905550926020019260010160208160000104928301926001030261307e565b80156130e95782816101000a81549060ff02191690556001016020816000010492830192600103026130bc565b505b506130f79291506130fb565b5090565b5b808211156130f757600081556001016130fc565b60006020828403121561312257600080fd5b5035919050565b6000806040838503121561313c57600080fd5b50508035926020909101359150565b600081518084526020840193506020830160005b8281101561317d57815186526020958601959091019060010161315f565b5093949350505050565b60208152600061319a602083018461314b565b9392505050565b6001600160a01b03811681146131b657600080fd5b50565b600080604083850312156131cc57600080fd5b82356131d7816131a1565b946020939093013593505050565b600081518084526020840193506020830160005b8281101561317d57815160ff168652602095860195909101906001016131f9565b602081528151602082015260208201516040820152604082015160608201526000606083015161325560808401826001600160a01b03169052565b50608083015180151560a08401525060a083015161012060c084015261327f6101408401826131e5565b905060c0840151601f198483030160e085015261329c82826131e5565b91505060e08401516132b361010085018215159052565b506101008401516101208401528091505092915050565b6001600160401b03811681146131b657600080fd5b60008083601f8401126132f157600080fd5b5081356001600160401b0381111561330857600080fd5b6020830191508360208260051b850101111561332357600080fd5b9250929050565b60008060006040848603121561333f57600080fd5b833561334a816132ca565b925060208401356001600160401b0381111561336557600080fd5b613371868287016132df565b9497909650939450505050565b6000806020838503121561339157600080fd5b82356001600160401b038111156133a757600080fd5b6133b3858286016132df565b90969095509350505050565b600081518084526020840193506020830160005b8281101561317d57815115158652602095860195909101906001016133d3565b60208152600061319a60208301846133bf565b634e487b7160e01b600052604160045260246000fd5b803560ff8116811461342d57600080fd5b919050565b600082601f83011261344357600080fd5b81356001600160401b0381111561345c5761345c613406565b8060051b604051601f19603f83011681018181106001600160401b038211171561348857613488613406565b6040529182526020818501810192908101868411156134a657600080fd5b6020860192505b838310156134cc576134be8361341c565b8152602092830192016134ad565b5095945050505050565b600080604083850312156134e957600080fd5b82356001600160401b038111156134ff57600080fd5b61350b85828601613432565b92505060208301356001600160401b0381111561352757600080fd5b61353385828601613432565b9150509250929050565b60005b83811015613558578181015183820152602001613540565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156135d557603f19878603018452815180518087526135b281602089016020850161353d565b601f01601f19169590950160209081019550938401939190910190600101613589565b50929695505050505050565b80151581146131b657600080fd5b6000806000806080858703121561360557600080fd5b8435935060208501359250604085013561361e816135e1565b915061362c6060860161341c565b905092959194509250565b60a08082528651908201819052600090602088019060c0840190835b8181101561367a5783516001600160a01b0316835260209384019390920191600101613653565b5050838103602085015261368e818961314b565b91505082810360408401526136a3818761314b565b905082810360608401526136b7818661314b565b905082810360808401526136cb81856133bf565b98975050505050505050565b6000806000604084860312156136ec57600080fd5b83356136f7816131a1565b925060208401356001600160401b0381111561371257600080fd5b8401601f8101861361372357600080fd5b80356001600160401b0381111561373957600080fd5b86602082840101111561374b57600080fd5b939660209190910195509293505050565b60006020828403121561376e57600080fd5b815161319a816131a1565b6020808252600a908201526927b7363c9027bbb732b960b11b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b818103818111156108865761088661379d565b634e487b7160e01b600052603260045260246000fd5b6001600160401b038516815260208101849052606060408201819052810182905260006001600160fb1b0383111561381357600080fd5b8260051b808560808501379190910160800195945050505050565b634e487b7160e01b600052601260045260246000fd5b6000826138535761385361382e565b500690565b808201808211156108865761088661379d565b600060ff83168061387e5761387e61382e565b8060ff84160691505092915050565b80820281158282048414176108865761088661379d565b6000826138b3576138b361382e565b500490565b6000602082840312156138ca57600080fd5b815161319a816135e1565b6000602082840312156138e757600080fd5b5051919050565b6000825161390081846020870161353d565b9190910192915050565b60008060008060008060c0878903121561392357600080fd5b8635955060208701359450604087013593506060870135613943816135e1565b92506080870135613953816131a1565b8092505060a087013590509295509295509295565b60006020828403121561397a57600080fd5b815161319a816132ca56fe0000000000000000000000008632f22e5a921c751cfbbff92f058a3b11e96b8aa2646970667358221220712d9c740ebb75293de500fab6674451b8a5d918f68e38fc1e7c8ac18ad5753164736f6c634300081c00330000000000000000000000000000000000000000000000000000000000000006000000000000000000000000fa296156dac165af92f7fdb012b61a874670e1aa
Deployed Bytecode
0x6080604052600436106101d85760003560e01c80637c274abe11610102578063af31b8b311610095578063cc81d05511610064578063cc81d0551461060c578063f0034a7e14610621578063fa3208ff14610636578063fdcdb06b1461066857600080fd5b8063af31b8b314610593578063bad8054b146105b3578063c4fd5d6d146105c8578063c811ad71146105f957600080fd5b806389fc2c0f116100d157806389fc2c0f146104f257806391ea41e61461051257806398daac831461053f5780639e281a981461057357600080fd5b80637c274abe1461047f5780637e0a9b29146104955780638456cb59146104ab578063896c0591146104c057600080fd5b806351e925591161017a578063720f428f11610149578063720f428f146103fc57806372b4916114610412578063749fa03c146104325780637b8d38791461045257600080fd5b806351e92559146103795780635c975abb146103a95780635ca79647146103c35780636d3f47ff146103e657600080fd5b806332883e7e116101b657806332883e7e146102dd5780634782f7791461030a57806347e1d5501461032a578063481c6a751461035757600080fd5b8063046f7da2146101dd57806304e2064f146101f4578063117a5b9014610226575b600080fd5b3480156101e957600080fd5b506101f261069c565b005b34801561020057600080fd5b50610209610751565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561023257600080fd5b50610295610241366004613110565b600660205260009081526040902080546001820154600283015460038401546004850154600786015460089096015494959394929391926001600160a01b0382169260ff600160a01b909304831692169088565b6040805198895260208901979097529587019490945260608601929092526001600160a01b03166080850152151560a0840152151560c083015260e08201526101000161021d565b3480156102e957600080fd5b506102fd6102f8366004613129565b6107c8565b60405161021d9190613187565b34801561031657600080fd5b506101f26103253660046131b9565b61088c565b34801561033657600080fd5b5061034a610345366004613110565b610991565b60405161021d919061321a565b34801561036357600080fd5b5061020960008051602061398683398151915281565b34801561038557600080fd5b50610399610394366004613110565b610b79565b604051901515815260200161021d565b3480156103b557600080fd5b506000546103999060ff1681565b3480156103cf57600080fd5b506103d860c881565b60405190815260200161021d565b3480156103f257600080fd5b506103d860045481565b34801561040857600080fd5b506103d860095481565b34801561041e57600080fd5b506101f261042d366004613129565b610b99565b34801561043e57600080fd5b506101f261044d36600461332a565b610d14565b34801561045e57600080fd5b5061047261046d36600461337e565b61138d565b60405161021d91906133f3565b34801561048b57600080fd5b506103d860055481565b3480156104a157600080fd5b506103d861038481565b3480156104b757600080fd5b506101f261144a565b3480156104cc57600080fd5b506104e06104db3660046134d6565b6114f9565b60405160ff909116815260200161021d565b3480156104fe57600080fd5b506103d861050d366004613110565b6118b1565b34801561051e57600080fd5b5061053261052d36600461337e565b6118d2565b60405161021d9190613561565b34801561054b57600080fd5b506102097f000000000000000000000000fa296156dac165af92f7fdb012b61a874670e1aa81565b34801561057f57600080fd5b506101f261058e3660046131b9565b61199e565b34801561059f57600080fd5b506103d86105ae3660046135ef565b611a4d565b3480156105bf57600080fd5b506103d860c381565b3480156105d457600080fd5b506105e86105e336600461337e565b611ae1565b60405161021d959493929190613637565b6101f26106073660046136d7565b611e4d565b34801561061857600080fd5b506001546103d8565b34801561062d57600080fd5b506103d8612014565b34801561064257600080fd5b506008546106539063ffffffff1681565b60405163ffffffff909116815260200161021d565b34801561067457600080fd5b506103d87f000000000000000000000000000000000000000000000000000000000000000681565b6000805160206139868339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070c919061375c565b6001600160a01b0316336001600160a01b0316146107455760405162461bcd60e51b815260040161073c90613779565b60405180910390fd5b6000805460ff19169055565b60006000805160206139868339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561079f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c3919061375c565b905090565b6001546060908211156107db5760015491505b60006107e784846137b3565b6001600160401b038111156107fe576107fe613406565b604051908082528060200260200182016040528015610827578160200160208202803683370190505b509050835b838110156108825760018181548110610847576108476137c6565b906000526020600020015482868361085f91906137b3565b8151811061086f5761086f6137c6565b602090810291909101015260010161082c565b5090505b92915050565b6000805160206139868339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc919061375c565b6001600160a01b0316336001600160a01b03161461092c5760405162461bcd60e51b815260040161073c90613779565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610979576040519150601f19603f3d011682016040523d82523d6000602084013e61097e565b606091505b505090508061098c57600080fd5b505050565b6109ed60405180610120016040528060008152602001600081526020016000815260200160006001600160a01b031681526020016000151581526020016060815260200160608152602001600015158152602001600081525090565b60408051610120810182526000848152600660208181528483208054855260018101548286015260028101548587015260048101546001600160a01b0381166060870152600160a01b900460ff16151560808601529287905290815260059091018054845181840281018401909552808552929360a08501939092830182828015610ab557602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610a865790505b5050505050815260200160066000858152602001908152602001600020600601805480602002602001604051908101604052809291908181526020018280548015610b3d57602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610b0e5790505b50505091835250506000848152600660208181526040808420600781015460ff1615158387015297909352526008909401549301929092525090565b60008181526002602052604081205460ff16158015610886575050151590565b6000805160206139868339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610be5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c09919061375c565b6001600160a01b0316336001600160a01b031614610c395760405162461bcd60e51b815260040161073c90613779565b6078821115610c835760405162461bcd60e51b815260206004820152601660248201527543616e6e6f742045786365656420312e32252046656560501b604482015260640161073c565b6103e8811115610ccd5760405162461bcd60e51b815260206004820152601560248201527443616e6e6f7420457863656564203130252046656560581b604482015260640161073c565b6004829055600581905560408051838152602081018390527f5dba31167d97811cf01a09fa52c7a1e9a3c9cb574cce8d0bf8dc7eadbb7ce252910160405180910390a15050565b6000805160206139868339815191526001600160a01b031663f71492206040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d84919061375c565b6001600160a01b0316336001600160a01b031614610dd85760405162461bcd60e51b815260206004820152601160248201527013db9b1e48149391c810dbdb9d1c9858dd607a1b604482015260640161073c565b6001600160401b038316600090815260036020526040902054610dfa846120e7565b801580610e1f57506000818152600660205260409020600401546001600160a01b0316155b80610e40575060008181526006602052604090206007015460ff1615156001145b15610e88577f2acb79a40a39601d6c546f6db7b37fd1018c0401f5f5e07754bff874ce6ac8a584828585604051610e7a94939291906137dc565b60405180910390a150505050565b6000818152600660205260408120600701805460ff19166001179055600d908490849081610eb857610eb86137c6565b90506020020135610ec99190613844565b610ed4906001613858565b60008281526006602052604081206005018054909190610ef657610ef66137c6565b90600052602060002090602091828204019190066101000a81548160ff021916908360ff160217905550600d83836001818110610f3557610f356137c6565b90506020020135610f469190613844565b610f51906001613858565b600082815260066020526040902060050180546001908110610f7557610f756137c6565b90600052602060002090602091828204019190066101000a81548160ff021916908360ff160217905550600d83836002818110610fb457610fb46137c6565b90506020020135610fc59190613844565b610fd0906001613858565b60008281526006602081905260408220018054909190610ff257610ff26137c6565b90600052602060002090602091828204019190066101000a81548160ff021916908360ff160217905550600d83836003818110611031576110316137c6565b905060200201356110429190613844565b61104d906001613858565b60008281526006602081905260409091200180546001908110611072576110726137c6565b90600052602060002090602091828204019190066101000a81548160ff021916908360ff160217905550600d838360048181106110b1576110b16137c6565b905060200201356110c29190613844565b6110cd906001613858565b6000828152600660205260409020600501805460029081106110f1576110f16137c6565b90600052602060002090602091828204019190066101000a81548160ff021916908360ff160217905550600d83836005818110611130576111306137c6565b905060200201356111419190613844565b61114c906001613858565b60008281526006602081905260409091200180546002908110611171576111716137c6565b90600052602060002090602091828204019190066101000a81548160ff021916908360ff16021790555060006112a36006600084815260200190815260200160002060050180548060200260200160405190810160405280929190818152602001828054801561121e57602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116111ef5790505b5050506000868152600660208181526040928390209091018054835181840281018401909452808452929450925083018282801561129957602002820191906000526020600020906000905b825461010083900a900460ff1681526020600192830181810494850194909303909202910180841161126a5790505b50505050506114f9565b60008381526006602052604081208054600182015460049092015493945091926112d9929190600160a01b900460ff1685611a4d565b6000848152600660205260409020600281018290556004810154600390910154919250611313916001600160a01b039091169083906121c3565b60008381526006602052604090206004810154600182015491546001600160a01b03909116917fc542d3f545425a3b913c4056355fd70bae2039ab35205203499d8bfd03c01ae891869161136691613858565b604080519283526020830191909152810184905260600160405180910390a2505050505050565b606081806001600160401b038111156113a8576113a8613406565b6040519080825280602002602001820160405280156113d1578160200160208202803683370190505b50915060005b8181101561144257600260008686848181106113f5576113f56137c6565b90506020020135815260200190815260200160002060009054906101000a900460ff1683828151811061142a5761142a6137c6565b911515602092830291909101909101526001016113d7565b505092915050565b6000805160206139868339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611496573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ba919061375c565b6001600160a01b0316336001600160a01b0316146114ea5760405162461bcd60e51b815260040161073c90613779565b6000805460ff19166001179055565b60008080805b60028160ff1610156115a757600a868260ff1681518110611522576115226137c6565b602002602001015160ff16101561155557858160ff1681518110611548576115486137c6565b6020026020010151830192505b600a858260ff168151811061156c5761156c6137c6565b602002602001015160ff16101561159f57848160ff1681518110611592576115926137c6565b6020026020010151820191505b6001016114ff565b506115b3600a8361386b565b91506115c0600a8261386b565b90508160ff16600814806115d757508160ff166009145b806115e557508060ff166008145b806115f357508060ff166009145b15611635578060ff168260ff16111561161157600092505050610886565b8060ff168260ff16101561162a57600192505050610886565b600292505050610886565b60058260ff161161183a57600a85600281518110611655576116556137c6565b602002602001015160ff1610156116955784600281518110611679576116796137c6565b602002602001015182019150600a82611692919061386b565b91505b60028160ff16116116f857600a846002815181106116b5576116b56137c6565b602002602001015160ff1610156116f357836002815181106116d9576116d96137c6565b6020908102919091010151016116f0600a8261386b565b90505b611898565b8060ff1660030361173d5784600281518110611716576117166137c6565b602002602001015160ff166008146116f357600a846002815181106116b5576116b56137c6565b8060ff166004036117ae5760028560028151811061175d5761175d6137c6565b602002602001015160ff16101580156117945750600785600281518110611786576117866137c6565b602002602001015160ff1611155b156116f357600a846002815181106116b5576116b56137c6565b8060ff166005036117ce5760048560028151811061175d5761175d6137c6565b8060ff166006036116f357846002815181106117ec576117ec6137c6565b602002602001015160ff1660061480611794575084600281518110611813576118136137c6565b602002602001015160ff166007036116f357600a846002815181106116b5576116b56137c6565b60058160ff161161189857600a8460028151811061185a5761185a6137c6565b602002602001015160ff161015611898578360028151811061187e5761187e6137c6565b602090810291909101015101611895600a8261386b565b90505b8060ff168260ff16111561161157600092505050610886565b600181815481106118c157600080fd5b600091825260209091200154905081565b6060816000816001600160401b038111156118ef576118ef613406565b60405190808252806020026020018201604052801561192257816020015b606081526020019060019003908161190d5790505b50905060005b8281101561199557611951868683818110611945576119456137c6565b90506020020135610991565b604051602001611961919061321a565b604051602081830303815290604052828281518110611982576119826137c6565b6020908102919091010152600101611928565b50949350505050565b6000805160206139868339815191526001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119ea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0e919061375c565b6001600160a01b0316336001600160a01b031614611a3e5760405162461bcd60e51b815260040161073c90613779565b611a498233836126ad565b5050565b600060ff8216158015611a5e575082155b15611a81576064611a7060c88761388d565b611a7a91906138a4565b9050611ab5565b8160ff166001148015611a9657506001831515145b15611ab5576064611aa860c38761388d565b611ab291906138a4565b90505b8160ff16600203611ad9578315611ad0576064610384850204015b8415611ad95784015b949350505050565b60608080808085806001600160401b03811115611b0057611b00613406565b604051908082528060200260200182016040528015611b29578160200160208202803683370190505b509550806001600160401b03811115611b4457611b44613406565b604051908082528060200260200182016040528015611b6d578160200160208202803683370190505b509450806001600160401b03811115611b8857611b88613406565b604051908082528060200260200182016040528015611bb1578160200160208202803683370190505b509350806001600160401b03811115611bcc57611bcc613406565b604051908082528060200260200182016040528015611bf5578160200160208202803683370190505b509250806001600160401b03811115611c1057611c10613406565b604051908082528060200260200182016040528015611c39578160200160208202803683370190505b50915060005b81811015611e4157600660008a8a84818110611c5d57611c5d6137c6565b90506020020135815260200190815260200160002060040160009054906101000a90046001600160a01b0316878281518110611c9b57611c9b6137c6565b60200260200101906001600160a01b031690816001600160a01b031681525050600660008a8a84818110611cd157611cd16137c6565b90506020020135815260200190815260200160002060010154600660008b8b85818110611d0057611d006137c6565b90506020020135815260200190815260200160002060000154611d239190613858565b868281518110611d3557611d356137c6565b602002602001018181525050600660008a8a84818110611d5757611d576137c6565b90506020020135815260200190815260200160002060020154858281518110611d8257611d826137c6565b602002602001018181525050600660008a8a84818110611da457611da46137c6565b90506020020135815260200190815260200160002060080154848281518110611dcf57611dcf6137c6565b602002602001018181525050600660008a8a84818110611df157611df16137c6565b90506020020135815260200190815260200160002060070160009054906101000a900460ff16838281518110611e2957611e296137c6565b91151560209283029190910190910152600101611c3f565b50509295509295909350565b826001600160a01b0381163314611f1757604051636d6d50a160e11b81523360048201526000805160206139868339815191529063dadaa14290602401602060405180830381865afa158015611ea7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ecb91906138b8565b611f175760405162461bcd60e51b815260206004820152601f60248201527f556e417574686f72697a656420546f20506c617920466f72204f746865727300604482015260640161073c565b6000805160206139868339815191526001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f8791906138b8565b15611fc75760405162461bcd60e51b815260206004820152601060248201526f105b1b0811d85b595cc814185d5cd95960821b604482015260640161073c565b60005460ff16156120035760405162461bcd60e51b815260206004820152600660248201526514185d5cd95960d21b604482015260640161073c565b61200e8484846127de565b50505050565b60006000805160206139868339815191526001600160a01b031663f71492206040518163ffffffff1660e01b8152600401602060405180830381865afa158015612062573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612086919061375c565b6001600160a01b031663ced72f876040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c391906138d5565b6000805160206139868339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612133573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612157919061375c565b6001600160a01b0316638b3939f26040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561219157600080fd5b505af11580156121a5573d6000803e3d6000fd5b505050506001600160401b0316600090815260036020526040812055565b81156125d6578082106123db576000805160206139868339815191526001600160a01b031663a9a36dcd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561221c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612240919061375c565b6040516304ff60cf60e51b81527f000000000000000000000000000000000000000000000000000000000000000660048201526001600160a01b0385811660248301529190911690639fec19e09083906044016000604051808303818588803b1580156122ac57600080fd5b505af11580156122c0573d6000803e3d6000fd5b5050505050600081836122d391906137b3565b9050801561200e576000805160206139868339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612327573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234b919061375c565b60405163ae2f5d9360e01b81527f000000000000000000000000000000000000000000000000000000000000000660048201526001600160a01b03868116602483015260448201849052919091169063ae2f5d9390606401600060405180830381600087803b1580156123bd57600080fd5b505af11580156123d1573d6000803e3d6000fd5b5050505050505050565b6000805160206139868339815191526001600160a01b031663a9a36dcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612427573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061244b919061375c565b6040516304ff60cf60e51b81527f000000000000000000000000000000000000000000000000000000000000000660048201526001600160a01b0385811660248301529190911690639fec19e09084906044016000604051808303818588803b1580156124b757600080fd5b505af11580156124cb573d6000803e3d6000fd5b5050505050600082826124de91906137b3565b90506000805160206139868339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561252c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612550919061375c565b6001600160a01b031663b3cb6f1a827f00000000000000000000000000000000000000000000000000000000000000066040518363ffffffff1660e01b815260040161259e91815260200190565b6000604051808303818588803b1580156125b757600080fd5b505af11580156125cb573d6000803e3d6000fd5b505050505050505050565b6000805160206139868339815191526001600160a01b031663ff9b3acf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612622573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612646919061375c565b6001600160a01b031663b3cb6f1a827f00000000000000000000000000000000000000000000000000000000000000066040518363ffffffff1660e01b815260040161269491815260200190565b6000604051808303818588803b1580156123bd57600080fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283929087169161270991906138ee565b6000604051808303816000865af19150503d8060008114612746576040519150601f19603f3d011682016040523d82523d6000602084013e61274b565b606091505b509150915081801561277557508051158061277557508080602001905181019061277591906138b8565b6127d75760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b606482015260840161073c565b5050505050565b60006127e8612014565b9050600080808080806127fd888a018a61390a565b9550955095509550955095508634101561284b5760405162461bcd60e51b815260206004820152600f60248201526e22a9291d1026a4a710212aac9024a760891b604482015260640161073c565b61285486610b79565b15156001146128975760405162461bcd60e51b815260206004820152600f60248201526e125b9d985b1a590811d85b59481251608a1b604482015260640161073c565b60006128a388346137b3565b9050600081116128ea5760405162461bcd60e51b8152602060048201526012602482015271125b9d985b1a590810995d08105b5bdd5b9d60721b604482015260640161073c565b6128f48587613858565b81146129385760405162461bcd60e51b8152602060048201526013602482015272496e76616c69642042657420416d6f756e747360681b604482015260640161073c565b60008615612958576127106004548802816129555761295561382e565b04015b8515612976576127106005548702816129735761297361382e565b04015b61298181858e612b5d565b6040518061014001604052808881526020018781526020016000815260200182846129ac91906137b3565b81526001600160a01b038e166020820152861515604082015260600160036040519080825280602002602001820160405280156129f3578160200160208202803683370190505b50815260408051600380825260808201909252602092830192909190820160608036833701905050815260006020808301829052426040938401528b825260068152908290208351815583820151600182015591830151600283015560608301516003830155608083015160048301805460a08601511515600160a01b026001600160a81b03199091166001600160a01b039093169290921791909117905560c08301518051612aa99260058501920190613055565b5060e08201518051612ac5916006840191602090910190613055565b5061010082015160078201805460ff191691151591909117905561012090910151600890910155612af68c89612c07565b612b008c83612cfb565b8b6001600160a01b03167fea32a03505fd9f04d664676d72295a86c5fb0465e69654751907ca305bc1d1c789604051612b3b91815260200190565b60405180910390a2612b4f88600685612df9565b505050505050505050505050565b6000805160206139868339815191526001600160a01b031663b3f006746040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bcd919061375c565b60405163bc5101e560e01b81526001600160a01b0384811660048301528381166024830152919091169063bc5101e5908590604401612694565b604051639a4918c160e01b81526001600160a01b0383811660048301527f00000000000000000000000000000000000000000000000000000000000000066024830152604482018390527f000000000000000000000000fa296156dac165af92f7fdb012b61a874670e1aa1690639a4918c190606401600060405180830381600087803b158015612c9757600080fd5b505af1158015612cab573d6000803e3d6000fd5b50506001805480820182557fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601849055600093845260026020526040909320805460ff1916909317909255505050565b6000805160206139868339815191526001600160a01b031663846c43986040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6b919061375c565b60405163759ecdf560e11b81526001600160a01b038481166004830152602482018490527f00000000000000000000000000000000000000000000000000000000000000066044830152919091169063eb3d9bea90606401600060405180830381600087803b158015612ddd57600080fd5b505af1158015612df1573d6000803e3d6000fd5b505050505050565b60006000805160206139868339815191526001600160a01b031663f71492206040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e6b919061375c565b6001600160a01b03166397cca7af612e81612014565b6040516001600160e01b031960e084901b1681526004810186905260ff8716602482015260440160206040518083038185885af1158015612ec6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612eeb9190613968565b6001600160401b03811660009081526003602052604090205490915015612f475760405162461bcd60e51b815260206004820152601060248201526f52657175657374496420496e2055736560801b604482015260640161073c565b6001600160401b038116600090815260036020908152604091829020869055815160016264c53160e01b0319815291516000805160206139868339815191529263ff9b3acf9260048083019391928290030181865afa158015612fae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd2919061375c565b6001600160a01b0316638d7fe4786040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561300c57600080fd5b505af1158015613020573d6000803e3d6000fd5b505050507f9ac10fb18c93d33ad7b0a941897aef048d0f8d30756684e82b4552ba12764d4584604051610e7a91815260200190565b82805482825590600052602060002090601f016020900481019282156130eb5791602002820160005b838211156130bc57835183826101000a81548160ff021916908360ff160217905550926020019260010160208160000104928301926001030261307e565b80156130e95782816101000a81549060ff02191690556001016020816000010492830192600103026130bc565b505b506130f79291506130fb565b5090565b5b808211156130f757600081556001016130fc565b60006020828403121561312257600080fd5b5035919050565b6000806040838503121561313c57600080fd5b50508035926020909101359150565b600081518084526020840193506020830160005b8281101561317d57815186526020958601959091019060010161315f565b5093949350505050565b60208152600061319a602083018461314b565b9392505050565b6001600160a01b03811681146131b657600080fd5b50565b600080604083850312156131cc57600080fd5b82356131d7816131a1565b946020939093013593505050565b600081518084526020840193506020830160005b8281101561317d57815160ff168652602095860195909101906001016131f9565b602081528151602082015260208201516040820152604082015160608201526000606083015161325560808401826001600160a01b03169052565b50608083015180151560a08401525060a083015161012060c084015261327f6101408401826131e5565b905060c0840151601f198483030160e085015261329c82826131e5565b91505060e08401516132b361010085018215159052565b506101008401516101208401528091505092915050565b6001600160401b03811681146131b657600080fd5b60008083601f8401126132f157600080fd5b5081356001600160401b0381111561330857600080fd5b6020830191508360208260051b850101111561332357600080fd5b9250929050565b60008060006040848603121561333f57600080fd5b833561334a816132ca565b925060208401356001600160401b0381111561336557600080fd5b613371868287016132df565b9497909650939450505050565b6000806020838503121561339157600080fd5b82356001600160401b038111156133a757600080fd5b6133b3858286016132df565b90969095509350505050565b600081518084526020840193506020830160005b8281101561317d57815115158652602095860195909101906001016133d3565b60208152600061319a60208301846133bf565b634e487b7160e01b600052604160045260246000fd5b803560ff8116811461342d57600080fd5b919050565b600082601f83011261344357600080fd5b81356001600160401b0381111561345c5761345c613406565b8060051b604051601f19603f83011681018181106001600160401b038211171561348857613488613406565b6040529182526020818501810192908101868411156134a657600080fd5b6020860192505b838310156134cc576134be8361341c565b8152602092830192016134ad565b5095945050505050565b600080604083850312156134e957600080fd5b82356001600160401b038111156134ff57600080fd5b61350b85828601613432565b92505060208301356001600160401b0381111561352757600080fd5b61353385828601613432565b9150509250929050565b60005b83811015613558578181015183820152602001613540565b50506000910152565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156135d557603f19878603018452815180518087526135b281602089016020850161353d565b601f01601f19169590950160209081019550938401939190910190600101613589565b50929695505050505050565b80151581146131b657600080fd5b6000806000806080858703121561360557600080fd5b8435935060208501359250604085013561361e816135e1565b915061362c6060860161341c565b905092959194509250565b60a08082528651908201819052600090602088019060c0840190835b8181101561367a5783516001600160a01b0316835260209384019390920191600101613653565b5050838103602085015261368e818961314b565b91505082810360408401526136a3818761314b565b905082810360608401526136b7818661314b565b905082810360808401526136cb81856133bf565b98975050505050505050565b6000806000604084860312156136ec57600080fd5b83356136f7816131a1565b925060208401356001600160401b0381111561371257600080fd5b8401601f8101861361372357600080fd5b80356001600160401b0381111561373957600080fd5b86602082840101111561374b57600080fd5b939660209190910195509293505050565b60006020828403121561376e57600080fd5b815161319a816131a1565b6020808252600a908201526927b7363c9027bbb732b960b11b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b818103818111156108865761088661379d565b634e487b7160e01b600052603260045260246000fd5b6001600160401b038516815260208101849052606060408201819052810182905260006001600160fb1b0383111561381357600080fd5b8260051b808560808501379190910160800195945050505050565b634e487b7160e01b600052601260045260246000fd5b6000826138535761385361382e565b500690565b808201808211156108865761088661379d565b600060ff83168061387e5761387e61382e565b8060ff84160691505092915050565b80820281158282048414176108865761088661379d565b6000826138b3576138b361382e565b500490565b6000602082840312156138ca57600080fd5b815161319a816135e1565b6000602082840312156138e757600080fd5b5051919050565b6000825161390081846020870161353d565b9190910192915050565b60008060008060008060c0878903121561392357600080fd5b8635955060208701359450604087013593506060870135613943816135e1565b92506080870135613953816131a1565b8092505060a087013590509295509295509295565b60006020828403121561397a57600080fd5b815161319a816132ca56fe0000000000000000000000008632f22e5a921c751cfbbff92f058a3b11e96b8aa2646970667358221220712d9c740ebb75293de500fab6674451b8a5d918f68e38fc1e7c8ac18ad5753164736f6c634300081c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000fa296156dac165af92f7fdb012b61a874670e1aa
-----Decoded View---------------
Arg [0] : GAME_ID_ (uint256): 6
Arg [1] : history_ (address): 0xFa296156dAc165Af92F7Fdb012B61a874670e1AA
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [1] : 000000000000000000000000fa296156dac165af92f7fdb012b61a874670e1aa
Deployed Bytecode Sourcemap
13067:14239:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6762:70;;;;;;;;;;;;;:::i;:::-;;11539:91;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;287:32:1;;;269:51;;257:2;242:18;11539:91:0;;;;;;;;14133:40;;;;;;;;;;-1:-1:-1;14133:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14133:40:0;;;;-1:-1:-1;;;14133:40:0;;;;;;;;;;;;;;989:25:1;;;1045:2;1030:18;;1023:34;;;;1073:18;;;1066:34;;;;1131:2;1116:18;;1109:34;;;;-1:-1:-1;;;;;1180:32:1;1174:3;1159:19;;1152:61;1257:14;1250:22;1200:3;1229:19;;1222:51;1317:14;1310:22;1304:3;1289:19;;1282:51;1364:3;1349:19;;1342:35;976:3;961:19;14133:40:0;658:725:1;12104:409:0;;;;;;;;;;-1:-1:-1;12104:409:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;6840:155::-;;;;;;;;;;-1:-1:-1;6840:155:0;;;;;:::i;:::-;;:::i;25376:609::-;;;;;;;;;;-1:-1:-1;25376:609:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1012:107::-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1012:107:0;;11638:135;;;;;;;;;;-1:-1:-1;11638:135:0;;;;;:::i;:::-;;:::i;:::-;;;4968:14:1;;4961:22;4943:41;;4931:2;4916:18;11638:135:0;4803:187:1;5911:26:0;;;;;;;;;;-1:-1:-1;5911:26:0;;;;;;;;13129:43;;;;;;;;;;;;13169:3;13129:43;;;;;5141:25:1;;;5129:2;5114:18;13129:43:0;4995:177:1;13294:36:0;;;;;;;;;;;;;;;;14361:26;;;;;;;;;;;;;;;;15257:445;;;;;;;;;;-1:-1:-1;15257:445:0;;;;;:::i;:::-;;:::i;18138:1826::-;;;;;;;;;;-1:-1:-1;18138:1826:0;;;;;:::i;:::-;;:::i;11781:315::-;;;;;;;;;;-1:-1:-1;11781:315:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;13337:36::-;;;;;;;;;;;;;;;;13229:43;;;;;;;;;;;;13269:3;13229:43;;6686:68;;;;;;;;;;;;;:::i;20052:4346::-;;;;;;;;;;-1:-1:-1;20052:4346:0;;;;;:::i;:::-;;:::i;:::-;;;9354:4:1;9342:17;;;9324:36;;9312:2;9297:18;20052:4346:0;9182:184:1;5984:28:0;;;;;;;;;;-1:-1:-1;5984:28:0;;;;;:::i;:::-;;:::i;25993:370::-;;;;;;;;;;-1:-1:-1;25993:370:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;5816:40::-;;;;;;;;;;;;;;;7003:143;;;;;;;;;;-1:-1:-1;7003:143:0;;;;;:::i;:::-;;:::i;24408:960::-;;;;;;;;;;-1:-1:-1;24408:960:0;;;;;:::i;:::-;;:::i;13179:43::-;;;;;;;;;;;;13219:3;13179:43;;26371:932;;;;;;;;;;-1:-1:-1;26371:932:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;7718:260::-;;;;;;:::i;:::-;;:::i;12521:102::-;;;;;;;;;;-1:-1:-1;12597:11:0;:18;12521:102;;7500:105;;;;;;;;;;;;;:::i;14300:29::-;;;;;;;;;;-1:-1:-1;14300:29:0;;;;;;;;;;;13862:10:1;13850:23;;;13832:42;;13820:2;13805:18;14300:29:0;13688:192:1;5751:32:0;;;;;;;;;;;;;;;6762:70;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;;;;;;;;;6819:5:::1;6810:14:::0;;-1:-1:-1;;6810:14:0::1;::::0;;6762:70::o;11539:91::-;11580:7;-1:-1:-1;;;;;;;;;;;;;;;;11607:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11600:22;;11539:91;:::o;12104:409::-;12223:11;:18;12184:16;;12217:24;;12213:81;;;12264:11;:18;;-1:-1:-1;12213:81:0;12304:20;12341:11;12347:5;12341:3;:11;:::i;:::-;-1:-1:-1;;;;;12327:26:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12327:26:0;-1:-1:-1;12304:49:0;-1:-1:-1;12378:5:0;12364:121;12389:3;12385:1;:7;12364:121;;;12427:11;12439:1;12427:14;;;;;;;;:::i;:::-;;;;;;;;;12410:3;12418:5;12414:1;:9;;;;:::i;:::-;12410:14;;;;;;;;:::i;:::-;;;;;;;;;;:31;12468:3;;12364:121;;;-1:-1:-1;12502:3:0;-1:-1:-1;12104:409:0;;;;;:::o;6840:155::-;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;6920:6:::1;6939:2;-1:-1:-1::0;;;;;6931:16:0::1;6955:6;6931:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6919:47;;;6985:1;6977:10;;;::::0;::::1;;6908:87;6840:155:::0;;:::o;25376:609::-;25445:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25445:25:0;25496:481;;;;;;;;-1:-1:-1;25547:14:0;;;:5;:14;;;;;;;:30;;25496:481;;25600:21;;;;25496:481;;;;25644:21;;;;25496:481;;;;25686:19;;;;-1:-1:-1;;;;;25686:19:0;;25496:481;;;;-1:-1:-1;;;25733:26:0;;;;25496:481;;;;;;25787:14;;;;;;;:26;;;;25496:481;;;;;;;;;;;;;;;;;;;;;;;;;;;25787:26;25496:481;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25841:5;:14;25847:7;25841:14;;;;;;;;;;;:26;;25496:481;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25496:481:0;;;-1:-1:-1;;25892:14:0;;;;:5;25496:481;25892:14;;;;;;;:23;;;;;;25496:481;;;;;;25941:14;;;;;:24;;;;;25496:481;;;;;;-1:-1:-1;25489:488:0;25376:609::o;11638:135::-;11698:4;11722:20;;;:12;:20;;;;;;;;:29;;;:43;;-1:-1:-1;;11755:10:0;;;11638:135::o;15257:445::-;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;15403:3:::1;15381:18;:25;;15359:97;;;::::0;-1:-1:-1;;;15359:97:0;;15289:2:1;15359:97:0::1;::::0;::::1;15271:21:1::0;15328:2;15308:18;;;15301:30;-1:-1:-1;;;15347:18:1;;;15340:52;15409:18;;15359:97:0::1;15087:346:1::0;15359:97:0::1;15502:5;15489:9;:18;;15467:89;;;::::0;-1:-1:-1;;;15467:89:0;;15640:2:1;15467:89:0::1;::::0;::::1;15622:21:1::0;15679:2;15659:18;;;15652:30;-1:-1:-1;;;15698:18:1;;;15691:51;15759:18;;15467:89:0::1;15438:345:1::0;15467:89:0::1;15567:15;:36:::0;;;15614:6:::1;:18:::0;;;15648:46:::1;::::0;;15962:25:1;;;16018:2;16003:18;;15996:34;;;15648:46:0::1;::::0;15935:18:1;15648:46:0::1;;;;;;;15257:445:::0;;:::o;18138:1826::-;-1:-1:-1;;;;;;;;;;;;;;;;1490:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1476:27:0;:10;-1:-1:-1;;;;;1476:27:0;;1454:94;;;;-1:-1:-1;;;1454:94:0;;16243:2:1;1454:94:0;;;16225:21:1;16282:2;16262:18;;;16255:30;-1:-1:-1;;;16301:18:1;;;16294:47;16358:18;;1454:94:0;16041:341:1;1454:94:0;-1:-1:-1;;;;;11499:24:0;;18319:14:::1;11499:24:::0;;;:13;:24;;;;;;18411:25:::1;11499:24:::0;18411:14:::1;:25::i;:::-;18494:11:::0;;;:47:::1;;-1:-1:-1::0;18539:1:0::1;18509:13:::0;;;:5:::1;:13;::::0;;;;:18:::1;;::::0;-1:-1:-1;;;;;18509:18:0::1;:32:::0;18494:47:::1;:81;;;-1:-1:-1::0;18545:13:0::1;::::0;;;:5:::1;:13;::::0;;;;:22:::1;;::::0;::::1;;:30;;:22:::0;:30:::1;18494:81;18490:190;;;18597:50;18616:9;18627:6;18635:11;;18597:50;;;;;;;;;:::i;:::-;;;;;;;;18662:7;6908:87;6840:155:::0;;:::o;18490:190::-:1;18723:13;::::0;;;:5:::1;:13;::::0;;;;:22:::1;;:29:::0;;-1:-1:-1;;18723:29:0::1;18748:4;18723:29;::::0;;18875:2:::1;::::0;18858:11;;;;:14;::::1;;;;:::i;:::-;;;;;;;:19;;;;:::i;:::-;18857:25;::::0;18881:1:::1;18857:25;:::i;:::-;18820:13;::::0;;;:5:::1;:13;::::0;;;;:25:::1;;:28:::0;;:25;;:13;:28:::1;;;;:::i;:::-;;;;;;;;;;;;;;;;;:63;;;;;;;;;;;;;;;;;;18949:2;18932:11;;18944:1;18932:14;;;;;;;:::i;:::-;;;;;;;:19;;;;:::i;:::-;18931:25;::::0;18955:1:::1;18931:25;:::i;:::-;18894:13;::::0;;;:5:::1;:13;::::0;;;;:25:::1;;:28:::0;;18920:1:::1;::::0;18894:28;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:63;;;;;;;;;;;;;;;;;;19023:2;19006:11;;19018:1;19006:14;;;;;;;:::i;:::-;;;;;;;:19;;;;:::i;:::-;19005:25;::::0;19029:1:::1;19005:25;:::i;:::-;18968:13;::::0;;;:5:::1;:13;::::0;;;;;;:25:::1;:28:::0;;:25;;:13;:28:::1;;;;:::i;:::-;;;;;;;;;;;;;;;;;:63;;;;;;;;;;;;;;;;;;19097:2;19080:11;;19092:1;19080:14;;;;;;;:::i;:::-;;;;;;;:19;;;;:::i;:::-;19079:25;::::0;19103:1:::1;19079:25;:::i;:::-;19042:13;::::0;;;:5:::1;:13;::::0;;;;;;;:25:::1;:28:::0;;19068:1:::1;::::0;19042:28;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:63;;;;;;;;;;;;;;;;;;19255:2;19238:11;;19250:1;19238:14;;;;;;;:::i;:::-;;;;;;;:19;;;;:::i;:::-;19237:25;::::0;19261:1:::1;19237:25;:::i;:::-;19200:13;::::0;;;:5:::1;:13;::::0;;;;:25:::1;;:28:::0;;19226:1:::1;::::0;19200:28;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:63;;;;;;;;;;;;;;;;;;19329:2;19312:11;;19324:1;19312:14;;;;;;;:::i;:::-;;;;;;;:19;;;;:::i;:::-;19311:25;::::0;19335:1:::1;19311:25;:::i;:::-;19274:13;::::0;;;:5:::1;:13;::::0;;;;;;;:25:::1;:28:::0;;19300:1:::1;::::0;19274:28;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:63;;;;;;;;;;;;;;;;;;19387:12;19402:69;19418:5;:13;19424:6;19418:13;;;;;;;;;;;:25;;19402:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;::::1;::::0;::::1;;;::::0;;::::1;;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;;;;;;-1:-1:-1::0;;;19445:13:0::1;::::0;;;:5:::1;:13;::::0;;;;;;;;:25;;::::1;19402:69:::0;;;;;;::::1;::::0;;;;;;;;;;;;-1:-1:-1;19445:25:0;-1:-1:-1;19402:69:0;::::1;19445:25:::0;19402:69;;::::1;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;::::1;::::0;::::1;;;::::0;;::::1;;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;;;;;;;;;;;:15;:69::i;:::-;19510:14;19543:13:::0;;;:5:::1;:13;::::0;;;;:29;;19574:20:::1;::::0;::::1;::::0;19596:25:::1;::::0;;::::1;::::0;19387:84;;-1:-1:-1;19510:14:0;;19527:103:::1;::::0;19543:29;19574:20;-1:-1:-1;;;19596:25:0;::::1;;;19387:84:::0;19527:15:::1;:103::i;:::-;19666:13;::::0;;;:5:::1;:13;::::0;;;;:20:::1;::::0;::::1;:29:::0;;;19748:18:::1;::::0;::::1;::::0;19776:28:::1;::::0;;::::1;::::0;19510:120;;-1:-1:-1;19734:71:0::1;::::0;-1:-1:-1;;;;;19748:18:0;;::::1;::::0;19510:120;;19734:13:::1;:71::i;:::-;19867:13;::::0;;;:5:::1;:13;::::0;;;;:18:::1;::::0;::::1;::::0;;19927:20;::::1;::::0;19895:29;;-1:-1:-1;;;;;19867:18:0;;::::1;::::0;19857:99:::1;::::0;19873:6;;19895:52:::1;::::0;::::1;:::i;:::-;19857:99;::::0;;17584:25:1;;;17640:2;17625:18;;17618:34;;;;17668:18;;17661:34;;;17572:2;17557:18;19857:99:0::1;;;;;;;18267:1697;;;18138:1826:::0;;;:::o;11781:315::-;11863:20;11907:7;;-1:-1:-1;;;;;11941:15:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11941:15:0;;11932:24;;11972:6;11967:122;11988:3;11984:1;:7;11967:122;;;12021:12;:24;12034:7;;12042:1;12034:10;;;;;;;:::i;:::-;;;;;;;12021:24;;;;;;;;;;;;;;;;;;;;;12009:6;12016:1;12009:9;;;;;;;;:::i;:::-;:36;;;:9;;;;;;;;;;;:36;12072:3;;11967:122;;;;11885:211;11781:315;;;;:::o;6686:68::-;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;6733:6:::1;:13:::0;;-1:-1:-1;;6733:13:0::1;6742:4;6733:13;::::0;;6686:68::o;20052:4346::-;20154:5;;;;20409:380;20431:1;20427;:5;;;20409:380;;;20471:2;20454:11;20466:1;20454:14;;;;;;;;;;:::i;:::-;;;;;;;:19;;;20450:141;;;20542:11;20554:1;20542:14;;;;;;;;;;:::i;:::-;;;;;;;20527:29;;;;20450:141;20626:2;20609:11;20621:1;20609:14;;;;;;;;;;:::i;:::-;;;;;;;:19;;;20605:141;;;20697:11;20709:1;20697:14;;;;;;;;;;:::i;:::-;;;;;;;20682:29;;;;20605:141;20772:3;;20409:380;;;-1:-1:-1;20823:17:0;20838:2;20823:17;;:::i;:::-;;-1:-1:-1;20851:17:0;20866:2;20851:17;;:::i;:::-;;;20921:11;:16;;20936:1;20921:16;:36;;;;20941:11;:16;;20956:1;20941:16;20921:36;:56;;;;20961:11;:16;;20976:1;20961:16;20921:56;:76;;;;20981:11;:16;;20996:1;20981:16;20921:76;20917:362;;;21083:11;21069:25;;:11;:25;;;21065:203;;;21122:1;21115:8;;;;;;21065:203;21163:11;21149:25;;:11;:25;;;21145:123;;;21202:1;21195:8;;;;;;21145:123;21251:1;21244:8;;;;;;21145:123;21379:1;21364:11;:16;;;21360:2840;;21458:2;21441:11;21453:1;21441:14;;;;;;;;:::i;:::-;;;;;;;:19;;;21437:177;;;21529:11;21541:1;21529:14;;;;;;;;:::i;:::-;;;;;;;21514:29;;;;21596:2;21581:17;;;;;:::i;:::-;;;21437:177;21711:1;21696:11;:16;;;21692:2096;;21796:2;21779:11;21791:1;21779:14;;;;;;;;:::i;:::-;;;;;;;:19;;;21775:197;;;21875:11;21887:1;21875:14;;;;;;;;:::i;:::-;;;;;;;;;;;21860:29;21935:17;21950:2;21860:29;21935:17;:::i;:::-;;;21775:197;21360:2840;;21692:2096;21999:11;:16;;22014:1;21999:16;21995:1793;;22114:11;22126:1;22114:14;;;;;;;;:::i;:::-;;;;;;;:19;;22132:1;22114:19;22110:284;;22179:2;22162:11;22174:1;22162:14;;;;;;;;:::i;21995:1793::-;22421:11;:16;;22436:1;22421:16;22417:1371;;22585:1;22567:11;22579:1;22567:14;;;;;;;;:::i;:::-;;;;;;;:19;;;;:42;;;;;22608:1;22590:11;22602:1;22590:14;;;;;;;;:::i;:::-;;;;;;;:19;;;;22567:42;22563:307;;;22655:2;22638:11;22650:1;22638:14;;;;;;;;:::i;22417:1371::-;22897:11;:16;;22912:1;22897:16;22893:895;;23039:1;23021:11;23033:1;23021:14;;;;;;;;:::i;22893:895::-;23351:11;:16;;23366:1;23351:16;23347:441;;23468:11;23480:1;23468:14;;;;;;;;:::i;:::-;;;;;;;:19;;23486:1;23468:19;:42;;;;23491:11;23503:1;23491:14;;;;;;;;:::i;:::-;;;;;;;:19;;23509:1;23491:19;23464:307;;23556:2;23539:11;23551:1;23539:14;;;;;;;;:::i;21360:2840::-;23955:1;23940:11;:16;;;23936:253;;23998:2;23981:11;23993:1;23981:14;;;;;;;;:::i;:::-;;;;;;;:19;;;23977:197;;;24077:11;24089:1;24077:14;;;;;;;;:::i;:::-;;;;;;;;;;;24062:29;24137:17;24152:2;24062:29;24137:17;:::i;:::-;;;23977:197;24230:11;24216:25;;:11;:25;;;24212:179;;;24265:1;24258:8;;;;;;5984:28;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5984:28:0;:::o;25993:370::-;26079:14;26117:7;26106:8;26117:7;-1:-1:-1;;;;;26168:16:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26142:42;;26200:6;26195:135;26216:3;26212:1;:7;26195:135;;;26262:23;26274:7;;26282:1;26274:10;;;;;;;:::i;:::-;;;;;;;26262:11;:23::i;:::-;26251:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;26237:8;26246:1;26237:11;;;;;;;;:::i;:::-;;;;;;;;;;:49;26313:3;;26195:135;;;-1:-1:-1;26347:8:0;25993:370;-1:-1:-1;;;;25993:370:0:o;7003:143::-;-1:-1:-1;;;;;;;;;;;;;;;;1196:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1182:29:0;:10;-1:-1:-1;;;;;1182:29:0;;1160:89;;;;-1:-1:-1;;;1160:89:0;;;;;;;:::i;:::-;7084:54:::1;7112:5;7119:10;7131:6;7084:27;:54::i;:::-;7003:143:::0;;:::o;24408:960::-;24524:14;24557:11;;;;:32;;;;-1:-1:-1;24572:17:0;;24557:32;24553:321;;;24682:3;24646:31;13169:3;24646:15;:31;:::i;:::-;24644:41;;;;:::i;:::-;24635:50;;24553:321;;;24721:6;:11;;24731:1;24721:11;:31;;;;-1:-1:-1;24748:4:0;24736:16;;;;24721:31;24717:157;;;24845:3;24809:31;13219:3;24809:15;:31;:::i;:::-;24807:41;;;;:::i;:::-;24798:50;;24717:157;24890:6;:11;;24900:1;24890:11;24886:475;;24956:10;;24952:198;;25094:3;13269;25070:19;;25068:29;25058:39;24952:198;25170:19;;25166:184;;25290:25;;25166:184;24408:960;;;;;;:::o;26371:932::-;26471:24;;;;;26677:7;;-1:-1:-1;;;;;26712:18:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26712:18:0;;26702:28;;26770:3;-1:-1:-1;;;;;26756:18:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26756:18:0;;26741:33;;26814:3;-1:-1:-1;;;;;26800:18:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26800:18:0;;26785:33;;26856:3;-1:-1:-1;;;;;26842:18:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26842:18:0;;26829:31;;26894:3;-1:-1:-1;;;;;26883:15:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26883:15:0;;26871:27;;26916:6;26911:385;26932:3;26928:1;:7;26911:385;;;26966:5;:17;26972:7;;26980:1;26972:10;;;;;;;:::i;:::-;;;;;;;26966:17;;;;;;;;;;;:22;;;;;;;;;;-1:-1:-1;;;;;26966:22:0;26953:7;26961:1;26953:10;;;;;;;;:::i;:::-;;;;;;:35;-1:-1:-1;;;;;26953:35:0;;;-1:-1:-1;;;;;26953:35:0;;;;;27057:5;:17;27063:7;;27071:1;27063:10;;;;;;;:::i;:::-;;;;;;;27057:17;;;;;;;;;;;:24;;;27021:5;:17;27027:7;;27035:1;27027:10;;;;;;;:::i;:::-;;;;;;;27021:17;;;;;;;;;;;:33;;;:60;;;;:::i;:::-;27003:12;27016:1;27003:15;;;;;;;;:::i;:::-;;;;;;:78;;;;;27114:5;:17;27120:7;;27128:1;27120:10;;;;;;;:::i;:::-;;;;;;;27114:17;;;;;;;;;;;:24;;;27096:12;27109:1;27096:15;;;;;;;;:::i;:::-;;;;;;:42;;;;;27169:5;:17;27175:7;;27183:1;27175:10;;;;;;;:::i;:::-;;;;;;;27169:17;;;;;;;;;;;:27;;;27153:10;27164:1;27153:13;;;;;;;;:::i;:::-;;;;;;:43;;;;;27226:5;:17;27232:7;;27240:1;27232:10;;;;;;;:::i;:::-;;;;;;;27226:17;;;;;;;;;;;:26;;;;;;;;;;;;27211:9;27221:1;27211:12;;;;;;;;:::i;:::-;:41;;;:12;;;;;;;;;;;:41;27279:3;;26911:385;;;;26655:648;26371:932;;;;;;;;:::o;7718:260::-;7814:6;-1:-1:-1;;;;;1631:20:0;;1641:10;1631:20;1627:182;;1694:36;;-1:-1:-1;;;1694:36:0;;1719:10;1694:36;;;269:51:1;-1:-1:-1;;;;;;;;;;;1076:42:0;1694:24;;242:18:1;;1694:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1668:129;;;;-1:-1:-1;;;1668:129:0;;18618:2:1;1668:129:0;;;18600:21:1;18657:2;18637:18;;;18630:30;18696:33;18676:18;;;18669:61;18747:18;;1668:129:0;18416:355:1;1668:129:0;-1:-1:-1;;;;;;;;;;;;;;;;1890:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:25;1868:91;;;::::0;-1:-1:-1;;;1868:91:0;;18978:2:1;1868:91:0::1;::::0;::::1;18960:21:1::0;19017:2;18997:18;;;18990:30;-1:-1:-1;;;19036:18:1;;;19029:46;19092:18;;1868:91:0::1;18776:340:1::0;1868:91:0::1;7868:6:::2;::::0;::::2;;7867:7;7845:63;;;::::0;-1:-1:-1;;;7845:63:0;;19323:2:1;7845:63:0::2;::::0;::::2;19305:21:1::0;19362:1;19342:18;;;19335:29;-1:-1:-1;;;19380:18:1;;;19373:36;19426:18;;7845:63:0::2;19121:329:1::0;7845:63:0::2;7943:27;7953:6;7961:8;;7943:9;:27::i;:::-;7718:260:::0;;;;:::o;7500:105::-;7542:7;-1:-1:-1;;;;;;;;;;;;;;;;7574:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7569:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;11169:224::-;-1:-1:-1;;;;;;;;;;;;;;;;11275:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11268:45:0;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;11361:24:0;;;;;:13;:24;;;;;11354:31;11169:224::o;8073:1941::-;8185:17;;8181:1824;;8294:14;8277:13;:31;8273:1552;;-1:-1:-1;;;;;;;;;;;;;;;;8664:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8650:145;;-1:-1:-1;;;8650:145:0;;8740:7;8650:145;;;19818:25:1;-1:-1:-1;;;;;19879:32:1;;;19859:18;;;19852:60;8650:44:0;;;;;;;8702:14;;19791:18:1;;8650:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8855:17;8891:14;8875:13;:30;;;;:::i;:::-;8855:50;-1:-1:-1;8928:13:0;;8924:175;;-1:-1:-1;;;;;;;;;;;;;;;;9028:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9021:58;;-1:-1:-1;;;9021:58:0;;9052:7;9021:58;;;20125:25:1;-1:-1:-1;;;;;20186:32:1;;;20166:18;;;20159:60;20235:18;;;20228:34;;;9021:30:0;;;;;;;20098:18:1;;9021:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8310:822;6908:87:::1;6840:155:::0;;:::o;8273:1552::-;-1:-1:-1;;;;;;;;;;;;;;;;9411:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9397:144;;-1:-1:-1;;;9397:144:0;;9486:7;9397:144;;;19818:25:1;-1:-1:-1;;;;;19879:32:1;;;19859:18;;;19852:60;9397:44:0;;;;;;;9449:13;;19791:18:1;;9397:144:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9621:17;9658:13;9641:14;:30;;;;:::i;:::-;9621:50;;-1:-1:-1;;;;;;;;;;;;;;;;9751:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9744:35:0;;9787:9;9799:7;9744:63;;;;;;;;;;;;;5141:25:1;;5129:2;5114:18;;4995:177;9744:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9138:687;6908:87:::1;6840:155:::0;;:::o;8181:1824::-;-1:-1:-1;;;;;;;;;;;;;;;;9932:13:0;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9925:35:0;;9968:14;9985:7;9925:68;;;;;;;;;;;;;5141:25:1;;5129:2;5114:18;;4995:177;9925:68:0;;;;;;;;;;;;;;;;;;;;3471:449;3703:45;;;-1:-1:-1;;;;;20465:32:1;;;3703:45:0;;;20447:51:1;20514:18;;;;20507:34;;;3703:45:0;;;;;;;;;;20420:18:1;;;;3703:45:0;;;;;;;-1:-1:-1;;;;;3703:45:0;-1:-1:-1;;;3703:45:0;;;3692:57;;-1:-1:-1;;;;3692:10:0;;;;:57;;3703:45;3692:57;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3656:93;;;;3782:7;:57;;;;-1:-1:-1;3794:11:0;;:16;;:44;;;3825:4;3814:24;;;;;;;;;;;;:::i;:::-;3760:152;;;;-1:-1:-1;;;3760:152:0;;21046:2:1;3760:152:0;;;21028:21:1;21085:2;21065:18;;;21058:30;21124:34;21104:18;;;21097:62;-1:-1:-1;;;21175:18:1;;;21168:43;21228:19;;3760:152:0;20844:409:1;3760:152:0;3578:342;;3471:449;;;:::o;15710:2354::-;15831:14;15848:11;:9;:11::i;:::-;15831:28;-1:-1:-1;15916:14:0;;;;;;16102:73;;;;16113:8;16102:73;:::i;:::-;15901:274;;;;;;;;;;;;16251:6;16238:9;:19;;16216:84;;;;-1:-1:-1;;;16216:84:0;;22286:2:1;16216:84:0;;;22268:21:1;22325:2;22305:18;;;22298:30;-1:-1:-1;;;22344:18:1;;;22337:45;22399:18;;16216:84:0;22084:339:1;16216:84:0;16333:21;16347:6;16333:13;:21::i;:::-;:29;;16358:4;16333:29;16311:94;;;;-1:-1:-1;;;16311:94:0;;22630:2:1;16311:94:0;;;22612:21:1;22669:2;22649:18;;;22642:30;-1:-1:-1;;;22688:18:1;;;22681:45;22743:18;;16311:94:0;22428:339:1;16311:94:0;16457:22;16482:18;16494:6;16482:9;:18;:::i;:::-;16457:43;;16550:1;16533:14;:18;16511:86;;;;-1:-1:-1;;;16511:86:0;;22974:2:1;16511:86:0;;;22956:21:1;23013:2;22993:18;;;22986:30;-1:-1:-1;;;23032:18:1;;;23025:48;23090:18;;16511:86:0;22772:342:1;16511:86:0;16648:24;16666:6;16648:15;:24;:::i;:::-;16630:14;:42;16608:111;;;;-1:-1:-1;;;16608:111:0;;23321:2:1;16608:111:0;;;23303:21:1;23360:2;23340:18;;;23333:30;-1:-1:-1;;;23379:18:1;;;23372:49;23438:18;;16608:111:0;23119:343:1;16608:111:0;16780:25;16862:19;;16858:166;;13447:6;16968:15;;16950;:33;16948:49;;;;;:::i;:::-;;16927:70;16858:166;17038:10;;17034:139;;13447:6;17126;;17117;:15;17115:31;;;;;:::i;:::-;;17094:52;17034:139;17249:43;17261:17;17280:3;17285:6;17249:11;:43::i;:::-;17347:400;;;;;;;;17384:15;17347:400;;;;17422:6;17347:400;;;;17451:1;17347:400;;;;17500:17;17483:14;:34;;;;:::i;:::-;17347:400;;-1:-1:-1;;;;;17347:400:0;;;;;;;;;;;;;;;17620:1;17608:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17608:14:0;-1:-1:-1;17347:400:0;;17650:14;;;17662:1;17650:14;;;;;;;;;17347:400;;;;;17650:14;;17662:1;17650:14;;;;;;;;;-1:-1:-1;;17347:400:0;;17689:5;17347:400;;;;;;;17720:15;17347:400;;;;;17331:13;;;:5;:13;;;;;;:416;;;;;;;;17347:400;17331:416;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17331:416:0;-1:-1:-1;;;;;;17331:416:0;;;-1:-1:-1;;;;;17331:416:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;17331:416:0;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;17331:416:0;;;;;;;;;-1:-1:-1;;17331:416:0;;;;;;;;;;;;;;;;;;;;17789:31;17805:6;17813;17789:15;:31::i;:::-;17858:36;17871:6;17879:14;17858:12;:36::i;:::-;17955:6;-1:-1:-1;;;;;17943:27:0;;17963:6;17943:27;;;;5141:25:1;;5129:2;5114:18;;4995:177;17943:27:0;;;;;;;;18015:41;18030:6;18038:1;18041:14;18015;:41::i;:::-;15788:2276;;;;;;;;;15710:2354;;;:::o;7316:172::-;-1:-1:-1;;;;;;;;;;;;;;;;7419:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7405:75;;-1:-1:-1;;;7405:75:0;;-1:-1:-1;;;;;23659:32:1;;;7405:75:0;;;23641:51:1;23728:32;;;23708:18;;;23701:60;7405:44:0;;;;;;;7457:9;;23614:18:1;;7405:75:0;23467:300:1;10103:272:0;10211:40;;-1:-1:-1;;;10211:40:0;;-1:-1:-1;;;;;23992:32:1;;;10211:40:0;;;23974:51:1;10235:7:0;24041:18:1;;;24034:34;24084:18;;;24077:34;;;10211:7:0;:15;;;;23947:18:1;;10211:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10305:11:0;:24;;;;;;;;;;;;-1:-1:-1;10340:20:0;;;:12;10305:24;10340:20;;;;;:27;;-1:-1:-1;;10340:27:0;;;;;;;-1:-1:-1;;;10103:272:0:o;7154:154::-;-1:-1:-1;;;;;;;;;;;;;;;;7243:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7226:74;;-1:-1:-1;;;7226:74:0;;-1:-1:-1;;;;;23992:32:1;;;7226:74:0;;;23974:51:1;24041:18;;;24034:34;;;7292:7:0;24084:18:1;;;24077:34;7226:51:0;;;;;;;23947:18:1;;7226:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7154:154;;:::o;10383:778::-;10536:16;-1:-1:-1;;;;;;;;;;;;;;;;10560:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10555:33:0;;10596:11;:9;:11::i;:::-;10555:185;;-1:-1:-1;;;;;;10555:185:0;;;;;;;;;;24292:25:1;;;24365:4;24353:17;;24333:18;;;24326:45;24265:18;;10555:185:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10824:24:0;;;;;;:13;:24;;;;;;10536:204;;-1:-1:-1;10824:29:0;10802:95;;;;-1:-1:-1;;;10802:95:0;;24838:2:1;10802:95:0;;;24820:21:1;24877:2;24857:18;;;24850:30;-1:-1:-1;;;24896:18:1;;;24889:46;24952:18;;10802:95:0;24636:340:1;10802:95:0;-1:-1:-1;;;;;10968:24:0;;;;;;:13;:24;;;;;;;;;:33;;;11051:15;;-1:-1:-1;;;;;;11051:15:0;;;;-1:-1:-1;;;;;;;;;;;1076:42:0;11051:13;;:15;;;;;10968:24;;11051:15;;;;;1076:42;11051:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11044:39:0;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11126:27;11146:6;11126:27;;;;5141:25:1;;5129:2;5114:18;;4995:177;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;331:226:1;390:6;443:2;431:9;422:7;418:23;414:32;411:52;;;459:1;456;449:12;411:52;-1:-1:-1;504:23:1;;331:226;-1:-1:-1;331:226:1:o;1388:346::-;1456:6;1464;1517:2;1505:9;1496:7;1492:23;1488:32;1485:52;;;1533:1;1530;1523:12;1485:52;-1:-1:-1;;1578:23:1;;;1698:2;1683:18;;;1670:32;;-1:-1:-1;1388:346:1:o;1739:420::-;1792:3;1830:5;1824:12;1857:6;1852:3;1845:19;1889:4;1884:3;1880:14;1873:21;;1928:4;1921:5;1917:16;1951:1;1961:173;1975:6;1972:1;1969:13;1961:173;;;2036:13;;2024:26;;2079:4;2070:14;;;;2107:17;;;;1997:1;1990:9;1961:173;;;-1:-1:-1;2150:3:1;;1739:420;-1:-1:-1;;;;1739:420:1:o;2164:261::-;2343:2;2332:9;2325:21;2306:4;2363:56;2415:2;2404:9;2400:18;2392:6;2363:56;:::i;:::-;2355:64;2164:261;-1:-1:-1;;;2164:261:1:o;2430:131::-;-1:-1:-1;;;;;2505:31:1;;2495:42;;2485:70;;2551:1;2548;2541:12;2485:70;2430:131;:::o;2566:367::-;2634:6;2642;2695:2;2683:9;2674:7;2670:23;2666:32;2663:52;;;2711:1;2708;2701:12;2663:52;2750:9;2737:23;2769:31;2794:5;2769:31;:::i;:::-;2819:5;2897:2;2882:18;;;;2869:32;;-1:-1:-1;;;2566:367:1:o;2938:429::-;2989:3;3027:5;3021:12;3054:6;3049:3;3042:19;3086:4;3081:3;3077:14;3070:21;;3125:4;3118:5;3114:16;3148:1;3158:184;3172:6;3169:1;3166:13;3158:184;;;3237:13;;3252:4;3233:24;3221:37;;3287:4;3278:14;;;;3315:17;;;;3194:1;3187:9;3158:184;;3372:1193;3573:2;3562:9;3555:21;3618:6;3612:13;3607:2;3596:9;3592:18;3585:41;3680:2;3672:6;3668:15;3662:22;3657:2;3646:9;3642:18;3635:50;3739:2;3731:6;3727:15;3721:22;3716:2;3705:9;3701:18;3694:50;3536:4;3791:2;3783:6;3779:15;3773:22;3804:53;3852:3;3841:9;3837:19;3823:12;-1:-1:-1;;;;;80:31:1;68:44;;14:104;3804:53;-1:-1:-1;3906:3:1;3894:16;;3888:23;632:13;;625:21;3967:3;3952:19;;613:34;3920:52;4021:3;4013:6;4009:16;4003:23;4063:6;4057:3;4046:9;4042:19;4035:35;4093:63;4151:3;4140:9;4136:19;4120:14;4093:63;:::i;:::-;4079:77;;4205:3;4197:6;4193:16;4187:23;4279:2;4275:7;4263:9;4255:6;4251:22;4247:36;4241:3;4230:9;4226:19;4219:65;4307:50;4350:6;4334:14;4307:50;:::i;:::-;4293:64;;;4406:3;4398:6;4394:16;4388:23;4420:52;4467:3;4456:9;4452:19;4436:14;632:13;625:21;613:34;;562:91;4420:52;;4530:3;4522:6;4518:16;4512:23;4503:6;4492:9;4488:22;4481:55;4553:6;4545:14;;;3372:1193;;;;:::o;5177:129::-;-1:-1:-1;;;;;5255:5:1;5251:30;5244:5;5241:41;5231:69;;5296:1;5293;5286:12;5311:367;5374:8;5384:6;5438:3;5431:4;5423:6;5419:17;5415:27;5405:55;;5456:1;5453;5446:12;5405:55;-1:-1:-1;5479:20:1;;-1:-1:-1;;;;;5511:30:1;;5508:50;;;5554:1;5551;5544:12;5508:50;5591:4;5583:6;5579:17;5567:29;;5651:3;5644:4;5634:6;5631:1;5627:14;5619:6;5615:27;5611:38;5608:47;5605:67;;;5668:1;5665;5658:12;5605:67;5311:367;;;;;:::o;5683:570::-;5777:6;5785;5793;5846:2;5834:9;5825:7;5821:23;5817:32;5814:52;;;5862:1;5859;5852:12;5814:52;5901:9;5888:23;5920:30;5944:5;5920:30;:::i;:::-;5969:5;-1:-1:-1;6025:2:1;6010:18;;5997:32;-1:-1:-1;;;;;6041:30:1;;6038:50;;;6084:1;6081;6074:12;6038:50;6123:70;6185:7;6176:6;6165:9;6161:22;6123:70;:::i;:::-;5683:570;;6212:8;;-1:-1:-1;6097:96:1;;-1:-1:-1;;;;5683:570:1:o;6258:437::-;6344:6;6352;6405:2;6393:9;6384:7;6380:23;6376:32;6373:52;;;6421:1;6418;6411:12;6373:52;6461:9;6448:23;-1:-1:-1;;;;;6486:6:1;6483:30;6480:50;;;6526:1;6523;6516:12;6480:50;6565:70;6627:7;6618:6;6607:9;6603:22;6565:70;:::i;:::-;6654:8;;6539:96;;-1:-1:-1;6258:437:1;-1:-1:-1;;;;6258:437:1:o;6700:433::-;6750:3;6788:5;6782:12;6815:6;6810:3;6803:19;6847:4;6842:3;6838:14;6831:21;;6886:4;6879:5;6875:16;6909:1;6919:189;6933:6;6930:1;6927:13;6919:189;;;7008:13;;7001:21;6994:29;6982:42;;7053:4;7044:14;;;;7081:17;;;;6955:1;6948:9;6919:189;;7138:252;7311:2;7300:9;7293:21;7274:4;7331:53;7380:2;7369:9;7365:18;7357:6;7331:53;:::i;7395:127::-;7456:10;7451:3;7447:20;7444:1;7437:31;7487:4;7484:1;7477:15;7511:4;7508:1;7501:15;7527:156;7593:20;;7653:4;7642:16;;7632:27;;7622:55;;7673:1;7670;7663:12;7622:55;7527:156;;;:::o;7688:902::-;7740:5;7793:3;7786:4;7778:6;7774:17;7770:27;7760:55;;7811:1;7808;7801:12;7760:55;7851:6;7838:20;-1:-1:-1;;;;;7873:6:1;7870:30;7867:56;;;7903:18;;:::i;:::-;7949:6;7946:1;7942:14;7985:2;7979:9;8048:2;8044:7;8039:2;8035;8031:11;8027:25;8019:6;8015:38;8119:6;8107:10;8104:22;-1:-1:-1;;;;;8071:10:1;8068:34;8065:62;8062:88;;;8130:18;;:::i;:::-;8166:2;8159:22;8216;;;8266:4;8298:15;;;8294:26;;;8216:22;8254:17;;8332:15;;;8329:35;;;8360:1;8357;8350:12;8329:35;8396:4;8388:6;8384:17;8373:28;;8410:150;8426:6;8421:3;8418:15;8410:150;;;8494:21;8511:3;8494:21;:::i;:::-;8482:34;;8545:4;8443:14;;;;8536;8410:150;;;-1:-1:-1;8578:6:1;7688:902;-1:-1:-1;;;;;7688:902:1:o;8595:582::-;8709:6;8717;8770:2;8758:9;8749:7;8745:23;8741:32;8738:52;;;8786:1;8783;8776:12;8738:52;8826:9;8813:23;-1:-1:-1;;;;;8851:6:1;8848:30;8845:50;;;8891:1;8888;8881:12;8845:50;8914:59;8965:7;8956:6;8945:9;8941:22;8914:59;:::i;:::-;8904:69;;;9026:2;9015:9;9011:18;8998:32;-1:-1:-1;;;;;9045:8:1;9042:32;9039:52;;;9087:1;9084;9077:12;9039:52;9110:61;9163:7;9152:8;9141:9;9137:24;9110:61;:::i;:::-;9100:71;;;8595:582;;;;;:::o;9371:250::-;9456:1;9466:113;9480:6;9477:1;9474:13;9466:113;;;9556:11;;;9550:18;9537:11;;;9530:39;9502:2;9495:10;9466:113;;;-1:-1:-1;;9613:1:1;9595:16;;9588:27;9371:250::o;9626:991::-;9786:4;9834:2;9823:9;9819:18;9864:2;9853:9;9846:21;9887:6;9922;9916:13;9953:6;9945;9938:22;9991:2;9980:9;9976:18;9969:25;;10053:2;10043:6;10040:1;10036:14;10025:9;10021:30;10017:39;10003:53;;10091:2;10083:6;10079:15;10112:1;10122:466;10136:6;10133:1;10130:13;10122:466;;;10229:2;10225:7;10213:9;10205:6;10201:22;10197:36;10192:3;10185:49;10263:6;10257:13;10305:2;10299:9;10336:8;10328:6;10321:24;10358:74;10423:8;10418:2;10410:6;10406:15;10401:2;10397;10393:11;10358:74;:::i;:::-;10498:2;10475:17;-1:-1:-1;;10471:31:1;10459:44;;;;10505:2;10455:53;;;;-1:-1:-1;10566:12:1;;;;10531:15;;;;;10158:1;10151:9;10122:466;;;-1:-1:-1;10605:6:1;;9626:991;-1:-1:-1;;;;;;9626:991:1:o;10853:118::-;10939:5;10932:13;10925:21;10918:5;10915:32;10905:60;;10961:1;10958;10951:12;10976:552;11057:6;11065;11073;11081;11134:3;11122:9;11113:7;11109:23;11105:33;11102:53;;;11151:1;11148;11141:12;11102:53;11196:23;;;-1:-1:-1;11316:2:1;11301:18;;11288:32;;-1:-1:-1;11398:2:1;11383:18;;11370:32;11411:30;11370:32;11411:30;:::i;:::-;11460:7;-1:-1:-1;11486:36:1;11518:2;11503:18;;11486:36;:::i;:::-;11476:46;;10976:552;;;;;;;:::o;11533:1424::-;12029:3;12042:22;;;12113:13;;12014:19;;;12135:22;;;11981:4;;12227;12215:17;;;12188:3;12173:19;;;11981:4;12260:199;12274:6;12271:1;12268:13;12260:199;;;12339:13;;-1:-1:-1;;;;;12335:39:1;12323:52;;12404:4;12432:17;;;;12395:14;;;;12371:1;12289:9;12260:199;;;12264:3;;12506:9;12501:3;12497:19;12490:4;12479:9;12475:20;12468:49;12540:41;12577:3;12569:6;12540:41;:::i;:::-;12526:55;;;12629:9;12621:6;12617:22;12612:2;12601:9;12597:18;12590:50;12663:44;12700:6;12692;12663:44;:::i;:::-;12649:58;;12755:9;12747:6;12743:22;12738:2;12727:9;12723:18;12716:50;12789:44;12826:6;12818;12789:44;:::i;:::-;12775:58;;12882:9;12874:6;12870:22;12864:3;12853:9;12849:19;12842:51;12910:41;12944:6;12936;12910:41;:::i;:::-;12902:49;11533:1424;-1:-1:-1;;;;;;;;11533:1424:1:o;12962:721::-;13041:6;13049;13057;13110:2;13098:9;13089:7;13085:23;13081:32;13078:52;;;13126:1;13123;13116:12;13078:52;13165:9;13152:23;13184:31;13209:5;13184:31;:::i;:::-;13234:5;-1:-1:-1;13290:2:1;13275:18;;13262:32;-1:-1:-1;;;;;13306:30:1;;13303:50;;;13349:1;13346;13339:12;13303:50;13372:22;;13425:4;13417:13;;13413:27;-1:-1:-1;13403:55:1;;13454:1;13451;13444:12;13403:55;13494:2;13481:16;-1:-1:-1;;;;;13512:6:1;13509:30;13506:50;;;13552:1;13549;13542:12;13506:50;13597:7;13592:2;13583:6;13579:2;13575:15;13571:24;13568:37;13565:57;;;13618:1;13615;13608:12;13565:57;12962:721;;13649:2;13641:11;;;;;-1:-1:-1;13671:6:1;;-1:-1:-1;;;12962:721:1:o;13885:251::-;13955:6;14008:2;13996:9;13987:7;13983:23;13979:32;13976:52;;;14024:1;14021;14014:12;13976:52;14056:9;14050:16;14075:31;14100:5;14075:31;:::i;14141:334::-;14343:2;14325:21;;;14382:2;14362:18;;;14355:30;-1:-1:-1;;;14416:2:1;14401:18;;14394:40;14466:2;14451:18;;14141:334::o;14480:127::-;14541:10;14536:3;14532:20;14529:1;14522:31;14572:4;14569:1;14562:15;14596:4;14593:1;14586:15;14612:128;14679:9;;;14700:11;;;14697:37;;;14714:18;;:::i;14745:127::-;14806:10;14801:3;14797:20;14794:1;14787:31;14837:4;14834:1;14827:15;14861:4;14858:1;14851:15;16387:611;-1:-1:-1;;;;;16631:31:1;;16613:50;;16694:2;16679:18;;16672:34;;;16742:2;16737;16722:18;;16715:30;;;16761:18;;16754:34;;;-1:-1:-1;;;;;;16800:31:1;;16797:51;;;16844:1;16841;16834:12;16797:51;16878:6;16875:1;16871:14;16936:6;16928;16922:3;16911:9;16907:19;16894:49;16964:22;;;;16988:3;16960:32;;16387:611;-1:-1:-1;;;;;16387:611:1:o;17003:127::-;17064:10;17059:3;17055:20;17052:1;17045:31;17095:4;17092:1;17085:15;17119:4;17116:1;17109:15;17135:112;17167:1;17193;17183:35;;17198:18;;:::i;:::-;-1:-1:-1;17232:9:1;;17135:112::o;17252:125::-;17317:9;;;17338:10;;;17335:36;;;17351:18;;:::i;17706:157::-;17736:1;17770:4;17767:1;17763:12;17794:3;17784:37;;17801:18;;:::i;:::-;17853:3;17846:4;17843:1;17839:12;17835:22;17830:27;;;17706:157;;;;:::o;17868:168::-;17941:9;;;17972;;17989:15;;;17983:22;;17969:37;17959:71;;18010:18;;:::i;18041:120::-;18081:1;18107;18097:35;;18112:18;;:::i;:::-;-1:-1:-1;18146:9:1;;18041:120::o;18166:245::-;18233:6;18286:2;18274:9;18265:7;18261:23;18257:32;18254:52;;;18302:1;18299;18292:12;18254:52;18334:9;18328:16;18353:28;18375:5;18353:28;:::i;19455:184::-;19525:6;19578:2;19566:9;19557:7;19553:23;19549:32;19546:52;;;19594:1;19591;19584:12;19546:52;-1:-1:-1;19617:16:1;;19455:184;-1:-1:-1;19455:184:1:o;20552:287::-;20681:3;20719:6;20713:13;20735:66;20794:6;20789:3;20782:4;20774:6;20770:17;20735:66;:::i;:::-;20817:16;;;;;20552:287;-1:-1:-1;;20552:287:1:o;21258:821::-;21367:6;21375;21383;21391;21399;21407;21460:3;21448:9;21439:7;21435:23;21431:33;21428:53;;;21477:1;21474;21467:12;21428:53;21522:23;;;-1:-1:-1;21642:2:1;21627:18;;21614:32;;-1:-1:-1;21745:2:1;21730:18;;21717:32;;-1:-1:-1;21827:2:1;21812:18;;21799:32;21840:30;21799:32;21840:30;:::i;:::-;21889:7;-1:-1:-1;21948:3:1;21933:19;;21920:33;21962;21920;21962;:::i;:::-;22014:7;22004:17;;;22068:3;22057:9;22053:19;22040:33;22030:43;;21258:821;;;;;;;;:::o;24382:249::-;24451:6;24504:2;24492:9;24483:7;24479:23;24475:32;24472:52;;;24520:1;24517;24510:12;24472:52;24552:9;24546:16;24571:30;24595:5;24571:30;:::i
Swarm Source
ipfs://712d9c740ebb75293de500fab6674451b8a5d918f68e38fc1e7c8ac18ad57531
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.