Source Code
Latest 25 from a total of 283 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Migrate Elmo Sol... | 16639367 | 1076 days ago | IN | 0 ETH | 0.00407112 | ||||
| Migrate Elmo Sol... | 16639347 | 1076 days ago | IN | 0 ETH | 0.00426802 | ||||
| Migrate | 16638751 | 1076 days ago | IN | 0 ETH | 0.0027769 | ||||
| Migrate | 16638745 | 1076 days ago | IN | 0 ETH | 0.00280973 | ||||
| Migrate | 16638449 | 1076 days ago | IN | 0 ETH | 0.00338227 | ||||
| Migrate | 16638326 | 1076 days ago | IN | 0 ETH | 0.00307905 | ||||
| Migrate | 16637954 | 1076 days ago | IN | 0 ETH | 0.00309233 | ||||
| Migrate | 16637944 | 1076 days ago | IN | 0 ETH | 0.00301233 | ||||
| Migrate Elmo Sol... | 16637768 | 1076 days ago | IN | 0 ETH | 0.00687056 | ||||
| Migrate Elmo Sol... | 16637666 | 1076 days ago | IN | 0 ETH | 0.00673391 | ||||
| Migrate | 16637539 | 1076 days ago | IN | 0 ETH | 0.00299837 | ||||
| Migrate Elmo Sol... | 16637404 | 1076 days ago | IN | 0 ETH | 0.0059517 | ||||
| Migrate Elmo Sol... | 16637386 | 1076 days ago | IN | 0 ETH | 0.00684227 | ||||
| Migrate Elmo Sol... | 16637335 | 1076 days ago | IN | 0 ETH | 0.00590431 | ||||
| Migrate | 16637295 | 1076 days ago | IN | 0 ETH | 0.00327052 | ||||
| Migrate | 16637291 | 1076 days ago | IN | 0 ETH | 0.00316243 | ||||
| Migrate | 16637228 | 1076 days ago | IN | 0 ETH | 0.00369188 | ||||
| Migrate Elmo Sol... | 16637213 | 1076 days ago | IN | 0 ETH | 0.00631591 | ||||
| Migrate | 16637180 | 1076 days ago | IN | 0 ETH | 0.00387249 | ||||
| Migrate Elmo Sol... | 16636914 | 1076 days ago | IN | 0 ETH | 0.00763914 | ||||
| Migrate | 16636892 | 1076 days ago | IN | 0 ETH | 0.00421519 | ||||
| Migrate Elmo Sol... | 16636633 | 1076 days ago | IN | 0 ETH | 0.00915371 | ||||
| Migrate | 16636480 | 1076 days ago | IN | 0 ETH | 0.00319463 | ||||
| Migrate Elmo Sol... | 16636463 | 1076 days ago | IN | 0 ETH | 0.00760273 | ||||
| Migrate | 16636137 | 1076 days ago | IN | 0 ETH | 0.00279049 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
MonoMigrator
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2023-02-11
*/
pragma solidity 0.8.18;
/**************************************************
* Interfaces
**************************************************/
interface IERC20 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
function approve(address, uint256) external;
function balanceOf(address) external view returns (uint256);
function allowance(address, address) external view returns (uint256);
function transfer(address, uint256) external returns (bool);
function transferFrom(
address,
address,
uint256
) external returns (bool);
}
interface IRouter {
struct route {
address from;
address to;
bool stable;
}
function swapExactTokensForTokens(
uint256,
uint256,
route[] calldata,
address,
uint256
) external returns (uint256[] memory);
}
interface IElmoSolid {
function redeem(
uint256,
address,
address
) external returns (uint256);
function balanceOf(address) external view returns (uint256);
function transferFrom(
address,
address,
uint256
) external returns (bool);
}
interface IVe {
struct LockedBalance {
int128 amount;
uint256 end;
}
function safeTransferFrom(
address,
address,
uint256
) external;
function locked(uint256) external view returns (LockedBalance memory);
function balanceOf(address) external view returns (uint256);
function tokenOfOwnerByIndex(address, uint256)
external
view
returns (uint256);
function attachments(uint256) external view returns (uint256);
function voted(uint256) external view returns (bool);
function isApprovedOrOwner(address, uint256) external view returns (bool);
}
interface IFactory {
function isPair(address) external returns (bool);
}
interface IMonoDepositor {
function withdraw(address, uint256) external;
}
interface IPair {
function burn(address) external returns (uint256, uint256);
function balanceOf(address) external returns (uint256);
function transfer(address, uint256) external returns (bool);
function transferFrom(
address,
address,
uint256
) external returns (bool);
function stable() external view returns (bool);
function token0() external view returns (address);
function token1() external view returns (address);
}
interface IMonoPair {
function pool() external view returns (address);
function balanceOf(address) external view returns (uint256);
function transferFrom(
address,
address,
uint256
) external;
}
/**************************************************
* Libraries
**************************************************/
library SafeCast {
/**
* @dev Converts a signed int256 into an unsigned uint256.
*
* Requirements:
*
* - input must be greater than or equal to 0.
*/
function toUint256(int256 value) internal pure returns (uint256) {
require(value >= 0, "SafeCast: value must be positive");
return uint256(value);
}
}
/**************************************************
* Migration logic
**************************************************/
contract MonoMigrator {
/**************************************************
* Configuration
**************************************************/
IFactory constant factory =
IFactory(0x777de5Fe8117cAAA7B44f396E93a401Cf5c9D4d6);
IVe public constant veNft = IVe(0x77730ed992D286c53F3A0838232c3957dAeaaF73);
IMonoDepositor public constant monoDepositor =
IMonoDepositor(0x822EF744C568466D40Ba28b0f9e4A4961837a46a);
IRouter public constant router =
IRouter(0x77784f96C936042A3ADB1dD29C91a55EB2A4219f);
IElmoSolid elmoSolid =
IElmoSolid(0x7c90784d6144967bF7B8C89Ca06A3629d8abe642);
address public constant solid = 0x777172D858dC1599914a1C4c6c9fC48c99a60990;
address public constant moSolid =
0x848578e351D25B6Ec0d486E42677891521c3d743;
address public constant weth = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
uint256 public immutable migrateStartTime;
// Storage slots start here
address public owner;
uint256 internal _unlocked = 1; // For simple reentrancy check
uint256 public deadline; // No tokens can be migrated after this date
mapping(address => bool) public tokenIsEcosystemToken; // Mapping to keep track whether a specific token is migratable
mapping(address => mapping(address => uint256))
public tokensMigratedByAccount; // tokensMigratedByAccount[tokenAddress][accountAddress]
mapping(address => uint256) public tokensMigratedByToken; // Total tokens migrated by token address
mapping(address => bool) tokenMigrated; // Check if individual token is migrated already via LP
address[] public migratedTokenAddresses; // List of tokens migrated
mapping(address => mapping(uint256 => uint256))
public veNftMigratedIndexById; // tokenId index in array of user migrated veNFTs
mapping(address => uint256[]) public veNftMigratedIdByIndex; // array of veNFT tokenIds a user has migrated
mapping(address => uint256) public veNftMigratedAmountByAccount; // total SOLID equivalent migrated via veNFT of a user
uint256 public veNftMigratedAmountTotal; // total SOLID equivalent migrated via veNFTs
/**************************************************
* Events
**************************************************/
event NftMigrated(address indexed from, uint256 tokenId, uint256 amount);
event EcosystemTokenMigrated(
address indexed from,
address indexed token,
uint256 amount
);
event LpMigrated(
address indexed from,
address pair,
bool stable,
address token0,
address token1,
uint256 amount0,
uint256 amount1
);
/**************************************************
* Structs
**************************************************/
struct Token {
address id; // Token address
uint256 balance; // Token balance
uint256 migrated; // Tokens migrated
bool approved; // Did user approve tokens to be migrated
}
struct VeNft {
uint256 id; // NFT ID
uint256 migrated; // Amount migrated
}
/**************************************************
* Modifiers
**************************************************/
// Simple reentrancy check
modifier lock() {
require(_unlocked == 1);
_unlocked = 2;
_;
_unlocked = 1;
}
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
// Only allow migrating for predefined period
modifier onlyMigratePeriod() {
require(block.timestamp < deadline, "Migrate period over");
_;
}
// Only allow after predefined period
modifier onlyAfterMigratePeriod() {
require(block.timestamp >= deadline, "Migrate period not over");
_;
}
/**************************************************
* Initialization
**************************************************/
/**
* @notice Initialization
*/
constructor() {
owner = msg.sender;
migrateStartTime = block.timestamp;
deadline = migrateStartTime + 7 days; // Set deadline
}
/**
* @notice Transfers ownership
* @param newOwner new owner, or address(0) to renounce ownership
*/
function transferOwnership(address newOwner) external onlyOwner {
owner = newOwner;
}
/**
* @notice Extends deadline
* @param _newDeadline new deadline
* @dev _newDealine must be longer than existing deadline
*/
function extendDeadline(uint256 _newDeadline) external onlyOwner {
require(
_newDeadline > deadline,
"New dealdine must be longer than existing deadline"
);
deadline = _newDeadline;
}
function setEcosystemTokens(address[] memory _validEcosystemTokenAddresses)
external
onlyOwner
{
for (uint256 i = 0; i < _validEcosystemTokenAddresses.length; i++) {
address token = _validEcosystemTokenAddresses[i];
tokenIsEcosystemToken[token] = true;
tokenMigrated[token] = true;
migratedTokenAddresses.push(token);
}
}
/**************************************************
* ERC20 migrate logic
**************************************************/
/**
* @notice Primary migrate method for ERC20 ecosystem tokens
* @param tokenAddress Address of the token to migrate
* @dev Only allow migrating entire user balance. YOLO
* @dev Method can only be called during migrate period
*/
function migrate(address tokenAddress) external lock onlyMigratePeriod {
_migrate(tokenAddress, msg.sender);
}
function migrateFor(address tokenAddress, address recipient)
external
lock
onlyMigratePeriod
{
_migrate(tokenAddress, recipient);
}
function _migrate(address tokenAddress, address recipientAddress) internal {
require(tokenIsEcosystemToken[tokenAddress], "Invalid ecosystem token");
uint256 amountToMigrate = IERC20(tokenAddress).balanceOf(msg.sender);
IERC20(tokenAddress).transferFrom(
msg.sender,
address(this),
amountToMigrate
);
_recordMigration(tokenAddress, recipientAddress, amountToMigrate);
}
/**
* @notice Dump SOLID for moSOLID and migrate
*/
function migrateSolid(uint256 minimumAmountOut)
external
lock
onlyMigratePeriod
{
uint256 amountIn = IERC20(solid).balanceOf(msg.sender);
IERC20(solid).transferFrom(msg.sender, address(this), amountIn);
IRouter.route[] memory routes = new IRouter.route[](2);
routes[0] = IRouter.route({from: solid, to: weth, stable: false});
routes[1] = IRouter.route({from: weth, to: moSolid, stable: false});
IERC20(solid).approve(address(router), amountIn);
uint256[] memory amounts = router.swapExactTokensForTokens(
amountIn,
minimumAmountOut,
routes,
address(this),
block.timestamp
);
uint256 amountOut = amounts[amounts.length - 1];
_recordMigration(moSolid, msg.sender, amountOut);
}
function _recordMigration(
address tokenAddress,
address recipientAddress,
uint256 amountToMigrate
) internal {
// Record migrated token and amount
tokensMigratedByAccount[tokenAddress][
recipientAddress
] += amountToMigrate;
// Increment global token amount migrated for this token
tokensMigratedByToken[tokenAddress] += amountToMigrate;
emit EcosystemTokenMigrated(
recipientAddress,
tokenAddress,
amountToMigrate
);
}
/**************************************************
* elmoSOLID migrate logic
**************************************************/
function migrateElmoSolid() external {
uint256 shares = elmoSolid.balanceOf(msg.sender);
uint256 migratedAmount = elmoSolid.redeem(
shares,
address(this),
msg.sender
);
_recordMigration(moSolid, msg.sender, migratedAmount);
}
/**************************************************
* veNFT migrate logic
**************************************************/
/**
* @notice Migrate veNFT
* @param tokenId Token ID to migrate
* @dev veNFT is converted to moSOLID first
* @dev Method can only be called during migrate period
*/
function migrateVeNft(uint256 tokenId) external lock onlyMigratePeriod {
_migrateVeNft(tokenId, msg.sender);
}
function migrateVeNftFor(uint256 tokenId, address recipient)
external
lock
onlyMigratePeriod
{
_migrateVeNft(tokenId, recipient);
}
function _migrateVeNft(uint256 tokenId, address recipient) internal {
veNft.safeTransferFrom(msg.sender, address(this), tokenId); // Transfer veNFT to this contract
uint256 moSolidBalanceBefore = IERC20(moSolid).balanceOf(address(this));
veNft.safeTransferFrom(address(this), moSolid, tokenId); // Convert veNFT to moSOLID
uint256 moSolidBalanceAfter = IERC20(moSolid).balanceOf(address(this));
uint256 moSolidDelta = moSolidBalanceAfter - moSolidBalanceBefore;
_recordMigration(moSolid, recipient, moSolidDelta);
}
/**************************************************
* LP migrate logic
**************************************************/
function migrateMonoPair(IMonoPair monoPair)
external
lock
onlyMigratePeriod
{
_migrateMonoPair(monoPair, msg.sender);
}
function migrateMonoPairFor(IMonoPair monoPair, address recipient)
external
lock
onlyMigratePeriod
{
_migrateMonoPair(monoPair, recipient);
}
function _migrateMonoPair(IMonoPair monoPair, address recipient) internal {
// Withdraw from Monolith
IPair pair = IPair(monoPair.pool());
uint256 amount = monoPair.balanceOf(msg.sender);
monoPair.transferFrom(msg.sender, address(this), amount);
monoDepositor.withdraw(address(pair), amount);
// Withdraw from Solidly
require(factory.isPair(address(pair)), "Not a pair");
require(pair.transfer(address(pair), amount));
(uint256 amount0, uint256 amount1) = pair.burn(address(this));
address token0 = pair.token0();
address token1 = pair.token1();
tokensMigratedByAccount[token0][recipient] += amount0;
tokensMigratedByAccount[token1][recipient] += amount1;
tokensMigratedByToken[token0] += amount0;
tokensMigratedByToken[token1] += amount1;
require(amount0 > 0 && amount1 > 0, "Invalid amount");
if (tokenMigrated[token0] == false) {
tokenMigrated[token0] = true;
migratedTokenAddresses.push(token0);
}
if (tokenMigrated[token1] == false) {
tokenMigrated[token1] = true;
migratedTokenAddresses.push(token1);
}
emit LpMigrated(
recipient,
address(pair),
pair.stable(),
token0,
token1,
amount0,
amount1
);
}
/**************************************************
* Multisig Execution
**************************************************/
enum Operation {
Call,
DelegateCall
}
function execute(
address to,
uint256 value,
bytes calldata data,
Operation operation
) external payable onlyOwner onlyAfterMigratePeriod returns (bool success) {
if (operation == Operation.Call) {
success = executeCall(to, value, data);
} else if (operation == Operation.DelegateCall) {
success = executeDelegateCall(to, data);
}
require(success == true, "Transaction failed");
}
function executeCall(
address to,
uint256 value,
bytes memory data
) internal returns (bool success) {
assembly {
success := call(
gas(),
to,
value,
add(data, 0x20),
mload(data),
0,
0
)
}
}
function executeDelegateCall(address to, bytes memory data)
internal
returns (bool success)
{
assembly {
success := delegatecall(
gas(),
to,
add(data, 0x20),
mload(data),
0,
0
)
}
}
/**************************************************
* Refund methods
**************************************************/
/**
* @notice Owner callable function to issue refunds
* @param accountAddress User address to be refunded
* @param tokenAddress Token address to be refunded
*/
function refund(address accountAddress, address tokenAddress)
external
lock
onlyOwner
{
// Fetch amount of tokens to return
uint256 amountToReturn = tokensMigratedByAccount[tokenAddress][
accountAddress
];
tokensMigratedByAccount[tokenAddress][accountAddress] = 0; // Set user token balance to zero
tokensMigratedByToken[tokenAddress] -= amountToReturn; // Decrement global token amount migrated for this token
IERC20(tokenAddress).transfer(accountAddress, amountToReturn); // Return tokens to user
}
/**************************************************
* View methods
**************************************************/
function migratedTokenAddressesLength() external view returns (uint256) {
return migratedTokenAddresses.length;
}
/**
* @notice Fetch migrated tokens per account
* @param accountAddress Address of the account for which to view
* @return tokens Returns an array of migratable and migrated tokens without filtering
*/
function migratedTokensByAccount(address accountAddress)
external
view
returns (Token[] memory tokens)
{
Token[] memory _tokens = new Token[](migratedTokenAddresses.length); // Create an array of tokens
// Iterate through all valid migratable tokens
for (
uint256 tokenIdx = 0;
tokenIdx < migratedTokenAddresses.length;
tokenIdx++
) {
address tokenAddress = migratedTokenAddresses[tokenIdx]; // Fetch token address
IERC20 _token = IERC20(tokenAddress); // Fetch ERC20 interface for the current token
uint256 _userBalance = _token.balanceOf(accountAddress); // Fetch token balance
// Fetch migrated balance
uint256 _migratedBalance = tokensMigratedByAccount[tokenAddress][
accountAddress
];
// Fetch allowance state
bool _tokenTransferAllowed = _token.allowance(
accountAddress,
address(this)
) >= _userBalance;
// Fetch token metadata
Token memory token = Token({
id: tokenAddress,
balance: _userBalance,
migrated: _migratedBalance,
approved: _tokenTransferAllowed
});
_tokens[tokenIdx] = token; // Save migratable token data in array
}
tokens = _tokens; // Return migratable tokens
}
/**************************************************
* NFT
**************************************************/
function onERC721Received(
address,
address,
uint256,
bytes calldata
) external view returns (bytes4) {
require(msg.sender == address(veNft)); // Only accept veNfts
require(_unlocked == 2, "No direct transfers");
return this.onERC721Received.selector;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EcosystemTokenMigrated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"stable","type":"bool"},{"indexed":false,"internalType":"address","name":"token0","type":"address"},{"indexed":false,"internalType":"address","name":"token1","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"LpMigrated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NftMigrated","type":"event"},{"inputs":[],"name":"deadline","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"enum MonoMigrator.Operation","name":"operation","type":"uint8"}],"name":"execute","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newDeadline","type":"uint256"}],"name":"extendDeadline","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"migrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"migrateElmoSolid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"migrateFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IMonoPair","name":"monoPair","type":"address"}],"name":"migrateMonoPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IMonoPair","name":"monoPair","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"migrateMonoPairFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minimumAmountOut","type":"uint256"}],"name":"migrateSolid","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"migrateStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"migrateVeNft","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"migrateVeNftFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"migratedTokenAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"migratedTokenAddressesLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"accountAddress","type":"address"}],"name":"migratedTokensByAccount","outputs":[{"components":[{"internalType":"address","name":"id","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"migrated","type":"uint256"},{"internalType":"bool","name":"approved","type":"bool"}],"internalType":"struct MonoMigrator.Token[]","name":"tokens","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"moSolid","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"monoDepositor","outputs":[{"internalType":"contract IMonoDepositor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"accountAddress","type":"address"},{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"refund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_validEcosystemTokenAddresses","type":"address[]"}],"name":"setEcosystemTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"solid","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenIsEcosystemToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"tokensMigratedByAccount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokensMigratedByToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"veNft","outputs":[{"internalType":"contract IVe","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"veNftMigratedAmountByAccount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"veNftMigratedAmountTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"veNftMigratedIdByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"veNftMigratedIndexById","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60a0604052737c90784d6144967bf7b8c89ca06a3629d8abe6426000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016002553480156200006a57600080fd5b5033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426080818152505062093a80608051620000c791906200010c565b60038190555062000147565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200011982620000d3565b91506200012683620000d3565b9250828201905080821115620001415762000140620000dd565b5b92915050565b608051613f5a620001636000396000611a740152613f5a6000f3fe6080604052600436106101ee5760003560e01c806353a3f6161161010d578063ce5494bb116100a0578063f17b056b1161006f578063f17b056b14610704578063f2fde38b14610741578063f43e68f31461076a578063f6c0aeaf14610793578063f887ea40146107d0576101ee565b8063ce5494bb14610638578063e65f574a14610661578063ed6f1d141461068a578063ed9cedec146106c7576101ee565b80637e666054116100dc5780637e666054146105905780638da5cb5b146105b95780638fb088d7146105e4578063c7f348a81461060d576101ee565b806353a3f616146104e857806355db5896146105135780635e30b8a61461053c5780635fd10f0114610565576101ee565b8063389b75331161018557806345aa80991161015457806345aa809914610415578063489639c414610452578063502e73dd1461048f57806351945447146104b8576101ee565b8063389b75331461036b5780633dbada1d146103945780633fbfcaaf146103bf5780633fc8cef3146103ea576101ee565b80632d3d8804116101c15780632d3d88041461029d5780632d47f71a146102c857806330d5b782146102f15780633818eadf1461032e576101ee565b8063150b7a02146101f357806317bfb2d11461023057806329dcb0cf146102475780632a2c8fbe14610272575b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190612e04565b6107fb565b6040516102279190612ec7565b60405180910390f35b34801561023c57600080fd5b506102456108a0565b005b34801561025357600080fd5b5061025c610a07565b6040516102699190612ef1565b60405180910390f35b34801561027e57600080fd5b50610287610a0d565b6040516102949190612f6b565b60405180910390f35b3480156102a957600080fd5b506102b2610a25565b6040516102bf9190612ef1565b60405180910390f35b3480156102d457600080fd5b506102ef60048036038101906102ea9190612f86565b610a32565b005b3480156102fd57600080fd5b5061031860048036038101906103139190612fb3565b610ebe565b6040516103259190612ffb565b60405180910390f35b34801561033a57600080fd5b5061035560048036038101906103509190612f86565b610ede565b6040516103629190613025565b60405180910390f35b34801561037757600080fd5b50610392600480360381019061038d9190612f86565b610f1d565b005b3480156103a057600080fd5b506103a9610fc5565b6040516103b69190613061565b60405180910390f35b3480156103cb57600080fd5b506103d4610fdd565b6040516103e19190613025565b60405180910390f35b3480156103f657600080fd5b506103ff610ff5565b60405161040c9190613025565b60405180910390f35b34801561042157600080fd5b5061043c60048036038101906104379190612fb3565b61100d565b60405161044991906131ad565b60405180910390f35b34801561045e57600080fd5b50610479600480360381019061047491906131cf565b6112c5565b6040516104869190612ef1565b60405180910390f35b34801561049b57600080fd5b506104b660048036038101906104b1919061324d565b6112ea565b005b6104d260048036038101906104cd91906132b2565b61135a565b6040516104df9190612ffb565b60405180910390f35b3480156104f457600080fd5b506104fd61154a565b60405161050a9190613025565b60405180910390f35b34801561051f57600080fd5b5061053a6004803603810190610535919061333a565b611562565b005b34801561054857600080fd5b50610563600480360381019061055e919061333a565b6115d2565b005b34801561057157600080fd5b5061057a611827565b6040516105879190612ef1565b60405180910390f35b34801561059c57600080fd5b506105b760048036038101906105b291906134c9565b61182d565b005b3480156105c557600080fd5b506105ce6119dd565b6040516105db9190613025565b60405180910390f35b3480156105f057600080fd5b5061060b60048036038101906106069190613512565b611a03565b005b34801561061957600080fd5b50610622611a72565b60405161062f9190612ef1565b60405180910390f35b34801561064457600080fd5b5061065f600480360381019061065a9190612fb3565b611a96565b005b34801561066d57600080fd5b506106886004803603810190610683919061353f565b611b05565b005b34801561069657600080fd5b506106b160048036038101906106ac919061333a565b611b75565b6040516106be9190612ef1565b60405180910390f35b3480156106d357600080fd5b506106ee60048036038101906106e99190612fb3565b611b9a565b6040516106fb9190612ef1565b60405180910390f35b34801561071057600080fd5b5061072b60048036038101906107269190612fb3565b611bb2565b6040516107389190612ef1565b60405180910390f35b34801561074d57600080fd5b5061076860048036038101906107639190612fb3565b611bca565b005b34801561077657600080fd5b50610791600480360381019061078c9190612f86565b611c68565b005b34801561079f57600080fd5b506107ba60048036038101906107b591906131cf565b611cd7565b6040516107c79190612ef1565b60405180910390f35b3480156107dc57600080fd5b506107e5611d08565b6040516107f291906135a0565b60405180910390f35b60007377730ed992d286c53f3a0838232c3957daeaaf7373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461084957600080fd5b600280541461088d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088490613618565b60405180910390fd5b63150b7a0260e01b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016108fc9190613025565b602060405180830381865afa158015610919573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093d919061364d565b905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ba0876528330336040518463ffffffff1660e01b815260040161099f9392919061367a565b6020604051808303816000875af11580156109be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e2919061364d565b9050610a0373848578e351d25b6ec0d486e42677891521c3d7433383611d20565b5050565b60035481565b7377730ed992d286c53f3a0838232c3957daeaaf7381565b6000600880549050905090565b600160025414610a4157600080fd5b600280819055506003544210610a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a83906136fd565b60405180910390fd5b600073777172d858dc1599914a1c4c6c9fc48c99a6099073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610adb9190613025565b602060405180830381865afa158015610af8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1c919061364d565b905073777172d858dc1599914a1c4c6c9fc48c99a6099073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401610b6f9392919061371d565b6020604051808303816000875af1158015610b8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb29190613780565b506000600267ffffffffffffffff811115610bd057610bcf61338b565b5b604051908082528060200260200182016040528015610c0957816020015b610bf6612c68565b815260200190600190039081610bee5790505b509050604051806060016040528073777172d858dc1599914a1c4c6c9fc48c99a6099073ffffffffffffffffffffffffffffffffffffffff16815260200173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1681526020016000151581525081600081518110610c9257610c916137ad565b5b6020026020010181905250604051806060016040528073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff16815260200173848578e351d25b6ec0d486e42677891521c3d74373ffffffffffffffffffffffffffffffffffffffff1681526020016000151581525081600181518110610d2357610d226137ad565b5b602002602001018190525073777172d858dc1599914a1c4c6c9fc48c99a6099073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37377784f96c936042a3adb1dd29c91a55eb2a4219f846040518363ffffffff1660e01b8152600401610d919291906137dc565b600060405180830381600087803b158015610dab57600080fd5b505af1158015610dbf573d6000803e3d6000fd5b5050505060007377784f96c936042a3adb1dd29c91a55eb2a4219f73ffffffffffffffffffffffffffffffffffffffff1663f41766d884868530426040518663ffffffff1660e01b8152600401610e1a9594939291906138f6565b6000604051808303816000875af1158015610e39573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610e629190613a13565b905060008160018351610e759190613a8b565b81518110610e8657610e856137ad565b5b60200260200101519050610eaf73848578e351d25b6ec0d486e42677891521c3d7433383611d20565b50505050600160028190555050565b60046020528060005260406000206000915054906101000a900460ff1681565b60088181548110610eee57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f7757600080fd5b6003548111610fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb290613b31565b60405180910390fd5b8060038190555050565b73822ef744c568466d40ba28b0f9e4a4961837a46a81565b73848578e351d25b6ec0d486e42677891521c3d74381565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6060600060088054905067ffffffffffffffff8111156110305761102f61338b565b5b60405190808252806020026020018201604052801561106957816020015b611056612cb7565b81526020019060019003908161104e5790505b50905060005b6008805490508110156112bb57600060088281548110611092576110916137ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b81526004016110ff9190613025565b602060405180830381865afa15801561111c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611140919061364d565b90506000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000828473ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e8b306040518363ffffffff1660e01b8152600401611201929190613b51565b602060405180830381865afa15801561121e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611242919061364d565b10159050600060405180608001604052808773ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001831515815250905080888881518110611297576112966137ad565b5b602002602001018190525050505050505080806112b390613b7a565b91505061106f565b5080915050919050565b6009602052816000526040600020602052806000526040600020600091509150505481565b6001600254146112f957600080fd5b600280819055506003544210611344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133b906136fd565b60405180910390fd5b61134e8282611e73565b60016002819055505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113b657600080fd5b6003544210156113fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f290613c0e565b60405180910390fd5b6000600181111561140f5761140e613c2e565b5b82600181111561142257611421613c2e565b5b0361147d57611476868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061282b565b90506114fa565b6001808111156114905761148f613c2e565b5b8260018111156114a3576114a2613c2e565b5b036114f9576114f68685858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612843565b90505b5b6001151581151514611541576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153890613ca9565b60405180910390fd5b95945050505050565b73777172d858dc1599914a1c4c6c9fc48c99a6099081565b60016002541461157157600080fd5b6002808190555060035442106115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b3906136fd565b60405180910390fd5b6115c68282612859565b60016002819055505050565b6001600254146115e157600080fd5b60028081905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461164257600080fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117949190613a8b565b925050819055508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b81526004016117d69291906137dc565b6020604051808303816000875af11580156117f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118199190613780565b505060016002819055505050565b600c5481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461188757600080fd5b60005b81518110156119d95760008282815181106118a8576118a76137ad565b5b602002602001015190506001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505080806119d190613b7a565b91505061188a565b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160025414611a1257600080fd5b600280819055506003544210611a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a54906136fd565b60405180910390fd5b611a678133611e73565b600160028190555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600160025414611aa557600080fd5b600280819055506003544210611af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae7906136fd565b60405180910390fd5b611afa8133612859565b600160028190555050565b600160025414611b1457600080fd5b600280819055506003544210611b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b56906136fd565b60405180910390fd5b611b6982826129f4565b60016002819055505050565b6005602052816000526040600020602052806000526040600020600091509150505481565b60066020528060005260406000206000915090505481565b600b6020528060005260406000206000915090505481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c2457600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160025414611c7757600080fd5b600280819055506003544210611cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb9906136fd565b60405180910390fd5b611ccc81336129f4565b600160028190555050565b600a6020528160005260406000208181548110611cf357600080fd5b90600052602060002001600091509150505481565b7377784f96c936042a3adb1dd29c91a55eb2a4219f81565b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dac9190613cc9565b9250508190555080600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e029190613cc9565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f283bc0971149f409a5c7a69b2072258686cc766ba2042e98e93671366bb0110183604051611e669190612ef1565b60405180910390a3505050565b60008273ffffffffffffffffffffffffffffffffffffffff166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee49190613d12565b905060008373ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611f219190613025565b602060405180830381865afa158015611f3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f62919061364d565b90508373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401611fa19392919061371d565b600060405180830381600087803b158015611fbb57600080fd5b505af1158015611fcf573d6000803e3d6000fd5b5050505073822ef744c568466d40ba28b0f9e4a4961837a46a73ffffffffffffffffffffffffffffffffffffffff1663f3fef3a383836040518363ffffffff1660e01b81526004016120229291906137dc565b600060405180830381600087803b15801561203c57600080fd5b505af1158015612050573d6000803e3d6000fd5b5050505073777de5fe8117caaa7b44f396e93a401cf5c9d4d673ffffffffffffffffffffffffffffffffffffffff1663e5e31b13836040518263ffffffff1660e01b81526004016120a19190613025565b6020604051808303816000875af11580156120c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e49190613780565b612123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211a90613d8b565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b815260040161215e9291906137dc565b6020604051808303816000875af115801561217d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a19190613780565b6121aa57600080fd5b6000808373ffffffffffffffffffffffffffffffffffffffff166389afcb44306040518263ffffffff1660e01b81526004016121e69190613025565b60408051808303816000875af1158015612204573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122289190613dab565b9150915060008473ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612279573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229d9190613d12565b905060008573ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123109190613d12565b905083600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461239e9190613cc9565b9250508190555082600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124319190613cc9565b9250508190555083600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124879190613cc9565b9250508190555082600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124dd9190613cc9565b925050819055506000841180156124f45750600083115b612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252a90613e37565b60405180910390fd5b60001515600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503612647576001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60001515600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361275b576001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8673ffffffffffffffffffffffffffffffffffffffff167f3e04e4bb1b2e200991e9f77375f72aa2e838f7cb95d0141dcbb709a2af3f3ec6878873ffffffffffffffffffffffffffffffffffffffff166322be3de16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128039190613780565b8585898960405161281996959493929190613e57565b60405180910390a25050505050505050565b600080600083516020850186885af190509392505050565b6000806000835160208501865af4905092915050565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166128e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128dc90613f04565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016129209190613025565b602060405180830381865afa15801561293d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612961919061364d565b90508273ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b81526004016129a09392919061371d565b6020604051808303816000875af11580156129bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129e39190613780565b506129ef838383611d20565b505050565b7377730ed992d286c53f3a0838232c3957daeaaf7373ffffffffffffffffffffffffffffffffffffffff166342842e0e3330856040518463ffffffff1660e01b8152600401612a459392919061371d565b600060405180830381600087803b158015612a5f57600080fd5b505af1158015612a73573d6000803e3d6000fd5b50505050600073848578e351d25b6ec0d486e42677891521c3d74373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612ac69190613025565b602060405180830381865afa158015612ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b07919061364d565b90507377730ed992d286c53f3a0838232c3957daeaaf7373ffffffffffffffffffffffffffffffffffffffff166342842e0e3073848578e351d25b6ec0d486e42677891521c3d743866040518463ffffffff1660e01b8152600401612b6e9392919061371d565b600060405180830381600087803b158015612b8857600080fd5b505af1158015612b9c573d6000803e3d6000fd5b50505050600073848578e351d25b6ec0d486e42677891521c3d74373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612bef9190613025565b602060405180830381865afa158015612c0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c30919061364d565b905060008282612c409190613a8b565b9050612c6173848578e351d25b6ec0d486e42677891521c3d7438583611d20565b5050505050565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000151581525090565b6040518060800160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612d3682612d0b565b9050919050565b612d4681612d2b565b8114612d5157600080fd5b50565b600081359050612d6381612d3d565b92915050565b6000819050919050565b612d7c81612d69565b8114612d8757600080fd5b50565b600081359050612d9981612d73565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612dc457612dc3612d9f565b5b8235905067ffffffffffffffff811115612de157612de0612da4565b5b602083019150836001820283011115612dfd57612dfc612da9565b5b9250929050565b600080600080600060808688031215612e2057612e1f612d01565b5b6000612e2e88828901612d54565b9550506020612e3f88828901612d54565b9450506040612e5088828901612d8a565b935050606086013567ffffffffffffffff811115612e7157612e70612d06565b5b612e7d88828901612dae565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612ec181612e8c565b82525050565b6000602082019050612edc6000830184612eb8565b92915050565b612eeb81612d69565b82525050565b6000602082019050612f066000830184612ee2565b92915050565b6000819050919050565b6000612f31612f2c612f2784612d0b565b612f0c565b612d0b565b9050919050565b6000612f4382612f16565b9050919050565b6000612f5582612f38565b9050919050565b612f6581612f4a565b82525050565b6000602082019050612f806000830184612f5c565b92915050565b600060208284031215612f9c57612f9b612d01565b5b6000612faa84828501612d8a565b91505092915050565b600060208284031215612fc957612fc8612d01565b5b6000612fd784828501612d54565b91505092915050565b60008115159050919050565b612ff581612fe0565b82525050565b60006020820190506130106000830184612fec565b92915050565b61301f81612d2b565b82525050565b600060208201905061303a6000830184613016565b92915050565b600061304b82612f38565b9050919050565b61305b81613040565b82525050565b60006020820190506130766000830184613052565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6130b181612d2b565b82525050565b6130c081612d69565b82525050565b6130cf81612fe0565b82525050565b6080820160008201516130eb60008501826130a8565b5060208201516130fe60208501826130b7565b50604082015161311160408501826130b7565b50606082015161312460608501826130c6565b50505050565b600061313683836130d5565b60808301905092915050565b6000602082019050919050565b600061315a8261307c565b6131648185613087565b935061316f83613098565b8060005b838110156131a0578151613187888261312a565b975061319283613142565b925050600181019050613173565b5085935050505092915050565b600060208201905081810360008301526131c7818461314f565b905092915050565b600080604083850312156131e6576131e5612d01565b5b60006131f485828601612d54565b925050602061320585828601612d8a565b9150509250929050565b600061321a82612d2b565b9050919050565b61322a8161320f565b811461323557600080fd5b50565b60008135905061324781613221565b92915050565b6000806040838503121561326457613263612d01565b5b600061327285828601613238565b925050602061328385828601612d54565b9150509250929050565b6002811061329a57600080fd5b50565b6000813590506132ac8161328d565b92915050565b6000806000806000608086880312156132ce576132cd612d01565b5b60006132dc88828901612d54565b95505060206132ed88828901612d8a565b945050604086013567ffffffffffffffff81111561330e5761330d612d06565b5b61331a88828901612dae565b9350935050606061332d8882890161329d565b9150509295509295909350565b6000806040838503121561335157613350612d01565b5b600061335f85828601612d54565b925050602061337085828601612d54565b9150509250929050565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6133c38261337a565b810181811067ffffffffffffffff821117156133e2576133e161338b565b5b80604052505050565b60006133f5612cf7565b905061340182826133ba565b919050565b600067ffffffffffffffff8211156134215761342061338b565b5b602082029050602081019050919050565b600061344561344084613406565b6133eb565b9050808382526020820190506020840283018581111561346857613467612da9565b5b835b81811015613491578061347d8882612d54565b84526020840193505060208101905061346a565b5050509392505050565b600082601f8301126134b0576134af612d9f565b5b81356134c0848260208601613432565b91505092915050565b6000602082840312156134df576134de612d01565b5b600082013567ffffffffffffffff8111156134fd576134fc612d06565b5b6135098482850161349b565b91505092915050565b60006020828403121561352857613527612d01565b5b600061353684828501613238565b91505092915050565b6000806040838503121561355657613555612d01565b5b600061356485828601612d8a565b925050602061357585828601612d54565b9150509250929050565b600061358a82612f38565b9050919050565b61359a8161357f565b82525050565b60006020820190506135b56000830184613591565b92915050565b600082825260208201905092915050565b7f4e6f20646972656374207472616e736665727300000000000000000000000000600082015250565b60006136026013836135bb565b915061360d826135cc565b602082019050919050565b60006020820190508181036000830152613631816135f5565b9050919050565b60008151905061364781612d73565b92915050565b60006020828403121561366357613662612d01565b5b600061367184828501613638565b91505092915050565b600060608201905061368f6000830186612ee2565b61369c6020830185613016565b6136a96040830184613016565b949350505050565b7f4d69677261746520706572696f64206f76657200000000000000000000000000600082015250565b60006136e76013836135bb565b91506136f2826136b1565b602082019050919050565b60006020820190508181036000830152613716816136da565b9050919050565b60006060820190506137326000830186613016565b61373f6020830185613016565b61374c6040830184612ee2565b949350505050565b61375d81612fe0565b811461376857600080fd5b50565b60008151905061377a81613754565b92915050565b60006020828403121561379657613795612d01565b5b60006137a48482850161376b565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006040820190506137f16000830185613016565b6137fe6020830184612ee2565b9392505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60608201600082015161384760008501826130a8565b50602082015161385a60208501826130a8565b50604082015161386d60408501826130c6565b50505050565b600061387f8383613831565b60608301905092915050565b6000602082019050919050565b60006138a382613805565b6138ad8185613810565b93506138b883613821565b8060005b838110156138e95781516138d08882613873565b97506138db8361388b565b9250506001810190506138bc565b5085935050505092915050565b600060a08201905061390b6000830188612ee2565b6139186020830187612ee2565b818103604083015261392a8186613898565b90506139396060830185613016565b6139466080830184612ee2565b9695505050505050565b600067ffffffffffffffff82111561396b5761396a61338b565b5b602082029050602081019050919050565b600061398f61398a84613950565b6133eb565b905080838252602082019050602084028301858111156139b2576139b1612da9565b5b835b818110156139db57806139c78882613638565b8452602084019350506020810190506139b4565b5050509392505050565b600082601f8301126139fa576139f9612d9f565b5b8151613a0a84826020860161397c565b91505092915050565b600060208284031215613a2957613a28612d01565b5b600082015167ffffffffffffffff811115613a4757613a46612d06565b5b613a53848285016139e5565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a9682612d69565b9150613aa183612d69565b9250828203905081811115613ab957613ab8613a5c565b5b92915050565b7f4e6577206465616c64696e65206d757374206265206c6f6e676572207468616e60008201527f206578697374696e6720646561646c696e650000000000000000000000000000602082015250565b6000613b1b6032836135bb565b9150613b2682613abf565b604082019050919050565b60006020820190508181036000830152613b4a81613b0e565b9050919050565b6000604082019050613b666000830185613016565b613b736020830184613016565b9392505050565b6000613b8582612d69565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613bb757613bb6613a5c565b5b600182019050919050565b7f4d69677261746520706572696f64206e6f74206f766572000000000000000000600082015250565b6000613bf86017836135bb565b9150613c0382613bc2565b602082019050919050565b60006020820190508181036000830152613c2781613beb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f5472616e73616374696f6e206661696c65640000000000000000000000000000600082015250565b6000613c936012836135bb565b9150613c9e82613c5d565b602082019050919050565b60006020820190508181036000830152613cc281613c86565b9050919050565b6000613cd482612d69565b9150613cdf83612d69565b9250828201905080821115613cf757613cf6613a5c565b5b92915050565b600081519050613d0c81612d3d565b92915050565b600060208284031215613d2857613d27612d01565b5b6000613d3684828501613cfd565b91505092915050565b7f4e6f742061207061697200000000000000000000000000000000000000000000600082015250565b6000613d75600a836135bb565b9150613d8082613d3f565b602082019050919050565b60006020820190508181036000830152613da481613d68565b9050919050565b60008060408385031215613dc257613dc1612d01565b5b6000613dd085828601613638565b9250506020613de185828601613638565b9150509250929050565b7f496e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b6000613e21600e836135bb565b9150613e2c82613deb565b602082019050919050565b60006020820190508181036000830152613e5081613e14565b9050919050565b600060c082019050613e6c6000830189613016565b613e796020830188612fec565b613e866040830187613016565b613e936060830186613016565b613ea06080830185612ee2565b613ead60a0830184612ee2565b979650505050505050565b7f496e76616c69642065636f73797374656d20746f6b656e000000000000000000600082015250565b6000613eee6017836135bb565b9150613ef982613eb8565b602082019050919050565b60006020820190508181036000830152613f1d81613ee1565b905091905056fea26469706673582212201bfc72f4e8dcb4dbb5fda75a78cdf4195f7ea637124016b1907dd3734be2a64364736f6c63430008120033
Deployed Bytecode
0x6080604052600436106101ee5760003560e01c806353a3f6161161010d578063ce5494bb116100a0578063f17b056b1161006f578063f17b056b14610704578063f2fde38b14610741578063f43e68f31461076a578063f6c0aeaf14610793578063f887ea40146107d0576101ee565b8063ce5494bb14610638578063e65f574a14610661578063ed6f1d141461068a578063ed9cedec146106c7576101ee565b80637e666054116100dc5780637e666054146105905780638da5cb5b146105b95780638fb088d7146105e4578063c7f348a81461060d576101ee565b806353a3f616146104e857806355db5896146105135780635e30b8a61461053c5780635fd10f0114610565576101ee565b8063389b75331161018557806345aa80991161015457806345aa809914610415578063489639c414610452578063502e73dd1461048f57806351945447146104b8576101ee565b8063389b75331461036b5780633dbada1d146103945780633fbfcaaf146103bf5780633fc8cef3146103ea576101ee565b80632d3d8804116101c15780632d3d88041461029d5780632d47f71a146102c857806330d5b782146102f15780633818eadf1461032e576101ee565b8063150b7a02146101f357806317bfb2d11461023057806329dcb0cf146102475780632a2c8fbe14610272575b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190612e04565b6107fb565b6040516102279190612ec7565b60405180910390f35b34801561023c57600080fd5b506102456108a0565b005b34801561025357600080fd5b5061025c610a07565b6040516102699190612ef1565b60405180910390f35b34801561027e57600080fd5b50610287610a0d565b6040516102949190612f6b565b60405180910390f35b3480156102a957600080fd5b506102b2610a25565b6040516102bf9190612ef1565b60405180910390f35b3480156102d457600080fd5b506102ef60048036038101906102ea9190612f86565b610a32565b005b3480156102fd57600080fd5b5061031860048036038101906103139190612fb3565b610ebe565b6040516103259190612ffb565b60405180910390f35b34801561033a57600080fd5b5061035560048036038101906103509190612f86565b610ede565b6040516103629190613025565b60405180910390f35b34801561037757600080fd5b50610392600480360381019061038d9190612f86565b610f1d565b005b3480156103a057600080fd5b506103a9610fc5565b6040516103b69190613061565b60405180910390f35b3480156103cb57600080fd5b506103d4610fdd565b6040516103e19190613025565b60405180910390f35b3480156103f657600080fd5b506103ff610ff5565b60405161040c9190613025565b60405180910390f35b34801561042157600080fd5b5061043c60048036038101906104379190612fb3565b61100d565b60405161044991906131ad565b60405180910390f35b34801561045e57600080fd5b50610479600480360381019061047491906131cf565b6112c5565b6040516104869190612ef1565b60405180910390f35b34801561049b57600080fd5b506104b660048036038101906104b1919061324d565b6112ea565b005b6104d260048036038101906104cd91906132b2565b61135a565b6040516104df9190612ffb565b60405180910390f35b3480156104f457600080fd5b506104fd61154a565b60405161050a9190613025565b60405180910390f35b34801561051f57600080fd5b5061053a6004803603810190610535919061333a565b611562565b005b34801561054857600080fd5b50610563600480360381019061055e919061333a565b6115d2565b005b34801561057157600080fd5b5061057a611827565b6040516105879190612ef1565b60405180910390f35b34801561059c57600080fd5b506105b760048036038101906105b291906134c9565b61182d565b005b3480156105c557600080fd5b506105ce6119dd565b6040516105db9190613025565b60405180910390f35b3480156105f057600080fd5b5061060b60048036038101906106069190613512565b611a03565b005b34801561061957600080fd5b50610622611a72565b60405161062f9190612ef1565b60405180910390f35b34801561064457600080fd5b5061065f600480360381019061065a9190612fb3565b611a96565b005b34801561066d57600080fd5b506106886004803603810190610683919061353f565b611b05565b005b34801561069657600080fd5b506106b160048036038101906106ac919061333a565b611b75565b6040516106be9190612ef1565b60405180910390f35b3480156106d357600080fd5b506106ee60048036038101906106e99190612fb3565b611b9a565b6040516106fb9190612ef1565b60405180910390f35b34801561071057600080fd5b5061072b60048036038101906107269190612fb3565b611bb2565b6040516107389190612ef1565b60405180910390f35b34801561074d57600080fd5b5061076860048036038101906107639190612fb3565b611bca565b005b34801561077657600080fd5b50610791600480360381019061078c9190612f86565b611c68565b005b34801561079f57600080fd5b506107ba60048036038101906107b591906131cf565b611cd7565b6040516107c79190612ef1565b60405180910390f35b3480156107dc57600080fd5b506107e5611d08565b6040516107f291906135a0565b60405180910390f35b60007377730ed992d286c53f3a0838232c3957daeaaf7373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461084957600080fd5b600280541461088d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088490613618565b60405180910390fd5b63150b7a0260e01b905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016108fc9190613025565b602060405180830381865afa158015610919573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093d919061364d565b905060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ba0876528330336040518463ffffffff1660e01b815260040161099f9392919061367a565b6020604051808303816000875af11580156109be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e2919061364d565b9050610a0373848578e351d25b6ec0d486e42677891521c3d7433383611d20565b5050565b60035481565b7377730ed992d286c53f3a0838232c3957daeaaf7381565b6000600880549050905090565b600160025414610a4157600080fd5b600280819055506003544210610a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a83906136fd565b60405180910390fd5b600073777172d858dc1599914a1c4c6c9fc48c99a6099073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610adb9190613025565b602060405180830381865afa158015610af8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1c919061364d565b905073777172d858dc1599914a1c4c6c9fc48c99a6099073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401610b6f9392919061371d565b6020604051808303816000875af1158015610b8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb29190613780565b506000600267ffffffffffffffff811115610bd057610bcf61338b565b5b604051908082528060200260200182016040528015610c0957816020015b610bf6612c68565b815260200190600190039081610bee5790505b509050604051806060016040528073777172d858dc1599914a1c4c6c9fc48c99a6099073ffffffffffffffffffffffffffffffffffffffff16815260200173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1681526020016000151581525081600081518110610c9257610c916137ad565b5b6020026020010181905250604051806060016040528073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff16815260200173848578e351d25b6ec0d486e42677891521c3d74373ffffffffffffffffffffffffffffffffffffffff1681526020016000151581525081600181518110610d2357610d226137ad565b5b602002602001018190525073777172d858dc1599914a1c4c6c9fc48c99a6099073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37377784f96c936042a3adb1dd29c91a55eb2a4219f846040518363ffffffff1660e01b8152600401610d919291906137dc565b600060405180830381600087803b158015610dab57600080fd5b505af1158015610dbf573d6000803e3d6000fd5b5050505060007377784f96c936042a3adb1dd29c91a55eb2a4219f73ffffffffffffffffffffffffffffffffffffffff1663f41766d884868530426040518663ffffffff1660e01b8152600401610e1a9594939291906138f6565b6000604051808303816000875af1158015610e39573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610e629190613a13565b905060008160018351610e759190613a8b565b81518110610e8657610e856137ad565b5b60200260200101519050610eaf73848578e351d25b6ec0d486e42677891521c3d7433383611d20565b50505050600160028190555050565b60046020528060005260406000206000915054906101000a900460ff1681565b60088181548110610eee57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f7757600080fd5b6003548111610fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb290613b31565b60405180910390fd5b8060038190555050565b73822ef744c568466d40ba28b0f9e4a4961837a46a81565b73848578e351d25b6ec0d486e42677891521c3d74381565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6060600060088054905067ffffffffffffffff8111156110305761102f61338b565b5b60405190808252806020026020018201604052801561106957816020015b611056612cb7565b81526020019060019003908161104e5790505b50905060005b6008805490508110156112bb57600060088281548110611092576110916137ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b81526004016110ff9190613025565b602060405180830381865afa15801561111c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611140919061364d565b90506000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000828473ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e8b306040518363ffffffff1660e01b8152600401611201929190613b51565b602060405180830381865afa15801561121e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611242919061364d565b10159050600060405180608001604052808773ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001831515815250905080888881518110611297576112966137ad565b5b602002602001018190525050505050505080806112b390613b7a565b91505061106f565b5080915050919050565b6009602052816000526040600020602052806000526040600020600091509150505481565b6001600254146112f957600080fd5b600280819055506003544210611344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133b906136fd565b60405180910390fd5b61134e8282611e73565b60016002819055505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113b657600080fd5b6003544210156113fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f290613c0e565b60405180910390fd5b6000600181111561140f5761140e613c2e565b5b82600181111561142257611421613c2e565b5b0361147d57611476868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061282b565b90506114fa565b6001808111156114905761148f613c2e565b5b8260018111156114a3576114a2613c2e565b5b036114f9576114f68685858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612843565b90505b5b6001151581151514611541576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153890613ca9565b60405180910390fd5b95945050505050565b73777172d858dc1599914a1c4c6c9fc48c99a6099081565b60016002541461157157600080fd5b6002808190555060035442106115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b3906136fd565b60405180910390fd5b6115c68282612859565b60016002819055505050565b6001600254146115e157600080fd5b60028081905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461164257600080fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117949190613a8b565b925050819055508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b81526004016117d69291906137dc565b6020604051808303816000875af11580156117f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118199190613780565b505060016002819055505050565b600c5481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461188757600080fd5b60005b81518110156119d95760008282815181106118a8576118a76137ad565b5b602002602001015190506001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505080806119d190613b7a565b91505061188a565b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160025414611a1257600080fd5b600280819055506003544210611a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a54906136fd565b60405180910390fd5b611a678133611e73565b600160028190555050565b7f0000000000000000000000000000000000000000000000000000000063e71bcb81565b600160025414611aa557600080fd5b600280819055506003544210611af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae7906136fd565b60405180910390fd5b611afa8133612859565b600160028190555050565b600160025414611b1457600080fd5b600280819055506003544210611b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b56906136fd565b60405180910390fd5b611b6982826129f4565b60016002819055505050565b6005602052816000526040600020602052806000526040600020600091509150505481565b60066020528060005260406000206000915090505481565b600b6020528060005260406000206000915090505481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c2457600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160025414611c7757600080fd5b600280819055506003544210611cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb9906136fd565b60405180910390fd5b611ccc81336129f4565b600160028190555050565b600a6020528160005260406000208181548110611cf357600080fd5b90600052602060002001600091509150505481565b7377784f96c936042a3adb1dd29c91a55eb2a4219f81565b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dac9190613cc9565b9250508190555080600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e029190613cc9565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f283bc0971149f409a5c7a69b2072258686cc766ba2042e98e93671366bb0110183604051611e669190612ef1565b60405180910390a3505050565b60008273ffffffffffffffffffffffffffffffffffffffff166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee49190613d12565b905060008373ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611f219190613025565b602060405180830381865afa158015611f3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f62919061364d565b90508373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401611fa19392919061371d565b600060405180830381600087803b158015611fbb57600080fd5b505af1158015611fcf573d6000803e3d6000fd5b5050505073822ef744c568466d40ba28b0f9e4a4961837a46a73ffffffffffffffffffffffffffffffffffffffff1663f3fef3a383836040518363ffffffff1660e01b81526004016120229291906137dc565b600060405180830381600087803b15801561203c57600080fd5b505af1158015612050573d6000803e3d6000fd5b5050505073777de5fe8117caaa7b44f396e93a401cf5c9d4d673ffffffffffffffffffffffffffffffffffffffff1663e5e31b13836040518263ffffffff1660e01b81526004016120a19190613025565b6020604051808303816000875af11580156120c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e49190613780565b612123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211a90613d8b565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b815260040161215e9291906137dc565b6020604051808303816000875af115801561217d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a19190613780565b6121aa57600080fd5b6000808373ffffffffffffffffffffffffffffffffffffffff166389afcb44306040518263ffffffff1660e01b81526004016121e69190613025565b60408051808303816000875af1158015612204573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122289190613dab565b9150915060008473ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612279573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229d9190613d12565b905060008573ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123109190613d12565b905083600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461239e9190613cc9565b9250508190555082600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124319190613cc9565b9250508190555083600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124879190613cc9565b9250508190555082600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124dd9190613cc9565b925050819055506000841180156124f45750600083115b612533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252a90613e37565b60405180910390fd5b60001515600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503612647576001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b60001515600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361275b576001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8673ffffffffffffffffffffffffffffffffffffffff167f3e04e4bb1b2e200991e9f77375f72aa2e838f7cb95d0141dcbb709a2af3f3ec6878873ffffffffffffffffffffffffffffffffffffffff166322be3de16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128039190613780565b8585898960405161281996959493929190613e57565b60405180910390a25050505050505050565b600080600083516020850186885af190509392505050565b6000806000835160208501865af4905092915050565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166128e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128dc90613f04565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016129209190613025565b602060405180830381865afa15801561293d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612961919061364d565b90508273ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b81526004016129a09392919061371d565b6020604051808303816000875af11580156129bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129e39190613780565b506129ef838383611d20565b505050565b7377730ed992d286c53f3a0838232c3957daeaaf7373ffffffffffffffffffffffffffffffffffffffff166342842e0e3330856040518463ffffffff1660e01b8152600401612a459392919061371d565b600060405180830381600087803b158015612a5f57600080fd5b505af1158015612a73573d6000803e3d6000fd5b50505050600073848578e351d25b6ec0d486e42677891521c3d74373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612ac69190613025565b602060405180830381865afa158015612ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b07919061364d565b90507377730ed992d286c53f3a0838232c3957daeaaf7373ffffffffffffffffffffffffffffffffffffffff166342842e0e3073848578e351d25b6ec0d486e42677891521c3d743866040518463ffffffff1660e01b8152600401612b6e9392919061371d565b600060405180830381600087803b158015612b8857600080fd5b505af1158015612b9c573d6000803e3d6000fd5b50505050600073848578e351d25b6ec0d486e42677891521c3d74373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612bef9190613025565b602060405180830381865afa158015612c0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c30919061364d565b905060008282612c409190613a8b565b9050612c6173848578e351d25b6ec0d486e42677891521c3d7438583611d20565b5050505050565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000151581525090565b6040518060800160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000151581525090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612d3682612d0b565b9050919050565b612d4681612d2b565b8114612d5157600080fd5b50565b600081359050612d6381612d3d565b92915050565b6000819050919050565b612d7c81612d69565b8114612d8757600080fd5b50565b600081359050612d9981612d73565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612dc457612dc3612d9f565b5b8235905067ffffffffffffffff811115612de157612de0612da4565b5b602083019150836001820283011115612dfd57612dfc612da9565b5b9250929050565b600080600080600060808688031215612e2057612e1f612d01565b5b6000612e2e88828901612d54565b9550506020612e3f88828901612d54565b9450506040612e5088828901612d8a565b935050606086013567ffffffffffffffff811115612e7157612e70612d06565b5b612e7d88828901612dae565b92509250509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612ec181612e8c565b82525050565b6000602082019050612edc6000830184612eb8565b92915050565b612eeb81612d69565b82525050565b6000602082019050612f066000830184612ee2565b92915050565b6000819050919050565b6000612f31612f2c612f2784612d0b565b612f0c565b612d0b565b9050919050565b6000612f4382612f16565b9050919050565b6000612f5582612f38565b9050919050565b612f6581612f4a565b82525050565b6000602082019050612f806000830184612f5c565b92915050565b600060208284031215612f9c57612f9b612d01565b5b6000612faa84828501612d8a565b91505092915050565b600060208284031215612fc957612fc8612d01565b5b6000612fd784828501612d54565b91505092915050565b60008115159050919050565b612ff581612fe0565b82525050565b60006020820190506130106000830184612fec565b92915050565b61301f81612d2b565b82525050565b600060208201905061303a6000830184613016565b92915050565b600061304b82612f38565b9050919050565b61305b81613040565b82525050565b60006020820190506130766000830184613052565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6130b181612d2b565b82525050565b6130c081612d69565b82525050565b6130cf81612fe0565b82525050565b6080820160008201516130eb60008501826130a8565b5060208201516130fe60208501826130b7565b50604082015161311160408501826130b7565b50606082015161312460608501826130c6565b50505050565b600061313683836130d5565b60808301905092915050565b6000602082019050919050565b600061315a8261307c565b6131648185613087565b935061316f83613098565b8060005b838110156131a0578151613187888261312a565b975061319283613142565b925050600181019050613173565b5085935050505092915050565b600060208201905081810360008301526131c7818461314f565b905092915050565b600080604083850312156131e6576131e5612d01565b5b60006131f485828601612d54565b925050602061320585828601612d8a565b9150509250929050565b600061321a82612d2b565b9050919050565b61322a8161320f565b811461323557600080fd5b50565b60008135905061324781613221565b92915050565b6000806040838503121561326457613263612d01565b5b600061327285828601613238565b925050602061328385828601612d54565b9150509250929050565b6002811061329a57600080fd5b50565b6000813590506132ac8161328d565b92915050565b6000806000806000608086880312156132ce576132cd612d01565b5b60006132dc88828901612d54565b95505060206132ed88828901612d8a565b945050604086013567ffffffffffffffff81111561330e5761330d612d06565b5b61331a88828901612dae565b9350935050606061332d8882890161329d565b9150509295509295909350565b6000806040838503121561335157613350612d01565b5b600061335f85828601612d54565b925050602061337085828601612d54565b9150509250929050565b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6133c38261337a565b810181811067ffffffffffffffff821117156133e2576133e161338b565b5b80604052505050565b60006133f5612cf7565b905061340182826133ba565b919050565b600067ffffffffffffffff8211156134215761342061338b565b5b602082029050602081019050919050565b600061344561344084613406565b6133eb565b9050808382526020820190506020840283018581111561346857613467612da9565b5b835b81811015613491578061347d8882612d54565b84526020840193505060208101905061346a565b5050509392505050565b600082601f8301126134b0576134af612d9f565b5b81356134c0848260208601613432565b91505092915050565b6000602082840312156134df576134de612d01565b5b600082013567ffffffffffffffff8111156134fd576134fc612d06565b5b6135098482850161349b565b91505092915050565b60006020828403121561352857613527612d01565b5b600061353684828501613238565b91505092915050565b6000806040838503121561355657613555612d01565b5b600061356485828601612d8a565b925050602061357585828601612d54565b9150509250929050565b600061358a82612f38565b9050919050565b61359a8161357f565b82525050565b60006020820190506135b56000830184613591565b92915050565b600082825260208201905092915050565b7f4e6f20646972656374207472616e736665727300000000000000000000000000600082015250565b60006136026013836135bb565b915061360d826135cc565b602082019050919050565b60006020820190508181036000830152613631816135f5565b9050919050565b60008151905061364781612d73565b92915050565b60006020828403121561366357613662612d01565b5b600061367184828501613638565b91505092915050565b600060608201905061368f6000830186612ee2565b61369c6020830185613016565b6136a96040830184613016565b949350505050565b7f4d69677261746520706572696f64206f76657200000000000000000000000000600082015250565b60006136e76013836135bb565b91506136f2826136b1565b602082019050919050565b60006020820190508181036000830152613716816136da565b9050919050565b60006060820190506137326000830186613016565b61373f6020830185613016565b61374c6040830184612ee2565b949350505050565b61375d81612fe0565b811461376857600080fd5b50565b60008151905061377a81613754565b92915050565b60006020828403121561379657613795612d01565b5b60006137a48482850161376b565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006040820190506137f16000830185613016565b6137fe6020830184612ee2565b9392505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60608201600082015161384760008501826130a8565b50602082015161385a60208501826130a8565b50604082015161386d60408501826130c6565b50505050565b600061387f8383613831565b60608301905092915050565b6000602082019050919050565b60006138a382613805565b6138ad8185613810565b93506138b883613821565b8060005b838110156138e95781516138d08882613873565b97506138db8361388b565b9250506001810190506138bc565b5085935050505092915050565b600060a08201905061390b6000830188612ee2565b6139186020830187612ee2565b818103604083015261392a8186613898565b90506139396060830185613016565b6139466080830184612ee2565b9695505050505050565b600067ffffffffffffffff82111561396b5761396a61338b565b5b602082029050602081019050919050565b600061398f61398a84613950565b6133eb565b905080838252602082019050602084028301858111156139b2576139b1612da9565b5b835b818110156139db57806139c78882613638565b8452602084019350506020810190506139b4565b5050509392505050565b600082601f8301126139fa576139f9612d9f565b5b8151613a0a84826020860161397c565b91505092915050565b600060208284031215613a2957613a28612d01565b5b600082015167ffffffffffffffff811115613a4757613a46612d06565b5b613a53848285016139e5565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613a9682612d69565b9150613aa183612d69565b9250828203905081811115613ab957613ab8613a5c565b5b92915050565b7f4e6577206465616c64696e65206d757374206265206c6f6e676572207468616e60008201527f206578697374696e6720646561646c696e650000000000000000000000000000602082015250565b6000613b1b6032836135bb565b9150613b2682613abf565b604082019050919050565b60006020820190508181036000830152613b4a81613b0e565b9050919050565b6000604082019050613b666000830185613016565b613b736020830184613016565b9392505050565b6000613b8582612d69565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613bb757613bb6613a5c565b5b600182019050919050565b7f4d69677261746520706572696f64206e6f74206f766572000000000000000000600082015250565b6000613bf86017836135bb565b9150613c0382613bc2565b602082019050919050565b60006020820190508181036000830152613c2781613beb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f5472616e73616374696f6e206661696c65640000000000000000000000000000600082015250565b6000613c936012836135bb565b9150613c9e82613c5d565b602082019050919050565b60006020820190508181036000830152613cc281613c86565b9050919050565b6000613cd482612d69565b9150613cdf83612d69565b9250828201905080821115613cf757613cf6613a5c565b5b92915050565b600081519050613d0c81612d3d565b92915050565b600060208284031215613d2857613d27612d01565b5b6000613d3684828501613cfd565b91505092915050565b7f4e6f742061207061697200000000000000000000000000000000000000000000600082015250565b6000613d75600a836135bb565b9150613d8082613d3f565b602082019050919050565b60006020820190508181036000830152613da481613d68565b9050919050565b60008060408385031215613dc257613dc1612d01565b5b6000613dd085828601613638565b9250506020613de185828601613638565b9150509250929050565b7f496e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b6000613e21600e836135bb565b9150613e2c82613deb565b602082019050919050565b60006020820190508181036000830152613e5081613e14565b9050919050565b600060c082019050613e6c6000830189613016565b613e796020830188612fec565b613e866040830187613016565b613e936060830186613016565b613ea06080830185612ee2565b613ead60a0830184612ee2565b979650505050505050565b7f496e76616c69642065636f73797374656d20746f6b656e000000000000000000600082015250565b6000613eee6017836135bb565b9150613ef982613eb8565b602082019050919050565b60006020820190508181036000830152613f1d81613ee1565b905091905056fea26469706673582212201bfc72f4e8dcb4dbb5fda75a78cdf4195f7ea637124016b1907dd3734be2a64364736f6c63430008120033
Deployed Bytecode Sourcemap
3641:16877:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20189:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12000:305;;;;;;;;;;;;;:::i;:::-;;4752:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3921:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18157:127;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10383:867;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4829:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5312:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8428:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4003:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4398:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4490:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18523:1510;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5387:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13904:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15788:488;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4317:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9663:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17390:604;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5768:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8677:419;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4655:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13730:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4572:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9531:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12806:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4953:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5104:56;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5643:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8166:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12674:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5530:59;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4124:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20189:326;20324:6;3953:42;20351:28;;:10;:28;;;20343:37;;;;;;20434:1;20421:9;;:14;20413:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;20477:30;;;20470:37;;20189:326;;;;;;;:::o;12000:305::-;12048:14;12065:9;;;;;;;;;;;:19;;;12085:10;12065:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12048:48;;12107:22;12132:9;;;;;;;;;;;:16;;;12163:6;12192:4;12212:10;12132:101;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12107:126;;12244:53;4441:42;12270:10;12282:14;12244:16;:53::i;:::-;12037:268;;12000:305::o;4752:23::-;;;;:::o;3921:75::-;3953:42;3921:75;:::o;18157:127::-;18220:7;18247:22;:29;;;;18240:36;;18157:127;:::o;10383:867::-;7145:1;7132:9;;:14;7124:23;;;;;;7170:1;7158:9;:13;;;;7428:8:::1;;7410:15;:26;7402:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;10506:16:::2;4349:42;10525:23;;;10549:10;10525:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10506:54;;4349:42;10571:26;;;10598:10;10618:4;10625:8;10571:63;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10645:29;10697:1;10677:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;10645:54;;10722:53;;;;;;;;4349:42;10722:53;;;;;;4521:42;10722:53;;;;;;10768:5;10722:53;;;;::::0;10710:6:::2;10717:1;10710:9;;;;;;;;:::i;:::-;;;;;;;:65;;;;10798:55;;;;;;;;4521:42;10798:55;;;;;;4441:42;10798:55;;;;;;10846:5;10798:55;;;;::::0;10786:6:::2;10793:1;10786:9;;;;;;;;:::i;:::-;;;;;;;:67;;;;4349:42;10864:21;;;4174:42;10903:8;10864:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;10923:24;4174:42;10950:31;;;10996:8;11019:16;11050:6;11079:4;11099:15;10950:175;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10923:202;;11136:17;11156:7;11181:1;11164:7;:14;:18;;;;:::i;:::-;11156:27;;;;;;;;:::i;:::-;;;;;;;;11136:47;;11194:48;4441:42;11220:10;11232:9;11194:16;:48::i;:::-;10495:755;;;;7206:1:::0;7194:9;:13;;;;10383:867;:::o;4829:53::-;;;;;;;;;;;;;;;;;;;;;;:::o;5312:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8428:241::-;7277:5;;;;;;;;;;;7263:19;;:10;:19;;;7255:28;;;;;;8541:8:::1;;8526:12;:23;8504:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;8649:12;8638:8;:23;;;;8428:241:::0;:::o;4003:114::-;4074:42;4003:114;:::o;4398:85::-;4441:42;4398:85;:::o;4490:73::-;4521:42;4490:73;:::o;18523:1510::-;18630:21;18669:22;18706;:29;;;;18694:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;18669:67;;18853:16;18834:1137;18899:22;:29;;;;18888:8;:40;18834:1137;;;18980:20;19003:22;19026:8;19003:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18980:55;;19073:13;19096:12;19073:36;;19171:20;19194:6;:16;;;19211:14;19194:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19171:55;;19305:24;19332:23;:37;19356:12;19332:37;;;;;;;;;;;;;;;:85;19388:14;19332:85;;;;;;;;;;;;;;;;19305:112;;19472:26;19601:12;19501:6;:16;;;19536:14;19577:4;19501:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:112;;19472:141;;19667:18;19688:192;;;;;;;;19717:12;19688:192;;;;;;19757:12;19688:192;;;;19798:16;19688:192;;;;19843:21;19688:192;;;;;19667:213;;19915:5;19895:7;19903:8;19895:17;;;;;;;;:::i;:::-;;;;;;;:25;;;;18965:1006;;;;;;18943:10;;;;;:::i;:::-;;;;18834:1137;;;;19990:7;19981:16;;18658:1375;18523:1510;;;:::o;5387:86::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13904:187::-;7145:1;7132:9;;:14;7124:23;;;;;;7170:1;7158:9;:13;;;;7428:8:::1;;7410:15;:26;7402:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;14046:37:::2;14063:8;14073:9;14046:16;:37::i;:::-;7206:1:::0;7194:9;:13;;;;13904:187;;:::o;15788:488::-;15976:12;7277:5;;;;;;;;;;;7263:19;;:10;:19;;;7255:28;;;;;;7603:8:::1;;7584:15;:27;;7576:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;16018:14:::2;16005:27;;;;;;;;:::i;:::-;;:9;:27;;;;;;;;:::i;:::-;;::::0;16001:211:::2;;16059:28;16071:2;16075:5;16082:4;;16059:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:11;:28::i;:::-;16049:38;;16001:211;;;16122:22;16109:35:::0;::::2;;;;;;;:::i;:::-;;:9;:35;;;;;;;;:::i;:::-;;::::0;16105:107:::2;;16171:29;16191:2;16195:4;;16171:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:19;:29::i;:::-;16161:39;;16105:107;16001:211;16241:4;16230:15;;:7;:15;;;16222:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;15788:488:::0;;;;;;;:::o;4317:74::-;4349:42;4317:74;:::o;9663:177::-;7145:1;7132:9;;:14;7124:23;;;;;;7170:1;7158:9;:13;;;;7428:8:::1;;7410:15;:26;7402:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9799:33:::2;9808:12;9822:9;9799:8;:33::i;:::-;7206:1:::0;7194:9;:13;;;;9663:177;;:::o;17390:604::-;7145:1;7132:9;;:14;7124:23;;;;;;7170:1;7158:9;:13;;;;7277:5:::1;;;;;;;;;;;7263:19;;:10;:19;;;7255:28;;;::::0;::::1;;17564:22:::2;17589:23;:37;17613:12;17589:37;;;;;;;;;;;;;;;:77;17641:14;17589:77;;;;;;;;;;;;;;;;17564:102;;17733:1;17677:23;:37;17701:12;17677:37;;;;;;;;;;;;;;;:53;17715:14;17677:53;;;;;;;;;;;;;;;:57;;;;17818:14;17779:21;:35;17801:12;17779:35;;;;;;;;;;;;;;;;:53;;;;;;;:::i;:::-;;;;;;;;17907:12;17900:29;;;17930:14;17946;17900:61;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17508:486;7206:1:::0;7194:9;:13;;;;17390:604;;:::o;5768:39::-;;;;:::o;8677:419::-;7277:5;;;;;;;;;;;7263:19;;:10;:19;;;7255:28;;;;;;8811:9:::1;8806:283;8830:29;:36;8826:1;:40;8806:283;;;8888:13;8904:29;8934:1;8904:32;;;;;;;;:::i;:::-;;;;;;;;8888:48;;8982:4;8951:21;:28;8973:5;8951:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;9024:4;9001:13;:20;9015:5;9001:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;9043:22;9071:5;9043:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8873:216;8868:3;;;;;:::i;:::-;;;;8806:283;;;;8677:419:::0;:::o;4655:20::-;;;;;;;;;;;;;:::o;13730:166::-;7145:1;7132:9;;:14;7124:23;;;;;;7170:1;7158:9;:13;;;;7428:8:::1;;7410:15;:26;7402:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;13850:38:::2;13867:8;13877:10;13850:16;:38::i;:::-;7206:1:::0;7194:9;:13;;;;13730:166;:::o;4572:41::-;;;:::o;9531:124::-;7145:1;7132:9;;:14;7124:23;;;;;;7170:1;7158:9;:13;;;;7428:8:::1;;7410:15;:26;7402:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9613:34:::2;9622:12;9636:10;9613:8;:34::i;:::-;7206:1:::0;7194:9;:13;;;;9531:124;:::o;12806:177::-;7145:1;7132:9;;:14;7124:23;;;;;;7170:1;7158:9;:13;;;;7428:8:::1;;7410:15;:26;7402:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;12942:33:::2;12956:7;12965:9;12942:13;:33::i;:::-;7206:1:::0;7194:9;:13;;;;12806:177;;:::o;4953:87::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5104:56::-;;;;;;;;;;;;;;;;;:::o;5643:63::-;;;;;;;;;;;;;;;;;:::o;8166:99::-;7277:5;;;;;;;;;;;7263:19;;:10;:19;;;7255:28;;;;;;8249:8:::1;8241:5;;:16;;;;;;;;;;;;;;;;;;8166:99:::0;:::o;12674:124::-;7145:1;7132:9;;:14;7124:23;;;;;;7170:1;7158:9;:13;;;;7428:8:::1;;7410:15;:26;7402:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;12756:34:::2;12770:7;12779:10;12756:13;:34::i;:::-;7206:1:::0;7194:9;:13;;;;12674:124;:::o;5530:59::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4124:93::-;4174:42;4124:93;:::o;11258:574::-;11539:15;11456:23;:37;11480:12;11456:37;;;;;;;;;;;;;;;:79;11508:16;11456:79;;;;;;;;;;;;;;;;:98;;;;;;;:::i;:::-;;;;;;;;11672:15;11633:21;:35;11655:12;11633:35;;;;;;;;;;;;;;;;:54;;;;;;;:::i;:::-;;;;;;;;11771:12;11703:121;;11740:16;11703:121;;;11798:15;11703:121;;;;;;:::i;:::-;;;;;;;;11258:574;;;:::o;14099:1456::-;14219:10;14238:8;:13;;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14219:35;;14265:14;14282:8;:18;;;14301:10;14282:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14265:47;;14323:8;:21;;;14345:10;14365:4;14372:6;14323:56;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4074:42;14390:22;;;14421:4;14428:6;14390:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3871:42;14490:14;;;14513:4;14490:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14482:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;14553:4;:13;;;14575:4;14582:6;14553:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14545:45;;;;;;14602:15;14619;14638:4;:9;;;14656:4;14638:24;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14601:61;;;;14673:14;14690:4;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14673:30;;14714:14;14731:4;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14714:30;;14801:7;14755:23;:31;14779:6;14755:31;;;;;;;;;;;;;;;:42;14787:9;14755:42;;;;;;;;;;;;;;;;:53;;;;;;;:::i;:::-;;;;;;;;14865:7;14819:23;:31;14843:6;14819:31;;;;;;;;;;;;;;;:42;14851:9;14819:42;;;;;;;;;;;;;;;;:53;;;;;;;:::i;:::-;;;;;;;;14916:7;14883:21;:29;14905:6;14883:29;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;14967:7;14934:21;:29;14956:6;14934:29;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;15005:1;14995:7;:11;:26;;;;;15020:1;15010:7;:11;14995:26;14987:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;15080:5;15055:30;;:13;:21;15069:6;15055:21;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;15051:141;;15126:4;15102:13;:21;15116:6;15102:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;15145:22;15173:6;15145:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15051:141;15231:5;15206:30;;:13;:21;15220:6;15206:21;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;15202:141;;15277:4;15253:13;:21;15267:6;15253:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;15296:22;15324:6;15296:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15202:141;15385:9;15360:187;;;15417:4;15437;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15465:6;15486;15507:7;15529;15360:187;;;;;;;;;;;:::i;:::-;;;;;;;;14173:1382;;;;;;14099:1456;;:::o;16284:389::-;16403:12;16639:1;16619;16595:4;16589:11;16565:4;16559;16555:15;16531:5;16510:2;16486:5;16463:192;16452:203;;16284:389;;;;;:::o;16681:355::-;16777:12;17002:1;16982;16958:4;16952:11;16928:4;16922;16918:15;16897:2;16873:5;16842:176;16831:187;;16681:355;;;;:::o;9848:458::-;9942:21;:35;9964:12;9942:35;;;;;;;;;;;;;;;;;;;;;;;;;9934:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10016:23;10049:12;10042:30;;;10073:10;10042:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10016:68;;10102:12;10095:33;;;10143:10;10176:4;10196:15;10095:127;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10233:65;10250:12;10264:16;10282:15;10233:16;:65::i;:::-;9923:383;9848:458;;:::o;12991:574::-;3953:42;13070:22;;;13093:10;13113:4;13120:7;13070:58;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13174:28;4441:42;13205:25;;;13239:4;13205:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13174:71;;3953:42;13256:22;;;13287:4;4441:42;13303:7;13256:55;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13350:27;4441:42;13380:25;;;13414:4;13380:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13350:70;;13431:20;13476;13454:19;:42;;;;:::i;:::-;13431:65;;13507:50;4441:42;13533:9;13544:12;13507:16;:50::i;:::-;13059:506;;;12991:574;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:117::-;1306:1;1303;1296:12;1320:117;1429:1;1426;1419:12;1443:117;1552:1;1549;1542:12;1579:552;1636:8;1646:6;1696:3;1689:4;1681:6;1677:17;1673:27;1663:122;;1704:79;;:::i;:::-;1663:122;1817:6;1804:20;1794:30;;1847:18;1839:6;1836:30;1833:117;;;1869:79;;:::i;:::-;1833:117;1983:4;1975:6;1971:17;1959:29;;2037:3;2029:4;2021:6;2017:17;2007:8;2003:32;2000:41;1997:128;;;2044:79;;:::i;:::-;1997:128;1579:552;;;;;:::o;2137:963::-;2234:6;2242;2250;2258;2266;2315:3;2303:9;2294:7;2290:23;2286:33;2283:120;;;2322:79;;:::i;:::-;2283:120;2442:1;2467:53;2512:7;2503:6;2492:9;2488:22;2467:53;:::i;:::-;2457:63;;2413:117;2569:2;2595:53;2640:7;2631:6;2620:9;2616:22;2595:53;:::i;:::-;2585:63;;2540:118;2697:2;2723:53;2768:7;2759:6;2748:9;2744:22;2723:53;:::i;:::-;2713:63;;2668:118;2853:2;2842:9;2838:18;2825:32;2884:18;2876:6;2873:30;2870:117;;;2906:79;;:::i;:::-;2870:117;3019:64;3075:7;3066:6;3055:9;3051:22;3019:64;:::i;:::-;3001:82;;;;2796:297;2137:963;;;;;;;;:::o;3106:149::-;3142:7;3182:66;3175:5;3171:78;3160:89;;3106:149;;;:::o;3261:115::-;3346:23;3363:5;3346:23;:::i;:::-;3341:3;3334:36;3261:115;;:::o;3382:218::-;3473:4;3511:2;3500:9;3496:18;3488:26;;3524:69;3590:1;3579:9;3575:17;3566:6;3524:69;:::i;:::-;3382:218;;;;:::o;3606:118::-;3693:24;3711:5;3693:24;:::i;:::-;3688:3;3681:37;3606:118;;:::o;3730:222::-;3823:4;3861:2;3850:9;3846:18;3838:26;;3874:71;3942:1;3931:9;3927:17;3918:6;3874:71;:::i;:::-;3730:222;;;;:::o;3958:60::-;3986:3;4007:5;4000:12;;3958:60;;;:::o;4024:142::-;4074:9;4107:53;4125:34;4134:24;4152:5;4134:24;:::i;:::-;4125:34;:::i;:::-;4107:53;:::i;:::-;4094:66;;4024:142;;;:::o;4172:126::-;4222:9;4255:37;4286:5;4255:37;:::i;:::-;4242:50;;4172:126;;;:::o;4304:137::-;4365:9;4398:37;4429:5;4398:37;:::i;:::-;4385:50;;4304:137;;;:::o;4447:153::-;4545:48;4587:5;4545:48;:::i;:::-;4540:3;4533:61;4447:153;;:::o;4606:244::-;4710:4;4748:2;4737:9;4733:18;4725:26;;4761:82;4840:1;4829:9;4825:17;4816:6;4761:82;:::i;:::-;4606:244;;;;:::o;4856:329::-;4915:6;4964:2;4952:9;4943:7;4939:23;4935:32;4932:119;;;4970:79;;:::i;:::-;4932:119;5090:1;5115:53;5160:7;5151:6;5140:9;5136:22;5115:53;:::i;:::-;5105:63;;5061:117;4856:329;;;;:::o;5191:::-;5250:6;5299:2;5287:9;5278:7;5274:23;5270:32;5267:119;;;5305:79;;:::i;:::-;5267:119;5425:1;5450:53;5495:7;5486:6;5475:9;5471:22;5450:53;:::i;:::-;5440:63;;5396:117;5191:329;;;;:::o;5526:90::-;5560:7;5603:5;5596:13;5589:21;5578:32;;5526:90;;;:::o;5622:109::-;5703:21;5718:5;5703:21;:::i;:::-;5698:3;5691:34;5622:109;;:::o;5737:210::-;5824:4;5862:2;5851:9;5847:18;5839:26;;5875:65;5937:1;5926:9;5922:17;5913:6;5875:65;:::i;:::-;5737:210;;;;:::o;5953:118::-;6040:24;6058:5;6040:24;:::i;:::-;6035:3;6028:37;5953:118;;:::o;6077:222::-;6170:4;6208:2;6197:9;6193:18;6185:26;;6221:71;6289:1;6278:9;6274:17;6265:6;6221:71;:::i;:::-;6077:222;;;;:::o;6305:148::-;6377:9;6410:37;6441:5;6410:37;:::i;:::-;6397:50;;6305:148;;;:::o;6459:175::-;6568:59;6621:5;6568:59;:::i;:::-;6563:3;6556:72;6459:175;;:::o;6640:266::-;6755:4;6793:2;6782:9;6778:18;6770:26;;6806:93;6896:1;6885:9;6881:17;6872:6;6806:93;:::i;:::-;6640:266;;;;:::o;6912:136::-;7001:6;7035:5;7029:12;7019:22;;6912:136;;;:::o;7054:206::-;7175:11;7209:6;7204:3;7197:19;7249:4;7244:3;7240:14;7225:29;;7054:206;;;;:::o;7266:154::-;7355:4;7378:3;7370:11;;7408:4;7403:3;7399:14;7391:22;;7266:154;;;:::o;7426:108::-;7503:24;7521:5;7503:24;:::i;:::-;7498:3;7491:37;7426:108;;:::o;7540:::-;7617:24;7635:5;7617:24;:::i;:::-;7612:3;7605:37;7540:108;;:::o;7654:99::-;7725:21;7740:5;7725:21;:::i;:::-;7720:3;7713:34;7654:99;;:::o;7821:842::-;7952:4;7947:3;7943:14;8037:4;8030:5;8026:16;8020:23;8056:63;8113:4;8108:3;8104:14;8090:12;8056:63;:::i;:::-;7967:162;8214:4;8207:5;8203:16;8197:23;8233:63;8290:4;8285:3;8281:14;8267:12;8233:63;:::i;:::-;8139:167;8392:4;8385:5;8381:16;8375:23;8411:63;8468:4;8463:3;8459:14;8445:12;8411:63;:::i;:::-;8316:168;8570:4;8563:5;8559:16;8553:23;8589:57;8640:4;8635:3;8631:14;8617:12;8589:57;:::i;:::-;8494:162;7921:742;7821:842;;:::o;8669:267::-;8782:10;8803:90;8889:3;8881:6;8803:90;:::i;:::-;8925:4;8920:3;8916:14;8902:28;;8669:267;;;;:::o;8942:135::-;9034:4;9066;9061:3;9057:14;9049:22;;8942:135;;;:::o;9149:908::-;9312:3;9341:76;9411:5;9341:76;:::i;:::-;9433:108;9534:6;9529:3;9433:108;:::i;:::-;9426:115;;9565:78;9637:5;9565:78;:::i;:::-;9666:7;9697:1;9682:350;9707:6;9704:1;9701:13;9682:350;;;9783:6;9777:13;9810:107;9913:3;9898:13;9810:107;:::i;:::-;9803:114;;9940:82;10015:6;9940:82;:::i;:::-;9930:92;;9742:290;9729:1;9726;9722:9;9717:14;;9682:350;;;9686:14;10048:3;10041:10;;9317:740;;;9149:908;;;;:::o;10063:461::-;10250:4;10288:2;10277:9;10273:18;10265:26;;10337:9;10331:4;10327:20;10323:1;10312:9;10308:17;10301:47;10365:152;10512:4;10503:6;10365:152;:::i;:::-;10357:160;;10063:461;;;;:::o;10530:474::-;10598:6;10606;10655:2;10643:9;10634:7;10630:23;10626:32;10623:119;;;10661:79;;:::i;:::-;10623:119;10781:1;10806:53;10851:7;10842:6;10831:9;10827:22;10806:53;:::i;:::-;10796:63;;10752:117;10908:2;10934:53;10979:7;10970:6;10959:9;10955:22;10934:53;:::i;:::-;10924:63;;10879:118;10530:474;;;;;:::o;11010:113::-;11064:7;11093:24;11111:5;11093:24;:::i;:::-;11082:35;;11010:113;;;:::o;11129:156::-;11219:41;11254:5;11219:41;:::i;:::-;11212:5;11209:52;11199:80;;11275:1;11272;11265:12;11199:80;11129:156;:::o;11291:173::-;11354:5;11392:6;11379:20;11370:29;;11408:50;11452:5;11408:50;:::i;:::-;11291:173;;;;:::o;11470:508::-;11555:6;11563;11612:2;11600:9;11591:7;11587:23;11583:32;11580:119;;;11618:79;;:::i;:::-;11580:119;11738:1;11763:70;11825:7;11816:6;11805:9;11801:22;11763:70;:::i;:::-;11753:80;;11709:134;11882:2;11908:53;11953:7;11944:6;11933:9;11929:22;11908:53;:::i;:::-;11898:63;;11853:118;11470:508;;;;;:::o;11984:113::-;12071:1;12064:5;12061:12;12051:40;;12087:1;12084;12077:12;12051:40;11984:113;:::o;12103:167::-;12163:5;12201:6;12188:20;12179:29;;12217:47;12258:5;12217:47;:::i;:::-;12103:167;;;;:::o;12276:991::-;12387:6;12395;12403;12411;12419;12468:3;12456:9;12447:7;12443:23;12439:33;12436:120;;;12475:79;;:::i;:::-;12436:120;12595:1;12620:53;12665:7;12656:6;12645:9;12641:22;12620:53;:::i;:::-;12610:63;;12566:117;12722:2;12748:53;12793:7;12784:6;12773:9;12769:22;12748:53;:::i;:::-;12738:63;;12693:118;12878:2;12867:9;12863:18;12850:32;12909:18;12901:6;12898:30;12895:117;;;12931:79;;:::i;:::-;12895:117;13044:64;13100:7;13091:6;13080:9;13076:22;13044:64;:::i;:::-;13026:82;;;;12821:297;13157:2;13183:67;13242:7;13233:6;13222:9;13218:22;13183:67;:::i;:::-;13173:77;;13128:132;12276:991;;;;;;;;:::o;13273:474::-;13341:6;13349;13398:2;13386:9;13377:7;13373:23;13369:32;13366:119;;;13404:79;;:::i;:::-;13366:119;13524:1;13549:53;13594:7;13585:6;13574:9;13570:22;13549:53;:::i;:::-;13539:63;;13495:117;13651:2;13677:53;13722:7;13713:6;13702:9;13698:22;13677:53;:::i;:::-;13667:63;;13622:118;13273:474;;;;;:::o;13753:102::-;13794:6;13845:2;13841:7;13836:2;13829:5;13825:14;13821:28;13811:38;;13753:102;;;:::o;13861:180::-;13909:77;13906:1;13899:88;14006:4;14003:1;13996:15;14030:4;14027:1;14020:15;14047:281;14130:27;14152:4;14130:27;:::i;:::-;14122:6;14118:40;14260:6;14248:10;14245:22;14224:18;14212:10;14209:34;14206:62;14203:88;;;14271:18;;:::i;:::-;14203:88;14311:10;14307:2;14300:22;14090:238;14047:281;;:::o;14334:129::-;14368:6;14395:20;;:::i;:::-;14385:30;;14424:33;14452:4;14444:6;14424:33;:::i;:::-;14334:129;;;:::o;14469:311::-;14546:4;14636:18;14628:6;14625:30;14622:56;;;14658:18;;:::i;:::-;14622:56;14708:4;14700:6;14696:17;14688:25;;14768:4;14762;14758:15;14750:23;;14469:311;;;:::o;14803:710::-;14899:5;14924:81;14940:64;14997:6;14940:64;:::i;:::-;14924:81;:::i;:::-;14915:90;;15025:5;15054:6;15047:5;15040:21;15088:4;15081:5;15077:16;15070:23;;15141:4;15133:6;15129:17;15121:6;15117:30;15170:3;15162:6;15159:15;15156:122;;;15189:79;;:::i;:::-;15156:122;15304:6;15287:220;15321:6;15316:3;15313:15;15287:220;;;15396:3;15425:37;15458:3;15446:10;15425:37;:::i;:::-;15420:3;15413:50;15492:4;15487:3;15483:14;15476:21;;15363:144;15347:4;15342:3;15338:14;15331:21;;15287:220;;;15291:21;14905:608;;14803:710;;;;;:::o;15536:370::-;15607:5;15656:3;15649:4;15641:6;15637:17;15633:27;15623:122;;15664:79;;:::i;:::-;15623:122;15781:6;15768:20;15806:94;15896:3;15888:6;15881:4;15873:6;15869:17;15806:94;:::i;:::-;15797:103;;15613:293;15536:370;;;;:::o;15912:539::-;15996:6;16045:2;16033:9;16024:7;16020:23;16016:32;16013:119;;;16051:79;;:::i;:::-;16013:119;16199:1;16188:9;16184:17;16171:31;16229:18;16221:6;16218:30;16215:117;;;16251:79;;:::i;:::-;16215:117;16356:78;16426:7;16417:6;16406:9;16402:22;16356:78;:::i;:::-;16346:88;;16142:302;15912:539;;;;:::o;16457:363::-;16533:6;16582:2;16570:9;16561:7;16557:23;16553:32;16550:119;;;16588:79;;:::i;:::-;16550:119;16708:1;16733:70;16795:7;16786:6;16775:9;16771:22;16733:70;:::i;:::-;16723:80;;16679:134;16457:363;;;;:::o;16826:474::-;16894:6;16902;16951:2;16939:9;16930:7;16926:23;16922:32;16919:119;;;16957:79;;:::i;:::-;16919:119;17077:1;17102:53;17147:7;17138:6;17127:9;17123:22;17102:53;:::i;:::-;17092:63;;17048:117;17204:2;17230:53;17275:7;17266:6;17255:9;17251:22;17230:53;:::i;:::-;17220:63;;17175:118;16826:474;;;;;:::o;17306:140::-;17370:9;17403:37;17434:5;17403:37;:::i;:::-;17390:50;;17306:140;;;:::o;17452:159::-;17553:51;17598:5;17553:51;:::i;:::-;17548:3;17541:64;17452:159;;:::o;17617:250::-;17724:4;17762:2;17751:9;17747:18;17739:26;;17775:85;17857:1;17846:9;17842:17;17833:6;17775:85;:::i;:::-;17617:250;;;;:::o;17873:169::-;17957:11;17991:6;17986:3;17979:19;18031:4;18026:3;18022:14;18007:29;;17873:169;;;;:::o;18048:::-;18188:21;18184:1;18176:6;18172:14;18165:45;18048:169;:::o;18223:366::-;18365:3;18386:67;18450:2;18445:3;18386:67;:::i;:::-;18379:74;;18462:93;18551:3;18462:93;:::i;:::-;18580:2;18575:3;18571:12;18564:19;;18223:366;;;:::o;18595:419::-;18761:4;18799:2;18788:9;18784:18;18776:26;;18848:9;18842:4;18838:20;18834:1;18823:9;18819:17;18812:47;18876:131;19002:4;18876:131;:::i;:::-;18868:139;;18595:419;;;:::o;19020:143::-;19077:5;19108:6;19102:13;19093:22;;19124:33;19151:5;19124:33;:::i;:::-;19020:143;;;;:::o;19169:351::-;19239:6;19288:2;19276:9;19267:7;19263:23;19259:32;19256:119;;;19294:79;;:::i;:::-;19256:119;19414:1;19439:64;19495:7;19486:6;19475:9;19471:22;19439:64;:::i;:::-;19429:74;;19385:128;19169:351;;;;:::o;19526:442::-;19675:4;19713:2;19702:9;19698:18;19690:26;;19726:71;19794:1;19783:9;19779:17;19770:6;19726:71;:::i;:::-;19807:72;19875:2;19864:9;19860:18;19851:6;19807:72;:::i;:::-;19889;19957:2;19946:9;19942:18;19933:6;19889:72;:::i;:::-;19526:442;;;;;;:::o;19974:169::-;20114:21;20110:1;20102:6;20098:14;20091:45;19974:169;:::o;20149:366::-;20291:3;20312:67;20376:2;20371:3;20312:67;:::i;:::-;20305:74;;20388:93;20477:3;20388:93;:::i;:::-;20506:2;20501:3;20497:12;20490:19;;20149:366;;;:::o;20521:419::-;20687:4;20725:2;20714:9;20710:18;20702:26;;20774:9;20768:4;20764:20;20760:1;20749:9;20745:17;20738:47;20802:131;20928:4;20802:131;:::i;:::-;20794:139;;20521:419;;;:::o;20946:442::-;21095:4;21133:2;21122:9;21118:18;21110:26;;21146:71;21214:1;21203:9;21199:17;21190:6;21146:71;:::i;:::-;21227:72;21295:2;21284:9;21280:18;21271:6;21227:72;:::i;:::-;21309;21377:2;21366:9;21362:18;21353:6;21309:72;:::i;:::-;20946:442;;;;;;:::o;21394:116::-;21464:21;21479:5;21464:21;:::i;:::-;21457:5;21454:32;21444:60;;21500:1;21497;21490:12;21444:60;21394:116;:::o;21516:137::-;21570:5;21601:6;21595:13;21586:22;;21617:30;21641:5;21617:30;:::i;:::-;21516:137;;;;:::o;21659:345::-;21726:6;21775:2;21763:9;21754:7;21750:23;21746:32;21743:119;;;21781:79;;:::i;:::-;21743:119;21901:1;21926:61;21979:7;21970:6;21959:9;21955:22;21926:61;:::i;:::-;21916:71;;21872:125;21659:345;;;;:::o;22010:180::-;22058:77;22055:1;22048:88;22155:4;22152:1;22145:15;22179:4;22176:1;22169:15;22196:332;22317:4;22355:2;22344:9;22340:18;22332:26;;22368:71;22436:1;22425:9;22421:17;22412:6;22368:71;:::i;:::-;22449:72;22517:2;22506:9;22502:18;22493:6;22449:72;:::i;:::-;22196:332;;;;;:::o;22534:135::-;22622:6;22656:5;22650:12;22640:22;;22534:135;;;:::o;22675:205::-;22795:11;22829:6;22824:3;22817:19;22869:4;22864:3;22860:14;22845:29;;22675:205;;;;:::o;22886:153::-;22974:4;22997:3;22989:11;;23027:4;23022:3;23018:14;23010:22;;22886:153;;;:::o;23097:657::-;23226:4;23221:3;23217:14;23313:4;23306:5;23302:16;23296:23;23332:63;23389:4;23384:3;23380:14;23366:12;23332:63;:::i;:::-;23241:164;23485:4;23478:5;23474:16;23468:23;23504:63;23561:4;23556:3;23552:14;23538:12;23504:63;:::i;:::-;23415:162;23661:4;23654:5;23650:16;23644:23;23680:57;23731:4;23726:3;23722:14;23708:12;23680:57;:::i;:::-;23587:160;23195:559;23097:657;;:::o;23760:263::-;23871:10;23892:88;23976:3;23968:6;23892:88;:::i;:::-;24012:4;24007:3;24003:14;23989:28;;23760:263;;;;:::o;24029:134::-;24120:4;24152;24147:3;24143:14;24135:22;;24029:134;;;:::o;24225:900::-;24386:3;24415:75;24484:5;24415:75;:::i;:::-;24506:107;24606:6;24601:3;24506:107;:::i;:::-;24499:114;;24637:77;24708:5;24637:77;:::i;:::-;24737:7;24768:1;24753:347;24778:6;24775:1;24772:13;24753:347;;;24854:6;24848:13;24881:105;24982:3;24967:13;24881:105;:::i;:::-;24874:112;;25009:81;25083:6;25009:81;:::i;:::-;24999:91;;24813:287;24800:1;24797;24793:9;24788:14;;24753:347;;;24757:14;25116:3;25109:10;;24391:734;;;24225:900;;;;:::o;25131:899::-;25428:4;25466:3;25455:9;25451:19;25443:27;;25480:71;25548:1;25537:9;25533:17;25524:6;25480:71;:::i;:::-;25561:72;25629:2;25618:9;25614:18;25605:6;25561:72;:::i;:::-;25680:9;25674:4;25670:20;25665:2;25654:9;25650:18;25643:48;25708:150;25853:4;25844:6;25708:150;:::i;:::-;25700:158;;25868:72;25936:2;25925:9;25921:18;25912:6;25868:72;:::i;:::-;25950:73;26018:3;26007:9;26003:19;25994:6;25950:73;:::i;:::-;25131:899;;;;;;;;:::o;26036:311::-;26113:4;26203:18;26195:6;26192:30;26189:56;;;26225:18;;:::i;:::-;26189:56;26275:4;26267:6;26263:17;26255:25;;26335:4;26329;26325:15;26317:23;;26036:311;;;:::o;26370:732::-;26477:5;26502:81;26518:64;26575:6;26518:64;:::i;:::-;26502:81;:::i;:::-;26493:90;;26603:5;26632:6;26625:5;26618:21;26666:4;26659:5;26655:16;26648:23;;26719:4;26711:6;26707:17;26699:6;26695:30;26748:3;26740:6;26737:15;26734:122;;;26767:79;;:::i;:::-;26734:122;26882:6;26865:231;26899:6;26894:3;26891:15;26865:231;;;26974:3;27003:48;27047:3;27035:10;27003:48;:::i;:::-;26998:3;26991:61;27081:4;27076:3;27072:14;27065:21;;26941:155;26925:4;26920:3;26916:14;26909:21;;26865:231;;;26869:21;26483:619;;26370:732;;;;;:::o;27125:385::-;27207:5;27256:3;27249:4;27241:6;27237:17;27233:27;27223:122;;27264:79;;:::i;:::-;27223:122;27374:6;27368:13;27399:105;27500:3;27492:6;27485:4;27477:6;27473:17;27399:105;:::i;:::-;27390:114;;27213:297;27125:385;;;;:::o;27516:554::-;27611:6;27660:2;27648:9;27639:7;27635:23;27631:32;27628:119;;;27666:79;;:::i;:::-;27628:119;27807:1;27796:9;27792:17;27786:24;27837:18;27829:6;27826:30;27823:117;;;27859:79;;:::i;:::-;27823:117;27964:89;28045:7;28036:6;28025:9;28021:22;27964:89;:::i;:::-;27954:99;;27757:306;27516:554;;;;:::o;28076:180::-;28124:77;28121:1;28114:88;28221:4;28218:1;28211:15;28245:4;28242:1;28235:15;28262:194;28302:4;28322:20;28340:1;28322:20;:::i;:::-;28317:25;;28356:20;28374:1;28356:20;:::i;:::-;28351:25;;28400:1;28397;28393:9;28385:17;;28424:1;28418:4;28415:11;28412:37;;;28429:18;;:::i;:::-;28412:37;28262:194;;;;:::o;28462:237::-;28602:34;28598:1;28590:6;28586:14;28579:58;28671:20;28666:2;28658:6;28654:15;28647:45;28462:237;:::o;28705:366::-;28847:3;28868:67;28932:2;28927:3;28868:67;:::i;:::-;28861:74;;28944:93;29033:3;28944:93;:::i;:::-;29062:2;29057:3;29053:12;29046:19;;28705:366;;;:::o;29077:419::-;29243:4;29281:2;29270:9;29266:18;29258:26;;29330:9;29324:4;29320:20;29316:1;29305:9;29301:17;29294:47;29358:131;29484:4;29358:131;:::i;:::-;29350:139;;29077:419;;;:::o;29502:332::-;29623:4;29661:2;29650:9;29646:18;29638:26;;29674:71;29742:1;29731:9;29727:17;29718:6;29674:71;:::i;:::-;29755:72;29823:2;29812:9;29808:18;29799:6;29755:72;:::i;:::-;29502:332;;;;;:::o;29840:233::-;29879:3;29902:24;29920:5;29902:24;:::i;:::-;29893:33;;29948:66;29941:5;29938:77;29935:103;;30018:18;;:::i;:::-;29935:103;30065:1;30058:5;30054:13;30047:20;;29840:233;;;:::o;30079:173::-;30219:25;30215:1;30207:6;30203:14;30196:49;30079:173;:::o;30258:366::-;30400:3;30421:67;30485:2;30480:3;30421:67;:::i;:::-;30414:74;;30497:93;30586:3;30497:93;:::i;:::-;30615:2;30610:3;30606:12;30599:19;;30258:366;;;:::o;30630:419::-;30796:4;30834:2;30823:9;30819:18;30811:26;;30883:9;30877:4;30873:20;30869:1;30858:9;30854:17;30847:47;30911:131;31037:4;30911:131;:::i;:::-;30903:139;;30630:419;;;:::o;31055:180::-;31103:77;31100:1;31093:88;31200:4;31197:1;31190:15;31224:4;31221:1;31214:15;31241:168;31381:20;31377:1;31369:6;31365:14;31358:44;31241:168;:::o;31415:366::-;31557:3;31578:67;31642:2;31637:3;31578:67;:::i;:::-;31571:74;;31654:93;31743:3;31654:93;:::i;:::-;31772:2;31767:3;31763:12;31756:19;;31415:366;;;:::o;31787:419::-;31953:4;31991:2;31980:9;31976:18;31968:26;;32040:9;32034:4;32030:20;32026:1;32015:9;32011:17;32004:47;32068:131;32194:4;32068:131;:::i;:::-;32060:139;;31787:419;;;:::o;32212:191::-;32252:3;32271:20;32289:1;32271:20;:::i;:::-;32266:25;;32305:20;32323:1;32305:20;:::i;:::-;32300:25;;32348:1;32345;32341:9;32334:16;;32369:3;32366:1;32363:10;32360:36;;;32376:18;;:::i;:::-;32360:36;32212:191;;;;:::o;32409:143::-;32466:5;32497:6;32491:13;32482:22;;32513:33;32540:5;32513:33;:::i;:::-;32409:143;;;;:::o;32558:351::-;32628:6;32677:2;32665:9;32656:7;32652:23;32648:32;32645:119;;;32683:79;;:::i;:::-;32645:119;32803:1;32828:64;32884:7;32875:6;32864:9;32860:22;32828:64;:::i;:::-;32818:74;;32774:128;32558:351;;;;:::o;32915:160::-;33055:12;33051:1;33043:6;33039:14;33032:36;32915:160;:::o;33081:366::-;33223:3;33244:67;33308:2;33303:3;33244:67;:::i;:::-;33237:74;;33320:93;33409:3;33320:93;:::i;:::-;33438:2;33433:3;33429:12;33422:19;;33081:366;;;:::o;33453:419::-;33619:4;33657:2;33646:9;33642:18;33634:26;;33706:9;33700:4;33696:20;33692:1;33681:9;33677:17;33670:47;33734:131;33860:4;33734:131;:::i;:::-;33726:139;;33453:419;;;:::o;33878:507::-;33957:6;33965;34014:2;34002:9;33993:7;33989:23;33985:32;33982:119;;;34020:79;;:::i;:::-;33982:119;34140:1;34165:64;34221:7;34212:6;34201:9;34197:22;34165:64;:::i;:::-;34155:74;;34111:128;34278:2;34304:64;34360:7;34351:6;34340:9;34336:22;34304:64;:::i;:::-;34294:74;;34249:129;33878:507;;;;;:::o;34391:164::-;34531:16;34527:1;34519:6;34515:14;34508:40;34391:164;:::o;34561:366::-;34703:3;34724:67;34788:2;34783:3;34724:67;:::i;:::-;34717:74;;34800:93;34889:3;34800:93;:::i;:::-;34918:2;34913:3;34909:12;34902:19;;34561:366;;;:::o;34933:419::-;35099:4;35137:2;35126:9;35122:18;35114:26;;35186:9;35180:4;35176:20;35172:1;35161:9;35157:17;35150:47;35214:131;35340:4;35214:131;:::i;:::-;35206:139;;34933:419;;;:::o;35358:763::-;35585:4;35623:3;35612:9;35608:19;35600:27;;35637:71;35705:1;35694:9;35690:17;35681:6;35637:71;:::i;:::-;35718:66;35780:2;35769:9;35765:18;35756:6;35718:66;:::i;:::-;35794:72;35862:2;35851:9;35847:18;35838:6;35794:72;:::i;:::-;35876;35944:2;35933:9;35929:18;35920:6;35876:72;:::i;:::-;35958:73;36026:3;36015:9;36011:19;36002:6;35958:73;:::i;:::-;36041;36109:3;36098:9;36094:19;36085:6;36041:73;:::i;:::-;35358:763;;;;;;;;;:::o;36127:173::-;36267:25;36263:1;36255:6;36251:14;36244:49;36127:173;:::o;36306:366::-;36448:3;36469:67;36533:2;36528:3;36469:67;:::i;:::-;36462:74;;36545:93;36634:3;36545:93;:::i;:::-;36663:2;36658:3;36654:12;36647:19;;36306:366;;;:::o;36678:419::-;36844:4;36882:2;36871:9;36867:18;36859:26;;36931:9;36925:4;36921:20;36917:1;36906:9;36902:17;36895:47;36959:131;37085:4;36959:131;:::i;:::-;36951:139;;36678:419;;;:::o
Swarm Source
ipfs://1bfc72f4e8dcb4dbb5fda75a78cdf4195f7ea637124016b1907dd3734be2a643
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.