ERC-20
Overview
Max Total Supply
69,000,000,000,000,000,000,000 Shiroi Umi
Holders
22
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
1,736,894,439,723,503,485.374643936 Shiroi UmiValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
SHIO
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-07 */ // SPDX-License-Identifier: Unlicensed pragma solidity ^0.8.9; interface IERC20 { function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } abstract contract Context { //function _msgSender() internal view virtual returns (address payable) { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function geUnlockTime() public view returns (uint256) { return _lockTime; } //Locks the contract for owner for the amount of time provided function lockContractForOwner(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = block.timestamp + time; emit OwnershipTransferred(_owner, address(0)); } //Unlocks the contract for owner when _lockTime is exceeds function unlockContractForOwner() public virtual { require(_previousOwner == msg.sender, "You don't have permission to unlock"); require(block.timestamp > _lockTime , "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } interface IAirdrop { function airdrop(address recipient, uint256 amount) external; } contract SHIO is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; mapping (address => bool) private botWallets; bool botscantrade = false; bool public canTrade = false; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 69000000000000000000000 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; address public marketingWallet; string private _name = "SHIO"; string private _symbol = "Shiroi Umi"; uint8 private _decimals = 9; uint256 public _taxFee = 7; uint256 private _previousTaxFee = _taxFee; uint256 public _liquidityFee = 1; uint256 private _previousLiquidityFee = _liquidityFee; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public _maxTxAmount = 990000000000000000000 * 10**9; uint256 public numTokensSellToAddToLiquidity = 690000000000000000000 * 10**9; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //Mainnet & Testnet ETH // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; //exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[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 increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.'); require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setMarketingWallet(address walletAddress) public onlyOwner { marketingWallet = walletAddress; } function RemoveLimits() external onlyOwner() { _maxTxAmount = 69000000000000000000000 * 10**9; } function setSwapThresholdAmount(uint256 SwapThresholdAmount) external onlyOwner() { require(SwapThresholdAmount > 69000000, "Swap Threshold Amount cannot be less than 69 Million"); numTokensSellToAddToLiquidity = SwapThresholdAmount * 10**9; } function claimTokens () public onlyOwner { payable(marketingWallet).transfer(address(this).balance); } function claimOtherTokens(IERC20 tokenAddress, address walletaddress) external onlyOwner() { tokenAddress.transfer(walletaddress, tokenAddress.balanceOf(address(this))); } function clearStuckBalance (address payable walletaddress) external onlyOwner() { walletaddress.transfer(address(this).balance); } function getBotWalletStatus(address botwallet) public view returns (bool) { return botWallets[botwallet]; } function Launch()external onlyOwner() { canTrade = true; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); return (tTransferAmount, tFee, tLiquidity); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**2 ); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div( 10**2 ); } function removeAllFee() private { if(_taxFee == 0 && _liquidityFee == 0) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _taxFee = 0; _liquidityFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } 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); } 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"); if(from != owner() && to != owner()) require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + liquidity lock? // also, don't get caught in a circular liquidity event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); if(contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = numTokensSellToAddToLiquidity; //add liquidity swapAndLiquify(contractTokenBalance); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from,to,amount,takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { // split the contract balance into halves // add the marketing wallet uint256 half = contractTokenBalance.div(2); uint256 otherHalf = contractTokenBalance.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); uint256 marketingshare = newBalance.mul(75).div(100); payable(marketingWallet).transfer(marketingshare); newBalance -= marketingshare; // add liquidity to uniswap addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private { if(!canTrade){ require(sender == owner()); // only owner allowed to trade or add liquidity } if(botWallets[sender] || botWallets[recipient]){ require(botscantrade, "bots arent allowed to trade"); } if(!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if(!takeFee) restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","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":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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"},{"inputs":[],"name":"Launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"RemoveLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_liquidityFee","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":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"canTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenAddress","type":"address"},{"internalType":"address","name":"walletaddress","type":"address"}],"name":"claimOtherTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"walletaddress","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"getBotWalletStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lockContractForOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"SwapThresholdAmount","type":"uint256"}],"name":"setSwapThresholdAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlockContractForOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526000600a60006101000a81548160ff0219169083151502179055506000600a60016101000a81548160ff0219169083151502179055506d0366e7064422fd84202340000000600b55600b546000196200005e9190620006fc565b6000196200006d919062000763565b600c556040518060400160405280600481526020017f5348494f00000000000000000000000000000000000000000000000000000000815250600f9080519060200190620000bd92919062000613565b506040518060400160405280600a81526020017f536869726f6920556d6900000000000000000000000000000000000000000000815250601090805190602001906200010b92919062000613565b506009601160006101000a81548160ff021916908360ff160217905550600760125560125460135560016014556014546015556001601660016101000a81548160ff0219169083151502179055506c0c7edcce72084feb89300000006017556c08b5829f66bff9a429500000006018553480156200018857600080fd5b5060006200019b620005e260201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600c546003600062000250620005e260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002ee57600080fd5b505afa15801562000303573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000329919062000808565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200038c57600080fd5b505afa158015620003a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c7919062000808565b6040518363ffffffff1660e01b8152600401620003e69291906200084b565b602060405180830381600087803b1580156200040157600080fd5b505af115801562000416573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200043c919062000808565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050600160066000620004b9620005ea60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000572620005e260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b54604051620005d3919062000889565b60405180910390a3506200090b565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200062190620008d5565b90600052602060002090601f01602090048101928262000645576000855562000691565b82601f106200066057805160ff191683800117855562000691565b8280016001018555821562000691579182015b828111156200069057825182559160200191906001019062000673565b5b509050620006a09190620006a4565b5090565b5b80821115620006bf576000816000905550600101620006a5565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200070982620006c3565b91506200071683620006c3565b925082620007295762000728620006cd565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200077082620006c3565b91506200077d83620006c3565b92508282101562000793576200079262000734565b5b828203905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620007d082620007a3565b9050919050565b620007e281620007c3565b8114620007ee57600080fd5b50565b6000815190506200080281620007d7565b92915050565b6000602082840312156200082157620008206200079e565b5b60006200083184828501620007f1565b91505092915050565b6200084581620007c3565b82525050565b60006040820190506200086260008301856200083a565b6200087160208301846200083a565b9392505050565b6200088381620006c3565b82525050565b6000602082019050620008a0600083018462000878565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620008ee57607f821691505b60208210811415620009055762000904620008a6565b5b50919050565b60805160a051615ff76200095b600039600081816118140152612e46015260008181610bdb01528181613bcf01528181613cbf01528181613ce601528181613dfd0152613e240152615ff76000f3fe6080604052600436106102765760003560e01c80635342acb41161014f5780638da5cb5b116100c1578063c49b9a801161007a578063c49b9a8014610961578063d12a76881461098a578063dd62ed3e146109b5578063ea2f0b37146109f2578063f2fde38b14610a1b578063ff2f4d8814610a445761027d565b80638da5cb5b1461084f57806395d89b411461087a578063a457c2d7146108a5578063a9059cbb146108e2578063afa463271461091f578063b6c52324146109365761027d565b806370a082311161011357806370a082311461073f578063715018a61461077c57806375f0a87414610793578063764d72bf146107be5780637d1db4a5146107e757806388f82020146108125761027d565b80635342acb41461065a57806356cd40e7146106975780635d098b38146106ae57806360d48489146106d75780636bc87c3a146107145761027d565b80633685d419116101e8578063437823ec116101ac578063437823ec1461055e5780634549b0391461058757806348c54b9d146105c457806349bd5a5e146105db5780634a74bb021461060657806352390c02146106315761027d565b80633685d4191461047b57806339509351146104a45780633ae7dc20146104e15780633b124fe71461050a5780633bd5d173146105355761027d565b806318160ddd1161023a57806318160ddd1461035757806323b872dd1461038257806329e04b4a146103bf5780632d838119146103e85780632f05205c14610425578063313ce567146104505761027d565b806302ac81681461028257806306fdde0314610299578063095ea7b3146102c457806313114a9d146103015780631694505e1461032c5761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b50610297610a6d565b005b3480156102a557600080fd5b506102ae610b1f565b6040516102bb9190614b98565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e69190614c53565b610bb1565b6040516102f89190614cae565b60405180910390f35b34801561030d57600080fd5b50610316610bcf565b6040516103239190614cd8565b60405180910390f35b34801561033857600080fd5b50610341610bd9565b60405161034e9190614d52565b60405180910390f35b34801561036357600080fd5b5061036c610bfd565b6040516103799190614cd8565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a49190614d6d565b610c07565b6040516103b69190614cae565b60405180910390f35b3480156103cb57600080fd5b506103e660048036038101906103e19190614dc0565b610ce0565b005b3480156103f457600080fd5b5061040f600480360381019061040a9190614dc0565b610dd4565b60405161041c9190614cd8565b60405180910390f35b34801561043157600080fd5b5061043a610e42565b6040516104479190614cae565b60405180910390f35b34801561045c57600080fd5b50610465610e55565b6040516104729190614e09565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d9190614e24565b610e6c565b005b3480156104b057600080fd5b506104cb60048036038101906104c69190614c53565b6111bb565b6040516104d89190614cae565b60405180910390f35b3480156104ed57600080fd5b5061050860048036038101906105039190614e8f565b61126e565b005b34801561051657600080fd5b5061051f61141d565b60405161052c9190614cd8565b60405180910390f35b34801561054157600080fd5b5061055c60048036038101906105579190614dc0565b611423565b005b34801561056a57600080fd5b5061058560048036038101906105809190614e24565b61159e565b005b34801561059357600080fd5b506105ae60048036038101906105a99190614efb565b61168e565b6040516105bb9190614cd8565b60405180910390f35b3480156105d057600080fd5b506105d9611712565b005b3480156105e757600080fd5b506105f0611812565b6040516105fd9190614f4a565b60405180910390f35b34801561061257600080fd5b5061061b611836565b6040516106289190614cae565b60405180910390f35b34801561063d57600080fd5b5061065860048036038101906106539190614e24565b611849565b005b34801561066657600080fd5b50610681600480360381019061067c9190614e24565b611afd565b60405161068e9190614cae565b60405180910390f35b3480156106a357600080fd5b506106ac611b53565b005b3480156106ba57600080fd5b506106d560048036038101906106d09190614e24565b611bff565b005b3480156106e357600080fd5b506106fe60048036038101906106f99190614e24565b611cd8565b60405161070b9190614cae565b60405180910390f35b34801561072057600080fd5b50610729611d2e565b6040516107369190614cd8565b60405180910390f35b34801561074b57600080fd5b5061076660048036038101906107619190614e24565b611d34565b6040516107739190614cd8565b60405180910390f35b34801561078857600080fd5b50610791611e1f565b005b34801561079f57600080fd5b506107a8611f72565b6040516107b59190614f4a565b60405180910390f35b3480156107ca57600080fd5b506107e560048036038101906107e09190614fa3565b611f98565b005b3480156107f357600080fd5b506107fc612077565b6040516108099190614cd8565b60405180910390f35b34801561081e57600080fd5b5061083960048036038101906108349190614e24565b61207d565b6040516108469190614cae565b60405180910390f35b34801561085b57600080fd5b506108646120d3565b6040516108719190614f4a565b60405180910390f35b34801561088657600080fd5b5061088f6120fc565b60405161089c9190614b98565b60405180910390f35b3480156108b157600080fd5b506108cc60048036038101906108c79190614c53565b61218e565b6040516108d99190614cae565b60405180910390f35b3480156108ee57600080fd5b5061090960048036038101906109049190614c53565b61225b565b6040516109169190614cae565b60405180910390f35b34801561092b57600080fd5b50610934612279565b005b34801561094257600080fd5b5061094b61244d565b6040516109589190614cd8565b60405180910390f35b34801561096d57600080fd5b5061098860048036038101906109839190614fd0565b612457565b005b34801561099657600080fd5b5061099f612540565b6040516109ac9190614cd8565b60405180910390f35b3480156109c157600080fd5b506109dc60048036038101906109d79190614ffd565b612546565b6040516109e99190614cd8565b60405180910390f35b3480156109fe57600080fd5b50610a196004803603810190610a149190614e24565b6125cd565b005b348015610a2757600080fd5b50610a426004803603810190610a3d9190614e24565b6126bd565b005b348015610a5057600080fd5b50610a6b6004803603810190610a669190614dc0565b61287f565b005b610a75612a46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af990615089565b60405180910390fd5b6001600a60016101000a81548160ff021916908315150217905550565b6060600f8054610b2e906150d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5a906150d8565b8015610ba75780601f10610b7c57610100808354040283529160200191610ba7565b820191906000526020600020905b815481529060010190602001808311610b8a57829003601f168201915b5050505050905090565b6000610bc5610bbe612a46565b8484612a4e565b6001905092915050565b6000600d54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600b54905090565b6000610c14848484612c19565b610cd584610c20612a46565b610cd085604051806060016040528060288152602001615f7560289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c86612a46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f869092919063ffffffff16565b612a4e565b600190509392505050565b610ce8612a46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6c90615089565b60405180910390fd5b63041cdb408111610dbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db29061517c565b60405180910390fd5b633b9aca0081610dcb91906151cb565b60188190555050565b6000600c54821115610e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1290615297565b60405180910390fd5b6000610e25612fea565b9050610e3a818461301590919063ffffffff16565b915050919050565b600a60019054906101000a900460ff1681565b6000601160009054906101000a900460ff16905090565b610e74612a46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef890615089565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8490615303565b60405180910390fd5b60005b6008805490508110156111b7578173ffffffffffffffffffffffffffffffffffffffff1660088281548110610fc857610fc7615323565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156111a457600860016008805490506110239190615352565b8154811061103457611033615323565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166008828154811061107357611072615323565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600880548061116a57611169615386565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556111b7565b80806111af906153b5565b915050610f90565b5050565b60006112646111c8612a46565b8461125f85600560006111d9612a46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461305f90919063ffffffff16565b612a4e565b6001905092915050565b611276612a46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fa90615089565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb828473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016113599190614f4a565b60206040518083038186803b15801561137157600080fd5b505afa158015611385573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a99190615413565b6040518363ffffffff1660e01b81526004016113c6929190615440565b602060405180830381600087803b1580156113e057600080fd5b505af11580156113f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611418919061547e565b505050565b60125481565b600061142d612a46565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156114bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b39061551d565b60405180910390fd5b60006114c7836130bd565b5050505050905061152081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461311990919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061157881600c5461311990919063ffffffff16565b600c8190555061159383600d5461305f90919063ffffffff16565b600d81905550505050565b6115a6612a46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162a90615089565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600b548311156116d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cc90615589565b60405180910390fd5b816116f55760006116e5846130bd565b505050505090508091505061170c565b6000611700846130bd565b50505050915050809150505b92915050565b61171a612a46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179e90615089565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561180f573d6000803e3d6000fd5b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b601660019054906101000a900460ff1681565b611851612a46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d590615089565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561196b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196290615303565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611a3f576119fb600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610dd4565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611b5b612a46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdf90615089565b60405180910390fd5b6d0366e7064422fd84202340000000601781905550565b611c07612a46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8b90615089565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611dcf57600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611e1a565b611e17600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610dd4565b90505b919050565b611e27612a46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab90615089565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611fa0612a46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461202d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202490615089565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612073573d6000803e3d6000fd5b5050565b60175481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606010805461210b906150d8565b80601f0160208091040260200160405190810160405280929190818152602001828054612137906150d8565b80156121845780601f1061215957610100808354040283529160200191612184565b820191906000526020600020905b81548152906001019060200180831161216757829003601f168201915b5050505050905090565b600061225161219b612a46565b8461224c85604051806060016040528060258152602001615f9d60259139600560006121c5612a46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f869092919063ffffffff16565b612a4e565b6001905092915050565b600061226f612268612a46565b8484612c19565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612309576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123009061561b565b60405180910390fd5b600254421161234d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234490615687565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600254905090565b61245f612a46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e390615089565b60405180910390fd5b80601660016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516125359190614cae565b60405180910390a150565b60185481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6125d5612a46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265990615089565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6126c5612a46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612752576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274990615089565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b990615719565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612887612a46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290b90615089565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080426129c29190615739565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab590615801565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2590615893565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c0c9190614cd8565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8090615925565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf0906159b7565b60405180910390fd5b60008111612d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3390615a49565b60405180910390fd5b612d446120d3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612db25750612d826120d3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612dfd57601754811115612dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df390615adb565b60405180910390fd5b5b6000612e0830611d34565b90506017548110612e195760175490505b60006018548210159050808015612e3d5750601660009054906101000a900460ff16155b8015612e9557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612ead5750601660019054906101000a900460ff165b15612ec1576018549150612ec082613163565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f685750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f7257600090505b612f7e868686846132dc565b505050505050565b6000838311158290612fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc59190614b98565b60405180910390fd5b5060008385612fdd9190615352565b9050809150509392505050565b6000806000612ff7613737565b9150915061300e818361301590919063ffffffff16565b9250505090565b600061305783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506139ea565b905092915050565b600080828461306e9190615739565b9050838110156130b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130aa90615b47565b60405180910390fd5b8091505092915050565b60008060008060008060008060006130d48a613a4d565b92509250925060008060006130f28d86866130ed612fea565b613aa7565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061315b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612f86565b905092915050565b6001601660006101000a81548160ff021916908315150217905550600061319460028361301590919063ffffffff16565b905060006131ab828461311990919063ffffffff16565b905060004790506131bb83613b30565b60006131d0824761311990919063ffffffff16565b905060006131fb60646131ed604b85613d7c90919063ffffffff16565b61301590919063ffffffff16565b9050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613265573d6000803e3d6000fd5b5080826132729190615352565b915061327e8483613df7565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618583866040516132b193929190615b67565b60405180910390a150505050506000601660006101000a81548160ff02191690831515021790555050565b600a60019054906101000a900460ff16613330576132f86120d3565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461332f57600080fd5b5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133d15750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561342657600a60009054906101000a900460ff16613425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341c90615bea565b60405180910390fd5b5b8061343457613433613ee7565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134d75750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134ec576134e7848484613f2a565b613723565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561358f5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135a45761359f84848461418a565b613722565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156136485750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561365d576136588484846143ea565b613721565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136ff5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156137145761370f8484846145b5565b613720565b61371f8484846143ea565b5b5b5b5b80613731576137306148aa565b5b50505050565b6000806000600c5490506000600b54905060005b6008805490508110156139ad5782600360006008848154811061377157613770615323565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061385f57508160046000600884815481106137f7576137f6615323565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561387657600c54600b54945094505050506139e6565b613906600360006008848154811061389157613890615323565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461311990919063ffffffff16565b9250613998600460006008848154811061392357613922615323565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361311990919063ffffffff16565b915080806139a5906153b5565b91505061374b565b506139c5600b54600c5461301590919063ffffffff16565b8210156139dd57600c54600b549350935050506139e6565b81819350935050505b9091565b60008083118290613a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a289190614b98565b60405180910390fd5b5060008385613a409190615c39565b9050809150509392505050565b600080600080613a5c856148be565b90506000613a69866148ef565b90506000613a9282613a84858a61311990919063ffffffff16565b61311990919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613ac08589613d7c90919063ffffffff16565b90506000613ad78689613d7c90919063ffffffff16565b90506000613aee8789613d7c90919063ffffffff16565b90506000613b1782613b09858761311990919063ffffffff16565b61311990919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff811115613b4d57613b4c615c6a565b5b604051908082528060200260200182016040528015613b7b5781602001602082028036833780820191505090505b5090503081600081518110613b9357613b92615323565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613c3357600080fd5b505afa158015613c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c6b9190615cae565b81600181518110613c7f57613c7e615323565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613ce4307f000000000000000000000000000000000000000000000000000000000000000084612a4e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613d46959493929190615dd4565b600060405180830381600087803b158015613d6057600080fd5b505af1158015613d74573d6000803e3d6000fd5b505050505050565b600080831415613d8f5760009050613df1565b60008284613d9d91906151cb565b9050828482613dac9190615c39565b14613dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613de390615ea0565b60405180910390fd5b809150505b92915050565b613e22307f000000000000000000000000000000000000000000000000000000000000000084612a4e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613e6c6120d3565b426040518863ffffffff1660e01b8152600401613e8e96959493929190615ec0565b6060604051808303818588803b158015613ea757600080fd5b505af1158015613ebb573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ee09190615f21565b5050505050565b6000601254148015613efb57506000601454145b15613f0557613f28565b601254601381905550601454601581905550600060128190555060006014819055505b565b600080600080600080613f3c876130bd565b955095509550955095509550613f9a87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461311990919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061402f86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461311990919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140c485600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461305f90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061411081614920565b61411a8483614ac5565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516141779190614cd8565b60405180910390a3505050505050505050565b60008060008060008061419c876130bd565b9550955095509550955095506141fa86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461311990919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061428f83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461305f90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061432485600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461305f90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061437081614920565b61437a8483614ac5565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516143d79190614cd8565b60405180910390a3505050505050505050565b6000806000806000806143fc876130bd565b95509550955095509550955061445a86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461311990919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144ef85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461305f90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061453b81614920565b6145458483614ac5565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516145a29190614cd8565b60405180910390a3505050505050505050565b6000806000806000806145c7876130bd565b95509550955095509550955061462587600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461311990919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146ba86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461311990919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061474f83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461305f90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147e485600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461305f90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061483081614920565b61483a8483614ac5565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516148979190614cd8565b60405180910390a3505050505050505050565b601354601281905550601554601481905550565b60006148e860646148da60125485613d7c90919063ffffffff16565b61301590919063ffffffff16565b9050919050565b6000614919606461490b60145485613d7c90919063ffffffff16565b61301590919063ffffffff16565b9050919050565b600061492a612fea565b905060006149418284613d7c90919063ffffffff16565b905061499581600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461305f90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614ac057614a7c83600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461305f90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614ada82600c5461311990919063ffffffff16565b600c81905550614af581600d5461305f90919063ffffffff16565b600d819055505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614b39578082015181840152602081019050614b1e565b83811115614b48576000848401525b50505050565b6000601f19601f8301169050919050565b6000614b6a82614aff565b614b748185614b0a565b9350614b84818560208601614b1b565b614b8d81614b4e565b840191505092915050565b60006020820190508181036000830152614bb28184614b5f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614bea82614bbf565b9050919050565b614bfa81614bdf565b8114614c0557600080fd5b50565b600081359050614c1781614bf1565b92915050565b6000819050919050565b614c3081614c1d565b8114614c3b57600080fd5b50565b600081359050614c4d81614c27565b92915050565b60008060408385031215614c6a57614c69614bba565b5b6000614c7885828601614c08565b9250506020614c8985828601614c3e565b9150509250929050565b60008115159050919050565b614ca881614c93565b82525050565b6000602082019050614cc36000830184614c9f565b92915050565b614cd281614c1d565b82525050565b6000602082019050614ced6000830184614cc9565b92915050565b6000819050919050565b6000614d18614d13614d0e84614bbf565b614cf3565b614bbf565b9050919050565b6000614d2a82614cfd565b9050919050565b6000614d3c82614d1f565b9050919050565b614d4c81614d31565b82525050565b6000602082019050614d676000830184614d43565b92915050565b600080600060608486031215614d8657614d85614bba565b5b6000614d9486828701614c08565b9350506020614da586828701614c08565b9250506040614db686828701614c3e565b9150509250925092565b600060208284031215614dd657614dd5614bba565b5b6000614de484828501614c3e565b91505092915050565b600060ff82169050919050565b614e0381614ded565b82525050565b6000602082019050614e1e6000830184614dfa565b92915050565b600060208284031215614e3a57614e39614bba565b5b6000614e4884828501614c08565b91505092915050565b6000614e5c82614bdf565b9050919050565b614e6c81614e51565b8114614e7757600080fd5b50565b600081359050614e8981614e63565b92915050565b60008060408385031215614ea657614ea5614bba565b5b6000614eb485828601614e7a565b9250506020614ec585828601614c08565b9150509250929050565b614ed881614c93565b8114614ee357600080fd5b50565b600081359050614ef581614ecf565b92915050565b60008060408385031215614f1257614f11614bba565b5b6000614f2085828601614c3e565b9250506020614f3185828601614ee6565b9150509250929050565b614f4481614bdf565b82525050565b6000602082019050614f5f6000830184614f3b565b92915050565b6000614f7082614bbf565b9050919050565b614f8081614f65565b8114614f8b57600080fd5b50565b600081359050614f9d81614f77565b92915050565b600060208284031215614fb957614fb8614bba565b5b6000614fc784828501614f8e565b91505092915050565b600060208284031215614fe657614fe5614bba565b5b6000614ff484828501614ee6565b91505092915050565b6000806040838503121561501457615013614bba565b5b600061502285828601614c08565b925050602061503385828601614c08565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000615073602083614b0a565b915061507e8261503d565b602082019050919050565b600060208201905081810360008301526150a281615066565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806150f057607f821691505b60208210811415615104576151036150a9565b5b50919050565b7f53776170205468726573686f6c6420416d6f756e742063616e6e6f742062652060008201527f6c657373207468616e203639204d696c6c696f6e000000000000000000000000602082015250565b6000615166603483614b0a565b91506151718261510a565b604082019050919050565b6000602082019050818103600083015261519581615159565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006151d682614c1d565b91506151e183614c1d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561521a5761521961519c565b5b828202905092915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000615281602a83614b0a565b915061528c82615225565b604082019050919050565b600060208201905081810360008301526152b081615274565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b60006152ed601b83614b0a565b91506152f8826152b7565b602082019050919050565b6000602082019050818103600083015261531c816152e0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061535d82614c1d565b915061536883614c1d565b92508282101561537b5761537a61519c565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006153c082614c1d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156153f3576153f261519c565b5b600182019050919050565b60008151905061540d81614c27565b92915050565b60006020828403121561542957615428614bba565b5b6000615437848285016153fe565b91505092915050565b60006040820190506154556000830185614f3b565b6154626020830184614cc9565b9392505050565b60008151905061547881614ecf565b92915050565b60006020828403121561549457615493614bba565b5b60006154a284828501615469565b91505092915050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6000615507602c83614b0a565b9150615512826154ab565b604082019050919050565b60006020820190508181036000830152615536816154fa565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000615573601f83614b0a565b915061557e8261553d565b602082019050919050565b600060208201905081810360008301526155a281615566565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b6000615605602383614b0a565b9150615610826155a9565b604082019050919050565b60006020820190508181036000830152615634816155f8565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b6000615671601f83614b0a565b915061567c8261563b565b602082019050919050565b600060208201905081810360008301526156a081615664565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615703602683614b0a565b915061570e826156a7565b604082019050919050565b60006020820190508181036000830152615732816156f6565b9050919050565b600061574482614c1d565b915061574f83614c1d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156157845761578361519c565b5b828201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006157eb602483614b0a565b91506157f68261578f565b604082019050919050565b6000602082019050818103600083015261581a816157de565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061587d602283614b0a565b915061588882615821565b604082019050919050565b600060208201905081810360008301526158ac81615870565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061590f602583614b0a565b915061591a826158b3565b604082019050919050565b6000602082019050818103600083015261593e81615902565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006159a1602383614b0a565b91506159ac82615945565b604082019050919050565b600060208201905081810360008301526159d081615994565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000615a33602983614b0a565b9150615a3e826159d7565b604082019050919050565b60006020820190508181036000830152615a6281615a26565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000615ac5602883614b0a565b9150615ad082615a69565b604082019050919050565b60006020820190508181036000830152615af481615ab8565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615b31601b83614b0a565b9150615b3c82615afb565b602082019050919050565b60006020820190508181036000830152615b6081615b24565b9050919050565b6000606082019050615b7c6000830186614cc9565b615b896020830185614cc9565b615b966040830184614cc9565b949350505050565b7f626f7473206172656e7420616c6c6f77656420746f2074726164650000000000600082015250565b6000615bd4601b83614b0a565b9150615bdf82615b9e565b602082019050919050565b60006020820190508181036000830152615c0381615bc7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615c4482614c1d565b9150615c4f83614c1d565b925082615c5f57615c5e615c0a565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615ca881614bf1565b92915050565b600060208284031215615cc457615cc3614bba565b5b6000615cd284828501615c99565b91505092915050565b6000819050919050565b6000615d00615cfb615cf684615cdb565b614cf3565b614c1d565b9050919050565b615d1081615ce5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615d4b81614bdf565b82525050565b6000615d5d8383615d42565b60208301905092915050565b6000602082019050919050565b6000615d8182615d16565b615d8b8185615d21565b9350615d9683615d32565b8060005b83811015615dc7578151615dae8882615d51565b9750615db983615d69565b925050600181019050615d9a565b5085935050505092915050565b600060a082019050615de96000830188614cc9565b615df66020830187615d07565b8181036040830152615e088186615d76565b9050615e176060830185614f3b565b615e246080830184614cc9565b9695505050505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615e8a602183614b0a565b9150615e9582615e2e565b604082019050919050565b60006020820190508181036000830152615eb981615e7d565b9050919050565b600060c082019050615ed56000830189614f3b565b615ee26020830188614cc9565b615eef6040830187615d07565b615efc6060830186615d07565b615f096080830185614f3b565b615f1660a0830184614cc9565b979650505050505050565b600080600060608486031215615f3a57615f39614bba565b5b6000615f48868287016153fe565b9350506020615f59868287016153fe565b9250506040615f6a868287016153fe565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208a198f9b5b76078066170a9d02945da3aa0954653b285a843d363a31940937e164736f6c63430008090033
Deployed Bytecode
0x6080604052600436106102765760003560e01c80635342acb41161014f5780638da5cb5b116100c1578063c49b9a801161007a578063c49b9a8014610961578063d12a76881461098a578063dd62ed3e146109b5578063ea2f0b37146109f2578063f2fde38b14610a1b578063ff2f4d8814610a445761027d565b80638da5cb5b1461084f57806395d89b411461087a578063a457c2d7146108a5578063a9059cbb146108e2578063afa463271461091f578063b6c52324146109365761027d565b806370a082311161011357806370a082311461073f578063715018a61461077c57806375f0a87414610793578063764d72bf146107be5780637d1db4a5146107e757806388f82020146108125761027d565b80635342acb41461065a57806356cd40e7146106975780635d098b38146106ae57806360d48489146106d75780636bc87c3a146107145761027d565b80633685d419116101e8578063437823ec116101ac578063437823ec1461055e5780634549b0391461058757806348c54b9d146105c457806349bd5a5e146105db5780634a74bb021461060657806352390c02146106315761027d565b80633685d4191461047b57806339509351146104a45780633ae7dc20146104e15780633b124fe71461050a5780633bd5d173146105355761027d565b806318160ddd1161023a57806318160ddd1461035757806323b872dd1461038257806329e04b4a146103bf5780632d838119146103e85780632f05205c14610425578063313ce567146104505761027d565b806302ac81681461028257806306fdde0314610299578063095ea7b3146102c457806313114a9d146103015780631694505e1461032c5761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b50610297610a6d565b005b3480156102a557600080fd5b506102ae610b1f565b6040516102bb9190614b98565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e69190614c53565b610bb1565b6040516102f89190614cae565b60405180910390f35b34801561030d57600080fd5b50610316610bcf565b6040516103239190614cd8565b60405180910390f35b34801561033857600080fd5b50610341610bd9565b60405161034e9190614d52565b60405180910390f35b34801561036357600080fd5b5061036c610bfd565b6040516103799190614cd8565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a49190614d6d565b610c07565b6040516103b69190614cae565b60405180910390f35b3480156103cb57600080fd5b506103e660048036038101906103e19190614dc0565b610ce0565b005b3480156103f457600080fd5b5061040f600480360381019061040a9190614dc0565b610dd4565b60405161041c9190614cd8565b60405180910390f35b34801561043157600080fd5b5061043a610e42565b6040516104479190614cae565b60405180910390f35b34801561045c57600080fd5b50610465610e55565b6040516104729190614e09565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d9190614e24565b610e6c565b005b3480156104b057600080fd5b506104cb60048036038101906104c69190614c53565b6111bb565b6040516104d89190614cae565b60405180910390f35b3480156104ed57600080fd5b5061050860048036038101906105039190614e8f565b61126e565b005b34801561051657600080fd5b5061051f61141d565b60405161052c9190614cd8565b60405180910390f35b34801561054157600080fd5b5061055c60048036038101906105579190614dc0565b611423565b005b34801561056a57600080fd5b5061058560048036038101906105809190614e24565b61159e565b005b34801561059357600080fd5b506105ae60048036038101906105a99190614efb565b61168e565b6040516105bb9190614cd8565b60405180910390f35b3480156105d057600080fd5b506105d9611712565b005b3480156105e757600080fd5b506105f0611812565b6040516105fd9190614f4a565b60405180910390f35b34801561061257600080fd5b5061061b611836565b6040516106289190614cae565b60405180910390f35b34801561063d57600080fd5b5061065860048036038101906106539190614e24565b611849565b005b34801561066657600080fd5b50610681600480360381019061067c9190614e24565b611afd565b60405161068e9190614cae565b60405180910390f35b3480156106a357600080fd5b506106ac611b53565b005b3480156106ba57600080fd5b506106d560048036038101906106d09190614e24565b611bff565b005b3480156106e357600080fd5b506106fe60048036038101906106f99190614e24565b611cd8565b60405161070b9190614cae565b60405180910390f35b34801561072057600080fd5b50610729611d2e565b6040516107369190614cd8565b60405180910390f35b34801561074b57600080fd5b5061076660048036038101906107619190614e24565b611d34565b6040516107739190614cd8565b60405180910390f35b34801561078857600080fd5b50610791611e1f565b005b34801561079f57600080fd5b506107a8611f72565b6040516107b59190614f4a565b60405180910390f35b3480156107ca57600080fd5b506107e560048036038101906107e09190614fa3565b611f98565b005b3480156107f357600080fd5b506107fc612077565b6040516108099190614cd8565b60405180910390f35b34801561081e57600080fd5b5061083960048036038101906108349190614e24565b61207d565b6040516108469190614cae565b60405180910390f35b34801561085b57600080fd5b506108646120d3565b6040516108719190614f4a565b60405180910390f35b34801561088657600080fd5b5061088f6120fc565b60405161089c9190614b98565b60405180910390f35b3480156108b157600080fd5b506108cc60048036038101906108c79190614c53565b61218e565b6040516108d99190614cae565b60405180910390f35b3480156108ee57600080fd5b5061090960048036038101906109049190614c53565b61225b565b6040516109169190614cae565b60405180910390f35b34801561092b57600080fd5b50610934612279565b005b34801561094257600080fd5b5061094b61244d565b6040516109589190614cd8565b60405180910390f35b34801561096d57600080fd5b5061098860048036038101906109839190614fd0565b612457565b005b34801561099657600080fd5b5061099f612540565b6040516109ac9190614cd8565b60405180910390f35b3480156109c157600080fd5b506109dc60048036038101906109d79190614ffd565b612546565b6040516109e99190614cd8565b60405180910390f35b3480156109fe57600080fd5b50610a196004803603810190610a149190614e24565b6125cd565b005b348015610a2757600080fd5b50610a426004803603810190610a3d9190614e24565b6126bd565b005b348015610a5057600080fd5b50610a6b6004803603810190610a669190614dc0565b61287f565b005b610a75612a46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af990615089565b60405180910390fd5b6001600a60016101000a81548160ff021916908315150217905550565b6060600f8054610b2e906150d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5a906150d8565b8015610ba75780601f10610b7c57610100808354040283529160200191610ba7565b820191906000526020600020905b815481529060010190602001808311610b8a57829003601f168201915b5050505050905090565b6000610bc5610bbe612a46565b8484612a4e565b6001905092915050565b6000600d54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600b54905090565b6000610c14848484612c19565b610cd584610c20612a46565b610cd085604051806060016040528060288152602001615f7560289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c86612a46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f869092919063ffffffff16565b612a4e565b600190509392505050565b610ce8612a46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6c90615089565b60405180910390fd5b63041cdb408111610dbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db29061517c565b60405180910390fd5b633b9aca0081610dcb91906151cb565b60188190555050565b6000600c54821115610e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1290615297565b60405180910390fd5b6000610e25612fea565b9050610e3a818461301590919063ffffffff16565b915050919050565b600a60019054906101000a900460ff1681565b6000601160009054906101000a900460ff16905090565b610e74612a46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef890615089565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8490615303565b60405180910390fd5b60005b6008805490508110156111b7578173ffffffffffffffffffffffffffffffffffffffff1660088281548110610fc857610fc7615323565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156111a457600860016008805490506110239190615352565b8154811061103457611033615323565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166008828154811061107357611072615323565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600880548061116a57611169615386565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556111b7565b80806111af906153b5565b915050610f90565b5050565b60006112646111c8612a46565b8461125f85600560006111d9612a46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461305f90919063ffffffff16565b612a4e565b6001905092915050565b611276612a46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fa90615089565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb828473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016113599190614f4a565b60206040518083038186803b15801561137157600080fd5b505afa158015611385573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a99190615413565b6040518363ffffffff1660e01b81526004016113c6929190615440565b602060405180830381600087803b1580156113e057600080fd5b505af11580156113f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611418919061547e565b505050565b60125481565b600061142d612a46565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156114bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b39061551d565b60405180910390fd5b60006114c7836130bd565b5050505050905061152081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461311990919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061157881600c5461311990919063ffffffff16565b600c8190555061159383600d5461305f90919063ffffffff16565b600d81905550505050565b6115a6612a46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162a90615089565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600b548311156116d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cc90615589565b60405180910390fd5b816116f55760006116e5846130bd565b505050505090508091505061170c565b6000611700846130bd565b50505050915050809150505b92915050565b61171a612a46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179e90615089565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561180f573d6000803e3d6000fd5b50565b7f000000000000000000000000aa60a618759173a4d711212facb88ead4ec6c09681565b601660019054906101000a900460ff1681565b611851612a46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d590615089565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561196b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196290615303565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611a3f576119fb600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610dd4565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611b5b612a46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdf90615089565b60405180910390fd5b6d0366e7064422fd84202340000000601781905550565b611c07612a46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8b90615089565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611dcf57600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611e1a565b611e17600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610dd4565b90505b919050565b611e27612a46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eab90615089565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611fa0612a46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461202d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202490615089565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612073573d6000803e3d6000fd5b5050565b60175481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606010805461210b906150d8565b80601f0160208091040260200160405190810160405280929190818152602001828054612137906150d8565b80156121845780601f1061215957610100808354040283529160200191612184565b820191906000526020600020905b81548152906001019060200180831161216757829003601f168201915b5050505050905090565b600061225161219b612a46565b8461224c85604051806060016040528060258152602001615f9d60259139600560006121c5612a46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f869092919063ffffffff16565b612a4e565b6001905092915050565b600061226f612268612a46565b8484612c19565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612309576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123009061561b565b60405180910390fd5b600254421161234d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234490615687565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600254905090565b61245f612a46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e390615089565b60405180910390fd5b80601660016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516125359190614cae565b60405180910390a150565b60185481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6125d5612a46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265990615089565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6126c5612a46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612752576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274990615089565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b990615719565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612887612a46565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290b90615089565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080426129c29190615739565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab590615801565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2590615893565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c0c9190614cd8565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8090615925565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cf0906159b7565b60405180910390fd5b60008111612d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3390615a49565b60405180910390fd5b612d446120d3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612db25750612d826120d3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612dfd57601754811115612dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df390615adb565b60405180910390fd5b5b6000612e0830611d34565b90506017548110612e195760175490505b60006018548210159050808015612e3d5750601660009054906101000a900460ff16155b8015612e9557507f000000000000000000000000aa60a618759173a4d711212facb88ead4ec6c09673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612ead5750601660019054906101000a900460ff165b15612ec1576018549150612ec082613163565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f685750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f7257600090505b612f7e868686846132dc565b505050505050565b6000838311158290612fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc59190614b98565b60405180910390fd5b5060008385612fdd9190615352565b9050809150509392505050565b6000806000612ff7613737565b9150915061300e818361301590919063ffffffff16565b9250505090565b600061305783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506139ea565b905092915050565b600080828461306e9190615739565b9050838110156130b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130aa90615b47565b60405180910390fd5b8091505092915050565b60008060008060008060008060006130d48a613a4d565b92509250925060008060006130f28d86866130ed612fea565b613aa7565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061315b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612f86565b905092915050565b6001601660006101000a81548160ff021916908315150217905550600061319460028361301590919063ffffffff16565b905060006131ab828461311990919063ffffffff16565b905060004790506131bb83613b30565b60006131d0824761311990919063ffffffff16565b905060006131fb60646131ed604b85613d7c90919063ffffffff16565b61301590919063ffffffff16565b9050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613265573d6000803e3d6000fd5b5080826132729190615352565b915061327e8483613df7565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618583866040516132b193929190615b67565b60405180910390a150505050506000601660006101000a81548160ff02191690831515021790555050565b600a60019054906101000a900460ff16613330576132f86120d3565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461332f57600080fd5b5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133d15750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561342657600a60009054906101000a900460ff16613425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161341c90615bea565b60405180910390fd5b5b8061343457613433613ee7565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134d75750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134ec576134e7848484613f2a565b613723565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561358f5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135a45761359f84848461418a565b613722565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156136485750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561365d576136588484846143ea565b613721565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136ff5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156137145761370f8484846145b5565b613720565b61371f8484846143ea565b5b5b5b5b80613731576137306148aa565b5b50505050565b6000806000600c5490506000600b54905060005b6008805490508110156139ad5782600360006008848154811061377157613770615323565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061385f57508160046000600884815481106137f7576137f6615323565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561387657600c54600b54945094505050506139e6565b613906600360006008848154811061389157613890615323565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461311990919063ffffffff16565b9250613998600460006008848154811061392357613922615323565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361311990919063ffffffff16565b915080806139a5906153b5565b91505061374b565b506139c5600b54600c5461301590919063ffffffff16565b8210156139dd57600c54600b549350935050506139e6565b81819350935050505b9091565b60008083118290613a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a289190614b98565b60405180910390fd5b5060008385613a409190615c39565b9050809150509392505050565b600080600080613a5c856148be565b90506000613a69866148ef565b90506000613a9282613a84858a61311990919063ffffffff16565b61311990919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613ac08589613d7c90919063ffffffff16565b90506000613ad78689613d7c90919063ffffffff16565b90506000613aee8789613d7c90919063ffffffff16565b90506000613b1782613b09858761311990919063ffffffff16565b61311990919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff811115613b4d57613b4c615c6a565b5b604051908082528060200260200182016040528015613b7b5781602001602082028036833780820191505090505b5090503081600081518110613b9357613b92615323565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613c3357600080fd5b505afa158015613c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c6b9190615cae565b81600181518110613c7f57613c7e615323565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613ce4307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612a4e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613d46959493929190615dd4565b600060405180830381600087803b158015613d6057600080fd5b505af1158015613d74573d6000803e3d6000fd5b505050505050565b600080831415613d8f5760009050613df1565b60008284613d9d91906151cb565b9050828482613dac9190615c39565b14613dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613de390615ea0565b60405180910390fd5b809150505b92915050565b613e22307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612a4e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613e6c6120d3565b426040518863ffffffff1660e01b8152600401613e8e96959493929190615ec0565b6060604051808303818588803b158015613ea757600080fd5b505af1158015613ebb573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ee09190615f21565b5050505050565b6000601254148015613efb57506000601454145b15613f0557613f28565b601254601381905550601454601581905550600060128190555060006014819055505b565b600080600080600080613f3c876130bd565b955095509550955095509550613f9a87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461311990919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061402f86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461311990919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140c485600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461305f90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061411081614920565b61411a8483614ac5565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516141779190614cd8565b60405180910390a3505050505050505050565b60008060008060008061419c876130bd565b9550955095509550955095506141fa86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461311990919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061428f83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461305f90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061432485600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461305f90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061437081614920565b61437a8483614ac5565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516143d79190614cd8565b60405180910390a3505050505050505050565b6000806000806000806143fc876130bd565b95509550955095509550955061445a86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461311990919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144ef85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461305f90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061453b81614920565b6145458483614ac5565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516145a29190614cd8565b60405180910390a3505050505050505050565b6000806000806000806145c7876130bd565b95509550955095509550955061462587600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461311990919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146ba86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461311990919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061474f83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461305f90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147e485600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461305f90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061483081614920565b61483a8483614ac5565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516148979190614cd8565b60405180910390a3505050505050505050565b601354601281905550601554601481905550565b60006148e860646148da60125485613d7c90919063ffffffff16565b61301590919063ffffffff16565b9050919050565b6000614919606461490b60145485613d7c90919063ffffffff16565b61301590919063ffffffff16565b9050919050565b600061492a612fea565b905060006149418284613d7c90919063ffffffff16565b905061499581600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461305f90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614ac057614a7c83600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461305f90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614ada82600c5461311990919063ffffffff16565b600c81905550614af581600d5461305f90919063ffffffff16565b600d819055505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614b39578082015181840152602081019050614b1e565b83811115614b48576000848401525b50505050565b6000601f19601f8301169050919050565b6000614b6a82614aff565b614b748185614b0a565b9350614b84818560208601614b1b565b614b8d81614b4e565b840191505092915050565b60006020820190508181036000830152614bb28184614b5f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614bea82614bbf565b9050919050565b614bfa81614bdf565b8114614c0557600080fd5b50565b600081359050614c1781614bf1565b92915050565b6000819050919050565b614c3081614c1d565b8114614c3b57600080fd5b50565b600081359050614c4d81614c27565b92915050565b60008060408385031215614c6a57614c69614bba565b5b6000614c7885828601614c08565b9250506020614c8985828601614c3e565b9150509250929050565b60008115159050919050565b614ca881614c93565b82525050565b6000602082019050614cc36000830184614c9f565b92915050565b614cd281614c1d565b82525050565b6000602082019050614ced6000830184614cc9565b92915050565b6000819050919050565b6000614d18614d13614d0e84614bbf565b614cf3565b614bbf565b9050919050565b6000614d2a82614cfd565b9050919050565b6000614d3c82614d1f565b9050919050565b614d4c81614d31565b82525050565b6000602082019050614d676000830184614d43565b92915050565b600080600060608486031215614d8657614d85614bba565b5b6000614d9486828701614c08565b9350506020614da586828701614c08565b9250506040614db686828701614c3e565b9150509250925092565b600060208284031215614dd657614dd5614bba565b5b6000614de484828501614c3e565b91505092915050565b600060ff82169050919050565b614e0381614ded565b82525050565b6000602082019050614e1e6000830184614dfa565b92915050565b600060208284031215614e3a57614e39614bba565b5b6000614e4884828501614c08565b91505092915050565b6000614e5c82614bdf565b9050919050565b614e6c81614e51565b8114614e7757600080fd5b50565b600081359050614e8981614e63565b92915050565b60008060408385031215614ea657614ea5614bba565b5b6000614eb485828601614e7a565b9250506020614ec585828601614c08565b9150509250929050565b614ed881614c93565b8114614ee357600080fd5b50565b600081359050614ef581614ecf565b92915050565b60008060408385031215614f1257614f11614bba565b5b6000614f2085828601614c3e565b9250506020614f3185828601614ee6565b9150509250929050565b614f4481614bdf565b82525050565b6000602082019050614f5f6000830184614f3b565b92915050565b6000614f7082614bbf565b9050919050565b614f8081614f65565b8114614f8b57600080fd5b50565b600081359050614f9d81614f77565b92915050565b600060208284031215614fb957614fb8614bba565b5b6000614fc784828501614f8e565b91505092915050565b600060208284031215614fe657614fe5614bba565b5b6000614ff484828501614ee6565b91505092915050565b6000806040838503121561501457615013614bba565b5b600061502285828601614c08565b925050602061503385828601614c08565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000615073602083614b0a565b915061507e8261503d565b602082019050919050565b600060208201905081810360008301526150a281615066565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806150f057607f821691505b60208210811415615104576151036150a9565b5b50919050565b7f53776170205468726573686f6c6420416d6f756e742063616e6e6f742062652060008201527f6c657373207468616e203639204d696c6c696f6e000000000000000000000000602082015250565b6000615166603483614b0a565b91506151718261510a565b604082019050919050565b6000602082019050818103600083015261519581615159565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006151d682614c1d565b91506151e183614c1d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561521a5761521961519c565b5b828202905092915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000615281602a83614b0a565b915061528c82615225565b604082019050919050565b600060208201905081810360008301526152b081615274565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b60006152ed601b83614b0a565b91506152f8826152b7565b602082019050919050565b6000602082019050818103600083015261531c816152e0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061535d82614c1d565b915061536883614c1d565b92508282101561537b5761537a61519c565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006153c082614c1d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156153f3576153f261519c565b5b600182019050919050565b60008151905061540d81614c27565b92915050565b60006020828403121561542957615428614bba565b5b6000615437848285016153fe565b91505092915050565b60006040820190506154556000830185614f3b565b6154626020830184614cc9565b9392505050565b60008151905061547881614ecf565b92915050565b60006020828403121561549457615493614bba565b5b60006154a284828501615469565b91505092915050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6000615507602c83614b0a565b9150615512826154ab565b604082019050919050565b60006020820190508181036000830152615536816154fa565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000615573601f83614b0a565b915061557e8261553d565b602082019050919050565b600060208201905081810360008301526155a281615566565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b6000615605602383614b0a565b9150615610826155a9565b604082019050919050565b60006020820190508181036000830152615634816155f8565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b6000615671601f83614b0a565b915061567c8261563b565b602082019050919050565b600060208201905081810360008301526156a081615664565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615703602683614b0a565b915061570e826156a7565b604082019050919050565b60006020820190508181036000830152615732816156f6565b9050919050565b600061574482614c1d565b915061574f83614c1d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156157845761578361519c565b5b828201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006157eb602483614b0a565b91506157f68261578f565b604082019050919050565b6000602082019050818103600083015261581a816157de565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061587d602283614b0a565b915061588882615821565b604082019050919050565b600060208201905081810360008301526158ac81615870565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061590f602583614b0a565b915061591a826158b3565b604082019050919050565b6000602082019050818103600083015261593e81615902565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006159a1602383614b0a565b91506159ac82615945565b604082019050919050565b600060208201905081810360008301526159d081615994565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000615a33602983614b0a565b9150615a3e826159d7565b604082019050919050565b60006020820190508181036000830152615a6281615a26565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000615ac5602883614b0a565b9150615ad082615a69565b604082019050919050565b60006020820190508181036000830152615af481615ab8565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615b31601b83614b0a565b9150615b3c82615afb565b602082019050919050565b60006020820190508181036000830152615b6081615b24565b9050919050565b6000606082019050615b7c6000830186614cc9565b615b896020830185614cc9565b615b966040830184614cc9565b949350505050565b7f626f7473206172656e7420616c6c6f77656420746f2074726164650000000000600082015250565b6000615bd4601b83614b0a565b9150615bdf82615b9e565b602082019050919050565b60006020820190508181036000830152615c0381615bc7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615c4482614c1d565b9150615c4f83614c1d565b925082615c5f57615c5e615c0a565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615ca881614bf1565b92915050565b600060208284031215615cc457615cc3614bba565b5b6000615cd284828501615c99565b91505092915050565b6000819050919050565b6000615d00615cfb615cf684615cdb565b614cf3565b614c1d565b9050919050565b615d1081615ce5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615d4b81614bdf565b82525050565b6000615d5d8383615d42565b60208301905092915050565b6000602082019050919050565b6000615d8182615d16565b615d8b8185615d21565b9350615d9683615d32565b8060005b83811015615dc7578151615dae8882615d51565b9750615db983615d69565b925050600181019050615d9a565b5085935050505092915050565b600060a082019050615de96000830188614cc9565b615df66020830187615d07565b8181036040830152615e088186615d76565b9050615e176060830185614f3b565b615e246080830184614cc9565b9695505050505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615e8a602183614b0a565b9150615e9582615e2e565b604082019050919050565b60006020820190508181036000830152615eb981615e7d565b9050919050565b600060c082019050615ed56000830189614f3b565b615ee26020830188614cc9565b615eef6040830187615d07565b615efc6060830186615d07565b615f096080830185614f3b565b615f1660a0830184614cc9565b979650505050505050565b600080600060608486031215615f3a57615f39614bba565b5b6000615f48868287016153fe565b9350506020615f59868287016153fe565b9250506040615f6a868287016153fe565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208a198f9b5b76078066170a9d02945da3aa0954653b285a843d363a31940937e164736f6c63430008090033
Deployed Bytecode Sourcemap
25205:19775:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33998:72;;;;;;;;;;;;;:::i;:::-;;27795:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28707:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29828:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26332:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28072:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28876:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33106:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30758:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25743:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27981:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31474:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29197:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33512:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26144:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29929:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32617:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30314:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33384:116;;;;;;;;;;;;;:::i;:::-;;26390:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26469:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31019:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37505:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32984:110;;;;;;;;;;;;;:::i;:::-;;32858:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33865:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26231:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28175:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15764:148;;;;;;;;;;;;;:::i;:::-;;25985:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33709:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26522:59;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29700:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15121:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27886:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29423:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28381:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16802:321;;;;;;;;;;;;;:::i;:::-;;16319:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34078:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26588:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28556:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32740:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16067:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16484:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33998:72;15343:12;:10;:12::i;:::-;15333:22;;:6;;;;;;;;;;:22;;;15325:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34058:4:::1;34047:8;;:15;;;;;;;;;;;;;;;;;;33998:72::o:0;27795:83::-;27832:13;27865:5;27858:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27795:83;:::o;28707:161::-;28782:4;28799:39;28808:12;:10;:12::i;:::-;28822:7;28831:6;28799:8;:39::i;:::-;28856:4;28849:11;;28707:161;;;;:::o;29828:87::-;29870:7;29897:10;;29890:17;;29828:87;:::o;26332:51::-;;;:::o;28072:95::-;28125:7;28152;;28145:14;;28072:95;:::o;28876:313::-;28974:4;28991:36;29001:6;29009:9;29020:6;28991:9;:36::i;:::-;29038:121;29047:6;29055:12;:10;:12::i;:::-;29069:89;29107:6;29069:89;;;;;;;;;;;;;;;;;:11;:19;29081:6;29069:19;;;;;;;;;;;;;;;:33;29089:12;:10;:12::i;:::-;29069:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;29038:8;:121::i;:::-;29177:4;29170:11;;28876:313;;;;;:::o;33106:266::-;15343:12;:10;:12::i;:::-;15333:22;;:6;;;;;;;;;;:22;;;15325:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33229:8:::1;33207:19;:30;33199:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;33359:5;33337:19;:27;;;;:::i;:::-;33305:29;:59;;;;33106:266:::0;:::o;30758:253::-;30824:7;30863;;30852;:18;;30844:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30928:19;30951:10;:8;:10::i;:::-;30928:33;;30979:24;30991:11;30979:7;:11;;:24;;;;:::i;:::-;30972:31;;;30758:253;;;:::o;25743:28::-;;;;;;;;;;;;;:::o;27981:83::-;28022:5;28047:9;;;;;;;;;;;28040:16;;27981:83;:::o;31474:479::-;15343:12;:10;:12::i;:::-;15333:22;;:6;;;;;;;;;;:22;;;15325:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31556:11:::1;:20;31568:7;31556:20;;;;;;;;;;;;;;;;;;;;;;;;;31548:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;31624:9;31619:327;31643:9;:16;;;;31639:1;:20;31619:327;;;31701:7;31685:23;;:9;31695:1;31685:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;;31681:254;;;31744:9;31773:1;31754:9;:16;;;;:20;;;;:::i;:::-;31744:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31729:9;31739:1;31729:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31813:1;31794:7;:16;31802:7;31794:16;;;;;;;;;;;;;;;:20;;;;31856:5;31833:11;:20;31845:7;31833:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;31880:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;31914:5;;31681:254;31661:3;;;;;:::i;:::-;;;;31619:327;;;;31474:479:::0;:::o;29197:218::-;29285:4;29302:83;29311:12;:10;:12::i;:::-;29325:7;29334:50;29373:10;29334:11;:25;29346:12;:10;:12::i;:::-;29334:25;;;;;;;;;;;;;;;:34;29360:7;29334:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;29302:8;:83::i;:::-;29403:4;29396:11;;29197:218;;;;:::o;33512:185::-;15343:12;:10;:12::i;:::-;15333:22;;:6;;;;;;;;;;:22;;;15325:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33614:12:::1;:21;;;33636:13;33651:12;:22;;;33682:4;33651:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33614:75;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33512:185:::0;;:::o;26144:26::-;;;;:::o;29929:377::-;29981:14;29998:12;:10;:12::i;:::-;29981:29;;30030:11;:19;30042:6;30030:19;;;;;;;;;;;;;;;;;;;;;;;;;30029:20;30021:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;30110:15;30134:19;30145:7;30134:10;:19::i;:::-;30109:44;;;;;;;30182:28;30202:7;30182;:15;30190:6;30182:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30164:7;:15;30172:6;30164:15;;;;;;;;;;;;;;;:46;;;;30231:20;30243:7;30231;;:11;;:20;;;;:::i;:::-;30221:7;:30;;;;30275:23;30290:7;30275:10;;:14;;:23;;;;:::i;:::-;30262:10;:36;;;;29970:336;;29929:377;:::o;32617:111::-;15343:12;:10;:12::i;:::-;15333:22;;:6;;;;;;;;;;:22;;;15325:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32716:4:::1;32686:18;:27;32705:7;32686:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;32617:111:::0;:::o;30314:436::-;30404:7;30443;;30432;:18;;30424:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30502:17;30497:246;;30537:15;30561:19;30572:7;30561:10;:19::i;:::-;30536:44;;;;;;;30602:7;30595:14;;;;;30497:246;30644:23;30675:19;30686:7;30675:10;:19::i;:::-;30642:52;;;;;;;30716:15;30709:22;;;30314:436;;;;;:::o;33384:116::-;15343:12;:10;:12::i;:::-;15333:22;;:6;;;;;;;;;;:22;;;15325:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33444:15:::1;;;;;;;;;;;33436:33;;:56;33470:21;33436:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;33384:116::o:0;26390:38::-;;;:::o;26469:40::-;;;;;;;;;;;;;:::o;31019:447::-;15343:12;:10;:12::i;:::-;15333:22;;:6;;;;;;;;;;:22;;;15325:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31216:11:::1;:20;31228:7;31216:20;;;;;;;;;;;;;;;;;;;;;;;;;31215:21;31207:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31301:1;31282:7;:16;31290:7;31282:16;;;;;;;;;;;;;;;;:20;31279:108;;;31338:37;31358:7;:16;31366:7;31358:16;;;;;;;;;;;;;;;;31338:19;:37::i;:::-;31319:7;:16;31327:7;31319:16;;;;;;;;;;;;;;;:56;;;;31279:108;31420:4;31397:11;:20;31409:7;31397:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;31435:9;31450:7;31435:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31019:447:::0;:::o;37505:123::-;37569:4;37593:18;:27;37612:7;37593:27;;;;;;;;;;;;;;;;;;;;;;;;;37586:34;;37505:123;;;:::o;32984:110::-;15343:12;:10;:12::i;:::-;15333:22;;:6;;;;;;;;;;:22;;;15325:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33055:31:::1;33040:12;:46;;;;32984:110::o:0;32858:118::-;15343:12;:10;:12::i;:::-;15333:22;;:6;;;;;;;;;;:22;;;15325:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32955:13:::1;32937:15;;:31;;;;;;;;;;;;;;;;;;32858:118:::0;:::o;33865:121::-;33933:4;33957:10;:21;33968:9;33957:21;;;;;;;;;;;;;;;;;;;;;;;;;33950:28;;33865:121;;;:::o;26231:32::-;;;;:::o;28175:198::-;28241:7;28265:11;:20;28277:7;28265:20;;;;;;;;;;;;;;;;;;;;;;;;;28261:49;;;28294:7;:16;28302:7;28294:16;;;;;;;;;;;;;;;;28287:23;;;;28261:49;28328:37;28348:7;:16;28356:7;28348:16;;;;;;;;;;;;;;;;28328:19;:37::i;:::-;28321:44;;28175:198;;;;:::o;15764:148::-;15343:12;:10;:12::i;:::-;15333:22;;:6;;;;;;;;;;:22;;;15325:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15871:1:::1;15834:40;;15855:6;::::0;::::1;;;;;;;;15834:40;;;;;;;;;;;;15902:1;15885:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;15764:148::o:0;25985:30::-;;;;;;;;;;;;;:::o;33709:144::-;15343:12;:10;:12::i;:::-;15333:22;;:6;;;;;;;;;;:22;;;15325:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33800:13:::1;:22;;:45;33823:21;33800:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;33709:144:::0;:::o;26522:59::-;;;;:::o;29700:120::-;29768:4;29792:11;:20;29804:7;29792:20;;;;;;;;;;;;;;;;;;;;;;;;;29785:27;;29700:120;;;:::o;15121:79::-;15159:7;15186:6;;;;;;;;;;;15179:13;;15121:79;:::o;27886:87::-;27925:13;27958:7;27951:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27886:87;:::o;29423:269::-;29516:4;29533:129;29542:12;:10;:12::i;:::-;29556:7;29565:96;29604:15;29565:96;;;;;;;;;;;;;;;;;:11;:25;29577:12;:10;:12::i;:::-;29565:25;;;;;;;;;;;;;;;:34;29591:7;29565:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;29533:8;:129::i;:::-;29680:4;29673:11;;29423:269;;;;:::o;28381:167::-;28459:4;28476:42;28486:12;:10;:12::i;:::-;28500:9;28511:6;28476:9;:42::i;:::-;28536:4;28529:11;;28381:167;;;;:::o;16802:321::-;16888:10;16870:28;;:14;;;;;;;;;;;:28;;;16862:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;16975:9;;16957:15;:27;16949:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;17066:14;;;;;;;;;;;17037:44;;17058:6;;;;;;;;;;17037:44;;;;;;;;;;;;17101:14;;;;;;;;;;;17092:6;;:23;;;;;;;;;;;;;;;;;;16802:321::o;16319:89::-;16364:7;16391:9;;16384:16;;16319:89;:::o;34078:171::-;15343:12;:10;:12::i;:::-;15333:22;;:6;;;;;;;;;;:22;;;15325:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34179:8:::1;34155:21;;:32;;;;;;;;;;;;;;;;;;34203:38;34232:8;34203:38;;;;;;:::i;:::-;;;;;;;;34078:171:::0;:::o;26588:76::-;;;;:::o;28556:143::-;28637:7;28664:11;:18;28676:5;28664:18;;;;;;;;;;;;;;;:27;28683:7;28664:27;;;;;;;;;;;;;;;;28657:34;;28556:143;;;;:::o;32740:110::-;15343:12;:10;:12::i;:::-;15333:22;;:6;;;;;;;;;;:22;;;15325:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32837:5:::1;32807:18;:27;32826:7;32807:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;32740:110:::0;:::o;16067:244::-;15343:12;:10;:12::i;:::-;15333:22;;:6;;;;;;;;;;:22;;;15325:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16176:1:::1;16156:22;;:8;:22;;;;16148:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;16266:8;16237:38;;16258:6;::::0;::::1;;;;;;;;16237:38;;;;;;;;;;;;16295:8;16286:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;16067:244:::0;:::o;16484:242::-;15343:12;:10;:12::i;:::-;15333:22;;:6;;;;;;;;;;:22;;;15325:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16581:6:::1;::::0;::::1;;;;;;;;16564:14;;:23;;;;;;;;;;;;;;;;;;16615:1;16598:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16658:4;16640:15;:22;;;;:::i;:::-;16628:9;:34;;;;16715:1;16678:40;;16699:6;::::0;::::1;;;;;;;;16678:40;;;;;;;;;;;;16484:242:::0;:::o;8053:98::-;8106:7;8133:10;8126:17;;8053:98;:::o;37636:337::-;37746:1;37729:19;;:5;:19;;;;37721:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37827:1;37808:21;;:7;:21;;;;37800:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37911:6;37881:11;:18;37893:5;37881:18;;;;;;;;;;;;;;;:27;37900:7;37881:27;;;;;;;;;;;;;;;:36;;;;37949:7;37933:32;;37942:5;37933:32;;;37958:6;37933:32;;;;;;:::i;:::-;;;;;;;;37636:337;;;:::o;37981:1813::-;38119:1;38103:18;;:4;:18;;;;38095:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38196:1;38182:16;;:2;:16;;;;38174:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38266:1;38257:6;:10;38249:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38335:7;:5;:7::i;:::-;38327:15;;:4;:15;;;;:32;;;;;38352:7;:5;:7::i;:::-;38346:13;;:2;:13;;;;38327:32;38324:125;;;38392:12;;38382:6;:22;;38374:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;38324:125;38744:28;38775:24;38793:4;38775:9;:24::i;:::-;38744:55;;38847:12;;38823:20;:36;38820:112;;38908:12;;38885:35;;38820:112;38952:24;39003:29;;38979:20;:53;;38952:80;;39061:19;:53;;;;;39098:16;;;;;;;;;;;39097:17;39061:53;:91;;;;;39139:13;39131:21;;:4;:21;;;;39061:91;:129;;;;;39169:21;;;;;;;;;;;39061:129;39043:318;;;39240:29;;39217:52;;39313:36;39328:20;39313:14;:36::i;:::-;39043:318;39442:12;39457:4;39442:19;;39569:18;:24;39588:4;39569:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;39597:18;:22;39616:2;39597:22;;;;;;;;;;;;;;;;;;;;;;;;;39569:50;39566:96;;;39645:5;39635:15;;39566:96;39748:38;39763:4;39768:2;39771:6;39778:7;39748:14;:38::i;:::-;38084:1710;;;37981:1813;;;:::o;4384:192::-;4470:7;4503:1;4498;:6;;4506:12;4490:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4530:9;4546:1;4542;:5;;;;:::i;:::-;4530:17;;4567:1;4560:8;;;4384:192;;;;;:::o;35655:163::-;35696:7;35717:15;35734;35753:19;:17;:19::i;:::-;35716:56;;;;35790:20;35802:7;35790;:11;;:20;;;;:::i;:::-;35783:27;;;;35655:163;:::o;5782:132::-;5840:7;5867:39;5871:1;5874;5867:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5860:46;;5782:132;;;;:::o;3481:181::-;3539:7;3559:9;3575:1;3571;:5;;;;:::i;:::-;3559:17;;3600:1;3595;:6;;3587:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;3653:1;3646:8;;;3481:181;;;;:::o;34453:419::-;34512:7;34521;34530;34539;34548;34557;34578:23;34603:12;34617:18;34639:20;34651:7;34639:11;:20::i;:::-;34577:82;;;;;;34671:15;34688:23;34713:12;34729:50;34741:7;34750:4;34756:10;34768;:8;:10::i;:::-;34729:11;:50::i;:::-;34670:109;;;;;;34798:7;34807:15;34824:4;34830:15;34847:4;34853:10;34790:74;;;;;;;;;;;;;;;;;;34453:419;;;;;;;:::o;3945:136::-;4003:7;4030:43;4034:1;4037;4030:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4023:50;;3945:136;;;;:::o;39802:1182::-;26990:4;26971:16;;:23;;;;;;;;;;;;;;;;;;39975:12:::1;39990:27;40015:1;39990:20;:24;;:27;;;;:::i;:::-;39975:42;;40028:17;40048:30;40073:4;40048:20;:24;;:30;;;;:::i;:::-;40028:50;;40356:22;40381:21;40356:46;;40447:22;40464:4;40447:16;:22::i;:::-;40600:18;40621:41;40647:14;40621:21;:25;;:41;;;;:::i;:::-;40600:62;;40673:22;40698:27;40721:3;40698:18;40713:2;40698:10;:14;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;40673:52;;40744:15;;;;;;;;;;;40736:33;;:49;40770:14;40736:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;40810:14;40796:28;;;;;:::i;:::-;;;40872:35;40885:9;40896:10;40872:12;:35::i;:::-;40933:43;40948:4;40954:10;40966:9;40933:43;;;;;;;;:::i;:::-;;;;;;;;39876:1108;;;;;27036:5:::0;27017:16;;:24;;;;;;;;;;;;;;;;;;39802:1182;:::o;42183:1114::-;42294:8;;;;;;;;;;;42290:114;;42336:7;:5;:7::i;:::-;42326:17;;:6;:17;;;42318:26;;;;;;42290:114;42427:10;:18;42438:6;42427:18;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;;42449:10;:21;42460:9;42449:21;;;;;;;;;;;;;;;;;;;;;;;;;42427:43;42424:126;;;42494:12;;;;;;;;;;;42486:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;42424:126;42574:7;42570:40;;42596:14;:12;:14::i;:::-;42570:40;42635:11;:19;42647:6;42635:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;42659:11;:22;42671:9;42659:22;;;;;;;;;;;;;;;;;;;;;;;;;42658:23;42635:46;42631:597;;;42698:48;42720:6;42728:9;42739:6;42698:21;:48::i;:::-;42631:597;;;42769:11;:19;42781:6;42769:19;;;;;;;;;;;;;;;;;;;;;;;;;42768:20;:46;;;;;42792:11;:22;42804:9;42792:22;;;;;;;;;;;;;;;;;;;;;;;;;42768:46;42764:464;;;42831:46;42851:6;42859:9;42870:6;42831:19;:46::i;:::-;42764:464;;;42900:11;:19;42912:6;42900:19;;;;;;;;;;;;;;;;;;;;;;;;;42899:20;:47;;;;;42924:11;:22;42936:9;42924:22;;;;;;;;;;;;;;;;;;;;;;;;;42923:23;42899:47;42895:333;;;42963:44;42981:6;42989:9;43000:6;42963:17;:44::i;:::-;42895:333;;;43029:11;:19;43041:6;43029:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;43052:11;:22;43064:9;43052:22;;;;;;;;;;;;;;;;;;;;;;;;;43029:45;43025:203;;;43091:48;43113:6;43121:9;43132:6;43091:21;:48::i;:::-;43025:203;;;43172:44;43190:6;43198:9;43209:6;43172:17;:44::i;:::-;43025:203;42895:333;42764:464;42631:597;43252:7;43248:41;;43274:15;:13;:15::i;:::-;43248:41;42183:1114;;;;:::o;35826:561::-;35876:7;35885;35905:15;35923:7;;35905:25;;35941:15;35959:7;;35941:25;;35988:9;35983:289;36007:9;:16;;;;36003:1;:20;35983:289;;;36073:7;36049;:21;36057:9;36067:1;36057:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36049:21;;;;;;;;;;;;;;;;:31;:66;;;;36108:7;36084;:21;36092:9;36102:1;36092:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36084:21;;;;;;;;;;;;;;;;:31;36049:66;36045:97;;;36125:7;;36134;;36117:25;;;;;;;;;36045:97;36167:34;36179:7;:21;36187:9;36197:1;36187:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36179:21;;;;;;;;;;;;;;;;36167:7;:11;;:34;;;;:::i;:::-;36157:44;;36226:34;36238:7;:21;36246:9;36256:1;36246:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36238:21;;;;;;;;;;;;;;;;36226:7;:11;;:34;;;;:::i;:::-;36216:44;;36025:3;;;;;:::i;:::-;;;;35983:289;;;;36296:20;36308:7;;36296;;:11;;:20;;;;:::i;:::-;36286:7;:30;36282:61;;;36326:7;;36335;;36318:25;;;;;;;;36282:61;36362:7;36371;36354:25;;;;;;35826:561;;;:::o;6410:278::-;6496:7;6528:1;6524;:5;6531:12;6516:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6555:9;6571:1;6567;:5;;;;:::i;:::-;6555:17;;6679:1;6672:8;;;6410:278;;;;;:::o;34880:330::-;34940:7;34949;34958;34978:12;34993:24;35009:7;34993:15;:24::i;:::-;34978:39;;35028:18;35049:30;35071:7;35049:21;:30::i;:::-;35028:51;;35090:23;35116:33;35138:10;35116:17;35128:4;35116:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;35090:59;;35168:15;35185:4;35191:10;35160:42;;;;;;;;;34880:330;;;;;:::o;35218:429::-;35333:7;35342;35351;35371:15;35389:24;35401:11;35389:7;:11;;:24;;;;:::i;:::-;35371:42;;35424:12;35439:21;35448:11;35439:4;:8;;:21;;;;:::i;:::-;35424:36;;35471:18;35492:27;35507:11;35492:10;:14;;:27;;;;:::i;:::-;35471:48;;35530:23;35556:33;35578:10;35556:17;35568:4;35556:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;35530:59;;35608:7;35617:15;35634:4;35600:39;;;;;;;;;;35218:429;;;;;;;;:::o;40992:589::-;41118:21;41156:1;41142:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41118:40;;41187:4;41169;41174:1;41169:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;41213:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41203:4;41208:1;41203:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;41248:62;41265:4;41280:15;41298:11;41248:8;:62::i;:::-;41349:15;:66;;;41430:11;41456:1;41500:4;41527;41547:15;41349:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41047:534;40992:589;:::o;4835:471::-;4893:7;5143:1;5138;:6;5134:47;;;5168:1;5161:8;;;;5134:47;5193:9;5209:1;5205;:5;;;;:::i;:::-;5193:17;;5238:1;5233;5229;:5;;;;:::i;:::-;:10;5221:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5297:1;5290:8;;;4835:471;;;;;:::o;41589:513::-;41737:62;41754:4;41769:15;41787:11;41737:8;:62::i;:::-;41842:15;:31;;;41881:9;41914:4;41934:11;41960:1;42003;42046:7;:5;:7::i;:::-;42068:15;41842:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41589:513;;:::o;37106:250::-;37163:1;37152:7;;:12;:34;;;;;37185:1;37168:13;;:18;37152:34;37149:46;;;37188:7;;37149:46;37233:7;;37215:15;:25;;;;37275:13;;37251:21;:37;;;;37319:1;37309:7;:11;;;;37347:1;37331:13;:17;;;;37106:250;:::o;44409:566::-;44512:15;44529:23;44554:12;44568:23;44593:12;44607:18;44629:19;44640:7;44629:10;:19::i;:::-;44511:137;;;;;;;;;;;;44677:28;44697:7;44677;:15;44685:6;44677:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44659:7;:15;44667:6;44659:15;;;;;;;;;;;;;;;:46;;;;44734:28;44754:7;44734;:15;44742:6;44734:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44716:7;:15;44724:6;44716:15;;;;;;;;;;;;;;;:46;;;;44794:39;44817:15;44794:7;:18;44802:9;44794:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44773:7;:18;44781:9;44773:18;;;;;;;;;;;;;;;:60;;;;44847:26;44862:10;44847:14;:26::i;:::-;44884:23;44896:4;44902;44884:11;:23::i;:::-;44940:9;44923:44;;44932:6;44923:44;;;44951:15;44923:44;;;;;;:::i;:::-;;;;;;;;44500:475;;;;;;44409:566;;;:::o;43815:586::-;43916:15;43933:23;43958:12;43972:23;43997:12;44011:18;44033:19;44044:7;44033:10;:19::i;:::-;43915:137;;;;;;;;;;;;44081:28;44101:7;44081;:15;44089:6;44081:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44063:7;:15;44071:6;44063:15;;;;;;;;;;;;;;;:46;;;;44141:39;44164:15;44141:7;:18;44149:9;44141:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44120:7;:18;44128:9;44120:18;;;;;;;;;;;;;;;:60;;;;44212:39;44235:15;44212:7;:18;44220:9;44212:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44191:7;:18;44199:9;44191:18;;;;;;;;;;;;;;;:60;;;;44273:26;44288:10;44273:14;:26::i;:::-;44310:23;44322:4;44328;44310:11;:23::i;:::-;44366:9;44349:44;;44358:6;44349:44;;;44377:15;44349:44;;;;;;:::i;:::-;;;;;;;;43904:497;;;;;;43815:586;;;:::o;43305:502::-;43404:15;43421:23;43446:12;43460:23;43485:12;43499:18;43521:19;43532:7;43521:10;:19::i;:::-;43403:137;;;;;;;;;;;;43569:28;43589:7;43569;:15;43577:6;43569:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43551:7;:15;43559:6;43551:15;;;;;;;;;;;;;;;:46;;;;43629:39;43652:15;43629:7;:18;43637:9;43629:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43608:7;:18;43616:9;43608:18;;;;;;;;;;;;;;;:60;;;;43679:26;43694:10;43679:14;:26::i;:::-;43716:23;43728:4;43734;43716:11;:23::i;:::-;43772:9;43755:44;;43764:6;43755:44;;;43783:15;43755:44;;;;;;:::i;:::-;;;;;;;;43392:415;;;;;;43305:502;;;:::o;31963:642::-;32066:15;32083:23;32108:12;32122:23;32147:12;32161:18;32183:19;32194:7;32183:10;:19::i;:::-;32065:137;;;;;;;;;;;;32231:28;32251:7;32231;:15;32239:6;32231:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32213:7;:15;32221:6;32213:15;;;;;;;;;;;;;;;:46;;;;32288:28;32308:7;32288;:15;32296:6;32288:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32270:7;:15;32278:6;32270:15;;;;;;;;;;;;;;;:46;;;;32348:39;32371:15;32348:7;:18;32356:9;32348:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32327:7;:18;32335:9;32327:18;;;;;;;;;;;;;;;:60;;;;32419:39;32442:15;32419:7;:18;32427:9;32419:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32398:7;:18;32406:9;32398:18;;;;;;;;;;;;;;;:60;;;;32477:26;32492:10;32477:14;:26::i;:::-;32514:23;32526:4;32532;32514:11;:23::i;:::-;32570:9;32553:44;;32562:6;32553:44;;;32581:15;32553:44;;;;;;:::i;:::-;;;;;;;;32054:551;;;;;;31963:642;;;:::o;37368:125::-;37422:15;;37412:7;:25;;;;37464:21;;37448:13;:37;;;;37368:125::o;36766:154::-;36830:7;36857:55;36896:5;36857:20;36869:7;;36857;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;36850:62;;36766:154;;;:::o;36928:166::-;36998:7;37025:61;37070:5;37025:26;37037:13;;37025:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;37018:68;;36928:166;;;:::o;36399:355::-;36462:19;36485:10;:8;:10::i;:::-;36462:33;;36506:18;36527:27;36542:11;36527:10;:14;;:27;;;;:::i;:::-;36506:48;;36590:38;36617:10;36590:7;:22;36606:4;36590:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;36565:7;:22;36581:4;36565:22;;;;;;;;;;;;;;;:63;;;;36642:11;:26;36662:4;36642:26;;;;;;;;;;;;;;;;;;;;;;;;;36639:107;;;36708:38;36735:10;36708:7;:22;36724:4;36708:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;36683:7;:22;36699:4;36683:22;;;;;;;;;;;;;;;:63;;;;36639:107;36451:303;;36399:355;:::o;34298:147::-;34376:17;34388:4;34376:7;;:11;;:17;;;;:::i;:::-;34366:7;:27;;;;34417:20;34432:4;34417:10;;:14;;:20;;;;:::i;:::-;34404:10;:33;;;;34298:147;;:::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:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:60::-;3874:3;3895:5;3888:12;;3846:60;;;:::o;3912:142::-;3962:9;3995:53;4013:34;4022:24;4040:5;4022:24;:::i;:::-;4013:34;:::i;:::-;3995:53;:::i;:::-;3982:66;;3912:142;;;:::o;4060:126::-;4110:9;4143:37;4174:5;4143:37;:::i;:::-;4130:50;;4060:126;;;:::o;4192:153::-;4269:9;4302:37;4333:5;4302:37;:::i;:::-;4289:50;;4192:153;;;:::o;4351:185::-;4465:64;4523:5;4465:64;:::i;:::-;4460:3;4453:77;4351:185;;:::o;4542:276::-;4662:4;4700:2;4689:9;4685:18;4677:26;;4713:98;4808:1;4797:9;4793:17;4784:6;4713:98;:::i;:::-;4542:276;;;;:::o;4824:619::-;4901:6;4909;4917;4966:2;4954:9;4945:7;4941:23;4937:32;4934:119;;;4972:79;;:::i;:::-;4934:119;5092:1;5117:53;5162:7;5153:6;5142:9;5138:22;5117:53;:::i;:::-;5107:63;;5063:117;5219:2;5245:53;5290:7;5281:6;5270:9;5266:22;5245:53;:::i;:::-;5235:63;;5190:118;5347:2;5373:53;5418:7;5409:6;5398:9;5394:22;5373:53;:::i;:::-;5363:63;;5318:118;4824:619;;;;;:::o;5449:329::-;5508:6;5557:2;5545:9;5536:7;5532:23;5528:32;5525:119;;;5563:79;;:::i;:::-;5525:119;5683:1;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5654:117;5449:329;;;;:::o;5784:86::-;5819:7;5859:4;5852:5;5848:16;5837:27;;5784:86;;;:::o;5876:112::-;5959:22;5975:5;5959:22;:::i;:::-;5954:3;5947:35;5876:112;;:::o;5994:214::-;6083:4;6121:2;6110:9;6106:18;6098:26;;6134:67;6198:1;6187:9;6183:17;6174:6;6134:67;:::i;:::-;5994:214;;;;:::o;6214:329::-;6273:6;6322:2;6310:9;6301:7;6297:23;6293:32;6290:119;;;6328:79;;:::i;:::-;6290:119;6448:1;6473:53;6518:7;6509:6;6498:9;6494:22;6473:53;:::i;:::-;6463:63;;6419:117;6214:329;;;;:::o;6549:109::-;6599:7;6628:24;6646:5;6628:24;:::i;:::-;6617:35;;6549:109;;;:::o;6664:148::-;6750:37;6781:5;6750:37;:::i;:::-;6743:5;6740:48;6730:76;;6802:1;6799;6792:12;6730:76;6664:148;:::o;6818:165::-;6877:5;6915:6;6902:20;6893:29;;6931:46;6971:5;6931:46;:::i;:::-;6818:165;;;;:::o;6989:500::-;7070:6;7078;7127:2;7115:9;7106:7;7102:23;7098:32;7095:119;;;7133:79;;:::i;:::-;7095:119;7253:1;7278:66;7336:7;7327:6;7316:9;7312:22;7278:66;:::i;:::-;7268:76;;7224:130;7393:2;7419:53;7464:7;7455:6;7444:9;7440:22;7419:53;:::i;:::-;7409:63;;7364:118;6989:500;;;;;:::o;7495:116::-;7565:21;7580:5;7565:21;:::i;:::-;7558:5;7555:32;7545:60;;7601:1;7598;7591:12;7545:60;7495:116;:::o;7617:133::-;7660:5;7698:6;7685:20;7676:29;;7714:30;7738:5;7714:30;:::i;:::-;7617:133;;;;:::o;7756:468::-;7821:6;7829;7878:2;7866:9;7857:7;7853:23;7849:32;7846:119;;;7884:79;;:::i;:::-;7846:119;8004:1;8029:53;8074:7;8065:6;8054:9;8050:22;8029:53;:::i;:::-;8019:63;;7975:117;8131:2;8157:50;8199:7;8190:6;8179:9;8175:22;8157:50;:::i;:::-;8147:60;;8102:115;7756:468;;;;;:::o;8230:118::-;8317:24;8335:5;8317:24;:::i;:::-;8312:3;8305:37;8230:118;;:::o;8354:222::-;8447:4;8485:2;8474:9;8470:18;8462:26;;8498:71;8566:1;8555:9;8551:17;8542:6;8498:71;:::i;:::-;8354:222;;;;:::o;8582:104::-;8627:7;8656:24;8674:5;8656:24;:::i;:::-;8645:35;;8582:104;;;:::o;8692:138::-;8773:32;8799:5;8773:32;:::i;:::-;8766:5;8763:43;8753:71;;8820:1;8817;8810:12;8753:71;8692:138;:::o;8836:155::-;8890:5;8928:6;8915:20;8906:29;;8944:41;8979:5;8944:41;:::i;:::-;8836:155;;;;:::o;8997:345::-;9064:6;9113:2;9101:9;9092:7;9088:23;9084:32;9081:119;;;9119:79;;:::i;:::-;9081:119;9239:1;9264:61;9317:7;9308:6;9297:9;9293:22;9264:61;:::i;:::-;9254:71;;9210:125;8997:345;;;;:::o;9348:323::-;9404:6;9453:2;9441:9;9432:7;9428:23;9424:32;9421:119;;;9459:79;;:::i;:::-;9421:119;9579:1;9604:50;9646:7;9637:6;9626:9;9622:22;9604:50;:::i;:::-;9594:60;;9550:114;9348:323;;;;:::o;9677:474::-;9745:6;9753;9802:2;9790:9;9781:7;9777:23;9773:32;9770:119;;;9808:79;;:::i;:::-;9770:119;9928:1;9953:53;9998:7;9989:6;9978:9;9974:22;9953:53;:::i;:::-;9943:63;;9899:117;10055:2;10081:53;10126:7;10117:6;10106:9;10102:22;10081:53;:::i;:::-;10071:63;;10026:118;9677:474;;;;;:::o;10157:182::-;10297:34;10293:1;10285:6;10281:14;10274:58;10157:182;:::o;10345:366::-;10487:3;10508:67;10572:2;10567:3;10508:67;:::i;:::-;10501:74;;10584:93;10673:3;10584:93;:::i;:::-;10702:2;10697:3;10693:12;10686:19;;10345:366;;;:::o;10717:419::-;10883:4;10921:2;10910:9;10906:18;10898:26;;10970:9;10964:4;10960:20;10956:1;10945:9;10941:17;10934:47;10998:131;11124:4;10998:131;:::i;:::-;10990:139;;10717:419;;;:::o;11142:180::-;11190:77;11187:1;11180:88;11287:4;11284:1;11277:15;11311:4;11308:1;11301:15;11328:320;11372:6;11409:1;11403:4;11399:12;11389:22;;11456:1;11450:4;11446:12;11477:18;11467:81;;11533:4;11525:6;11521:17;11511:27;;11467:81;11595:2;11587:6;11584:14;11564:18;11561:38;11558:84;;;11614:18;;:::i;:::-;11558:84;11379:269;11328:320;;;:::o;11654:239::-;11794:34;11790:1;11782:6;11778:14;11771:58;11863:22;11858:2;11850:6;11846:15;11839:47;11654:239;:::o;11899:366::-;12041:3;12062:67;12126:2;12121:3;12062:67;:::i;:::-;12055:74;;12138:93;12227:3;12138:93;:::i;:::-;12256:2;12251:3;12247:12;12240:19;;11899:366;;;:::o;12271:419::-;12437:4;12475:2;12464:9;12460:18;12452:26;;12524:9;12518:4;12514:20;12510:1;12499:9;12495:17;12488:47;12552:131;12678:4;12552:131;:::i;:::-;12544:139;;12271:419;;;:::o;12696:180::-;12744:77;12741:1;12734:88;12841:4;12838:1;12831:15;12865:4;12862:1;12855:15;12882:348;12922:7;12945:20;12963:1;12945:20;:::i;:::-;12940:25;;12979:20;12997:1;12979:20;:::i;:::-;12974:25;;13167:1;13099:66;13095:74;13092:1;13089:81;13084:1;13077:9;13070:17;13066:105;13063:131;;;13174:18;;:::i;:::-;13063:131;13222:1;13219;13215:9;13204:20;;12882:348;;;;:::o;13236:229::-;13376:34;13372:1;13364:6;13360:14;13353:58;13445:12;13440:2;13432:6;13428:15;13421:37;13236:229;:::o;13471:366::-;13613:3;13634:67;13698:2;13693:3;13634:67;:::i;:::-;13627:74;;13710:93;13799:3;13710:93;:::i;:::-;13828:2;13823:3;13819:12;13812:19;;13471:366;;;:::o;13843:419::-;14009:4;14047:2;14036:9;14032:18;14024:26;;14096:9;14090:4;14086:20;14082:1;14071:9;14067:17;14060:47;14124:131;14250:4;14124:131;:::i;:::-;14116:139;;13843:419;;;:::o;14268:177::-;14408:29;14404:1;14396:6;14392:14;14385:53;14268:177;:::o;14451:366::-;14593:3;14614:67;14678:2;14673:3;14614:67;:::i;:::-;14607:74;;14690:93;14779:3;14690:93;:::i;:::-;14808:2;14803:3;14799:12;14792:19;;14451:366;;;:::o;14823:419::-;14989:4;15027:2;15016:9;15012:18;15004:26;;15076:9;15070:4;15066:20;15062:1;15051:9;15047:17;15040:47;15104:131;15230:4;15104:131;:::i;:::-;15096:139;;14823:419;;;:::o;15248:180::-;15296:77;15293:1;15286:88;15393:4;15390:1;15383:15;15417:4;15414:1;15407:15;15434:191;15474:4;15494:20;15512:1;15494:20;:::i;:::-;15489:25;;15528:20;15546:1;15528:20;:::i;:::-;15523:25;;15567:1;15564;15561:8;15558:34;;;15572:18;;:::i;:::-;15558:34;15617:1;15614;15610:9;15602:17;;15434:191;;;;:::o;15631:180::-;15679:77;15676:1;15669:88;15776:4;15773:1;15766:15;15800:4;15797:1;15790:15;15817:233;15856:3;15879:24;15897:5;15879:24;:::i;:::-;15870:33;;15925:66;15918:5;15915:77;15912:103;;;15995:18;;:::i;:::-;15912:103;16042:1;16035:5;16031:13;16024:20;;15817:233;;;:::o;16056:143::-;16113:5;16144:6;16138:13;16129:22;;16160:33;16187:5;16160:33;:::i;:::-;16056:143;;;;:::o;16205:351::-;16275:6;16324:2;16312:9;16303:7;16299:23;16295:32;16292:119;;;16330:79;;:::i;:::-;16292:119;16450:1;16475:64;16531:7;16522:6;16511:9;16507:22;16475:64;:::i;:::-;16465:74;;16421:128;16205:351;;;;:::o;16562:332::-;16683:4;16721:2;16710:9;16706:18;16698:26;;16734:71;16802:1;16791:9;16787:17;16778:6;16734:71;:::i;:::-;16815:72;16883:2;16872:9;16868:18;16859:6;16815:72;:::i;:::-;16562:332;;;;;:::o;16900:137::-;16954:5;16985:6;16979:13;16970:22;;17001:30;17025:5;17001:30;:::i;:::-;16900:137;;;;:::o;17043:345::-;17110:6;17159:2;17147:9;17138:7;17134:23;17130:32;17127:119;;;17165:79;;:::i;:::-;17127:119;17285:1;17310:61;17363:7;17354:6;17343:9;17339:22;17310:61;:::i;:::-;17300:71;;17256:125;17043:345;;;;:::o;17394:231::-;17534:34;17530:1;17522:6;17518:14;17511:58;17603:14;17598:2;17590:6;17586:15;17579:39;17394:231;:::o;17631:366::-;17773:3;17794:67;17858:2;17853:3;17794:67;:::i;:::-;17787:74;;17870:93;17959:3;17870:93;:::i;:::-;17988:2;17983:3;17979:12;17972:19;;17631:366;;;:::o;18003:419::-;18169:4;18207:2;18196:9;18192:18;18184:26;;18256:9;18250:4;18246:20;18242:1;18231:9;18227:17;18220:47;18284:131;18410:4;18284:131;:::i;:::-;18276:139;;18003:419;;;:::o;18428:181::-;18568:33;18564:1;18556:6;18552:14;18545:57;18428:181;:::o;18615:366::-;18757:3;18778:67;18842:2;18837:3;18778:67;:::i;:::-;18771:74;;18854:93;18943:3;18854:93;:::i;:::-;18972:2;18967:3;18963:12;18956:19;;18615:366;;;:::o;18987:419::-;19153:4;19191:2;19180:9;19176:18;19168:26;;19240:9;19234:4;19230:20;19226:1;19215:9;19211:17;19204:47;19268:131;19394:4;19268:131;:::i;:::-;19260:139;;18987:419;;;:::o;19412:222::-;19552:34;19548:1;19540:6;19536:14;19529:58;19621:5;19616:2;19608:6;19604:15;19597:30;19412:222;:::o;19640:366::-;19782:3;19803:67;19867:2;19862:3;19803:67;:::i;:::-;19796:74;;19879:93;19968:3;19879:93;:::i;:::-;19997:2;19992:3;19988:12;19981:19;;19640:366;;;:::o;20012:419::-;20178:4;20216:2;20205:9;20201:18;20193:26;;20265:9;20259:4;20255:20;20251:1;20240:9;20236:17;20229:47;20293:131;20419:4;20293:131;:::i;:::-;20285:139;;20012:419;;;:::o;20437:181::-;20577:33;20573:1;20565:6;20561:14;20554:57;20437:181;:::o;20624:366::-;20766:3;20787:67;20851:2;20846:3;20787:67;:::i;:::-;20780:74;;20863:93;20952:3;20863:93;:::i;:::-;20981:2;20976:3;20972:12;20965:19;;20624:366;;;:::o;20996:419::-;21162:4;21200:2;21189:9;21185:18;21177:26;;21249:9;21243:4;21239:20;21235:1;21224:9;21220:17;21213:47;21277:131;21403:4;21277:131;:::i;:::-;21269:139;;20996:419;;;:::o;21421:225::-;21561:34;21557:1;21549:6;21545:14;21538:58;21630:8;21625:2;21617:6;21613:15;21606:33;21421:225;:::o;21652:366::-;21794:3;21815:67;21879:2;21874:3;21815:67;:::i;:::-;21808:74;;21891:93;21980:3;21891:93;:::i;:::-;22009:2;22004:3;22000:12;21993:19;;21652:366;;;:::o;22024:419::-;22190:4;22228:2;22217:9;22213:18;22205:26;;22277:9;22271:4;22267:20;22263:1;22252:9;22248:17;22241:47;22305:131;22431:4;22305:131;:::i;:::-;22297:139;;22024:419;;;:::o;22449:305::-;22489:3;22508:20;22526:1;22508:20;:::i;:::-;22503:25;;22542:20;22560:1;22542:20;:::i;:::-;22537:25;;22696:1;22628:66;22624:74;22621:1;22618:81;22615:107;;;22702:18;;:::i;:::-;22615:107;22746:1;22743;22739:9;22732:16;;22449:305;;;;:::o;22760:223::-;22900:34;22896:1;22888:6;22884:14;22877:58;22969:6;22964:2;22956:6;22952:15;22945:31;22760:223;:::o;22989:366::-;23131:3;23152:67;23216:2;23211:3;23152:67;:::i;:::-;23145:74;;23228:93;23317:3;23228:93;:::i;:::-;23346:2;23341:3;23337:12;23330:19;;22989:366;;;:::o;23361:419::-;23527:4;23565:2;23554:9;23550:18;23542:26;;23614:9;23608:4;23604:20;23600:1;23589:9;23585:17;23578:47;23642:131;23768:4;23642:131;:::i;:::-;23634:139;;23361:419;;;:::o;23786:221::-;23926:34;23922:1;23914:6;23910:14;23903:58;23995:4;23990:2;23982:6;23978:15;23971:29;23786:221;:::o;24013:366::-;24155:3;24176:67;24240:2;24235:3;24176:67;:::i;:::-;24169:74;;24252:93;24341:3;24252:93;:::i;:::-;24370:2;24365:3;24361:12;24354:19;;24013:366;;;:::o;24385:419::-;24551:4;24589:2;24578:9;24574:18;24566:26;;24638:9;24632:4;24628:20;24624:1;24613:9;24609:17;24602:47;24666:131;24792:4;24666:131;:::i;:::-;24658:139;;24385:419;;;:::o;24810:224::-;24950:34;24946:1;24938:6;24934:14;24927:58;25019:7;25014:2;25006:6;25002:15;24995:32;24810:224;:::o;25040:366::-;25182:3;25203:67;25267:2;25262:3;25203:67;:::i;:::-;25196:74;;25279:93;25368:3;25279:93;:::i;:::-;25397:2;25392:3;25388:12;25381:19;;25040:366;;;:::o;25412:419::-;25578:4;25616:2;25605:9;25601:18;25593:26;;25665:9;25659:4;25655:20;25651:1;25640:9;25636:17;25629:47;25693:131;25819:4;25693:131;:::i;:::-;25685:139;;25412:419;;;:::o;25837:222::-;25977:34;25973:1;25965:6;25961:14;25954:58;26046:5;26041:2;26033:6;26029:15;26022:30;25837:222;:::o;26065:366::-;26207:3;26228:67;26292:2;26287:3;26228:67;:::i;:::-;26221:74;;26304:93;26393:3;26304:93;:::i;:::-;26422:2;26417:3;26413:12;26406:19;;26065:366;;;:::o;26437:419::-;26603:4;26641:2;26630:9;26626:18;26618:26;;26690:9;26684:4;26680:20;26676:1;26665:9;26661:17;26654:47;26718:131;26844:4;26718:131;:::i;:::-;26710:139;;26437:419;;;:::o;26862:228::-;27002:34;26998:1;26990:6;26986:14;26979:58;27071:11;27066:2;27058:6;27054:15;27047:36;26862:228;:::o;27096:366::-;27238:3;27259:67;27323:2;27318:3;27259:67;:::i;:::-;27252:74;;27335:93;27424:3;27335:93;:::i;:::-;27453:2;27448:3;27444:12;27437:19;;27096:366;;;:::o;27468:419::-;27634:4;27672:2;27661:9;27657:18;27649:26;;27721:9;27715:4;27711:20;27707:1;27696:9;27692:17;27685:47;27749:131;27875:4;27749:131;:::i;:::-;27741:139;;27468:419;;;:::o;27893:227::-;28033:34;28029:1;28021:6;28017:14;28010:58;28102:10;28097:2;28089:6;28085:15;28078:35;27893:227;:::o;28126:366::-;28268:3;28289:67;28353:2;28348:3;28289:67;:::i;:::-;28282:74;;28365:93;28454:3;28365:93;:::i;:::-;28483:2;28478:3;28474:12;28467:19;;28126:366;;;:::o;28498:419::-;28664:4;28702:2;28691:9;28687:18;28679:26;;28751:9;28745:4;28741:20;28737:1;28726:9;28722:17;28715:47;28779:131;28905:4;28779:131;:::i;:::-;28771:139;;28498:419;;;:::o;28923:177::-;29063:29;29059:1;29051:6;29047:14;29040:53;28923:177;:::o;29106:366::-;29248:3;29269:67;29333:2;29328:3;29269:67;:::i;:::-;29262:74;;29345:93;29434:3;29345:93;:::i;:::-;29463:2;29458:3;29454:12;29447:19;;29106:366;;;:::o;29478:419::-;29644:4;29682:2;29671:9;29667:18;29659:26;;29731:9;29725:4;29721:20;29717:1;29706:9;29702:17;29695:47;29759:131;29885:4;29759:131;:::i;:::-;29751:139;;29478:419;;;:::o;29903:442::-;30052:4;30090:2;30079:9;30075:18;30067:26;;30103:71;30171:1;30160:9;30156:17;30147:6;30103:71;:::i;:::-;30184:72;30252:2;30241:9;30237:18;30228:6;30184:72;:::i;:::-;30266;30334:2;30323:9;30319:18;30310:6;30266:72;:::i;:::-;29903:442;;;;;;:::o;30351:177::-;30491:29;30487:1;30479:6;30475:14;30468:53;30351:177;:::o;30534:366::-;30676:3;30697:67;30761:2;30756:3;30697:67;:::i;:::-;30690:74;;30773:93;30862:3;30773:93;:::i;:::-;30891:2;30886:3;30882:12;30875:19;;30534:366;;;:::o;30906:419::-;31072:4;31110:2;31099:9;31095:18;31087:26;;31159:9;31153:4;31149:20;31145:1;31134:9;31130:17;31123:47;31187:131;31313:4;31187:131;:::i;:::-;31179:139;;30906:419;;;:::o;31331:180::-;31379:77;31376:1;31369:88;31476:4;31473:1;31466:15;31500:4;31497:1;31490:15;31517:185;31557:1;31574:20;31592:1;31574:20;:::i;:::-;31569:25;;31608:20;31626:1;31608:20;:::i;:::-;31603:25;;31647:1;31637:35;;31652:18;;:::i;:::-;31637:35;31694:1;31691;31687:9;31682:14;;31517:185;;;;:::o;31708:180::-;31756:77;31753:1;31746:88;31853:4;31850:1;31843:15;31877:4;31874:1;31867:15;31894:143;31951:5;31982:6;31976:13;31967:22;;31998:33;32025:5;31998:33;:::i;:::-;31894:143;;;;:::o;32043:351::-;32113:6;32162:2;32150:9;32141:7;32137:23;32133:32;32130:119;;;32168:79;;:::i;:::-;32130:119;32288:1;32313:64;32369:7;32360:6;32349:9;32345:22;32313:64;:::i;:::-;32303:74;;32259:128;32043:351;;;;:::o;32400:85::-;32445:7;32474:5;32463:16;;32400:85;;;:::o;32491:158::-;32549:9;32582:61;32600:42;32609:32;32635:5;32609:32;:::i;:::-;32600:42;:::i;:::-;32582:61;:::i;:::-;32569:74;;32491:158;;;:::o;32655:147::-;32750:45;32789:5;32750:45;:::i;:::-;32745:3;32738:58;32655:147;;:::o;32808:114::-;32875:6;32909:5;32903:12;32893:22;;32808:114;;;:::o;32928:184::-;33027:11;33061:6;33056:3;33049:19;33101:4;33096:3;33092:14;33077:29;;32928:184;;;;:::o;33118:132::-;33185:4;33208:3;33200:11;;33238:4;33233:3;33229:14;33221:22;;33118:132;;;:::o;33256:108::-;33333:24;33351:5;33333:24;:::i;:::-;33328:3;33321:37;33256:108;;:::o;33370:179::-;33439:10;33460:46;33502:3;33494:6;33460:46;:::i;:::-;33538:4;33533:3;33529:14;33515:28;;33370:179;;;;:::o;33555:113::-;33625:4;33657;33652:3;33648:14;33640:22;;33555:113;;;:::o;33704:732::-;33823:3;33852:54;33900:5;33852:54;:::i;:::-;33922:86;34001:6;33996:3;33922:86;:::i;:::-;33915:93;;34032:56;34082:5;34032:56;:::i;:::-;34111:7;34142:1;34127:284;34152:6;34149:1;34146:13;34127:284;;;34228:6;34222:13;34255:63;34314:3;34299:13;34255:63;:::i;:::-;34248:70;;34341:60;34394:6;34341:60;:::i;:::-;34331:70;;34187:224;34174:1;34171;34167:9;34162:14;;34127:284;;;34131:14;34427:3;34420:10;;33828:608;;;33704:732;;;;:::o;34442:831::-;34705:4;34743:3;34732:9;34728:19;34720:27;;34757:71;34825:1;34814:9;34810:17;34801:6;34757:71;:::i;:::-;34838:80;34914:2;34903:9;34899:18;34890:6;34838:80;:::i;:::-;34965:9;34959:4;34955:20;34950:2;34939:9;34935:18;34928:48;34993:108;35096:4;35087:6;34993:108;:::i;:::-;34985:116;;35111:72;35179:2;35168:9;35164:18;35155:6;35111:72;:::i;:::-;35193:73;35261:3;35250:9;35246:19;35237:6;35193:73;:::i;:::-;34442:831;;;;;;;;:::o;35279:220::-;35419:34;35415:1;35407:6;35403:14;35396:58;35488:3;35483:2;35475:6;35471:15;35464:28;35279:220;:::o;35505:366::-;35647:3;35668:67;35732:2;35727:3;35668:67;:::i;:::-;35661:74;;35744:93;35833:3;35744:93;:::i;:::-;35862:2;35857:3;35853:12;35846:19;;35505:366;;;:::o;35877:419::-;36043:4;36081:2;36070:9;36066:18;36058:26;;36130:9;36124:4;36120:20;36116:1;36105:9;36101:17;36094:47;36158:131;36284:4;36158:131;:::i;:::-;36150:139;;35877:419;;;:::o;36302:807::-;36551:4;36589:3;36578:9;36574:19;36566:27;;36603:71;36671:1;36660:9;36656:17;36647:6;36603:71;:::i;:::-;36684:72;36752:2;36741:9;36737:18;36728:6;36684:72;:::i;:::-;36766:80;36842:2;36831:9;36827:18;36818:6;36766:80;:::i;:::-;36856;36932:2;36921:9;36917:18;36908:6;36856:80;:::i;:::-;36946:73;37014:3;37003:9;36999:19;36990:6;36946:73;:::i;:::-;37029;37097:3;37086:9;37082:19;37073:6;37029:73;:::i;:::-;36302:807;;;;;;;;;:::o;37115:663::-;37203:6;37211;37219;37268:2;37256:9;37247:7;37243:23;37239:32;37236:119;;;37274:79;;:::i;:::-;37236:119;37394:1;37419:64;37475:7;37466:6;37455:9;37451:22;37419:64;:::i;:::-;37409:74;;37365:128;37532:2;37558:64;37614:7;37605:6;37594:9;37590:22;37558:64;:::i;:::-;37548:74;;37503:129;37671:2;37697:64;37753:7;37744:6;37733:9;37729:22;37697:64;:::i;:::-;37687:74;;37642:129;37115:663;;;;;:::o
Swarm Source
ipfs://8a198f9b5b76078066170a9d02945da3aa0954653b285a843d363a31940937e1
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.