Overview
APE Balance
APE Value
$1.58 (@ $0.17/APE)Multichain Info
Latest 25 from a total of 946 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Emergency Withdr... | 31779159 | 30 days ago | IN | 0 APE | 0.0038013 | ||||
| Withdraw Winning... | 31778880 | 30 days ago | IN | 0 APE | 0.00626914 | ||||
| Pause | 31438470 | 37 days ago | IN | 0 APE | 0.00463419 | ||||
| Withdraw Winning... | 31359234 | 39 days ago | IN | 0 APE | 0.00539101 | ||||
| Request Play | 31359225 | 39 days ago | IN | 1 APE | 0.01853066 | ||||
| Withdraw Winning... | 31359221 | 39 days ago | IN | 0 APE | 0.00539101 | ||||
| Request Play | 31359211 | 39 days ago | IN | 1 APE | 0.01853066 | ||||
| Withdraw Winning... | 31359023 | 39 days ago | IN | 0 APE | 0.00539101 | ||||
| Request Play | 31359014 | 39 days ago | IN | 1 APE | 0.01853066 | ||||
| Withdraw Winning... | 31359005 | 39 days ago | IN | 0 APE | 0.00539101 | ||||
| Request Play | 31358982 | 39 days ago | IN | 1 APE | 0.02233777 | ||||
| Withdraw Winning... | 31235654 | 40 days ago | IN | 0 APE | 0.00539101 | ||||
| Request Play | 31235648 | 40 days ago | IN | 1 APE | 0.01853066 | ||||
| Request Play | 31235640 | 40 days ago | IN | 1 APE | 0.01853066 | ||||
| Request Play | 31235634 | 40 days ago | IN | 1 APE | 0.01853066 | ||||
| Request Play | 31235629 | 40 days ago | IN | 1 APE | 0.01853066 | ||||
| Withdraw Winning... | 31235626 | 40 days ago | IN | 0 APE | 0.00539101 | ||||
| Request Play | 31235616 | 40 days ago | IN | 1 APE | 0.01885899 | ||||
| Request Play | 31129771 | 42 days ago | IN | 1 APE | 0.01853066 | ||||
| Request Play | 31129754 | 42 days ago | IN | 1 APE | 0.01853066 | ||||
| Request Play | 31129747 | 42 days ago | IN | 1 APE | 0.01853066 | ||||
| Request Play | 31129736 | 42 days ago | IN | 1 APE | 0.01853066 | ||||
| Request Play | 31129724 | 42 days ago | IN | 1 APE | 0.01853066 | ||||
| Request Play | 31129711 | 42 days ago | IN | 1 APE | 0.01853066 | ||||
| Withdraw Winning... | 31129448 | 42 days ago | IN | 0 APE | 0.00539101 |
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 31779159 | 30 days ago | 232.64 APE | ||||
| 31778880 | 30 days ago | 0.3 APE | ||||
| 31359234 | 39 days ago | 0.37 APE | ||||
| 31359221 | 39 days ago | 1.5 APE | ||||
| 31359023 | 39 days ago | 0.37 APE | ||||
| 31359005 | 39 days ago | 0.37 APE | ||||
| 31235654 | 40 days ago | 1.86 APE | ||||
| 31235626 | 40 days ago | 0.3 APE | ||||
| 31129448 | 42 days ago | 4.3 APE | ||||
| 31127404 | 42 days ago | 3 APE | ||||
| 31127357 | 42 days ago | 1.87 APE | ||||
| 31124772 | 42 days ago | 0.74 APE | ||||
| 31124745 | 42 days ago | 1.12 APE | ||||
| 31124232 | 42 days ago | 5.75 APE | ||||
| 31112944 | 43 days ago | 1.5 APE | ||||
| 29994077 | 56 days ago | 4 APE | ||||
| 29981128 | 56 days ago | 2 APE | ||||
| 29933957 | 57 days ago | 1.1 APE | ||||
| 29404850 | 60 days ago | 13.72 APE | ||||
| 29404704 | 60 days ago | 14.09 APE | ||||
| 29326026 | 61 days ago | 22.29 APE | ||||
| 29173454 | 63 days ago | 0.37 APE | ||||
| 28937121 | 66 days ago | 0.9 APE | ||||
| 28933508 | 66 days ago | 2.9 APE | ||||
| 28903131 | 67 days ago | 2.23 APE |
Cross-Chain Transactions
Contract Source Code (Solidity)
/**
*Submitted for verification at apescan.io on 2025-11-17
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;
/* ========= Lightweight Address utils ========= */
library Address {
function isContract(address account) internal view returns (bool) {
return account.code.length > 0;
}
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value");
}
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, "Address: low-level call failed");
}
function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
function functionCallWithValue(
address target, bytes memory data, uint256 value, string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
function functionStaticCall(
address target, bytes memory data, string memory errorMessage
) internal view returns (bytes memory) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
function functionDelegateCall(
address target, bytes memory data, string memory errorMessage
) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
function verifyCallResult(
bool success, bytes memory returndata, string memory errorMessage
) internal pure returns (bytes memory) {
if (success) return returndata;
if (returndata.length > 0) {
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
/* ========= VRF interfaces ========= */
interface IVRFSystem {
function requestRandomNumberWithTraceId(uint256 traceId) external returns (uint256);
function deliverSignedRandomNumber(
uint256 requestId,
uint256 roundNumber,
uint256 randomNumber,
bytes calldata signature
) external;
}
interface IVRFSystemCallback {
function randomNumberCallback(uint256 requestId, uint256 randomNumber) external;
}
/* ========= ReentrancyGuard ========= */
contract ReentrancyGuard {
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() { _status = _NOT_ENTERED; }
modifier nonReentrant() {
require(_status != _ENTERED, "ReentrancyGuard: reentrant");
_status = _ENTERED; _;
_status = _NOT_ENTERED;
}
}
/* ========= Ownable ========= */
contract Ownable {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor() { _transferOwnership(msg.sender); }
modifier onlyOwner() { require(owner() == msg.sender, "Ownable: caller not owner"); _; }
function owner() public view returns (address) { return _owner; }
function transferOwnership(address newOwner) public onlyOwner {
require(newOwner != address(0), "Ownable: zero");
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal {
address old = _owner; _owner = newOwner; emit OwnershipTransferred(old, newOwner);
}
}
/* ========= Lootbox (Common / Rare / Epic; 5 outcomes each) ========= */
contract Lootbox is ReentrancyGuard, Ownable, IVRFSystemCallback {
using Address for address payable;
/* ----- VRF system ----- */
address public vrfSystem;
modifier onlyVRFSystem() {
require(msg.sender == vrfSystem, "Not VRFSystem");
_;
}
/* ----- Game types ----- */
enum BoxType { Common, Rare, Epic }
uint256 public constant MULTIPLIER_SCALE = 1e18; // 1.0x = 1e18
uint32 public constant PROB_SCALE = 1_000_000; // 100%
// boxMultipliers[box][outcome] — total payout multipliers (scaled by 1e18)
uint256[5][3] public boxMultipliers;
// boxProbPPM[box][outcome] — probabilities in parts-per-million
uint32[5][3] public boxProbPPM;
// Cached worst multiplier per box for admission checks
uint256[3] private boxMaxMultiplier;
/* ----- Fixed pricing per box (ETH) ----- */
// Players must pay exactly this price to play the given box.
uint256[3] public boxPrice; // [Common, Rare, Epic] in wei
/* ----- Security & limits ----- */
uint256 public MAX_BET = 25 ether; // kept for compatibility; price must also equal boxPrice
uint256 public MIN_BANKROLL = 100 ether;
uint256 public MAX_BANKROLL = 1000 ether;
uint256 public MAX_PAYOUT_PER_ROUND = 50 ether;
uint256 public constant PLAYS_PER_HOUR_LIMIT = 1500;
uint256 public constant RATE_LIMIT_WINDOW = 1 hours;
bool public paused;
/* ----- Storage ----- */
struct Round {
address player;
BoxType box;
uint8 outcome; // 0..4 (set on settle)
uint256 stake;
uint256 payout; // total payout credited
uint64 timestamp; // request time (and updated on settle)
bool settled;
}
mapping(uint256 => Round) public rounds; // requestId => round
mapping(uint256 => bool) public roundRefunded; // requestId => refunded
// Winnings accounting
mapping(address => uint256) public winnings; // withdrawable credits
mapping(address => uint256) private pendingWinnings;
uint256 private totalPendingWinnings;
// Rate limiting
mapping(address => uint256) public lastPlayTime; // rate limit window start
mapping(address => uint256) private userPlayCount;
/* === Winners index tracking (addresses with non-zero winnings) === */
address[] private winners;
mapping(address => uint256) private winnerIndex; // 1-based index; 0 => not in set
/* ----- Events ----- */
event RoundRequested(address indexed player, uint256 indexed requestId, BoxType box, uint256 stake);
event RoundRevealed(address indexed player, uint256 indexed requestId, BoxType box, uint8 outcome, uint256 multiplier, uint256 payout);
event RoundRefunded(address indexed player, uint256 indexed requestId, uint256 refundAmount);
event WinningsWithdrawn(address indexed player, uint256 amount);
event ParameterUpdated(string indexed parameter, uint256 oldValue, uint256 newValue);
event VRFSystemUpdated(address indexed oldAddr, address indexed newAddr);
event BoxUpdated(BoxType indexed box, uint256[5] multipliers, uint32[5] probs);
event BoxesReplaced();
event BoxPriceUpdated(BoxType indexed box, uint256 oldPrice, uint256 newPrice);
event BoxPricesUpdated(uint256[3] oldPrices, uint256[3] newPrices);
/* ----- Modifiers ----- */
modifier whenNotPaused() { require(!paused, "Paused"); _; }
/* ----- Constructor / Admin ----- */
constructor(address vrfSystemAddress) {
require(vrfSystemAddress != address(0) && Address.isContract(vrfSystemAddress), "Invalid VRF");
vrfSystem = vrfSystemAddress;
// ===== Default tables per spec =====
// Common Lootbox (formerly "Normal") — Low Vol
boxMultipliers[uint8(BoxType.Common)] = [uint256(2e17), 4e17, 9e17, 17e17, 43e17]; // 0.2x,0.4x,0.9x,1.7x,4.3x
boxProbPPM[uint8(BoxType.Common)] = [uint32(400000), 300000, 200000, 80000, 20000];
// Rare Lootbox (Medium Vol)
boxMultipliers[uint8(BoxType.Rare)] = [uint256(1e17), 3e17, 1e18, 27e17, 65e17]; // 0.1x,0.3x,1.0x,2.7x,6.5x
boxProbPPM[uint8(BoxType.Rare)] = [uint32(500000), 250000, 150000, 80000, 20000];
// Epic Lootbox (High Vol)
boxMultipliers[uint8(BoxType.Epic)] = [uint256(5e16), 15e16, 5e17, 26e17, 105e17]; // 0.05x,0.15x,0.5x,2.6x,10.5x
boxProbPPM[uint8(BoxType.Epic)] = [uint32(600000), 200000, 100000, 70000, 30000];
_recomputeBoxMax(BoxType.Common);
_recomputeBoxMax(BoxType.Rare);
_recomputeBoxMax(BoxType.Epic);
// ===== Fixed pricing (ETH) =====
boxPrice[uint8(BoxType.Common)] = 10 ether;
boxPrice[uint8(BoxType.Rare)] = 7 ether;
boxPrice[uint8(BoxType.Epic)] = 4 ether;
emit VRFSystemUpdated(address(0), vrfSystemAddress);
}
function setVRFSystem(address newAddr) external onlyOwner {
require(newAddr != address(0) && Address.isContract(newAddr), "Invalid VRF");
emit VRFSystemUpdated(vrfSystem, newAddr);
vrfSystem = newAddr;
}
/* --- Box table management (bounded) --- */
function setBox(BoxType box, uint256[5] calldata multipliers, uint32[5] calldata probsPPM) external onlyOwner {
_validateAndSetBox(box, multipliers, probsPPM);
emit BoxUpdated(box, multipliers, probsPPM);
}
function setBoxes(
uint256[5] calldata multCommon, uint32[5] calldata probCommon,
uint256[5] calldata multRare, uint32[5] calldata probRare,
uint256[5] calldata multEpic, uint32[5] calldata probEpic
) external onlyOwner {
_validateAndSetBox(BoxType.Common, multCommon, probCommon);
_validateAndSetBox(BoxType.Rare, multRare, probRare);
_validateAndSetBox(BoxType.Epic, multEpic, probEpic);
emit BoxesReplaced();
}
function _validateAndSetBox(BoxType box, uint256[5] calldata multipliers, uint32[5] calldata probsPPM) internal {
uint256 sum;
for (uint256 i = 0; i < 5; i++) {
require(multipliers[i] <= 100e18, "mult too large");
sum += probsPPM[i];
}
require(sum == PROB_SCALE, "probabilities must sum to 1e6");
boxMultipliers[uint8(box)] = multipliers;
boxProbPPM[uint8(box)] = probsPPM;
_recomputeBoxMax(box);
}
function _recomputeBoxMax(BoxType box) internal {
uint8 b = uint8(box);
uint256 m = boxMultipliers[b][0];
for (uint8 i = 1; i < 5; i++) {
if (boxMultipliers[b][i] > m) m = boxMultipliers[b][i];
}
boxMaxMultiplier[b] = m;
}
/* ----- Fixed pricing setters ----- */
function setBoxPrice(BoxType box, uint256 newPriceWei) external onlyOwner {
uint8 b = uint8(box);
uint256 old = boxPrice[b];
boxPrice[b] = newPriceWei;
emit BoxPriceUpdated(box, old, newPriceWei);
}
function setBoxPrices(uint256[3] calldata newPricesWei) external onlyOwner {
uint256[3] memory old = boxPrice;
boxPrice = newPricesWei;
emit BoxPricesUpdated(old, newPricesWei);
}
/* ----- External: play ----- */
function requestPlay(BoxType box)
external
payable
nonReentrant
whenNotPaused
{
uint256 requiredStake = boxPrice[uint8(box)];
require(requiredStake > 0, "Price not set");
require(msg.value == requiredStake, "Stake must equal box price");
require(msg.value <= MAX_BET, "Bet too high");
// Per-user rate limiting
if (block.timestamp >= lastPlayTime[msg.sender] + RATE_LIMIT_WINDOW) {
lastPlayTime[msg.sender] = block.timestamp;
userPlayCount[msg.sender] = 0;
}
require(userPlayCount[msg.sender] < PLAYS_PER_HOUR_LIMIT, "Play limit exceeded");
userPlayCount[msg.sender] += 1;
// Worst-case payout for the chosen box
uint256 maxPayout = (msg.value * boxMaxMultiplier[uint8(box)]) / MULTIPLIER_SCALE;
require(address(this).balance >= MIN_BANKROLL + maxPayout + totalPendingWinnings, "Bankroll low");
require(maxPayout <= MAX_PAYOUT_PER_ROUND, "Payout cap");
uint256 requestId = IVRFSystem(vrfSystem).requestRandomNumberWithTraceId(0);
rounds[requestId] = Round({
player: msg.sender,
box: box,
outcome: 255, // placeholder until settle
stake: msg.value,
payout: 0,
timestamp: uint64(block.timestamp),
settled: false
});
emit RoundRequested(msg.sender, requestId, box, msg.value);
}
/* ----- VRF callback ----- */
function randomNumberCallback(uint256 requestId, uint256 randomNumber)
external
onlyVRFSystem
{
Round storage r = rounds[requestId];
require(r.player != address(0), "Unknown request");
require(!roundRefunded[requestId], "Refunded");
require(!r.settled, "Settled");
// Uniform ticket in [0 .. 1e6-1]
uint256 h = uint256(keccak256(abi.encodePacked(requestId, randomNumber)));
uint32 ticket = uint32(h % PROB_SCALE);
// Pick outcome by cumulative probability
uint8 b = uint8(r.box);
uint32[5] memory probs = boxProbPPM[b];
uint256[5] memory mults = boxMultipliers[b];
uint32 cumulative = 0;
uint8 idx = 0;
for (uint8 i = 0; i < 5; i++) {
cumulative += probs[i];
if (ticket < cumulative) { idx = i; break; }
}
uint256 mult = mults[idx];
uint256 payout = (r.stake * mult) / MULTIPLIER_SCALE;
r.outcome = idx;
r.payout = payout;
r.timestamp = uint64(block.timestamp);
r.settled = true;
if (payout > 0) {
uint256 prev = winnings[r.player];
uint256 newBal = prev + payout;
winnings[r.player] = newBal;
pendingWinnings[r.player] += payout;
totalPendingWinnings += payout;
if (prev == 0) {
_addWinner(r.player);
}
}
emit RoundRevealed(r.player, requestId, r.box, idx, mult, payout);
}
/* ----- Refund path ----- */
function refundUnfulfilledRound(uint256 requestId) external nonReentrant {
Round storage r = rounds[requestId];
require(r.player == msg.sender, "Not your round");
require(!r.settled, "Already settled");
require(!roundRefunded[requestId], "Already refunded");
require(block.timestamp > r.timestamp + 1 hours, "Refund window not open");
uint256 refundAmt = r.stake;
roundRefunded[requestId] = true;
delete rounds[requestId];
payable(msg.sender).sendValue(refundAmt);
emit RoundRefunded(msg.sender, requestId, refundAmt);
}
/* ----- Manual repair ----- */
function repairDelivery(
uint256 requestId,
uint256 roundNumber,
uint256 randomNumber,
bytes calldata signature
) external onlyOwner {
require(!roundRefunded[requestId], "Already refunded");
Round storage r = rounds[requestId];
require(r.player != address(0) && !r.settled, "Not pending");
IVRFSystem(vrfSystem).deliverSignedRandomNumber(requestId, roundNumber, randomNumber, signature);
}
/* ========= Internal accounting helper ========= */
function _applyPayoutAccounting(address user, uint256 paidAmount) internal {
uint256 p = pendingWinnings[user];
uint256 dec = paidAmount > p ? p : paidAmount;
if (dec > 0) {
unchecked {
pendingWinnings[user] = p - dec;
totalPendingWinnings -= dec;
}
}
}
/* ----- Withdrawals & bankroll ----- */
function withdrawWinnings() external nonReentrant {
uint256 amount = winnings[msg.sender];
require(amount > 0, "No winnings");
winnings[msg.sender] = 0;
_applyPayoutAccounting(msg.sender, amount);
_removeWinnerIfZero(msg.sender);
payable(msg.sender).sendValue(amount);
emit WinningsWithdrawn(msg.sender, amount);
}
function deposit() external payable onlyOwner {
require(msg.value > 0, "Must deposit");
require(address(this).balance <= MAX_BANKROLL, "Exceeds max bankroll");
}
function withdrawOwner(uint256 amount) external onlyOwner nonReentrant {
require(amount > 0, "Invalid");
require(address(this).balance >= MIN_BANKROLL + totalPendingWinnings + amount, "Insufficient");
payable(owner()).sendValue(amount);
}
function emergencyWithdraw() external onlyOwner nonReentrant {
require(paused, "Not paused");
uint256 bal = address(this).balance;
require(bal > totalPendingWinnings, "Preserve winnings");
payable(owner()).sendValue(bal - totalPendingWinnings);
}
/* ======== Owner disburse functions (push-pay winners) ======== */
function ownerDisburseAddresses(address[] calldata addrs) external onlyOwner nonReentrant {
uint256 len = addrs.length;
for (uint256 i = 0; i < len; i++) {
address user = addrs[i];
uint256 amount = winnings[user];
if (amount == 0) continue;
winnings[user] = 0;
_applyPayoutAccounting(user, amount);
_removeWinnerIfZero(user);
payable(user).sendValue(amount);
emit WinningsWithdrawn(user, amount);
}
}
function ownerDisburseAll(uint256 maxRecipients) external onlyOwner nonReentrant {
uint256 paid = 0;
uint256 i = 0;
while (i < winners.length && paid < maxRecipients) {
address user = winners[i];
uint256 amount = winnings[user];
if (amount == 0) {
_removeWinnerAtIndex(i);
continue;
}
winnings[user] = 0;
_applyPayoutAccounting(user, amount);
_removeWinnerAtIndex(i); // swaps last into i
payable(user).sendValue(amount);
emit WinningsWithdrawn(user, amount);
paid += 1;
}
}
/* ----- Admin controls ----- */
function pause() external onlyOwner { paused = true; }
function unpause() external onlyOwner { paused = false; }
function setMaxBet(uint256 newMax) external onlyOwner {
// kept for compatibility; boxPrice still applies
require(newMax > 0 && newMax <= 10 ether, "Invalid");
emit ParameterUpdated("MAX_BET", MAX_BET, newMax);
MAX_BET = newMax;
}
function setMinBankroll(uint256 newMin) external onlyOwner {
require(newMin > 0 && newMin <= MAX_BANKROLL, "Invalid");
emit ParameterUpdated("MIN_BANKROLL", MIN_BANKROLL, newMin);
MIN_BANKROLL = newMin;
}
function setMaxBankroll(uint256 newMax) external onlyOwner {
require(newMax >= MIN_BANKROLL && newMax <= 5000 ether, "Invalid");
emit ParameterUpdated("MAX_BANKROLL", MAX_BANKROLL, newMax);
MAX_BANKROLL = newMax;
}
function setMaxPayoutPerRound(uint256 newMax) external onlyOwner {
require(newMax > 0 && newMax <= MIN_BANKROLL / 2, "Invalid");
emit ParameterUpdated("MAX_PAYOUT_PER_ROUND", MAX_PAYOUT_PER_ROUND, newMax);
MAX_PAYOUT_PER_ROUND = newMax;
}
/* ----- Views ----- */
function getContractBalance() external view returns (uint256) {
return address(this).balance;
}
function getUserStats(address user) external view returns (uint256 userWinnings, uint256 lastPlay, bool canPlay) {
userWinnings = winnings[user];
lastPlay = lastPlayTime[user];
bool withinLimit = (block.timestamp >= lastPlayTime[user] + RATE_LIMIT_WINDOW)
? true
: userPlayCount[user] < PLAYS_PER_HOUR_LIMIT;
canPlay = !paused && withinLimit;
}
function getPendingWinnings(address user) external view returns (uint256) {
return pendingWinnings[user];
}
function hasSettled(uint256 requestId) external view returns (bool) {
return rounds[requestId].settled || roundRefunded[requestId];
}
function previewRound(BoxType box, uint256 stake)
external
view
returns (
uint256 worstCasePayout,
uint256 contractBalance,
int256 headroom,
bool bankrollOk,
bool payoutOk,
bool canPlayNow
)
{
require(stake > 0 && stake <= MAX_BET, "Invalid stake");
uint256 m = boxMaxMultiplier[uint8(box)];
worstCasePayout = (stake * m) / MULTIPLIER_SCALE;
contractBalance = address(this).balance;
int256 bal = int256(contractBalance);
int256 need = int256(MIN_BANKROLL) + int256(totalPendingWinnings) + int256(worstCasePayout);
headroom = bal - need;
bankrollOk = (contractBalance >= (MIN_BANKROLL + totalPendingWinnings + worstCasePayout));
payoutOk = (worstCasePayout <= MAX_PAYOUT_PER_ROUND);
bool withinLimit = (block.timestamp >= lastPlayTime[msg.sender] + RATE_LIMIT_WINDOW)
? true
: userPlayCount[msg.sender] < PLAYS_PER_HOUR_LIMIT;
canPlayNow = !paused && payoutOk && bankrollOk && withinLimit;
}
function table(BoxType box)
external
view
returns (uint256[5] memory multipliers, uint32[5] memory probs, uint256 scale, uint32 probScale)
{
multipliers = boxMultipliers[uint8(box)];
probs = boxProbPPM[uint8(box)];
scale = MULTIPLIER_SCALE;
probScale = PROB_SCALE;
}
/* ======== internal: winners set maintenance ======== */
function _addWinner(address user) internal {
if (winnerIndex[user] == 0) {
winners.push(user);
winnerIndex[user] = winners.length; // 1-based
}
}
function _removeWinnerIfZero(address user) internal {
if (winnerIndex[user] != 0 && winnings[user] == 0) {
_removeWinner(user);
}
}
function _removeWinner(address user) internal {
uint256 idx = winnerIndex[user];
if (idx == 0) return;
uint256 last = winners.length;
if (idx != last) {
address moved = winners[last - 1];
winners[idx - 1] = moved;
winnerIndex[moved] = idx;
}
winners.pop();
winnerIndex[user] = 0;
}
function _removeWinnerAtIndex(uint256 i) internal {
require(i < winners.length, "Index OOB");
address user = winners[i];
uint256 last = winners.length - 1;
if (i != last) {
address moved = winners[last];
winners[i] = moved;
winnerIndex[moved] = i + 1; // keep 1-based
}
winners.pop();
winnerIndex[user] = 0;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"vrfSystemAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum Lootbox.BoxType","name":"box","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"oldPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"BoxPriceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256[3]","name":"oldPrices","type":"uint256[3]"},{"indexed":false,"internalType":"uint256[3]","name":"newPrices","type":"uint256[3]"}],"name":"BoxPricesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum Lootbox.BoxType","name":"box","type":"uint8"},{"indexed":false,"internalType":"uint256[5]","name":"multipliers","type":"uint256[5]"},{"indexed":false,"internalType":"uint32[5]","name":"probs","type":"uint32[5]"}],"name":"BoxUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"BoxesReplaced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"parameter","type":"string"},{"indexed":false,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"ParameterUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":true,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"refundAmount","type":"uint256"}],"name":"RoundRefunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":true,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"enum Lootbox.BoxType","name":"box","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"stake","type":"uint256"}],"name":"RoundRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":true,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":false,"internalType":"enum Lootbox.BoxType","name":"box","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"outcome","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"multiplier","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"payout","type":"uint256"}],"name":"RoundRevealed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddr","type":"address"},{"indexed":true,"internalType":"address","name":"newAddr","type":"address"}],"name":"VRFSystemUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WinningsWithdrawn","type":"event"},{"inputs":[],"name":"MAX_BANKROLL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PAYOUT_PER_ROUND","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_BANKROLL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MULTIPLIER_SCALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PLAYS_PER_HOUR_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROB_SCALE","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RATE_LIMIT_WINDOW","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"boxMultipliers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"boxPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"boxProbPPM","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getContractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getPendingWinnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserStats","outputs":[{"internalType":"uint256","name":"userWinnings","type":"uint256"},{"internalType":"uint256","name":"lastPlay","type":"uint256"},{"internalType":"bool","name":"canPlay","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"}],"name":"hasSettled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastPlayTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"}],"name":"ownerDisburseAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxRecipients","type":"uint256"}],"name":"ownerDisburseAll","outputs":[],"stateMutability":"nonpayable","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":"enum Lootbox.BoxType","name":"box","type":"uint8"},{"internalType":"uint256","name":"stake","type":"uint256"}],"name":"previewRound","outputs":[{"internalType":"uint256","name":"worstCasePayout","type":"uint256"},{"internalType":"uint256","name":"contractBalance","type":"uint256"},{"internalType":"int256","name":"headroom","type":"int256"},{"internalType":"bool","name":"bankrollOk","type":"bool"},{"internalType":"bool","name":"payoutOk","type":"bool"},{"internalType":"bool","name":"canPlayNow","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"},{"internalType":"uint256","name":"randomNumber","type":"uint256"}],"name":"randomNumberCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"}],"name":"refundUnfulfilledRound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"},{"internalType":"uint256","name":"roundNumber","type":"uint256"},{"internalType":"uint256","name":"randomNumber","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"repairDelivery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum Lootbox.BoxType","name":"box","type":"uint8"}],"name":"requestPlay","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"roundRefunded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rounds","outputs":[{"internalType":"address","name":"player","type":"address"},{"internalType":"enum Lootbox.BoxType","name":"box","type":"uint8"},{"internalType":"uint8","name":"outcome","type":"uint8"},{"internalType":"uint256","name":"stake","type":"uint256"},{"internalType":"uint256","name":"payout","type":"uint256"},{"internalType":"uint64","name":"timestamp","type":"uint64"},{"internalType":"bool","name":"settled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum Lootbox.BoxType","name":"box","type":"uint8"},{"internalType":"uint256[5]","name":"multipliers","type":"uint256[5]"},{"internalType":"uint32[5]","name":"probsPPM","type":"uint32[5]"}],"name":"setBox","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum Lootbox.BoxType","name":"box","type":"uint8"},{"internalType":"uint256","name":"newPriceWei","type":"uint256"}],"name":"setBoxPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[3]","name":"newPricesWei","type":"uint256[3]"}],"name":"setBoxPrices","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[5]","name":"multCommon","type":"uint256[5]"},{"internalType":"uint32[5]","name":"probCommon","type":"uint32[5]"},{"internalType":"uint256[5]","name":"multRare","type":"uint256[5]"},{"internalType":"uint32[5]","name":"probRare","type":"uint32[5]"},{"internalType":"uint256[5]","name":"multEpic","type":"uint256[5]"},{"internalType":"uint32[5]","name":"probEpic","type":"uint32[5]"}],"name":"setBoxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"setMaxBankroll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"setMaxBet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"setMaxPayoutPerRound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMin","type":"uint256"}],"name":"setMinBankroll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddr","type":"address"}],"name":"setVRFSystem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum Lootbox.BoxType","name":"box","type":"uint8"}],"name":"table","outputs":[{"internalType":"uint256[5]","name":"multipliers","type":"uint256[5]"},{"internalType":"uint32[5]","name":"probs","type":"uint32[5]"},{"internalType":"uint256","name":"scale","type":"uint256"},{"internalType":"uint32","name":"probScale","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vrfSystem","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"winnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawWinnings","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405268015af1d78b58c40000601b5568056bc75e2d63100000601c55683635c9adc5dea00000601d556802b5e3af16b1880000601e55348015610043575f5ffd5b5060405161429e38038061429e83398101604081905261006291610552565b60015f5561006f3361034a565b6001600160a01b0381161580159061009057506001600160a01b0381163b15155b6100ce5760405162461bcd60e51b815260206004820152600b60248201526a24b73b30b634b2102b292360a91b604482015260640160405180910390fd5b600280546001600160a01b0319166001600160a01b0383161790556040805160a0810182526702c68af0bb140000815267058d15e1762800006020820152670c7d713b49da0000918101919091526717979cfe362a00006060820152673bacab37b62e0000608082015261014690600390600561046e565b506040805160a08101825262061a808152620493e0602082015262030d4091810191909152620138806060820152614e20608082015261018a9060129060056104ac565b506040805160a08101825267016345785d8a00008152670429d069189e00006020820152670de0b6b3a76400009181019190915267257853b1dd8e00006060820152675a34a38fc00a000060808201526101e890600890600561046e565b506040805160a0810182526207a12081526203d0906020820152620249f091810191909152620138806060820152614e20608082015261022c9060139060056104ac565b506040805160a08101825266b1a2bc2ec500008152670214e8348c4f000060208201526706f05b59d3b20000918101919091526724150e398004000060608201526791b77e5e5d9a0000608082015261028990600d90600561046e565b506040805160a081018252620927c0815262030d406020820152620186a09181019190915262011170606082015261753060808201526102cd9060149060056104ac565b506102d75f61039b565b6102e1600161039b565b6102eb600261039b565b678ac7230489e80000601855676124fee993bc0000601955673782dace9d900000601a556040516001600160a01b038216905f907ffa7c1135fc9314fb1ade3064afde83939c1f97a43b4f6e67ef067fd55214bbf1908290a3506105a7565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f8160028111156103ae576103ae61057f565b90505f60038260ff16600381106103c7576103c7610593565b6005020154905060015b60058160ff16101561044f578160038460ff16600381106103f4576103f4610593565b600502018260ff166005811061040c5761040c610593565b015411156104475760038360ff166003811061042a5761042a610593565b600502018160ff166005811061044257610442610593565b015491505b6001016103d1565b508060158360ff166003811061046757610467610593565b0155505050565b826005810192821561049c579160200282015b8281111561049c578251825591602001919060010190610481565b506104a892915061053e565b5090565b60018301918390821561049c579160200282015f5b8382111561050557835183826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026104c1565b80156105355782816101000a81549063ffffffff0219169055600401602081600301049283019260010302610505565b50506104a89291505b5b808211156104a8575f815560010161053f565b5f60208284031215610562575f5ffd5b81516001600160a01b0381168114610578575f5ffd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b613cea806105b45f395ff3fe6080604052600436106102ed575f3560e01c80639dbc559e11610186578063cc42e83a116100dc578063ea3a149911610087578063f0a8e80311610062578063f0a8e803146108d3578063f2fde38b146108e8578063f436aa6614610907575f5ffd5b8063ea3a149914610873578063ec6a48a01461089e578063ecbd56d3146108b4575f5ffd5b8063d9db58d1116100b7578063d9db58d114610812578063db2e21bc14610840578063e5d72c3214610854575f5ffd5b8063cc42e83a146107d7578063d0e30db0146107eb578063d50eadba146107f3575f5ffd5b8063b87a7a7f1161013c578063c608d27d11610117578063c608d27d1461076e578063c640c1f61461078d578063c8fabc0a146107b8575f5ffd5b8063b87a7a7f14610727578063bb261ac71461073c578063c3d438111461075b575f5ffd5b8063a90471e01161016c578063a90471e0146106b5578063acfdb804146106d4578063ae3611f214610708575f5ffd5b80639dbc559e1461064e578063a7ecd7de146106a0575f5ffd5b80637130dfc9116102465780638c65c81f116101f15780638fbbf721116101cc5780638fbbf721146105e657806395687fc4146106055780639b0b5bb214610639575f5ffd5b80638c65c81f146105115780638da5cb5b146105965780638f561acc146105c7575f5ffd5b80638456cb59116102215780638456cb59146104bf578063881eff1e146104d35780638c257e26146104f2575f5ffd5b80637130dfc914610476578063718bf7b61461048b5780637e95b523146104aa575f5ffd5b806357314870116102a65780636e53ca46116102815780636e53ca46146104265780636ef98b21146104455780636f9fb98a14610464575f5ffd5b806357314870146103b55780635c975abb146103de57806366c63287146103f7575f5ffd5b80633f4ba83a116102d65780633f4ba83a1461034657806340662ed81461035a5780634e43603a14610379575f5ffd5b80631804f2d2146102f1578063230205d314610325575b5f5ffd5b3480156102fc575f5ffd5b5061031061030b366004613661565b610926565b60405190151581526020015b60405180910390f35b348015610330575f5ffd5b5061034461033f366004613678565b61095e565b005b348015610351575f5ffd5b50610344610b02565b348015610365575f5ffd5b50610344610374366004613661565b610b64565b348015610384575f5ffd5b506103986103933660046136e9565b610c7d565b60408051938452602084019290925215159082015260600161031c565b3480156103c0575f5ffd5b506103d0670de0b6b3a764000081565b60405190815260200161031c565b3480156103e9575f5ffd5b50601f546103109060ff1681565b348015610402575f5ffd5b50610416610411366004613729565b610cf6565b60405161031c9493929190613742565b348015610431575f5ffd5b506103446104403660046137bf565b610dfc565b348015610450575f5ffd5b5061034461045f366004613661565b610ed2565b34801561046f575f5ffd5b50476103d0565b348015610481575f5ffd5b506103d0610e1081565b348015610496575f5ffd5b506103446104a53660046137e4565b61104a565b3480156104b5575f5ffd5b506103d0601b5481565b3480156104ca575f5ffd5b50610344611201565b3480156104de575f5ffd5b506103446104ed366004613661565b611266565b3480156104fd575f5ffd5b5061034461050c36600461387b565b611379565b34801561051c575f5ffd5b5061058361052b366004613661565b602080525f908152604090208054600182015460028301546003909301546001600160a01b0383169360ff600160a01b8504811694600160a81b90048116939267ffffffffffffffff811691600160401b9091041687565b60405161031c979695949392919061392a565b3480156105a1575f5ffd5b506001546001600160a01b03165b6040516001600160a01b03909116815260200161031c565b3480156105d2575f5ffd5b506103446105e136600461397f565b611422565b3480156105f1575f5ffd5b50610344610600366004613661565b6118e7565b348015610610575f5ffd5b5061062461061f36600461397f565b611a9b565b60405163ffffffff909116815260200161031c565b348015610644575f5ffd5b506103d0601c5481565b348015610659575f5ffd5b5061066d61066836600461399f565b611adb565b604080519687526020870195909552938501929092521515606084015215156080830152151560a082015260c00161031c565b3480156106ab575f5ffd5b506103d0601d5481565b3480156106c0575f5ffd5b506103446106cf366004613661565b611c58565b3480156106df575f5ffd5b506103d06106ee3660046136e9565b6001600160a01b03165f9081526023602052604090205490565b348015610713575f5ffd5b506103446107223660046136e9565b611ef5565b348015610732575f5ffd5b506103d0601e5481565b348015610747575f5ffd5b506103446107563660046139c7565b612013565b610344610769366004613729565b6120c4565b348015610779575f5ffd5b50610344610788366004613661565b61265f565b348015610798575f5ffd5b506103d06107a73660046136e9565b60256020525f908152604090205481565b3480156107c3575f5ffd5b506103446107d236600461399f565b61276c565b3480156107e2575f5ffd5b5061034461285c565b610344612975565b3480156107fe575f5ffd5b506103d061080d36600461397f565b612a6e565b34801561081d575f5ffd5b5061031061082c366004613661565b60216020525f908152604090205460ff1681565b34801561084b575f5ffd5b50610344612a97565b34801561085f575f5ffd5b506103d061086e366004613661565b612c09565b34801561087e575f5ffd5b506103d061088d3660046136e9565b60226020525f908152604090205481565b3480156108a9575f5ffd5b50610624620f424081565b3480156108bf575f5ffd5b506103446108ce366004613661565b612c1f565b3480156108de575f5ffd5b506103d06105dc81565b3480156108f3575f5ffd5b506103446109023660046136e9565b612d37565b348015610912575f5ffd5b506002546105af906001600160a01b031681565b5f818152602080526040812060030154600160401b900460ff168061095857505f8281526021602052604090205460ff165b92915050565b336109716001546001600160a01b031690565b6001600160a01b0316146109b95760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064015b60405180910390fd5b60025f5403610a0a5760405162461bcd60e51b815260206004820152601a60248201527f5265656e7472616e637947756172643a207265656e7472616e7400000000000060448201526064016109b0565b60025f90815581905b81811015610af8575f848483818110610a2e57610a2e613a0a565b9050602002016020810190610a4391906136e9565b6001600160a01b0381165f90815260226020526040812054919250819003610a6c575050610af0565b6001600160a01b0382165f90815260226020526040812055610a8e8282612def565b610a9782612e4b565b610aaa6001600160a01b03831682612e94565b816001600160a01b03167f24215bbaf0832fa4d6ffef16dee3971d8b714921fef3ad63f793d578983c6dc282604051610ae591815260200190565b60405180910390a250505b600101610a13565b505060015f555050565b33610b156001546001600160a01b031690565b6001600160a01b031614610b585760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b601f805460ff19169055565b33610b776001546001600160a01b031690565b6001600160a01b031614610bba5760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b5f81118015610bd757506002601c54610bd39190613a46565b8111155b610c0d5760405162461bcd60e51b8152602060048201526007602482015266125b9d985b1a5960ca1b60448201526064016109b0565b6040517f4d41585f5041594f55545f5045525f524f554e44000000000000000000000000815260140160408051918290038220601e54835260208301849052917f185daf617c465de5e0042f7aae1503b1a216ea8927cacf296e58b516e82afea8910160405180910390a2601e55565b6001600160a01b0381165f908152602260209081526040808320546025909252822054909180610caf610e1084613a59565b421015610cd7576001600160a01b0385165f908152602660205260409020546105dc11610cda565b60015b601f5490915060ff16158015610ced5750805b93959294505050565b610cfe61352c565b610d0661352c565b5f5f6003856002811115610d1c57610d1c6138f6565b60ff1660038110610d2f57610d2f613a0a565b6040805160a081019182905292600592830201919082845b815481526020019060010190808311610d4757505050505093506012856002811115610d7557610d756138f6565b60ff1660038110610d8857610d88613a0a565b6040805160a0810191829052929190910190600590825f855b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610da157905050505050509250670de0b6b3a76400009150620f424090509193509193565b33610e0f6001546001600160a01b031690565b6001600160a01b031614610e525760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b6040805160608101918290525f9160189060039082845b815481526020019060010190808311610e695750505050509050816018906003610e9492919061354a565b507f4ab4f1903751cf7f002f7fb0a3f2fc6b5870092cce34d74b45d05c7dc821aeac8183604051610ec6929190613a6c565b60405180910390a15050565b33610ee56001546001600160a01b031690565b6001600160a01b031614610f285760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b60025f5403610f795760405162461bcd60e51b815260206004820152601a60248201527f5265656e7472616e637947756172643a207265656e7472616e7400000000000060448201526064016109b0565b60025f5580610fb45760405162461bcd60e51b8152602060048201526007602482015266125b9d985b1a5960ca1b60448201526064016109b0565b80602454601c54610fc59190613a59565b610fcf9190613a59565b47101561101e5760405162461bcd60e51b815260206004820152600c60248201527f496e73756666696369656e74000000000000000000000000000000000000000060448201526064016109b0565b611043816110346001546001600160a01b031690565b6001600160a01b031690612e94565b5060015f55565b3361105d6001546001600160a01b031690565b6001600160a01b0316146110a05760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b5f8581526021602052604090205460ff16156110fe5760405162461bcd60e51b815260206004820152601060248201527f416c726561647920726566756e6465640000000000000000000000000000000060448201526064016109b0565b5f858152602080526040902080546001600160a01b03161580159061112f57506003810154600160401b900460ff16155b61117b5760405162461bcd60e51b815260206004820152600b60248201527f4e6f742070656e64696e6700000000000000000000000000000000000000000060448201526064016109b0565b6002546040517f0e65b14c0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690630e65b14c906111cc9089908990899089908990600401613aa5565b5f604051808303815f87803b1580156111e3575f5ffd5b505af11580156111f5573d5f5f3e3d5ffd5b50505050505050505050565b336112146001546001600160a01b031690565b6001600160a01b0316146112575760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b601f805460ff19166001179055565b336112796001546001600160a01b031690565b6001600160a01b0316146112bc5760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b5f811180156112d35750678ac7230489e800008111155b6113095760405162461bcd60e51b8152602060048201526007602482015266125b9d985b1a5960ca1b60448201526064016109b0565b6040517f4d41585f42455400000000000000000000000000000000000000000000000000815260070160408051918290038220601b54835260208301849052917f185daf617c465de5e0042f7aae1503b1a216ea8927cacf296e58b516e82afea8910160405180910390a2601b55565b3361138c6001546001600160a01b031690565b6001600160a01b0316146113cf5760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b6113da5f8787612f88565b6113e660018585612f88565b6113f260028383612f88565b6040517fbfa278675f737daec2306377d428d184046f1d99f4816008d521aa1eb870a4b5905f90a1505050505050565b6002546001600160a01b0316331461147c5760405162461bcd60e51b815260206004820152600d60248201527f4e6f742056524653797374656d0000000000000000000000000000000000000060448201526064016109b0565b5f828152602080526040902080546001600160a01b03166114df5760405162461bcd60e51b815260206004820152600f60248201527f556e6b6e6f776e2072657175657374000000000000000000000000000000000060448201526064016109b0565b5f8381526021602052604090205460ff161561153d5760405162461bcd60e51b815260206004820152600860248201527f526566756e64656400000000000000000000000000000000000000000000000060448201526064016109b0565b6003810154600160401b900460ff16156115995760405162461bcd60e51b815260206004820152600760248201527f536574746c65640000000000000000000000000000000000000000000000000060448201526064016109b0565b604080516020808201869052818301859052825180830384018152606090920190925280519101205f6115cf620f424083613ae8565b83549091505f90600160a01b900460ff1660028111156115f1576115f16138f6565b90505f60128260ff166003811061160a5761160a613a0a565b6040805160a0810191829052929190910190600590825f855b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611623579050505050505090505f60038360ff166003811061167d5761167d613a0a565b6040805160a081019182905292600592830201919082845b81548152602001906001019080831161169557509394505f9350839250829150505b60058160ff16101561170d57848160ff16600581106116d8576116d8613a0a565b60200201516116e79084613afb565b92508263ffffffff168763ffffffff1610156117055780915061170d565b6001016116b7565b505f838260ff166005811061172457611724613a0a565b602002015190505f670de0b6b3a7640000828b600101546117459190613b17565b61174f9190613a46565b8a5460ff8516600160a81b0260ff60a81b19909116178b5560028b0181905560038b01805468ffffffffffffffffff191667ffffffffffffffff421617600160401b179055905080156118825789546001600160a01b03165f90815260226020526040812054906117c08383613a59565b90508060225f8e5f015f9054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020015f20819055508260235f8e5f015f9054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020015f205f8282546118469190613a59565b925050819055508260245f82825461185e9190613a59565b90915550505f82900361187f578b5461187f906001600160a01b0316613110565b50505b89546040518d916001600160a01b038116917f7d46a10146660916398efe8b198c8bf3b0b4f49f65d690e66b9fc77d95664c7f916118d191600160a01b90910460ff1690889088908890613b2e565b60405180910390a3505050505050505050505050565b336118fa6001546001600160a01b031690565b6001600160a01b03161461193d5760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b60025f540361198e5760405162461bcd60e51b815260206004820152601a60248201527f5265656e7472616e637947756172643a207265656e7472616e7400000000000060448201526064016109b0565b60025f908155805b602754811080156119a657508282105b15611a92575f602782815481106119bf576119bf613a0a565b5f9182526020808320909101546001600160a01b031680835260229091526040822054909250908190036119fd576119f683613189565b5050611996565b6001600160a01b0382165f90815260226020526040812055611a1f8282612def565b611a2883613189565b611a3b6001600160a01b03831682612e94565b816001600160a01b03167f24215bbaf0832fa4d6ffef16dee3971d8b714921fef3ad63f793d578983c6dc282604051611a7691815260200190565b60405180910390a2611a89600185613a59565b93505050611996565b505060015f5550565b60128260038110611aaa575f80fd5b018160058110611ab8575f80fd5b60089182820401919006600402915091509054906101000a900463ffffffff1681565b5f5f5f5f5f5f5f87118015611af25750601b548711155b611b3e5760405162461bcd60e51b815260206004820152600d60248201527f496e76616c6964207374616b650000000000000000000000000000000000000060448201526064016109b0565b5f6015896002811115611b5357611b536138f6565b60ff1660038110611b6657611b66613a0a565b01549050670de0b6b3a7640000611b7d828a613b17565b611b879190613a46565b96504795505f8690505f88602454601c54611ba29190613b5a565b611bac9190613b5a565b9050611bb88183613b81565b965088602454601c54611bcb9190613a59565b611bd59190613a59565b601e54335f90815260256020526040812054928b10159850908b1115965090611c0190610e1090613a59565b421015611c2057335f908152602660205260409020546105dc11611c23565b60015b601f5490915060ff16158015611c365750855b8015611c3f5750865b8015611c485750805b9450505050509295509295509295565b60025f5403611ca95760405162461bcd60e51b815260206004820152601a60248201527f5265656e7472616e637947756172643a207265656e7472616e7400000000000060448201526064016109b0565b60025f908155818152602080526040902080546001600160a01b03163314611d135760405162461bcd60e51b815260206004820152600e60248201527f4e6f7420796f757220726f756e6400000000000000000000000000000000000060448201526064016109b0565b6003810154600160401b900460ff1615611d6f5760405162461bcd60e51b815260206004820152600f60248201527f416c726561647920736574746c6564000000000000000000000000000000000060448201526064016109b0565b5f8281526021602052604090205460ff1615611dcd5760405162461bcd60e51b815260206004820152601060248201527f416c726561647920726566756e6465640000000000000000000000000000000060448201526064016109b0565b6003810154611de89067ffffffffffffffff16610e10613ba7565b67ffffffffffffffff164211611e405760405162461bcd60e51b815260206004820152601660248201527f526566756e642077696e646f77206e6f74206f70656e0000000000000000000060448201526064016109b0565b6001808201545f848152602160209081526040808320805460ff191686179055908052812080547fffffffffffffffffffff0000000000000000000000000000000000000000000016815592830181905560028301556003909101805468ffffffffffffffffff19169055611eb53382612e94565b604051818152839033907fc48851accffeea705897873d5aaa2628e8fad5b3b165c2c16e9bd6f4299d67839060200160405180910390a3505060015f5550565b33611f086001546001600160a01b031690565b6001600160a01b031614611f4b5760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b6001600160a01b03811615801590611f6c57506001600160a01b0381163b15155b611fb85760405162461bcd60e51b815260206004820152600b60248201527f496e76616c69642056524600000000000000000000000000000000000000000060448201526064016109b0565b6002546040516001600160a01b038084169216907ffa7c1135fc9314fb1ade3064afde83939c1f97a43b4f6e67ef067fd55214bbf1905f90a3600280546001600160a01b0319166001600160a01b0392909216919091179055565b336120266001546001600160a01b031690565b6001600160a01b0316146120695760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b612074838383612f88565b826002811115612086576120866138f6565b7f92ea18de6e051ff3a0c9198f7ed922c601b17c4367161be64c36d177764a4b9f83836040516120b7929190613bda565b60405180910390a2505050565b60025f54036121155760405162461bcd60e51b815260206004820152601a60248201527f5265656e7472616e637947756172643a207265656e7472616e7400000000000060448201526064016109b0565b60025f55601f5460ff161561216c5760405162461bcd60e51b815260206004820152600660248201527f506175736564000000000000000000000000000000000000000000000000000060448201526064016109b0565b5f6018826002811115612181576121816138f6565b60ff166003811061219457612194613a0a565b015490505f81116121e75760405162461bcd60e51b815260206004820152600d60248201527f5072696365206e6f74207365740000000000000000000000000000000000000060448201526064016109b0565b8034146122365760405162461bcd60e51b815260206004820152601a60248201527f5374616b65206d75737420657175616c20626f7820707269636500000000000060448201526064016109b0565b601b543411156122885760405162461bcd60e51b815260206004820152600c60248201527f42657420746f6f2068696768000000000000000000000000000000000000000060448201526064016109b0565b335f908152602560205260409020546122a490610e1090613a59565b42106122c757335f90815260256020908152604080832042905560269091528120555b335f908152602660205260409020546105dc116123265760405162461bcd60e51b815260206004820152601360248201527f506c6179206c696d69742065786365656465640000000000000000000000000060448201526064016109b0565b335f908152602660205260408120805460019290612345908490613a59565b909155505f9050670de0b6b3a76400006015846002811115612369576123696138f6565b60ff166003811061237c5761237c613a0a565b01546123889034613b17565b6123929190613a46565b905060245481601c546123a59190613a59565b6123af9190613a59565b4710156123fe5760405162461bcd60e51b815260206004820152600c60248201527f42616e6b726f6c6c206c6f77000000000000000000000000000000000000000060448201526064016109b0565b601e548111156124505760405162461bcd60e51b815260206004820152600a60248201527f5061796f7574206361700000000000000000000000000000000000000000000060448201526064016109b0565b6002546040517fe39144720000000000000000000000000000000000000000000000000000000081525f60048201819052916001600160a01b03169063e3914472906024016020604051808303815f875af11580156124b1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124d59190613c22565b90506040518060e00160405280336001600160a01b03168152602001856002811115612503576125036138f6565b815260ff602080830191909152346040808401919091525f6060840181905267ffffffffffffffff4216608085015260a0909301839052848352818052909120825181546001600160a01b039091166001600160a01b031982168117835592840151919283917fffffffffffffffffffffff0000000000000000000000000000000000000000001617600160a01b8360028111156125a3576125a36138f6565b0217905550604082810151825460ff909116600160a81b0260ff60a81b19909116178255606083015160018301556080830151600283015560a08301516003909201805460c0909401511515600160401b0268ffffffffffffffffff1990941667ffffffffffffffff9093169290921792909217905551819033907f4dcf509d43474fe92b71e714b2ae9514045eb85b4bd0f491d6439094fb94a4789061264d9088903490613c39565b60405180910390a3505060015f555050565b336126726001546001600160a01b031690565b6001600160a01b0316146126b55760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b5f811180156126c65750601d548111155b6126fc5760405162461bcd60e51b8152602060048201526007602482015266125b9d985b1a5960ca1b60448201526064016109b0565b6040517f4d494e5f42414e4b524f4c4c00000000000000000000000000000000000000008152600c0160408051918290038220601c54835260208301849052917f185daf617c465de5e0042f7aae1503b1a216ea8927cacf296e58b516e82afea8910160405180910390a2601c55565b3361277f6001546001600160a01b031690565b6001600160a01b0316146127c25760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b5f8260028111156127d5576127d56138f6565b90505f60188260ff16600381106127ee576127ee613a0a565b015490508260188360ff166003811061280957612809613a0a565b015583600281111561281d5761281d6138f6565b60408051838152602081018690527fd7d3bd06b361f61685a9b396d3088181776a0119ffecca2ff19ef8efa2f30dc3910160405180910390a250505050565b60025f54036128ad5760405162461bcd60e51b815260206004820152601a60248201527f5265656e7472616e637947756172643a207265656e7472616e7400000000000060448201526064016109b0565b60025f908155338152602260205260409020548061290d5760405162461bcd60e51b815260206004820152600b60248201527f4e6f2077696e6e696e677300000000000000000000000000000000000000000060448201526064016109b0565b335f818152602260205260408120556129269082612def565b61292f33612e4b565b6129393382612e94565b60405181815233907f24215bbaf0832fa4d6ffef16dee3971d8b714921fef3ad63f793d578983c6dc29060200160405180910390a25060015f55565b336129886001546001600160a01b031690565b6001600160a01b0316146129cb5760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b5f3411612a1a5760405162461bcd60e51b815260206004820152600c60248201527f4d757374206465706f736974000000000000000000000000000000000000000060448201526064016109b0565b601d54471115612a6c5760405162461bcd60e51b815260206004820152601460248201527f45786365656473206d61782062616e6b726f6c6c00000000000000000000000060448201526064016109b0565b565b60038260038110612a7d575f80fd5b600502018160058110612a8e575f80fd5b01549150829050565b33612aaa6001546001600160a01b031690565b6001600160a01b031614612aed5760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b60025f5403612b3e5760405162461bcd60e51b815260206004820152601a60248201527f5265656e7472616e637947756172643a207265656e7472616e7400000000000060448201526064016109b0565b60025f55601f5460ff16612b945760405162461bcd60e51b815260206004820152600a60248201527f4e6f74207061757365640000000000000000000000000000000000000000000060448201526064016109b0565b60245447908111612be75760405162461bcd60e51b815260206004820152601160248201527f50726573657276652077696e6e696e677300000000000000000000000000000060448201526064016109b0565b61104360245482612bf89190613c54565b6001546001600160a01b0316611034565b60188160038110612c18575f80fd5b0154905081565b33612c326001546001600160a01b031690565b6001600160a01b031614612c755760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b601c548110158015612c91575069010f0cf064dd592000008111155b612cc75760405162461bcd60e51b8152602060048201526007602482015266125b9d985b1a5960ca1b60448201526064016109b0565b6040517f4d41585f42414e4b524f4c4c00000000000000000000000000000000000000008152600c0160408051918290038220601d54835260208301849052917f185daf617c465de5e0042f7aae1503b1a216ea8927cacf296e58b516e82afea8910160405180910390a2601d55565b33612d4a6001546001600160a01b031690565b6001600160a01b031614612d8d5760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b6001600160a01b038116612de35760405162461bcd60e51b815260206004820152600d60248201527f4f776e61626c653a207a65726f0000000000000000000000000000000000000060448201526064016109b0565b612dec816132fd565b50565b6001600160a01b0382165f9081526023602052604081205490818311612e155782612e17565b815b90508015612e45576001600160a01b0384165f90815260236020526040902081830390556024805482900390555b50505050565b6001600160a01b0381165f9081526028602052604090205415801590612e8657506001600160a01b0381165f90815260226020526040902054155b15612dec57612dec8161334e565b80471015612ee45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016109b0565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114612f2d576040519150601f19603f3d011682016040523d82523d5f602084013e612f32565b606091505b5050905080612f835760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20756e61626c6520746f2073656e642076616c756500000060448201526064016109b0565b505050565b5f805b60058110156130425768056bc75e2d63100000848260058110612fb057612fb0613a0a565b602002013511156130035760405162461bcd60e51b815260206004820152600e60248201527f6d756c7420746f6f206c6172676500000000000000000000000000000000000060448201526064016109b0565b82816005811061301557613015613a0a565b6020020160208101906130289190613c67565b6130389063ffffffff1683613a59565b9150600101612f8b565b50620f424081146130955760405162461bcd60e51b815260206004820152601d60248201527f70726f626162696c6974696573206d7573742073756d20746f2031653600000060448201526064016109b0565b8260038560028111156130aa576130aa6138f6565b60ff16600381106130bd576130bd613a0a565b600502019060056130cf929190613588565b508160128560028111156130e5576130e56138f6565b60ff16600381106130f8576130f8613a0a565b6131069291019060056135b5565b50612e4584613459565b6001600160a01b0381165f908152602860205260408120549003612dec57602780546001810182557f98a476f1687bc3d60a2da2adbcba2c46958e61fa2fb4042cd7bc5816a710195b0180546001600160a01b0319166001600160a01b03939093169283179055545f9182526028602052604090912055565b60275481106131da5760405162461bcd60e51b815260206004820152600960248201527f496e646578204f4f42000000000000000000000000000000000000000000000060448201526064016109b0565b5f602782815481106131ee576131ee613a0a565b5f9182526020822001546027546001600160a01b03909116925061321490600190613c54565b90508083146132ac575f6027828154811061323157613231613a0a565b5f91825260209091200154602780546001600160a01b03909216925082918690811061325f5761325f613a0a565b5f91825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055613292846001613a59565b6001600160a01b039091165f908152602860205260409020555b60278054806132bd576132bd613c80565b5f828152602080822083015f1990810180546001600160a01b03191690559092019092556001600160a01b03939093168152602890925250604081205550565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0381165f9081526028602052604081205490819003613372575050565b602754818114613408575f602761338a600184613c54565b8154811061339a5761339a613a0a565b5f918252602090912001546001600160a01b031690508060276133be600186613c54565b815481106133ce576133ce613a0a565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559290911681526028909152604090208290555b602780548061341957613419613c80565b5f828152602080822083015f1990810180546001600160a01b03191690559092019092556001600160a01b03949094168152602890935250506040812055565b5f81600281111561346c5761346c6138f6565b90505f60038260ff166003811061348557613485613a0a565b6005020154905060015b60058160ff16101561350d578160038460ff16600381106134b2576134b2613a0a565b600502018260ff16600581106134ca576134ca613a0a565b015411156135055760038360ff16600381106134e8576134e8613a0a565b600502018160ff166005811061350057613500613a0a565b015491505b60010161348f565b508060158360ff166003811061352557613525613a0a565b0155505050565b6040518060a001604052806005906020820280368337509192915050565b8260038101928215613578579160200282015b8281111561357857823582559160200191906001019061355d565b5061358492915061364d565b5090565b8260058101928215613578579160200282018281111561357857823582559160200191906001019061355d565b600183019183908215613578579160200282015f5b8382111561361457833563ffffffff1683826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026135ca565b80156136445782816101000a81549063ffffffff0219169055600401602081600301049283019260010302613614565b50506135849291505b5b80821115613584575f815560010161364e565b5f60208284031215613671575f5ffd5b5035919050565b5f5f60208385031215613689575f5ffd5b823567ffffffffffffffff81111561369f575f5ffd5b8301601f810185136136af575f5ffd5b803567ffffffffffffffff8111156136c5575f5ffd5b8560208260051b84010111156136d9575f5ffd5b6020919091019590945092505050565b5f602082840312156136f9575f5ffd5b81356001600160a01b038116811461370f575f5ffd5b9392505050565b803560038110613724575f5ffd5b919050565b5f60208284031215613739575f5ffd5b61370f82613716565b610180810181865f5b600581101561376a57815183526020928301929091019060010161374b565b50505060a08201855f5b600581101561379957815163ffffffff16835260209283019290910190600101613774565b505050836101408301526137b661016083018463ffffffff169052565b95945050505050565b5f606082840312156137cf575f5ffd5b826060830111156137de575f5ffd5b50919050565b5f5f5f5f5f608086880312156137f8575f5ffd5b853594506020860135935060408601359250606086013567ffffffffffffffff811115613823575f5ffd5b8601601f81018813613833575f5ffd5b803567ffffffffffffffff811115613849575f5ffd5b88602082840101111561385a575f5ffd5b959894975092955050506020019190565b8060a08101831015610958575f5ffd5b5f5f5f5f5f5f6103c08789031215613891575f5ffd5b61389b888861386b565b95506138aa8860a0890161386b565b94506138ba88610140890161386b565b93506138ca886101e0890161386b565b92506138da88610280890161386b565b91506138ea88610320890161386b565b90509295509295509295565b634e487b7160e01b5f52602160045260245ffd5b6003811061392657634e487b7160e01b5f52602160045260245ffd5b9052565b6001600160a01b038816815260e08101613947602083018961390a565b60ff9690961660408201526060810194909452608084019290925267ffffffffffffffff1660a0830152151560c09091015292915050565b5f5f60408385031215613990575f5ffd5b50508035926020909101359150565b5f5f604083850312156139b0575f5ffd5b6139b983613716565b946020939093013593505050565b5f5f5f61016084860312156139da575f5ffd5b6139e384613716565b92506139f2856020860161386b565b9150613a018560c0860161386b565b90509250925092565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f82613a5457613a54613a1e565b500490565b8082018082111561095857610958613a32565b60c0810181845f5b6003811015613a93578151835260209283019290910190600101613a74565b50505060608360608401379392505050565b85815284602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f909201601f19160101949350505050565b5f82613af657613af6613a1e565b500690565b63ffffffff818116838216019081111561095857610958613a32565b808202811582820484141761095857610958613a32565b60808101613b3c828761390a565b60ff8516602083015283604083015282606083015295945050505050565b8082018281125f831280158216821582161715613b7957613b79613a32565b505092915050565b8181035f831280158383131683831282161715613ba057613ba0613a32565b5092915050565b67ffffffffffffffff818116838216019081111561095857610958613a32565b803563ffffffff81168114613724575f5ffd5b610140810160a084833760a08201835f5b6005811015613c185763ffffffff613c0283613bc7565b1683526020928301929190910190600101613beb565b5050509392505050565b5f60208284031215613c32575f5ffd5b5051919050565b60408101613c47828561390a565b8260208301529392505050565b8181038181111561095857610958613a32565b5f60208284031215613c77575f5ffd5b61370f82613bc7565b634e487b7160e01b5f52603160045260245ffdfe4f776e61626c653a2063616c6c6572206e6f74206f776e657200000000000000a264697066735822122090eba915763d5b117221ca23a51309ef0e7ee7451e597715a2858f8b32e9fef164736f6c634300081e00330000000000000000000000009ec728fce50c77e0bef7d34f1ab28a46409b7af1
Deployed Bytecode
0x6080604052600436106102ed575f3560e01c80639dbc559e11610186578063cc42e83a116100dc578063ea3a149911610087578063f0a8e80311610062578063f0a8e803146108d3578063f2fde38b146108e8578063f436aa6614610907575f5ffd5b8063ea3a149914610873578063ec6a48a01461089e578063ecbd56d3146108b4575f5ffd5b8063d9db58d1116100b7578063d9db58d114610812578063db2e21bc14610840578063e5d72c3214610854575f5ffd5b8063cc42e83a146107d7578063d0e30db0146107eb578063d50eadba146107f3575f5ffd5b8063b87a7a7f1161013c578063c608d27d11610117578063c608d27d1461076e578063c640c1f61461078d578063c8fabc0a146107b8575f5ffd5b8063b87a7a7f14610727578063bb261ac71461073c578063c3d438111461075b575f5ffd5b8063a90471e01161016c578063a90471e0146106b5578063acfdb804146106d4578063ae3611f214610708575f5ffd5b80639dbc559e1461064e578063a7ecd7de146106a0575f5ffd5b80637130dfc9116102465780638c65c81f116101f15780638fbbf721116101cc5780638fbbf721146105e657806395687fc4146106055780639b0b5bb214610639575f5ffd5b80638c65c81f146105115780638da5cb5b146105965780638f561acc146105c7575f5ffd5b80638456cb59116102215780638456cb59146104bf578063881eff1e146104d35780638c257e26146104f2575f5ffd5b80637130dfc914610476578063718bf7b61461048b5780637e95b523146104aa575f5ffd5b806357314870116102a65780636e53ca46116102815780636e53ca46146104265780636ef98b21146104455780636f9fb98a14610464575f5ffd5b806357314870146103b55780635c975abb146103de57806366c63287146103f7575f5ffd5b80633f4ba83a116102d65780633f4ba83a1461034657806340662ed81461035a5780634e43603a14610379575f5ffd5b80631804f2d2146102f1578063230205d314610325575b5f5ffd5b3480156102fc575f5ffd5b5061031061030b366004613661565b610926565b60405190151581526020015b60405180910390f35b348015610330575f5ffd5b5061034461033f366004613678565b61095e565b005b348015610351575f5ffd5b50610344610b02565b348015610365575f5ffd5b50610344610374366004613661565b610b64565b348015610384575f5ffd5b506103986103933660046136e9565b610c7d565b60408051938452602084019290925215159082015260600161031c565b3480156103c0575f5ffd5b506103d0670de0b6b3a764000081565b60405190815260200161031c565b3480156103e9575f5ffd5b50601f546103109060ff1681565b348015610402575f5ffd5b50610416610411366004613729565b610cf6565b60405161031c9493929190613742565b348015610431575f5ffd5b506103446104403660046137bf565b610dfc565b348015610450575f5ffd5b5061034461045f366004613661565b610ed2565b34801561046f575f5ffd5b50476103d0565b348015610481575f5ffd5b506103d0610e1081565b348015610496575f5ffd5b506103446104a53660046137e4565b61104a565b3480156104b5575f5ffd5b506103d0601b5481565b3480156104ca575f5ffd5b50610344611201565b3480156104de575f5ffd5b506103446104ed366004613661565b611266565b3480156104fd575f5ffd5b5061034461050c36600461387b565b611379565b34801561051c575f5ffd5b5061058361052b366004613661565b602080525f908152604090208054600182015460028301546003909301546001600160a01b0383169360ff600160a01b8504811694600160a81b90048116939267ffffffffffffffff811691600160401b9091041687565b60405161031c979695949392919061392a565b3480156105a1575f5ffd5b506001546001600160a01b03165b6040516001600160a01b03909116815260200161031c565b3480156105d2575f5ffd5b506103446105e136600461397f565b611422565b3480156105f1575f5ffd5b50610344610600366004613661565b6118e7565b348015610610575f5ffd5b5061062461061f36600461397f565b611a9b565b60405163ffffffff909116815260200161031c565b348015610644575f5ffd5b506103d0601c5481565b348015610659575f5ffd5b5061066d61066836600461399f565b611adb565b604080519687526020870195909552938501929092521515606084015215156080830152151560a082015260c00161031c565b3480156106ab575f5ffd5b506103d0601d5481565b3480156106c0575f5ffd5b506103446106cf366004613661565b611c58565b3480156106df575f5ffd5b506103d06106ee3660046136e9565b6001600160a01b03165f9081526023602052604090205490565b348015610713575f5ffd5b506103446107223660046136e9565b611ef5565b348015610732575f5ffd5b506103d0601e5481565b348015610747575f5ffd5b506103446107563660046139c7565b612013565b610344610769366004613729565b6120c4565b348015610779575f5ffd5b50610344610788366004613661565b61265f565b348015610798575f5ffd5b506103d06107a73660046136e9565b60256020525f908152604090205481565b3480156107c3575f5ffd5b506103446107d236600461399f565b61276c565b3480156107e2575f5ffd5b5061034461285c565b610344612975565b3480156107fe575f5ffd5b506103d061080d36600461397f565b612a6e565b34801561081d575f5ffd5b5061031061082c366004613661565b60216020525f908152604090205460ff1681565b34801561084b575f5ffd5b50610344612a97565b34801561085f575f5ffd5b506103d061086e366004613661565b612c09565b34801561087e575f5ffd5b506103d061088d3660046136e9565b60226020525f908152604090205481565b3480156108a9575f5ffd5b50610624620f424081565b3480156108bf575f5ffd5b506103446108ce366004613661565b612c1f565b3480156108de575f5ffd5b506103d06105dc81565b3480156108f3575f5ffd5b506103446109023660046136e9565b612d37565b348015610912575f5ffd5b506002546105af906001600160a01b031681565b5f818152602080526040812060030154600160401b900460ff168061095857505f8281526021602052604090205460ff165b92915050565b336109716001546001600160a01b031690565b6001600160a01b0316146109b95760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064015b60405180910390fd5b60025f5403610a0a5760405162461bcd60e51b815260206004820152601a60248201527f5265656e7472616e637947756172643a207265656e7472616e7400000000000060448201526064016109b0565b60025f90815581905b81811015610af8575f848483818110610a2e57610a2e613a0a565b9050602002016020810190610a4391906136e9565b6001600160a01b0381165f90815260226020526040812054919250819003610a6c575050610af0565b6001600160a01b0382165f90815260226020526040812055610a8e8282612def565b610a9782612e4b565b610aaa6001600160a01b03831682612e94565b816001600160a01b03167f24215bbaf0832fa4d6ffef16dee3971d8b714921fef3ad63f793d578983c6dc282604051610ae591815260200190565b60405180910390a250505b600101610a13565b505060015f555050565b33610b156001546001600160a01b031690565b6001600160a01b031614610b585760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b601f805460ff19169055565b33610b776001546001600160a01b031690565b6001600160a01b031614610bba5760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b5f81118015610bd757506002601c54610bd39190613a46565b8111155b610c0d5760405162461bcd60e51b8152602060048201526007602482015266125b9d985b1a5960ca1b60448201526064016109b0565b6040517f4d41585f5041594f55545f5045525f524f554e44000000000000000000000000815260140160408051918290038220601e54835260208301849052917f185daf617c465de5e0042f7aae1503b1a216ea8927cacf296e58b516e82afea8910160405180910390a2601e55565b6001600160a01b0381165f908152602260209081526040808320546025909252822054909180610caf610e1084613a59565b421015610cd7576001600160a01b0385165f908152602660205260409020546105dc11610cda565b60015b601f5490915060ff16158015610ced5750805b93959294505050565b610cfe61352c565b610d0661352c565b5f5f6003856002811115610d1c57610d1c6138f6565b60ff1660038110610d2f57610d2f613a0a565b6040805160a081019182905292600592830201919082845b815481526020019060010190808311610d4757505050505093506012856002811115610d7557610d756138f6565b60ff1660038110610d8857610d88613a0a565b6040805160a0810191829052929190910190600590825f855b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610da157905050505050509250670de0b6b3a76400009150620f424090509193509193565b33610e0f6001546001600160a01b031690565b6001600160a01b031614610e525760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b6040805160608101918290525f9160189060039082845b815481526020019060010190808311610e695750505050509050816018906003610e9492919061354a565b507f4ab4f1903751cf7f002f7fb0a3f2fc6b5870092cce34d74b45d05c7dc821aeac8183604051610ec6929190613a6c565b60405180910390a15050565b33610ee56001546001600160a01b031690565b6001600160a01b031614610f285760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b60025f5403610f795760405162461bcd60e51b815260206004820152601a60248201527f5265656e7472616e637947756172643a207265656e7472616e7400000000000060448201526064016109b0565b60025f5580610fb45760405162461bcd60e51b8152602060048201526007602482015266125b9d985b1a5960ca1b60448201526064016109b0565b80602454601c54610fc59190613a59565b610fcf9190613a59565b47101561101e5760405162461bcd60e51b815260206004820152600c60248201527f496e73756666696369656e74000000000000000000000000000000000000000060448201526064016109b0565b611043816110346001546001600160a01b031690565b6001600160a01b031690612e94565b5060015f55565b3361105d6001546001600160a01b031690565b6001600160a01b0316146110a05760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b5f8581526021602052604090205460ff16156110fe5760405162461bcd60e51b815260206004820152601060248201527f416c726561647920726566756e6465640000000000000000000000000000000060448201526064016109b0565b5f858152602080526040902080546001600160a01b03161580159061112f57506003810154600160401b900460ff16155b61117b5760405162461bcd60e51b815260206004820152600b60248201527f4e6f742070656e64696e6700000000000000000000000000000000000000000060448201526064016109b0565b6002546040517f0e65b14c0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690630e65b14c906111cc9089908990899089908990600401613aa5565b5f604051808303815f87803b1580156111e3575f5ffd5b505af11580156111f5573d5f5f3e3d5ffd5b50505050505050505050565b336112146001546001600160a01b031690565b6001600160a01b0316146112575760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b601f805460ff19166001179055565b336112796001546001600160a01b031690565b6001600160a01b0316146112bc5760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b5f811180156112d35750678ac7230489e800008111155b6113095760405162461bcd60e51b8152602060048201526007602482015266125b9d985b1a5960ca1b60448201526064016109b0565b6040517f4d41585f42455400000000000000000000000000000000000000000000000000815260070160408051918290038220601b54835260208301849052917f185daf617c465de5e0042f7aae1503b1a216ea8927cacf296e58b516e82afea8910160405180910390a2601b55565b3361138c6001546001600160a01b031690565b6001600160a01b0316146113cf5760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b6113da5f8787612f88565b6113e660018585612f88565b6113f260028383612f88565b6040517fbfa278675f737daec2306377d428d184046f1d99f4816008d521aa1eb870a4b5905f90a1505050505050565b6002546001600160a01b0316331461147c5760405162461bcd60e51b815260206004820152600d60248201527f4e6f742056524653797374656d0000000000000000000000000000000000000060448201526064016109b0565b5f828152602080526040902080546001600160a01b03166114df5760405162461bcd60e51b815260206004820152600f60248201527f556e6b6e6f776e2072657175657374000000000000000000000000000000000060448201526064016109b0565b5f8381526021602052604090205460ff161561153d5760405162461bcd60e51b815260206004820152600860248201527f526566756e64656400000000000000000000000000000000000000000000000060448201526064016109b0565b6003810154600160401b900460ff16156115995760405162461bcd60e51b815260206004820152600760248201527f536574746c65640000000000000000000000000000000000000000000000000060448201526064016109b0565b604080516020808201869052818301859052825180830384018152606090920190925280519101205f6115cf620f424083613ae8565b83549091505f90600160a01b900460ff1660028111156115f1576115f16138f6565b90505f60128260ff166003811061160a5761160a613a0a565b6040805160a0810191829052929190910190600590825f855b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411611623579050505050505090505f60038360ff166003811061167d5761167d613a0a565b6040805160a081019182905292600592830201919082845b81548152602001906001019080831161169557509394505f9350839250829150505b60058160ff16101561170d57848160ff16600581106116d8576116d8613a0a565b60200201516116e79084613afb565b92508263ffffffff168763ffffffff1610156117055780915061170d565b6001016116b7565b505f838260ff166005811061172457611724613a0a565b602002015190505f670de0b6b3a7640000828b600101546117459190613b17565b61174f9190613a46565b8a5460ff8516600160a81b0260ff60a81b19909116178b5560028b0181905560038b01805468ffffffffffffffffff191667ffffffffffffffff421617600160401b179055905080156118825789546001600160a01b03165f90815260226020526040812054906117c08383613a59565b90508060225f8e5f015f9054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020015f20819055508260235f8e5f015f9054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020015f205f8282546118469190613a59565b925050819055508260245f82825461185e9190613a59565b90915550505f82900361187f578b5461187f906001600160a01b0316613110565b50505b89546040518d916001600160a01b038116917f7d46a10146660916398efe8b198c8bf3b0b4f49f65d690e66b9fc77d95664c7f916118d191600160a01b90910460ff1690889088908890613b2e565b60405180910390a3505050505050505050505050565b336118fa6001546001600160a01b031690565b6001600160a01b03161461193d5760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b60025f540361198e5760405162461bcd60e51b815260206004820152601a60248201527f5265656e7472616e637947756172643a207265656e7472616e7400000000000060448201526064016109b0565b60025f908155805b602754811080156119a657508282105b15611a92575f602782815481106119bf576119bf613a0a565b5f9182526020808320909101546001600160a01b031680835260229091526040822054909250908190036119fd576119f683613189565b5050611996565b6001600160a01b0382165f90815260226020526040812055611a1f8282612def565b611a2883613189565b611a3b6001600160a01b03831682612e94565b816001600160a01b03167f24215bbaf0832fa4d6ffef16dee3971d8b714921fef3ad63f793d578983c6dc282604051611a7691815260200190565b60405180910390a2611a89600185613a59565b93505050611996565b505060015f5550565b60128260038110611aaa575f80fd5b018160058110611ab8575f80fd5b60089182820401919006600402915091509054906101000a900463ffffffff1681565b5f5f5f5f5f5f5f87118015611af25750601b548711155b611b3e5760405162461bcd60e51b815260206004820152600d60248201527f496e76616c6964207374616b650000000000000000000000000000000000000060448201526064016109b0565b5f6015896002811115611b5357611b536138f6565b60ff1660038110611b6657611b66613a0a565b01549050670de0b6b3a7640000611b7d828a613b17565b611b879190613a46565b96504795505f8690505f88602454601c54611ba29190613b5a565b611bac9190613b5a565b9050611bb88183613b81565b965088602454601c54611bcb9190613a59565b611bd59190613a59565b601e54335f90815260256020526040812054928b10159850908b1115965090611c0190610e1090613a59565b421015611c2057335f908152602660205260409020546105dc11611c23565b60015b601f5490915060ff16158015611c365750855b8015611c3f5750865b8015611c485750805b9450505050509295509295509295565b60025f5403611ca95760405162461bcd60e51b815260206004820152601a60248201527f5265656e7472616e637947756172643a207265656e7472616e7400000000000060448201526064016109b0565b60025f908155818152602080526040902080546001600160a01b03163314611d135760405162461bcd60e51b815260206004820152600e60248201527f4e6f7420796f757220726f756e6400000000000000000000000000000000000060448201526064016109b0565b6003810154600160401b900460ff1615611d6f5760405162461bcd60e51b815260206004820152600f60248201527f416c726561647920736574746c6564000000000000000000000000000000000060448201526064016109b0565b5f8281526021602052604090205460ff1615611dcd5760405162461bcd60e51b815260206004820152601060248201527f416c726561647920726566756e6465640000000000000000000000000000000060448201526064016109b0565b6003810154611de89067ffffffffffffffff16610e10613ba7565b67ffffffffffffffff164211611e405760405162461bcd60e51b815260206004820152601660248201527f526566756e642077696e646f77206e6f74206f70656e0000000000000000000060448201526064016109b0565b6001808201545f848152602160209081526040808320805460ff191686179055908052812080547fffffffffffffffffffff0000000000000000000000000000000000000000000016815592830181905560028301556003909101805468ffffffffffffffffff19169055611eb53382612e94565b604051818152839033907fc48851accffeea705897873d5aaa2628e8fad5b3b165c2c16e9bd6f4299d67839060200160405180910390a3505060015f5550565b33611f086001546001600160a01b031690565b6001600160a01b031614611f4b5760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b6001600160a01b03811615801590611f6c57506001600160a01b0381163b15155b611fb85760405162461bcd60e51b815260206004820152600b60248201527f496e76616c69642056524600000000000000000000000000000000000000000060448201526064016109b0565b6002546040516001600160a01b038084169216907ffa7c1135fc9314fb1ade3064afde83939c1f97a43b4f6e67ef067fd55214bbf1905f90a3600280546001600160a01b0319166001600160a01b0392909216919091179055565b336120266001546001600160a01b031690565b6001600160a01b0316146120695760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b612074838383612f88565b826002811115612086576120866138f6565b7f92ea18de6e051ff3a0c9198f7ed922c601b17c4367161be64c36d177764a4b9f83836040516120b7929190613bda565b60405180910390a2505050565b60025f54036121155760405162461bcd60e51b815260206004820152601a60248201527f5265656e7472616e637947756172643a207265656e7472616e7400000000000060448201526064016109b0565b60025f55601f5460ff161561216c5760405162461bcd60e51b815260206004820152600660248201527f506175736564000000000000000000000000000000000000000000000000000060448201526064016109b0565b5f6018826002811115612181576121816138f6565b60ff166003811061219457612194613a0a565b015490505f81116121e75760405162461bcd60e51b815260206004820152600d60248201527f5072696365206e6f74207365740000000000000000000000000000000000000060448201526064016109b0565b8034146122365760405162461bcd60e51b815260206004820152601a60248201527f5374616b65206d75737420657175616c20626f7820707269636500000000000060448201526064016109b0565b601b543411156122885760405162461bcd60e51b815260206004820152600c60248201527f42657420746f6f2068696768000000000000000000000000000000000000000060448201526064016109b0565b335f908152602560205260409020546122a490610e1090613a59565b42106122c757335f90815260256020908152604080832042905560269091528120555b335f908152602660205260409020546105dc116123265760405162461bcd60e51b815260206004820152601360248201527f506c6179206c696d69742065786365656465640000000000000000000000000060448201526064016109b0565b335f908152602660205260408120805460019290612345908490613a59565b909155505f9050670de0b6b3a76400006015846002811115612369576123696138f6565b60ff166003811061237c5761237c613a0a565b01546123889034613b17565b6123929190613a46565b905060245481601c546123a59190613a59565b6123af9190613a59565b4710156123fe5760405162461bcd60e51b815260206004820152600c60248201527f42616e6b726f6c6c206c6f77000000000000000000000000000000000000000060448201526064016109b0565b601e548111156124505760405162461bcd60e51b815260206004820152600a60248201527f5061796f7574206361700000000000000000000000000000000000000000000060448201526064016109b0565b6002546040517fe39144720000000000000000000000000000000000000000000000000000000081525f60048201819052916001600160a01b03169063e3914472906024016020604051808303815f875af11580156124b1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124d59190613c22565b90506040518060e00160405280336001600160a01b03168152602001856002811115612503576125036138f6565b815260ff602080830191909152346040808401919091525f6060840181905267ffffffffffffffff4216608085015260a0909301839052848352818052909120825181546001600160a01b039091166001600160a01b031982168117835592840151919283917fffffffffffffffffffffff0000000000000000000000000000000000000000001617600160a01b8360028111156125a3576125a36138f6565b0217905550604082810151825460ff909116600160a81b0260ff60a81b19909116178255606083015160018301556080830151600283015560a08301516003909201805460c0909401511515600160401b0268ffffffffffffffffff1990941667ffffffffffffffff9093169290921792909217905551819033907f4dcf509d43474fe92b71e714b2ae9514045eb85b4bd0f491d6439094fb94a4789061264d9088903490613c39565b60405180910390a3505060015f555050565b336126726001546001600160a01b031690565b6001600160a01b0316146126b55760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b5f811180156126c65750601d548111155b6126fc5760405162461bcd60e51b8152602060048201526007602482015266125b9d985b1a5960ca1b60448201526064016109b0565b6040517f4d494e5f42414e4b524f4c4c00000000000000000000000000000000000000008152600c0160408051918290038220601c54835260208301849052917f185daf617c465de5e0042f7aae1503b1a216ea8927cacf296e58b516e82afea8910160405180910390a2601c55565b3361277f6001546001600160a01b031690565b6001600160a01b0316146127c25760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b5f8260028111156127d5576127d56138f6565b90505f60188260ff16600381106127ee576127ee613a0a565b015490508260188360ff166003811061280957612809613a0a565b015583600281111561281d5761281d6138f6565b60408051838152602081018690527fd7d3bd06b361f61685a9b396d3088181776a0119ffecca2ff19ef8efa2f30dc3910160405180910390a250505050565b60025f54036128ad5760405162461bcd60e51b815260206004820152601a60248201527f5265656e7472616e637947756172643a207265656e7472616e7400000000000060448201526064016109b0565b60025f908155338152602260205260409020548061290d5760405162461bcd60e51b815260206004820152600b60248201527f4e6f2077696e6e696e677300000000000000000000000000000000000000000060448201526064016109b0565b335f818152602260205260408120556129269082612def565b61292f33612e4b565b6129393382612e94565b60405181815233907f24215bbaf0832fa4d6ffef16dee3971d8b714921fef3ad63f793d578983c6dc29060200160405180910390a25060015f55565b336129886001546001600160a01b031690565b6001600160a01b0316146129cb5760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b5f3411612a1a5760405162461bcd60e51b815260206004820152600c60248201527f4d757374206465706f736974000000000000000000000000000000000000000060448201526064016109b0565b601d54471115612a6c5760405162461bcd60e51b815260206004820152601460248201527f45786365656473206d61782062616e6b726f6c6c00000000000000000000000060448201526064016109b0565b565b60038260038110612a7d575f80fd5b600502018160058110612a8e575f80fd5b01549150829050565b33612aaa6001546001600160a01b031690565b6001600160a01b031614612aed5760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b60025f5403612b3e5760405162461bcd60e51b815260206004820152601a60248201527f5265656e7472616e637947756172643a207265656e7472616e7400000000000060448201526064016109b0565b60025f55601f5460ff16612b945760405162461bcd60e51b815260206004820152600a60248201527f4e6f74207061757365640000000000000000000000000000000000000000000060448201526064016109b0565b60245447908111612be75760405162461bcd60e51b815260206004820152601160248201527f50726573657276652077696e6e696e677300000000000000000000000000000060448201526064016109b0565b61104360245482612bf89190613c54565b6001546001600160a01b0316611034565b60188160038110612c18575f80fd5b0154905081565b33612c326001546001600160a01b031690565b6001600160a01b031614612c755760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b601c548110158015612c91575069010f0cf064dd592000008111155b612cc75760405162461bcd60e51b8152602060048201526007602482015266125b9d985b1a5960ca1b60448201526064016109b0565b6040517f4d41585f42414e4b524f4c4c00000000000000000000000000000000000000008152600c0160408051918290038220601d54835260208301849052917f185daf617c465de5e0042f7aae1503b1a216ea8927cacf296e58b516e82afea8910160405180910390a2601d55565b33612d4a6001546001600160a01b031690565b6001600160a01b031614612d8d5760405162461bcd60e51b815260206004820152601960248201525f516020613c955f395f51905f5260448201526064016109b0565b6001600160a01b038116612de35760405162461bcd60e51b815260206004820152600d60248201527f4f776e61626c653a207a65726f0000000000000000000000000000000000000060448201526064016109b0565b612dec816132fd565b50565b6001600160a01b0382165f9081526023602052604081205490818311612e155782612e17565b815b90508015612e45576001600160a01b0384165f90815260236020526040902081830390556024805482900390555b50505050565b6001600160a01b0381165f9081526028602052604090205415801590612e8657506001600160a01b0381165f90815260226020526040902054155b15612dec57612dec8161334e565b80471015612ee45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016109b0565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114612f2d576040519150601f19603f3d011682016040523d82523d5f602084013e612f32565b606091505b5050905080612f835760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20756e61626c6520746f2073656e642076616c756500000060448201526064016109b0565b505050565b5f805b60058110156130425768056bc75e2d63100000848260058110612fb057612fb0613a0a565b602002013511156130035760405162461bcd60e51b815260206004820152600e60248201527f6d756c7420746f6f206c6172676500000000000000000000000000000000000060448201526064016109b0565b82816005811061301557613015613a0a565b6020020160208101906130289190613c67565b6130389063ffffffff1683613a59565b9150600101612f8b565b50620f424081146130955760405162461bcd60e51b815260206004820152601d60248201527f70726f626162696c6974696573206d7573742073756d20746f2031653600000060448201526064016109b0565b8260038560028111156130aa576130aa6138f6565b60ff16600381106130bd576130bd613a0a565b600502019060056130cf929190613588565b508160128560028111156130e5576130e56138f6565b60ff16600381106130f8576130f8613a0a565b6131069291019060056135b5565b50612e4584613459565b6001600160a01b0381165f908152602860205260408120549003612dec57602780546001810182557f98a476f1687bc3d60a2da2adbcba2c46958e61fa2fb4042cd7bc5816a710195b0180546001600160a01b0319166001600160a01b03939093169283179055545f9182526028602052604090912055565b60275481106131da5760405162461bcd60e51b815260206004820152600960248201527f496e646578204f4f42000000000000000000000000000000000000000000000060448201526064016109b0565b5f602782815481106131ee576131ee613a0a565b5f9182526020822001546027546001600160a01b03909116925061321490600190613c54565b90508083146132ac575f6027828154811061323157613231613a0a565b5f91825260209091200154602780546001600160a01b03909216925082918690811061325f5761325f613a0a565b5f91825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055613292846001613a59565b6001600160a01b039091165f908152602860205260409020555b60278054806132bd576132bd613c80565b5f828152602080822083015f1990810180546001600160a01b03191690559092019092556001600160a01b03939093168152602890925250604081205550565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0381165f9081526028602052604081205490819003613372575050565b602754818114613408575f602761338a600184613c54565b8154811061339a5761339a613a0a565b5f918252602090912001546001600160a01b031690508060276133be600186613c54565b815481106133ce576133ce613a0a565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559290911681526028909152604090208290555b602780548061341957613419613c80565b5f828152602080822083015f1990810180546001600160a01b03191690559092019092556001600160a01b03949094168152602890935250506040812055565b5f81600281111561346c5761346c6138f6565b90505f60038260ff166003811061348557613485613a0a565b6005020154905060015b60058160ff16101561350d578160038460ff16600381106134b2576134b2613a0a565b600502018260ff16600581106134ca576134ca613a0a565b015411156135055760038360ff16600381106134e8576134e8613a0a565b600502018160ff166005811061350057613500613a0a565b015491505b60010161348f565b508060158360ff166003811061352557613525613a0a565b0155505050565b6040518060a001604052806005906020820280368337509192915050565b8260038101928215613578579160200282015b8281111561357857823582559160200191906001019061355d565b5061358492915061364d565b5090565b8260058101928215613578579160200282018281111561357857823582559160200191906001019061355d565b600183019183908215613578579160200282015f5b8382111561361457833563ffffffff1683826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026135ca565b80156136445782816101000a81549063ffffffff0219169055600401602081600301049283019260010302613614565b50506135849291505b5b80821115613584575f815560010161364e565b5f60208284031215613671575f5ffd5b5035919050565b5f5f60208385031215613689575f5ffd5b823567ffffffffffffffff81111561369f575f5ffd5b8301601f810185136136af575f5ffd5b803567ffffffffffffffff8111156136c5575f5ffd5b8560208260051b84010111156136d9575f5ffd5b6020919091019590945092505050565b5f602082840312156136f9575f5ffd5b81356001600160a01b038116811461370f575f5ffd5b9392505050565b803560038110613724575f5ffd5b919050565b5f60208284031215613739575f5ffd5b61370f82613716565b610180810181865f5b600581101561376a57815183526020928301929091019060010161374b565b50505060a08201855f5b600581101561379957815163ffffffff16835260209283019290910190600101613774565b505050836101408301526137b661016083018463ffffffff169052565b95945050505050565b5f606082840312156137cf575f5ffd5b826060830111156137de575f5ffd5b50919050565b5f5f5f5f5f608086880312156137f8575f5ffd5b853594506020860135935060408601359250606086013567ffffffffffffffff811115613823575f5ffd5b8601601f81018813613833575f5ffd5b803567ffffffffffffffff811115613849575f5ffd5b88602082840101111561385a575f5ffd5b959894975092955050506020019190565b8060a08101831015610958575f5ffd5b5f5f5f5f5f5f6103c08789031215613891575f5ffd5b61389b888861386b565b95506138aa8860a0890161386b565b94506138ba88610140890161386b565b93506138ca886101e0890161386b565b92506138da88610280890161386b565b91506138ea88610320890161386b565b90509295509295509295565b634e487b7160e01b5f52602160045260245ffd5b6003811061392657634e487b7160e01b5f52602160045260245ffd5b9052565b6001600160a01b038816815260e08101613947602083018961390a565b60ff9690961660408201526060810194909452608084019290925267ffffffffffffffff1660a0830152151560c09091015292915050565b5f5f60408385031215613990575f5ffd5b50508035926020909101359150565b5f5f604083850312156139b0575f5ffd5b6139b983613716565b946020939093013593505050565b5f5f5f61016084860312156139da575f5ffd5b6139e384613716565b92506139f2856020860161386b565b9150613a018560c0860161386b565b90509250925092565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f82613a5457613a54613a1e565b500490565b8082018082111561095857610958613a32565b60c0810181845f5b6003811015613a93578151835260209283019290910190600101613a74565b50505060608360608401379392505050565b85815284602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f909201601f19160101949350505050565b5f82613af657613af6613a1e565b500690565b63ffffffff818116838216019081111561095857610958613a32565b808202811582820484141761095857610958613a32565b60808101613b3c828761390a565b60ff8516602083015283604083015282606083015295945050505050565b8082018281125f831280158216821582161715613b7957613b79613a32565b505092915050565b8181035f831280158383131683831282161715613ba057613ba0613a32565b5092915050565b67ffffffffffffffff818116838216019081111561095857610958613a32565b803563ffffffff81168114613724575f5ffd5b610140810160a084833760a08201835f5b6005811015613c185763ffffffff613c0283613bc7565b1683526020928301929190910190600101613beb565b5050509392505050565b5f60208284031215613c32575f5ffd5b5051919050565b60408101613c47828561390a565b8260208301529392505050565b8181038181111561095857610958613a32565b5f60208284031215613c77575f5ffd5b61370f82613bc7565b634e487b7160e01b5f52603160045260245ffdfe4f776e61626c653a2063616c6c6572206e6f74206f776e657200000000000000a264697066735822122090eba915763d5b117221ca23a51309ef0e7ee7451e597715a2858f8b32e9fef164736f6c634300081e0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000009ec728fce50c77e0bef7d34f1ab28a46409b7af1
-----Decoded View---------------
Arg [0] : vrfSystemAddress (address): 0x9eC728Fce50c77e0BeF7d34F1ab28a46409b7aF1
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000009ec728fce50c77e0bef7d34f1ab28a46409b7af1
Deployed Bytecode Sourcemap
4782:19470:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21334:147;;;;;;;;;;-1:-1:-1;21334:147:0;;;;;:::i;:::-;;:::i;:::-;;;410:14:1;;403:22;385:41;;373:2;358:18;21334:147:0;;;;;;;;18177:540;;;;;;;;;;-1:-1:-1;18177:540:0;;;;;:::i;:::-;;:::i;:::-;;19520:57;;;;;;;;;;;;;:::i;20362:270::-;;;;;;;;;;-1:-1:-1;20362:270:0;;;;;:::i;:::-;;:::i;20786:411::-;;;;;;;;;;-1:-1:-1;20786:411:0;;;;;:::i;:::-;;:::i;:::-;;;;1562:25:1;;;1618:2;1603:18;;1596:34;;;;1673:14;1666:22;1646:18;;;1639:50;1550:2;1535:18;20786:411:0;1366:329:1;5149:47:0;;;;;;;;;;;;5192:4;5149:47;;;;;1846:25:1;;;1834:2;1819:18;5149:47:0;1700:177:1;6227:18:0;;;;;;;;;;-1:-1:-1;6227:18:0;;;;;;;;22636:353;;;;;;;;;;-1:-1:-1;22636:353:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;11920:211::-;;;;;;;;;;-1:-1:-1;11920:211:0;;;;;:::i;:::-;;:::i;17529:270::-;;;;;;;;;;-1:-1:-1;17529:270:0;;;;;:::i;:::-;;:::i;20669:109::-;;;;;;;;;;-1:-1:-1;20749:21:0;20669:109;;6167:51;;;;;;;;;;;;6211:7;6167:51;;15998:471;;;;;;;;;;-1:-1:-1;15998:471:0;;;;;:::i;:::-;;:::i;5855:33::-;;;;;;;;;;;;;;;;19460:54;;;;;;;;;;;;;:::i;19585:271::-;;;;;;;;;;-1:-1:-1;19585:271:0;;;;;:::i;:::-;;:::i;10323:498::-;;;;;;;;;;-1:-1:-1;10323:498:0;;;;;:::i;:::-;;:::i;6596:39::-;;;;;;;;;;-1:-1:-1;6596:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6596:39:0;;;;-1:-1:-1;;;6596:39:0;;;;;-1:-1:-1;;;6596:39:0;;;;;;;;;;-1:-1:-1;;;6596:39:0;;;;;;;;;;;;;;;;;;;:::i;4300:65::-;;;;;;;;;;-1:-1:-1;4356:6:0;;-1:-1:-1;;;;;4356:6:0;4300:65;;;-1:-1:-1;;;;;6976:55:1;;;6958:74;;6946:2;6931:18;4300:65:0;6812:226:1;13726:1567:0;;;;;;;;;;-1:-1:-1;13726:1567:0;;;;;:::i;:::-;;:::i;18725:689::-;;;;;;;;;;-1:-1:-1;18725:689:0;;;;;:::i;:::-;;:::i;5484:31::-;;;;;;;;;;-1:-1:-1;5484:31:0;;;;;:::i;:::-;;:::i;:::-;;;7568:10:1;7556:23;;;7538:42;;7526:2;7511:18;5484:31:0;7394:192:1;5963:39:0;;;;;;;;;;;;;;;;21489:1139;;;;;;;;;;-1:-1:-1;21489:1139:0;;;;;:::i;:::-;;:::i;:::-;;;;8179:25:1;;;8235:2;8220:18;;8213:34;;;;8263:18;;;8256:34;;;;8333:14;8326:22;8321:2;8306:18;;8299:50;8393:14;8386:22;8380:3;8365:19;;8358:51;8453:14;8446:22;8440:3;8425:19;;8418:51;8166:3;8151:19;21489:1139:0;7912:563:1;6009:40:0;;;;;;;;;;;;;;;;15336:617;;;;;;;;;;-1:-1:-1;15336:617:0;;;;;:::i;:::-;;:::i;21205:121::-;;;;;;;;;;-1:-1:-1;21205:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;21297:21:0;21270:7;21297:21;;;:15;:21;;;;;;;21205:121;9793:235;;;;;;;;;;-1:-1:-1;9793:235:0;;;;;:::i;:::-;;:::i;6056:46::-;;;;;;;;;;;;;;;;10086:229;;;;;;;;;;-1:-1:-1;10086:229:0;;;;;:::i;:::-;;:::i;12177:1505::-;;;;;;:::i;:::-;;:::i;19864:236::-;;;;;;;;;;-1:-1:-1;19864:236:0;;;;;:::i;:::-;;:::i;6983:47::-;;;;;;;;;;-1:-1:-1;6983:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;11673:239;;;;;;;;;;-1:-1:-1;11673:239:0;;;;;:::i;:::-;;:::i;16943:386::-;;;;;;;;;;;;;:::i;17337:184::-;;;:::i;5370:35::-;;;;;;;;;;-1:-1:-1;5370:35:0;;;;;:::i;:::-;;:::i;6671:46::-;;;;;;;;;;-1:-1:-1;6671:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17807:287;;;;;;;;;;;;;:::i;5748:26::-;;;;;;;;;;-1:-1:-1;5748:26:0;;;;;:::i;:::-;;:::i;6779:43::-;;;;;;;;;;-1:-1:-1;6779:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;5218:52;;;;;;;;;;;;5261:9;5218:52;;20108:246;;;;;;;;;;-1:-1:-1;20108:246:0;;;;;:::i;:::-;;:::i;6109:51::-;;;;;;;;;;;;6156:4;6109:51;;4371:168;;;;;;;;;;-1:-1:-1;4371:168:0;;;;;:::i;:::-;;:::i;4930:24::-;;;;;;;;;;-1:-1:-1;4930:24:0;;;;-1:-1:-1;;;;;4930:24:0;;;21334:147;21396:4;21420:17;;;:6;:17;;;;;:25;;;-1:-1:-1;;;21420:25:0;;;;;:53;;-1:-1:-1;21449:24:0;;;;:13;:24;;;;;;;;21420:53;21413:60;21334:147;-1:-1:-1;;21334:147:0:o;18177:540::-;4248:10;4237:7;4356:6;;-1:-1:-1;;;;;4356:6:0;;4300:65;4237:7;-1:-1:-1;;;;;4237:21:0;;4229:59;;;;-1:-1:-1;;;4229:59:0;;9136:2:1;4229:59:0;;;9118:21:1;9175:2;9155:18;;;9148:30;-1:-1:-1;;;;;;;;;;;9194:18:1;;;9187:55;9259:18;;4229:59:0;;;;;;;;;3715:1:::1;3843:7;;:19:::0;3835:58:::1;;;::::0;-1:-1:-1;;;3835:58:0;;9490:2:1;3835:58:0::1;::::0;::::1;9472:21:1::0;9529:2;9509:18;;;9502:30;9568:28;9548:18;;;9541:56;9614:18;;3835:58:0::1;9288:350:1::0;3835:58:0::1;3715:1;3904:7;:18:::0;;;18292:5;;18315:395:::2;18339:3;18335:1;:7;18315:395;;;18364:12;18379:5;;18385:1;18379:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18419:14:0;::::2;18402;18419::::0;;;:8:::2;:14;::::0;;;;;18364:23;;-1:-1:-1;18452:11:0;;;18448:25:::2;;18465:8;;;;18448:25;-1:-1:-1::0;;;;;18490:14:0;::::2;18507:1;18490:14:::0;;;:8:::2;:14;::::0;;;;:18;18523:36:::2;18499:4:::0;18552:6;18523:22:::2;:36::i;:::-;18574:25;18594:4;18574:19;:25::i;:::-;18616:31;-1:-1:-1::0;;;;;18616:23:0;::::2;18640:6:::0;18616:23:::2;:31::i;:::-;18685:4;-1:-1:-1::0;;;;;18667:31:0::2;;18691:6;18667:31;;;;1846:25:1::0;;1834:2;1819:18;;1700:177;18667:31:0::2;;;;;;;;18349:361;;18315:395;18344:3;;18315:395;;;-1:-1:-1::0;;3671:1:0::1;3936:7;:22:::0;-1:-1:-1;;18177:540:0:o;19520:57::-;4248:10;4237:7;4356:6;;-1:-1:-1;;;;;4356:6:0;;4300:65;4237:7;-1:-1:-1;;;;;4237:21:0;;4229:59;;;;-1:-1:-1;;;4229:59:0;;9136:2:1;4229:59:0;;;9118:21:1;9175:2;9155:18;;;9148:30;-1:-1:-1;;;;;;;;;;;9194:18:1;;;9187:55;9259:18;;4229:59:0;8934:349:1;4229:59:0;19560:6:::1;:14:::0;;-1:-1:-1;;19560:14:0::1;::::0;;19520:57::o;20362:270::-;4248:10;4237:7;4356:6;;-1:-1:-1;;;;;4356:6:0;;4300:65;4237:7;-1:-1:-1;;;;;4237:21:0;;4229:59;;;;-1:-1:-1;;;4229:59:0;;9136:2:1;4229:59:0;;;9118:21:1;9175:2;9155:18;;;9148:30;-1:-1:-1;;;;;;;;;;;9194:18:1;;;9187:55;9259:18;;4229:59:0;8934:349:1;4229:59:0;20455:1:::1;20446:6;:10;:40;;;;;20485:1;20470:12;;:16;;;;:::i;:::-;20460:6;:26;;20446:40;20438:60;;;::::0;-1:-1:-1;;;20438:60:0;;10537:2:1;20438:60:0::1;::::0;::::1;10519:21:1::0;10576:1;10556:18;;;10549:29;-1:-1:-1;;;10594:18:1;;;10587:37;10641:18;;20438:60:0::1;10335:330:1::0;20438:60:0::1;20514:70;::::0;10884:22:1;10872:35;;10932:2;10923:12;20514:70:0::1;::::0;;;;;::::1;::::0;;20555:20:::1;::::0;11120:25:1;;11176:2;11161:18;;11154:34;;;20514:70:0;::::1;::::0;11093:18:1;20514:70:0::1;;;;;;;20595:20;:29:::0;20362:270::o;20786:411::-;-1:-1:-1;;;;;20925:14:0;;20845:20;20925:14;;;:8;:14;;;;;;;;;20961:12;:18;;;;;;20925:14;;20845:20;21029:38;6211:7;20961:18;21029:38;:::i;:::-;21010:15;:57;;21009:137;;-1:-1:-1;;;;;21104:19:0;;;;;;:13;:19;;;;;;6156:4;-1:-1:-1;21009:137:0;;;21084:4;21009:137;21168:6;;20990:156;;-1:-1:-1;21168:6:0;;21167:7;:22;;;;;21178:11;21167:22;20786:411;;;;-1:-1:-1;;;20786:411:0:o;22636:353::-;22714:29;;:::i;:::-;22745:22;;:::i;:::-;22769:13;22784:16;22832:14;22853:3;22847:10;;;;;;;;:::i;:::-;22832:26;;;;;;;;;:::i;:::-;22818:40;;;;;;;;;;;22832:26;;;;;;;;22818:40;;;;;;;;;;;;;;;;;;;;;;;;22883:10;22900:3;22894:10;;;;;;;;:::i;:::-;22883:22;;;;;;;;;:::i;:::-;22869:36;;;;;;;;;;;22883:22;;;;;22869:36;;22883:22;-1:-1:-1;22869:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5192:4;22916:30;;5261:9;22957:24;;22636:353;;;;;:::o;11920:211::-;4248:10;4237:7;4356:6;;-1:-1:-1;;;;;4356:6:0;;4300:65;4237:7;-1:-1:-1;;;;;4237:21:0;;4229:59;;;;-1:-1:-1;;;4229:59:0;;9136:2:1;4229:59:0;;;9118:21:1;9175:2;9155:18;;;9148:30;-1:-1:-1;;;;;;;;;;;9194:18:1;;;9187:55;9259:18;;4229:59:0;8934:349:1;4229:59:0;12006:32:::1;::::0;;;;::::1;::::0;;;;-1:-1:-1;;12030:8:0::1;::::0;12006:32:::1;::::0;12030:8;12006:32;::::1;;;;;;;;;;;;;;;;;;;;;;;12060:12;12049:8;:23;;;;;;;:::i;:::-;;12088:35;12105:3;12110:12;12088:35;;;;;;;:::i;:::-;;;;;;;;11995:136;11920:211:::0;:::o;17529:270::-;4248:10;4237:7;4356:6;;-1:-1:-1;;;;;4356:6:0;;4300:65;4237:7;-1:-1:-1;;;;;4237:21:0;;4229:59;;;;-1:-1:-1;;;4229:59:0;;9136:2:1;4229:59:0;;;9118:21:1;9175:2;9155:18;;;9148:30;-1:-1:-1;;;;;;;;;;;9194:18:1;;;9187:55;9259:18;;4229:59:0;8934:349:1;4229:59:0;3715:1:::1;3843:7;;:19:::0;3835:58:::1;;;::::0;-1:-1:-1;;;3835:58:0;;9490:2:1;3835:58:0::1;::::0;::::1;9472:21:1::0;9529:2;9509:18;;;9502:30;9568:28;9548:18;;;9541:56;9614:18;;3835:58:0::1;9288:350:1::0;3835:58:0::1;3715:1;3904:7;:18:::0;17619:10;17611:30:::2;;;::::0;-1:-1:-1;;;17611:30:0;;10537:2:1;17611:30:0::2;::::0;::::2;10519:21:1::0;10576:1;10556:18;;;10549:29;-1:-1:-1;;;10594:18:1;;;10587:37;10641:18;;17611:30:0::2;10335:330:1::0;17611:30:0::2;17723:6;17700:20;;17685:12;;:35;;;;:::i;:::-;:44;;;;:::i;:::-;17660:21;:69;;17652:94;;;::::0;-1:-1:-1;;;17652:94:0;;12137:2:1;17652:94:0::2;::::0;::::2;12119:21:1::0;12176:2;12156:18;;;12149:30;12215:14;12195:18;;;12188:42;12247:18;;17652:94:0::2;11935:336:1::0;17652:94:0::2;17757:34;17784:6;17765:7;4356:6:::0;;-1:-1:-1;;;;;4356:6:0;;4300:65;17765:7:::2;-1:-1:-1::0;;;;;17757:26:0::2;::::0;::::2;:34::i;:::-;-1:-1:-1::0;3671:1:0::1;3936:7;:22:::0;17529:270::o;15998:471::-;4248:10;4237:7;4356:6;;-1:-1:-1;;;;;4356:6:0;;4300:65;4237:7;-1:-1:-1;;;;;4237:21:0;;4229:59;;;;-1:-1:-1;;;4229:59:0;;9136:2:1;4229:59:0;;;9118:21:1;9175:2;9155:18;;;9148:30;-1:-1:-1;;;;;;;;;;;9194:18:1;;;9187:55;9259:18;;4229:59:0;8934:349:1;4229:59:0;16192:24:::1;::::0;;;:13:::1;:24;::::0;;;;;::::1;;16191:25;16183:54;;;::::0;-1:-1:-1;;;16183:54:0;;12478:2:1;16183:54:0::1;::::0;::::1;12460:21:1::0;12517:2;12497:18;;;12490:30;12556:18;12536;;;12529:46;12592:18;;16183:54:0::1;12276:340:1::0;16183:54:0::1;16248:15;16266:17:::0;;;:6:::1;:17:::0;;;;;16302:8;;-1:-1:-1;;;;;16302:8:0::1;:22:::0;;::::1;::::0;:36:::1;;-1:-1:-1::0;16329:9:0::1;::::0;::::1;::::0;-1:-1:-1;;;16329:9:0;::::1;;;16328:10;16302:36;16294:60;;;::::0;-1:-1:-1;;;16294:60:0;;12823:2:1;16294:60:0::1;::::0;::::1;12805:21:1::0;12862:2;12842:18;;;12835:30;12901:13;12881:18;;;12874:41;12932:18;;16294:60:0::1;12621:335:1::0;16294:60:0::1;16376:9;::::0;16365:96:::1;::::0;;;;-1:-1:-1;;;;;16376:9:0;;::::1;::::0;16365:47:::1;::::0;:96:::1;::::0;16413:9;;16424:11;;16437:12;;16451:9;;;;16365:96:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16172:297;15998:471:::0;;;;;:::o;19460:54::-;4248:10;4237:7;4356:6;;-1:-1:-1;;;;;4356:6:0;;4300:65;4237:7;-1:-1:-1;;;;;4237:21:0;;4229:59;;;;-1:-1:-1;;;4229:59:0;;9136:2:1;4229:59:0;;;9118:21:1;9175:2;9155:18;;;9148:30;-1:-1:-1;;;;;;;;;;;9194:18:1;;;9187:55;9259:18;;4229:59:0;8934:349:1;4229:59:0;19498:6:::1;:13:::0;;-1:-1:-1;;19498:13:0::1;19507:4;19498:13;::::0;;19460:54::o;19585:271::-;4248:10;4237:7;4356:6;;-1:-1:-1;;;;;4356:6:0;;4300:65;4237:7;-1:-1:-1;;;;;4237:21:0;;4229:59;;;;-1:-1:-1;;;4229:59:0;;9136:2:1;4229:59:0;;;9118:21:1;9175:2;9155:18;;;9148:30;-1:-1:-1;;;;;;;;;;;9194:18:1;;;9187:55;9259:18;;4229:59:0;8934:349:1;4229:59:0;19726:1:::1;19717:6;:10;:32;;;;;19741:8;19731:6;:18;;19717:32;19709:52;;;::::0;-1:-1:-1;;;19709:52:0;;10537:2:1;19709:52:0::1;::::0;::::1;10519:21:1::0;10576:1;10556:18;;;10549:29;-1:-1:-1;;;10594:18:1;;;10587:37;10641:18;;19709:52:0::1;10335:330:1::0;19709:52:0::1;19777:44;::::0;13786:9:1;13774:22;;13821:1;13812:11;19777:44:0::1;::::0;;;;;::::1;::::0;;19805:7:::1;::::0;11120:25:1;;11176:2;11161:18;;11154:34;;;19777:44:0;::::1;::::0;11093:18:1;19777:44:0::1;;;;;;;19832:7;:16:::0;19585:271::o;10323:498::-;4248:10;4237:7;4356:6;;-1:-1:-1;;;;;4356:6:0;;4300:65;4237:7;-1:-1:-1;;;;;4237:21:0;;4229:59;;;;-1:-1:-1;;;4229:59:0;;9136:2:1;4229:59:0;;;9118:21:1;9175:2;9155:18;;;9148:30;-1:-1:-1;;;;;;;;;;;9194:18:1;;;9187:55;9259:18;;4229:59:0;8934:349:1;4229:59:0;10590:58:::1;10609:14;10625:10;10637;10590:18;:58::i;:::-;10659:56;10678:12;10694:8;10706;10659:18;:56::i;:::-;10726;10745:12;10761:8;10773;10726:18;:56::i;:::-;10798:15;::::0;::::1;::::0;;;::::1;10323:498:::0;;;;;;:::o;13726:1567::-;5019:9;;-1:-1:-1;;;;;5019:9:0;5005:10;:23;4997:49;;;;-1:-1:-1;;;4997:49:0;;14036:2:1;4997:49:0;;;14018:21:1;14075:2;14055:18;;;14048:30;14114:15;14094:18;;;14087:43;14147:18;;4997:49:0;13834:337:1;4997:49:0;13854:15:::1;13872:17:::0;;;:6:::1;:17:::0;;;;;13908:8;;-1:-1:-1;;;;;13908:8:0::1;13900:50;;;::::0;-1:-1:-1;;;13900:50:0;;14378:2:1;13900:50:0::1;::::0;::::1;14360:21:1::0;14417:2;14397:18;;;14390:30;14456:17;14436:18;;;14429:45;14491:18;;13900:50:0::1;14176:339:1::0;13900:50:0::1;13970:24;::::0;;;:13:::1;:24;::::0;;;;;::::1;;13969:25;13961:46;;;::::0;-1:-1:-1;;;13961:46:0;;14722:2:1;13961:46:0::1;::::0;::::1;14704:21:1::0;14761:1;14741:18;;;14734:29;14799:10;14779:18;;;14772:38;14827:18;;13961:46:0::1;14520:331:1::0;13961:46:0::1;14027:9;::::0;::::1;::::0;-1:-1:-1;;;14027:9:0;::::1;;;14026:10;14018:30;;;::::0;-1:-1:-1;;;14018:30:0;;15058:2:1;14018:30:0::1;::::0;::::1;15040:21:1::0;15097:1;15077:18;;;15070:29;15135:9;15115:18;;;15108:37;15162:18;;14018:30:0::1;14856:330:1::0;14018:30:0::1;14134:41;::::0;;::::1;::::0;;::::1;15348:19:1::0;;;15383:12;;;15376:28;;;14134:41:0;;;;;;;;;15420:12:1;;;;14134:41:0;;;14124:52;;;::::1;::::0;-1:-1:-1;14211:14:0::1;5261:9;14124:52:::0;14211:14:::1;:::i;:::-;14306:5:::0;;14188:38;;-1:-1:-1;14290:7:0::1;::::0;-1:-1:-1;;;14306:5:0;::::1;;;14300:12;::::0;::::1;;;;;;:::i;:::-;14290:22;;14323;14348:10;14359:1;14348:13;;;;;;;;;:::i;:::-;14323:38;::::0;;;;::::1;::::0;;;;;14348:13;;;::::1;::::0;14323:38:::1;::::0;14348:13;-1:-1:-1;14323:38:0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14372:23;14398:14;14413:1;14398:17;;;;;;;;;:::i;:::-;14372:43;::::0;;;;::::1;::::0;;;;;14398:17:::1;::::0;;::::1;;::::0;;;14372:43;::::1;;;;;;;;;;;;;;;;-1:-1:-1::0;14372:43:0;;-1:-1:-1;14428:17:0::1;::::0;-1:-1:-1;14428:17:0;;-1:-1:-1;14428:17:0;;-1:-1:-1;;14484:137:0::1;14506:1;14502;:5;;;14484:137;;;14543:5;14549:1;14543:8;;;;;;;;;:::i;:::-;;;;::::0;14529:22:::1;::::0;;::::1;:::i;:::-;;;14579:10;14570:19;;:6;:19;;;14566:44;;;14599:1;14593:7;;14602:5;;14566:44;14509:3;;14484:137;;;;14633:12;14648:5;14654:3;14648:10;;;;;;;;;:::i;:::-;;;;;14633:25;;14669:14;5192:4;14697;14687:1;:7;;;:14;;;;:::i;:::-;14686:35;;;;:::i;:::-;14734:15:::0;;::::1;::::0;::::1;-1:-1:-1::0;;;14734:15:0::1;-1:-1:-1::0;;;;14734:15:0;;::::1;;::::0;;14760:8:::1;::::0;::::1;:18:::0;;;14789:11:::1;::::0;::::1;:37:::0;;-1:-1:-1;;14837:16:0;14789:37:::1;14810:15;14789:37;14837:16:::0;-1:-1:-1;;;14837:16:0::1;::::0;;14669:52;-1:-1:-1;14870:10:0;;14866:342:::1;;14921:8:::0;;-1:-1:-1;;;;;14921:8:0::1;14897:12;14912:18:::0;;;:8:::1;:18;::::0;;;;;;14962:13:::1;14969:6:::0;14912:18;14962:13:::1;:::i;:::-;14945:30;;15011:6;14990:8;:18;14999:1;:8;;;;;;;;;;-1:-1:-1::0;;;;;14999:8:0::1;-1:-1:-1::0;;;;;14990:18:0::1;-1:-1:-1::0;;;;;14990:18:0::1;;;;;;;;;;;;:27;;;;15061:6;15032:15;:25;15048:1;:8;;;;;;;;;;-1:-1:-1::0;;;;;15048:8:0::1;-1:-1:-1::0;;;;;15032:25:0::1;-1:-1:-1::0;;;;;15032:25:0::1;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;15106:6;15082:20;;:30;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;15139:1:0::1;15131:9:::0;;;15127:70:::1;;15172:8:::0;;15161:20:::1;::::0;-1:-1:-1;;;;;15172:8:0::1;15161:10;:20::i;:::-;14882:326;;14866:342;15239:8:::0;;15225:60:::1;::::0;15249:9;;-1:-1:-1;;;;;15239:8:0;::::1;::::0;15225:60:::1;::::0;::::1;::::0;-1:-1:-1;;;15260:5:0;;::::1;;;::::0;15267:3;;15272:4;;15278:6;;15225:60:::1;:::i;:::-;;;;;;;;13843:1450;;;;;;;;;;13726:1567:::0;;:::o;18725:689::-;4248:10;4237:7;4356:6;;-1:-1:-1;;;;;4356:6:0;;4300:65;4237:7;-1:-1:-1;;;;;4237:21:0;;4229:59;;;;-1:-1:-1;;;4229:59:0;;9136:2:1;4229:59:0;;;9118:21:1;9175:2;9155:18;;;9148:30;-1:-1:-1;;;;;;;;;;;9194:18:1;;;9187:55;9259:18;;4229:59:0;8934:349:1;4229:59:0;3715:1:::1;3843:7;;:19:::0;3835:58:::1;;;::::0;-1:-1:-1;;;3835:58:0;;9490:2:1;3835:58:0::1;::::0;::::1;9472:21:1::0;9529:2;9509:18;;;9502:30;9568:28;9548:18;;;9541:56;9614:18;;3835:58:0::1;9288:350:1::0;3835:58:0::1;3715:1;3904:7;:18:::0;;;:7;18868:539:::2;18879:7;:14:::0;18875:18;::::2;:42:::0;::::2;;;;18904:13;18897:4;:20;18875:42;18868:539;;;18934:12;18949:7;18957:1;18949:10;;;;;;;;:::i;:::-;;::::0;;;::::2;::::0;;;;;::::2;::::0;-1:-1:-1;;;;;18949:10:0::2;18991:14:::0;;;:8:::2;:14:::0;;;;;;;18949:10;;-1:-1:-1;18991:14:0;19026:11;;;19022:102:::2;;19058:23;19079:1;19058:20;:23::i;:::-;19100:8;;;;19022:102;-1:-1:-1::0;;;;;19140:14:0;::::2;19157:1;19140:14:::0;;;:8:::2;:14;::::0;;;;:18;19173:36:::2;19149:4:::0;19202:6;19173:22:::2;:36::i;:::-;19226:23;19247:1;19226:20;:23::i;:::-;19287:31;-1:-1:-1::0;;;;;19287:23:0;::::2;19311:6:::0;19287:23:::2;:31::i;:::-;19356:4;-1:-1:-1::0;;;;;19338:31:0::2;;19362:6;19338:31;;;;1846:25:1::0;;1834:2;1819:18;;1700:177;19338:31:0::2;;;;;;;;19386:9;19394:1;19386:9:::0;::::2;:::i;:::-;;;18919:488;;18868:539;;;-1:-1:-1::0;;3671:1:0::1;3936:7;:22:::0;-1:-1:-1;18725:689:0:o;5484:31::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21489:1139::-;21603:23;21641;21679:15;21709;21739:13;21767:15;21826:1;21818:5;:9;:29;;;;;21840:7;;21831:5;:16;;21818:29;21810:55;;;;-1:-1:-1;;;21810:55:0;;16536:2:1;21810:55:0;;;16518:21:1;16575:2;16555:18;;;16548:30;16614:15;16594:18;;;16587:43;16647:18;;21810:55:0;16334:337:1;21810:55:0;21876:9;21888:16;21911:3;21905:10;;;;;;;;:::i;:::-;21888:28;;;;;;;;;:::i;:::-;;;;-1:-1:-1;5192:4:0;21946:9;21888:28;21946:5;:9;:::i;:::-;21945:30;;;;:::i;:::-;21927:48;;22004:21;21986:39;;22036:10;22056:15;22036:36;;22083:11;22158:15;22127:20;;22104:12;;22097:51;;;;:::i;:::-;:77;;;;:::i;:::-;22083:91;-1:-1:-1;22196:10:0;22083:91;22196:3;:10;:::i;:::-;22185:21;;22289:15;22266:20;;22251:12;;:35;;;;:::i;:::-;:53;;;;:::i;:::-;22348:20;;22432:10;22380:16;22419:24;;;:12;:24;;;;;;22231:74;;;;;-1:-1:-1;22329:39:0;;;;;-1:-1:-1;22380:16:0;22419:44;;6211:7;;22419:44;:::i;:::-;22400:15;:63;;22399:149;;22514:10;22500:25;;;;:13;:25;;;;;;6156:4;-1:-1:-1;22399:149:0;;;22480:4;22399:149;22573:6;;22380:168;;-1:-1:-1;22573:6:0;;22572:7;:19;;;;;22583:8;22572:19;:33;;;;;22595:10;22572:33;:48;;;;;22609:11;22572:48;22559:61;;21799:829;;;;21489:1139;;;;;;;;:::o;15336:617::-;3715:1;3843:7;;:19;3835:58;;;;-1:-1:-1;;;3835:58:0;;9490:2:1;3835:58:0;;;9472:21:1;9529:2;9509:18;;;9502:30;9568:28;9548:18;;;9541:56;9614:18;;3835:58:0;9288:350:1;3835:58:0;3715:1;3904:7;:18;;;15438:17;;;:6:::1;:17:::0;;;;;15474:8;;-1:-1:-1;;;;;15474:8:0::1;15486:10;15474:22;15466:49;;;::::0;-1:-1:-1;;;15466:49:0;;17304:2:1;15466:49:0::1;::::0;::::1;17286:21:1::0;17343:2;17323:18;;;17316:30;17382:16;17362:18;;;17355:44;17416:18;;15466:49:0::1;17102:338:1::0;15466:49:0::1;15535:9;::::0;::::1;::::0;-1:-1:-1;;;15535:9:0;::::1;;;15534:10;15526:38;;;::::0;-1:-1:-1;;;15526:38:0;;17647:2:1;15526:38:0::1;::::0;::::1;17629:21:1::0;17686:2;17666:18;;;17659:30;17725:17;17705:18;;;17698:45;17760:18;;15526:38:0::1;17445:339:1::0;15526:38:0::1;15584:24;::::0;;;:13:::1;:24;::::0;;;;;::::1;;15583:25;15575:54;;;::::0;-1:-1:-1;;;15575:54:0;;12478:2:1;15575:54:0::1;::::0;::::1;12460:21:1::0;12517:2;12497:18;;;12490:30;12556:18;12536;;;12529:46;12592:18;;15575:54:0::1;12276:340:1::0;15575:54:0::1;15666:11;::::0;::::1;::::0;:21:::1;::::0;:11:::1;;15680:7;15666:21;:::i;:::-;15648:39;;:15;:39;15640:74;;;::::0;-1:-1:-1;;;15640:74:0;;18187:2:1;15640:74:0::1;::::0;::::1;18169:21:1::0;18226:2;18206:18;;;18199:30;18265:24;18245:18;;;18238:52;18307:18;;15640:74:0::1;17985:346:1::0;15640:74:0::1;15747:7;::::0;;::::1;::::0;15727:17:::1;15765:24:::0;;;:13:::1;:24;::::0;;;;;;;:31;;-1:-1:-1;;15765:31:0::1;::::0;::::1;::::0;;15814:17;;;;;15807:24;;;;;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;-1:-1:-1;;15807:24:0;;;15842:40:::1;15850:10;15747:7:::0;15842:29:::1;:40::i;:::-;15898:47;::::0;1846:25:1;;;15924:9:0;;15912:10:::1;::::0;15898:47:::1;::::0;1834:2:1;1819:18;15898:47:0::1;;;;;;;-1:-1:-1::0;;3671:1:0;3936:7;:22;-1:-1:-1;15336:617:0:o;9793:235::-;4248:10;4237:7;4356:6;;-1:-1:-1;;;;;4356:6:0;;4300:65;4237:7;-1:-1:-1;;;;;4237:21:0;;4229:59;;;;-1:-1:-1;;;4229:59:0;;9136:2:1;4229:59:0;;;9118:21:1;9175:2;9155:18;;;9148:30;-1:-1:-1;;;;;;;;;;;9194:18:1;;;9187:55;9259:18;;4229:59:0;8934:349:1;4229:59:0;-1:-1:-1;;;;;9870:21:0;::::1;::::0;;::::1;::::0;:52:::1;;-1:-1:-1::0;;;;;;221:19:0;;;:23;;9895:27:::1;9862:76;;;::::0;-1:-1:-1;;;9862:76:0;;18538:2:1;9862:76:0::1;::::0;::::1;18520:21:1::0;18577:2;18557:18;;;18550:30;18616:13;18596:18;;;18589:41;18647:18;;9862:76:0::1;18336:335:1::0;9862:76:0::1;9971:9;::::0;9954:36:::1;::::0;-1:-1:-1;;;;;9954:36:0;;::::1;::::0;9971:9:::1;::::0;9954:36:::1;::::0;9971:9:::1;::::0;9954:36:::1;10001:9;:19:::0;;-1:-1:-1;;;;;;10001:19:0::1;-1:-1:-1::0;;;;;10001:19:0;;;::::1;::::0;;;::::1;::::0;;9793:235::o;10086:229::-;4248:10;4237:7;4356:6;;-1:-1:-1;;;;;4356:6:0;;4300:65;4237:7;-1:-1:-1;;;;;4237:21:0;;4229:59;;;;-1:-1:-1;;;4229:59:0;;9136:2:1;4229:59:0;;;9118:21:1;9175:2;9155:18;;;9148:30;-1:-1:-1;;;;;;;;;;;9194:18:1;;;9187:55;9259:18;;4229:59:0;8934:349:1;4229:59:0;10207:46:::1;10226:3;10231:11;10244:8;10207:18;:46::i;:::-;10280:3;10269:38;;;;;;;;:::i;:::-;;10285:11;10298:8;10269:38;;;;;;;:::i;:::-;;;;;;;;10086:229:::0;;;:::o;12177:1505::-;3715:1;3843:7;;:19;3835:58;;;;-1:-1:-1;;;3835:58:0;;9490:2:1;3835:58:0;;;9472:21:1;9529:2;9509:18;;;9502:30;9568:28;9548:18;;;9541:56;9614:18;;3835:58:0;9288:350:1;3835:58:0;3715:1;3904:7;:18;8284:6:::1;::::0;::::1;;8283:7;8275:26;;;::::0;-1:-1:-1;;;8275:26:0;;19679:2:1;8275:26:0::1;::::0;::::1;19661:21:1::0;19718:1;19698:18;;;19691:29;19756:8;19736:18;;;19729:36;19782:18;;8275:26:0::1;19477:329:1::0;8275:26:0::1;12307:21:::2;12331:8;12346:3;12340:10;;;;;;;;:::i;:::-;12331:20;;;;;;;;;:::i;:::-;;;12307:44;;12386:1;12370:13;:17;12362:43;;;::::0;-1:-1:-1;;;12362:43:0;;20013:2:1;12362:43:0::2;::::0;::::2;19995:21:1::0;20052:2;20032:18;;;20025:30;20091:15;20071:18;;;20064:43;20124:18;;12362:43:0::2;19811:337:1::0;12362:43:0::2;12437:13;12424:9;:26;12416:65;;;::::0;-1:-1:-1;;;12416:65:0;;20355:2:1;12416:65:0::2;::::0;::::2;20337:21:1::0;20394:2;20374:18;;;20367:30;20433:28;20413:18;;;20406:56;20479:18;;12416:65:0::2;20153:350:1::0;12416:65:0::2;12513:7;;12500:9;:20;;12492:45;;;::::0;-1:-1:-1;;;12492:45:0;;20710:2:1;12492:45:0::2;::::0;::::2;20692:21:1::0;20749:2;20729:18;;;20722:30;20788:14;20768:18;;;20761:42;20820:18;;12492:45:0::2;20508:336:1::0;12492:45:0::2;12621:10;12608:24;::::0;;;:12:::2;:24;::::0;;;;;:44:::2;::::0;6211:7:::2;::::0;12608:44:::2;:::i;:::-;12589:15;:63;12585:182;;12682:10;12669:24;::::0;;;:12:::2;:24;::::0;;;;;;;12696:15:::2;12669:42:::0;;12726:13:::2;:25:::0;;;;;:29;12585:182:::2;12799:10;12785:25;::::0;;;:13:::2;:25;::::0;;;;;6156:4:::2;-1:-1:-1::0;12777:80:0::2;;;::::0;-1:-1:-1;;;12777:80:0;;21051:2:1;12777:80:0::2;::::0;::::2;21033:21:1::0;21090:2;21070:18;;;21063:30;21129:21;21109:18;;;21102:49;21168:18;;12777:80:0::2;20849:343:1::0;12777:80:0::2;12882:10;12868:25;::::0;;;:13:::2;:25;::::0;;;;:30;;12897:1:::2;::::0;12868:25;:30:::2;::::0;12897:1;;12868:30:::2;:::i;:::-;::::0;;;-1:-1:-1;12960:17:0::2;::::0;-1:-1:-1;5192:4:0::2;12993:16;13016:3:::0;13010:10:::2;::::0;::::2;;;;;;:::i;:::-;12993:28;;;;;;;;;:::i;:::-;;::::0;12981:40:::2;::::0;:9:::2;:40;:::i;:::-;12980:61;;;;:::i;:::-;12960:81;;13112:20;;13100:9;13085:12;;:24;;;;:::i;:::-;:47;;;;:::i;:::-;13060:21;:72;;13052:97;;;::::0;-1:-1:-1;;;13052:97:0;;21399:2:1;13052:97:0::2;::::0;::::2;21381:21:1::0;21438:2;21418:18;;;21411:30;21477:14;21457:18;;;21450:42;21509:18;;13052:97:0::2;21197:336:1::0;13052:97:0::2;13181:20;;13168:9;:33;;13160:56;;;::::0;-1:-1:-1;;;13160:56:0;;21740:2:1;13160:56:0::2;::::0;::::2;21722:21:1::0;21779:2;21759:18;;;21752:30;21818:12;21798:18;;;21791:40;21848:18;;13160:56:0::2;21538:334:1::0;13160:56:0::2;13260:9;::::0;13249:55:::2;::::0;;;;13229:17:::2;13249:55;::::0;::::2;1846:25:1::0;;;13229:17:0;-1:-1:-1;;;;;13260:9:0::2;::::0;13249:52:::2;::::0;1819:18:1;;13249:55:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13229:75;;13337:266;;;;;;;;13366:10;-1:-1:-1::0;;;;;13337:266:0::2;;;;;13399:3;13337:266;;;;;;;;:::i;:::-;::::0;;13426:3:::2;13337:266;::::0;;::::2;::::0;;;;13480:9:::2;13337:266:::0;;;;;;;;-1:-1:-1;13337:266:0;;;;;;::::2;13546:15;13337:266;::::0;;;;;;;;;;;13317:17;;;;;;;;;:286;;;;-1:-1:-1;;;;;13317:286:0;;::::2;-1:-1:-1::0;;;;;;13317:286:0;::::2;::::0;::::2;::::0;;;;::::2;::::0;:17;;;;:286;;;-1:-1:-1;;;13317:286:0;::::2;::::0;::::2;;;;;;:::i;:::-;;;::::0;;-1:-1:-1;13317:286:0::2;::::0;;::::2;::::0;;;::::2;::::0;;::::2;-1:-1:-1::0;;;13317:286:0::2;-1:-1:-1::0;;;;13317:286:0;;::::2;;::::0;;::::2;::::0;::::2;::::0;-1:-1:-1;13317:286:0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;;::::2;::::0;;::::2;::::0;::::2;;-1:-1:-1::0;;;13317:286:0::2;-1:-1:-1::0;;13317:286:0;;;::::2;::::0;;::::2;::::0;;;;;;;::::2;::::0;;13621:53;13648:9;;13636:10:::2;::::0;13621:53:::2;::::0;::::2;::::0;13659:3;;13664:9:::2;::::0;13621:53:::2;:::i;:::-;;;;;;;;-1:-1:-1::0;;3671:1:0;3936:7;:22;-1:-1:-1;;12177:1505:0:o;19864:236::-;4248:10;4237:7;4356:6;;-1:-1:-1;;;;;4356:6:0;;4300:65;4237:7;-1:-1:-1;;;;;4237:21:0;;4229:59;;;;-1:-1:-1;;;4229:59:0;;9136:2:1;4229:59:0;;;9118:21:1;9175:2;9155:18;;;9148:30;-1:-1:-1;;;;;;;;;;;9194:18:1;;;9187:55;9259:18;;4229:59:0;8934:349:1;4229:59:0;19951:1:::1;19942:6;:10;:36;;;;;19966:12;;19956:6;:22;;19942:36;19934:56;;;::::0;-1:-1:-1;;;19934:56:0;;10537:2:1;19934:56:0::1;::::0;::::1;10519:21:1::0;10576:1;10556:18;;;10549:29;-1:-1:-1;;;10594:18:1;;;10587:37;10641:18;;19934:56:0::1;10335:330:1::0;19934:56:0::1;20006:54;::::0;22749:14:1;22737:27;;22789:2;22780:12;20006:54:0::1;::::0;;;;;::::1;::::0;;20039:12:::1;::::0;11120:25:1;;11176:2;11161:18;;11154:34;;;20006:54:0;::::1;::::0;11093:18:1;20006:54:0::1;;;;;;;20071:12;:21:::0;19864:236::o;11673:239::-;4248:10;4237:7;4356:6;;-1:-1:-1;;;;;4356:6:0;;4300:65;4237:7;-1:-1:-1;;;;;4237:21:0;;4229:59;;;;-1:-1:-1;;;4229:59:0;;9136:2:1;4229:59:0;;;9118:21:1;9175:2;9155:18;;;9148:30;-1:-1:-1;;;;;;;;;;;9194:18:1;;;9187:55;9259:18;;4229:59:0;8934:349:1;4229:59:0;11758:7:::1;11774:3;11768:10;;;;;;;;:::i;:::-;11758:20;;11789:11;11803:8;11812:1;11803:11;;;;;;;;;:::i;:::-;;;11789:25;;11839:11;11825:8;11834:1;11825:11;;;;;;;;;:::i;:::-;;:25:::0;11882:3;11866:38:::1;::::0;::::1;;;;;;:::i;:::-;;::::0;;11120:25:1;;;11176:2;11161:18;;11154:34;;;11866:38:0::1;::::0;11093:18:1;11866:38:0::1;;;;;;;11747:165;;11673:239:::0;;:::o;16943:386::-;3715:1;3843:7;;:19;3835:58;;;;-1:-1:-1;;;3835:58:0;;9490:2:1;3835:58:0;;;9472:21:1;9529:2;9509:18;;;9502:30;9568:28;9548:18;;;9541:56;9614:18;;3835:58:0;9288:350:1;3835:58:0;3715:1;3904:7;:18;;;17030:10:::1;17021:20:::0;;:8:::1;:20;::::0;;;;;17060:10;17052:34:::1;;;::::0;-1:-1:-1;;;17052:34:0;;23005:2:1;17052:34:0::1;::::0;::::1;22987:21:1::0;23044:2;23024:18;;;23017:30;23083:13;23063:18;;;23056:41;23114:18;;17052:34:0::1;22803:335:1::0;17052:34:0::1;17106:10;17120:1;17097:20:::0;;;:8:::1;:20;::::0;;;;:24;17134:42:::1;::::0;17169:6;17134:22:::1;:42::i;:::-;17189:31;17209:10;17189:19;:31::i;:::-;17231:37;17239:10;17261:6:::0;17231:29:::1;:37::i;:::-;17284;::::0;1846:25:1;;;17302:10:0::1;::::0;17284:37:::1;::::0;1834:2:1;1819:18;17284:37:0::1;;;;;;;-1:-1:-1::0;3671:1:0;3936:7;:22;16943:386::o;17337:184::-;4248:10;4237:7;4356:6;;-1:-1:-1;;;;;4356:6:0;;4300:65;4237:7;-1:-1:-1;;;;;4237:21:0;;4229:59;;;;-1:-1:-1;;;4229:59:0;;9136:2:1;4229:59:0;;;9118:21:1;9175:2;9155:18;;;9148:30;-1:-1:-1;;;;;;;;;;;9194:18:1;;;9187:55;9259:18;;4229:59:0;8934:349:1;4229:59:0;17414:1:::1;17402:9;:13;17394:38;;;::::0;-1:-1:-1;;;17394:38:0;;23345:2:1;17394:38:0::1;::::0;::::1;23327:21:1::0;23384:2;23364:18;;;23357:30;23423:14;23403:18;;;23396:42;23455:18;;17394:38:0::1;23143:336:1::0;17394:38:0::1;17476:12;;17451:21;:37;;17443:70;;;::::0;-1:-1:-1;;;17443:70:0;;23686:2:1;17443:70:0::1;::::0;::::1;23668:21:1::0;23725:2;23705:18;;;23698:30;23764:22;23744:18;;;23737:50;23804:18;;17443:70:0::1;23484:344:1::0;17443:70:0::1;17337:184::o:0;5370:35::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5370:35:0;;-1:-1:-1;5370:35:0:o;17807:287::-;4248:10;4237:7;4356:6;;-1:-1:-1;;;;;4356:6:0;;4300:65;4237:7;-1:-1:-1;;;;;4237:21:0;;4229:59;;;;-1:-1:-1;;;4229:59:0;;9136:2:1;4229:59:0;;;9118:21:1;9175:2;9155:18;;;9148:30;-1:-1:-1;;;;;;;;;;;9194:18:1;;;9187:55;9259:18;;4229:59:0;8934:349:1;4229:59:0;3715:1:::1;3843:7;;:19:::0;3835:58:::1;;;::::0;-1:-1:-1;;;3835:58:0;;9490:2:1;3835:58:0::1;::::0;::::1;9472:21:1::0;9529:2;9509:18;;;9502:30;9568:28;9548:18;;;9541:56;9614:18;;3835:58:0::1;9288:350:1::0;3835:58:0::1;3715:1;3904:7;:18:::0;17887:6:::2;::::0;::::2;;17879:29;;;::::0;-1:-1:-1;;;17879:29:0;;24035:2:1;17879:29:0::2;::::0;::::2;24017:21:1::0;24074:2;24054:18;;;24047:30;24113:12;24093:18;;;24086:40;24143:18;;17879:29:0::2;23833:334:1::0;17879:29:0::2;17979:20;::::0;17933:21:::2;::::0;17973:26;::::2;17965:56;;;::::0;-1:-1:-1;;;17965:56:0;;24374:2:1;17965:56:0::2;::::0;::::2;24356:21:1::0;24413:2;24393:18;;;24386:30;24452:19;24432:18;;;24425:47;24489:18;;17965:56:0::2;24172:341:1::0;17965:56:0::2;18032:54;18065:20;;18059:3;:26;;;;:::i;:::-;4356:6:::0;;-1:-1:-1;;;;;4356:6:0;18040:7:::2;4300:65:::0;5748:26;;;;;;;;;;;;;;;-1:-1:-1;5748:26:0;:::o;20108:246::-;4248:10;4237:7;4356:6;;-1:-1:-1;;;;;4356:6:0;;4300:65;4237:7;-1:-1:-1;;;;;4237:21:0;;4229:59;;;;-1:-1:-1;;;4229:59:0;;9136:2:1;4229:59:0;;;9118:21:1;9175:2;9155:18;;;9148:30;-1:-1:-1;;;;;;;;;;;9194:18:1;;;9187:55;9259:18;;4229:59:0;8934:349:1;4229:59:0;20196:12:::1;;20186:6;:22;;:46;;;;;20222:10;20212:6;:20;;20186:46;20178:66;;;::::0;-1:-1:-1;;;20178:66:0;;10537:2:1;20178:66:0::1;::::0;::::1;10519:21:1::0;10576:1;10556:18;;;10549:29;-1:-1:-1;;;10594:18:1;;;10587:37;10641:18;;20178:66:0::1;10335:330:1::0;20178:66:0::1;20260:54;::::0;24865:14:1;24853:27;;24905:2;24896:12;20260:54:0::1;::::0;;;;;::::1;::::0;;20293:12:::1;::::0;11120:25:1;;11176:2;11161:18;;11154:34;;;20260:54:0;::::1;::::0;11093:18:1;20260:54:0::1;;;;;;;20325:12;:21:::0;20108:246::o;4371:168::-;4248:10;4237:7;4356:6;;-1:-1:-1;;;;;4356:6:0;;4300:65;4237:7;-1:-1:-1;;;;;4237:21:0;;4229:59;;;;-1:-1:-1;;;4229:59:0;;9136:2:1;4229:59:0;;;9118:21:1;9175:2;9155:18;;;9148:30;-1:-1:-1;;;;;;;;;;;9194:18:1;;;9187:55;9259:18;;4229:59:0;8934:349:1;4229:59:0;-1:-1:-1;;;;;4452:22:0;::::1;4444:48;;;::::0;-1:-1:-1;;;4444:48:0;;25121:2:1;4444:48:0::1;::::0;::::1;25103:21:1::0;25160:2;25140:18;;;25133:30;25199:15;25179:18;;;25172:43;25232:18;;4444:48:0::1;24919:337:1::0;4444:48:0::1;4503:28;4522:8;4503:18;:28::i;:::-;4371:168:::0;:::o;16535:354::-;-1:-1:-1;;;;;16633:21:0;;16621:9;16633:21;;;:15;:21;;;;;;;16679:14;;;:31;;16700:10;16679:31;;;16696:1;16679:31;16665:45;-1:-1:-1;16725:7:0;;16721:161;;-1:-1:-1;;;;;16778:21:0;;;;;;:15;:21;;;;;16802:7;;;16778:31;;16828:20;:27;;;;;;;16721:161;16610:279;;16535:354;;:::o;23262:167::-;-1:-1:-1;;;;;23329:17:0;;;;;;:11;:17;;;;;;:22;;;;:45;;-1:-1:-1;;;;;;23355:14:0;;;;;;:8;:14;;;;;;:19;23329:45;23325:97;;;23391:19;23405:4;23391:13;:19::i;260:286::-;375:6;350:21;:31;;342:73;;;;-1:-1:-1;;;342:73:0;;25463:2:1;342:73:0;;;25445:21:1;25502:2;25482:18;;;25475:30;25541:31;25521:18;;;25514:59;25590:18;;342:73:0;25261:353:1;342:73:0;427:12;445:9;-1:-1:-1;;;;;445:14:0;467:6;445:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;426:52;;;497:7;489:49;;;;-1:-1:-1;;;489:49:0;;26031:2:1;489:49:0;;;26013:21:1;26070:2;26050:18;;;26043:30;26109:31;26089:18;;;26082:59;26158:18;;489:49:0;25829:353:1;489:49:0;331:215;260:286;;:::o;10829:498::-;10952:11;;10974:143;10998:1;10994;:5;10974:143;;;11047:6;11029:11;11041:1;11029:14;;;;;;;:::i;:::-;;;;;:24;;11021:51;;;;-1:-1:-1;;;11021:51:0;;26389:2:1;11021:51:0;;;26371:21:1;26428:2;26408:18;;;26401:30;26467:16;26447:18;;;26440:44;26501:18;;11021:51:0;26187:338:1;11021:51:0;11094:8;11103:1;11094:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;11087:18;;;;;;:::i;:::-;;-1:-1:-1;11001:3:0;;10974:143;;;-1:-1:-1;5261:9:0;11135:17;;11127:59;;;;-1:-1:-1;;;11127:59:0;;26921:2:1;11127:59:0;;;26903:21:1;26960:2;26940:18;;;26933:30;26999:31;26979:18;;;26972:59;27048:18;;11127:59:0;26719:353:1;11127:59:0;11228:11;11199:14;11220:3;11214:10;;;;;;;;:::i;:::-;11199:26;;;;;;;;;:::i;:::-;;;;:40;;;;;;;:::i;:::-;;11279:8;11250:10;11267:3;11261:10;;;;;;;;:::i;:::-;11250:22;;;;;;;;;:::i;:::-;:37;;:22;;;:37;;:::i;:::-;;11298:21;11315:3;11298:16;:21::i;23060:194::-;-1:-1:-1;;;;;23118:17:0;;;;;;:11;:17;;;;;;:22;;23114:133;;23157:7;:18;;;;;;;;;;;-1:-1:-1;;;;;;23157:18:0;-1:-1:-1;;;;;23157:18:0;;;;;;;;;23210:14;-1:-1:-1;23190:17:0;;;:11;23157:18;23190:17;;;;;:34;23060:194::o;23833:416::-;23906:7;:14;23902:18;;23894:40;;;;-1:-1:-1;;;23894:40:0;;27279:2:1;23894:40:0;;;27261:21:1;27318:1;27298:18;;;27291:29;27356:11;27336:18;;;27329:39;27385:18;;23894:40:0;27077:332:1;23894:40:0;23945:12;23960:7;23968:1;23960:10;;;;;;;;:::i;:::-;;;;;;;;;;23996:7;:14;-1:-1:-1;;;;;23960:10:0;;;;-1:-1:-1;23996:18:0;;23960:10;;23996:18;:::i;:::-;23981:33;;24034:4;24029:1;:9;24025:161;;24055:13;24071:7;24079:4;24071:13;;;;;;;;:::i;:::-;;;;;;;;;;;24099:7;:10;;-1:-1:-1;;;;;24071:13:0;;;;-1:-1:-1;24071:13:0;;24107:1;;24099:10;;;;;;:::i;:::-;;;;;;;;;;:18;;-1:-1:-1;;;;;;24099:18:0;-1:-1:-1;;;;;24099:18:0;;;;;;;;;;24153:5;:1;-1:-1:-1;24153:5:0;:::i;:::-;-1:-1:-1;;;;;24132:18:0;;;;;;;:11;:18;;;;;:26;24025:161;24196:7;:13;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;24196:13:0;;;;;-1:-1:-1;;;;;;24196:13:0;;;;;;;;;-1:-1:-1;;;;;24220:17:0;;;;;;:11;:17;;;-1:-1:-1;24220:17:0;;;:21;-1:-1:-1;23833:416:0:o;4545:155::-;4625:6;;;-1:-1:-1;;;;;4633:17:0;;;-1:-1:-1;;;;;;4633:17:0;;;;;;;4657:35;;4625:6;;;4633:17;4625:6;;4657:35;;4611:11;;4657:35;4600:100;4545:155;:::o;23437:388::-;-1:-1:-1;;;;;23508:17:0;;23494:11;23508:17;;;:11;:17;;;;;;;23540:8;;;23536:21;;23550:7;23437:388;:::o;23536:21::-;23582:7;:14;23611:11;;;23607:155;;23639:13;23655:7;23663:8;23670:1;23663:4;:8;:::i;:::-;23655:17;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;23655:17:0;;-1:-1:-1;23655:17:0;23687:7;23695;23655:17;23695:3;:7;:::i;:::-;23687:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;:24;;-1:-1:-1;;;;;;23687:24:0;-1:-1:-1;;;;;23687:24:0;;;;;;23726:18;;;;;;:11;:18;;;;;;:24;;;23607:155;23772:7;:13;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;23772:13:0;;;;;-1:-1:-1;;;;;;23772:13:0;;;;;;;;;-1:-1:-1;;;;;23796:17:0;;;;;;:11;:17;;;-1:-1:-1;;23796:17:0;;;:21;23437:388::o;11335:285::-;11394:7;11410:3;11404:10;;;;;;;;:::i;:::-;11394:20;;11425:9;11437:14;11452:1;11437:17;;;;;;;;;:::i;:::-;;;;:20;;-1:-1:-1;11483:1:0;11468:111;11490:1;11486;:5;;;11468:111;;;11540:1;11517:14;11532:1;11517:17;;;;;;;;;:::i;:::-;;;;11535:1;11517:20;;;;;;;;;:::i;:::-;;;:24;11513:54;;;11547:14;11562:1;11547:17;;;;;;;;;:::i;:::-;;;;11565:1;11547:20;;;;;;;;;:::i;:::-;;;11543:24;;11513:54;11493:3;;11468:111;;;;11611:1;11589:16;11606:1;11589:19;;;;;;;;;:::i;:::-;;:23;-1:-1:-1;;;11335:285:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:226:1;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;187:23:1;;14:226;-1:-1:-1;14:226:1:o;437:610::-;523:6;531;584:2;572:9;563:7;559:23;555:32;552:52;;;600:1;597;590:12;552:52;640:9;627:23;673:18;665:6;662:30;659:50;;;705:1;702;695:12;659:50;728:22;;781:4;773:13;;769:27;-1:-1:-1;759:55:1;;810:1;807;800:12;759:55;850:2;837:16;876:18;868:6;865:30;862:50;;;908:1;905;898:12;862:50;961:7;956:2;946:6;943:1;939:14;935:2;931:23;927:32;924:45;921:65;;;982:1;979;972:12;921:65;1013:2;1005:11;;;;;1035:6;;-1:-1:-1;437:610:1;-1:-1:-1;;;437:610:1:o;1052:309::-;1111:6;1164:2;1152:9;1143:7;1139:23;1135:32;1132:52;;;1180:1;1177;1170:12;1132:52;1219:9;1206:23;-1:-1:-1;;;;;1262:5:1;1258:54;1251:5;1248:65;1238:93;;1327:1;1324;1317:12;1238:93;1350:5;1052:309;-1:-1:-1;;;1052:309:1:o;1882:148::-;1955:20;;2004:1;1994:12;;1984:40;;2020:1;2017;2010:12;1984:40;1882:148;;;:::o;2035:202::-;2105:6;2158:2;2146:9;2137:7;2133:23;2129:32;2126:52;;;2174:1;2171;2164:12;2126:52;2197:34;2221:9;2197:34;:::i;2341:1028::-;2647:3;2632:19;;2636:9;2728:6;2605:4;2762:171;2776:4;2773:1;2770:11;2762:171;;;2835:13;;2823:26;;2878:4;2869:14;;;;2906:17;;;;2796:1;2789:9;2762:171;;;2766:3;;;2970;2959:9;2955:19;3022:6;3048:1;3058:206;3074:4;3069:3;3066:13;3058:206;;;3143:15;;3160:10;3139:32;3125:47;;3205:4;3194:16;;;;3235:19;;;;3098:1;3089:11;3058:206;;;3062:3;;;3301:6;3295:3;3284:9;3280:19;3273:35;3317:46;3358:3;3347:9;3343:19;3335:6;2318:10;2307:22;2295:35;;2242:94;3317:46;2341:1028;;;;;;;:::o;3374:251::-;3458:6;3511:2;3499:9;3490:7;3486:23;3482:32;3479:52;;;3527:1;3524;3517:12;3479:52;3566:7;3561:2;3550:9;3546:18;3543:31;3540:51;;;3587:1;3584;3577:12;3540:51;-1:-1:-1;3610:9:1;3374:251;-1:-1:-1;3374:251:1:o;3630:941::-;3727:6;3735;3743;3751;3759;3812:3;3800:9;3791:7;3787:23;3783:33;3780:53;;;3829:1;3826;3819:12;3780:53;3874:23;;;-1:-1:-1;3994:2:1;3979:18;;3966:32;;-1:-1:-1;4097:2:1;4082:18;;4069:32;;-1:-1:-1;4178:2:1;4163:18;;4150:32;4205:18;4194:30;;4191:50;;;4237:1;4234;4227:12;4191:50;4260:22;;4313:4;4305:13;;4301:27;-1:-1:-1;4291:55:1;;4342:1;4339;4332:12;4291:55;4382:2;4369:16;4408:18;4400:6;4397:30;4394:50;;;4440:1;4437;4430:12;4394:50;4485:7;4480:2;4471:6;4467:2;4463:15;4459:24;4456:37;4453:57;;;4506:1;4503;4496:12;4453:57;3630:941;;;;-1:-1:-1;3630:941:1;;-1:-1:-1;;;4537:2:1;4529:11;;4559:6;3630:941::o;4576:160::-;4670:6;4703:3;4691:16;;4688:25;-1:-1:-1;4685:45:1;;;4726:1;4723;4716:12;4741:853;4992:6;5000;5008;5016;5024;5032;5085:3;5073:9;5064:7;5060:23;5056:33;5053:53;;;5102:1;5099;5092:12;5053:53;5125;5170:7;5159:9;5125:53;:::i;:::-;5115:63;;5197;5252:7;5246:3;5235:9;5231:19;5197:63;:::i;:::-;5187:73;;5279:63;5334:7;5328:3;5317:9;5313:19;5279:63;:::i;:::-;5269:73;;5361:63;5416:7;5410:3;5399:9;5395:19;5361:63;:::i;:::-;5351:73;;5443:63;5498:7;5492:3;5481:9;5477:19;5443:63;:::i;:::-;5433:73;;5525:63;5580:7;5574:3;5563:9;5559:19;5525:63;:::i;:::-;5515:73;;4741:853;;;;;;;;:::o;5599:184::-;-1:-1:-1;;;5648:1:1;5641:88;5748:4;5745:1;5738:15;5772:4;5769:1;5762:15;5788:292;5867:1;5860:5;5857:12;5847:200;;-1:-1:-1;;;5900:1:1;5893:88;6004:4;6001:1;5994:15;6032:4;6029:1;6022:15;5847:200;6056:18;;5788:292::o;6085:722::-;-1:-1:-1;;;;;6415:55:1;;6397:74;;6384:3;6369:19;;6480:51;6527:2;6512:18;;6504:6;6480:51;:::i;:::-;6579:4;6567:17;;;;6562:2;6547:18;;6540:45;6616:2;6601:18;;6594:34;;;;6659:3;6644:19;;6637:35;;;;6721:18;6709:31;6703:3;6688:19;;6681:60;6785:14;6778:22;6772:3;6757:19;;;6750:51;6085:722;;-1:-1:-1;;6085:722:1:o;7043:346::-;7111:6;7119;7172:2;7160:9;7151:7;7147:23;7143:32;7140:52;;;7188:1;7185;7178:12;7140:52;-1:-1:-1;;7233:23:1;;;7353:2;7338:18;;;7325:32;;-1:-1:-1;7043:346:1:o;7591:316::-;7670:6;7678;7731:2;7719:9;7710:7;7706:23;7702:32;7699:52;;;7747:1;7744;7737:12;7699:52;7770:34;7794:9;7770:34;:::i;:::-;7760:44;7873:2;7858:18;;;;7845:32;;-1:-1:-1;;;7591:316:1:o;8480:449::-;8617:6;8625;8633;8686:3;8674:9;8665:7;8661:23;8657:33;8654:53;;;8703:1;8700;8693:12;8654:53;8726:34;8750:9;8726:34;:::i;:::-;8716:44;;8779:62;8833:7;8828:2;8817:9;8813:18;8779:62;:::i;:::-;8769:72;;8860:63;8915:7;8909:3;8898:9;8894:19;8860:63;:::i;:::-;8850:73;;8480:449;;;;;:::o;9643:184::-;-1:-1:-1;;;9692:1:1;9685:88;9792:4;9789:1;9782:15;9816:4;9813:1;9806:15;9832:184;-1:-1:-1;;;9881:1:1;9874:88;9981:4;9978:1;9971:15;10005:4;10002:1;9995:15;10021:184;-1:-1:-1;;;10070:1:1;10063:88;10170:4;10167:1;10160:15;10194:4;10191:1;10184:15;10210:120;10250:1;10276;10266:35;;10281:18;;:::i;:::-;-1:-1:-1;10315:9:1;;10210:120::o;11199:125::-;11264:9;;;11285:10;;;11282:36;;;11298:18;;:::i;11329:601::-;11585:3;11570:19;;11574:9;11666:6;11543:4;11700:171;11714:4;11711:1;11708:11;11700:171;;;11773:13;;11761:26;;11816:4;11807:14;;;;11844:17;;;;11734:1;11727:9;11700:171;;;11704:3;;;11921:2;11913:6;11908:2;11897:9;11893:18;11880:44;11329:601;;;;;:::o;12961:606::-;13202:6;13191:9;13184:25;13245:6;13240:2;13229:9;13225:18;13218:34;13288:6;13283:2;13272:9;13268:18;13261:34;13331:3;13326:2;13315:9;13311:18;13304:31;13372:6;13366:3;13355:9;13351:19;13344:35;13430:6;13422;13416:3;13405:9;13401:19;13388:49;13487:1;13457:22;;;13481:3;13453:32;;;13446:43;;;;13550:2;13529:15;;;-1:-1:-1;;13525:29:1;13510:45;13506:55;;12961:606;-1:-1:-1;;;;12961:606:1:o;15443:112::-;15475:1;15501;15491:35;;15506:18;;:::i;:::-;-1:-1:-1;15540:9:1;;15443:112::o;15560:167::-;15655:10;15628:18;;;15648;;;15624:43;;15679:19;;15676:45;;;15701:18;;:::i;15732:168::-;15805:9;;;15836;;15853:15;;;15847:22;;15833:37;15823:71;;15874:18;;:::i;15905:424::-;16128:3;16113:19;;16141:42;16117:9;16165:6;16141:42;:::i;:::-;16231:4;16223:6;16219:17;16214:2;16203:9;16199:18;16192:45;16273:6;16268:2;16257:9;16253:18;16246:34;16316:6;16311:2;16300:9;16296:18;16289:34;15905:424;;;;;;;:::o;16676:216::-;16740:9;;;16768:11;;;16715:3;16798:9;;16826:10;;16822:19;;16851:10;;16843:19;;16819:44;16816:70;;;16866:18;;:::i;:::-;16816:70;;16676:216;;;;:::o;16897:200::-;16963:9;;;16936:4;16991:9;;17019:10;;17031:12;;;17015:29;17054:12;;;17046:21;;17012:56;17009:82;;;17071:18;;:::i;:::-;17009:82;16897:200;;;;:::o;17789:191::-;17892:18;17857:26;;;17885;;;17853:59;;17924:27;;17921:53;;;17954:18;;:::i;18676:163::-;18743:20;;18803:10;18792:22;;18782:33;;18772:61;;18829:1;18826;18819:12;18844:628;19100:3;19085:19;;19145:4;19137:6;19089:9;19113:37;19185:4;19174:9;19170:20;19232:6;19256:1;19266:200;19280:4;19277:1;19274:11;19266:200;;;19370:10;19343:25;19361:6;19343:25;:::i;:::-;19339:42;19327:55;;19411:4;19402:14;;;;19439:17;;;;;19300:1;19293:9;19266:200;;;19270:3;;;18844:628;;;;;:::o;22067:184::-;22137:6;22190:2;22178:9;22169:7;22165:23;22161:32;22158:52;;;22206:1;22203;22196:12;22158:52;-1:-1:-1;22229:16:1;;22067:184;-1:-1:-1;22067:184:1:o;22256:274::-;22427:2;22412:18;;22439:42;22416:9;22463:6;22439:42;:::i;:::-;22517:6;22512:2;22501:9;22497:18;22490:34;22256:274;;;;;:::o;24518:128::-;24585:9;;;24606:11;;;24603:37;;;24620:18;;:::i;26530:184::-;26588:6;26641:2;26629:9;26620:7;26616:23;26612:32;26609:52;;;26657:1;26654;26647:12;26609:52;26680:28;26698:9;26680:28;:::i;27414:184::-;-1:-1:-1;;;27463:1:1;27456:88;27563:4;27560:1;27553:15;27587:4;27584:1;27577:15
Swarm Source
ipfs://90eba915763d5b117221ca23a51309ef0e7ee7451e597715a2858f8b32e9fef1
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.