Source Code
Latest 25 from a total of 160 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw Native | 23164504 | 195 days ago | IN | 0 ETH | 0.00007158 | ||||
| Withdraw Affilia... | 23139903 | 199 days ago | IN | 0 ETH | 0.00049623 | ||||
| Buy With Native | 23139027 | 199 days ago | IN | 0.9726 ETH | 0.0007457 | ||||
| Buy With Native | 23125652 | 201 days ago | IN | 0.05414 ETH | 0.00099598 | ||||
| Change Sale End ... | 23018071 | 216 days ago | IN | 0 ETH | 0.00009432 | ||||
| Register Affilia... | 22928403 | 228 days ago | IN | 0 ETH | 0.00046922 | ||||
| Register Affilia... | 22928394 | 228 days ago | IN | 0 ETH | 0.00046764 | ||||
| Withdraw Native | 22921253 | 229 days ago | IN | 0 ETH | 0.00008563 | ||||
| Withdraw Affilia... | 22918559 | 230 days ago | IN | 0 ETH | 0.00059097 | ||||
| Buy With Native | 22918526 | 230 days ago | IN | 4.435 ETH | 0.00206266 | ||||
| Buy With Native | 22917812 | 230 days ago | IN | 2.24 ETH | 0.00226035 | ||||
| Buy With Native | 22917287 | 230 days ago | IN | 2.2 ETH | 0.00149611 | ||||
| Buy With USDT | 22914575 | 230 days ago | IN | 0 ETH | 0.00070905 | ||||
| Withdraw Native | 22914479 | 230 days ago | IN | 0 ETH | 0.00009508 | ||||
| Withdraw Tokens | 22914470 | 230 days ago | IN | 0 ETH | 0.00015944 | ||||
| Buy With Native | 22907187 | 231 days ago | IN | 0.022 ETH | 0.0005345 | ||||
| Buy With Native | 22873170 | 236 days ago | IN | 0.005 ETH | 0.00066584 | ||||
| Buy With Native | 22853822 | 239 days ago | IN | 0.00001 ETH | 0.00024561 | ||||
| Buy With Native | 22792771 | 247 days ago | IN | 0.001 ETH | 0.00061723 | ||||
| Buy With USDT | 22788452 | 248 days ago | IN | 0 ETH | 0.00078752 | ||||
| Buy With USDT | 22788440 | 248 days ago | IN | 0 ETH | 0.00086196 | ||||
| Buy With USDT | 22788433 | 248 days ago | IN | 0 ETH | 0.00080374 | ||||
| Buy With USDT | 22788428 | 248 days ago | IN | 0 ETH | 0.0008047 | ||||
| Buy With USDT | 22788423 | 248 days ago | IN | 0 ETH | 0.00081666 | ||||
| Buy With Native | 22788340 | 248 days ago | IN | 0.00613 ETH | 0.00091004 |
Latest 9 internal transactions
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 23164504 | 195 days ago | 0.616044 ETH | ||||
| Transfer | 23139903 | 199 days ago | 0.410696 ETH | ||||
| Transfer | 22921253 | 229 days ago | 5.41375 ETH | ||||
| Transfer | 22918559 | 230 days ago | 3.46125 ETH | ||||
| Transfer | 22914479 | 230 days ago | 0.6400075 ETH | ||||
| Transfer | 22778562 | 249 days ago | 0.51883625 ETH | ||||
| Transfer | 22579382 | 277 days ago | 0.035325 ETH | ||||
| Transfer | 22430514 | 298 days ago | 1.72412877 ETH | ||||
| Transfer | 22079964 | 347 days ago | 0.000355 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Presale
Compiler Version
v0.8.28+commit.7893614a
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT
pragma solidity 0.8.28;
import {Ownable, Pausable, Aggregator, IERC20, SafeERC20, MathUtils} from "./Helper.sol";
/// NOTE : Instead of require use revert for less gas cost
/// NOTE : Use unchecked for adding or subtracting(check overflow when user give higher input value to overflow the value)
/// NOTE : Instead of withdrawing total amounts use desired amounts for user purpose(for that use max like ico_user)
contract Presale is Ownable, Pausable {
using SafeERC20 for IERC20;
IERC20 public immutable token;
IERC20 public immutable usdt;
uint256 public totalTokensSold;
uint256 public startTime;
uint256 public endTime;
uint256 public nativeRaised;
uint256 public usdtRaised;
uint256 public valueRaised; //represents total value of tokens sold by taking price of native currency at sale time
uint256 public price = 700000; //price in usdt 0.007$
uint256 public unWithdrawnAffProfitNative = 0;
uint256 public unWithdrawnAffProfitUSDT = 0;
Aggregator public immutable aggregatorInterface;
//referral system
struct Affiliate {
address user;
bool revoked; //revoked codes don't incur profit
uint8 profitPercent; // absolute numbers between 0 - 100
uint256 tokensSold;
uint256 usdtProfit;
uint256 nativeProfit;
uint256 usdtWithdrawn;
uint256 nativeWithdrawn;
string code;
}
struct AffiliateSale {
address user;
uint256 profit; // represent usdt amount or eth amount
bool isUsdtPurchase;
uint256 investment; // represent usdt amount or eth amount
uint256 tokensTransferred; // represent KMR token
uint256 purchaseTime;
}
/// NOTE : Instead of mapping(address => string) codeMap; use mapping(string => address) codeMap; for increase the better formormance and accessability
mapping(string => Affiliate) public affiliateMap;
mapping(address => string) public codeMap;
mapping(string => AffiliateSale[]) public affiliateSales;
string[] public codes;
/// NOTE : If the tokens are fixed the use contants or immutables instead of storage variables
constructor() {
token = IERC20(0x51539ED14Bd63A77bF319061A336f14b77AdC895);
usdt = IERC20(0xdAC17F958D2ee523a2206206994597C13D831ec7);
aggregatorInterface = Aggregator(
0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419
);
startTime = block.timestamp;
}
function changeSaleStartTime(uint256 _startTime) external onlyOwner {
require(block.timestamp <= _startTime, "Sale time in past");
startTime = _startTime;
}
function changeSaleEndTime(uint256 _endTime) external onlyOwner {
require(startTime <= _endTime, "Sale time in past than startTime");
endTime = _endTime;
}
/// NOTE : Not useful to returning the bool value (gas cost)
function pause() external onlyOwner {
_pause();
}
/// NOTE : Not useful to returning the bool value (gas cost)
function unpause() external onlyOwner {
_unpause();
}
function updatePrice(uint256 newPrice) external onlyOwner {
price = newPrice;
}
modifier onlyAlphanumeric(string memory input) {
bytes memory strBytes = bytes(input);
for (uint256 i = 0; i < strBytes.length; i++) {
bytes1 char = strBytes[i];
if (
!(// Check if it's a valid character (0-9, A-Z, a-z)
(char >= 0x30 && char <= 0x39) || // '0' - '9'
(char >= 0x41 && char <= 0x5A) || // 'A' - 'Z'
(char >= 0x61 && char <= 0x7A)) // 'a' - 'z'
) {
revert("Invalid character: Only A-Z, a-z, 0-9 allowed");
}
}
_;
}
/// NOTE : Fixed size variables should be first and dynamic size should be at last
/// NOTE : Use profit percentage to 2 deciamls for more precision values
function registerAffiliate(
string calldata code,
address user,
uint8 profitPercent
) external onlyOwner onlyAlphanumeric(code) {
require(user != address(0), "Can't regiser for 0 address");
require(
profitPercent >= 0 && profitPercent <= 100,
"Invalid Profit Percent"
);
/// NOTE : No need to check for both times
require(affiliateMap[code].user == address(0), "Code already in use");
require(
keccak256(abi.encodePacked(codeMap[user])) ==
keccak256(abi.encodePacked("")),
"User already registered"
);
Affiliate memory affiliate = Affiliate({
user: user,
revoked: false,
profitPercent: profitPercent, /// NOTE : U8 is more gas be like
tokensSold: 0,
usdtProfit: 0,
nativeProfit: 0,
usdtWithdrawn: 0,
nativeWithdrawn: 0,
code: code /// NOTE : Use fixed length of bytes16 like that and generate fixed size code
});
affiliateMap[code] = affiliate;
codeMap[user] = code;
codes.push(code);
}
function updateAffiliateProfit(
string calldata code,
uint8 profitPercent
) external onlyOwner {
require(affiliateMap[code].user != address(0), "Invalid Code");
require(
affiliateMap[code].revoked == false,
"Can't update revoked user"
);
require(
profitPercent >= 0 && profitPercent <= 100, /// NOTE : use static variables
"Invalid Profit Percent"
);
affiliateMap[code].profitPercent = profitPercent;
}
function updateRevokeStatus(
string calldata code,
bool revoked
) external onlyOwner {
require(affiliateMap[code].user != address(0), "Invalid Code");
affiliateMap[code].revoked = revoked;
}
/// NOTE : if all the amount is taken, then what about the distributers amounts
function withdrawNative() public onlyOwner {
uint256 available = address(this).balance - unWithdrawnAffProfitNative;
require(available > 0, "Amount not available for admin withdrawl");
payable(owner()).transfer(available);
}
function withdrawTokens(address _token, uint256 amount) external onlyOwner {
uint256 available = IERC20(_token).balanceOf(address(this));
if (_token == address(usdt)) {
available -= unWithdrawnAffProfitUSDT;
}
require(
available >= amount,
"Insufficient tokens" /// NOTE : use a tracking variable, because distributers amount is also contains
);
IERC20(_token).safeTransfer(_msgSender(), amount);
}
modifier checkSaleState(uint256 amount) {
require(startTime <= block.timestamp, "ICO hasn't started yet");
require(block.timestamp < endTime, "ICO has ended");
require(amount > 0, "Invalid amount");
_;
}
function withdrawAffiliateProfitUsdt() external {
address user = msg.sender;
require(
keccak256(abi.encodePacked(codeMap[user])) !=
keccak256(abi.encodePacked("")),
"User is not an affiliate"
);
Affiliate storage affiliate = affiliateMap[codeMap[user]];
uint256 availableForWithdrawl = affiliate.usdtProfit -
affiliate.usdtWithdrawn;
affiliate.usdtWithdrawn += availableForWithdrawl;
unWithdrawnAffProfitUSDT -= availableForWithdrawl;
usdt.safeTransfer(_msgSender(), availableForWithdrawl);
}
function withdrawAffiliateProfitNative() external {
address user = msg.sender; /// NOTE : Comparing addresses are cheaper than strings
require(
keccak256(abi.encodePacked(codeMap[user])) !=
keccak256(abi.encodePacked("")),
"User is not an affiliate"
);
Affiliate storage affiliate = affiliateMap[codeMap[user]];
uint256 availableForWithdrawl = affiliate.nativeProfit -
affiliate.nativeWithdrawn;
affiliate.nativeWithdrawn += availableForWithdrawl;
unWithdrawnAffProfitNative -= availableForWithdrawl;
payable(msg.sender).transfer(availableForWithdrawl);
}
function buyWithUSDT(
uint256 amount,
string calldata code
) external checkSaleState(amount) whenNotPaused {
// NOTE : USDT is eth is 6 decimals
// token is 2 decimals divide by 4 to make it standard for calculation
uint256 tokensReceivable = calculateToken(amount) / 1e4; //2 decimals
usdt.safeTransferFrom(_msgSender(), address(this), amount);
token.safeTransfer(_msgSender(), tokensReceivable);
totalTokensSold += tokensReceivable;
usdtRaised += amount;
valueRaised += amount; // 6 decimals
//check for referral code validity
if (affiliateMap[code].user != address(0)) {
//check if affiliate user is revoked
if (affiliateMap[code].revoked) return;
Affiliate storage affiliate = affiliateMap[code];
uint256 commission = (amount * affiliate.profitPercent) / 100;
affiliate.usdtProfit += commission;
affiliate.tokensSold += tokensReceivable;
AffiliateSale memory sale = AffiliateSale({
user: msg.sender,
profit: commission,
isUsdtPurchase: true,
investment: amount,
tokensTransferred: tokensReceivable,
purchaseTime: block.timestamp
});
affiliateSales[code].push(sale);
unWithdrawnAffProfitUSDT += commission;
}
}
function buyWithNative(
string calldata code
) external payable checkSaleState(msg.value) whenNotPaused {
//eth in wei is 18 decimals, token is 2 decimals divide by 16 to make it standard for calculation
uint256 nativeToUsdt = (getLatestPrice() * msg.value) / (1e8); // 18 decimals
uint256 tokensReceivable = calculateToken(nativeToUsdt) / (1e16); // 2 decimals
token.safeTransfer(_msgSender(), tokensReceivable);
totalTokensSold += tokensReceivable;
nativeRaised += msg.value;
valueRaised += nativeToUsdt / 1e12; // 6 decimals
//check for referral code validity
if (affiliateMap[code].user != address(0)) {
//check if affiliate user is revoked
if (affiliateMap[code].revoked) return;
Affiliate storage affiliate = affiliateMap[code];
uint256 commission = (msg.value * affiliate.profitPercent) / 100;
affiliate.nativeProfit += commission;
affiliate.tokensSold += tokensReceivable;
AffiliateSale memory sale = AffiliateSale({
user: msg.sender,
profit: commission,
isUsdtPurchase: false,
investment: msg.value, /// NOTE : msg.value is used no.of time
tokensTransferred: tokensReceivable,
purchaseTime: block.timestamp
});
affiliateSales[code].push(sale);
unWithdrawnAffProfitNative += commission;
}
}
function calculateToken(uint256 _usdtAmount) public view returns (uint256) {
return (_usdtAmount * 1e8) / price;
}
function nativeBuyHelper(
/// NOTE : Nothing use of function, no where it is used
uint256 amount
) external view returns (uint256 numOfTokens) {
uint256 nativeToUsdt = (getLatestPrice() * amount) / 1e8;
numOfTokens = calculateToken(nativeToUsdt);
}
function totalTokenInPresale() public view returns (uint256) {
uint256 unsoldTokens = IERC20(token).balanceOf(address(this));
uint256 totaltokenInPresale = totalTokensSold + unsoldTokens;
return totaltokenInPresale;
}
function getLatestPrice() public view returns (uint256) {
(, int256 _price, , , ) = aggregatorInterface.latestRoundData();
return uint256(_price);
}
///NOTE : For these two use same function
function getTokenBalance() public view returns (uint256 tokenBalance) {
tokenBalance = token.balanceOf(address(this));
} /// NOTE : No need to keep here, if required we can get the data from erc20 abi contract
function getUsdtBalance() public view returns (uint256 usdtBalance) {
usdtBalance = usdt.balanceOf(address(this));
} /// NOTE : Same like above
function getNativeBalance() public view returns (uint256 NATIVE) {
NATIVE = address(this).balance;
} /// NOTE : Same like above
function getTotalAffiliates() public view returns (uint256) {
return codes.length;
} /// NOTE : If we not used in frontend then just remove it
function getTotalSalesAffiliate(
string calldata code
) public view returns (uint256) {
return affiliateSales[code].length;
} /// NOTE : Same like above
function getAffiliates(
uint256 length,
uint256 offset
) public view returns (Affiliate[] memory) {
uint256 offsetCount = offset * length; /// Bug: Getting wrong offset value
if (codes.length <= offsetCount) return new Affiliate[](0);
uint256 count = MathUtils.min(codes.length - offsetCount, length);
Affiliate[] memory affiliates = new Affiliate[](count);
for (uint256 i = 0; i < count; i++) {
/// NOTE : Instead of i=0 use i = offset*length
affiliates[i] = affiliateMap[codes[i + offsetCount]];
}
return affiliates;
}
function getAffiliateSales(
string calldata code,
uint256 length,
uint256 pageOffset
) public view returns (AffiliateSale[] memory) {
uint256 offsetCount = pageOffset * length;
if (affiliateSales[code].length <= offsetCount)
return new AffiliateSale[](0);
uint256 count = MathUtils.min(
affiliateSales[code].length - offsetCount,
length
);
AffiliateSale[] memory sales = new AffiliateSale[](count);
for (uint256 i = 0; i < count; i++) {
sales[i] = affiliateSales[code][i + offsetCount];
}
return sales;
}
receive() external payable {
/// NOTE : Inside here if any user send , add to tracking variable
}
}
// SPDX-License-Identifier: MIT
pragma solidity 0.8.28;
interface IERC20 {
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, uint256 value) external returns (bool);
function allowance(
address owner,
address spender
) external view returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transferFrom(
address from,
address to,
uint256 value
) external returns (bool);
}
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
constructor() {
_setOwner(msg.sender);
}
function owner() public view virtual returns (address) {
return _owner;
}
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
function renounceOwnership() public virtual onlyOwner {
_setOwner(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(
newOwner != address(0),
"Ownable: new owner is the zero address"
);
_setOwner(newOwner);
}
function _setOwner(address newOwner) internal {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
interface Aggregator {
function latestRoundData()
external
view
returns (
uint80 roundId,
int256 answer,
uint256 startedAt,
uint256 updatedAt,
uint80 answeredInRound
);
}
library Address {
error AddressInsufficientBalance(address account);
error AddressEmptyCode(address target);
error FailedInnerCall();
function sendValue(address payable recipient, uint256 amount) internal {
if (address(this).balance < amount) {
revert AddressInsufficientBalance(address(this));
}
(bool success, ) = recipient.call{value: amount}("");
if (!success) {
revert FailedInnerCall();
}
}
function functionCall(
address target,
bytes memory data
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0);
}
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
if (address(this).balance < value) {
revert AddressInsufficientBalance(address(this));
}
(bool success, bytes memory returndata) = target.call{value: value}(
data
);
return verifyCallResultFromTarget(target, success, returndata);
}
function functionStaticCall(
address target,
bytes memory data
) internal view returns (bytes memory) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, success, returndata);
}
function functionDelegateCall(
address target,
bytes memory data
) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata);
}
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata
) internal view returns (bytes memory) {
if (!success) {
_revert(returndata);
} else {
if (returndata.length == 0 && target.code.length == 0) {
revert AddressEmptyCode(target);
}
return returndata;
}
}
function verifyCallResult(
bool success,
bytes memory returndata
) internal pure returns (bytes memory) {
if (!success) {
_revert(returndata);
} else {
return returndata;
}
}
function _revert(bytes memory returndata) private pure {
if (returndata.length > 0) {
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert FailedInnerCall();
}
}
}
interface IERC165 {
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
interface IERC1363 is IERC20, IERC165 {
function transferAndCall(address to, uint256 value) external returns (bool);
function transferAndCall(
address to,
uint256 value,
bytes calldata data
) external returns (bool);
function transferFromAndCall(
address from,
address to,
uint256 value
) external returns (bool);
function transferFromAndCall(
address from,
address to,
uint256 value,
bytes calldata data
) external returns (bool);
function approveAndCall(
address spender,
uint256 value
) external returns (bool);
function approveAndCall(
address spender,
uint256 value,
bytes calldata data
) external returns (bool);
}
library MathUtils {
function min(uint256 a, uint256 b) internal pure returns (uint256) {
return a < b ? a : b;
}
function min(int256 a, int256 b) internal pure returns (int256) {
return a < b ? a : b;
}
}
library SafeERC20 {
using Address for address;
error SafeERC20FailedOperation(address token);
error SafeERC20FailedDecreaseAllowance(
address spender,
uint256 currentAllowance,
uint256 requestedDecrease
);
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));
}
function safeTransferFrom(
IERC20 token,
address from,
address to,
uint256 value
) internal {
_callOptionalReturn(
token,
abi.encodeCall(token.transferFrom, (from, to, value))
);
}
function safeIncreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
uint256 oldAllowance = token.allowance(address(this), spender);
forceApprove(token, spender, oldAllowance + value);
}
function safeDecreaseAllowance(
IERC20 token,
address spender,
uint256 requestedDecrease
) internal {
unchecked {
uint256 currentAllowance = token.allowance(address(this), spender);
if (currentAllowance < requestedDecrease) {
revert SafeERC20FailedDecreaseAllowance(
spender,
currentAllowance,
requestedDecrease
);
}
forceApprove(token, spender, currentAllowance - requestedDecrease);
}
}
function forceApprove(
IERC20 token,
address spender,
uint256 value
) internal {
bytes memory approvalCall = abi.encodeCall(
token.approve,
(spender, value)
);
if (!_callOptionalReturnBool(token, approvalCall)) {
_callOptionalReturn(
token,
abi.encodeCall(token.approve, (spender, 0))
);
_callOptionalReturn(token, approvalCall);
}
}
function transferAndCallRelaxed(
IERC1363 token,
address to,
uint256 value,
bytes memory data
) internal {
if (to.code.length == 0) {
safeTransfer(token, to, value);
} else if (!token.transferAndCall(to, value, data)) {
revert SafeERC20FailedOperation(address(token));
}
}
function transferFromAndCallRelaxed(
IERC1363 token,
address from,
address to,
uint256 value,
bytes memory data
) internal {
if (to.code.length == 0) {
safeTransferFrom(token, from, to, value);
} else if (!token.transferFromAndCall(from, to, value, data)) {
revert SafeERC20FailedOperation(address(token));
}
}
function approveAndCallRelaxed(
IERC1363 token,
address to,
uint256 value,
bytes memory data
) internal {
if (to.code.length == 0) {
forceApprove(token, to, value);
} else if (!token.approveAndCall(to, value, data)) {
revert SafeERC20FailedOperation(address(token));
}
}
function _callOptionalReturn(IERC20 token, bytes memory data) private {
bytes memory returndata = address(token).functionCall(data);
if (returndata.length != 0 && !abi.decode(returndata, (bool))) {
revert SafeERC20FailedOperation(address(token));
}
}
function _callOptionalReturnBool(
IERC20 token,
bytes memory data
) private returns (bool) {
(bool success, bytes memory returndata) = address(token).call(data);
return
success &&
(returndata.length == 0 || abi.decode(returndata, (bool))) &&
address(token).code.length > 0;
}
}
abstract contract Pausable is Context {
event Paused(address account);
event Unpaused(address account);
bool private _paused;
constructor() {
_paused = false;
}
modifier whenNotPaused() {
_requireNotPaused();
_;
}
modifier whenPaused() {
_requirePaused();
_;
}
function paused() public view virtual returns (bool) {
return _paused;
}
function _requireNotPaused() internal view virtual {
require(!paused(), "Pausable: paused");
}
function _requirePaused() internal view virtual {
require(paused(), "Pausable: not paused");
}
function _pause() internal virtual whenNotPaused {
_paused = true;
emit Paused(_msgSender());
}
function _unpause() internal virtual whenPaused {
_paused = false;
emit Unpaused(_msgSender());
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"affiliateMap","outputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"revoked","type":"bool"},{"internalType":"uint8","name":"profitPercent","type":"uint8"},{"internalType":"uint256","name":"tokensSold","type":"uint256"},{"internalType":"uint256","name":"usdtProfit","type":"uint256"},{"internalType":"uint256","name":"nativeProfit","type":"uint256"},{"internalType":"uint256","name":"usdtWithdrawn","type":"uint256"},{"internalType":"uint256","name":"nativeWithdrawn","type":"uint256"},{"internalType":"string","name":"code","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"affiliateSales","outputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"profit","type":"uint256"},{"internalType":"bool","name":"isUsdtPurchase","type":"bool"},{"internalType":"uint256","name":"investment","type":"uint256"},{"internalType":"uint256","name":"tokensTransferred","type":"uint256"},{"internalType":"uint256","name":"purchaseTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"aggregatorInterface","outputs":[{"internalType":"contract Aggregator","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"code","type":"string"}],"name":"buyWithNative","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"code","type":"string"}],"name":"buyWithUSDT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_usdtAmount","type":"uint256"}],"name":"calculateToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_endTime","type":"uint256"}],"name":"changeSaleEndTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startTime","type":"uint256"}],"name":"changeSaleStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"codeMap","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"codes","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"code","type":"string"},{"internalType":"uint256","name":"length","type":"uint256"},{"internalType":"uint256","name":"pageOffset","type":"uint256"}],"name":"getAffiliateSales","outputs":[{"components":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"profit","type":"uint256"},{"internalType":"bool","name":"isUsdtPurchase","type":"bool"},{"internalType":"uint256","name":"investment","type":"uint256"},{"internalType":"uint256","name":"tokensTransferred","type":"uint256"},{"internalType":"uint256","name":"purchaseTime","type":"uint256"}],"internalType":"struct Presale.AffiliateSale[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"},{"internalType":"uint256","name":"offset","type":"uint256"}],"name":"getAffiliates","outputs":[{"components":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"revoked","type":"bool"},{"internalType":"uint8","name":"profitPercent","type":"uint8"},{"internalType":"uint256","name":"tokensSold","type":"uint256"},{"internalType":"uint256","name":"usdtProfit","type":"uint256"},{"internalType":"uint256","name":"nativeProfit","type":"uint256"},{"internalType":"uint256","name":"usdtWithdrawn","type":"uint256"},{"internalType":"uint256","name":"nativeWithdrawn","type":"uint256"},{"internalType":"string","name":"code","type":"string"}],"internalType":"struct Presale.Affiliate[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNativeBalance","outputs":[{"internalType":"uint256","name":"NATIVE","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenBalance","outputs":[{"internalType":"uint256","name":"tokenBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalAffiliates","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"code","type":"string"}],"name":"getTotalSalesAffiliate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUsdtBalance","outputs":[{"internalType":"uint256","name":"usdtBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"nativeBuyHelper","outputs":[{"internalType":"uint256","name":"numOfTokens","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nativeRaised","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"code","type":"string"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint8","name":"profitPercent","type":"uint8"}],"name":"registerAffiliate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokenInPresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensSold","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":"unWithdrawnAffProfitNative","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unWithdrawnAffProfitUSDT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"code","type":"string"},{"internalType":"uint8","name":"profitPercent","type":"uint8"}],"name":"updateAffiliateProfit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"updatePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"code","type":"string"},{"internalType":"bool","name":"revoked","type":"bool"}],"name":"updateRevokeStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdt","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdtRaised","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"valueRaised","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAffiliateProfitNative","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAffiliateProfitUsdt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawNative","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60e0604052620aae606007555f6008555f60095534801561001e575f5ffd5b5061002e3361012b60201b60201c565b5f5f60146101000a81548160ff0219169083151502179055507351539ed14bd63a77bf319061a336f14b77adc89573ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505073dac17f958d2ee523a2206206994597c13d831ec773ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050735f4ec3df9cbd43714fe2740f5e3616155c5b841973ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1681525050426002819055506101ec565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60805160a05160c0516157286102555f395f81816126cb015261319b01525f81816109fc01528181610b90015281816110500152818161109b01526128f401525f81816120bc015281816123090152818161294701528181612c5201526133fc01526157285ff3fe608060405260043610610275575f3560e01c8063715018a61161014e578063995a4001116100c0578063c49cc64511610079578063c49cc645146108db578063db7757cf14610905578063e86613a71461092f578063f2fde38b1461096b578063f33b2dca14610993578063fc0c546a146109cf5761027c565b8063995a4001146107e3578063a035b1fe1461080b578063ad33b9e314610835578063b6433b1f1461085f578063b940631314610875578063bca4c6691461089f5761027c565b806388a9d5541161011257806388a9d554146106e0578063898b1ff81461070a5780638d6cc56d146107265780638da5cb5b1461074e5780638e15f4731461077857806394021c5d146107a25761027c565b8063715018a61461063857806378e979251461064e57806380425e9d1461067857806382b2e257146106a05780638456cb59146106ca5761027c565b806340e8714f116101e757806350431ce4116101ab57806350431ce4146105525780635c975abb1461056857806363b201171461059257806366ec1ebc146105bc5780636808da50146105e65780636a63f955146106105761027c565b806340e8714f14610432578063433bd7601461046e5780634678a122146104aa57806347f063ed146104ee5780634f5496891461052a5761027c565b80631b3d36de116102395780631b3d36de1461034e57806322ae058d1461038a578063292dd893146103b25780632f48ab7d146103c85780633197cbb6146103f25780633f4ba83a1461041c5761027c565b806306292f2b1461028057806306b091f9146102aa5780630e90c00a146102d25780630eb1025a146102fa5780630ec1ecac146103245761027c565b3661027c57005b5f5ffd5b34801561028b575f5ffd5b506102946109f9565b6040516102a19190613a58565b60405180910390f35b3480156102b5575f5ffd5b506102d060048036038101906102cb9190613b06565b610a97565b005b3480156102dd575f5ffd5b506102f860048036038101906102f39190613b44565b610c6c565b005b348015610305575f5ffd5b5061030e610d35565b60405161031b9190613a58565b60405180910390f35b34801561032f575f5ffd5b50610338610d3b565b6040516103459190613a58565b60405180910390f35b348015610359575f5ffd5b50610374600480360381019061036f9190613b44565b610d41565b6040516103819190613a58565b60405180910390f35b348015610395575f5ffd5b506103b060048036038101906103ab9190613c05565b610d66565b005b3480156103bd575f5ffd5b506103c6610ed0565b005b3480156103d3575f5ffd5b506103dc611099565b6040516103e99190613cbd565b60405180910390f35b3480156103fd575f5ffd5b506104066110bd565b6040516104139190613a58565b60405180910390f35b348015610427575f5ffd5b506104306110c3565b005b34801561043d575f5ffd5b5061045860048036038101906104539190613cd6565b611149565b6040516104659190613e95565b60405180910390f35b348015610479575f5ffd5b50610494600480360381019061048f9190613eb5565b6113a4565b6040516104a19190613a58565b60405180910390f35b3480156104b5575f5ffd5b506104d060048036038101906104cb9190614038565b6113d1565b6040516104e599989796959493929190614118565b60405180910390f35b3480156104f9575f5ffd5b50610514600480360381019061050f9190613b44565b6114f0565b6040516105219190613a58565b60405180910390f35b348015610535575f5ffd5b50610550600480360381019061054b91906141d4565b611527565b005b34801561055d575f5ffd5b5061056661175d565b005b348015610573575f5ffd5b5061057c61187a565b6040516105899190614231565b60405180910390f35b34801561059d575f5ffd5b506105a661188f565b6040516105b39190613a58565b60405180910390f35b3480156105c7575f5ffd5b506105d0611895565b6040516105dd9190613a58565b60405180910390f35b3480156105f1575f5ffd5b506105fa61189b565b6040516106079190613a58565b60405180910390f35b34801561061b575f5ffd5b506106366004803603810190610631919061424a565b6118a1565b005b348015610643575f5ffd5b5061064c611f61565b005b348015610659575f5ffd5b50610662611fe8565b60405161066f9190613a58565b60405180910390f35b348015610683575f5ffd5b5061069e60048036038101906106999190613b44565b611fee565b005b3480156106ab575f5ffd5b506106b46120b9565b6040516106c19190613a58565b60405180910390f35b3480156106d5575f5ffd5b506106de612157565b005b3480156106eb575f5ffd5b506106f46121dd565b6040516107019190613a58565b60405180910390f35b610724600480360381019061071f9190613eb5565b6121e4565b005b348015610731575f5ffd5b5061074c60048036038101906107479190613b44565b61261a565b005b348015610759575f5ffd5b506107626126a0565b60405161076f91906142bb565b60405180910390f35b348015610783575f5ffd5b5061078c6126c7565b6040516107999190613a58565b60405180910390f35b3480156107ad575f5ffd5b506107c860048036038101906107c391906142d4565b612763565b6040516107da9695949392919061432e565b60405180910390f35b3480156107ee575f5ffd5b506108096004803603810190610804919061438d565b6127f8565b005b348015610816575f5ffd5b5061081f612c48565b60405161082c9190613a58565b60405180910390f35b348015610840575f5ffd5b50610849612c4e565b6040516108569190613a58565b60405180910390f35b34801561086a575f5ffd5b50610873612d03565b005b348015610880575f5ffd5b50610889612ebe565b6040516108969190613a58565b60405180910390f35b3480156108aa575f5ffd5b506108c560048036038101906108c091906143ea565b612eca565b6040516108d291906145fc565b60405180910390f35b3480156108e6575f5ffd5b506108ef613199565b6040516108fc919061463c565b60405180910390f35b348015610910575f5ffd5b506109196131bd565b6040516109269190613a58565b60405180910390f35b34801561093a575f5ffd5b5061095560048036038101906109509190613b44565b6131c3565b6040516109629190614655565b60405180910390f35b348015610976575f5ffd5b50610991600480360381019061098c9190614675565b613269565b005b34801561099e575f5ffd5b506109b960048036038101906109b49190614675565b61335f565b6040516109c69190614655565b60405180910390f35b3480156109da575f5ffd5b506109e36133fa565b6040516109f09190613cbd565b60405180910390f35b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a5391906142bb565b602060405180830381865afa158015610a6e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a9291906146b4565b905090565b610a9f61341e565b73ffffffffffffffffffffffffffffffffffffffff16610abd6126a0565b73ffffffffffffffffffffffffffffffffffffffff1614610b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0a90614729565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610b4d91906142bb565b602060405180830381865afa158015610b68573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b8c91906146b4565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610bf25760095481610bef9190614774565b90505b81811015610c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2c906147f1565b60405180910390fd5b610c67610c4061341e565b838573ffffffffffffffffffffffffffffffffffffffff166134259092919063ffffffff16565b505050565b610c7461341e565b73ffffffffffffffffffffffffffffffffffffffff16610c926126a0565b73ffffffffffffffffffffffffffffffffffffffff1614610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf90614729565b60405180910390fd5b80421115610d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2290614859565b60405180910390fd5b8060028190555050565b60085481565b60055481565b5f6007546305f5e10083610d559190614877565b610d5f91906148e5565b9050919050565b610d6e61341e565b73ffffffffffffffffffffffffffffffffffffffff16610d8c6126a0565b73ffffffffffffffffffffffffffffffffffffffff1614610de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd990614729565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600a8484604051610e0b929190614943565b90815260200160405180910390205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e88906149a5565b60405180910390fd5b80600a8484604051610ea4929190614943565b90815260200160405180910390205f0160146101000a81548160ff021916908315150217905550505050565b5f339050604051602001610ee3906149e6565b60405160208183030381529060405280519060200120600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20604051602001610f469190614ae9565b6040516020818303038152906040528051906020012003610f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9390614b49565b60405180910390fd5b5f600a600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20604051610fe99190614ae9565b908152602001604051809103902090505f8160040154826002015461100e9190614774565b905080826004015f8282546110239190614b67565b925050819055508060095f82825461103b9190614774565b9250508190555061109461104d61341e565b827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166134259092919063ffffffff16565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60035481565b6110cb61341e565b73ffffffffffffffffffffffffffffffffffffffff166110e96126a0565b73ffffffffffffffffffffffffffffffffffffffff161461113f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113690614729565b60405180910390fd5b6111476134a4565b565b60605f83836111589190614877565b905080600c878760405161116d929190614943565b908152602001604051809103902080549050116111e0575f67ffffffffffffffff81111561119e5761119d613f14565b5b6040519080825280602002602001820160405280156111d757816020015b6111c4613999565b8152602001906001900390816111bc5790505b5091505061139c565b5f61121982600c89896040516111f7929190614943565b9081526020016040518091039020805490506112139190614774565b86613505565b90505f8167ffffffffffffffff81111561123657611235613f14565b5b60405190808252806020026020018201604052801561126f57816020015b61125c613999565b8152602001906001900390816112545790505b5090505f5f90505b8281101561139457600c8989604051611291929190614943565b908152602001604051809103902084826112ab9190614b67565b815481106112bc576112bb614b9a565b5b905f5260205f2090600602016040518060c00160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282015f9054906101000a900460ff16151515158152602001600382015481526020016004820154815260200160058201548152505082828151811061137c5761137b614b9a565b5b60200260200101819052508080600101915050611277565b508093505050505b949350505050565b5f600c83836040516113b7929190614943565b908152602001604051809103902080549050905092915050565b600a818051602081018201805184825260208301602085012081835280955050505050505f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690805f0160149054906101000a900460ff1690805f0160159054906101000a900460ff169080600101549080600201549080600301549080600401549080600501549080600601805461146f90614a27565b80601f016020809104026020016040519081016040528092919081815260200182805461149b90614a27565b80156114e65780601f106114bd576101008083540402835291602001916114e6565b820191905f5260205f20905b8154815290600101906020018083116114c957829003601f168201915b5050505050905089565b5f5f6305f5e100836115006126c7565b61150a9190614877565b61151491906148e5565b905061151f81610d41565b915050919050565b61152f61341e565b73ffffffffffffffffffffffffffffffffffffffff1661154d6126a0565b73ffffffffffffffffffffffffffffffffffffffff16146115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a90614729565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600a84846040516115cc929190614943565b90815260200160405180910390205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611652576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611649906149a5565b60405180910390fd5b5f1515600a8484604051611667929190614943565b90815260200160405180910390205f0160149054906101000a900460ff161515146116c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116be90614c11565b60405180910390fd5b5f8160ff16101580156116de575060648160ff1611155b61171d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171490614c79565b60405180910390fd5b80600a8484604051611730929190614943565b90815260200160405180910390205f0160156101000a81548160ff021916908360ff160217905550505050565b61176561341e565b73ffffffffffffffffffffffffffffffffffffffff166117836126a0565b73ffffffffffffffffffffffffffffffffffffffff16146117d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d090614729565b60405180910390fd5b5f600854476117e89190614774565b90505f811161182c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182390614d07565b60405180910390fd5b6118346126a0565b73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611876573d5f5f3e3d5ffd5b5050565b5f5f60149054906101000a900460ff16905090565b60015481565b60045481565b60095481565b6118a961341e565b73ffffffffffffffffffffffffffffffffffffffff166118c76126a0565b73ffffffffffffffffffffffffffffffffffffffff161461191d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191490614729565b60405180910390fd5b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050505f8190505f5f90505b8151811015611b03575f82828151811061198757611986614b9a565b5b602001015160f81c60f81b9050603060f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916101580156119f05750603960f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191611155b80611a535750604160f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191610158015611a525750605a60f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191611155b5b80611ab65750606160f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191610158015611ab55750607a60f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191611155b5b611af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aec90614d95565b60405180910390fd5b50808060010191505061196a565b505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6990614dfd565b60405180910390fd5b5f8360ff1610158015611b89575060648360ff1611155b611bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbf90614c79565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600a8787604051611bf1929190614943565b90815260200160405180910390205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6e90614e65565b60405180910390fd5b604051602001611c86906149e6565b60405160208183030381529060405280519060200120600b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20604051602001611ce99190614ae9565b6040516020818303038152906040528051906020012014611d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3690614ecd565b60405180910390fd5b5f6040518061012001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020015f151581526020018560ff1681526020015f81526020015f81526020015f81526020015f81526020015f815260200188888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050815250905080600a8888604051611df3929190614943565b90815260200160405180910390205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151815f0160146101000a81548160ff0219169083151502179055506040820151815f0160156101000a81548160ff021916908360ff160217905550606082015181600101556080820151816002015560a0820151816003015560c0820151816004015560e08201518160050155610100820151816006019081611ecc9190615070565b509050508686600b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f209182611f1c929190615149565b50600d878790918060018154018082558091505060019003905f5260205f20015f909192909192909192909192509182611f57929190615149565b5050505050505050565b611f6961341e565b73ffffffffffffffffffffffffffffffffffffffff16611f876126a0565b73ffffffffffffffffffffffffffffffffffffffff1614611fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd490614729565b60405180910390fd5b611fe65f61351d565b565b60025481565b611ff661341e565b73ffffffffffffffffffffffffffffffffffffffff166120146126a0565b73ffffffffffffffffffffffffffffffffffffffff161461206a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206190614729565b60405180910390fd5b8060025411156120af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a690615260565b60405180910390fd5b8060038190555050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161211391906142bb565b602060405180830381865afa15801561212e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061215291906146b4565b905090565b61215f61341e565b73ffffffffffffffffffffffffffffffffffffffff1661217d6126a0565b73ffffffffffffffffffffffffffffffffffffffff16146121d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ca90614729565b60405180910390fd5b6121db6135de565b565b5f47905090565b3442600254111561222a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612221906152c8565b60405180910390fd5b600354421061226e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226590615330565b60405180910390fd5b5f81116122b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a790615398565b60405180910390fd5b6122b8613640565b5f6305f5e100346122c76126c7565b6122d19190614877565b6122db91906148e5565b90505f662386f26fc100006122ef83610d41565b6122f991906148e5565b905061234d61230661341e565b827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166134259092919063ffffffff16565b8060015f82825461235e9190614b67565b925050819055503460045f8282546123769190614b67565b9250508190555064e8d4a510008261238e91906148e5565b60065f82825461239e9190614b67565b925050819055505f73ffffffffffffffffffffffffffffffffffffffff16600a86866040516123ce929190614943565b90815260200160405180910390205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461261257600a858560405161242b929190614943565b90815260200160405180910390205f0160149054906101000a900460ff1615612455575050612615565b5f600a8686604051612468929190614943565b908152602001604051809103902090505f6064825f0160159054906101000a900460ff1660ff163461249a9190614877565b6124a491906148e5565b905080826003015f8282546124b99190614b67565b9250508190555082826001015f8282546124d39190614b67565b925050819055505f6040518060c001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018381526020015f15158152602001348152602001858152602001428152509050600c8888604051612534929190614943565b908152602001604051809103902081908060018154018082558091505060019003905f5260205f2090600602015f909190919091505f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015f6101000a81548160ff021916908315150217905550606082015181600301556080820151816004015560a0820151816005015550508160085f8282546126079190614b67565b925050819055505050505b50505b505050565b61262261341e565b73ffffffffffffffffffffffffffffffffffffffff166126406126a0565b73ffffffffffffffffffffffffffffffffffffffff1614612696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268d90614729565b60405180910390fd5b8060078190555050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015612732573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127569190615428565b5050509150508091505090565b600c828051602081018201805184825260208301602085012081835280955050505050508181548110612794575f80fd5b905f5260205f2090600602015f9150915050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015490806002015f9054906101000a900460ff16908060030154908060040154908060050154905086565b8242600254111561283e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612835906152c8565b60405180910390fd5b6003544210612882576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287990615330565b60405180910390fd5b5f81116128c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bb90615398565b60405180910390fd5b6128cc613640565b5f6127106128d986610d41565b6128e391906148e5565b90506129396128f061341e565b30877f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661368a909392919063ffffffff16565b61298b61294461341e565b827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166134259092919063ffffffff16565b8060015f82825461299c9190614b67565b925050819055508460055f8282546129b49190614b67565b925050819055508460065f8282546129cc9190614b67565b925050819055505f73ffffffffffffffffffffffffffffffffffffffff16600a85856040516129fc929190614943565b90815260200160405180910390205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c4057600a8484604051612a59929190614943565b90815260200160405180910390205f0160149054906101000a900460ff1615612a825750612c42565b5f600a8585604051612a95929190614943565b908152602001604051809103902090505f6064825f0160159054906101000a900460ff1660ff1688612ac79190614877565b612ad191906148e5565b905080826002015f828254612ae69190614b67565b9250508190555082826001015f828254612b009190614b67565b925050819055505f6040518060c001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001838152602001600115158152602001898152602001858152602001428152509050600c8787604051612b62929190614943565b908152602001604051809103902081908060018154018082558091505060019003905f5260205f2090600602015f909190919091505f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015f6101000a81548160ff021916908315150217905550606082015181600301556080820151816004015560a0820151816005015550508160095f828254612c359190614b67565b925050819055505050505b505b50505050565b60075481565b5f5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612ca991906142bb565b602060405180830381865afa158015612cc4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ce891906146b4565b90505f81600154612cf99190614b67565b9050809250505090565b5f339050604051602001612d16906149e6565b60405160208183030381529060405280519060200120600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20604051602001612d799190614ae9565b6040516020818303038152906040528051906020012003612dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc690614b49565b60405180910390fd5b5f600a600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20604051612e1c9190614ae9565b908152602001604051809103902090505f81600501548260030154612e419190614774565b905080826005015f828254612e569190614b67565b925050819055508060085f828254612e6e9190614774565b925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612eb8573d5f5f3e3d5ffd5b50505050565b5f600d80549050905090565b60605f8383612ed99190614877565b905080600d8054905011612f43575f67ffffffffffffffff811115612f0157612f00613f14565b5b604051908082528060200260200182016040528015612f3a57816020015b612f276139e1565b815260200190600190039081612f1f5790505b50915050613193565b5f612f5e82600d80549050612f589190614774565b86613505565b90505f8167ffffffffffffffff811115612f7b57612f7a613f14565b5b604051908082528060200260200182016040528015612fb457816020015b612fa16139e1565b815260200190600190039081612f995790505b5090505f5f90505b8281101561318b57600a600d8583612fd49190614b67565b81548110612fe557612fe4614b9a565b5b905f5260205f2001604051612ffa9190614ae9565b9081526020016040518091039020604051806101200160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020015f820160149054906101000a900460ff161515151581526020015f820160159054906101000a900460ff1660ff1660ff16815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820180546130e090614a27565b80601f016020809104026020016040519081016040528092919081815260200182805461310c90614a27565b80156131575780601f1061312e57610100808354040283529160200191613157565b820191905f5260205f20905b81548152906001019060200180831161313a57829003601f168201915b50505050508152505082828151811061317357613172614b9a565b5b60200260200101819052508080600101915050612fbc565b508093505050505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60065481565b600d81815481106131d2575f80fd5b905f5260205f20015f9150905080546131ea90614a27565b80601f016020809104026020016040519081016040528092919081815260200182805461321690614a27565b80156132615780601f1061323857610100808354040283529160200191613261565b820191905f5260205f20905b81548152906001019060200180831161324457829003601f168201915b505050505081565b61327161341e565b73ffffffffffffffffffffffffffffffffffffffff1661328f6126a0565b73ffffffffffffffffffffffffffffffffffffffff16146132e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132dc90614729565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334a9061550f565b60405180910390fd5b61335c8161351d565b50565b600b602052805f5260405f205f91509050805461337b90614a27565b80601f01602080910402602001604051908101604052809291908181526020018280546133a790614a27565b80156133f25780601f106133c9576101008083540402835291602001916133f2565b820191905f5260205f20905b8154815290600101906020018083116133d557829003601f168201915b505050505081565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f33905090565b61349f838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb858560405160240161345892919061552d565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061370c565b505050565b6134ac6137a1565b5f5f60146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6134ee61341e565b6040516134fb91906142bb565b60405180910390a1565b5f8183106135135781613515565b825b905092915050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6135e6613640565b60015f60146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861362961341e565b60405161363691906142bb565b60405180910390a1565b61364861187a565b15613688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161367f9061559e565b60405180910390fd5b565b613706848573ffffffffffffffffffffffffffffffffffffffff166323b872dd8686866040516024016136bf939291906155bc565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061370c565b50505050565b5f613736828473ffffffffffffffffffffffffffffffffffffffff166137ea90919063ffffffff16565b90505f81511415801561375a5750808060200190518101906137589190615605565b155b1561379c57826040517f5274afe700000000000000000000000000000000000000000000000000000000815260040161379391906142bb565b60405180910390fd5b505050565b6137a961187a565b6137e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137df9061567a565b60405180910390fd5b565b60606137f783835f6137ff565b905092915050565b60608147101561384657306040517fcd78605900000000000000000000000000000000000000000000000000000000815260040161383d91906142bb565b60405180910390fd5b5f5f8573ffffffffffffffffffffffffffffffffffffffff16848660405161386e91906156dc565b5f6040518083038185875af1925050503d805f81146138a8576040519150601f19603f3d011682016040523d82523d5f602084013e6138ad565b606091505b50915091506138bd8683836138c8565b925050509392505050565b6060826138dd576138d882613955565b61394d565b5f825114801561390357505f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561394557836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161393c91906142bb565b60405180910390fd5b81905061394e565b5b9392505050565b5f815111156139675780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518060c001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f151581526020015f81526020015f81526020015f81525090565b6040518061012001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f151581526020015f60ff1681526020015f81526020015f81526020015f81526020015f81526020015f8152602001606081525090565b5f819050919050565b613a5281613a40565b82525050565b5f602082019050613a6b5f830184613a49565b92915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613aab82613a82565b9050919050565b613abb81613aa1565b8114613ac5575f5ffd5b50565b5f81359050613ad681613ab2565b92915050565b613ae581613a40565b8114613aef575f5ffd5b50565b5f81359050613b0081613adc565b92915050565b5f5f60408385031215613b1c57613b1b613a7a565b5b5f613b2985828601613ac8565b9250506020613b3a85828601613af2565b9150509250929050565b5f60208284031215613b5957613b58613a7a565b5b5f613b6684828501613af2565b91505092915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112613b9057613b8f613b6f565b5b8235905067ffffffffffffffff811115613bad57613bac613b73565b5b602083019150836001820283011115613bc957613bc8613b77565b5b9250929050565b5f8115159050919050565b613be481613bd0565b8114613bee575f5ffd5b50565b5f81359050613bff81613bdb565b92915050565b5f5f5f60408486031215613c1c57613c1b613a7a565b5b5f84013567ffffffffffffffff811115613c3957613c38613a7e565b5b613c4586828701613b7b565b93509350506020613c5886828701613bf1565b9150509250925092565b5f819050919050565b5f613c85613c80613c7b84613a82565b613c62565b613a82565b9050919050565b5f613c9682613c6b565b9050919050565b5f613ca782613c8c565b9050919050565b613cb781613c9d565b82525050565b5f602082019050613cd05f830184613cae565b92915050565b5f5f5f5f60608587031215613cee57613ced613a7a565b5b5f85013567ffffffffffffffff811115613d0b57613d0a613a7e565b5b613d1787828801613b7b565b94509450506020613d2a87828801613af2565b9250506040613d3b87828801613af2565b91505092959194509250565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613d7981613aa1565b82525050565b613d8881613a40565b82525050565b613d9781613bd0565b82525050565b60c082015f820151613db15f850182613d70565b506020820151613dc46020850182613d7f565b506040820151613dd76040850182613d8e565b506060820151613dea6060850182613d7f565b506080820151613dfd6080850182613d7f565b5060a0820151613e1060a0850182613d7f565b50505050565b5f613e218383613d9d565b60c08301905092915050565b5f602082019050919050565b5f613e4382613d47565b613e4d8185613d51565b9350613e5883613d61565b805f5b83811015613e88578151613e6f8882613e16565b9750613e7a83613e2d565b925050600181019050613e5b565b5085935050505092915050565b5f6020820190508181035f830152613ead8184613e39565b905092915050565b5f5f60208385031215613ecb57613eca613a7a565b5b5f83013567ffffffffffffffff811115613ee857613ee7613a7e565b5b613ef485828601613b7b565b92509250509250929050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613f4a82613f04565b810181811067ffffffffffffffff82111715613f6957613f68613f14565b5b80604052505050565b5f613f7b613a71565b9050613f878282613f41565b919050565b5f67ffffffffffffffff821115613fa657613fa5613f14565b5b613faf82613f04565b9050602081019050919050565b828183375f83830152505050565b5f613fdc613fd784613f8c565b613f72565b905082815260208101848484011115613ff857613ff7613f00565b5b614003848285613fbc565b509392505050565b5f82601f83011261401f5761401e613b6f565b5b813561402f848260208601613fca565b91505092915050565b5f6020828403121561404d5761404c613a7a565b5b5f82013567ffffffffffffffff81111561406a57614069613a7e565b5b6140768482850161400b565b91505092915050565b61408881613aa1565b82525050565b61409781613bd0565b82525050565b5f60ff82169050919050565b6140b28161409d565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f6140ea826140b8565b6140f481856140c2565b93506141048185602086016140d2565b61410d81613f04565b840191505092915050565b5f6101208201905061412c5f83018c61407f565b614139602083018b61408e565b614146604083018a6140a9565b6141536060830189613a49565b6141606080830188613a49565b61416d60a0830187613a49565b61417a60c0830186613a49565b61418760e0830185613a49565b81810361010083015261419a81846140e0565b90509a9950505050505050505050565b6141b38161409d565b81146141bd575f5ffd5b50565b5f813590506141ce816141aa565b92915050565b5f5f5f604084860312156141eb576141ea613a7a565b5b5f84013567ffffffffffffffff81111561420857614207613a7e565b5b61421486828701613b7b565b93509350506020614227868287016141c0565b9150509250925092565b5f6020820190506142445f83018461408e565b92915050565b5f5f5f5f6060858703121561426257614261613a7a565b5b5f85013567ffffffffffffffff81111561427f5761427e613a7e565b5b61428b87828801613b7b565b9450945050602061429e87828801613ac8565b92505060406142af878288016141c0565b91505092959194509250565b5f6020820190506142ce5f83018461407f565b92915050565b5f5f604083850312156142ea576142e9613a7a565b5b5f83013567ffffffffffffffff81111561430757614306613a7e565b5b6143138582860161400b565b925050602061432485828601613af2565b9150509250929050565b5f60c0820190506143415f83018961407f565b61434e6020830188613a49565b61435b604083018761408e565b6143686060830186613a49565b6143756080830185613a49565b61438260a0830184613a49565b979650505050505050565b5f5f5f604084860312156143a4576143a3613a7a565b5b5f6143b186828701613af2565b935050602084013567ffffffffffffffff8111156143d2576143d1613a7e565b5b6143de86828701613b7b565b92509250509250925092565b5f5f60408385031215614400576143ff613a7a565b5b5f61440d85828601613af2565b925050602061441e85828601613af2565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61445a8161409d565b82525050565b5f82825260208201905092915050565b5f61447a826140b8565b6144848185614460565b93506144948185602086016140d2565b61449d81613f04565b840191505092915050565b5f61012083015f8301516144be5f860182613d70565b5060208301516144d16020860182613d8e565b5060408301516144e46040860182614451565b5060608301516144f76060860182613d7f565b50608083015161450a6080860182613d7f565b5060a083015161451d60a0860182613d7f565b5060c083015161453060c0860182613d7f565b5060e083015161454360e0860182613d7f565b5061010083015184820361010086015261455d8282614470565b9150508091505092915050565b5f61457583836144a8565b905092915050565b5f602082019050919050565b5f61459382614428565b61459d8185614432565b9350836020820285016145af85614442565b805f5b858110156145ea57848403895281516145cb858261456a565b94506145d68361457d565b925060208a019950506001810190506145b2565b50829750879550505050505092915050565b5f6020820190508181035f8301526146148184614589565b905092915050565b5f61462682613c8c565b9050919050565b6146368161461c565b82525050565b5f60208201905061464f5f83018461462d565b92915050565b5f6020820190508181035f83015261466d81846140e0565b905092915050565b5f6020828403121561468a57614689613a7a565b5b5f61469784828501613ac8565b91505092915050565b5f815190506146ae81613adc565b92915050565b5f602082840312156146c9576146c8613a7a565b5b5f6146d6848285016146a0565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6147136020836140c2565b915061471e826146df565b602082019050919050565b5f6020820190508181035f83015261474081614707565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61477e82613a40565b915061478983613a40565b92508282039050818111156147a1576147a0614747565b5b92915050565b7f496e73756666696369656e7420746f6b656e73000000000000000000000000005f82015250565b5f6147db6013836140c2565b91506147e6826147a7565b602082019050919050565b5f6020820190508181035f830152614808816147cf565b9050919050565b7f53616c652074696d6520696e20706173740000000000000000000000000000005f82015250565b5f6148436011836140c2565b915061484e8261480f565b602082019050919050565b5f6020820190508181035f83015261487081614837565b9050919050565b5f61488182613a40565b915061488c83613a40565b925082820261489a81613a40565b915082820484148315176148b1576148b0614747565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6148ef82613a40565b91506148fa83613a40565b92508261490a576149096148b8565b5b828204905092915050565b5f81905092915050565b5f61492a8385614915565b9350614937838584613fbc565b82840190509392505050565b5f61494f82848661491f565b91508190509392505050565b7f496e76616c696420436f646500000000000000000000000000000000000000005f82015250565b5f61498f600c836140c2565b915061499a8261495b565b602082019050919050565b5f6020820190508181035f8301526149bc81614983565b9050919050565b50565b5f6149d15f83614915565b91506149dc826149c3565b5f82019050919050565b5f6149f0826149c6565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680614a3e57607f821691505b602082108103614a5157614a506149fa565b5b50919050565b5f819050815f5260205f209050919050565b5f8154614a7581614a27565b614a7f8186614915565b9450600182165f8114614a995760018114614aae57614ae0565b60ff1983168652811515820286019350614ae0565b614ab785614a57565b5f5b83811015614ad857815481890152600182019150602081019050614ab9565b838801955050505b50505092915050565b5f614af48284614a69565b915081905092915050565b7f55736572206973206e6f7420616e20616666696c6961746500000000000000005f82015250565b5f614b336018836140c2565b9150614b3e82614aff565b602082019050919050565b5f6020820190508181035f830152614b6081614b27565b9050919050565b5f614b7182613a40565b9150614b7c83613a40565b9250828201905080821115614b9457614b93614747565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f43616e277420757064617465207265766f6b65642075736572000000000000005f82015250565b5f614bfb6019836140c2565b9150614c0682614bc7565b602082019050919050565b5f6020820190508181035f830152614c2881614bef565b9050919050565b7f496e76616c69642050726f6669742050657263656e74000000000000000000005f82015250565b5f614c636016836140c2565b9150614c6e82614c2f565b602082019050919050565b5f6020820190508181035f830152614c9081614c57565b9050919050565b7f416d6f756e74206e6f7420617661696c61626c6520666f722061646d696e20775f8201527f697468647261776c000000000000000000000000000000000000000000000000602082015250565b5f614cf16028836140c2565b9150614cfc82614c97565b604082019050919050565b5f6020820190508181035f830152614d1e81614ce5565b9050919050565b7f496e76616c6964206368617261637465723a204f6e6c7920412d5a2c20612d7a5f8201527f2c20302d3920616c6c6f77656400000000000000000000000000000000000000602082015250565b5f614d7f602d836140c2565b9150614d8a82614d25565b604082019050919050565b5f6020820190508181035f830152614dac81614d73565b9050919050565b7f43616e2774207265676973657220666f722030206164647265737300000000005f82015250565b5f614de7601b836140c2565b9150614df282614db3565b602082019050919050565b5f6020820190508181035f830152614e1481614ddb565b9050919050565b7f436f646520616c726561647920696e20757365000000000000000000000000005f82015250565b5f614e4f6013836140c2565b9150614e5a82614e1b565b602082019050919050565b5f6020820190508181035f830152614e7c81614e43565b9050919050565b7f5573657220616c726561647920726567697374657265640000000000000000005f82015250565b5f614eb76017836140c2565b9150614ec282614e83565b602082019050919050565b5f6020820190508181035f830152614ee481614eab565b9050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302614f357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614efa565b614f3f8683614efa565b95508019841693508086168417925050509392505050565b5f614f71614f6c614f6784613a40565b613c62565b613a40565b9050919050565b5f819050919050565b614f8a83614f57565b614f9e614f9682614f78565b848454614f06565b825550505050565b5f5f905090565b614fb5614fa6565b614fc0818484614f81565b505050565b5b81811015614fe357614fd85f82614fad565b600181019050614fc6565b5050565b601f82111561502857614ff981614a57565b61500284614eeb565b81016020851015615011578190505b61502561501d85614eeb565b830182614fc5565b50505b505050565b5f82821c905092915050565b5f6150485f198460080261502d565b1980831691505092915050565b5f6150608383615039565b9150826002028217905092915050565b615079826140b8565b67ffffffffffffffff81111561509257615091613f14565b5b61509c8254614a27565b6150a7828285614fe7565b5f60209050601f8311600181146150d8575f84156150c6578287015190505b6150d08582615055565b865550615137565b601f1984166150e686614a57565b5f5b8281101561510d578489015182556001820191506020850194506020810190506150e8565b8683101561512a5784890151615126601f891682615039565b8355505b6001600288020188555050505b505050505050565b5f82905092915050565b615153838361513f565b67ffffffffffffffff81111561516c5761516b613f14565b5b6151768254614a27565b615181828285614fe7565b5f601f8311600181146151ae575f841561519c578287013590505b6151a68582615055565b86555061520d565b601f1984166151bc86614a57565b5f5b828110156151e3578489013582556001820191506020850194506020810190506151be565b8683101561520057848901356151fc601f891682615039565b8355505b6001600288020188555050505b50505050505050565b7f53616c652074696d6520696e2070617374207468616e20737461727454696d655f82015250565b5f61524a6020836140c2565b915061525582615216565b602082019050919050565b5f6020820190508181035f8301526152778161523e565b9050919050565b7f49434f206861736e2774207374617274656420796574000000000000000000005f82015250565b5f6152b26016836140c2565b91506152bd8261527e565b602082019050919050565b5f6020820190508181035f8301526152df816152a6565b9050919050565b7f49434f2068617320656e646564000000000000000000000000000000000000005f82015250565b5f61531a600d836140c2565b9150615325826152e6565b602082019050919050565b5f6020820190508181035f8301526153478161530e565b9050919050565b7f496e76616c696420616d6f756e740000000000000000000000000000000000005f82015250565b5f615382600e836140c2565b915061538d8261534e565b602082019050919050565b5f6020820190508181035f8301526153af81615376565b9050919050565b5f69ffffffffffffffffffff82169050919050565b6153d4816153b6565b81146153de575f5ffd5b50565b5f815190506153ef816153cb565b92915050565b5f819050919050565b615407816153f5565b8114615411575f5ffd5b50565b5f81519050615422816153fe565b92915050565b5f5f5f5f5f60a0868803121561544157615440613a7a565b5b5f61544e888289016153e1565b955050602061545f88828901615414565b9450506040615470888289016146a0565b9350506060615481888289016146a0565b9250506080615492888289016153e1565b9150509295509295909350565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6154f96026836140c2565b91506155048261549f565b604082019050919050565b5f6020820190508181035f830152615526816154ed565b9050919050565b5f6040820190506155405f83018561407f565b61554d6020830184613a49565b9392505050565b7f5061757361626c653a20706175736564000000000000000000000000000000005f82015250565b5f6155886010836140c2565b915061559382615554565b602082019050919050565b5f6020820190508181035f8301526155b58161557c565b9050919050565b5f6060820190506155cf5f83018661407f565b6155dc602083018561407f565b6155e96040830184613a49565b949350505050565b5f815190506155ff81613bdb565b92915050565b5f6020828403121561561a57615619613a7a565b5b5f615627848285016155f1565b91505092915050565b7f5061757361626c653a206e6f74207061757365640000000000000000000000005f82015250565b5f6156646014836140c2565b915061566f82615630565b602082019050919050565b5f6020820190508181035f83015261569181615658565b9050919050565b5f81519050919050565b5f81905092915050565b5f6156b682615698565b6156c081856156a2565b93506156d08185602086016140d2565b80840191505092915050565b5f6156e782846156ac565b91508190509291505056fea2646970667358221220914e8d49c7415256899fc873c5458f73e767511dcbb3936ff89346350be4d2e764736f6c634300081c0033
Deployed Bytecode
0x608060405260043610610275575f3560e01c8063715018a61161014e578063995a4001116100c0578063c49cc64511610079578063c49cc645146108db578063db7757cf14610905578063e86613a71461092f578063f2fde38b1461096b578063f33b2dca14610993578063fc0c546a146109cf5761027c565b8063995a4001146107e3578063a035b1fe1461080b578063ad33b9e314610835578063b6433b1f1461085f578063b940631314610875578063bca4c6691461089f5761027c565b806388a9d5541161011257806388a9d554146106e0578063898b1ff81461070a5780638d6cc56d146107265780638da5cb5b1461074e5780638e15f4731461077857806394021c5d146107a25761027c565b8063715018a61461063857806378e979251461064e57806380425e9d1461067857806382b2e257146106a05780638456cb59146106ca5761027c565b806340e8714f116101e757806350431ce4116101ab57806350431ce4146105525780635c975abb1461056857806363b201171461059257806366ec1ebc146105bc5780636808da50146105e65780636a63f955146106105761027c565b806340e8714f14610432578063433bd7601461046e5780634678a122146104aa57806347f063ed146104ee5780634f5496891461052a5761027c565b80631b3d36de116102395780631b3d36de1461034e57806322ae058d1461038a578063292dd893146103b25780632f48ab7d146103c85780633197cbb6146103f25780633f4ba83a1461041c5761027c565b806306292f2b1461028057806306b091f9146102aa5780630e90c00a146102d25780630eb1025a146102fa5780630ec1ecac146103245761027c565b3661027c57005b5f5ffd5b34801561028b575f5ffd5b506102946109f9565b6040516102a19190613a58565b60405180910390f35b3480156102b5575f5ffd5b506102d060048036038101906102cb9190613b06565b610a97565b005b3480156102dd575f5ffd5b506102f860048036038101906102f39190613b44565b610c6c565b005b348015610305575f5ffd5b5061030e610d35565b60405161031b9190613a58565b60405180910390f35b34801561032f575f5ffd5b50610338610d3b565b6040516103459190613a58565b60405180910390f35b348015610359575f5ffd5b50610374600480360381019061036f9190613b44565b610d41565b6040516103819190613a58565b60405180910390f35b348015610395575f5ffd5b506103b060048036038101906103ab9190613c05565b610d66565b005b3480156103bd575f5ffd5b506103c6610ed0565b005b3480156103d3575f5ffd5b506103dc611099565b6040516103e99190613cbd565b60405180910390f35b3480156103fd575f5ffd5b506104066110bd565b6040516104139190613a58565b60405180910390f35b348015610427575f5ffd5b506104306110c3565b005b34801561043d575f5ffd5b5061045860048036038101906104539190613cd6565b611149565b6040516104659190613e95565b60405180910390f35b348015610479575f5ffd5b50610494600480360381019061048f9190613eb5565b6113a4565b6040516104a19190613a58565b60405180910390f35b3480156104b5575f5ffd5b506104d060048036038101906104cb9190614038565b6113d1565b6040516104e599989796959493929190614118565b60405180910390f35b3480156104f9575f5ffd5b50610514600480360381019061050f9190613b44565b6114f0565b6040516105219190613a58565b60405180910390f35b348015610535575f5ffd5b50610550600480360381019061054b91906141d4565b611527565b005b34801561055d575f5ffd5b5061056661175d565b005b348015610573575f5ffd5b5061057c61187a565b6040516105899190614231565b60405180910390f35b34801561059d575f5ffd5b506105a661188f565b6040516105b39190613a58565b60405180910390f35b3480156105c7575f5ffd5b506105d0611895565b6040516105dd9190613a58565b60405180910390f35b3480156105f1575f5ffd5b506105fa61189b565b6040516106079190613a58565b60405180910390f35b34801561061b575f5ffd5b506106366004803603810190610631919061424a565b6118a1565b005b348015610643575f5ffd5b5061064c611f61565b005b348015610659575f5ffd5b50610662611fe8565b60405161066f9190613a58565b60405180910390f35b348015610683575f5ffd5b5061069e60048036038101906106999190613b44565b611fee565b005b3480156106ab575f5ffd5b506106b46120b9565b6040516106c19190613a58565b60405180910390f35b3480156106d5575f5ffd5b506106de612157565b005b3480156106eb575f5ffd5b506106f46121dd565b6040516107019190613a58565b60405180910390f35b610724600480360381019061071f9190613eb5565b6121e4565b005b348015610731575f5ffd5b5061074c60048036038101906107479190613b44565b61261a565b005b348015610759575f5ffd5b506107626126a0565b60405161076f91906142bb565b60405180910390f35b348015610783575f5ffd5b5061078c6126c7565b6040516107999190613a58565b60405180910390f35b3480156107ad575f5ffd5b506107c860048036038101906107c391906142d4565b612763565b6040516107da9695949392919061432e565b60405180910390f35b3480156107ee575f5ffd5b506108096004803603810190610804919061438d565b6127f8565b005b348015610816575f5ffd5b5061081f612c48565b60405161082c9190613a58565b60405180910390f35b348015610840575f5ffd5b50610849612c4e565b6040516108569190613a58565b60405180910390f35b34801561086a575f5ffd5b50610873612d03565b005b348015610880575f5ffd5b50610889612ebe565b6040516108969190613a58565b60405180910390f35b3480156108aa575f5ffd5b506108c560048036038101906108c091906143ea565b612eca565b6040516108d291906145fc565b60405180910390f35b3480156108e6575f5ffd5b506108ef613199565b6040516108fc919061463c565b60405180910390f35b348015610910575f5ffd5b506109196131bd565b6040516109269190613a58565b60405180910390f35b34801561093a575f5ffd5b5061095560048036038101906109509190613b44565b6131c3565b6040516109629190614655565b60405180910390f35b348015610976575f5ffd5b50610991600480360381019061098c9190614675565b613269565b005b34801561099e575f5ffd5b506109b960048036038101906109b49190614675565b61335f565b6040516109c69190614655565b60405180910390f35b3480156109da575f5ffd5b506109e36133fa565b6040516109f09190613cbd565b60405180910390f35b5f7f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec773ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a5391906142bb565b602060405180830381865afa158015610a6e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a9291906146b4565b905090565b610a9f61341e565b73ffffffffffffffffffffffffffffffffffffffff16610abd6126a0565b73ffffffffffffffffffffffffffffffffffffffff1614610b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0a90614729565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610b4d91906142bb565b602060405180830381865afa158015610b68573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b8c91906146b4565b90507f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610bf25760095481610bef9190614774565b90505b81811015610c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2c906147f1565b60405180910390fd5b610c67610c4061341e565b838573ffffffffffffffffffffffffffffffffffffffff166134259092919063ffffffff16565b505050565b610c7461341e565b73ffffffffffffffffffffffffffffffffffffffff16610c926126a0565b73ffffffffffffffffffffffffffffffffffffffff1614610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf90614729565b60405180910390fd5b80421115610d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2290614859565b60405180910390fd5b8060028190555050565b60085481565b60055481565b5f6007546305f5e10083610d559190614877565b610d5f91906148e5565b9050919050565b610d6e61341e565b73ffffffffffffffffffffffffffffffffffffffff16610d8c6126a0565b73ffffffffffffffffffffffffffffffffffffffff1614610de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd990614729565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600a8484604051610e0b929190614943565b90815260200160405180910390205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e88906149a5565b60405180910390fd5b80600a8484604051610ea4929190614943565b90815260200160405180910390205f0160146101000a81548160ff021916908315150217905550505050565b5f339050604051602001610ee3906149e6565b60405160208183030381529060405280519060200120600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20604051602001610f469190614ae9565b6040516020818303038152906040528051906020012003610f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9390614b49565b60405180910390fd5b5f600a600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20604051610fe99190614ae9565b908152602001604051809103902090505f8160040154826002015461100e9190614774565b905080826004015f8282546110239190614b67565b925050819055508060095f82825461103b9190614774565b9250508190555061109461104d61341e565b827f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec773ffffffffffffffffffffffffffffffffffffffff166134259092919063ffffffff16565b505050565b7f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec781565b60035481565b6110cb61341e565b73ffffffffffffffffffffffffffffffffffffffff166110e96126a0565b73ffffffffffffffffffffffffffffffffffffffff161461113f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113690614729565b60405180910390fd5b6111476134a4565b565b60605f83836111589190614877565b905080600c878760405161116d929190614943565b908152602001604051809103902080549050116111e0575f67ffffffffffffffff81111561119e5761119d613f14565b5b6040519080825280602002602001820160405280156111d757816020015b6111c4613999565b8152602001906001900390816111bc5790505b5091505061139c565b5f61121982600c89896040516111f7929190614943565b9081526020016040518091039020805490506112139190614774565b86613505565b90505f8167ffffffffffffffff81111561123657611235613f14565b5b60405190808252806020026020018201604052801561126f57816020015b61125c613999565b8152602001906001900390816112545790505b5090505f5f90505b8281101561139457600c8989604051611291929190614943565b908152602001604051809103902084826112ab9190614b67565b815481106112bc576112bb614b9a565b5b905f5260205f2090600602016040518060c00160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282015f9054906101000a900460ff16151515158152602001600382015481526020016004820154815260200160058201548152505082828151811061137c5761137b614b9a565b5b60200260200101819052508080600101915050611277565b508093505050505b949350505050565b5f600c83836040516113b7929190614943565b908152602001604051809103902080549050905092915050565b600a818051602081018201805184825260208301602085012081835280955050505050505f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690805f0160149054906101000a900460ff1690805f0160159054906101000a900460ff169080600101549080600201549080600301549080600401549080600501549080600601805461146f90614a27565b80601f016020809104026020016040519081016040528092919081815260200182805461149b90614a27565b80156114e65780601f106114bd576101008083540402835291602001916114e6565b820191905f5260205f20905b8154815290600101906020018083116114c957829003601f168201915b5050505050905089565b5f5f6305f5e100836115006126c7565b61150a9190614877565b61151491906148e5565b905061151f81610d41565b915050919050565b61152f61341e565b73ffffffffffffffffffffffffffffffffffffffff1661154d6126a0565b73ffffffffffffffffffffffffffffffffffffffff16146115a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159a90614729565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600a84846040516115cc929190614943565b90815260200160405180910390205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611652576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611649906149a5565b60405180910390fd5b5f1515600a8484604051611667929190614943565b90815260200160405180910390205f0160149054906101000a900460ff161515146116c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116be90614c11565b60405180910390fd5b5f8160ff16101580156116de575060648160ff1611155b61171d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171490614c79565b60405180910390fd5b80600a8484604051611730929190614943565b90815260200160405180910390205f0160156101000a81548160ff021916908360ff160217905550505050565b61176561341e565b73ffffffffffffffffffffffffffffffffffffffff166117836126a0565b73ffffffffffffffffffffffffffffffffffffffff16146117d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d090614729565b60405180910390fd5b5f600854476117e89190614774565b90505f811161182c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182390614d07565b60405180910390fd5b6118346126a0565b73ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611876573d5f5f3e3d5ffd5b5050565b5f5f60149054906101000a900460ff16905090565b60015481565b60045481565b60095481565b6118a961341e565b73ffffffffffffffffffffffffffffffffffffffff166118c76126a0565b73ffffffffffffffffffffffffffffffffffffffff161461191d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191490614729565b60405180910390fd5b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050505f8190505f5f90505b8151811015611b03575f82828151811061198757611986614b9a565b5b602001015160f81c60f81b9050603060f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916101580156119f05750603960f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191611155b80611a535750604160f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191610158015611a525750605a60f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191611155b5b80611ab65750606160f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191610158015611ab55750607a60f81b817effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191611155b5b611af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aec90614d95565b60405180910390fd5b50808060010191505061196a565b505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6990614dfd565b60405180910390fd5b5f8360ff1610158015611b89575060648360ff1611155b611bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbf90614c79565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600a8787604051611bf1929190614943565b90815260200160405180910390205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6e90614e65565b60405180910390fd5b604051602001611c86906149e6565b60405160208183030381529060405280519060200120600b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20604051602001611ce99190614ae9565b6040516020818303038152906040528051906020012014611d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3690614ecd565b60405180910390fd5b5f6040518061012001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020015f151581526020018560ff1681526020015f81526020015f81526020015f81526020015f81526020015f815260200188888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050815250905080600a8888604051611df3929190614943565b90815260200160405180910390205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151815f0160146101000a81548160ff0219169083151502179055506040820151815f0160156101000a81548160ff021916908360ff160217905550606082015181600101556080820151816002015560a0820151816003015560c0820151816004015560e08201518160050155610100820151816006019081611ecc9190615070565b509050508686600b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f209182611f1c929190615149565b50600d878790918060018154018082558091505060019003905f5260205f20015f909192909192909192909192509182611f57929190615149565b5050505050505050565b611f6961341e565b73ffffffffffffffffffffffffffffffffffffffff16611f876126a0565b73ffffffffffffffffffffffffffffffffffffffff1614611fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd490614729565b60405180910390fd5b611fe65f61351d565b565b60025481565b611ff661341e565b73ffffffffffffffffffffffffffffffffffffffff166120146126a0565b73ffffffffffffffffffffffffffffffffffffffff161461206a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206190614729565b60405180910390fd5b8060025411156120af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a690615260565b60405180910390fd5b8060038190555050565b5f7f00000000000000000000000051539ed14bd63a77bf319061a336f14b77adc89573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161211391906142bb565b602060405180830381865afa15801561212e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061215291906146b4565b905090565b61215f61341e565b73ffffffffffffffffffffffffffffffffffffffff1661217d6126a0565b73ffffffffffffffffffffffffffffffffffffffff16146121d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ca90614729565b60405180910390fd5b6121db6135de565b565b5f47905090565b3442600254111561222a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612221906152c8565b60405180910390fd5b600354421061226e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226590615330565b60405180910390fd5b5f81116122b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a790615398565b60405180910390fd5b6122b8613640565b5f6305f5e100346122c76126c7565b6122d19190614877565b6122db91906148e5565b90505f662386f26fc100006122ef83610d41565b6122f991906148e5565b905061234d61230661341e565b827f00000000000000000000000051539ed14bd63a77bf319061a336f14b77adc89573ffffffffffffffffffffffffffffffffffffffff166134259092919063ffffffff16565b8060015f82825461235e9190614b67565b925050819055503460045f8282546123769190614b67565b9250508190555064e8d4a510008261238e91906148e5565b60065f82825461239e9190614b67565b925050819055505f73ffffffffffffffffffffffffffffffffffffffff16600a86866040516123ce929190614943565b90815260200160405180910390205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461261257600a858560405161242b929190614943565b90815260200160405180910390205f0160149054906101000a900460ff1615612455575050612615565b5f600a8686604051612468929190614943565b908152602001604051809103902090505f6064825f0160159054906101000a900460ff1660ff163461249a9190614877565b6124a491906148e5565b905080826003015f8282546124b99190614b67565b9250508190555082826001015f8282546124d39190614b67565b925050819055505f6040518060c001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018381526020015f15158152602001348152602001858152602001428152509050600c8888604051612534929190614943565b908152602001604051809103902081908060018154018082558091505060019003905f5260205f2090600602015f909190919091505f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015f6101000a81548160ff021916908315150217905550606082015181600301556080820151816004015560a0820151816005015550508160085f8282546126079190614b67565b925050819055505050505b50505b505050565b61262261341e565b73ffffffffffffffffffffffffffffffffffffffff166126406126a0565b73ffffffffffffffffffffffffffffffffffffffff1614612696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268d90614729565b60405180910390fd5b8060078190555050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f5f7f0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b841973ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015612732573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127569190615428565b5050509150508091505090565b600c828051602081018201805184825260208301602085012081835280955050505050508181548110612794575f80fd5b905f5260205f2090600602015f9150915050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015490806002015f9054906101000a900460ff16908060030154908060040154908060050154905086565b8242600254111561283e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612835906152c8565b60405180910390fd5b6003544210612882576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287990615330565b60405180910390fd5b5f81116128c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bb90615398565b60405180910390fd5b6128cc613640565b5f6127106128d986610d41565b6128e391906148e5565b90506129396128f061341e565b30877f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec773ffffffffffffffffffffffffffffffffffffffff1661368a909392919063ffffffff16565b61298b61294461341e565b827f00000000000000000000000051539ed14bd63a77bf319061a336f14b77adc89573ffffffffffffffffffffffffffffffffffffffff166134259092919063ffffffff16565b8060015f82825461299c9190614b67565b925050819055508460055f8282546129b49190614b67565b925050819055508460065f8282546129cc9190614b67565b925050819055505f73ffffffffffffffffffffffffffffffffffffffff16600a85856040516129fc929190614943565b90815260200160405180910390205f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c4057600a8484604051612a59929190614943565b90815260200160405180910390205f0160149054906101000a900460ff1615612a825750612c42565b5f600a8585604051612a95929190614943565b908152602001604051809103902090505f6064825f0160159054906101000a900460ff1660ff1688612ac79190614877565b612ad191906148e5565b905080826002015f828254612ae69190614b67565b9250508190555082826001015f828254612b009190614b67565b925050819055505f6040518060c001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001838152602001600115158152602001898152602001858152602001428152509050600c8787604051612b62929190614943565b908152602001604051809103902081908060018154018082558091505060019003905f5260205f2090600602015f909190919091505f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015f6101000a81548160ff021916908315150217905550606082015181600301556080820151816004015560a0820151816005015550508160095f828254612c359190614b67565b925050819055505050505b505b50505050565b60075481565b5f5f7f00000000000000000000000051539ed14bd63a77bf319061a336f14b77adc89573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612ca991906142bb565b602060405180830381865afa158015612cc4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ce891906146b4565b90505f81600154612cf99190614b67565b9050809250505090565b5f339050604051602001612d16906149e6565b60405160208183030381529060405280519060200120600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20604051602001612d799190614ae9565b6040516020818303038152906040528051906020012003612dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc690614b49565b60405180910390fd5b5f600a600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20604051612e1c9190614ae9565b908152602001604051809103902090505f81600501548260030154612e419190614774565b905080826005015f828254612e569190614b67565b925050819055508060085f828254612e6e9190614774565b925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612eb8573d5f5f3e3d5ffd5b50505050565b5f600d80549050905090565b60605f8383612ed99190614877565b905080600d8054905011612f43575f67ffffffffffffffff811115612f0157612f00613f14565b5b604051908082528060200260200182016040528015612f3a57816020015b612f276139e1565b815260200190600190039081612f1f5790505b50915050613193565b5f612f5e82600d80549050612f589190614774565b86613505565b90505f8167ffffffffffffffff811115612f7b57612f7a613f14565b5b604051908082528060200260200182016040528015612fb457816020015b612fa16139e1565b815260200190600190039081612f995790505b5090505f5f90505b8281101561318b57600a600d8583612fd49190614b67565b81548110612fe557612fe4614b9a565b5b905f5260205f2001604051612ffa9190614ae9565b9081526020016040518091039020604051806101200160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020015f820160149054906101000a900460ff161515151581526020015f820160159054906101000a900460ff1660ff1660ff16815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820180546130e090614a27565b80601f016020809104026020016040519081016040528092919081815260200182805461310c90614a27565b80156131575780601f1061312e57610100808354040283529160200191613157565b820191905f5260205f20905b81548152906001019060200180831161313a57829003601f168201915b50505050508152505082828151811061317357613172614b9a565b5b60200260200101819052508080600101915050612fbc565b508093505050505b92915050565b7f0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b841981565b60065481565b600d81815481106131d2575f80fd5b905f5260205f20015f9150905080546131ea90614a27565b80601f016020809104026020016040519081016040528092919081815260200182805461321690614a27565b80156132615780601f1061323857610100808354040283529160200191613261565b820191905f5260205f20905b81548152906001019060200180831161324457829003601f168201915b505050505081565b61327161341e565b73ffffffffffffffffffffffffffffffffffffffff1661328f6126a0565b73ffffffffffffffffffffffffffffffffffffffff16146132e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132dc90614729565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334a9061550f565b60405180910390fd5b61335c8161351d565b50565b600b602052805f5260405f205f91509050805461337b90614a27565b80601f01602080910402602001604051908101604052809291908181526020018280546133a790614a27565b80156133f25780601f106133c9576101008083540402835291602001916133f2565b820191905f5260205f20905b8154815290600101906020018083116133d557829003601f168201915b505050505081565b7f00000000000000000000000051539ed14bd63a77bf319061a336f14b77adc89581565b5f33905090565b61349f838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb858560405160240161345892919061552d565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061370c565b505050565b6134ac6137a1565b5f5f60146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6134ee61341e565b6040516134fb91906142bb565b60405180910390a1565b5f8183106135135781613515565b825b905092915050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6135e6613640565b60015f60146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861362961341e565b60405161363691906142bb565b60405180910390a1565b61364861187a565b15613688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161367f9061559e565b60405180910390fd5b565b613706848573ffffffffffffffffffffffffffffffffffffffff166323b872dd8686866040516024016136bf939291906155bc565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061370c565b50505050565b5f613736828473ffffffffffffffffffffffffffffffffffffffff166137ea90919063ffffffff16565b90505f81511415801561375a5750808060200190518101906137589190615605565b155b1561379c57826040517f5274afe700000000000000000000000000000000000000000000000000000000815260040161379391906142bb565b60405180910390fd5b505050565b6137a961187a565b6137e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137df9061567a565b60405180910390fd5b565b60606137f783835f6137ff565b905092915050565b60608147101561384657306040517fcd78605900000000000000000000000000000000000000000000000000000000815260040161383d91906142bb565b60405180910390fd5b5f5f8573ffffffffffffffffffffffffffffffffffffffff16848660405161386e91906156dc565b5f6040518083038185875af1925050503d805f81146138a8576040519150601f19603f3d011682016040523d82523d5f602084013e6138ad565b606091505b50915091506138bd8683836138c8565b925050509392505050565b6060826138dd576138d882613955565b61394d565b5f825114801561390357505f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561394557836040517f9996b31500000000000000000000000000000000000000000000000000000000815260040161393c91906142bb565b60405180910390fd5b81905061394e565b5b9392505050565b5f815111156139675780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518060c001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f151581526020015f81526020015f81526020015f81525090565b6040518061012001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f151581526020015f60ff1681526020015f81526020015f81526020015f81526020015f81526020015f8152602001606081525090565b5f819050919050565b613a5281613a40565b82525050565b5f602082019050613a6b5f830184613a49565b92915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613aab82613a82565b9050919050565b613abb81613aa1565b8114613ac5575f5ffd5b50565b5f81359050613ad681613ab2565b92915050565b613ae581613a40565b8114613aef575f5ffd5b50565b5f81359050613b0081613adc565b92915050565b5f5f60408385031215613b1c57613b1b613a7a565b5b5f613b2985828601613ac8565b9250506020613b3a85828601613af2565b9150509250929050565b5f60208284031215613b5957613b58613a7a565b5b5f613b6684828501613af2565b91505092915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112613b9057613b8f613b6f565b5b8235905067ffffffffffffffff811115613bad57613bac613b73565b5b602083019150836001820283011115613bc957613bc8613b77565b5b9250929050565b5f8115159050919050565b613be481613bd0565b8114613bee575f5ffd5b50565b5f81359050613bff81613bdb565b92915050565b5f5f5f60408486031215613c1c57613c1b613a7a565b5b5f84013567ffffffffffffffff811115613c3957613c38613a7e565b5b613c4586828701613b7b565b93509350506020613c5886828701613bf1565b9150509250925092565b5f819050919050565b5f613c85613c80613c7b84613a82565b613c62565b613a82565b9050919050565b5f613c9682613c6b565b9050919050565b5f613ca782613c8c565b9050919050565b613cb781613c9d565b82525050565b5f602082019050613cd05f830184613cae565b92915050565b5f5f5f5f60608587031215613cee57613ced613a7a565b5b5f85013567ffffffffffffffff811115613d0b57613d0a613a7e565b5b613d1787828801613b7b565b94509450506020613d2a87828801613af2565b9250506040613d3b87828801613af2565b91505092959194509250565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613d7981613aa1565b82525050565b613d8881613a40565b82525050565b613d9781613bd0565b82525050565b60c082015f820151613db15f850182613d70565b506020820151613dc46020850182613d7f565b506040820151613dd76040850182613d8e565b506060820151613dea6060850182613d7f565b506080820151613dfd6080850182613d7f565b5060a0820151613e1060a0850182613d7f565b50505050565b5f613e218383613d9d565b60c08301905092915050565b5f602082019050919050565b5f613e4382613d47565b613e4d8185613d51565b9350613e5883613d61565b805f5b83811015613e88578151613e6f8882613e16565b9750613e7a83613e2d565b925050600181019050613e5b565b5085935050505092915050565b5f6020820190508181035f830152613ead8184613e39565b905092915050565b5f5f60208385031215613ecb57613eca613a7a565b5b5f83013567ffffffffffffffff811115613ee857613ee7613a7e565b5b613ef485828601613b7b565b92509250509250929050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613f4a82613f04565b810181811067ffffffffffffffff82111715613f6957613f68613f14565b5b80604052505050565b5f613f7b613a71565b9050613f878282613f41565b919050565b5f67ffffffffffffffff821115613fa657613fa5613f14565b5b613faf82613f04565b9050602081019050919050565b828183375f83830152505050565b5f613fdc613fd784613f8c565b613f72565b905082815260208101848484011115613ff857613ff7613f00565b5b614003848285613fbc565b509392505050565b5f82601f83011261401f5761401e613b6f565b5b813561402f848260208601613fca565b91505092915050565b5f6020828403121561404d5761404c613a7a565b5b5f82013567ffffffffffffffff81111561406a57614069613a7e565b5b6140768482850161400b565b91505092915050565b61408881613aa1565b82525050565b61409781613bd0565b82525050565b5f60ff82169050919050565b6140b28161409d565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f6140ea826140b8565b6140f481856140c2565b93506141048185602086016140d2565b61410d81613f04565b840191505092915050565b5f6101208201905061412c5f83018c61407f565b614139602083018b61408e565b614146604083018a6140a9565b6141536060830189613a49565b6141606080830188613a49565b61416d60a0830187613a49565b61417a60c0830186613a49565b61418760e0830185613a49565b81810361010083015261419a81846140e0565b90509a9950505050505050505050565b6141b38161409d565b81146141bd575f5ffd5b50565b5f813590506141ce816141aa565b92915050565b5f5f5f604084860312156141eb576141ea613a7a565b5b5f84013567ffffffffffffffff81111561420857614207613a7e565b5b61421486828701613b7b565b93509350506020614227868287016141c0565b9150509250925092565b5f6020820190506142445f83018461408e565b92915050565b5f5f5f5f6060858703121561426257614261613a7a565b5b5f85013567ffffffffffffffff81111561427f5761427e613a7e565b5b61428b87828801613b7b565b9450945050602061429e87828801613ac8565b92505060406142af878288016141c0565b91505092959194509250565b5f6020820190506142ce5f83018461407f565b92915050565b5f5f604083850312156142ea576142e9613a7a565b5b5f83013567ffffffffffffffff81111561430757614306613a7e565b5b6143138582860161400b565b925050602061432485828601613af2565b9150509250929050565b5f60c0820190506143415f83018961407f565b61434e6020830188613a49565b61435b604083018761408e565b6143686060830186613a49565b6143756080830185613a49565b61438260a0830184613a49565b979650505050505050565b5f5f5f604084860312156143a4576143a3613a7a565b5b5f6143b186828701613af2565b935050602084013567ffffffffffffffff8111156143d2576143d1613a7e565b5b6143de86828701613b7b565b92509250509250925092565b5f5f60408385031215614400576143ff613a7a565b5b5f61440d85828601613af2565b925050602061441e85828601613af2565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61445a8161409d565b82525050565b5f82825260208201905092915050565b5f61447a826140b8565b6144848185614460565b93506144948185602086016140d2565b61449d81613f04565b840191505092915050565b5f61012083015f8301516144be5f860182613d70565b5060208301516144d16020860182613d8e565b5060408301516144e46040860182614451565b5060608301516144f76060860182613d7f565b50608083015161450a6080860182613d7f565b5060a083015161451d60a0860182613d7f565b5060c083015161453060c0860182613d7f565b5060e083015161454360e0860182613d7f565b5061010083015184820361010086015261455d8282614470565b9150508091505092915050565b5f61457583836144a8565b905092915050565b5f602082019050919050565b5f61459382614428565b61459d8185614432565b9350836020820285016145af85614442565b805f5b858110156145ea57848403895281516145cb858261456a565b94506145d68361457d565b925060208a019950506001810190506145b2565b50829750879550505050505092915050565b5f6020820190508181035f8301526146148184614589565b905092915050565b5f61462682613c8c565b9050919050565b6146368161461c565b82525050565b5f60208201905061464f5f83018461462d565b92915050565b5f6020820190508181035f83015261466d81846140e0565b905092915050565b5f6020828403121561468a57614689613a7a565b5b5f61469784828501613ac8565b91505092915050565b5f815190506146ae81613adc565b92915050565b5f602082840312156146c9576146c8613a7a565b5b5f6146d6848285016146a0565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6147136020836140c2565b915061471e826146df565b602082019050919050565b5f6020820190508181035f83015261474081614707565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61477e82613a40565b915061478983613a40565b92508282039050818111156147a1576147a0614747565b5b92915050565b7f496e73756666696369656e7420746f6b656e73000000000000000000000000005f82015250565b5f6147db6013836140c2565b91506147e6826147a7565b602082019050919050565b5f6020820190508181035f830152614808816147cf565b9050919050565b7f53616c652074696d6520696e20706173740000000000000000000000000000005f82015250565b5f6148436011836140c2565b915061484e8261480f565b602082019050919050565b5f6020820190508181035f83015261487081614837565b9050919050565b5f61488182613a40565b915061488c83613a40565b925082820261489a81613a40565b915082820484148315176148b1576148b0614747565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6148ef82613a40565b91506148fa83613a40565b92508261490a576149096148b8565b5b828204905092915050565b5f81905092915050565b5f61492a8385614915565b9350614937838584613fbc565b82840190509392505050565b5f61494f82848661491f565b91508190509392505050565b7f496e76616c696420436f646500000000000000000000000000000000000000005f82015250565b5f61498f600c836140c2565b915061499a8261495b565b602082019050919050565b5f6020820190508181035f8301526149bc81614983565b9050919050565b50565b5f6149d15f83614915565b91506149dc826149c3565b5f82019050919050565b5f6149f0826149c6565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680614a3e57607f821691505b602082108103614a5157614a506149fa565b5b50919050565b5f819050815f5260205f209050919050565b5f8154614a7581614a27565b614a7f8186614915565b9450600182165f8114614a995760018114614aae57614ae0565b60ff1983168652811515820286019350614ae0565b614ab785614a57565b5f5b83811015614ad857815481890152600182019150602081019050614ab9565b838801955050505b50505092915050565b5f614af48284614a69565b915081905092915050565b7f55736572206973206e6f7420616e20616666696c6961746500000000000000005f82015250565b5f614b336018836140c2565b9150614b3e82614aff565b602082019050919050565b5f6020820190508181035f830152614b6081614b27565b9050919050565b5f614b7182613a40565b9150614b7c83613a40565b9250828201905080821115614b9457614b93614747565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f43616e277420757064617465207265766f6b65642075736572000000000000005f82015250565b5f614bfb6019836140c2565b9150614c0682614bc7565b602082019050919050565b5f6020820190508181035f830152614c2881614bef565b9050919050565b7f496e76616c69642050726f6669742050657263656e74000000000000000000005f82015250565b5f614c636016836140c2565b9150614c6e82614c2f565b602082019050919050565b5f6020820190508181035f830152614c9081614c57565b9050919050565b7f416d6f756e74206e6f7420617661696c61626c6520666f722061646d696e20775f8201527f697468647261776c000000000000000000000000000000000000000000000000602082015250565b5f614cf16028836140c2565b9150614cfc82614c97565b604082019050919050565b5f6020820190508181035f830152614d1e81614ce5565b9050919050565b7f496e76616c6964206368617261637465723a204f6e6c7920412d5a2c20612d7a5f8201527f2c20302d3920616c6c6f77656400000000000000000000000000000000000000602082015250565b5f614d7f602d836140c2565b9150614d8a82614d25565b604082019050919050565b5f6020820190508181035f830152614dac81614d73565b9050919050565b7f43616e2774207265676973657220666f722030206164647265737300000000005f82015250565b5f614de7601b836140c2565b9150614df282614db3565b602082019050919050565b5f6020820190508181035f830152614e1481614ddb565b9050919050565b7f436f646520616c726561647920696e20757365000000000000000000000000005f82015250565b5f614e4f6013836140c2565b9150614e5a82614e1b565b602082019050919050565b5f6020820190508181035f830152614e7c81614e43565b9050919050565b7f5573657220616c726561647920726567697374657265640000000000000000005f82015250565b5f614eb76017836140c2565b9150614ec282614e83565b602082019050919050565b5f6020820190508181035f830152614ee481614eab565b9050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302614f357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614efa565b614f3f8683614efa565b95508019841693508086168417925050509392505050565b5f614f71614f6c614f6784613a40565b613c62565b613a40565b9050919050565b5f819050919050565b614f8a83614f57565b614f9e614f9682614f78565b848454614f06565b825550505050565b5f5f905090565b614fb5614fa6565b614fc0818484614f81565b505050565b5b81811015614fe357614fd85f82614fad565b600181019050614fc6565b5050565b601f82111561502857614ff981614a57565b61500284614eeb565b81016020851015615011578190505b61502561501d85614eeb565b830182614fc5565b50505b505050565b5f82821c905092915050565b5f6150485f198460080261502d565b1980831691505092915050565b5f6150608383615039565b9150826002028217905092915050565b615079826140b8565b67ffffffffffffffff81111561509257615091613f14565b5b61509c8254614a27565b6150a7828285614fe7565b5f60209050601f8311600181146150d8575f84156150c6578287015190505b6150d08582615055565b865550615137565b601f1984166150e686614a57565b5f5b8281101561510d578489015182556001820191506020850194506020810190506150e8565b8683101561512a5784890151615126601f891682615039565b8355505b6001600288020188555050505b505050505050565b5f82905092915050565b615153838361513f565b67ffffffffffffffff81111561516c5761516b613f14565b5b6151768254614a27565b615181828285614fe7565b5f601f8311600181146151ae575f841561519c578287013590505b6151a68582615055565b86555061520d565b601f1984166151bc86614a57565b5f5b828110156151e3578489013582556001820191506020850194506020810190506151be565b8683101561520057848901356151fc601f891682615039565b8355505b6001600288020188555050505b50505050505050565b7f53616c652074696d6520696e2070617374207468616e20737461727454696d655f82015250565b5f61524a6020836140c2565b915061525582615216565b602082019050919050565b5f6020820190508181035f8301526152778161523e565b9050919050565b7f49434f206861736e2774207374617274656420796574000000000000000000005f82015250565b5f6152b26016836140c2565b91506152bd8261527e565b602082019050919050565b5f6020820190508181035f8301526152df816152a6565b9050919050565b7f49434f2068617320656e646564000000000000000000000000000000000000005f82015250565b5f61531a600d836140c2565b9150615325826152e6565b602082019050919050565b5f6020820190508181035f8301526153478161530e565b9050919050565b7f496e76616c696420616d6f756e740000000000000000000000000000000000005f82015250565b5f615382600e836140c2565b915061538d8261534e565b602082019050919050565b5f6020820190508181035f8301526153af81615376565b9050919050565b5f69ffffffffffffffffffff82169050919050565b6153d4816153b6565b81146153de575f5ffd5b50565b5f815190506153ef816153cb565b92915050565b5f819050919050565b615407816153f5565b8114615411575f5ffd5b50565b5f81519050615422816153fe565b92915050565b5f5f5f5f5f60a0868803121561544157615440613a7a565b5b5f61544e888289016153e1565b955050602061545f88828901615414565b9450506040615470888289016146a0565b9350506060615481888289016146a0565b9250506080615492888289016153e1565b9150509295509295909350565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6154f96026836140c2565b91506155048261549f565b604082019050919050565b5f6020820190508181035f830152615526816154ed565b9050919050565b5f6040820190506155405f83018561407f565b61554d6020830184613a49565b9392505050565b7f5061757361626c653a20706175736564000000000000000000000000000000005f82015250565b5f6155886010836140c2565b915061559382615554565b602082019050919050565b5f6020820190508181035f8301526155b58161557c565b9050919050565b5f6060820190506155cf5f83018661407f565b6155dc602083018561407f565b6155e96040830184613a49565b949350505050565b5f815190506155ff81613bdb565b92915050565b5f6020828403121561561a57615619613a7a565b5b5f615627848285016155f1565b91505092915050565b7f5061757361626c653a206e6f74207061757365640000000000000000000000005f82015250565b5f6156646014836140c2565b915061566f82615630565b602082019050919050565b5f6020820190508181035f83015261569181615658565b9050919050565b5f81519050919050565b5f81905092915050565b5f6156b682615698565b6156c081856156a2565b93506156d08185602086016140d2565b80840191505092915050565b5f6156e782846156ac565b91508190509291505056fea2646970667358221220914e8d49c7415256899fc873c5458f73e767511dcbb3936ff89346350be4d2e764736f6c634300081c0033
Deployed Bytecode Sourcemap
446:14040:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12439:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6309:486;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2509:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;931:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;720:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11315:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5731:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7046:612;;;;;;;;;;;;;:::i;:::-;;557:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;658:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3069:65;;;;;;;;;;;;;:::i;:::-;;13719:650;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12905:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1912:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;11447:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5202:523;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6051:252;;;;;;;;;;;;;:::i;:::-;;10217:84:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;592:30:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;687:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;982:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4008:1188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1471:92:0;;;;;;;;;;;;;:::i;:::-;;628:24:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2691:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12212:132;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2937:61;;;;;;;;;;;;;:::i;:::-;;12600:112;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9795:1514;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3140:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1259:85:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11992:168:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2013:56;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;8345:1444;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;872:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11741:245;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7664:675;;;;;;;;;;;;;:::i;:::-;;12745:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13087:626;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1032:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;752:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2075:21;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1568:223:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1966:41:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;522:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12439:128;12486:19;12531:4;:14;;;12554:4;12531:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12517:43;;12439:128;:::o;6309:486::-;1399:12:0;:10;:12::i;:::-;1388:23;;:7;:5;:7::i;:::-;:23;;;1380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6394:17:1::1;6421:6;6414:24;;;6447:4;6414:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6394:59;;6485:4;6467:23;;:6;:23;;::::0;6463:91:::1;;6519:24;;6506:37;;;;;:::i;:::-;;;6463:91;6597:6;6584:9;:19;;6563:166;;;;;;;;;;;;:::i;:::-;;;;;;;;;6739:49;6767:12;:10;:12::i;:::-;6781:6;6746;6739:27;;;;:49;;;;;:::i;:::-;6384:411;6309:486:::0;;:::o;2509:176::-;1399:12:0;:10;:12::i;:::-;1388:23;;:7;:5;:7::i;:::-;:23;;;1380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2614:10:1::1;2595:15;:29;;2587:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;2668:10;2656:9;:22;;;;2509:176:::0;:::o;931:45::-;;;;:::o;720:25::-;;;;:::o;11315:126::-;11381:7;11429:5;;11422:3;11408:11;:17;;;;:::i;:::-;11407:27;;;;:::i;:::-;11400:34;;11315:126;;;:::o;5731:230::-;1399:12:0;:10;:12::i;:::-;1388:23;;:7;:5;:7::i;:::-;:23;;;1380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5889:1:1::1;5854:37;;:12;5867:4;;5854:18;;;;;;;:::i;:::-;;;;;;;;;;;;;:23;;;;;;;;;;;;:37;;::::0;5846:62:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5947:7;5918:12;5931:4;;5918:18;;;;;;;:::i;:::-;;;;;;;;;;;;;:26;;;:36;;;;;;;;;;;;;;;;;;5731:230:::0;;;:::o;7046:612::-;7104:12;7119:10;7104:25;;7232:20;;;;;;;:::i;:::-;;;;;;;;;;;;;7222:31;;;;;;7187:7;:13;7195:4;7187:13;;;;;;;;;;;;;;;7170:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;7160:42;;;;;;:93;7139:164;;;;;;;;;;;;:::i;:::-;;;;;;;;;7313:27;7343:12;7356:7;:13;7364:4;7356:13;;;;;;;;;;;;;;;7343:27;;;;;;:::i;:::-;;;;;;;;;;;;;7313:57;;7380:29;7447:9;:23;;;7412:9;:20;;;:58;;;;:::i;:::-;7380:90;;7507:21;7480:9;:23;;;:48;;;;;;;:::i;:::-;;;;;;;;7566:21;7538:24;;:49;;;;;;;:::i;:::-;;;;;;;;7597:54;7615:12;:10;:12::i;:::-;7629:21;7597:4;:17;;;;:54;;;;;:::i;:::-;7094:564;;;7046:612::o;557:28::-;;;:::o;658:22::-;;;;:::o;3069:65::-;1399:12:0;:10;:12::i;:::-;1388:23;;:7;:5;:7::i;:::-;:23;;;1380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3117:10:1::1;:8;:10::i;:::-;3069:65::o:0;13719:650::-;13855:22;13889:19;13924:6;13911:10;:19;;;;:::i;:::-;13889:41;;13975:11;13944:14;13959:4;;13944:20;;;;;;;:::i;:::-;;;;;;;;;;;;;:27;;;;:42;13940:89;;14027:1;14007:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;14000:29;;;;;13940:89;14040:13;14056:98;14113:11;14083:14;14098:4;;14083:20;;;;;;;:::i;:::-;;;;;;;;;;;;;:27;;;;:41;;;;:::i;:::-;14138:6;14056:13;:98::i;:::-;14040:114;;14164:28;14215:5;14195:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;14164:57;;14237:9;14249:1;14237:13;;14232:109;14256:5;14252:1;:9;14232:109;;;14293:14;14308:4;;14293:20;;;;;;;:::i;:::-;;;;;;;;;;;;;14318:11;14314:1;:15;;;;:::i;:::-;14293:37;;;;;;;;:::i;:::-;;;;;;;;;;;;14282:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;14288:1;14282:8;;;;;;;;:::i;:::-;;;;;;;:48;;;;14263:3;;;;;;;14232:109;;;;14357:5;14350:12;;;;;13719:650;;;;;;;:::o;12905:149::-;12994:7;13020:14;13035:4;;13020:20;;;;;;;:::i;:::-;;;;;;;;;;;;;:27;;;;13013:34;;12905:149;;;;:::o;1912:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11447:288::-;11589:19;11620:20;11673:3;11663:6;11644:16;:14;:16::i;:::-;:25;;;;:::i;:::-;11643:33;;;;:::i;:::-;11620:56;;11700:28;11715:12;11700:14;:28::i;:::-;11686:42;;11610:125;11447:288;;;:::o;5202:523::-;1399:12:0;:10;:12::i;:::-;1388:23;;:7;:5;:7::i;:::-;:23;;;1380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5370:1:1::1;5335:37;;:12;5348:4;;5335:18;;;;;;;:::i;:::-;;;;;;;;;;;;;:23;;;;;;;;;;;;:37;;::::0;5327:62:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5450:5;5420:35;;:12;5433:4;;5420:18;;;;;;;:::i;:::-;;;;;;;;;;;;;:26;;;;;;;;;;;;:35;;;5399:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;5554:1;5537:13;:18;;;;:42;;;;;5576:3;5559:13;:20;;;;5537:42;5516:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;5705:13;5670:12;5683:4;;5670:18;;;;;;;:::i;:::-;;;;;;;;;;;;;:32;;;:48;;;;;;;;;;;;;;;;;;5202:523:::0;;;:::o;6051:252::-;1399:12:0;:10;:12::i;:::-;1388:23;;:7;:5;:7::i;:::-;:23;;;1380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6104:17:1::1;6148:26;;6124:21;:50;;;;:::i;:::-;6104:70;;6204:1;6192:9;:13;6184:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;6268:7;:5;:7::i;:::-;6260:25;;:36;6286:9;6260:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6094:209;6051:252::o:0;10217:84:0:-;10264:4;10287:7;;;;;;;;;;;10280:14;;10217:84;:::o;592:30:1:-;;;;:::o;687:27::-;;;;:::o;982:43::-;;;;:::o;4008:1188::-;1399:12:0;:10;:12::i;:::-;1388:23;;:7;:5;:7::i;:::-;:23;;;1380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4158:4:1::1;;3237:601;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3294:21;3324:5;3294:36;;3345:9;3357:1;3345:13;;3340:481;3364:8;:15;3360:1;:19;3340:481;;;3400:11;3414:8;3423:1;3414:11;;;;;;;;:::i;:::-;;;;;;;;;;3400:25;;3539:4;3531:12;;:4;:12;;;;;:28;;;;;3555:4;3547:12;;:4;:12;;;;;3531:28;3530:97;;;;3606:4;3598:12;;:4;:12;;;;;:28;;;;;3622:4;3614:12;;:4;:12;;;;;3598:28;3530:97;:164;;;;3673:4;3665:12;;:4;:12;;;;;:28;;;;;3689:4;3681:12;;:4;:12;;;;;3665:28;3530:164;3440:371;;3741:55;;;;;;;;;;:::i;:::-;;;;;;;;3440:371;3386:435;3381:3;;;;;;;3340:481;;;;4198:1:::2;4182:18;;:4;:18;;::::0;4174:58:::2;;;;;;;;;;;;:::i;:::-;;;;;;;;;4280:1;4263:13;:18;;;;:42;;;;;4302:3;4285:13;:20;;;;4263:42;4242:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;4457:1;4422:37;;:12;4435:4;;4422:18;;;;;;;:::i;:::-;;;;;;;;;;;;;:23;;;;;;;;;;;;:37;;;4414:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;4586:20;;;;;;;:::i;:::-;;;;;;;;;;;;;4576:31;;;;;;4541:7;:13;4549:4;4541:13;;;;;;;;;;;;;;;4524:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;4514:42;;;;;;:93;4493:163;;;;;;;;;;;;:::i;:::-;;;;;;;;;4667:26;4696:396;;;;;;;;4726:4;4696:396;;;;;;4753:5;4696:396;;;;;;4787:13;4696:396;;;;;;4860:1;4696:396;;;;4887:1;4696:396;;;;4916:1;4696:396;;;;4946:1;4696:396;;;;4978:1;4696:396;;;;4999:4;;4696:396;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;4667:425:::2;;5124:9;5103:12;5116:4;;5103:18;;;;;;;:::i;:::-;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;5159:4;;5143:7;:13;5151:4;5143:13;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;5173:5;5184:4;;5173:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4164:1032;3284:554:::1;1458:1:0;4008:1188:1::0;;;;:::o;1471:92:0:-;1399:12;:10;:12::i;:::-;1388:23;;:7;:5;:7::i;:::-;:23;;;1380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1535:21:::1;1553:1;1535:9;:21::i;:::-;1471:92::o:0;628:24:1:-;;;;:::o;2691:175::-;1399:12:0;:10;:12::i;:::-;1388:23;;:7;:5;:7::i;:::-;:23;;;1380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2786:8:1::1;2773:9;;:21;;2765:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;2851:8;2841:7;:18;;;;2691:175:::0;:::o;12212:132::-;12260:20;12307:5;:15;;;12331:4;12307:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12292:45;;12212:132;:::o;2937:61::-;1399:12:0;:10;:12::i;:::-;1388:23;;:7;:5;:7::i;:::-;:23;;;1380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2983:8:1::1;:6;:8::i;:::-;2937:61::o:0;12600:112::-;12649:14;12684:21;12675:30;;12600:112;:::o;9795:1514::-;9886:9;6872:15;6859:9;;:28;;6851:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;6950:7;;6932:15;:25;6924:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;7002:1;6993:6;:10;6985:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;10104:19:0::1;:17;:19::i;:::-;10027:20:1::2;10084:3;10070:9;10051:16;:14;:16::i;:::-;:28;;;;:::i;:::-;10050:38;;;;:::i;:::-;10027:61;;10114:24;10173:4;10141:28;10156:12;10141:14;:28::i;:::-;:37;;;;:::i;:::-;10114:64;;10202:50;10221:12;:10;:12::i;:::-;10235:16;10202:5;:18;;;;:50;;;;;:::i;:::-;10281:16;10262:15;;:35;;;;;;;:::i;:::-;;;;;;;;10323:9;10307:12;;:25;;;;;;;:::i;:::-;;;;;;;;10372:4;10357:12;:19;;;;:::i;:::-;10342:11;;:34;;;;;;;:::i;:::-;;;;;;;;10483:1;10448:37;;:12;10461:4;;10448:18;;;;;;;:::i;:::-;;;;;;;;;;;;;:23;;;;;;;;;;;;:37;;;10444:859;;10554:12;10567:4;;10554:18;;;;;;;:::i;:::-;;;;;;;;;;;;;:26;;;;;;;;;;;;10550:39;;;10582:7;;;;10550:39;10603:27;10633:12;10646:4;;10633:18;;;;;;;:::i;:::-;;;;;;;;;;;;;10603:48;;10665:18;10726:3;10699:9;:23;;;;;;;;;;;;10687:35;;:9;:35;;;;:::i;:::-;10686:43;;;;:::i;:::-;10665:64;;10769:10;10743:9;:22;;;:36;;;;;;;:::i;:::-;;;;;;;;10817:16;10793:9;:20;;;:40;;;;;;;:::i;:::-;;;;;;;;10848:25;10876:317;;;;;;;;10914:10;10876:317;;;;;;10950:10;10876:317;;;;10994:5;10876:317;;;;;;11029:9;10876:317;;;;11115:16;10876:317;;;;11163:15;10876:317;;::::0;10848:345:::2;;11207:14;11222:4;;11207:20;;;;;;;:::i;:::-;;;;;;;;;;;;;11233:4;11207:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11282:10;11252:26;;:40;;;;;;;:::i;:::-;;;;;;;;10487:816;;;10444:859;9911:1398;;10133:1:0;9795:1514:1::0;;;:::o;3140:91::-;1399:12:0;:10;:12::i;:::-;1388:23;;:7;:5;:7::i;:::-;:23;;;1380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3216:8:1::1;3208:5;:16;;;;3140:91:::0;:::o;1259:85:0:-;1305:7;1331:6;;;;;;;;;;;1324:13;;1259:85;:::o;11992:168:1:-;12039:7;12061:13;12084:19;:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12058:63;;;;;;12146:6;12131:22;;;11992:168;:::o;2013:56::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8345:1444::-;8450:6;6872:15;6859:9;;:28;;6851:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;6950:7;;6932:15;:25;6924:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;7002:1;6993:6;:10;6985:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;10104:19:0::1;:17;:19::i;:::-;8605:24:1::2;8657:3;8632:22;8647:6;8632:14;:22::i;:::-;:28;;;;:::i;:::-;8605:55;;8683:58;8705:12;:10;:12::i;:::-;8727:4;8734:6;8683:4;:21;;;;:58;;;;;;:::i;:::-;8751:50;8770:12;:10;:12::i;:::-;8784:16;8751:5;:18;;;;:50;;;;;:::i;:::-;8830:16;8811:15;;:35;;;;;;;:::i;:::-;;;;;;;;8870:6;8856:10;;:20;;;;;;;:::i;:::-;;;;;;;;8901:6;8886:11;;:21;;;;;;;:::i;:::-;;;;;;;;9014:1;8979:37;;:12;8992:4;;8979:18;;;;;;;:::i;:::-;;;;;;;;;;;;;:23;;;;;;;;;;;;:37;;;8975:808;;9085:12;9098:4;;9085:18;;;;;;;:::i;:::-;;;;;;;;;;;;;:26;;;;;;;;;;;;9081:39;;;9113:7;;;9081:39;9134:27;9164:12;9177:4;;9164:18;;;;;;;:::i;:::-;;;;;;;;;;;;;9134:48;;9196:18;9254:3;9227:9;:23;;;;;;;;;;;;9218:32;;:6;:32;;;;:::i;:::-;9217:40;;;;:::i;:::-;9196:61;;9295:10;9271:9;:20;;;:34;;;;;;;:::i;:::-;;;;;;;;9343:16;9319:9;:20;;;:40;;;;;;;:::i;:::-;;;;;;;;9374:25;9402:273;;;;;;;;9440:10;9402:273;;;;;;9476:10;9402:273;;;;9520:4;9402:273;;;;;;9554:6;9402:273;;;;9597:16;9402:273;;;;9645:15;9402:273;;::::0;9374:301:::2;;9689:14;9704:4;;9689:20;;;;;;;:::i;:::-;;;;;;;;;;;;;9715:4;9689:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9762:10;9734:24;;:38;;;;;;;:::i;:::-;;;;;;;;9018:765;;;8975:808;8472:1317;10133:1:0;8345:1444:1::0;;;;:::o;872:29::-;;;;:::o;11741:245::-;11793:7;11812:20;11842:5;11835:23;;;11867:4;11835:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11812:61;;11883:27;11931:12;11913:15;;:30;;;;:::i;:::-;11883:60;;11960:19;11953:26;;;;11741:245;:::o;7664:675::-;7724:12;7739:10;7724:25;;7908:20;;;;;;;:::i;:::-;;;;;;;;;;;;;7898:31;;;;;;7863:7;:13;7871:4;7863:13;;;;;;;;;;;;;;;7846:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;7836:42;;;;;;:93;7815:164;;;;;;;;;;;;:::i;:::-;;;;;;;;;7989:27;8019:12;8032:7;:13;8040:4;8032:13;;;;;;;;;;;;;;;8019:27;;;;;;:::i;:::-;;;;;;;;;;;;;7989:57;;8056:29;8125:9;:25;;;8088:9;:22;;;:62;;;;:::i;:::-;8056:94;;8189:21;8160:9;:25;;;:50;;;;;;;:::i;:::-;;;;;;;;8250:21;8220:26;;:51;;;;;;;:::i;:::-;;;;;;;;8289:10;8281:28;;:51;8310:21;8281:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7714:625;;;7664:675::o;12745:96::-;12796:7;12822:5;:12;;;;12815:19;;12745:96;:::o;13087:626::-;13185:18;13215:19;13246:6;13237;:15;;;;:::i;:::-;13215:37;;13318:11;13302:5;:12;;;;:27;13298:58;;13354:1;13338:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;13331:25;;;;;13298:58;13367:13;13383:49;13412:11;13397:5;:12;;;;:26;;;;:::i;:::-;13425:6;13383:13;:49::i;:::-;13367:65;;13442:29;13490:5;13474:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;13442:54;;13512:9;13524:1;13512:13;;13507:173;13531:5;13527:1;:9;13507:173;;;13633:12;13646:5;13656:11;13652:1;:15;;;;:::i;:::-;13646:22;;;;;;;;:::i;:::-;;;;;;;;;13633:36;;;;;;:::i;:::-;;;;;;;;;;;;;13617:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:10;13628:1;13617:13;;;;;;;;:::i;:::-;;;;;;;:52;;;;13538:3;;;;;;;13507:173;;;;13696:10;13689:17;;;;;13087:626;;;;;:::o;1032:47::-;;;:::o;752:26::-;;;;:::o;2075:21::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1568:223:0:-;1399:12;:10;:12::i;:::-;1388:23;;:7;:5;:7::i;:::-;:23;;;1380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1689:1:::1;1669:22;;:8;:22;;::::0;1648:107:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1765:19;1775:8;1765:9;:19::i;:::-;1568:223:::0;:::o;1966:41:1:-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;522:29::-;;;:::o;817:96:0:-;870:7;896:10;889:17;;817:96;:::o;6322:160::-;6404:71;6424:5;6446;:14;;;6463:2;6467:5;6431:43;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6404:19;:71::i;:::-;6322:160;;;:::o;10648:117::-;10178:16;:14;:16::i;:::-;10716:5:::1;10706:7;;:15;;;;;;;;;;;;;;;;;;10736:22;10745:12;:10;:12::i;:::-;10736:22;;;;;;:::i;:::-;;;;;;;;10648:117::o:0;5859:104::-;5917:7;5947:1;5943;:5;:13;;5955:1;5943:13;;;5951:1;5943:13;5936:20;;5859:104;;;;:::o;1796:170::-;1852:16;1871:6;;;;;;;;;;;1852:25;;1896:8;1887:6;;:17;;;;;;;;;;;;;;;;;;1950:8;1919:40;;1940:8;1919:40;;;;;;;;;;;;1842:124;1796:170;:::o;10528:115::-;10104:19;:17;:19::i;:::-;10597:4:::1;10587:7;;:14;;;;;;;;;;;;;;;;;;10616:20;10623:12;:10;:12::i;:::-;10616:20;;;;;;:::i;:::-;;;;;;;;10528:115::o:0;10306:106::-;10376:8;:6;:8::i;:::-;10375:9;10367:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;10306:106::o;6487:260::-;6625:115;6658:5;6692;:18;;;6713:4;6719:2;6723:5;6677:53;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6625:19;:115::i;:::-;6487:260;;;;:::o;9227:290::-;9307:23;9333:33;9361:4;9341:5;9333:27;;;;:33;;;;:::i;:::-;9307:59;;9401:1;9380:10;:17;:22;;:57;;;;;9418:10;9407:30;;;;;;;;;;;;:::i;:::-;9406:31;9380:57;9376:135;;;9493:5;9460:40;;;;;;;;;;;:::i;:::-;;;;;;;;9376:135;9297:220;9227:290;;:::o;10417:106::-;10483:8;:6;:8::i;:::-;10475:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;10417:106::o;2722:173::-;2819:12;2850:38;2872:6;2880:4;2886:1;2850:21;:38::i;:::-;2843:45;;2722:173;;;;:::o;2900:444::-;3029:12;3081:5;3057:21;:29;3053:108;;;3144:4;3109:41;;;;;;;;;;;:::i;:::-;;;;;;;;3053:108;3171:12;3185:23;3212:6;:11;;3231:5;3251:4;3212:53;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3170:95;;;;3282:55;3309:6;3317:7;3326:10;3282:26;:55::i;:::-;3275:62;;;;2900:444;;;;;:::o;3910:412::-;4054:12;4083:7;4078:238;;4106:19;4114:10;4106:7;:19::i;:::-;4078:238;;;4181:1;4160:10;:17;:22;:49;;;;;4208:1;4186:6;:18;;;:23;4160:49;4156:119;;;4253:6;4236:24;;;;;;;;;;;:::i;:::-;;;;;;;;4156:119;4295:10;4288:17;;;;4078:238;3910:412;;;;;;:::o;4578:366::-;4667:1;4647:10;:17;:21;4643:295;;;4787:10;4781:17;4843:15;4830:10;4826:2;4822:19;4815:44;4643:295;4910:17;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:77:2:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:75::-;475:6;508:2;502:9;492:19;;442:75;:::o;523:117::-;632:1;629;622:12;646:117;755:1;752;745:12;769:126;806:7;846:42;839:5;835:54;824:65;;769:126;;;:::o;901:96::-;938:7;967:24;985:5;967:24;:::i;:::-;956:35;;901:96;;;:::o;1003:122::-;1076:24;1094:5;1076:24;:::i;:::-;1069:5;1066:35;1056:63;;1115:1;1112;1105:12;1056:63;1003:122;:::o;1131:139::-;1177:5;1215:6;1202:20;1193:29;;1231:33;1258:5;1231:33;:::i;:::-;1131:139;;;;:::o;1276:122::-;1349:24;1367:5;1349:24;:::i;:::-;1342:5;1339:35;1329:63;;1388:1;1385;1378:12;1329:63;1276:122;:::o;1404:139::-;1450:5;1488:6;1475:20;1466:29;;1504:33;1531:5;1504:33;:::i;:::-;1404:139;;;;:::o;1549:474::-;1617:6;1625;1674:2;1662:9;1653:7;1649:23;1645:32;1642:119;;;1680:79;;:::i;:::-;1642:119;1800:1;1825:53;1870:7;1861:6;1850:9;1846:22;1825:53;:::i;:::-;1815:63;;1771:117;1927:2;1953:53;1998:7;1989:6;1978:9;1974:22;1953:53;:::i;:::-;1943:63;;1898:118;1549:474;;;;;:::o;2029:329::-;2088:6;2137:2;2125:9;2116:7;2112:23;2108:32;2105:119;;;2143:79;;:::i;:::-;2105:119;2263:1;2288:53;2333:7;2324:6;2313:9;2309:22;2288:53;:::i;:::-;2278:63;;2234:117;2029:329;;;;:::o;2364:117::-;2473:1;2470;2463:12;2487:117;2596:1;2593;2586:12;2610:117;2719:1;2716;2709:12;2747:553;2805:8;2815:6;2865:3;2858:4;2850:6;2846:17;2842:27;2832:122;;2873:79;;:::i;:::-;2832:122;2986:6;2973:20;2963:30;;3016:18;3008:6;3005:30;3002:117;;;3038:79;;:::i;:::-;3002:117;3152:4;3144:6;3140:17;3128:29;;3206:3;3198:4;3190:6;3186:17;3176:8;3172:32;3169:41;3166:128;;;3213:79;;:::i;:::-;3166:128;2747:553;;;;;:::o;3306:90::-;3340:7;3383:5;3376:13;3369:21;3358:32;;3306:90;;;:::o;3402:116::-;3472:21;3487:5;3472:21;:::i;:::-;3465:5;3462:32;3452:60;;3508:1;3505;3498:12;3452:60;3402:116;:::o;3524:133::-;3567:5;3605:6;3592:20;3583:29;;3621:30;3645:5;3621:30;:::i;:::-;3524:133;;;;:::o;3663:668::-;3740:6;3748;3756;3805:2;3793:9;3784:7;3780:23;3776:32;3773:119;;;3811:79;;:::i;:::-;3773:119;3959:1;3948:9;3944:17;3931:31;3989:18;3981:6;3978:30;3975:117;;;4011:79;;:::i;:::-;3975:117;4124:65;4181:7;4172:6;4161:9;4157:22;4124:65;:::i;:::-;4106:83;;;;3902:297;4238:2;4264:50;4306:7;4297:6;4286:9;4282:22;4264:50;:::i;:::-;4254:60;;4209:115;3663:668;;;;;:::o;4337:60::-;4365:3;4386:5;4379:12;;4337:60;;;:::o;4403:142::-;4453:9;4486:53;4504:34;4513:24;4531:5;4513:24;:::i;:::-;4504:34;:::i;:::-;4486:53;:::i;:::-;4473:66;;4403:142;;;:::o;4551:126::-;4601:9;4634:37;4665:5;4634:37;:::i;:::-;4621:50;;4551:126;;;:::o;4683:139::-;4746:9;4779:37;4810:5;4779:37;:::i;:::-;4766:50;;4683:139;;;:::o;4828:157::-;4928:50;4972:5;4928:50;:::i;:::-;4923:3;4916:63;4828:157;;:::o;4991:248::-;5097:4;5135:2;5124:9;5120:18;5112:26;;5148:84;5229:1;5218:9;5214:17;5205:6;5148:84;:::i;:::-;4991:248;;;;:::o;5245:819::-;5334:6;5342;5350;5358;5407:2;5395:9;5386:7;5382:23;5378:32;5375:119;;;5413:79;;:::i;:::-;5375:119;5561:1;5550:9;5546:17;5533:31;5591:18;5583:6;5580:30;5577:117;;;5613:79;;:::i;:::-;5577:117;5726:65;5783:7;5774:6;5763:9;5759:22;5726:65;:::i;:::-;5708:83;;;;5504:297;5840:2;5866:53;5911:7;5902:6;5891:9;5887:22;5866:53;:::i;:::-;5856:63;;5811:118;5968:2;5994:53;6039:7;6030:6;6019:9;6015:22;5994:53;:::i;:::-;5984:63;;5939:118;5245:819;;;;;;;:::o;6070:145::-;6168:6;6202:5;6196:12;6186:22;;6070:145;;;:::o;6221:215::-;6351:11;6385:6;6380:3;6373:19;6425:4;6420:3;6416:14;6401:29;;6221:215;;;;:::o;6442:163::-;6540:4;6563:3;6555:11;;6593:4;6588:3;6584:14;6576:22;;6442:163;;;:::o;6611:108::-;6688:24;6706:5;6688:24;:::i;:::-;6683:3;6676:37;6611:108;;:::o;6725:::-;6802:24;6820:5;6802:24;:::i;:::-;6797:3;6790:37;6725:108;;:::o;6839:99::-;6910:21;6925:5;6910:21;:::i;:::-;6905:3;6898:34;6839:99;;:::o;7012:1238::-;7161:4;7156:3;7152:14;7248:4;7241:5;7237:16;7231:23;7267:63;7324:4;7319:3;7315:14;7301:12;7267:63;:::i;:::-;7176:164;7424:4;7417:5;7413:16;7407:23;7443:63;7500:4;7495:3;7491:14;7477:12;7443:63;:::i;:::-;7350:166;7608:4;7601:5;7597:16;7591:23;7627:57;7678:4;7673:3;7669:14;7655:12;7627:57;:::i;:::-;7526:168;7782:4;7775:5;7771:16;7765:23;7801:63;7858:4;7853:3;7849:14;7835:12;7801:63;:::i;:::-;7704:170;7969:4;7962:5;7958:16;7952:23;7988:63;8045:4;8040:3;8036:14;8022:12;7988:63;:::i;:::-;7884:177;8151:4;8144:5;8140:16;8134:23;8170:63;8227:4;8222:3;8218:14;8204:12;8170:63;:::i;:::-;8071:172;7130:1120;7012:1238;;:::o;8256:303::-;8387:10;8408:108;8512:3;8504:6;8408:108;:::i;:::-;8548:4;8543:3;8539:14;8525:28;;8256:303;;;;:::o;8565:144::-;8666:4;8698;8693:3;8689:14;8681:22;;8565:144;;;:::o;8787:980::-;8968:3;8997:85;9076:5;8997:85;:::i;:::-;9098:117;9208:6;9203:3;9098:117;:::i;:::-;9091:124;;9239:87;9320:5;9239:87;:::i;:::-;9349:7;9380:1;9365:377;9390:6;9387:1;9384:13;9365:377;;;9466:6;9460:13;9493:125;9614:3;9599:13;9493:125;:::i;:::-;9486:132;;9641:91;9725:6;9641:91;:::i;:::-;9631:101;;9425:317;9412:1;9409;9405:9;9400:14;;9365:377;;;9369:14;9758:3;9751:10;;8973:794;;;8787:980;;;;:::o;9773:497::-;9978:4;10016:2;10005:9;10001:18;9993:26;;10065:9;10059:4;10055:20;10051:1;10040:9;10036:17;10029:47;10093:170;10258:4;10249:6;10093:170;:::i;:::-;10085:178;;9773:497;;;;:::o;10276:529::-;10347:6;10355;10404:2;10392:9;10383:7;10379:23;10375:32;10372:119;;;10410:79;;:::i;:::-;10372:119;10558:1;10547:9;10543:17;10530:31;10588:18;10580:6;10577:30;10574:117;;;10610:79;;:::i;:::-;10574:117;10723:65;10780:7;10771:6;10760:9;10756:22;10723:65;:::i;:::-;10705:83;;;;10501:297;10276:529;;;;;:::o;10811:117::-;10920:1;10917;10910:12;10934:102;10975:6;11026:2;11022:7;11017:2;11010:5;11006:14;11002:28;10992:38;;10934:102;;;:::o;11042:180::-;11090:77;11087:1;11080:88;11187:4;11184:1;11177:15;11211:4;11208:1;11201:15;11228:281;11311:27;11333:4;11311:27;:::i;:::-;11303:6;11299:40;11441:6;11429:10;11426:22;11405:18;11393:10;11390:34;11387:62;11384:88;;;11452:18;;:::i;:::-;11384:88;11492:10;11488:2;11481:22;11271:238;11228:281;;:::o;11515:129::-;11549:6;11576:20;;:::i;:::-;11566:30;;11605:33;11633:4;11625:6;11605:33;:::i;:::-;11515:129;;;:::o;11650:308::-;11712:4;11802:18;11794:6;11791:30;11788:56;;;11824:18;;:::i;:::-;11788:56;11862:29;11884:6;11862:29;:::i;:::-;11854:37;;11946:4;11940;11936:15;11928:23;;11650:308;;;:::o;11964:148::-;12062:6;12057:3;12052;12039:30;12103:1;12094:6;12089:3;12085:16;12078:27;11964:148;;;:::o;12118:425::-;12196:5;12221:66;12237:49;12279:6;12237:49;:::i;:::-;12221:66;:::i;:::-;12212:75;;12310:6;12303:5;12296:21;12348:4;12341:5;12337:16;12386:3;12377:6;12372:3;12368:16;12365:25;12362:112;;;12393:79;;:::i;:::-;12362:112;12483:54;12530:6;12525:3;12520;12483:54;:::i;:::-;12202:341;12118:425;;;;;:::o;12563:340::-;12619:5;12668:3;12661:4;12653:6;12649:17;12645:27;12635:122;;12676:79;;:::i;:::-;12635:122;12793:6;12780:20;12818:79;12893:3;12885:6;12878:4;12870:6;12866:17;12818:79;:::i;:::-;12809:88;;12625:278;12563:340;;;;:::o;12909:509::-;12978:6;13027:2;13015:9;13006:7;13002:23;12998:32;12995:119;;;13033:79;;:::i;:::-;12995:119;13181:1;13170:9;13166:17;13153:31;13211:18;13203:6;13200:30;13197:117;;;13233:79;;:::i;:::-;13197:117;13338:63;13393:7;13384:6;13373:9;13369:22;13338:63;:::i;:::-;13328:73;;13124:287;12909:509;;;;:::o;13424:118::-;13511:24;13529:5;13511:24;:::i;:::-;13506:3;13499:37;13424:118;;:::o;13548:109::-;13629:21;13644:5;13629:21;:::i;:::-;13624:3;13617:34;13548:109;;:::o;13663:86::-;13698:7;13738:4;13731:5;13727:16;13716:27;;13663:86;;;:::o;13755:112::-;13838:22;13854:5;13838:22;:::i;:::-;13833:3;13826:35;13755:112;;:::o;13873:99::-;13925:6;13959:5;13953:12;13943:22;;13873:99;;;:::o;13978:169::-;14062:11;14096:6;14091:3;14084:19;14136:4;14131:3;14127:14;14112:29;;13978:169;;;;:::o;14153:139::-;14242:6;14237:3;14232;14226:23;14283:1;14274:6;14269:3;14265:16;14258:27;14153:139;;;:::o;14298:377::-;14386:3;14414:39;14447:5;14414:39;:::i;:::-;14469:71;14533:6;14528:3;14469:71;:::i;:::-;14462:78;;14549:65;14607:6;14602:3;14595:4;14588:5;14584:16;14549:65;:::i;:::-;14639:29;14661:6;14639:29;:::i;:::-;14634:3;14630:39;14623:46;;14390:285;14298:377;;;;:::o;14681:1179::-;15008:4;15046:3;15035:9;15031:19;15023:27;;15060:71;15128:1;15117:9;15113:17;15104:6;15060:71;:::i;:::-;15141:66;15203:2;15192:9;15188:18;15179:6;15141:66;:::i;:::-;15217:68;15281:2;15270:9;15266:18;15257:6;15217:68;:::i;:::-;15295:72;15363:2;15352:9;15348:18;15339:6;15295:72;:::i;:::-;15377:73;15445:3;15434:9;15430:19;15421:6;15377:73;:::i;:::-;15460;15528:3;15517:9;15513:19;15504:6;15460:73;:::i;:::-;15543;15611:3;15600:9;15596:19;15587:6;15543:73;:::i;:::-;15626;15694:3;15683:9;15679:19;15670:6;15626:73;:::i;:::-;15747:9;15741:4;15737:20;15731:3;15720:9;15716:19;15709:49;15775:78;15848:4;15839:6;15775:78;:::i;:::-;15767:86;;14681:1179;;;;;;;;;;;;:::o;15866:118::-;15937:22;15953:5;15937:22;:::i;:::-;15930:5;15927:33;15917:61;;15974:1;15971;15964:12;15917:61;15866:118;:::o;15990:135::-;16034:5;16072:6;16059:20;16050:29;;16088:31;16113:5;16088:31;:::i;:::-;15990:135;;;;:::o;16131:670::-;16209:6;16217;16225;16274:2;16262:9;16253:7;16249:23;16245:32;16242:119;;;16280:79;;:::i;:::-;16242:119;16428:1;16417:9;16413:17;16400:31;16458:18;16450:6;16447:30;16444:117;;;16480:79;;:::i;:::-;16444:117;16593:65;16650:7;16641:6;16630:9;16626:22;16593:65;:::i;:::-;16575:83;;;;16371:297;16707:2;16733:51;16776:7;16767:6;16756:9;16752:22;16733:51;:::i;:::-;16723:61;;16678:116;16131:670;;;;;:::o;16807:210::-;16894:4;16932:2;16921:9;16917:18;16909:26;;16945:65;17007:1;16996:9;16992:17;16983:6;16945:65;:::i;:::-;16807:210;;;;:::o;17023:815::-;17110:6;17118;17126;17134;17183:2;17171:9;17162:7;17158:23;17154:32;17151:119;;;17189:79;;:::i;:::-;17151:119;17337:1;17326:9;17322:17;17309:31;17367:18;17359:6;17356:30;17353:117;;;17389:79;;:::i;:::-;17353:117;17502:65;17559:7;17550:6;17539:9;17535:22;17502:65;:::i;:::-;17484:83;;;;17280:297;17616:2;17642:53;17687:7;17678:6;17667:9;17663:22;17642:53;:::i;:::-;17632:63;;17587:118;17744:2;17770:51;17813:7;17804:6;17793:9;17789:22;17770:51;:::i;:::-;17760:61;;17715:116;17023:815;;;;;;;:::o;17844:222::-;17937:4;17975:2;17964:9;17960:18;17952:26;;17988:71;18056:1;18045:9;18041:17;18032:6;17988:71;:::i;:::-;17844:222;;;;:::o;18072:654::-;18150:6;18158;18207:2;18195:9;18186:7;18182:23;18178:32;18175:119;;;18213:79;;:::i;:::-;18175:119;18361:1;18350:9;18346:17;18333:31;18391:18;18383:6;18380:30;18377:117;;;18413:79;;:::i;:::-;18377:117;18518:63;18573:7;18564:6;18553:9;18549:22;18518:63;:::i;:::-;18508:73;;18304:287;18630:2;18656:53;18701:7;18692:6;18681:9;18677:22;18656:53;:::i;:::-;18646:63;;18601:118;18072:654;;;;;:::o;18732:763::-;18959:4;18997:3;18986:9;18982:19;18974:27;;19011:71;19079:1;19068:9;19064:17;19055:6;19011:71;:::i;:::-;19092:72;19160:2;19149:9;19145:18;19136:6;19092:72;:::i;:::-;19174:66;19236:2;19225:9;19221:18;19212:6;19174:66;:::i;:::-;19250:72;19318:2;19307:9;19303:18;19294:6;19250:72;:::i;:::-;19332:73;19400:3;19389:9;19385:19;19376:6;19332:73;:::i;:::-;19415;19483:3;19472:9;19468:19;19459:6;19415:73;:::i;:::-;18732:763;;;;;;;;;:::o;19501:674::-;19581:6;19589;19597;19646:2;19634:9;19625:7;19621:23;19617:32;19614:119;;;19652:79;;:::i;:::-;19614:119;19772:1;19797:53;19842:7;19833:6;19822:9;19818:22;19797:53;:::i;:::-;19787:63;;19743:117;19927:2;19916:9;19912:18;19899:32;19958:18;19950:6;19947:30;19944:117;;;19980:79;;:::i;:::-;19944:117;20093:65;20150:7;20141:6;20130:9;20126:22;20093:65;:::i;:::-;20075:83;;;;19870:298;19501:674;;;;;:::o;20181:474::-;20249:6;20257;20306:2;20294:9;20285:7;20281:23;20277:32;20274:119;;;20312:79;;:::i;:::-;20274:119;20432:1;20457:53;20502:7;20493:6;20482:9;20478:22;20457:53;:::i;:::-;20447:63;;20403:117;20559:2;20585:53;20630:7;20621:6;20610:9;20606:22;20585:53;:::i;:::-;20575:63;;20530:118;20181:474;;;;;:::o;20661:141::-;20755:6;20789:5;20783:12;20773:22;;20661:141;;;:::o;20808:211::-;20934:11;20968:6;20963:3;20956:19;21008:4;21003:3;20999:14;20984:29;;20808:211;;;;:::o;21025:159::-;21119:4;21142:3;21134:11;;21172:4;21167:3;21163:14;21155:22;;21025:159;;;:::o;21190:102::-;21263:22;21279:5;21263:22;:::i;:::-;21258:3;21251:35;21190:102;;:::o;21298:159::-;21372:11;21406:6;21401:3;21394:19;21446:4;21441:3;21437:14;21422:29;;21298:159;;;;:::o;21463:357::-;21541:3;21569:39;21602:5;21569:39;:::i;:::-;21624:61;21678:6;21673:3;21624:61;:::i;:::-;21617:68;;21694:65;21752:6;21747:3;21740:4;21733:5;21729:16;21694:65;:::i;:::-;21784:29;21806:6;21784:29;:::i;:::-;21779:3;21775:39;21768:46;;21545:275;21463:357;;;;:::o;21886:1866::-;21999:3;22035:6;22030:3;22026:16;22124:4;22117:5;22113:16;22107:23;22143:63;22200:4;22195:3;22191:14;22177:12;22143:63;:::i;:::-;22052:164;22301:4;22294:5;22290:16;22284:23;22320:57;22371:4;22366:3;22362:14;22348:12;22320:57;:::i;:::-;22226:161;22478:4;22471:5;22467:16;22461:23;22497:59;22550:4;22545:3;22541:14;22527:12;22497:59;:::i;:::-;22397:169;22654:4;22647:5;22643:16;22637:23;22673:63;22730:4;22725:3;22721:14;22707:12;22673:63;:::i;:::-;22576:170;22834:4;22827:5;22823:16;22817:23;22853:63;22910:4;22905:3;22901:14;22887:12;22853:63;:::i;:::-;22756:170;23016:4;23009:5;23005:16;22999:23;23035:63;23092:4;23087:3;23083:14;23069:12;23035:63;:::i;:::-;22936:172;23199:4;23192:5;23188:16;23182:23;23218:63;23275:4;23270:3;23266:14;23252:12;23218:63;:::i;:::-;23118:173;23384:4;23377:5;23373:16;23367:23;23403:63;23460:4;23455:3;23451:14;23437:12;23403:63;:::i;:::-;23301:175;23558:6;23551:5;23547:18;23541:25;23615:3;23609:4;23605:14;23596:6;23591:3;23587:16;23580:40;23641:73;23709:4;23695:12;23641:73;:::i;:::-;23633:81;;23486:239;23742:4;23735:11;;22004:1748;21886:1866;;;;:::o;23758:264::-;23881:10;23916:100;24012:3;24004:6;23916:100;:::i;:::-;23902:114;;23758:264;;;;:::o;24028:140::-;24125:4;24157;24152:3;24148:14;24140:22;;24028:140;;;:::o;24238:1127::-;24411:3;24440:81;24515:5;24440:81;:::i;:::-;24537:113;24643:6;24638:3;24537:113;:::i;:::-;24530:120;;24676:3;24721:4;24713:6;24709:17;24704:3;24700:27;24751:83;24828:5;24751:83;:::i;:::-;24857:7;24888:1;24873:447;24898:6;24895:1;24892:13;24873:447;;;24969:9;24963:4;24959:20;24954:3;24947:33;25020:6;25014:13;25048:118;25161:4;25146:13;25048:118;:::i;:::-;25040:126;;25189:87;25269:6;25189:87;:::i;:::-;25179:97;;25305:4;25300:3;25296:14;25289:21;;24933:387;24920:1;24917;24913:9;24908:14;;24873:447;;;24877:14;25336:4;25329:11;;25356:3;25349:10;;24416:949;;;;;24238:1127;;;;:::o;25371:481::-;25568:4;25606:2;25595:9;25591:18;25583:26;;25655:9;25649:4;25645:20;25641:1;25630:9;25626:17;25619:47;25683:162;25840:4;25831:6;25683:162;:::i;:::-;25675:170;;25371:481;;;;:::o;25858:144::-;25926:9;25959:37;25990:5;25959:37;:::i;:::-;25946:50;;25858:144;;;:::o;26008:167::-;26113:55;26162:5;26113:55;:::i;:::-;26108:3;26101:68;26008:167;;:::o;26181:258::-;26292:4;26330:2;26319:9;26315:18;26307:26;;26343:89;26429:1;26418:9;26414:17;26405:6;26343:89;:::i;:::-;26181:258;;;;:::o;26445:313::-;26558:4;26596:2;26585:9;26581:18;26573:26;;26645:9;26639:4;26635:20;26631:1;26620:9;26616:17;26609:47;26673:78;26746:4;26737:6;26673:78;:::i;:::-;26665:86;;26445:313;;;;:::o;26764:329::-;26823:6;26872:2;26860:9;26851:7;26847:23;26843:32;26840:119;;;26878:79;;:::i;:::-;26840:119;26998:1;27023:53;27068:7;27059:6;27048:9;27044:22;27023:53;:::i;:::-;27013:63;;26969:117;26764:329;;;;:::o;27099:143::-;27156:5;27187:6;27181:13;27172:22;;27203:33;27230:5;27203:33;:::i;:::-;27099:143;;;;:::o;27248:351::-;27318:6;27367:2;27355:9;27346:7;27342:23;27338:32;27335:119;;;27373:79;;:::i;:::-;27335:119;27493:1;27518:64;27574:7;27565:6;27554:9;27550:22;27518:64;:::i;:::-;27508:74;;27464:128;27248:351;;;;:::o;27605:182::-;27745:34;27741:1;27733:6;27729:14;27722:58;27605:182;:::o;27793:366::-;27935:3;27956:67;28020:2;28015:3;27956:67;:::i;:::-;27949:74;;28032:93;28121:3;28032:93;:::i;:::-;28150:2;28145:3;28141:12;28134:19;;27793:366;;;:::o;28165:419::-;28331:4;28369:2;28358:9;28354:18;28346:26;;28418:9;28412:4;28408:20;28404:1;28393:9;28389:17;28382:47;28446:131;28572:4;28446:131;:::i;:::-;28438:139;;28165:419;;;:::o;28590:180::-;28638:77;28635:1;28628:88;28735:4;28732:1;28725:15;28759:4;28756:1;28749:15;28776:194;28816:4;28836:20;28854:1;28836:20;:::i;:::-;28831:25;;28870:20;28888:1;28870:20;:::i;:::-;28865:25;;28914:1;28911;28907:9;28899:17;;28938:1;28932:4;28929:11;28926:37;;;28943:18;;:::i;:::-;28926:37;28776:194;;;;:::o;28976:169::-;29116:21;29112:1;29104:6;29100:14;29093:45;28976:169;:::o;29151:366::-;29293:3;29314:67;29378:2;29373:3;29314:67;:::i;:::-;29307:74;;29390:93;29479:3;29390:93;:::i;:::-;29508:2;29503:3;29499:12;29492:19;;29151:366;;;:::o;29523:419::-;29689:4;29727:2;29716:9;29712:18;29704:26;;29776:9;29770:4;29766:20;29762:1;29751:9;29747:17;29740:47;29804:131;29930:4;29804:131;:::i;:::-;29796:139;;29523:419;;;:::o;29948:167::-;30088:19;30084:1;30076:6;30072:14;30065:43;29948:167;:::o;30121:366::-;30263:3;30284:67;30348:2;30343:3;30284:67;:::i;:::-;30277:74;;30360:93;30449:3;30360:93;:::i;:::-;30478:2;30473:3;30469:12;30462:19;;30121:366;;;:::o;30493:419::-;30659:4;30697:2;30686:9;30682:18;30674:26;;30746:9;30740:4;30736:20;30732:1;30721:9;30717:17;30710:47;30774:131;30900:4;30774:131;:::i;:::-;30766:139;;30493:419;;;:::o;30918:410::-;30958:7;30981:20;30999:1;30981:20;:::i;:::-;30976:25;;31015:20;31033:1;31015:20;:::i;:::-;31010:25;;31070:1;31067;31063:9;31092:30;31110:11;31092:30;:::i;:::-;31081:41;;31271:1;31262:7;31258:15;31255:1;31252:22;31232:1;31225:9;31205:83;31182:139;;31301:18;;:::i;:::-;31182:139;30966:362;30918:410;;;;:::o;31334:180::-;31382:77;31379:1;31372:88;31479:4;31476:1;31469:15;31503:4;31500:1;31493:15;31520:185;31560:1;31577:20;31595:1;31577:20;:::i;:::-;31572:25;;31611:20;31629:1;31611:20;:::i;:::-;31606:25;;31650:1;31640:35;;31655:18;;:::i;:::-;31640:35;31697:1;31694;31690:9;31685:14;;31520:185;;;;:::o;31711:148::-;31813:11;31850:3;31835:18;;31711:148;;;;:::o;31889:330::-;32005:3;32026:89;32108:6;32103:3;32026:89;:::i;:::-;32019:96;;32125:56;32174:6;32169:3;32162:5;32125:56;:::i;:::-;32206:6;32201:3;32197:16;32190:23;;31889:330;;;;;:::o;32225:295::-;32367:3;32389:105;32490:3;32481:6;32473;32389:105;:::i;:::-;32382:112;;32511:3;32504:10;;32225:295;;;;;:::o;32526:162::-;32666:14;32662:1;32654:6;32650:14;32643:38;32526:162;:::o;32694:366::-;32836:3;32857:67;32921:2;32916:3;32857:67;:::i;:::-;32850:74;;32933:93;33022:3;32933:93;:::i;:::-;33051:2;33046:3;33042:12;33035:19;;32694:366;;;:::o;33066:419::-;33232:4;33270:2;33259:9;33255:18;33247:26;;33319:9;33313:4;33309:20;33305:1;33294:9;33290:17;33283:47;33347:131;33473:4;33347:131;:::i;:::-;33339:139;;33066:419;;;:::o;33491:114::-;;:::o;33611:400::-;33771:3;33792:84;33874:1;33869:3;33792:84;:::i;:::-;33785:91;;33885:93;33974:3;33885:93;:::i;:::-;34003:1;33998:3;33994:11;33987:18;;33611:400;;;:::o;34017:381::-;34202:3;34224:148;34368:3;34224:148;:::i;:::-;34217:155;;34389:3;34382:10;;34017:381;;;:::o;34404:180::-;34452:77;34449:1;34442:88;34549:4;34546:1;34539:15;34573:4;34570:1;34563:15;34590:320;34634:6;34671:1;34665:4;34661:12;34651:22;;34718:1;34712:4;34708:12;34739:18;34729:81;;34795:4;34787:6;34783:17;34773:27;;34729:81;34857:2;34849:6;34846:14;34826:18;34823:38;34820:84;;34876:18;;:::i;:::-;34820:84;34641:269;34590:320;;;:::o;34916:141::-;34965:4;34988:3;34980:11;;35011:3;35008:1;35001:14;35045:4;35042:1;35032:18;35024:26;;34916:141;;;:::o;35087:874::-;35190:3;35227:5;35221:12;35256:36;35282:9;35256:36;:::i;:::-;35308:89;35390:6;35385:3;35308:89;:::i;:::-;35301:96;;35428:1;35417:9;35413:17;35444:1;35439:166;;;;35619:1;35614:341;;;;35406:549;;35439:166;35523:4;35519:9;35508;35504:25;35499:3;35492:38;35585:6;35578:14;35571:22;35563:6;35559:35;35554:3;35550:45;35543:52;;35439:166;;35614:341;35681:38;35713:5;35681:38;:::i;:::-;35741:1;35755:154;35769:6;35766:1;35763:13;35755:154;;;35843:7;35837:14;35833:1;35828:3;35824:11;35817:35;35893:1;35884:7;35880:15;35869:26;;35791:4;35788:1;35784:12;35779:17;;35755:154;;;35938:6;35933:3;35929:16;35922:23;;35621:334;;35406:549;;35194:767;;35087:874;;;;:::o;35967:269::-;36096:3;36118:92;36206:3;36197:6;36118:92;:::i;:::-;36111:99;;36227:3;36220:10;;35967:269;;;;:::o;36242:174::-;36382:26;36378:1;36370:6;36366:14;36359:50;36242:174;:::o;36422:366::-;36564:3;36585:67;36649:2;36644:3;36585:67;:::i;:::-;36578:74;;36661:93;36750:3;36661:93;:::i;:::-;36779:2;36774:3;36770:12;36763:19;;36422:366;;;:::o;36794:419::-;36960:4;36998:2;36987:9;36983:18;36975:26;;37047:9;37041:4;37037:20;37033:1;37022:9;37018:17;37011:47;37075:131;37201:4;37075:131;:::i;:::-;37067:139;;36794:419;;;:::o;37219:191::-;37259:3;37278:20;37296:1;37278:20;:::i;:::-;37273:25;;37312:20;37330:1;37312:20;:::i;:::-;37307:25;;37355:1;37352;37348:9;37341:16;;37376:3;37373:1;37370:10;37367:36;;;37383:18;;:::i;:::-;37367:36;37219:191;;;;:::o;37416:180::-;37464:77;37461:1;37454:88;37561:4;37558:1;37551:15;37585:4;37582:1;37575:15;37602:175;37742:27;37738:1;37730:6;37726:14;37719:51;37602:175;:::o;37783:366::-;37925:3;37946:67;38010:2;38005:3;37946:67;:::i;:::-;37939:74;;38022:93;38111:3;38022:93;:::i;:::-;38140:2;38135:3;38131:12;38124:19;;37783:366;;;:::o;38155:419::-;38321:4;38359:2;38348:9;38344:18;38336:26;;38408:9;38402:4;38398:20;38394:1;38383:9;38379:17;38372:47;38436:131;38562:4;38436:131;:::i;:::-;38428:139;;38155:419;;;:::o;38580:172::-;38720:24;38716:1;38708:6;38704:14;38697:48;38580:172;:::o;38758:366::-;38900:3;38921:67;38985:2;38980:3;38921:67;:::i;:::-;38914:74;;38997:93;39086:3;38997:93;:::i;:::-;39115:2;39110:3;39106:12;39099:19;;38758:366;;;:::o;39130:419::-;39296:4;39334:2;39323:9;39319:18;39311:26;;39383:9;39377:4;39373:20;39369:1;39358:9;39354:17;39347:47;39411:131;39537:4;39411:131;:::i;:::-;39403:139;;39130:419;;;:::o;39555:227::-;39695:34;39691:1;39683:6;39679:14;39672:58;39764:10;39759:2;39751:6;39747:15;39740:35;39555:227;:::o;39788:366::-;39930:3;39951:67;40015:2;40010:3;39951:67;:::i;:::-;39944:74;;40027:93;40116:3;40027:93;:::i;:::-;40145:2;40140:3;40136:12;40129:19;;39788:366;;;:::o;40160:419::-;40326:4;40364:2;40353:9;40349:18;40341:26;;40413:9;40407:4;40403:20;40399:1;40388:9;40384:17;40377:47;40441:131;40567:4;40441:131;:::i;:::-;40433:139;;40160:419;;;:::o;40585:232::-;40725:34;40721:1;40713:6;40709:14;40702:58;40794:15;40789:2;40781:6;40777:15;40770:40;40585:232;:::o;40823:366::-;40965:3;40986:67;41050:2;41045:3;40986:67;:::i;:::-;40979:74;;41062:93;41151:3;41062:93;:::i;:::-;41180:2;41175:3;41171:12;41164:19;;40823:366;;;:::o;41195:419::-;41361:4;41399:2;41388:9;41384:18;41376:26;;41448:9;41442:4;41438:20;41434:1;41423:9;41419:17;41412:47;41476:131;41602:4;41476:131;:::i;:::-;41468:139;;41195:419;;;:::o;41620:177::-;41760:29;41756:1;41748:6;41744:14;41737:53;41620:177;:::o;41803:366::-;41945:3;41966:67;42030:2;42025:3;41966:67;:::i;:::-;41959:74;;42042:93;42131:3;42042:93;:::i;:::-;42160:2;42155:3;42151:12;42144:19;;41803:366;;;:::o;42175:419::-;42341:4;42379:2;42368:9;42364:18;42356:26;;42428:9;42422:4;42418:20;42414:1;42403:9;42399:17;42392:47;42456:131;42582:4;42456:131;:::i;:::-;42448:139;;42175:419;;;:::o;42600:169::-;42740:21;42736:1;42728:6;42724:14;42717:45;42600:169;:::o;42775:366::-;42917:3;42938:67;43002:2;42997:3;42938:67;:::i;:::-;42931:74;;43014:93;43103:3;43014:93;:::i;:::-;43132:2;43127:3;43123:12;43116:19;;42775:366;;;:::o;43147:419::-;43313:4;43351:2;43340:9;43336:18;43328:26;;43400:9;43394:4;43390:20;43386:1;43375:9;43371:17;43364:47;43428:131;43554:4;43428:131;:::i;:::-;43420:139;;43147:419;;;:::o;43572:173::-;43712:25;43708:1;43700:6;43696:14;43689:49;43572:173;:::o;43751:366::-;43893:3;43914:67;43978:2;43973:3;43914:67;:::i;:::-;43907:74;;43990:93;44079:3;43990:93;:::i;:::-;44108:2;44103:3;44099:12;44092:19;;43751:366;;;:::o;44123:419::-;44289:4;44327:2;44316:9;44312:18;44304:26;;44376:9;44370:4;44366:20;44362:1;44351:9;44347:17;44340:47;44404:131;44530:4;44404:131;:::i;:::-;44396:139;;44123:419;;;:::o;44548:93::-;44585:6;44632:2;44627;44620:5;44616:14;44612:23;44602:33;;44548:93;;;:::o;44647:107::-;44691:8;44741:5;44735:4;44731:16;44710:37;;44647:107;;;;:::o;44760:393::-;44829:6;44879:1;44867:10;44863:18;44902:97;44932:66;44921:9;44902:97;:::i;:::-;45020:39;45050:8;45039:9;45020:39;:::i;:::-;45008:51;;45092:4;45088:9;45081:5;45077:21;45068:30;;45141:4;45131:8;45127:19;45120:5;45117:30;45107:40;;44836:317;;44760:393;;;;;:::o;45159:142::-;45209:9;45242:53;45260:34;45269:24;45287:5;45269:24;:::i;:::-;45260:34;:::i;:::-;45242:53;:::i;:::-;45229:66;;45159:142;;;:::o;45307:75::-;45350:3;45371:5;45364:12;;45307:75;;;:::o;45388:269::-;45498:39;45529:7;45498:39;:::i;:::-;45559:91;45608:41;45632:16;45608:41;:::i;:::-;45600:6;45593:4;45587:11;45559:91;:::i;:::-;45553:4;45546:105;45464:193;45388:269;;;:::o;45663:73::-;45708:3;45729:1;45722:8;;45663:73;:::o;45742:189::-;45819:32;;:::i;:::-;45860:65;45918:6;45910;45904:4;45860:65;:::i;:::-;45795:136;45742:189;;:::o;45937:186::-;45997:120;46014:3;46007:5;46004:14;45997:120;;;46068:39;46105:1;46098:5;46068:39;:::i;:::-;46041:1;46034:5;46030:13;46021:22;;45997:120;;;45937:186;;:::o;46129:543::-;46230:2;46225:3;46222:11;46219:446;;;46264:38;46296:5;46264:38;:::i;:::-;46348:29;46366:10;46348:29;:::i;:::-;46338:8;46334:44;46531:2;46519:10;46516:18;46513:49;;;46552:8;46537:23;;46513:49;46575:80;46631:22;46649:3;46631:22;:::i;:::-;46621:8;46617:37;46604:11;46575:80;:::i;:::-;46234:431;;46219:446;46129:543;;;:::o;46678:117::-;46732:8;46782:5;46776:4;46772:16;46751:37;;46678:117;;;;:::o;46801:169::-;46845:6;46878:51;46926:1;46922:6;46914:5;46911:1;46907:13;46878:51;:::i;:::-;46874:56;46959:4;46953;46949:15;46939:25;;46852:118;46801:169;;;;:::o;46975:295::-;47051:4;47197:29;47222:3;47216:4;47197:29;:::i;:::-;47189:37;;47259:3;47256:1;47252:11;47246:4;47243:21;47235:29;;46975:295;;;;:::o;47275:1395::-;47392:37;47425:3;47392:37;:::i;:::-;47494:18;47486:6;47483:30;47480:56;;;47516:18;;:::i;:::-;47480:56;47560:38;47592:4;47586:11;47560:38;:::i;:::-;47645:67;47705:6;47697;47691:4;47645:67;:::i;:::-;47739:1;47763:4;47750:17;;47795:2;47787:6;47784:14;47812:1;47807:618;;;;48469:1;48486:6;48483:77;;;48535:9;48530:3;48526:19;48520:26;48511:35;;48483:77;48586:67;48646:6;48639:5;48586:67;:::i;:::-;48580:4;48573:81;48442:222;47777:887;;47807:618;47859:4;47855:9;47847:6;47843:22;47893:37;47925:4;47893:37;:::i;:::-;47952:1;47966:208;47980:7;47977:1;47974:14;47966:208;;;48059:9;48054:3;48050:19;48044:26;48036:6;48029:42;48110:1;48102:6;48098:14;48088:24;;48157:2;48146:9;48142:18;48129:31;;48003:4;48000:1;47996:12;47991:17;;47966:208;;;48202:6;48193:7;48190:19;48187:179;;;48260:9;48255:3;48251:19;48245:26;48303:48;48345:4;48337:6;48333:17;48322:9;48303:48;:::i;:::-;48295:6;48288:64;48210:156;48187:179;48412:1;48408;48400:6;48396:14;48392:22;48386:4;48379:36;47814:611;;;47777:887;;47367:1303;;;47275:1395;;:::o;48676:97::-;48735:6;48763:3;48753:13;;48676:97;;;;:::o;48779:1403::-;48903:44;48943:3;48938;48903:44;:::i;:::-;49012:18;49004:6;49001:30;48998:56;;;49034:18;;:::i;:::-;48998:56;49078:38;49110:4;49104:11;49078:38;:::i;:::-;49163:67;49223:6;49215;49209:4;49163:67;:::i;:::-;49257:1;49286:2;49278:6;49275:14;49303:1;49298:632;;;;49974:1;49991:6;49988:84;;;50047:9;50042:3;50038:19;50025:33;50016:42;;49988:84;50098:67;50158:6;50151:5;50098:67;:::i;:::-;50092:4;50085:81;49947:229;49268:908;;49298:632;49350:4;49346:9;49338:6;49334:22;49384:37;49416:4;49384:37;:::i;:::-;49443:1;49457:215;49471:7;49468:1;49465:14;49457:215;;;49557:9;49552:3;49548:19;49535:33;49527:6;49520:49;49608:1;49600:6;49596:14;49586:24;;49655:2;49644:9;49640:18;49627:31;;49494:4;49491:1;49487:12;49482:17;;49457:215;;;49700:6;49691:7;49688:19;49685:186;;;49765:9;49760:3;49756:19;49743:33;49808:48;49850:4;49842:6;49838:17;49827:9;49808:48;:::i;:::-;49800:6;49793:64;49708:163;49685:186;49917:1;49913;49905:6;49901:14;49897:22;49891:4;49884:36;49305:625;;;49268:908;;48878:1304;;;48779:1403;;;:::o;50188:182::-;50328:34;50324:1;50316:6;50312:14;50305:58;50188:182;:::o;50376:366::-;50518:3;50539:67;50603:2;50598:3;50539:67;:::i;:::-;50532:74;;50615:93;50704:3;50615:93;:::i;:::-;50733:2;50728:3;50724:12;50717:19;;50376:366;;;:::o;50748:419::-;50914:4;50952:2;50941:9;50937:18;50929:26;;51001:9;50995:4;50991:20;50987:1;50976:9;50972:17;50965:47;51029:131;51155:4;51029:131;:::i;:::-;51021:139;;50748:419;;;:::o;51173:172::-;51313:24;51309:1;51301:6;51297:14;51290:48;51173:172;:::o;51351:366::-;51493:3;51514:67;51578:2;51573:3;51514:67;:::i;:::-;51507:74;;51590:93;51679:3;51590:93;:::i;:::-;51708:2;51703:3;51699:12;51692:19;;51351:366;;;:::o;51723:419::-;51889:4;51927:2;51916:9;51912:18;51904:26;;51976:9;51970:4;51966:20;51962:1;51951:9;51947:17;51940:47;52004:131;52130:4;52004:131;:::i;:::-;51996:139;;51723:419;;;:::o;52148:163::-;52288:15;52284:1;52276:6;52272:14;52265:39;52148:163;:::o;52317:366::-;52459:3;52480:67;52544:2;52539:3;52480:67;:::i;:::-;52473:74;;52556:93;52645:3;52556:93;:::i;:::-;52674:2;52669:3;52665:12;52658:19;;52317:366;;;:::o;52689:419::-;52855:4;52893:2;52882:9;52878:18;52870:26;;52942:9;52936:4;52932:20;52928:1;52917:9;52913:17;52906:47;52970:131;53096:4;52970:131;:::i;:::-;52962:139;;52689:419;;;:::o;53114:164::-;53254:16;53250:1;53242:6;53238:14;53231:40;53114:164;:::o;53284:366::-;53426:3;53447:67;53511:2;53506:3;53447:67;:::i;:::-;53440:74;;53523:93;53612:3;53523:93;:::i;:::-;53641:2;53636:3;53632:12;53625:19;;53284:366;;;:::o;53656:419::-;53822:4;53860:2;53849:9;53845:18;53837:26;;53909:9;53903:4;53899:20;53895:1;53884:9;53880:17;53873:47;53937:131;54063:4;53937:131;:::i;:::-;53929:139;;53656:419;;;:::o;54081:105::-;54117:7;54157:22;54150:5;54146:34;54135:45;;54081:105;;;:::o;54192:120::-;54264:23;54281:5;54264:23;:::i;:::-;54257:5;54254:34;54244:62;;54302:1;54299;54292:12;54244:62;54192:120;:::o;54318:141::-;54374:5;54405:6;54399:13;54390:22;;54421:32;54447:5;54421:32;:::i;:::-;54318:141;;;;:::o;54465:76::-;54501:7;54530:5;54519:16;;54465:76;;;:::o;54547:120::-;54619:23;54636:5;54619:23;:::i;:::-;54612:5;54609:34;54599:62;;54657:1;54654;54647:12;54599:62;54547:120;:::o;54673:141::-;54729:5;54760:6;54754:13;54745:22;;54776:32;54802:5;54776:32;:::i;:::-;54673:141;;;;:::o;54820:971::-;54923:6;54931;54939;54947;54955;55004:3;54992:9;54983:7;54979:23;54975:33;54972:120;;;55011:79;;:::i;:::-;54972:120;55131:1;55156:63;55211:7;55202:6;55191:9;55187:22;55156:63;:::i;:::-;55146:73;;55102:127;55268:2;55294:63;55349:7;55340:6;55329:9;55325:22;55294:63;:::i;:::-;55284:73;;55239:128;55406:2;55432:64;55488:7;55479:6;55468:9;55464:22;55432:64;:::i;:::-;55422:74;;55377:129;55545:2;55571:64;55627:7;55618:6;55607:9;55603:22;55571:64;:::i;:::-;55561:74;;55516:129;55684:3;55711:63;55766:7;55757:6;55746:9;55742:22;55711:63;:::i;:::-;55701:73;;55655:129;54820:971;;;;;;;;:::o;55797:225::-;55937:34;55933:1;55925:6;55921:14;55914:58;56006:8;56001:2;55993:6;55989:15;55982:33;55797:225;:::o;56028:366::-;56170:3;56191:67;56255:2;56250:3;56191:67;:::i;:::-;56184:74;;56267:93;56356:3;56267:93;:::i;:::-;56385:2;56380:3;56376:12;56369:19;;56028:366;;;:::o;56400:419::-;56566:4;56604:2;56593:9;56589:18;56581:26;;56653:9;56647:4;56643:20;56639:1;56628:9;56624:17;56617:47;56681:131;56807:4;56681:131;:::i;:::-;56673:139;;56400:419;;;:::o;56825:332::-;56946:4;56984:2;56973:9;56969:18;56961:26;;56997:71;57065:1;57054:9;57050:17;57041:6;56997:71;:::i;:::-;57078:72;57146:2;57135:9;57131:18;57122:6;57078:72;:::i;:::-;56825:332;;;;;:::o;57163:166::-;57303:18;57299:1;57291:6;57287:14;57280:42;57163:166;:::o;57335:366::-;57477:3;57498:67;57562:2;57557:3;57498:67;:::i;:::-;57491:74;;57574:93;57663:3;57574:93;:::i;:::-;57692:2;57687:3;57683:12;57676:19;;57335:366;;;:::o;57707:419::-;57873:4;57911:2;57900:9;57896:18;57888:26;;57960:9;57954:4;57950:20;57946:1;57935:9;57931:17;57924:47;57988:131;58114:4;57988:131;:::i;:::-;57980:139;;57707:419;;;:::o;58132:442::-;58281:4;58319:2;58308:9;58304:18;58296:26;;58332:71;58400:1;58389:9;58385:17;58376:6;58332:71;:::i;:::-;58413:72;58481:2;58470:9;58466:18;58457:6;58413:72;:::i;:::-;58495;58563:2;58552:9;58548:18;58539:6;58495:72;:::i;:::-;58132:442;;;;;;:::o;58580:137::-;58634:5;58665:6;58659:13;58650:22;;58681:30;58705:5;58681:30;:::i;:::-;58580:137;;;;:::o;58723:345::-;58790:6;58839:2;58827:9;58818:7;58814:23;58810:32;58807:119;;;58845:79;;:::i;:::-;58807:119;58965:1;58990:61;59043:7;59034:6;59023:9;59019:22;58990:61;:::i;:::-;58980:71;;58936:125;58723:345;;;;:::o;59074:170::-;59214:22;59210:1;59202:6;59198:14;59191:46;59074:170;:::o;59250:366::-;59392:3;59413:67;59477:2;59472:3;59413:67;:::i;:::-;59406:74;;59489:93;59578:3;59489:93;:::i;:::-;59607:2;59602:3;59598:12;59591:19;;59250:366;;;:::o;59622:419::-;59788:4;59826:2;59815:9;59811:18;59803:26;;59875:9;59869:4;59865:20;59861:1;59850:9;59846:17;59839:47;59903:131;60029:4;59903:131;:::i;:::-;59895:139;;59622:419;;;:::o;60047:98::-;60098:6;60132:5;60126:12;60116:22;;60047:98;;;:::o;60151:147::-;60252:11;60289:3;60274:18;;60151:147;;;;:::o;60304:386::-;60408:3;60436:38;60468:5;60436:38;:::i;:::-;60490:88;60571:6;60566:3;60490:88;:::i;:::-;60483:95;;60587:65;60645:6;60640:3;60633:4;60626:5;60622:16;60587:65;:::i;:::-;60677:6;60672:3;60668:16;60661:23;;60412:278;60304:386;;;;:::o;60696:271::-;60826:3;60848:93;60937:3;60928:6;60848:93;:::i;:::-;60841:100;;60958:3;60951:10;;60696:271;;;;:::o
Swarm Source
ipfs://914e8d49c7415256899fc873c5458f73e767511dcbb3936ff89346350be4d2e7
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.