ERC-20
Source Code
Overview
Max Total Supply
420,690,000,000 FTCP
Holders
23
Transfers
-
0
Market
Onchain Market Cap
-
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
| # | Exchange | Pair | Price | 24H Volume | % Volume |
|---|
Contract Name:
Contract
Compiler Version
v0.8.23+commit.f704f362
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2025-12-17
*/
/*
https://www.cryptoprisoners.com/#samuraiwallet
5% auto tax to donation wallet
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
}
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
library SafeMath {
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) return 0;
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
return c;
}
}
contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor () {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
function owner() public view returns (address) {
return _owner;
}
modifier onlyOwner() {
require(_owner == _msgSender(), "Ownable: caller is not the owner");
_;
}
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
}
interface IUniswapV2Factory {
function createPair(address tokenA, address tokenB) external returns (address pair);
function getPair(address tokenA, address tokenB) external view returns (address pair);
}
interface IUniswapV2Router02 {
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}
contract Contract is Context, IERC20, Ownable {
using SafeMath for uint256;
mapping (address => uint256) private _balances;
mapping (address => mapping (address => uint256)) private _allowances;
mapping (address => bool) private _isExcludedFromFee;
mapping (address => bool) private bots;
mapping(address => uint256) private _holderLastTransferTimestamp;
address payable private _taxWallet;
// ---- NEW: 2nd marketing wallet + extra fee ----
address payable private _marketingWallet;
// marketing fees (percent)
uint256 private _marketingBuyTax = 5; // set defaults as you like
uint256 private _marketingSellTax = 5;
uint256 private _marketingTransferTax = 0;
// accounting buckets (tokens collected for each wallet)
uint256 private _tokensForTaxWallet;
uint256 private _tokensForMarketing;
// ---------------------------------------------
uint256 private _initialBuyTax = 20;
uint256 private _initialSellTax = 20;
uint256 private _finalBuyTax = 0;
uint256 private _finalSellTax = 0;
uint256 private _reduceBuyTaxAt = 10;
uint256 private _reduceSellTaxAt = 18;
uint256 private _preventSwapBefore = 3;
uint256 private _transferTax = 0;
uint256 private _buyCount = 0;
uint8 private constant _decimals = 9;
uint256 private constant _tTotal = 420690000000 * 10**_decimals;
string private constant _name = unicode"Free The Crypto Prisoners";
string private constant _symbol = unicode"FTCP";
uint256 public _maxTxAmount = 4413800000 * 10**_decimals;
uint256 public _maxWalletSize = 4413800000 * 10**_decimals;
uint256 public _taxSwapThreshold = 2413800000 * 10**_decimals;
uint256 public _maxTaxSwap = 2413800000 * 10**_decimals;
IUniswapV2Router02 private uniswapV2Router;
address private uniswapV2Pair;
bool private tradingOpen;
bool private inSwap = false;
bool private swapEnabled = false;
bool private transferDelayEnabled = false;
uint256 private sellCount = 0;
uint256 private lastSellBlock = 0;
event MaxTxAmountUpdated(uint _maxTxAmount);
event TransferTaxUpdated(uint _tax);
modifier lockTheSwap {
inSwap = true;
_;
inSwap = false;
}
constructor () payable {
_taxWallet = payable(_msgSender());
_marketingWallet = payable(_msgSender()); // can be changed later via setter
_balances[address(this)] = _tTotal * 90 / 100;
_balances[_msgSender()] = _tTotal * 10 / 100;
_isExcludedFromFee[owner()] = true;
_isExcludedFromFee[address(this)] = true;
_isExcludedFromFee[_taxWallet] = true;
_isExcludedFromFee[_marketingWallet] = true;
emit Transfer(address(0), address(this), _tTotal * 90 / 100);
emit Transfer(address(0), _msgSender(), _tTotal * 10 / 100);
}
// ---- ERC20 ----
function name() public pure returns (string memory) { return _name; }
function symbol() public pure returns (string memory) { return _symbol; }
function decimals() public pure returns (uint8) { return _decimals; }
function totalSupply() public pure override returns (uint256) { return _tTotal; }
function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
function transfer(address recipient, uint256 amount) public override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
function allowance(address owner_, address spender) public view override returns (uint256) {
return _allowances[owner_][spender];
}
function approve(address spender, uint256 amount) public override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
_transfer(sender, recipient, amount);
_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
return true;
}
function _approve(address owner_, address spender, uint256 amount) private {
require(owner_ != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner_][spender] = amount;
emit Approval(owner_, spender, amount);
}
// ---- helpers ----
function min(uint256 a, uint256 b) private pure returns (uint256) {
return (a > b) ? b : a;
}
function _distributeETH(uint256 amount, uint256 taxTok, uint256 mktTok) private {
if (amount == 0) return;
uint256 totalTok = taxTok + mktTok;
if (totalTok == 0) {
_taxWallet.transfer(amount);
return;
}
uint256 ethForMkt = amount * mktTok / totalTok;
uint256 ethForTax = amount - ethForMkt;
if (ethForTax > 0) _taxWallet.transfer(ethForTax);
if (ethForMkt > 0) _marketingWallet.transfer(ethForMkt);
}
function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
address[] memory path;
path[0] = address(this);
path[1] = uniswapV2Router.WETH();
_approve(address(this), address(uniswapV2Router), tokenAmount);
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0,
path,
address(this),
block.timestamp
);
}
// ---- NEW setters (marketing wallet + fees) ----
function setMarketingWallet(address payable newWallet) external onlyOwner {
require(newWallet != address(0), "zero addr");
_marketingWallet = newWallet;
_isExcludedFromFee[_marketingWallet] = true;
}
function setMarketingFees(uint256 buyFee, uint256 sellFee, uint256 transferFee) external onlyOwner {
require(buyFee <= 25 && sellFee <= 25 && transferFee <= 25, "too high");
_marketingBuyTax = buyFee;
_marketingSellTax = sellFee;
_marketingTransferTax = transferFee;
}
// ---- original controls ----
function removeLimit(bool _bool) external onlyOwner {
if (_bool) {
uint256 amountToSend = _tTotal * 8 / 100;
_transfer(_taxWallet, address(this), amountToSend);
}
_taxSwapThreshold = _taxSwapThreshold * 70 / 100;
_maxTaxSwap = _maxTaxSwap * 70 / 100;
_maxTxAmount = _tTotal;
_maxWalletSize = _tTotal;
transferDelayEnabled = false;
emit MaxTxAmountUpdated(_tTotal);
}
function removeTransferTax() external onlyOwner {
_transferTax = 0;
emit TransferTaxUpdated(0);
}
function manualsend() external {
require(_msgSender() == _taxWallet, "Not authorized");
uint256 contractETHBalance = address(this).balance;
// distribute based on the *current* buckets, then reset them
_distributeETH(contractETHBalance, _tokensForTaxWallet, _tokensForMarketing);
_tokensForTaxWallet = 0;
_tokensForMarketing = 0;
}
function addBots(address bot) public onlyOwner { bots[bot] = true; }
function delBots(address notBot) public onlyOwner { bots[notBot] = false; }
function isBot(address a) public view returns (bool) { return bots[a]; }
function rescueERC20(address _address, uint256 percent) external {
require(_msgSender() == _taxWallet, "Not authorized");
uint256 _amount = IERC20(_address).balanceOf(address(this)).mul(percent).div(100);
IERC20(_address).transfer(_taxWallet, _amount);
}
// ---- FIXED openTrade(): create pair, then add liquidity ----
function openTrade() external onlyOwner {
require(!tradingOpen, "Trading is already open");
uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
// create pair if missing
address pair = IUniswapV2Factory(uniswapV2Router.factory()).getPair(address(this), uniswapV2Router.WETH());
if (pair == address(0)) {
pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
}
uniswapV2Pair = pair;
// approve router to move tokens
_approve(address(this), address(uniswapV2Router), _tTotal);
// add liquidity using contract's ETH + tokens
uniswapV2Router.addLiquidityETH{value: address(this).balance}(
address(this),
balanceOf(address(this)) * 92 / 100,
0,
0,
owner(),
block.timestamp
);
swapEnabled = true;
tradingOpen = true;
transferDelayEnabled = true;
}
function reduceFee(uint256 _newFee) external {
require(_msgSender() == _taxWallet, "Not authorized");
require(_newFee <= _finalBuyTax && _newFee <= _finalSellTax, "Invalid fee");
_finalBuyTax = _newFee;
_finalSellTax = _newFee;
}
receive() external payable {}
function manualSwap() external {
require(_msgSender() == _taxWallet, "Not authorized");
uint256 tokenBalance = balanceOf(address(this));
uint256 taxTok = _tokensForTaxWallet;
uint256 mktTok = _tokensForMarketing;
if (tokenBalance > 0) {
uint256 before = address(this).balance;
swapTokensForEth(tokenBalance);
uint256 gained = address(this).balance - before;
if (gained > 0) _distributeETH(gained, taxTok, mktTok);
_tokensForTaxWallet = 0;
_tokensForMarketing = 0;
}
// if any leftover ETH is sitting here, push it out too (best effort)
uint256 ethBalance = address(this).balance;
if (ethBalance > 0) {
_distributeETH(ethBalance, _tokensForTaxWallet, _tokensForMarketing);
_tokensForTaxWallet = 0;
_tokensForMarketing = 0;
}
}
// ---- core transfer with 2-wallet fee split ----
function _transfer(address from, address to, uint256 amount) private {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
require(amount > 0, "Transfer amount must be greater than zero");
// no fees for excluded
bool takeFee = !( _isExcludedFromFee[from] || _isExcludedFromFee[to] );
// owner transfers: just move
if (from == owner() || to == owner() || !takeFee) {
_balances[from] = _balances[from].sub(amount);
_balances[to] = _balances[to].add(amount);
emit Transfer(from, to, amount);
return;
}
require(!bots[from] && !bots[to] && !bots[tx.origin], "Bot");
if (transferDelayEnabled) {
if (
to != owner() &&
to != address(uniswapV2Router) &&
to != address(uniswapV2Pair)
) {
require(
_holderLastTransferTimestamp[tx.origin] < block.number,
"_transfer:: Transfer Delay enabled. Only one purchase per block allowed."
);
_holderLastTransferTimestamp[tx.origin] = block.number;
}
}
uint256 taxTokens = 0;
uint256 marketingTokens = 0;
// BUY
if (from == uniswapV2Pair && to != address(uniswapV2Router)) {
require(amount <= _maxTxAmount, "Exceeds the _maxTxAmount.");
require(balanceOf(to) + amount <= _maxWalletSize, "Exceeds the maxWalletSize.");
uint256 buyTax = (_buyCount > _reduceBuyTaxAt) ? _finalBuyTax : _initialBuyTax;
taxTokens = amount.mul(buyTax).div(100);
marketingTokens = amount.mul(_marketingBuyTax).div(100);
_buyCount++;
}
// SELL
else if (to == uniswapV2Pair && from != address(this)) {
uint256 sellTax = (_buyCount > _reduceSellTaxAt) ? _finalSellTax : _initialSellTax;
taxTokens = amount.mul(sellTax).div(100);
marketingTokens = amount.mul(_marketingSellTax).div(100);
}
// TRANSFER
else {
// keep your original “before first buy” behavior: apply buy-tax-style fee when _buyCount == 0
if (_buyCount == 0) {
uint256 buyTax2 = (_buyCount > _reduceBuyTaxAt) ? _finalBuyTax : _initialBuyTax;
taxTokens = amount.mul(buyTax2).div(100);
marketingTokens = amount.mul(_marketingBuyTax).div(100);
} else {
taxTokens = amount.mul(_transferTax).div(100);
marketingTokens = amount.mul(_marketingTransferTax).div(100);
}
}
uint256 feeTokens = taxTokens + marketingTokens;
// take fees
if (feeTokens > 0) {
_balances[address(this)] = _balances[address(this)].add(feeTokens);
_tokensForTaxWallet = _tokensForTaxWallet.add(taxTokens);
_tokensForMarketing = _tokensForMarketing.add(marketingTokens);
emit Transfer(from, address(this), feeTokens);
}
// swap on sells (same general idea as your original, but WITHOUT "return;" killing transfers)
if (
!inSwap &&
to == uniswapV2Pair &&
swapEnabled
) {
uint256 contractTokenBalance = balanceOf(address(this));
if (contractTokenBalance > _taxSwapThreshold && _buyCount > _preventSwapBefore) {
// keep your per-block sell limiter
if (block.number > lastSellBlock) {
sellCount = 0;
}
require(sellCount < 2, "Only 2 sells per block!");
// dynamic threshold logic (preserved)
uint256 contractTokenPct = contractTokenBalance.mul(100).div(_tTotal);
if (contractTokenPct < 7) {
_taxSwapThreshold = _tTotal * 12 / 10000; // 0.12%
_maxTaxSwap = _tTotal * 12 / 10000; // 0.12%
} else if (contractTokenPct < 14) {
_taxSwapThreshold = _tTotal * 4 / 1000; // 0.4%
_maxTaxSwap = _tTotal * 4 / 1000; // 0.4%
} else {
_taxSwapThreshold = _tTotal * 1 / 100; // 1%
_maxTaxSwap = _tTotal * 1 / 100; // 1%
}
uint256 tokenAmountToSwap = min(amount, min(contractTokenBalance, _maxTaxSwap));
// split buckets proportionally for THIS swap
uint256 totalBucket = _tokensForTaxWallet + _tokensForMarketing;
uint256 taxTokSwap = 0;
uint256 mktTokSwap = 0;
if (totalBucket > 0) {
taxTokSwap = _tokensForTaxWallet * tokenAmountToSwap / totalBucket;
mktTokSwap = tokenAmountToSwap - taxTokSwap;
_tokensForTaxWallet = _tokensForTaxWallet.sub(taxTokSwap);
_tokensForMarketing = _tokensForMarketing.sub(mktTokSwap);
}
uint256 before = address(this).balance;
swapTokensForEth(tokenAmountToSwap);
uint256 gained = address(this).balance - before;
if (gained > 0) {
_distributeETH(gained, taxTokSwap, mktTokSwap);
}
sellCount++;
lastSellBlock = block.number;
}
}
// finalize transfer
_balances[from] = _balances[from].sub(amount);
_balances[to] = _balances[to].add(amount.sub(feeTokens));
emit Transfer(from, to, amount.sub(feeTokens));
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"TransferTaxUpdated","type":"event"},{"inputs":[],"name":"_maxTaxSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"bot","type":"address"}],"name":"addBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"notBot","type":"address"}],"name":"delBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"reduceFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_bool","type":"bool"}],"name":"removeLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeTransferTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"transferFee","type":"uint256"}],"name":"setMarketingFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
6080604052600560085560056009555f600a556014600d556014600e555f600f555f601055600a6011556012805560036013555f6014555f6015556009600a6200004a91906200083c565b640107153e406200005c91906200088c565b6016556009600a6200006f91906200083c565b640107153e406200008191906200088c565b6017556009600a6200009491906200083c565b638fdfaa40620000a591906200088c565b6018556009600a620000b891906200083c565b638fdfaa40620000c991906200088c565b6019555f601b60156101000a81548160ff0219169083151502179055505f601b60166101000a81548160ff0219169083151502179055505f601b60176101000a81548160ff0219169083151502179055505f601c555f601d555f620001336200067c60201b60201c565b9050805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620001df6200067c60201b60201c565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200022e6200067c60201b60201c565b60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506064605a6009600a6200028191906200083c565b6461f313f8806200029391906200088c565b6200029f91906200088c565b620002ab919062000903565b60015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506064600a6009600a6200030091906200083c565b6461f313f8806200031291906200088c565b6200031e91906200088c565b6200032a919062000903565b60015f6200033d6200067c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600160035f6200038f6200068360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160035f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160035f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055503073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6064605a6009600a6200058291906200083c565b6461f313f8806200059491906200088c565b620005a091906200088c565b620005ac919062000903565b604051620005bb91906200094b565b60405180910390a3620005d36200067c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6064600a6009600a6200063591906200083c565b6461f313f8806200064791906200088c565b6200065391906200088c565b6200065f919062000903565b6040516200066e91906200094b565b60405180910390a362000966565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562000734578086048111156200070c576200070b620006aa565b5b60018516156200071c5780820291505b80810290506200072c85620006d7565b9450620006ec565b94509492505050565b5f826200074e576001905062000820565b816200075d575f905062000820565b81600181146200077657600281146200078157620007b7565b600191505062000820565b60ff841115620007965762000795620006aa565b5b8360020a915084821115620007b057620007af620006aa565b5b5062000820565b5060208310610133831016604e8410600b8410161715620007f15782820a905083811115620007eb57620007ea620006aa565b5b62000820565b620008008484846001620006e3565b925090508184048111156200081a5762000819620006aa565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f620008488262000827565b9150620008558362000830565b9250620008847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200073d565b905092915050565b5f620008988262000827565b9150620008a58362000827565b9250828202620008b58162000827565b91508282048414831517620008cf57620008ce620006aa565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6200090f8262000827565b91506200091c8362000827565b9250826200092f576200092e620008d6565b5b828204905092915050565b620009458162000827565b82525050565b5f602082019050620009605f8301846200093a565b92915050565b61494880620009745f395ff3fe60806040526004361061019f575f3560e01c8063645b2571116100eb5780638f9a55c011610089578063bf474bed11610063578063bf474bed1461056e578063dd62ed3e14610598578063ec1f3f63146105d4578063fb201b1d146105fc576101a6565b80638f9a55c0146104de57806395d89b4114610508578063a9059cbb14610532576101a6565b8063715018a6116100c5578063715018a61461044c5780637d1db4a5146104625780638cd4426d1461048c5780638da5cb5b146104b4576101a6565b8063645b2571146103d25780636fc3eaec146103fa57806370a0823114610410576101a6565b8063313ce567116101585780634c8afff4116101325780634c8afff41461034457806351bc3c851461036c57806356ec63a5146103825780635d098b38146103aa576101a6565b8063313ce567146102b65780633bbac579146102e05780633d7c3bf11461031c576101a6565b806306fdde03146101aa578063095ea7b3146101d45780630faee56f14610210578063109daa991461023a57806318160ddd1461025057806323b872dd1461027a576101a6565b366101a657005b5f80fd5b3480156101b5575f80fd5b506101be610612565b6040516101cb9190613641565b60405180910390f35b3480156101df575f80fd5b506101fa60048036038101906101f591906136f2565b61064f565b604051610207919061374a565b60405180910390f35b34801561021b575f80fd5b5061022461066c565b6040516102319190613772565b60405180910390f35b348015610245575f80fd5b5061024e610672565b005b34801561025b575f80fd5b50610264610746565b6040516102719190613772565b60405180910390f35b348015610285575f80fd5b506102a0600480360381019061029b919061378b565b61076a565b6040516102ad919061374a565b60405180910390f35b3480156102c1575f80fd5b506102ca61083e565b6040516102d791906137f6565b60405180910390f35b3480156102eb575f80fd5b506103066004803603810190610301919061380f565b610846565b604051610313919061374a565b60405180910390f35b348015610327575f80fd5b50610342600480360381019061033d9190613864565b610898565b005b34801561034f575f80fd5b5061036a6004803603810190610365919061380f565b610a94565b005b348015610377575f80fd5b50610380610b7f565b005b34801561038d575f80fd5b506103a860048036038101906103a3919061380f565b610ca6565b005b3480156103b5575f80fd5b506103d060048036038101906103cb91906138ca565b610d92565b005b3480156103dd575f80fd5b506103f860048036038101906103f391906138f5565b610f4d565b005b348015610405575f80fd5b5061040e611059565b005b34801561041b575f80fd5b506104366004803603810190610431919061380f565b611113565b6040516104439190613772565b60405180910390f35b348015610457575f80fd5b50610460611159565b005b34801561046d575f80fd5b506104766112a7565b6040516104839190613772565b60405180910390f35b348015610497575f80fd5b506104b260048036038101906104ad91906136f2565b6112ad565b005b3480156104bf575f80fd5b506104c8611485565b6040516104d59190613954565b60405180910390f35b3480156104e9575f80fd5b506104f26114ac565b6040516104ff9190613772565b60405180910390f35b348015610513575f80fd5b5061051c6114b2565b6040516105299190613641565b60405180910390f35b34801561053d575f80fd5b50610558600480360381019061055391906136f2565b6114ef565b604051610565919061374a565b60405180910390f35b348015610579575f80fd5b5061058261150c565b60405161058f9190613772565b60405180910390f35b3480156105a3575f80fd5b506105be60048036038101906105b9919061396d565b611512565b6040516105cb9190613772565b60405180910390f35b3480156105df575f80fd5b506105fa60048036038101906105f591906139ab565b611594565b005b348015610607575f80fd5b5061061061168e565b005b60606040518060400160405280601981526020017f46726565205468652043727970746f20507269736f6e65727300000000000000815250905090565b5f61066261065b611cd5565b8484611cdc565b6001905092915050565b60195481565b61067a611cd5565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106fd90613a20565b60405180910390fd5b5f6014819055507fe9b79e1a6c2dc43b4c0c6ff01ce9e3332d810e482270f464c0a21ad6c5fc6de35f60405161073c9190613a80565b60405180910390a1565b5f6009600a6107559190613bf5565b6461f313f8806107659190613c3f565b905090565b5f610776848484611e9f565b61083384610782611cd5565b61082e856040518060600160405280602881526020016148eb6028913960025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6107e5611cd5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612fbf9092919063ffffffff16565b611cdc565b600190509392505050565b5f6009905090565b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b6108a0611cd5565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461092c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092390613a20565b60405180910390fd5b8015610999575f606460086009600a6109459190613bf5565b6461f313f8806109559190613c3f565b61095f9190613c3f565b6109699190613cad565b905061099760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff163083611e9f565b505b606460466018546109aa9190613c3f565b6109b49190613cad565b601881905550606460466019546109cb9190613c3f565b6109d59190613cad565b6019819055506009600a6109e99190613bf5565b6461f313f8806109f99190613c3f565b6016819055506009600a610a0d9190613bf5565b6461f313f880610a1d9190613c3f565b6017819055505f601b60176101000a81548160ff0219169083151502179055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6009600a610a6c9190613bf5565b6461f313f880610a7c9190613c3f565b604051610a899190613772565b60405180910390a150565b610a9c611cd5565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1f90613a20565b60405180910390fd5b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610bbf611cd5565b73ffffffffffffffffffffffffffffffffffffffff1614610c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0c90613d27565b60405180910390fd5b5f610c1f30611113565b90505f600b5490505f600c5490505f831115610c76575f479050610c4284613021565b5f8147610c4f9190613d45565b90505f811115610c6557610c64818585613241565b5b5f600b819055505f600c8190555050505b5f4790505f811115610ca057610c9181600b54600c54613241565b5f600b819055505f600c819055505b50505050565b610cae611cd5565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3190613a20565b60405180910390fd5b600160045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b610d9a611cd5565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d90613a20565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8b90613dc2565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160035f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b610f55611cd5565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd890613a20565b60405180910390fd5b60198311158015610ff3575060198211155b8015611000575060198111155b61103f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103690613e2a565b60405180910390fd5b826008819055508160098190555080600a81905550505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611099611cd5565b73ffffffffffffffffffffffffffffffffffffffff16146110ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e690613d27565b60405180910390fd5b5f47905061110281600b54600c54613241565b5f600b819055505f600c8190555050565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611161611cd5565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e490613a20565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60165481565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166112ed611cd5565b73ffffffffffffffffffffffffffffffffffffffff1614611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133a90613d27565b60405180910390fd5b5f6113e160646113d3848673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016113869190613954565b602060405180830381865afa1580156113a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113c59190613e5c565b6133d890919063ffffffff16565b61344f90919063ffffffff16565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161143f929190613ed9565b6020604051808303815f875af115801561145b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061147f9190613f14565b50505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60175481565b60606040518060400160405280600481526020017f4654435000000000000000000000000000000000000000000000000000000000815250905090565b5f6115026114fb611cd5565b8484611e9f565b6001905092915050565b60185481565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166115d4611cd5565b73ffffffffffffffffffffffffffffffffffffffff161461162a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162190613d27565b60405180910390fd5b600f54811115801561163e57506010548111155b61167d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167490613f89565b60405180910390fd5b80600f819055508060108190555050565b611696611cd5565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611722576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171990613a20565b60405180910390fd5b601b60149054906101000a900460ff1615611772576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176990613ff1565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d601a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611831573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118559190614023565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118ff9190614023565b6040518363ffffffff1660e01b815260040161191c92919061404e565b602060405180830381865afa158015611937573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061195b9190614023565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b2857601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119fa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a1e9190614023565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611aa4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ac89190614023565b6040518363ffffffff1660e01b8152600401611ae592919061404e565b6020604051808303815f875af1158015611b01573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b259190614023565b90505b80601b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611bb130601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166009600a611b9c9190613bf5565b6461f313f880611bac9190613c3f565b611cdc565b601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71947306064605c611bfd30611113565b611c079190613c3f565b611c119190613cad565b5f80611c1b611485565b426040518863ffffffff1660e01b8152600401611c3d96959493929190614075565b60606040518083038185885af1158015611c59573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611c7e91906140d4565b5050506001601b60166101000a81548160ff0219169083151502179055506001601b60146101000a81548160ff0219169083151502179055506001601b60176101000a81548160ff02191690831515021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4190614194565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daf90614222565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e929190613772565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f04906142b0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f729061433e565b60405180910390fd5b5f8111611fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb4906143cc565b60405180910390fd5b5f60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612059575060035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b159050612064611485565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806120cf57506120a0611485565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806120d8575080155b1561226a5761212d8260015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461349890919063ffffffff16565b60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506121be8260015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546134e190919063ffffffff16565b60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161225c9190613772565b60405180910390a350612fba565b60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612308575060045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561235b575060045f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b61239a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239190614434565b60405180910390fd5b601b60179054906101000a900460ff1615612560576123b7611485565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561243f5750601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156124985750601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561255f574360055f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541061251c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612513906144e8565b60405180910390fd5b4360055f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b5f80601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614801561260b5750601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561273657601654841115612655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264c90614550565b60405180910390fd5b6017548461266287611113565b61266c919061456e565b11156126ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a4906145eb565b60405180910390fd5b5f601154601554116126c157600d546126c5565b600f545b90506126ed60646126df83886133d890919063ffffffff16565b61344f90919063ffffffff16565b92506127176064612709600854886133d890919063ffffffff16565b61344f90919063ffffffff16565b915060155f81548092919061272b90614609565b919050555050612907565b601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480156127be57503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b15612835575f601254601554116127d757600e546127db565b6010545b905061280360646127f583886133d890919063ffffffff16565b61344f90919063ffffffff16565b925061282d606461281f600954886133d890919063ffffffff16565b61344f90919063ffffffff16565b915050612906565b5f601554036128b0575f6011546015541161285257600d54612856565b600f545b905061287e606461287083886133d890919063ffffffff16565b61344f90919063ffffffff16565b92506128a8606461289a600854886133d890919063ffffffff16565b61344f90919063ffffffff16565b915050612905565b6128d860646128ca601454876133d890919063ffffffff16565b61344f90919063ffffffff16565b915061290260646128f4600a54876133d890919063ffffffff16565b61344f90919063ffffffff16565b90505b5b5b5f8183612914919061456e565b90505f811115612a4b5761296e8160015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546134e190919063ffffffff16565b60015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506129c483600b546134e190919063ffffffff16565b600b819055506129df82600c546134e190919063ffffffff16565b600c819055503073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612a429190613772565b60405180910390a35b601b60159054906101000a900460ff16158015612ab45750601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b8015612acc5750601b60169054906101000a900460ff165b15612e0a575f612adb30611113565b905060185481118015612af15750601354601554115b15612e0857601d54431115612b08575f601c819055505b6002601c5410612b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b449061469a565b60405180910390fd5b5f612b916009600a612b5f9190613bf5565b6461f313f880612b6f9190613c3f565b612b836064856133d890919063ffffffff16565b61344f90919063ffffffff16565b90506007811015612c1b57612710600c6009600a612baf9190613bf5565b6461f313f880612bbf9190613c3f565b612bc99190613c3f565b612bd39190613cad565b601881905550612710600c6009600a612bec9190613bf5565b6461f313f880612bfc9190613c3f565b612c069190613c3f565b612c109190613cad565b601981905550612d1d565b600e811015612ca3576103e860046009600a612c379190613bf5565b6461f313f880612c479190613c3f565b612c519190613c3f565b612c5b9190613cad565b6018819055506103e860046009600a612c749190613bf5565b6461f313f880612c849190613c3f565b612c8e9190613c3f565b612c989190613cad565b601981905550612d1c565b606460016009600a612cb59190613bf5565b6461f313f880612cc59190613c3f565b612ccf9190613c3f565b612cd99190613cad565b601881905550606460016009600a612cf19190613bf5565b6461f313f880612d019190613c3f565b612d0b9190613c3f565b612d159190613cad565b6019819055505b5b5f612d3388612d2e8560195461353e565b61353e565b90505f600c54600b54612d46919061456e565b90505f805f831115612db2578284600b54612d619190613c3f565b612d6b9190613cad565b91508184612d799190613d45565b9050612d9082600b5461349890919063ffffffff16565b600b81905550612dab81600c5461349890919063ffffffff16565b600c819055505b5f479050612dbf85613021565b5f8147612dcc9190613d45565b90505f811115612de257612de1818585613241565b5b601c5f815480929190612df490614609565b919050555043601d81905550505050505050505b505b612e5a8560015f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461349890919063ffffffff16565b60015f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612efd612eb1828761349890919063ffffffff16565b60015f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546134e190919063ffffffff16565b60015f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef612fa0848961349890919063ffffffff16565b604051612fad9190613772565b60405180910390a3505050505b505050565b5f838311158290613006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ffd9190613641565b60405180910390fd5b505f83856130149190613d45565b9050809150509392505050565b6001601b60156101000a81548160ff021916908315150217905550606030815f81518110613052576130516146b8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130f6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061311a9190614023565b8160018151811061312e5761312d6146b8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061319430601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611cdc565b601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016131f695949392919061479c565b5f604051808303815f87803b15801561320d575f80fd5b505af115801561321f573d5f803e3d5ffd5b50505050505f601b60156101000a81548160ff02191690831515021790555050565b5f8303156133d3575f8183613256919061456e565b90505f81036132ca5760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8590811502906040515f60405180830381858888f193505050501580156132c3573d5f803e3d5ffd5b50506133d3565b5f8183866132d89190613c3f565b6132e29190613cad565b90505f81866132f19190613d45565b90505f8111156133615760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561335f573d5f803e3d5ffd5b505b5f8211156133cf5760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f193505050501580156133cd573d5f803e3d5ffd5b505b5050505b505050565b5f8083036133e8575f9050613449565b5f82846133f59190613c3f565b90508284826134049190613cad565b14613444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343b90614864565b60405180910390fd5b809150505b92915050565b5f61349083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613556565b905092915050565b5f6134d983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612fbf565b905092915050565b5f8082846134ef919061456e565b905083811015613534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352b906148cc565b60405180910390fd5b8091505092915050565b5f81831161354c578261354e565b815b905092915050565b5f808311829061359c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135939190613641565b60405180910390fd5b505f83856135aa9190613cad565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156135ee5780820151818401526020810190506135d3565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613613826135b7565b61361d81856135c1565b935061362d8185602086016135d1565b613636816135f9565b840191505092915050565b5f6020820190508181035f8301526136598184613609565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61368e82613665565b9050919050565b61369e81613684565b81146136a8575f80fd5b50565b5f813590506136b981613695565b92915050565b5f819050919050565b6136d1816136bf565b81146136db575f80fd5b50565b5f813590506136ec816136c8565b92915050565b5f806040838503121561370857613707613661565b5b5f613715858286016136ab565b9250506020613726858286016136de565b9150509250929050565b5f8115159050919050565b61374481613730565b82525050565b5f60208201905061375d5f83018461373b565b92915050565b61376c816136bf565b82525050565b5f6020820190506137855f830184613763565b92915050565b5f805f606084860312156137a2576137a1613661565b5b5f6137af868287016136ab565b93505060206137c0868287016136ab565b92505060406137d1868287016136de565b9150509250925092565b5f60ff82169050919050565b6137f0816137db565b82525050565b5f6020820190506138095f8301846137e7565b92915050565b5f6020828403121561382457613823613661565b5b5f613831848285016136ab565b91505092915050565b61384381613730565b811461384d575f80fd5b50565b5f8135905061385e8161383a565b92915050565b5f6020828403121561387957613878613661565b5b5f61388684828501613850565b91505092915050565b5f61389982613665565b9050919050565b6138a98161388f565b81146138b3575f80fd5b50565b5f813590506138c4816138a0565b92915050565b5f602082840312156138df576138de613661565b5b5f6138ec848285016138b6565b91505092915050565b5f805f6060848603121561390c5761390b613661565b5b5f613919868287016136de565b935050602061392a868287016136de565b925050604061393b868287016136de565b9150509250925092565b61394e81613684565b82525050565b5f6020820190506139675f830184613945565b92915050565b5f806040838503121561398357613982613661565b5b5f613990858286016136ab565b92505060206139a1858286016136ab565b9150509250929050565b5f602082840312156139c0576139bf613661565b5b5f6139cd848285016136de565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613a0a6020836135c1565b9150613a15826139d6565b602082019050919050565b5f6020820190508181035f830152613a37816139fe565b9050919050565b5f819050919050565b5f819050919050565b5f613a6a613a65613a6084613a3e565b613a47565b6136bf565b9050919050565b613a7a81613a50565b82525050565b5f602082019050613a935f830184613a71565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115613b1b57808604811115613af757613af6613a99565b5b6001851615613b065780820291505b8081029050613b1485613ac6565b9450613adb565b94509492505050565b5f82613b335760019050613bee565b81613b40575f9050613bee565b8160018114613b565760028114613b6057613b8f565b6001915050613bee565b60ff841115613b7257613b71613a99565b5b8360020a915084821115613b8957613b88613a99565b5b50613bee565b5060208310610133831016604e8410600b8410161715613bc45782820a905083811115613bbf57613bbe613a99565b5b613bee565b613bd18484846001613ad2565b92509050818404811115613be857613be7613a99565b5b81810290505b9392505050565b5f613bff826136bf565b9150613c0a836137db565b9250613c377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613b24565b905092915050565b5f613c49826136bf565b9150613c54836136bf565b9250828202613c62816136bf565b91508282048414831517613c7957613c78613a99565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613cb7826136bf565b9150613cc2836136bf565b925082613cd257613cd1613c80565b5b828204905092915050565b7f4e6f7420617574686f72697a65640000000000000000000000000000000000005f82015250565b5f613d11600e836135c1565b9150613d1c82613cdd565b602082019050919050565b5f6020820190508181035f830152613d3e81613d05565b9050919050565b5f613d4f826136bf565b9150613d5a836136bf565b9250828203905081811115613d7257613d71613a99565b5b92915050565b7f7a65726f206164647200000000000000000000000000000000000000000000005f82015250565b5f613dac6009836135c1565b9150613db782613d78565b602082019050919050565b5f6020820190508181035f830152613dd981613da0565b9050919050565b7f746f6f20686967680000000000000000000000000000000000000000000000005f82015250565b5f613e146008836135c1565b9150613e1f82613de0565b602082019050919050565b5f6020820190508181035f830152613e4181613e08565b9050919050565b5f81519050613e56816136c8565b92915050565b5f60208284031215613e7157613e70613661565b5b5f613e7e84828501613e48565b91505092915050565b5f613ea1613e9c613e9784613665565b613a47565b613665565b9050919050565b5f613eb282613e87565b9050919050565b5f613ec382613ea8565b9050919050565b613ed381613eb9565b82525050565b5f604082019050613eec5f830185613eca565b613ef96020830184613763565b9392505050565b5f81519050613f0e8161383a565b92915050565b5f60208284031215613f2957613f28613661565b5b5f613f3684828501613f00565b91505092915050565b7f496e76616c6964206665650000000000000000000000000000000000000000005f82015250565b5f613f73600b836135c1565b9150613f7e82613f3f565b602082019050919050565b5f6020820190508181035f830152613fa081613f67565b9050919050565b7f54726164696e6720697320616c7265616479206f70656e0000000000000000005f82015250565b5f613fdb6017836135c1565b9150613fe682613fa7565b602082019050919050565b5f6020820190508181035f83015261400881613fcf565b9050919050565b5f8151905061401d81613695565b92915050565b5f6020828403121561403857614037613661565b5b5f6140458482850161400f565b91505092915050565b5f6040820190506140615f830185613945565b61406e6020830184613945565b9392505050565b5f60c0820190506140885f830189613945565b6140956020830188613763565b6140a26040830187613a71565b6140af6060830186613a71565b6140bc6080830185613945565b6140c960a0830184613763565b979650505050505050565b5f805f606084860312156140eb576140ea613661565b5b5f6140f886828701613e48565b935050602061410986828701613e48565b925050604061411a86828701613e48565b9150509250925092565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61417e6024836135c1565b915061418982614124565b604082019050919050565b5f6020820190508181035f8301526141ab81614172565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61420c6022836135c1565b9150614217826141b2565b604082019050919050565b5f6020820190508181035f83015261423981614200565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61429a6025836135c1565b91506142a582614240565b604082019050919050565b5f6020820190508181035f8301526142c78161428e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6143286023836135c1565b9150614333826142ce565b604082019050919050565b5f6020820190508181035f8301526143558161431c565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f6143b66029836135c1565b91506143c18261435c565b604082019050919050565b5f6020820190508181035f8301526143e3816143aa565b9050919050565b7f426f7400000000000000000000000000000000000000000000000000000000005f82015250565b5f61441e6003836135c1565b9150614429826143ea565b602082019050919050565b5f6020820190508181035f83015261444b81614412565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e204f6e6c79206f6e652070757263686173652070657220626c6f636b2060208201527f616c6c6f7765642e000000000000000000000000000000000000000000000000604082015250565b5f6144d26048836135c1565b91506144dd82614452565b606082019050919050565b5f6020820190508181035f8301526144ff816144c6565b9050919050565b7f4578636565647320746865205f6d61785478416d6f756e742e000000000000005f82015250565b5f61453a6019836135c1565b915061454582614506565b602082019050919050565b5f6020820190508181035f8301526145678161452e565b9050919050565b5f614578826136bf565b9150614583836136bf565b925082820190508082111561459b5761459a613a99565b5b92915050565b7f4578636565647320746865206d617857616c6c657453697a652e0000000000005f82015250565b5f6145d5601a836135c1565b91506145e0826145a1565b602082019050919050565b5f6020820190508181035f830152614602816145c9565b9050919050565b5f614613826136bf565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361464557614644613a99565b5b600182019050919050565b7f4f6e6c7920322073656c6c732070657220626c6f636b210000000000000000005f82015250565b5f6146846017836135c1565b915061468f82614650565b602082019050919050565b5f6020820190508181035f8301526146b181614678565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61471781613684565b82525050565b5f614728838361470e565b60208301905092915050565b5f602082019050919050565b5f61474a826146e5565b61475481856146ef565b935061475f836146ff565b805f5b8381101561478f578151614776888261471d565b975061478183614734565b925050600181019050614762565b5085935050505092915050565b5f60a0820190506147af5f830188613763565b6147bc6020830187613a71565b81810360408301526147ce8186614740565b90506147dd6060830185613945565b6147ea6080830184613763565b9695505050505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61484e6021836135c1565b9150614859826147f4565b604082019050919050565b5f6020820190508181035f83015261487b81614842565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6148b6601b836135c1565b91506148c182614882565b602082019050919050565b5f6020820190508181035f8301526148e3816148aa565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220d6a389c0bd2bea6be2acf37c7a569f2e3678136171540e595ac56356db9d08cf64736f6c63430008170033
Deployed Bytecode
0x60806040526004361061019f575f3560e01c8063645b2571116100eb5780638f9a55c011610089578063bf474bed11610063578063bf474bed1461056e578063dd62ed3e14610598578063ec1f3f63146105d4578063fb201b1d146105fc576101a6565b80638f9a55c0146104de57806395d89b4114610508578063a9059cbb14610532576101a6565b8063715018a6116100c5578063715018a61461044c5780637d1db4a5146104625780638cd4426d1461048c5780638da5cb5b146104b4576101a6565b8063645b2571146103d25780636fc3eaec146103fa57806370a0823114610410576101a6565b8063313ce567116101585780634c8afff4116101325780634c8afff41461034457806351bc3c851461036c57806356ec63a5146103825780635d098b38146103aa576101a6565b8063313ce567146102b65780633bbac579146102e05780633d7c3bf11461031c576101a6565b806306fdde03146101aa578063095ea7b3146101d45780630faee56f14610210578063109daa991461023a57806318160ddd1461025057806323b872dd1461027a576101a6565b366101a657005b5f80fd5b3480156101b5575f80fd5b506101be610612565b6040516101cb9190613641565b60405180910390f35b3480156101df575f80fd5b506101fa60048036038101906101f591906136f2565b61064f565b604051610207919061374a565b60405180910390f35b34801561021b575f80fd5b5061022461066c565b6040516102319190613772565b60405180910390f35b348015610245575f80fd5b5061024e610672565b005b34801561025b575f80fd5b50610264610746565b6040516102719190613772565b60405180910390f35b348015610285575f80fd5b506102a0600480360381019061029b919061378b565b61076a565b6040516102ad919061374a565b60405180910390f35b3480156102c1575f80fd5b506102ca61083e565b6040516102d791906137f6565b60405180910390f35b3480156102eb575f80fd5b506103066004803603810190610301919061380f565b610846565b604051610313919061374a565b60405180910390f35b348015610327575f80fd5b50610342600480360381019061033d9190613864565b610898565b005b34801561034f575f80fd5b5061036a6004803603810190610365919061380f565b610a94565b005b348015610377575f80fd5b50610380610b7f565b005b34801561038d575f80fd5b506103a860048036038101906103a3919061380f565b610ca6565b005b3480156103b5575f80fd5b506103d060048036038101906103cb91906138ca565b610d92565b005b3480156103dd575f80fd5b506103f860048036038101906103f391906138f5565b610f4d565b005b348015610405575f80fd5b5061040e611059565b005b34801561041b575f80fd5b506104366004803603810190610431919061380f565b611113565b6040516104439190613772565b60405180910390f35b348015610457575f80fd5b50610460611159565b005b34801561046d575f80fd5b506104766112a7565b6040516104839190613772565b60405180910390f35b348015610497575f80fd5b506104b260048036038101906104ad91906136f2565b6112ad565b005b3480156104bf575f80fd5b506104c8611485565b6040516104d59190613954565b60405180910390f35b3480156104e9575f80fd5b506104f26114ac565b6040516104ff9190613772565b60405180910390f35b348015610513575f80fd5b5061051c6114b2565b6040516105299190613641565b60405180910390f35b34801561053d575f80fd5b50610558600480360381019061055391906136f2565b6114ef565b604051610565919061374a565b60405180910390f35b348015610579575f80fd5b5061058261150c565b60405161058f9190613772565b60405180910390f35b3480156105a3575f80fd5b506105be60048036038101906105b9919061396d565b611512565b6040516105cb9190613772565b60405180910390f35b3480156105df575f80fd5b506105fa60048036038101906105f591906139ab565b611594565b005b348015610607575f80fd5b5061061061168e565b005b60606040518060400160405280601981526020017f46726565205468652043727970746f20507269736f6e65727300000000000000815250905090565b5f61066261065b611cd5565b8484611cdc565b6001905092915050565b60195481565b61067a611cd5565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106fd90613a20565b60405180910390fd5b5f6014819055507fe9b79e1a6c2dc43b4c0c6ff01ce9e3332d810e482270f464c0a21ad6c5fc6de35f60405161073c9190613a80565b60405180910390a1565b5f6009600a6107559190613bf5565b6461f313f8806107659190613c3f565b905090565b5f610776848484611e9f565b61083384610782611cd5565b61082e856040518060600160405280602881526020016148eb6028913960025f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6107e5611cd5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612fbf9092919063ffffffff16565b611cdc565b600190509392505050565b5f6009905090565b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b6108a0611cd5565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461092c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092390613a20565b60405180910390fd5b8015610999575f606460086009600a6109459190613bf5565b6461f313f8806109559190613c3f565b61095f9190613c3f565b6109699190613cad565b905061099760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff163083611e9f565b505b606460466018546109aa9190613c3f565b6109b49190613cad565b601881905550606460466019546109cb9190613c3f565b6109d59190613cad565b6019819055506009600a6109e99190613bf5565b6461f313f8806109f99190613c3f565b6016819055506009600a610a0d9190613bf5565b6461f313f880610a1d9190613c3f565b6017819055505f601b60176101000a81548160ff0219169083151502179055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6009600a610a6c9190613bf5565b6461f313f880610a7c9190613c3f565b604051610a899190613772565b60405180910390a150565b610a9c611cd5565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1f90613a20565b60405180910390fd5b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610bbf611cd5565b73ffffffffffffffffffffffffffffffffffffffff1614610c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0c90613d27565b60405180910390fd5b5f610c1f30611113565b90505f600b5490505f600c5490505f831115610c76575f479050610c4284613021565b5f8147610c4f9190613d45565b90505f811115610c6557610c64818585613241565b5b5f600b819055505f600c8190555050505b5f4790505f811115610ca057610c9181600b54600c54613241565b5f600b819055505f600c819055505b50505050565b610cae611cd5565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3190613a20565b60405180910390fd5b600160045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b610d9a611cd5565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1d90613a20565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8b90613dc2565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160035f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b610f55611cd5565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd890613a20565b60405180910390fd5b60198311158015610ff3575060198211155b8015611000575060198111155b61103f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103690613e2a565b60405180910390fd5b826008819055508160098190555080600a81905550505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611099611cd5565b73ffffffffffffffffffffffffffffffffffffffff16146110ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e690613d27565b60405180910390fd5b5f47905061110281600b54600c54613241565b5f600b819055505f600c8190555050565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611161611cd5565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e490613a20565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60165481565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166112ed611cd5565b73ffffffffffffffffffffffffffffffffffffffff1614611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133a90613d27565b60405180910390fd5b5f6113e160646113d3848673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016113869190613954565b602060405180830381865afa1580156113a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113c59190613e5c565b6133d890919063ffffffff16565b61344f90919063ffffffff16565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161143f929190613ed9565b6020604051808303815f875af115801561145b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061147f9190613f14565b50505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60175481565b60606040518060400160405280600481526020017f4654435000000000000000000000000000000000000000000000000000000000815250905090565b5f6115026114fb611cd5565b8484611e9f565b6001905092915050565b60185481565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166115d4611cd5565b73ffffffffffffffffffffffffffffffffffffffff161461162a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162190613d27565b60405180910390fd5b600f54811115801561163e57506010548111155b61167d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167490613f89565b60405180910390fd5b80600f819055508060108190555050565b611696611cd5565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611722576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171990613a20565b60405180910390fd5b601b60149054906101000a900460ff1615611772576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176990613ff1565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d601a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611831573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118559190614023565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118ff9190614023565b6040518363ffffffff1660e01b815260040161191c92919061404e565b602060405180830381865afa158015611937573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061195b9190614023565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b2857601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119fa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a1e9190614023565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611aa4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ac89190614023565b6040518363ffffffff1660e01b8152600401611ae592919061404e565b6020604051808303815f875af1158015611b01573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b259190614023565b90505b80601b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611bb130601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166009600a611b9c9190613bf5565b6461f313f880611bac9190613c3f565b611cdc565b601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71947306064605c611bfd30611113565b611c079190613c3f565b611c119190613cad565b5f80611c1b611485565b426040518863ffffffff1660e01b8152600401611c3d96959493929190614075565b60606040518083038185885af1158015611c59573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611c7e91906140d4565b5050506001601b60166101000a81548160ff0219169083151502179055506001601b60146101000a81548160ff0219169083151502179055506001601b60176101000a81548160ff02191690831515021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4190614194565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daf90614222565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611e929190613772565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f04906142b0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f729061433e565b60405180910390fd5b5f8111611fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb4906143cc565b60405180910390fd5b5f60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612059575060035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b159050612064611485565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806120cf57506120a0611485565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806120d8575080155b1561226a5761212d8260015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461349890919063ffffffff16565b60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506121be8260015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546134e190919063ffffffff16565b60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161225c9190613772565b60405180910390a350612fba565b60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612308575060045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561235b575060045f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b61239a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239190614434565b60405180910390fd5b601b60179054906101000a900460ff1615612560576123b7611485565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561243f5750601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156124985750601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561255f574360055f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541061251c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612513906144e8565b60405180910390fd5b4360055f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b5f80601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614801561260b5750601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561273657601654841115612655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264c90614550565b60405180910390fd5b6017548461266287611113565b61266c919061456e565b11156126ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a4906145eb565b60405180910390fd5b5f601154601554116126c157600d546126c5565b600f545b90506126ed60646126df83886133d890919063ffffffff16565b61344f90919063ffffffff16565b92506127176064612709600854886133d890919063ffffffff16565b61344f90919063ffffffff16565b915060155f81548092919061272b90614609565b919050555050612907565b601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480156127be57503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b15612835575f601254601554116127d757600e546127db565b6010545b905061280360646127f583886133d890919063ffffffff16565b61344f90919063ffffffff16565b925061282d606461281f600954886133d890919063ffffffff16565b61344f90919063ffffffff16565b915050612906565b5f601554036128b0575f6011546015541161285257600d54612856565b600f545b905061287e606461287083886133d890919063ffffffff16565b61344f90919063ffffffff16565b92506128a8606461289a600854886133d890919063ffffffff16565b61344f90919063ffffffff16565b915050612905565b6128d860646128ca601454876133d890919063ffffffff16565b61344f90919063ffffffff16565b915061290260646128f4600a54876133d890919063ffffffff16565b61344f90919063ffffffff16565b90505b5b5b5f8183612914919061456e565b90505f811115612a4b5761296e8160015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546134e190919063ffffffff16565b60015f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506129c483600b546134e190919063ffffffff16565b600b819055506129df82600c546134e190919063ffffffff16565b600c819055503073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612a429190613772565b60405180910390a35b601b60159054906101000a900460ff16158015612ab45750601b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b8015612acc5750601b60169054906101000a900460ff165b15612e0a575f612adb30611113565b905060185481118015612af15750601354601554115b15612e0857601d54431115612b08575f601c819055505b6002601c5410612b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b449061469a565b60405180910390fd5b5f612b916009600a612b5f9190613bf5565b6461f313f880612b6f9190613c3f565b612b836064856133d890919063ffffffff16565b61344f90919063ffffffff16565b90506007811015612c1b57612710600c6009600a612baf9190613bf5565b6461f313f880612bbf9190613c3f565b612bc99190613c3f565b612bd39190613cad565b601881905550612710600c6009600a612bec9190613bf5565b6461f313f880612bfc9190613c3f565b612c069190613c3f565b612c109190613cad565b601981905550612d1d565b600e811015612ca3576103e860046009600a612c379190613bf5565b6461f313f880612c479190613c3f565b612c519190613c3f565b612c5b9190613cad565b6018819055506103e860046009600a612c749190613bf5565b6461f313f880612c849190613c3f565b612c8e9190613c3f565b612c989190613cad565b601981905550612d1c565b606460016009600a612cb59190613bf5565b6461f313f880612cc59190613c3f565b612ccf9190613c3f565b612cd99190613cad565b601881905550606460016009600a612cf19190613bf5565b6461f313f880612d019190613c3f565b612d0b9190613c3f565b612d159190613cad565b6019819055505b5b5f612d3388612d2e8560195461353e565b61353e565b90505f600c54600b54612d46919061456e565b90505f805f831115612db2578284600b54612d619190613c3f565b612d6b9190613cad565b91508184612d799190613d45565b9050612d9082600b5461349890919063ffffffff16565b600b81905550612dab81600c5461349890919063ffffffff16565b600c819055505b5f479050612dbf85613021565b5f8147612dcc9190613d45565b90505f811115612de257612de1818585613241565b5b601c5f815480929190612df490614609565b919050555043601d81905550505050505050505b505b612e5a8560015f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461349890919063ffffffff16565b60015f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612efd612eb1828761349890919063ffffffff16565b60015f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546134e190919063ffffffff16565b60015f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef612fa0848961349890919063ffffffff16565b604051612fad9190613772565b60405180910390a3505050505b505050565b5f838311158290613006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ffd9190613641565b60405180910390fd5b505f83856130149190613d45565b9050809150509392505050565b6001601b60156101000a81548160ff021916908315150217905550606030815f81518110613052576130516146b8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130f6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061311a9190614023565b8160018151811061312e5761312d6146b8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061319430601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611cdc565b601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016131f695949392919061479c565b5f604051808303815f87803b15801561320d575f80fd5b505af115801561321f573d5f803e3d5ffd5b50505050505f601b60156101000a81548160ff02191690831515021790555050565b5f8303156133d3575f8183613256919061456e565b90505f81036132ca5760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8590811502906040515f60405180830381858888f193505050501580156132c3573d5f803e3d5ffd5b50506133d3565b5f8183866132d89190613c3f565b6132e29190613cad565b90505f81866132f19190613d45565b90505f8111156133615760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561335f573d5f803e3d5ffd5b505b5f8211156133cf5760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f193505050501580156133cd573d5f803e3d5ffd5b505b5050505b505050565b5f8083036133e8575f9050613449565b5f82846133f59190613c3f565b90508284826134049190613cad565b14613444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343b90614864565b60405180910390fd5b809150505b92915050565b5f61349083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613556565b905092915050565b5f6134d983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612fbf565b905092915050565b5f8082846134ef919061456e565b905083811015613534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352b906148cc565b60405180910390fd5b8091505092915050565b5f81831161354c578261354e565b815b905092915050565b5f808311829061359c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135939190613641565b60405180910390fd5b505f83856135aa9190613cad565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156135ee5780820151818401526020810190506135d3565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613613826135b7565b61361d81856135c1565b935061362d8185602086016135d1565b613636816135f9565b840191505092915050565b5f6020820190508181035f8301526136598184613609565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61368e82613665565b9050919050565b61369e81613684565b81146136a8575f80fd5b50565b5f813590506136b981613695565b92915050565b5f819050919050565b6136d1816136bf565b81146136db575f80fd5b50565b5f813590506136ec816136c8565b92915050565b5f806040838503121561370857613707613661565b5b5f613715858286016136ab565b9250506020613726858286016136de565b9150509250929050565b5f8115159050919050565b61374481613730565b82525050565b5f60208201905061375d5f83018461373b565b92915050565b61376c816136bf565b82525050565b5f6020820190506137855f830184613763565b92915050565b5f805f606084860312156137a2576137a1613661565b5b5f6137af868287016136ab565b93505060206137c0868287016136ab565b92505060406137d1868287016136de565b9150509250925092565b5f60ff82169050919050565b6137f0816137db565b82525050565b5f6020820190506138095f8301846137e7565b92915050565b5f6020828403121561382457613823613661565b5b5f613831848285016136ab565b91505092915050565b61384381613730565b811461384d575f80fd5b50565b5f8135905061385e8161383a565b92915050565b5f6020828403121561387957613878613661565b5b5f61388684828501613850565b91505092915050565b5f61389982613665565b9050919050565b6138a98161388f565b81146138b3575f80fd5b50565b5f813590506138c4816138a0565b92915050565b5f602082840312156138df576138de613661565b5b5f6138ec848285016138b6565b91505092915050565b5f805f6060848603121561390c5761390b613661565b5b5f613919868287016136de565b935050602061392a868287016136de565b925050604061393b868287016136de565b9150509250925092565b61394e81613684565b82525050565b5f6020820190506139675f830184613945565b92915050565b5f806040838503121561398357613982613661565b5b5f613990858286016136ab565b92505060206139a1858286016136ab565b9150509250929050565b5f602082840312156139c0576139bf613661565b5b5f6139cd848285016136de565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613a0a6020836135c1565b9150613a15826139d6565b602082019050919050565b5f6020820190508181035f830152613a37816139fe565b9050919050565b5f819050919050565b5f819050919050565b5f613a6a613a65613a6084613a3e565b613a47565b6136bf565b9050919050565b613a7a81613a50565b82525050565b5f602082019050613a935f830184613a71565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115613b1b57808604811115613af757613af6613a99565b5b6001851615613b065780820291505b8081029050613b1485613ac6565b9450613adb565b94509492505050565b5f82613b335760019050613bee565b81613b40575f9050613bee565b8160018114613b565760028114613b6057613b8f565b6001915050613bee565b60ff841115613b7257613b71613a99565b5b8360020a915084821115613b8957613b88613a99565b5b50613bee565b5060208310610133831016604e8410600b8410161715613bc45782820a905083811115613bbf57613bbe613a99565b5b613bee565b613bd18484846001613ad2565b92509050818404811115613be857613be7613a99565b5b81810290505b9392505050565b5f613bff826136bf565b9150613c0a836137db565b9250613c377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613b24565b905092915050565b5f613c49826136bf565b9150613c54836136bf565b9250828202613c62816136bf565b91508282048414831517613c7957613c78613a99565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613cb7826136bf565b9150613cc2836136bf565b925082613cd257613cd1613c80565b5b828204905092915050565b7f4e6f7420617574686f72697a65640000000000000000000000000000000000005f82015250565b5f613d11600e836135c1565b9150613d1c82613cdd565b602082019050919050565b5f6020820190508181035f830152613d3e81613d05565b9050919050565b5f613d4f826136bf565b9150613d5a836136bf565b9250828203905081811115613d7257613d71613a99565b5b92915050565b7f7a65726f206164647200000000000000000000000000000000000000000000005f82015250565b5f613dac6009836135c1565b9150613db782613d78565b602082019050919050565b5f6020820190508181035f830152613dd981613da0565b9050919050565b7f746f6f20686967680000000000000000000000000000000000000000000000005f82015250565b5f613e146008836135c1565b9150613e1f82613de0565b602082019050919050565b5f6020820190508181035f830152613e4181613e08565b9050919050565b5f81519050613e56816136c8565b92915050565b5f60208284031215613e7157613e70613661565b5b5f613e7e84828501613e48565b91505092915050565b5f613ea1613e9c613e9784613665565b613a47565b613665565b9050919050565b5f613eb282613e87565b9050919050565b5f613ec382613ea8565b9050919050565b613ed381613eb9565b82525050565b5f604082019050613eec5f830185613eca565b613ef96020830184613763565b9392505050565b5f81519050613f0e8161383a565b92915050565b5f60208284031215613f2957613f28613661565b5b5f613f3684828501613f00565b91505092915050565b7f496e76616c6964206665650000000000000000000000000000000000000000005f82015250565b5f613f73600b836135c1565b9150613f7e82613f3f565b602082019050919050565b5f6020820190508181035f830152613fa081613f67565b9050919050565b7f54726164696e6720697320616c7265616479206f70656e0000000000000000005f82015250565b5f613fdb6017836135c1565b9150613fe682613fa7565b602082019050919050565b5f6020820190508181035f83015261400881613fcf565b9050919050565b5f8151905061401d81613695565b92915050565b5f6020828403121561403857614037613661565b5b5f6140458482850161400f565b91505092915050565b5f6040820190506140615f830185613945565b61406e6020830184613945565b9392505050565b5f60c0820190506140885f830189613945565b6140956020830188613763565b6140a26040830187613a71565b6140af6060830186613a71565b6140bc6080830185613945565b6140c960a0830184613763565b979650505050505050565b5f805f606084860312156140eb576140ea613661565b5b5f6140f886828701613e48565b935050602061410986828701613e48565b925050604061411a86828701613e48565b9150509250925092565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61417e6024836135c1565b915061418982614124565b604082019050919050565b5f6020820190508181035f8301526141ab81614172565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61420c6022836135c1565b9150614217826141b2565b604082019050919050565b5f6020820190508181035f83015261423981614200565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61429a6025836135c1565b91506142a582614240565b604082019050919050565b5f6020820190508181035f8301526142c78161428e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6143286023836135c1565b9150614333826142ce565b604082019050919050565b5f6020820190508181035f8301526143558161431c565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f6143b66029836135c1565b91506143c18261435c565b604082019050919050565b5f6020820190508181035f8301526143e3816143aa565b9050919050565b7f426f7400000000000000000000000000000000000000000000000000000000005f82015250565b5f61441e6003836135c1565b9150614429826143ea565b602082019050919050565b5f6020820190508181035f83015261444b81614412565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c5f8201527f65642e204f6e6c79206f6e652070757263686173652070657220626c6f636b2060208201527f616c6c6f7765642e000000000000000000000000000000000000000000000000604082015250565b5f6144d26048836135c1565b91506144dd82614452565b606082019050919050565b5f6020820190508181035f8301526144ff816144c6565b9050919050565b7f4578636565647320746865205f6d61785478416d6f756e742e000000000000005f82015250565b5f61453a6019836135c1565b915061454582614506565b602082019050919050565b5f6020820190508181035f8301526145678161452e565b9050919050565b5f614578826136bf565b9150614583836136bf565b925082820190508082111561459b5761459a613a99565b5b92915050565b7f4578636565647320746865206d617857616c6c657453697a652e0000000000005f82015250565b5f6145d5601a836135c1565b91506145e0826145a1565b602082019050919050565b5f6020820190508181035f830152614602816145c9565b9050919050565b5f614613826136bf565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361464557614644613a99565b5b600182019050919050565b7f4f6e6c7920322073656c6c732070657220626c6f636b210000000000000000005f82015250565b5f6146846017836135c1565b915061468f82614650565b602082019050919050565b5f6020820190508181035f8301526146b181614678565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61471781613684565b82525050565b5f614728838361470e565b60208301905092915050565b5f602082019050919050565b5f61474a826146e5565b61475481856146ef565b935061475f836146ff565b805f5b8381101561478f578151614776888261471d565b975061478183614734565b925050600181019050614762565b5085935050505092915050565b5f60a0820190506147af5f830188613763565b6147bc6020830187613a71565b81810360408301526147ce8186614740565b90506147dd6060830185613945565b6147ea6080830184613763565b9695505050505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61484e6021836135c1565b9150614859826147f4565b604082019050919050565b5f6020820190508181035f83015261487b81614842565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6148b6601b836135c1565b91506148c182614882565b602082019050919050565b5f6020820190508181035f8301526148e3816148aa565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220d6a389c0bd2bea6be2acf37c7a569f2e3678136171540e595ac56356db9d08cf64736f6c63430008170033
Deployed Bytecode Sourcemap
3633:16254:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6615:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7372:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5390:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10474:120;;;;;;;;;;;;;:::i;:::-;;6844:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7541:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6769:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11157:72;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9993:473;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11076:75;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12984:945;;;;;;;;;;;;;:::i;:::-;;11002:68;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9401:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9640:309;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10602:392;;;;;;;;;;;;;:::i;:::-;;6931:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2620:148;;;;;;;;;;;;;:::i;:::-;;5194:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11237:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2406:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5257:58;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6690:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7044:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5322:61;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7219:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12669:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11600:1061;;;;;;;;;;;;;:::i;:::-;;6615:69;6652:13;6676:5;;;;;;;;;;;;;;;;;6669:12;;6615:69;:::o;7372:161::-;7447:4;7464:39;7473:12;:10;:12::i;:::-;7487:7;7496:6;7464:8;:39::i;:::-;7521:4;7514:11;;7372:161;;;;:::o;5390:55::-;;;;:::o;10474:120::-;2543:12;:10;:12::i;:::-;2533:22;;:6;;;;;;;;;;:22;;;2525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10548:1:::1;10533:12;:16;;;;10565:21;10584:1;10565:21;;;;;;:::i;:::-;;;;;;;;10474:120::o:0;6844:81::-;6897:7;4987:1;5045:2;:13;;;;:::i;:::-;5030:12;:28;;;;:::i;:::-;6908:14;;6844:81;:::o;7541:313::-;7639:4;7656:36;7666:6;7674:9;7685:6;7656:9;:36::i;:::-;7703:121;7712:6;7720:12;:10;:12::i;:::-;7734:89;7772:6;7734:89;;;;;;;;;;;;;;;;;:11;:19;7746:6;7734:19;;;;;;;;;;;;;;;:33;7754:12;:10;:12::i;:::-;7734:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;7703:8;:121::i;:::-;7842:4;7835:11;;7541:313;;;;;:::o;6769:69::-;6810:5;4987:1;6819:16;;6769:69;:::o;11157:72::-;11204:4;11219;:7;11224:1;11219:7;;;;;;;;;;;;;;;;;;;;;;;;;11212:14;;11157:72;;;:::o;9993:473::-;2543:12;:10;:12::i;:::-;2533:22;;:6;;;;;;;;;;:22;;;2525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10060:5:::1;10056:143;;;10082:20;10119:3;10115:1;4987;5045:2;:13;;;;:::i;:::-;5030:12;:28;;;;:::i;:::-;10105:11;;;;:::i;:::-;:17;;;;:::i;:::-;10082:40;;10137:50;10147:10;;;;;;;;;;;10167:4;10174:12;10137:9;:50::i;:::-;10067:132;10056:143;10256:3;10251:2;10231:17;;:22;;;;:::i;:::-;:28;;;;:::i;:::-;10211:17;:48;;;;10303:3;10298:2;10284:11;;:16;;;;:::i;:::-;:22;;;;:::i;:::-;10270:11;:36;;;;4987:1;5045:2;:13;;;;:::i;:::-;5030:12;:28;;;;:::i;:::-;10317:12;:22;;;;4987:1;5045:2;:13;;;;:::i;:::-;5030:12;:28;;;;:::i;:::-;10350:14;:24;;;;10408:5;10385:20;;:28;;;;;;;;;;;;;;;;;;10431:27;4987:1;5045:2;:13;;;;:::i;:::-;5030:12;:28;;;;:::i;:::-;10431:27;;;;;;:::i;:::-;;;;;;;;9993:473:::0;:::o;11076:75::-;2543:12;:10;:12::i;:::-;2533:22;;:6;;;;;;;;;;:22;;;2525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11143:5:::1;11128:4;:12;11133:6;11128:12;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;11076:75:::0;:::o;12984:945::-;13050:10;;;;;;;;;;;13034:26;;:12;:10;:12::i;:::-;:26;;;13026:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;13092:20;13115:24;13133:4;13115:9;:24::i;:::-;13092:47;;13150:14;13167:19;;13150:36;;13197:14;13214:19;;13197:36;;13265:1;13250:12;:16;13246:341;;;13283:14;13300:21;13283:38;;13336:30;13353:12;13336:16;:30::i;:::-;13381:14;13422:6;13398:21;:30;;;;:::i;:::-;13381:47;;13456:1;13447:6;:10;13443:54;;;13459:38;13474:6;13482;13490;13459:14;:38::i;:::-;13443:54;13536:1;13514:19;:23;;;;13574:1;13552:19;:23;;;;13268:319;;13246:341;13678:18;13699:21;13678:42;;13748:1;13735:10;:14;13731:191;;;13766:68;13781:10;13793:19;;13814;;13766:14;:68::i;:::-;13871:1;13849:19;:23;;;;13909:1;13887:19;:23;;;;13731:191;13015:914;;;;12984:945::o;11002:68::-;2543:12;:10;:12::i;:::-;2533:22;;:6;;;;;;;;;;:22;;;2525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11063:4:::1;11051;:9;11056:3;11051:9;;;;;;;;;;;;;;;;:16;;;;;;;;;;;;;;;;;;11002:68:::0;:::o;9401:231::-;2543:12;:10;:12::i;:::-;2533:22;;:6;;;;;;;;;;:22;;;2525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9515:1:::1;9494:23;;:9;:23;;::::0;9486:45:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;9561:9;9542:16;;:28;;;;;;;;;;;;;;;;;;9620:4;9581:18;:36;9600:16;;;;;;;;;;;9581:36;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;9401:231:::0;:::o;9640:309::-;2543:12;:10;:12::i;:::-;2533:22;;:6;;;;;;;;;;:22;;;2525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9768:2:::1;9758:6;:12;;:29;;;;;9785:2;9774:7;:13;;9758:29;:50;;;;;9806:2;9791:11;:17;;9758:50;9750:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9851:6;9832:16;:25;;;;9888:7;9868:17;:27;;;;9930:11;9906:21;:35;;;;9640:309:::0;;;:::o;10602:392::-;10668:10;;;;;;;;;;;10652:26;;:12;:10;:12::i;:::-;:26;;;10644:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;10708:26;10737:21;10708:50;;10842:76;10857:18;10877:19;;10898;;10842:14;:76::i;:::-;10951:1;10929:19;:23;;;;10985:1;10963:19;:23;;;;10633:361;10602:392::o;6931:105::-;6997:7;7015:9;:18;7025:7;7015:18;;;;;;;;;;;;;;;;7008:25;;6931:105;;;:::o;2620:148::-;2543:12;:10;:12::i;:::-;2533:22;;:6;;;;;;;;;;:22;;;2525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;2727:1:::1;2690:40;;2711:6;::::0;::::1;;;;;;;;2690:40;;;;;;;;;;;;2758:1;2741:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;2620:148::o:0;5194:56::-;;;;:::o;11237:286::-;11337:10;;;;;;;;;;;11321:26;;:12;:10;:12::i;:::-;:26;;;11313:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;11377:15;11395:63;11454:3;11395:54;11441:7;11402:8;11395:26;;;11430:4;11395:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;;:54;;;;:::i;:::-;:58;;:63;;;;:::i;:::-;11377:81;;11476:8;11469:25;;;11495:10;;;;;;;;;;;11507:7;11469:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11302:221;11237:286;;:::o;2406:79::-;2444:7;2471:6;;;;;;;;;;;2464:13;;2406:79;:::o;5257:58::-;;;;:::o;6690:73::-;6729:13;6753:7;;;;;;;;;;;;;;;;;6746:14;;6690:73;:::o;7044:167::-;7122:4;7139:42;7149:12;:10;:12::i;:::-;7163:9;7174:6;7139:9;:42::i;:::-;7199:4;7192:11;;7044:167;;;;:::o;5322:61::-;;;;:::o;7219:145::-;7301:7;7328:11;:19;7340:6;7328:19;;;;;;;;;;;;;;;:28;7348:7;7328:28;;;;;;;;;;;;;;;;7321:35;;7219:145;;;;:::o;12669:270::-;12749:10;;;;;;;;;;;12733:26;;:12;:10;:12::i;:::-;:26;;;12725:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;12808:12;;12797:7;:23;;:51;;;;;12835:13;;12824:7;:24;;12797:51;12789:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;12890:7;12875:12;:22;;;;12924:7;12908:13;:23;;;;12669:270;:::o;11600:1061::-;2543:12;:10;:12::i;:::-;2533:22;;:6;;;;;;;;;;:22;;;2525:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11660:11:::1;;;;;;;;;;;11659:12;11651:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;11749:42;11712:15;;:80;;;;;;;;;;;;;;;;;;11840:12;11873:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11855:52;;;11916:4;11923:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11855:91;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11840:106;;11977:1;11961:18;;:4;:18;;::::0;11957:152:::1;;12021:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12003:55;;;12067:4;12074:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12003:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11996:101;;11957:152;12135:4;12119:13;;:20;;;;;;;;;;;;;;;;;;12194:58;12211:4;12226:15;;;;;;;;;;;4987:1;5045:2;:13;;;;:::i;:::-;5030:12;:28;;;;:::i;:::-;12194:8;:58::i;:::-;12321:15;;;;;;;;;;;:31;;;12360:21;12405:4;12457:3;12452:2;12425:24;12443:4;12425:9;:24::i;:::-;:29;;;;:::i;:::-;:35;;;;:::i;:::-;12475:1;12491::::0;12507:7:::1;:5;:7::i;:::-;12529:15;12321:234;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;12582:4;12568:11;;:18;;;;;;;;;;;;;;;;;;12611:4;12597:11;;:18;;;;;;;;;;;;;;;;;;12649:4;12626:20;;:27;;;;;;;;;;;;;;;;;;11640:1021;11600:1061::o:0;199:98::-;252:7;279:10;272:17;;199:98;:::o;7862:339::-;7974:1;7956:20;;:6;:20;;;7948:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;8055:1;8036:21;;:7;:21;;;8028:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8138:6;8107:11;:19;8119:6;8107:19;;;;;;;;;;;;;;;:28;8127:7;8107:28;;;;;;;;;;;;;;;:37;;;;8177:7;8160:33;;8169:6;8160:33;;;8186:6;8160:33;;;;;;:::i;:::-;;;;;;;;7862:339;;;:::o;13993:5891::-;14097:1;14081:18;;:4;:18;;;14073:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14174:1;14160:16;;:2;:16;;;14152:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;14244:1;14235:6;:10;14227:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;14337:12;14355:18;:24;14374:4;14355:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;14383:18;:22;14402:2;14383:22;;;;;;;;;;;;;;;;;;;;;;;;;14355:50;14352:55;14337:70;;14471:7;:5;:7::i;:::-;14463:15;;:4;:15;;;:32;;;;14488:7;:5;:7::i;:::-;14482:13;;:2;:13;;;14463:32;:44;;;;14500:7;14499:8;14463:44;14459:245;;;14542:27;14562:6;14542:9;:15;14552:4;14542:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;14524:9;:15;14534:4;14524:15;;;;;;;;;;;;;;;:45;;;;14600:25;14618:6;14600:9;:13;14610:2;14600:13;;;;;;;;;;;;;;;;:17;;:25;;;;:::i;:::-;14584:9;:13;14594:2;14584:13;;;;;;;;;;;;;;;:41;;;;14660:2;14645:26;;14654:4;14645:26;;;14664:6;14645:26;;;;;;:::i;:::-;;;;;;;;14686:7;;;14459:245;14725:4;:10;14730:4;14725:10;;;;;;;;;;;;;;;;;;;;;;;;;14724:11;:24;;;;;14740:4;:8;14745:2;14740:8;;;;;;;;;;;;;;;;;;;;;;;;;14739:9;14724:24;:44;;;;;14753:4;:15;14758:9;14753:15;;;;;;;;;;;;;;;;;;;;;;;;;14752:16;14724:44;14716:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;14793:20;;;;;;;;;;;14789:511;;;14858:7;:5;:7::i;:::-;14852:13;;:2;:13;;;;:64;;;;;14900:15;;;;;;;;;;;14886:30;;:2;:30;;;;14852:64;:113;;;;;14951:13;;;;;;;;;;;14937:28;;:2;:28;;;;14852:113;14830:459;;;15072:12;15030:28;:39;15059:9;15030:39;;;;;;;;;;;;;;;;:54;15000:200;;;;;;;;;;;;:::i;:::-;;;;;;;;;15261:12;15219:28;:39;15248:9;15219:39;;;;;;;;;;;;;;;:54;;;;14830:459;14789:511;15312:17;15344:23;15412:13;;;;;;;;;;;15404:21;;:4;:21;;;:55;;;;;15443:15;;;;;;;;;;;15429:30;;:2;:30;;;;15404:55;15400:1412;;;15494:12;;15484:6;:22;;15476:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;15585:14;;15575:6;15559:13;15569:2;15559:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;15551:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;15647:14;15677:15;;15665:9;;:27;15664:61;;15711:14;;15664:61;;;15696:12;;15664:61;15647:78;;15752:27;15775:3;15752:18;15763:6;15752;:10;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;15740:39;;15812:37;15845:3;15812:28;15823:16;;15812:6;:10;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;15794:55;;15866:9;;:11;;;;;;;;;:::i;:::-;;;;;;15461:428;15400:1412;;;15931:13;;;;;;;;;;;15925:19;;:2;:19;;;:44;;;;;15964:4;15948:21;;:4;:21;;;;15925:44;15921:891;;;15986:15;16017:16;;16005:9;;:28;16004:64;;16053:15;;16004:64;;;16037:13;;16004:64;15986:82;;16095:28;16119:3;16095:19;16106:7;16095:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;16083:40;;16156:38;16190:3;16156:29;16167:17;;16156:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;16138:56;;15971:235;15921:891;;;16386:1;16373:9;;:14;16369:432;;16408:15;16439;;16427:9;;:27;16426:61;;16473:14;;16426:61;;;16458:12;;16426:61;16408:79;;16518:28;16542:3;16518:19;16529:7;16518:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;16506:40;;16583:37;16616:3;16583:28;16594:16;;16583:6;:10;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;16565:55;;16389:247;16369:432;;;16673:33;16702:3;16673:24;16684:12;;16673:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;16661:45;;16743:42;16781:3;16743:33;16754:21;;16743:6;:10;;:33;;;;:::i;:::-;:37;;:42;;;;:::i;:::-;16725:60;;16369:432;15921:891;15400:1412;16824:17;16856:15;16844:9;:27;;;;:::i;:::-;16824:47;;16922:1;16910:9;:13;16906:320;;;16967:39;16996:9;16967;:24;16985:4;16967:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;16940:9;:24;16958:4;16940:24;;;;;;;;;;;;;;;:66;;;;17043:34;17067:9;17043:19;;:23;;:34;;;;:::i;:::-;17021:19;:56;;;;17114:40;17138:15;17114:19;;:23;;:40;;;;:::i;:::-;17092:19;:62;;;;17197:4;17174:40;;17183:4;17174:40;;;17204:9;17174:40;;;;;;:::i;:::-;;;;;;;;16906:320;17361:6;;;;;;;;;;;17360:7;:43;;;;;17390:13;;;;;;;;;;;17384:19;;:2;:19;;;17360:43;:71;;;;;17420:11;;;;;;;;;;;17360:71;17342:2323;;;17458:28;17489:24;17507:4;17489:9;:24::i;:::-;17458:55;;17555:17;;17532:20;:40;:74;;;;;17588:18;;17576:9;;:30;17532:74;17528:2126;;;17701:13;;17686:12;:28;17682:90;;;17751:1;17739:9;:13;;;;17682:90;17810:1;17798:9;;:13;17790:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;17916:24;17943:42;4987:1;5045:2;:13;;;;:::i;:::-;5030:12;:28;;;;:::i;:::-;17943:29;17968:3;17943:20;:24;;:29;;;;:::i;:::-;:33;;:42;;;;:::i;:::-;17916:69;;18027:1;18008:16;:20;18004:549;;;18088:5;18083:2;4987:1;5045:2;:13;;;;:::i;:::-;5030:12;:28;;;;:::i;:::-;18073:12;;;;:::i;:::-;:20;;;;:::i;:::-;18053:17;:40;;;;18154:5;18149:2;4987:1;5045:2;:13;;;;:::i;:::-;5030:12;:28;;;;:::i;:::-;18139:12;;;;:::i;:::-;:20;;;;:::i;:::-;18125:11;:34;;;;18004:549;;;18223:2;18204:16;:21;18200:353;;;18284:4;18280:1;4987;5045:2;:13;;;;:::i;:::-;5030:12;:28;;;;:::i;:::-;18270:11;;;;:::i;:::-;:18;;;;:::i;:::-;18250:17;:38;;;;18349:4;18345:1;4987;5045:2;:13;;;;:::i;:::-;5030:12;:28;;;;:::i;:::-;18335:11;;;;:::i;:::-;:18;;;;:::i;:::-;18321:11;:32;;;;18200:353;;;18452:3;18448:1;4987;5045:2;:13;;;;:::i;:::-;5030:12;:28;;;;:::i;:::-;18438:11;;;;:::i;:::-;:17;;;;:::i;:::-;18418;:37;;;;18515:3;18511:1;4987;5045:2;:13;;;;:::i;:::-;5030:12;:28;;;;:::i;:::-;18501:11;;;;:::i;:::-;:17;;;;:::i;:::-;18487:11;:31;;;;18200:353;18004:549;18573:25;18601:51;18605:6;18613:38;18617:20;18639:11;;18613:3;:38::i;:::-;18601:3;:51::i;:::-;18573:79;;18736:19;18780;;18758;;:41;;;;:::i;:::-;18736:63;;18818:18;18859;18918:1;18904:11;:15;18900:356;;;18999:11;18979:17;18957:19;;:39;;;;:::i;:::-;:53;;;;:::i;:::-;18944:66;;19066:10;19046:17;:30;;;;:::i;:::-;19033:43;;19121:35;19145:10;19121:19;;:23;;:35;;;;:::i;:::-;19099:19;:57;;;;19201:35;19225:10;19201:19;;:23;;:35;;;;:::i;:::-;19179:19;:57;;;;18900:356;19276:14;19293:21;19276:38;;19333:35;19350:17;19333:16;:35::i;:::-;19387:14;19428:6;19404:21;:30;;;;:::i;:::-;19387:47;;19468:1;19459:6;:10;19455:105;;;19494:46;19509:6;19517:10;19529;19494:14;:46::i;:::-;19455:105;19580:9;;:11;;;;;;;;;:::i;:::-;;;;;;19626:12;19610:13;:28;;;;17608:2046;;;;;;;17528:2126;17443:2222;17342:2323;19725:27;19745:6;19725:9;:15;19735:4;19725:15;;;;;;;;;;;;;;;;:19;;:27;;;;:::i;:::-;19707:9;:15;19717:4;19707:15;;;;;;;;;;;;;;;:45;;;;19779:40;19797:21;19808:9;19797:6;:10;;:21;;;;:::i;:::-;19779:9;:13;19789:2;19779:13;;;;;;;;;;;;;;;;:17;;:40;;;;:::i;:::-;19763:9;:13;19773:2;19763:13;;;;;;;;;;;;;;;:56;;;;19850:2;19835:41;;19844:4;19835:41;;;19854:21;19865:9;19854:6;:10;;:21;;;;:::i;:::-;19835:41;;;;;;:::i;:::-;;;;;;;;14062:5822;;;;13993:5891;;;;:::o;1332:190::-;1418:7;1451:1;1446;:6;;1454:12;1438:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1478:9;1494:1;1490;:5;;;;:::i;:::-;1478:17;;1513:1;1506:8;;;1332:190;;;;;:::o;8867:468::-;5908:4;5899:6;;:13;;;;;;;;;;;;;;;;;;8945:21:::1;8995:4;8977;8982:1;8977:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;9021:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9011:4;9016:1;9011:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;9056:62;9073:4;9088:15;;;;;;;;;;;9106:11;9056:8;:62::i;:::-;9131:15;;;;;;;;;;;:66;;;9212:11;9238:1;9254:4;9281;9301:15;9131:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;8934:401;5944:5:::0;5935:6;;:14;;;;;;;;;;;;;;;;;;8867:468;:::o;8350:509::-;8455:1;8445:6;:11;8441:24;8458:7;8441:24;8477:16;8505:6;8496;:15;;;;:::i;:::-;8477:34;;8538:1;8526:8;:13;8522:94;;8556:10;;;;;;;;;;;:19;;:27;8576:6;8556:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8598:7;;;8522:94;8628:17;8666:8;8657:6;8648;:15;;;;:::i;:::-;:26;;;;:::i;:::-;8628:46;;8685:17;8714:9;8705:6;:18;;;;:::i;:::-;8685:38;;8752:1;8740:9;:13;8736:49;;;8755:10;;;;;;;;;;;:19;;:30;8775:9;8755:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8736:49;8812:1;8800:9;:13;8796:55;;;8815:16;;;;;;;;;;;:25;;:36;8841:9;8815:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8796:55;8430:429;;;8350:509;;;;:::o;1528:220::-;1586:7;1615:1;1610;:6;1606:20;;1625:1;1618:8;;;;1606:20;1637:9;1653:1;1649;:5;;;;:::i;:::-;1637:17;;1682:1;1677;1673;:5;;;;:::i;:::-;:10;1665:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1739:1;1732:8;;;1528:220;;;;;:::o;1754:132::-;1812:7;1839:39;1843:1;1846;1839:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1832:46;;1754:132;;;;:::o;1190:136::-;1248:7;1275:43;1279:1;1282;1275:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1268:50;;1190:136;;;;:::o;1005:179::-;1063:7;1083:9;1099:1;1095;:5;;;;:::i;:::-;1083:17;;1124:1;1119;:6;;1111:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1175:1;1168:8;;;1005:179;;;;:::o;8235:107::-;8292:7;8324:1;8320;:5;8319:15;;8333:1;8319:15;;;8329:1;8319:15;8312:22;;8235:107;;;;:::o;1892:189::-;1978:7;2010:1;2006;:5;2013:12;1998:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2037:9;2053:1;2049;:5;;;;:::i;:::-;2037:17;;2072:1;2065:8;;;1892:189;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:329::-;4912:6;4961:2;4949:9;4940:7;4936:23;4932:32;4929:119;;;4967:79;;:::i;:::-;4929:119;5087:1;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5058:117;4853:329;;;;:::o;5188:116::-;5258:21;5273:5;5258:21;:::i;:::-;5251:5;5248:32;5238:60;;5294:1;5291;5284:12;5238:60;5188:116;:::o;5310:133::-;5353:5;5391:6;5378:20;5369:29;;5407:30;5431:5;5407:30;:::i;:::-;5310:133;;;;:::o;5449:323::-;5505:6;5554:2;5542:9;5533:7;5529:23;5525:32;5522:119;;;5560:79;;:::i;:::-;5522:119;5680:1;5705:50;5747:7;5738:6;5727:9;5723:22;5705:50;:::i;:::-;5695:60;;5651:114;5449:323;;;;:::o;5778:104::-;5823:7;5852:24;5870:5;5852:24;:::i;:::-;5841:35;;5778:104;;;:::o;5888:138::-;5969:32;5995:5;5969:32;:::i;:::-;5962:5;5959:43;5949:71;;6016:1;6013;6006:12;5949:71;5888:138;:::o;6032:155::-;6086:5;6124:6;6111:20;6102:29;;6140:41;6175:5;6140:41;:::i;:::-;6032:155;;;;:::o;6193:345::-;6260:6;6309:2;6297:9;6288:7;6284:23;6280:32;6277:119;;;6315:79;;:::i;:::-;6277:119;6435:1;6460:61;6513:7;6504:6;6493:9;6489:22;6460:61;:::i;:::-;6450:71;;6406:125;6193:345;;;;:::o;6544:619::-;6621:6;6629;6637;6686:2;6674:9;6665:7;6661:23;6657:32;6654:119;;;6692:79;;:::i;:::-;6654:119;6812:1;6837:53;6882:7;6873:6;6862:9;6858:22;6837:53;:::i;:::-;6827:63;;6783:117;6939:2;6965:53;7010:7;7001:6;6990:9;6986:22;6965:53;:::i;:::-;6955:63;;6910:118;7067:2;7093:53;7138:7;7129:6;7118:9;7114:22;7093:53;:::i;:::-;7083:63;;7038:118;6544:619;;;;;:::o;7169:118::-;7256:24;7274:5;7256:24;:::i;:::-;7251:3;7244:37;7169:118;;:::o;7293:222::-;7386:4;7424:2;7413:9;7409:18;7401:26;;7437:71;7505:1;7494:9;7490:17;7481:6;7437:71;:::i;:::-;7293:222;;;;:::o;7521:474::-;7589:6;7597;7646:2;7634:9;7625:7;7621:23;7617:32;7614:119;;;7652:79;;:::i;:::-;7614:119;7772:1;7797:53;7842:7;7833:6;7822:9;7818:22;7797:53;:::i;:::-;7787:63;;7743:117;7899:2;7925:53;7970:7;7961:6;7950:9;7946:22;7925:53;:::i;:::-;7915:63;;7870:118;7521:474;;;;;:::o;8001:329::-;8060:6;8109:2;8097:9;8088:7;8084:23;8080:32;8077:119;;;8115:79;;:::i;:::-;8077:119;8235:1;8260:53;8305:7;8296:6;8285:9;8281:22;8260:53;:::i;:::-;8250:63;;8206:117;8001:329;;;;:::o;8336:182::-;8476:34;8472:1;8464:6;8460:14;8453:58;8336:182;:::o;8524:366::-;8666:3;8687:67;8751:2;8746:3;8687:67;:::i;:::-;8680:74;;8763:93;8852:3;8763:93;:::i;:::-;8881:2;8876:3;8872:12;8865:19;;8524:366;;;:::o;8896:419::-;9062:4;9100:2;9089:9;9085:18;9077:26;;9149:9;9143:4;9139:20;9135:1;9124:9;9120:17;9113:47;9177:131;9303:4;9177:131;:::i;:::-;9169:139;;8896:419;;;:::o;9321:85::-;9366:7;9395:5;9384:16;;9321:85;;;:::o;9412:60::-;9440:3;9461:5;9454:12;;9412:60;;;:::o;9478:158::-;9536:9;9569:61;9587:42;9596:32;9622:5;9596:32;:::i;:::-;9587:42;:::i;:::-;9569:61;:::i;:::-;9556:74;;9478:158;;;:::o;9642:147::-;9737:45;9776:5;9737:45;:::i;:::-;9732:3;9725:58;9642:147;;:::o;9795:238::-;9896:4;9934:2;9923:9;9919:18;9911:26;;9947:79;10023:1;10012:9;10008:17;9999:6;9947:79;:::i;:::-;9795:238;;;;:::o;10039:180::-;10087:77;10084:1;10077:88;10184:4;10181:1;10174:15;10208:4;10205:1;10198:15;10225:102;10267:8;10314:5;10311:1;10307:13;10286:34;;10225:102;;;:::o;10333:848::-;10394:5;10401:4;10425:6;10416:15;;10449:5;10440:14;;10463:712;10484:1;10474:8;10471:15;10463:712;;;10579:4;10574:3;10570:14;10564:4;10561:24;10558:50;;;10588:18;;:::i;:::-;10558:50;10638:1;10628:8;10624:16;10621:451;;;11053:4;11046:5;11042:16;11033:25;;10621:451;11103:4;11097;11093:15;11085:23;;11133:32;11156:8;11133:32;:::i;:::-;11121:44;;10463:712;;;10333:848;;;;;;;:::o;11187:1073::-;11241:5;11432:8;11422:40;;11453:1;11444:10;;11455:5;;11422:40;11481:4;11471:36;;11498:1;11489:10;;11500:5;;11471:36;11567:4;11615:1;11610:27;;;;11651:1;11646:191;;;;11560:277;;11610:27;11628:1;11619:10;;11630:5;;;11646:191;11691:3;11681:8;11678:17;11675:43;;;11698:18;;:::i;:::-;11675:43;11747:8;11744:1;11740:16;11731:25;;11782:3;11775:5;11772:14;11769:40;;;11789:18;;:::i;:::-;11769:40;11822:5;;;11560:277;;11946:2;11936:8;11933:16;11927:3;11921:4;11918:13;11914:36;11896:2;11886:8;11883:16;11878:2;11872:4;11869:12;11865:35;11849:111;11846:246;;;12002:8;11996:4;11992:19;11983:28;;12037:3;12030:5;12027:14;12024:40;;;12044:18;;:::i;:::-;12024:40;12077:5;;11846:246;12117:42;12155:3;12145:8;12139:4;12136:1;12117:42;:::i;:::-;12102:57;;;;12191:4;12186:3;12182:14;12175:5;12172:25;12169:51;;;12200:18;;:::i;:::-;12169:51;12249:4;12242:5;12238:16;12229:25;;11187:1073;;;;;;:::o;12266:281::-;12324:5;12348:23;12366:4;12348:23;:::i;:::-;12340:31;;12392:25;12408:8;12392:25;:::i;:::-;12380:37;;12436:104;12473:66;12463:8;12457:4;12436:104;:::i;:::-;12427:113;;12266:281;;;;:::o;12553:410::-;12593:7;12616:20;12634:1;12616:20;:::i;:::-;12611:25;;12650:20;12668:1;12650:20;:::i;:::-;12645:25;;12705:1;12702;12698:9;12727:30;12745:11;12727:30;:::i;:::-;12716:41;;12906:1;12897:7;12893:15;12890:1;12887:22;12867:1;12860:9;12840:83;12817:139;;12936:18;;:::i;:::-;12817:139;12601:362;12553:410;;;;:::o;12969:180::-;13017:77;13014:1;13007:88;13114:4;13111:1;13104:15;13138:4;13135:1;13128:15;13155:185;13195:1;13212:20;13230:1;13212:20;:::i;:::-;13207:25;;13246:20;13264:1;13246:20;:::i;:::-;13241:25;;13285:1;13275:35;;13290:18;;:::i;:::-;13275:35;13332:1;13329;13325:9;13320:14;;13155:185;;;;:::o;13346:164::-;13486:16;13482:1;13474:6;13470:14;13463:40;13346:164;:::o;13516:366::-;13658:3;13679:67;13743:2;13738:3;13679:67;:::i;:::-;13672:74;;13755:93;13844:3;13755:93;:::i;:::-;13873:2;13868:3;13864:12;13857:19;;13516:366;;;:::o;13888:419::-;14054:4;14092:2;14081:9;14077:18;14069:26;;14141:9;14135:4;14131:20;14127:1;14116:9;14112:17;14105:47;14169:131;14295:4;14169:131;:::i;:::-;14161:139;;13888:419;;;:::o;14313:194::-;14353:4;14373:20;14391:1;14373:20;:::i;:::-;14368:25;;14407:20;14425:1;14407:20;:::i;:::-;14402:25;;14451:1;14448;14444:9;14436:17;;14475:1;14469:4;14466:11;14463:37;;;14480:18;;:::i;:::-;14463:37;14313:194;;;;:::o;14513:159::-;14653:11;14649:1;14641:6;14637:14;14630:35;14513:159;:::o;14678:365::-;14820:3;14841:66;14905:1;14900:3;14841:66;:::i;:::-;14834:73;;14916:93;15005:3;14916:93;:::i;:::-;15034:2;15029:3;15025:12;15018:19;;14678:365;;;:::o;15049:419::-;15215:4;15253:2;15242:9;15238:18;15230:26;;15302:9;15296:4;15292:20;15288:1;15277:9;15273:17;15266:47;15330:131;15456:4;15330:131;:::i;:::-;15322:139;;15049:419;;;:::o;15474:158::-;15614:10;15610:1;15602:6;15598:14;15591:34;15474:158;:::o;15638:365::-;15780:3;15801:66;15865:1;15860:3;15801:66;:::i;:::-;15794:73;;15876:93;15965:3;15876:93;:::i;:::-;15994:2;15989:3;15985:12;15978:19;;15638:365;;;:::o;16009:419::-;16175:4;16213:2;16202:9;16198:18;16190:26;;16262:9;16256:4;16252:20;16248:1;16237:9;16233:17;16226:47;16290:131;16416:4;16290:131;:::i;:::-;16282:139;;16009:419;;;:::o;16434:143::-;16491:5;16522:6;16516:13;16507:22;;16538:33;16565:5;16538:33;:::i;:::-;16434:143;;;;:::o;16583:351::-;16653:6;16702:2;16690:9;16681:7;16677:23;16673:32;16670:119;;;16708:79;;:::i;:::-;16670:119;16828:1;16853:64;16909:7;16900:6;16889:9;16885:22;16853:64;:::i;:::-;16843:74;;16799:128;16583:351;;;;:::o;16940:142::-;16990:9;17023:53;17041:34;17050:24;17068:5;17050:24;:::i;:::-;17041:34;:::i;:::-;17023:53;:::i;:::-;17010:66;;16940:142;;;:::o;17088:126::-;17138:9;17171:37;17202:5;17171:37;:::i;:::-;17158:50;;17088:126;;;:::o;17220:134::-;17278:9;17311:37;17342:5;17311:37;:::i;:::-;17298:50;;17220:134;;;:::o;17360:147::-;17455:45;17494:5;17455:45;:::i;:::-;17450:3;17443:58;17360:147;;:::o;17513:348::-;17642:4;17680:2;17669:9;17665:18;17657:26;;17693:79;17769:1;17758:9;17754:17;17745:6;17693:79;:::i;:::-;17782:72;17850:2;17839:9;17835:18;17826:6;17782:72;:::i;:::-;17513:348;;;;;:::o;17867:137::-;17921:5;17952:6;17946:13;17937:22;;17968:30;17992:5;17968:30;:::i;:::-;17867:137;;;;:::o;18010:345::-;18077:6;18126:2;18114:9;18105:7;18101:23;18097:32;18094:119;;;18132:79;;:::i;:::-;18094:119;18252:1;18277:61;18330:7;18321:6;18310:9;18306:22;18277:61;:::i;:::-;18267:71;;18223:125;18010:345;;;;:::o;18361:161::-;18501:13;18497:1;18489:6;18485:14;18478:37;18361:161;:::o;18528:366::-;18670:3;18691:67;18755:2;18750:3;18691:67;:::i;:::-;18684:74;;18767:93;18856:3;18767:93;:::i;:::-;18885:2;18880:3;18876:12;18869:19;;18528:366;;;:::o;18900:419::-;19066:4;19104:2;19093:9;19089:18;19081:26;;19153:9;19147:4;19143:20;19139:1;19128:9;19124:17;19117:47;19181:131;19307:4;19181:131;:::i;:::-;19173:139;;18900:419;;;:::o;19325:173::-;19465:25;19461:1;19453:6;19449:14;19442:49;19325:173;:::o;19504:366::-;19646:3;19667:67;19731:2;19726:3;19667:67;:::i;:::-;19660:74;;19743:93;19832:3;19743:93;:::i;:::-;19861:2;19856:3;19852:12;19845:19;;19504:366;;;:::o;19876:419::-;20042:4;20080:2;20069:9;20065:18;20057:26;;20129:9;20123:4;20119:20;20115:1;20104:9;20100:17;20093:47;20157:131;20283:4;20157:131;:::i;:::-;20149:139;;19876:419;;;:::o;20301:143::-;20358:5;20389:6;20383:13;20374:22;;20405:33;20432:5;20405:33;:::i;:::-;20301:143;;;;:::o;20450:351::-;20520:6;20569:2;20557:9;20548:7;20544:23;20540:32;20537:119;;;20575:79;;:::i;:::-;20537:119;20695:1;20720:64;20776:7;20767:6;20756:9;20752:22;20720:64;:::i;:::-;20710:74;;20666:128;20450:351;;;;:::o;20807:332::-;20928:4;20966:2;20955:9;20951:18;20943:26;;20979:71;21047:1;21036:9;21032:17;21023:6;20979:71;:::i;:::-;21060:72;21128:2;21117:9;21113:18;21104:6;21060:72;:::i;:::-;20807:332;;;;;:::o;21145:807::-;21394:4;21432:3;21421:9;21417:19;21409:27;;21446:71;21514:1;21503:9;21499:17;21490:6;21446:71;:::i;:::-;21527:72;21595:2;21584:9;21580:18;21571:6;21527:72;:::i;:::-;21609:80;21685:2;21674:9;21670:18;21661:6;21609:80;:::i;:::-;21699;21775:2;21764:9;21760:18;21751:6;21699:80;:::i;:::-;21789:73;21857:3;21846:9;21842:19;21833:6;21789:73;:::i;:::-;21872;21940:3;21929:9;21925:19;21916:6;21872:73;:::i;:::-;21145:807;;;;;;;;;:::o;21958:663::-;22046:6;22054;22062;22111:2;22099:9;22090:7;22086:23;22082:32;22079:119;;;22117:79;;:::i;:::-;22079:119;22237:1;22262:64;22318:7;22309:6;22298:9;22294:22;22262:64;:::i;:::-;22252:74;;22208:128;22375:2;22401:64;22457:7;22448:6;22437:9;22433:22;22401:64;:::i;:::-;22391:74;;22346:129;22514:2;22540:64;22596:7;22587:6;22576:9;22572:22;22540:64;:::i;:::-;22530:74;;22485:129;21958:663;;;;;:::o;22627:223::-;22767:34;22763:1;22755:6;22751:14;22744:58;22836:6;22831:2;22823:6;22819:15;22812:31;22627:223;:::o;22856:366::-;22998:3;23019:67;23083:2;23078:3;23019:67;:::i;:::-;23012:74;;23095:93;23184:3;23095:93;:::i;:::-;23213:2;23208:3;23204:12;23197:19;;22856:366;;;:::o;23228:419::-;23394:4;23432:2;23421:9;23417:18;23409:26;;23481:9;23475:4;23471:20;23467:1;23456:9;23452:17;23445:47;23509:131;23635:4;23509:131;:::i;:::-;23501:139;;23228:419;;;:::o;23653:221::-;23793:34;23789:1;23781:6;23777:14;23770:58;23862:4;23857:2;23849:6;23845:15;23838:29;23653:221;:::o;23880:366::-;24022:3;24043:67;24107:2;24102:3;24043:67;:::i;:::-;24036:74;;24119:93;24208:3;24119:93;:::i;:::-;24237:2;24232:3;24228:12;24221:19;;23880:366;;;:::o;24252:419::-;24418:4;24456:2;24445:9;24441:18;24433:26;;24505:9;24499:4;24495:20;24491:1;24480:9;24476:17;24469:47;24533:131;24659:4;24533:131;:::i;:::-;24525:139;;24252:419;;;:::o;24677:224::-;24817:34;24813:1;24805:6;24801:14;24794:58;24886:7;24881:2;24873:6;24869:15;24862:32;24677:224;:::o;24907:366::-;25049:3;25070:67;25134:2;25129:3;25070:67;:::i;:::-;25063:74;;25146:93;25235:3;25146:93;:::i;:::-;25264:2;25259:3;25255:12;25248:19;;24907:366;;;:::o;25279:419::-;25445:4;25483:2;25472:9;25468:18;25460:26;;25532:9;25526:4;25522:20;25518:1;25507:9;25503:17;25496:47;25560:131;25686:4;25560:131;:::i;:::-;25552:139;;25279:419;;;:::o;25704:222::-;25844:34;25840:1;25832:6;25828:14;25821:58;25913:5;25908:2;25900:6;25896:15;25889:30;25704:222;:::o;25932:366::-;26074:3;26095:67;26159:2;26154:3;26095:67;:::i;:::-;26088:74;;26171:93;26260:3;26171:93;:::i;:::-;26289:2;26284:3;26280:12;26273:19;;25932:366;;;:::o;26304:419::-;26470:4;26508:2;26497:9;26493:18;26485:26;;26557:9;26551:4;26547:20;26543:1;26532:9;26528:17;26521:47;26585:131;26711:4;26585:131;:::i;:::-;26577:139;;26304:419;;;:::o;26729:228::-;26869:34;26865:1;26857:6;26853:14;26846:58;26938:11;26933:2;26925:6;26921:15;26914:36;26729:228;:::o;26963:366::-;27105:3;27126:67;27190:2;27185:3;27126:67;:::i;:::-;27119:74;;27202:93;27291:3;27202:93;:::i;:::-;27320:2;27315:3;27311:12;27304:19;;26963:366;;;:::o;27335:419::-;27501:4;27539:2;27528:9;27524:18;27516:26;;27588:9;27582:4;27578:20;27574:1;27563:9;27559:17;27552:47;27616:131;27742:4;27616:131;:::i;:::-;27608:139;;27335:419;;;:::o;27760:153::-;27900:5;27896:1;27888:6;27884:14;27877:29;27760:153;:::o;27919:365::-;28061:3;28082:66;28146:1;28141:3;28082:66;:::i;:::-;28075:73;;28157:93;28246:3;28157:93;:::i;:::-;28275:2;28270:3;28266:12;28259:19;;27919:365;;;:::o;28290:419::-;28456:4;28494:2;28483:9;28479:18;28471:26;;28543:9;28537:4;28533:20;28529:1;28518:9;28514:17;28507:47;28571:131;28697:4;28571:131;:::i;:::-;28563:139;;28290:419;;;:::o;28715:296::-;28855:34;28851:1;28843:6;28839:14;28832:58;28924:34;28919:2;28911:6;28907:15;28900:59;28993:10;28988:2;28980:6;28976:15;28969:35;28715:296;:::o;29017:366::-;29159:3;29180:67;29244:2;29239:3;29180:67;:::i;:::-;29173:74;;29256:93;29345:3;29256:93;:::i;:::-;29374:2;29369:3;29365:12;29358:19;;29017:366;;;:::o;29389:419::-;29555:4;29593:2;29582:9;29578:18;29570:26;;29642:9;29636:4;29632:20;29628:1;29617:9;29613:17;29606:47;29670:131;29796:4;29670:131;:::i;:::-;29662:139;;29389:419;;;:::o;29814:175::-;29954:27;29950:1;29942:6;29938:14;29931:51;29814:175;:::o;29995:366::-;30137:3;30158:67;30222:2;30217:3;30158:67;:::i;:::-;30151:74;;30234:93;30323:3;30234:93;:::i;:::-;30352:2;30347:3;30343:12;30336:19;;29995:366;;;:::o;30367:419::-;30533:4;30571:2;30560:9;30556:18;30548:26;;30620:9;30614:4;30610:20;30606:1;30595:9;30591:17;30584:47;30648:131;30774:4;30648:131;:::i;:::-;30640:139;;30367:419;;;:::o;30792:191::-;30832:3;30851:20;30869:1;30851:20;:::i;:::-;30846:25;;30885:20;30903:1;30885:20;:::i;:::-;30880:25;;30928:1;30925;30921:9;30914:16;;30949:3;30946:1;30943:10;30940:36;;;30956:18;;:::i;:::-;30940:36;30792:191;;;;:::o;30989:176::-;31129:28;31125:1;31117:6;31113:14;31106:52;30989:176;:::o;31171:366::-;31313:3;31334:67;31398:2;31393:3;31334:67;:::i;:::-;31327:74;;31410:93;31499:3;31410:93;:::i;:::-;31528:2;31523:3;31519:12;31512:19;;31171:366;;;:::o;31543:419::-;31709:4;31747:2;31736:9;31732:18;31724:26;;31796:9;31790:4;31786:20;31782:1;31771:9;31767:17;31760:47;31824:131;31950:4;31824:131;:::i;:::-;31816:139;;31543:419;;;:::o;31968:233::-;32007:3;32030:24;32048:5;32030:24;:::i;:::-;32021:33;;32076:66;32069:5;32066:77;32063:103;;32146:18;;:::i;:::-;32063:103;32193:1;32186:5;32182:13;32175:20;;31968:233;;;:::o;32207:173::-;32347:25;32343:1;32335:6;32331:14;32324:49;32207:173;:::o;32386:366::-;32528:3;32549:67;32613:2;32608:3;32549:67;:::i;:::-;32542:74;;32625:93;32714:3;32625:93;:::i;:::-;32743:2;32738:3;32734:12;32727:19;;32386:366;;;:::o;32758:419::-;32924:4;32962:2;32951:9;32947:18;32939:26;;33011:9;33005:4;33001:20;32997:1;32986:9;32982:17;32975:47;33039:131;33165:4;33039:131;:::i;:::-;33031:139;;32758:419;;;:::o;33183:180::-;33231:77;33228:1;33221:88;33328:4;33325:1;33318:15;33352:4;33349:1;33342:15;33369:114;33436:6;33470:5;33464:12;33454:22;;33369:114;;;:::o;33489:184::-;33588:11;33622:6;33617:3;33610:19;33662:4;33657:3;33653:14;33638:29;;33489:184;;;;:::o;33679:132::-;33746:4;33769:3;33761:11;;33799:4;33794:3;33790:14;33782:22;;33679:132;;;:::o;33817:108::-;33894:24;33912:5;33894:24;:::i;:::-;33889:3;33882:37;33817:108;;:::o;33931:179::-;34000:10;34021:46;34063:3;34055:6;34021:46;:::i;:::-;34099:4;34094:3;34090:14;34076:28;;33931:179;;;;:::o;34116:113::-;34186:4;34218;34213:3;34209:14;34201:22;;34116:113;;;:::o;34265:732::-;34384:3;34413:54;34461:5;34413:54;:::i;:::-;34483:86;34562:6;34557:3;34483:86;:::i;:::-;34476:93;;34593:56;34643:5;34593:56;:::i;:::-;34672:7;34703:1;34688:284;34713:6;34710:1;34707:13;34688:284;;;34789:6;34783:13;34816:63;34875:3;34860:13;34816:63;:::i;:::-;34809:70;;34902:60;34955:6;34902:60;:::i;:::-;34892:70;;34748:224;34735:1;34732;34728:9;34723:14;;34688:284;;;34692:14;34988:3;34981:10;;34389:608;;;34265:732;;;;:::o;35003:831::-;35266:4;35304:3;35293:9;35289:19;35281:27;;35318:71;35386:1;35375:9;35371:17;35362:6;35318:71;:::i;:::-;35399:80;35475:2;35464:9;35460:18;35451:6;35399:80;:::i;:::-;35526:9;35520:4;35516:20;35511:2;35500:9;35496:18;35489:48;35554:108;35657:4;35648:6;35554:108;:::i;:::-;35546:116;;35672:72;35740:2;35729:9;35725:18;35716:6;35672:72;:::i;:::-;35754:73;35822:3;35811:9;35807:19;35798:6;35754:73;:::i;:::-;35003:831;;;;;;;;:::o;35840:220::-;35980:34;35976:1;35968:6;35964:14;35957:58;36049:3;36044:2;36036:6;36032:15;36025:28;35840:220;:::o;36066:366::-;36208:3;36229:67;36293:2;36288:3;36229:67;:::i;:::-;36222:74;;36305:93;36394:3;36305:93;:::i;:::-;36423:2;36418:3;36414:12;36407:19;;36066:366;;;:::o;36438:419::-;36604:4;36642:2;36631:9;36627:18;36619:26;;36691:9;36685:4;36681:20;36677:1;36666:9;36662:17;36655:47;36719:131;36845:4;36719:131;:::i;:::-;36711:139;;36438:419;;;:::o;36863:177::-;37003:29;36999:1;36991:6;36987:14;36980:53;36863:177;:::o;37046:366::-;37188:3;37209:67;37273:2;37268:3;37209:67;:::i;:::-;37202:74;;37285:93;37374:3;37285:93;:::i;:::-;37403:2;37398:3;37394:12;37387:19;;37046:366;;;:::o;37418:419::-;37584:4;37622:2;37611:9;37607:18;37599:26;;37671:9;37665:4;37661:20;37657:1;37646:9;37642:17;37635:47;37699:131;37825:4;37699:131;:::i;:::-;37691:139;;37418:419;;;:::o
Swarm Source
ipfs://d6a389c0bd2bea6be2acf37c7a569f2e3678136171540e595ac56356db9d08cf
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.
Add Token to MetaMask (Web3)