Contract 0x2d2f89146543aa1386ddab19fef67efd798994bb 11
Contract Overview
My Name Tag:
Not Available
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
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:
StrategySushiMagicEthLp
Compiler Version
v0.6.7+commit.b8d736ae
Contract Source Code (Solidity)
/** *Submitted for verification at Arbiscan.io on 2021-12-23 */ // Sources flattened with hardhat v2.6.8 https://hardhat.org // File src/lib/safe-math.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @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; } } // File src/lib/context.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { 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; } } // File src/lib/erc20.sol // File: contracts/GSN/Context.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; // File: contracts/token/ERC20/IERC20.sol /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ 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); } // File: contracts/utils/Address.sol /** * @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) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @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); } } } } // File: contracts/token/ERC20/ERC20.sol /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20 { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name, string memory symbol) public { _name = name; _symbol = symbol; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is * called. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ 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; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { 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); } /** * @dev Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal { _decimals = decimals_; } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File src/interfaces/jar.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.2; interface IJar is IERC20 { function token() external view returns (address); function reward() external view returns (address); function claimInsurance() external; // NOTE: Only yDelegatedVault implements this function getRatio() external view returns (uint256); function depositAll() external; function balance() external view returns (uint256); function deposit(uint256) external; function withdrawAll() external; function withdraw(uint256) external; function earn() external; function decimals() external view returns (uint8); } // File src/interfaces/staking-rewards.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.2; interface IStakingRewards { function balanceOf(address account) external view returns (uint256); function earned(address account) external view returns (uint256); function exit() external; function getReward() external; function getRewardForDuration() external view returns (uint256); function lastTimeRewardApplicable() external view returns (uint256); function lastUpdateTime() external view returns (uint256); function notifyRewardAmount(uint256 reward) external; function periodFinish() external view returns (uint256); function rewardPerToken() external view returns (uint256); function rewardPerTokenStored() external view returns (uint256); function rewardRate() external view returns (uint256); function rewards(address) external view returns (uint256); function rewardsDistribution() external view returns (address); function rewardsDuration() external view returns (uint256); function rewardsToken() external view returns (address); function stake(uint256 amount) external; function deposit(uint256 amount) external; function stakeWithPermit( uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; function stakingToken() external view returns (address); function totalSupply() external view returns (uint256); function userRewardPerTokenPaid(address) external view returns (uint256); function withdraw(uint256 amount) external; } interface IStakingRewardsFactory { function deploy(address stakingToken, uint256 rewardAmount) external; function isOwner() external view returns (bool); function notifyRewardAmount(address stakingToken) external; function notifyRewardAmounts() external; function owner() external view returns (address); function renounceOwnership() external; function rewardsToken() external view returns (address); function stakingRewardsGenesis() external view returns (uint256); function stakingRewardsInfoByStakingToken(address) external view returns (address stakingRewards, uint256 rewardAmount); function stakingTokens(uint256) external view returns (address); function transferOwnership(address newOwner) external; } // File src/interfaces/masterchef.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.7; interface IMasterchef { function BONUS_MULTIPLIER() external view returns (uint256); function add( uint256 _allocPoint, address _lpToken, bool _withUpdate ) external; function bonusEndBlock() external view returns (uint256); function deposit(uint256 _pid, uint256 _amount) external; function dev(address _devaddr) external; function devFundDivRate() external view returns (uint256); function devaddr() external view returns (address); function emergencyWithdraw(uint256 _pid) external; function getMultiplier(uint256 _from, uint256 _to) external view returns (uint256); function massUpdatePools() external; function owner() external view returns (address); function pendingPickle(uint256 _pid, address _user) external view returns (uint256); function pendingReward(uint256 _pid, address _user) external view returns (uint256); function pending(uint256 _pid, address _user) external view returns (uint256); function pickle() external view returns (address); function picklePerBlock() external view returns (uint256); function poolInfo(uint256) external view returns ( address lpToken, uint256 allocPoint, uint256 lastRewardBlock, uint256 accPicklePerShare ); function poolLength() external view returns (uint256); function renounceOwnership() external; function set( uint256 _pid, uint256 _allocPoint, bool _withUpdate ) external; function setBonusEndBlock(uint256 _bonusEndBlock) external; function setDevFundDivRate(uint256 _devFundDivRate) external; function setPicklePerBlock(uint256 _picklePerBlock) external; function startBlock() external view returns (uint256); function totalAllocPoint() external view returns (uint256); function transferOwnership(address newOwner) external; function updatePool(uint256 _pid) external; function userInfo(uint256, address) external view returns (uint256 amount, uint256 rewardDebt); function withdraw(uint256 _pid, uint256 _amount) external; } // File src/interfaces/uniswapv2.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.2; interface UniswapRouterV2 { function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 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 (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 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 (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); 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 (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function createPair(address tokenA, address tokenB) external returns (address pair); } // File src/interfaces/controller.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; interface IController { function jars(address) external view returns (address); function rewards() external view returns (address); function devfund() external view returns (address); function treasury() external view returns (address); function balanceOf(address) external view returns (uint256); function withdraw(address, uint256) external; function withdrawReward(address, uint256) external; function earn(address, uint256) external; function strategies(address) external view returns (address); } // File src/strategies/arbitrum/strategy-base.sol pragma solidity ^0.6.7; // Strategy Contract Basics abstract contract StrategyBase { using SafeERC20 for IERC20; using Address for address; using SafeMath for uint256; // Perfomance fees - start with 20% uint256 public performanceTreasuryFee = 0; uint256 public constant performanceTreasuryMax = 10000; uint256 public performanceDevFee = 0; uint256 public constant performanceDevMax = 10000; // Withdrawal fee 0% // - 0% to treasury // - 0% to dev fund uint256 public withdrawalTreasuryFee = 0; uint256 public constant withdrawalTreasuryMax = 100000; uint256 public withdrawalDevFundFee = 0; uint256 public constant withdrawalDevFundMax = 100000; // Tokens address public want; address public constant weth = 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1; // User accounts address public governance; address public controller; address public strategist; address public timelock; // Dex address public sushiRouter = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506; mapping(address => bool) public harvesters; constructor( address _want, address _governance, address _strategist, address _controller, address _timelock ) public { require(_want != address(0)); require(_governance != address(0)); require(_strategist != address(0)); require(_controller != address(0)); require(_timelock != address(0)); want = _want; governance = _governance; strategist = _strategist; controller = _controller; timelock = _timelock; } // **** Modifiers **** // modifier onlyBenevolent { require( harvesters[msg.sender] || msg.sender == governance || msg.sender == strategist ); _; } // **** Views **** // function balanceOfWant() public view returns (uint256) { return IERC20(want).balanceOf(address(this)); } function balanceOfPool() public virtual view returns (uint256); function balanceOf() public view returns (uint256) { return balanceOfWant().add(balanceOfPool()); } function getName() external virtual pure returns (string memory); // **** Setters **** // function whitelistHarvesters(address[] calldata _harvesters) external { require(msg.sender == governance || msg.sender == strategist || harvesters[msg.sender], "not authorized"); for (uint i = 0; i < _harvesters.length; i ++) { harvesters[_harvesters[i]] = true; } } function revokeHarvesters(address[] calldata _harvesters) external { require(msg.sender == governance || msg.sender == strategist, "not authorized"); for (uint i = 0; i < _harvesters.length; i ++) { harvesters[_harvesters[i]] = false; } } function setWithdrawalDevFundFee(uint256 _withdrawalDevFundFee) external { require(msg.sender == timelock, "!timelock"); withdrawalDevFundFee = _withdrawalDevFundFee; } function setWithdrawalTreasuryFee(uint256 _withdrawalTreasuryFee) external { require(msg.sender == timelock, "!timelock"); withdrawalTreasuryFee = _withdrawalTreasuryFee; } function setPerformanceDevFee(uint256 _performanceDevFee) external { require(msg.sender == timelock, "!timelock"); performanceDevFee = _performanceDevFee; } function setPerformanceTreasuryFee(uint256 _performanceTreasuryFee) external { require(msg.sender == timelock, "!timelock"); performanceTreasuryFee = _performanceTreasuryFee; } function setStrategist(address _strategist) external { require(msg.sender == governance, "!governance"); strategist = _strategist; } function setGovernance(address _governance) external { require(msg.sender == governance, "!governance"); governance = _governance; } function setTimelock(address _timelock) external { require(msg.sender == timelock, "!timelock"); timelock = _timelock; } function setController(address _controller) external { require(msg.sender == timelock, "!timelock"); controller = _controller; } // **** State mutations **** // function deposit() public virtual; // Controller only function for creating additional rewards from dust function withdraw(IERC20 _asset) external returns (uint256 balance) { require(msg.sender == controller, "!controller"); require(want != address(_asset), "want"); balance = _asset.balanceOf(address(this)); _asset.safeTransfer(controller, balance); } // Withdraw partial funds, normally used with a jar withdrawal function withdraw(uint256 _amount) external { require(msg.sender == controller, "!controller"); uint256 _balance = IERC20(want).balanceOf(address(this)); if (_balance < _amount) { _amount = _withdrawSome(_amount.sub(_balance)); _amount = _amount.add(_balance); } uint256 _feeDev = _amount.mul(withdrawalDevFundFee).div( withdrawalDevFundMax ); IERC20(want).safeTransfer(IController(controller).devfund(), _feeDev); uint256 _feeTreasury = _amount.mul(withdrawalTreasuryFee).div( withdrawalTreasuryMax ); IERC20(want).safeTransfer( IController(controller).treasury(), _feeTreasury ); address _jar = IController(controller).jars(address(want)); require(_jar != address(0), "!jar"); // additional protection so we don't burn the funds IERC20(want).safeTransfer(_jar, _amount.sub(_feeDev).sub(_feeTreasury)); } // Withdraw funds, used to swap between strategies function withdrawForSwap(uint256 _amount) external returns (uint256 balance) { require(msg.sender == controller, "!controller"); _withdrawSome(_amount); balance = IERC20(want).balanceOf(address(this)); address _jar = IController(controller).jars(address(want)); require(_jar != address(0), "!jar"); IERC20(want).safeTransfer(_jar, balance); } // Withdraw all funds, normally used when migrating strategies function withdrawAll() external returns (uint256 balance) { require(msg.sender == controller, "!controller"); _withdrawAll(); balance = IERC20(want).balanceOf(address(this)); address _jar = IController(controller).jars(address(want)); require(_jar != address(0), "!jar"); // additional protection so we don't burn the funds IERC20(want).safeTransfer(_jar, balance); } function _withdrawAll() internal { _withdrawSome(balanceOfPool()); } function _withdrawSome(uint256 _amount) internal virtual returns (uint256); function harvest() public virtual; // **** Emergency functions **** function execute(address _target, bytes memory _data) public payable returns (bytes memory response) { require(msg.sender == timelock, "!timelock"); require(_target != address(0), "!target"); // call contract in current context assembly { let succeeded := delegatecall( sub(gas(), 5000), _target, add(_data, 0x20), mload(_data), 0, 0 ) let size := returndatasize() response := mload(0x40) mstore( 0x40, add(response, and(add(add(size, 0x20), 0x1f), not(0x1f))) ) mstore(response, size) returndatacopy(add(response, 0x20), 0, size) switch iszero(succeeded) case 1 { // throw if delegatecall failed revert(add(response, 0x20), size) } } } // **** Internal functions **** function _swapSushiswap( address _from, address _to, uint256 _amount ) internal { require(_to != address(0)); address[] memory path; if (_from == weth || _to == weth) { path = new address[](2); path[0] = _from; path[1] = _to; } else { path = new address[](3); path[0] = _from; path[1] = weth; path[2] = _to; } IERC20(_from).safeApprove(sushiRouter, 0); IERC20(_from).safeApprove(sushiRouter, _amount); UniswapRouterV2(sushiRouter).swapExactTokensForTokens( _amount, 0, path, address(this), now.add(60) ); } function _swapSushiswapWithPath( address[] memory path, uint256 _amount ) internal { require(path[1] != address(0)); IERC20(path[0]).safeApprove(sushiRouter, 0); IERC20(path[0]).safeApprove(sushiRouter, _amount); UniswapRouterV2(sushiRouter).swapExactTokensForTokens( _amount, 0, path, address(this), now.add(60) ); } function _distributePerformanceFeesAndDeposit() internal { uint256 _want = IERC20(want).balanceOf(address(this)); if (_want > 0) { // Treasury fees IERC20(want).safeTransfer( IController(controller).treasury(), _want.mul(performanceTreasuryFee).div(performanceTreasuryMax) ); // Performance fee IERC20(want).safeTransfer( IController(controller).devfund(), _want.mul(performanceDevFee).div(performanceDevMax) ); deposit(); } } function _distributePerformanceFeesBasedAmountAndDeposit(uint256 _amount) internal { uint256 _want = IERC20(want).balanceOf(address(this)); if (_amount > _want) { _amount = _want; } if (_amount > 0) { // Treasury fees IERC20(want).safeTransfer( IController(controller).treasury(), _amount.mul(performanceTreasuryFee).div(performanceTreasuryMax) ); // Performance fee IERC20(want).safeTransfer( IController(controller).devfund(), _amount.mul(performanceDevFee).div(performanceDevMax) ); deposit(); } } } // File src/lib/BoringERC20.sol // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.6.0; library BoringERC20 { function safeSymbol(IERC20 token) internal view returns(string memory) { (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x95d89b41)); return success && data.length > 0 ? abi.decode(data, (string)) : "???"; } function safeName(IERC20 token) internal view returns(string memory) { (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x06fdde03)); return success && data.length > 0 ? abi.decode(data, (string)) : "???"; } function safeDecimals(IERC20 token) internal view returns (uint8) { (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x313ce567)); return success && data.length == 32 ? abi.decode(data, (uint8)) : 18; } function safeTransfer(IERC20 token, address to, uint256 amount) internal { (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(0xa9059cbb, to, amount)); require(success && (data.length == 0 || abi.decode(data, (bool))), "BoringERC20: Transfer failed"); } function safeTransferFrom(IERC20 token, address from, address to, uint256 amount) internal { (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(0x23b872dd, from, to, amount)); require(success && (data.length == 0 || abi.decode(data, (bool))), "BoringERC20: TransferFrom failed"); } } // File src/interfaces/IRewarder.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.7; interface IRewarder { using BoringERC20 for IERC20; function onSushiReward(uint256 pid, address user, address recipient, uint256 sushiAmount, uint256 newLpAmount) external; function pendingTokens(uint256 pid, address user, uint256 sushiAmount) external view returns (IERC20[] memory, uint256[] memory); } // File src/interfaces/minichefv2.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.7; pragma experimental ABIEncoderV2; interface IMiniChefV2 { struct UserInfo { uint256 amount; uint256 rewardDebt; } struct PoolInfo { uint128 accSushiPerShare; uint64 lastRewardTime; uint64 allocPoint; } function rewarder(uint256 _pid) external view returns (IRewarder); function poolLength() external view returns (uint256); function updatePool(uint256 pid) external returns (IMiniChefV2.PoolInfo memory); function userInfo(uint256 _pid, address _user) external view returns (uint256, uint256); function deposit(uint256 pid, uint256 amount, address to) external; function withdraw(uint256 pid, uint256 amount, address to) external; function harvest(uint256 pid, address to) external; function withdrawAndHarvest(uint256 pid, uint256 amount, address to) external; function emergencyWithdraw(uint256 pid, address to) external; function pendingSushi(uint256 _pid, address _user) external view returns (uint256 pending); } // File src/strategies/arbitrum/strategy-sushi-farm-base.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.7; abstract contract StrategySushiFarmBase is StrategyBase { // Token addresses address public constant sushi = 0xd4d42F0b6DEF4CE0383636770eF773390d85c61A; address public constant miniChef = 0xF4d73326C13a4Fc5FD7A064217e12780e9Bd62c3; // WETH/<token1> pair address public token0; address public token1; address rewardToken; // How much SUSHI tokens to keep? uint256 public keepSUSHI = 2000; uint256 public keepReward = 2000; uint256 public constant keepMax = 10000; uint256 public poolId; constructor( address _token0, address _token1, uint256 _poolId, address _lp, address _governance, address _strategist, address _controller, address _timelock ) public StrategyBase(_lp, _governance, _strategist, _controller, _timelock) { poolId = _poolId; token0 = _token0; token1 = _token1; } function balanceOfPool() public view override returns (uint256) { (uint256 amount, ) = IMiniChefV2(miniChef).userInfo( poolId, address(this) ); return amount; } function getHarvestable() external view returns (uint256, uint256) { uint256 _pendingSushi = IMiniChefV2(miniChef).pendingSushi( poolId, address(this) ); IRewarder rewarder = IMiniChefV2(miniChef).rewarder(poolId); (, uint256[] memory _rewardAmounts) = rewarder.pendingTokens( poolId, address(this), 0 ); uint256 _pendingReward; if (_rewardAmounts.length > 0) { _pendingReward = _rewardAmounts[0]; } // return IMiniChefV2(miniChef).pendingSushi(poolId, address(this)); return (_pendingSushi, _pendingReward); } // **** Setters **** function deposit() public override { uint256 _want = IERC20(want).balanceOf(address(this)); if (_want > 0) { IERC20(want).safeApprove(miniChef, 0); IERC20(want).safeApprove(miniChef, _want); IMiniChefV2(miniChef).deposit(poolId, _want, address(this)); } } function _withdrawSome(uint256 _amount) internal override returns (uint256) { IMiniChefV2(miniChef).withdraw(poolId, _amount, address(this)); return _amount; } // **** Setters **** function setKeepSUSHI(uint256 _keepSUSHI) external { require(msg.sender == timelock, "!timelock"); keepSUSHI = _keepSUSHI; } function setKeepReward(uint256 _keepReward) external { require(msg.sender == timelock, "!timelock"); keepReward = _keepReward; } function setRewardToken(address _rewardToken) external { require( msg.sender == timelock || msg.sender == strategist, "!timelock" ); rewardToken = _rewardToken; } // **** State Mutations **** function harvest() public override onlyBenevolent { // Anyone can harvest it at any given time. // I understand the possibility of being frontrun // But ETH is a dark forest, and I wanna see how this plays out // i.e. will be be heavily frontrunned? // if so, a new strategy will be deployed. // Collects SUSHI tokens IMiniChefV2(miniChef).harvest(poolId, address(this)); uint256 _sushi = IERC20(sushi).balanceOf(address(this)); if (_sushi > 0) { // 10% is locked up for future gov uint256 _keepSUSHI = _sushi.mul(keepSUSHI).div(keepMax); IERC20(sushi).safeTransfer( IController(controller).treasury(), _keepSUSHI ); _swapSushiswap(sushi, weth, _sushi.sub(_keepSUSHI)); } // Collect reward tokens if (rewardToken != address(0)) { uint256 _reward = IERC20(rewardToken).balanceOf(address(this)); if (_reward > 0) { uint256 _keepReward = _reward.mul(keepReward).div(keepMax); IERC20(rewardToken).safeTransfer( IController(controller).treasury(), _keepReward ); _swapSushiswap(rewardToken, weth, _reward.sub(_keepReward)); } } // Swap half WETH for token0 uint256 _weth = IERC20(weth).balanceOf(address(this)); if (_weth > 0 && token0 != weth) { _swapSushiswap(weth, token0, _weth.div(2)); } // Swap half WETH for token1 if (_weth > 0 && token1 != weth) { _swapSushiswap(weth, token1, _weth.div(2)); } // Adds in liquidity for token0/token1 uint256 _token0 = IERC20(token0).balanceOf(address(this)); uint256 _token1 = IERC20(token1).balanceOf(address(this)); if (_token0 > 0 && _token1 > 0) { IERC20(token0).safeApprove(sushiRouter, 0); IERC20(token0).safeApprove(sushiRouter, _token0); IERC20(token1).safeApprove(sushiRouter, 0); IERC20(token1).safeApprove(sushiRouter, _token1); UniswapRouterV2(sushiRouter).addLiquidity( token0, token1, _token0, _token1, 0, 0, address(this), now + 60 ); // Donates DUST IERC20(token0).transfer( IController(controller).treasury(), IERC20(token0).balanceOf(address(this)) ); IERC20(token1).safeTransfer( IController(controller).treasury(), IERC20(token1).balanceOf(address(this)) ); } // We want to get back SUSHI LP tokens _distributePerformanceFeesAndDeposit(); } } // File src/strategies/arbitrum/sushiswap/strategy-sushi-magic-eth-lp.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.7; contract StrategySushiMagicEthLp is StrategySushiFarmBase { // Token/ETH pool id in MasterChef contract uint256 public sushi_magic_eth_poolId = 13; // Token addresses address public sushi_magic_eth_lp = 0xB7E50106A5bd3Cf21AF210A755F9C8740890A8c9; address public magic = 0x539bdE0d7Dbd336b79148AA742883198BBF60342; constructor( address _governance, address _strategist, address _controller, address _timelock ) public StrategySushiFarmBase( magic, weth, sushi_magic_eth_poolId, sushi_magic_eth_lp, _governance, _strategist, _controller, _timelock ) { rewardToken = magic; } // **** Views **** function getName() external override pure returns (string memory) { return "StrategySushiMagicEthLp"; } }
[{"inputs":[{"internalType":"address","name":"_governance","type":"address"},{"internalType":"address","name":"_strategist","type":"address"},{"internalType":"address","name":"_controller","type":"address"},{"internalType":"address","name":"_timelock","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balanceOfPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"balanceOfWant","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"controller","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"execute","outputs":[{"internalType":"bytes","name":"response","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getHarvestable","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"harvesters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"keepMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"keepReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"keepSUSHI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"magic","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"miniChef","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"performanceDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"performanceDevMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"performanceTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"performanceTreasuryMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_harvesters","type":"address[]"}],"name":"revokeHarvesters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_controller","type":"address"}],"name":"setController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_governance","type":"address"}],"name":"setGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_keepReward","type":"uint256"}],"name":"setKeepReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_keepSUSHI","type":"uint256"}],"name":"setKeepSUSHI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_performanceDevFee","type":"uint256"}],"name":"setPerformanceDevFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_performanceTreasuryFee","type":"uint256"}],"name":"setPerformanceTreasuryFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardToken","type":"address"}],"name":"setRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_strategist","type":"address"}],"name":"setStrategist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_timelock","type":"address"}],"name":"setTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_withdrawalDevFundFee","type":"uint256"}],"name":"setWithdrawalDevFundFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_withdrawalTreasuryFee","type":"uint256"}],"name":"setWithdrawalTreasuryFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"strategist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sushi","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sushiRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sushi_magic_eth_lp","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sushi_magic_eth_poolId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timelock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"want","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_harvesters","type":"address[]"}],"name":"whitelistHarvesters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_asset","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawForSwap","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawalDevFundFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawalDevFundMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawalTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawalTreasuryMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405260008055600060015560006002556000600355731b02da8cb0d097eb8d57a175b88c7d8b47997506600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506107d0600e556107d0600f55600d60115573b7e50106a5bd3cf21af210a755f9c8740890a8c9601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073539bde0d7dbd336b79148aa742883198bbf60342601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200013457600080fd5b50604051620062843803806200628483398181016040528101906200015a919062000547565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167382af49447d8a07e3bd95bd0d56f35241523fbab1601154601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16878787878484848484600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415620001fc57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156200023757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156200027257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620002ad57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620002e857600080fd5b84600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050508560108190555087600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505062000601565b6000815190506200054181620005e7565b92915050565b600080600080608085870312156200055e57600080fd5b60006200056e8782880162000530565b9450506020620005818782880162000530565b9350506040620005948782880162000530565b9250506060620005a78782880162000530565b91505092959194509250565b6000620005c082620005c7565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b620005f281620005b3565b8114620005fe57600080fd5b50565b615c7380620006116000396000f3fe6080604052600436106102ff5760003560e01c8063665b815511610190578063bdacb303116100dc578063ce01a11711610095578063d33219b41161006f578063d33219b414610b0c578063ebb55a6814610b37578063f77c479114610b62578063fe1f8f7a14610b8d576102ff565b8063ce01a11714610a9f578063d0e30db014610aca578063d21220a714610ae1576102ff565b8063bdacb30314610991578063c1a3d44c146109ba578063c39d4334146109e5578063c6223e2614610a10578063c65e324214610a4d578063c7b9d53014610a76576102ff565b806388993f221161014957806392eefe9b1161012357806392eefe9b146108ed578063ab033ea914610916578063ab73e4331461093f578063b1f55bd414610968576102ff565b806388993f221461086e5780638aee8127146108995780638ccdbb70146108c2576102ff565b8063665b81551461075c5780636d13582c14610787578063722713f7146107b257806382378594146107dd578063853828b6146108065780638797658314610831576102ff565b80632e1a7d4d1161024f5780634c2798ad1161020857806351f3d0b8116101e257806351f3d0b8146106b257806359274a04146106dd57806359739ec4146107065780635aa6e67514610731576102ff565b80634c2798ad146106215780634fe809cc1461064a57806351cff8d914610675576102ff565b80632e1a7d4d146105355780633e0dc34e1461055e5780633fc8cef3146105895780634005760a146105b45780634641257d146105df578063479119be146105f6576102ff565b806311588086116102bc5780631f1fcd51116102965780631f1fcd511461048b5780631fe4a686146104b6578063249fb9b4146104e157806326e886c61461050a576102ff565b8063115880861461040557806317d7de7c146104305780631cff79cd1461045b576102ff565b80630547104d146103045780630975d8d8146103305780630a0879031461035b5780630d854646146103865780630dfe1681146103b15780630e364fb6146103dc575b600080fd5b34801561031057600080fd5b50610319610bb8565b604051610327929190615974565b60405180910390f35b34801561033c57600080fd5b50610345610dce565b604051610352919061589f565b60405180910390f35b34801561036757600080fd5b50610370610dd4565b60405161037d91906155d5565b60405180910390f35b34801561039257600080fd5b5061039b610dec565b6040516103a891906155d5565b60405180910390f35b3480156103bd57600080fd5b506103c6610e12565b6040516103d391906155d5565b60405180910390f35b3480156103e857600080fd5b5061040360048036038101906103fe9190614e9e565b610e38565b005b34801561041157600080fd5b5061041a61100f565b604051610427919061589f565b60405180910390f35b34801561043c57600080fd5b506104456110bc565b60405161045291906156fd565b60405180910390f35b61047560048036038101906104709190614e4a565b6110f9565b60405161048291906156db565b60405180910390f35b34801561049757600080fd5b506104a061124b565b6040516104ad91906155d5565b60405180910390f35b3480156104c257600080fd5b506104cb611271565b6040516104d891906155d5565b60405180910390f35b3480156104ed57600080fd5b506105086004803603810190610503919061500b565b611297565b005b34801561051657600080fd5b5061051f611331565b60405161052c919061589f565b60405180910390f35b34801561054157600080fd5b5061055c6004803603810190610557919061500b565b611337565b005b34801561056a57600080fd5b5061057361189e565b604051610580919061589f565b60405180910390f35b34801561059557600080fd5b5061059e6118a4565b6040516105ab91906155d5565b60405180910390f35b3480156105c057600080fd5b506105c96118bc565b6040516105d691906155d5565b60405180910390f35b3480156105eb57600080fd5b506105f46118d4565b005b34801561060257600080fd5b5061060b6128e5565b604051610618919061589f565b60405180910390f35b34801561062d57600080fd5b506106486004803603810190610643919061500b565b6128ec565b005b34801561065657600080fd5b5061065f612986565b60405161066c919061589f565b60405180910390f35b34801561068157600080fd5b5061069c60048036038101906106979190614fb9565b61298c565b6040516106a9919061589f565b60405180910390f35b3480156106be57600080fd5b506106c7612b8c565b6040516106d4919061589f565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff919061500b565b612b92565b005b34801561071257600080fd5b5061071b612c2c565b604051610728919061589f565b60405180910390f35b34801561073d57600080fd5b50610746612c32565b60405161075391906155d5565b60405180910390f35b34801561076857600080fd5b50610771612c58565b60405161077e919061589f565b60405180910390f35b34801561079357600080fd5b5061079c612c5e565b6040516107a991906155d5565b60405180910390f35b3480156107be57600080fd5b506107c7612c84565b6040516107d4919061589f565b60405180910390f35b3480156107e957600080fd5b5061080460048036038101906107ff919061500b565b612cac565b005b34801561081257600080fd5b5061081b612d46565b604051610828919061589f565b60405180910390f35b34801561083d57600080fd5b5061085860048036038101906108539190614df8565b61301f565b60405161086591906156c0565b60405180910390f35b34801561087a57600080fd5b5061088361303f565b604051610890919061589f565b60405180910390f35b3480156108a557600080fd5b506108c060048036038101906108bb9190614df8565b613045565b005b3480156108ce57600080fd5b506108d7613171565b6040516108e4919061589f565b60405180910390f35b3480156108f957600080fd5b50610914600480360381019061090f9190614df8565b613177565b005b34801561092257600080fd5b5061093d60048036038101906109389190614df8565b61324b565b005b34801561094b57600080fd5b506109666004803603810190610961919061500b565b61331f565b005b34801561097457600080fd5b5061098f600480360381019061098a9190614e9e565b6133b9565b005b34801561099d57600080fd5b506109b860048036038101906109b39190614df8565b61353c565b005b3480156109c657600080fd5b506109cf613610565b6040516109dc919061589f565b60405180910390f35b3480156109f157600080fd5b506109fa6136c2565b604051610a07919061589f565b60405180910390f35b348015610a1c57600080fd5b50610a376004803603810190610a32919061500b565b6136c8565b604051610a44919061589f565b60405180910390f35b348015610a5957600080fd5b50610a746004803603810190610a6f919061500b565b6139a5565b005b348015610a8257600080fd5b50610a9d6004803603810190610a989190614df8565b613a3f565b005b348015610aab57600080fd5b50610ab4613b13565b604051610ac191906155d5565b60405180910390f35b348015610ad657600080fd5b50610adf613b39565b005b348015610aed57600080fd5b50610af6613d3d565b604051610b0391906155d5565b60405180910390f35b348015610b1857600080fd5b50610b21613d63565b604051610b2e91906155d5565b60405180910390f35b348015610b4357600080fd5b50610b4c613d89565b604051610b59919061589f565b60405180910390f35b348015610b6e57600080fd5b50610b77613d8f565b604051610b8491906155d5565b60405180910390f35b348015610b9957600080fd5b50610ba2613db5565b604051610baf919061589f565b60405180910390f35b600080600073f4d73326c13a4fc5fd7a064217e12780e9bd62c373ffffffffffffffffffffffffffffffffffffffff1663195426ec601054306040518363ffffffff1660e01b8152600401610c0e9291906158ba565b60206040518083038186803b158015610c2657600080fd5b505afa158015610c3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5e9190615034565b9050600073f4d73326c13a4fc5fd7a064217e12780e9bd62c373ffffffffffffffffffffffffffffffffffffffff1663c346253d6010546040518263ffffffff1660e01b8152600401610cb1919061589f565b60206040518083038186803b158015610cc957600080fd5b505afa158015610cdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d019190614fe2565b905060608173ffffffffffffffffffffffffffffffffffffffff1663d63b3c496010543060006040518463ffffffff1660e01b8152600401610d45939291906158e3565b60006040518083038186803b158015610d5d57600080fd5b505afa158015610d71573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610d9a9190614ee3565b91505060008082511115610dc05781600081518110610db557fe5b602002602001015190505b838195509550505050509091565b61271081565b73d4d42f0b6def4ce0383636770ef773390d85c61a81565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ee15750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610f355750600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6b906157bf565b60405180910390fd5b60008090505b8282905081101561100a576001600a6000858585818110610f9757fe5b9050602002016020810190610fac9190614df8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050610f7a565b505050565b60008073f4d73326c13a4fc5fd7a064217e12780e9bd62c373ffffffffffffffffffffffffffffffffffffffff166393f1a40b601054306040518363ffffffff1660e01b81526004016110639291906158ba565b604080518083038186803b15801561107a57600080fd5b505afa15801561108e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b2919061505d565b5090508091505090565b60606040518060400160405280601781526020017f537472617465677953757368694d616769634574684c70000000000000000000815250905090565b6060600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461118b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111829061585f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f29061573f565b60405180910390fd5b600080835160208501866113885a03f43d6040519250601f19601f6020830101168301604052808352806000602085013e81156001811461123b57611242565b8160208501fd5b50505092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131e9061585f565b60405180910390fd5b8060008190555050565b61271081565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113be9061575f565b60405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161142491906155d5565b60206040518083038186803b15801561143c57600080fd5b505afa158015611450573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114749190615034565b9050818110156114b1576114996114948284613dbc90919063ffffffff16565b613e06565b91506114ae8183613e9590919063ffffffff16565b91505b60006114dd620186a06114cf60035486613eea90919063ffffffff16565b613f5a90919063ffffffff16565b90506115cb600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d8f1e676040518163ffffffff1660e01b815260040160206040518083038186803b15801561154a57600080fd5b505afa15801561155e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115829190614e21565b82600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613fa49092919063ffffffff16565b60006115f7620186a06115e960025487613eea90919063ffffffff16565b613f5a90919063ffffffff16565b90506116e5600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b15801561166457600080fd5b505afa158015611678573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169c9190614e21565b82600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613fa49092919063ffffffff16565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca6a48c2600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161176491906155d5565b60206040518083038186803b15801561177c57600080fd5b505afa158015611790573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b49190614e21565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181d906157ff565b60405180910390fd5b6118978161184f84611841878a613dbc90919063ffffffff16565b613dbc90919063ffffffff16565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613fa49092919063ffffffff16565b5050505050565b60105481565b7382af49447d8a07e3bd95bd0d56f35241523fbab181565b73f4d73326c13a4fc5fd7a064217e12780e9bd62c381565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806119795750600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806119d15750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6119da57600080fd5b73f4d73326c13a4fc5fd7a064217e12780e9bd62c373ffffffffffffffffffffffffffffffffffffffff166318fccc76601054306040518363ffffffff1660e01b8152600401611a2b9291906158ba565b600060405180830381600087803b158015611a4557600080fd5b505af1158015611a59573d6000803e3d6000fd5b50505050600073d4d42f0b6def4ce0383636770ef773390d85c61a73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611aac91906155d5565b60206040518083038186803b158015611ac457600080fd5b505afa158015611ad8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afc9190615034565b90506000811115611c59576000611b32612710611b24600e5485613eea90919063ffffffff16565b613f5a90919063ffffffff16565b9050611c12600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b158015611b9f57600080fd5b505afa158015611bb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd79190614e21565b8273d4d42f0b6def4ce0383636770ef773390d85c61a73ffffffffffffffffffffffffffffffffffffffff16613fa49092919063ffffffff16565b611c5773d4d42f0b6def4ce0383636770ef773390d85c61a7382af49447d8a07e3bd95bd0d56f35241523fbab1611c528486613dbc90919063ffffffff16565b61402a565b505b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ed7576000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d0c91906155d5565b60206040518083038186803b158015611d2457600080fd5b505afa158015611d38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5c9190615034565b90506000811115611ed5576000611d92612710611d84600f5485613eea90919063ffffffff16565b613f5a90919063ffffffff16565b9050611e80600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b158015611dff57600080fd5b505afa158015611e13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e379190614e21565b82600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613fa49092919063ffffffff16565b611ed3600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167382af49447d8a07e3bd95bd0d56f35241523fbab1611ece8486613dbc90919063ffffffff16565b61402a565b505b505b60007382af49447d8a07e3bd95bd0d56f35241523fbab173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611f2691906155d5565b60206040518083038186803b158015611f3e57600080fd5b505afa158015611f52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f769190615034565b9050600081118015611fea57507382af49447d8a07e3bd95bd0d56f35241523fbab173ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612044576120437382af49447d8a07e3bd95bd0d56f35241523fbab1600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661203e600285613f5a90919063ffffffff16565b61402a565b5b6000811180156120b657507382af49447d8a07e3bd95bd0d56f35241523fbab173ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156121105761210f7382af49447d8a07e3bd95bd0d56f35241523fbab1600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661210a600285613f5a90919063ffffffff16565b61402a565b5b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161216d91906155d5565b60206040518083038186803b15801561218557600080fd5b505afa158015612199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bd9190615034565b90506000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161221c91906155d5565b60206040518083038186803b15801561223457600080fd5b505afa158015612248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226c9190615034565b905060008211801561227e5750600081115b156128d7576122f3600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661447e9092919063ffffffff16565b612362600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661447e9092919063ffffffff16565b6123d2600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661447e9092919063ffffffff16565b612441600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661447e9092919063ffffffff16565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e33700600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16858560008030603c42016040518963ffffffff1660e01b81526004016124f2989796959493929190615619565b606060405180830381600087803b15801561250c57600080fd5b505af1158015612520573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125449190615099565b505050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b1580156125ed57600080fd5b505afa158015612601573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126259190614e21565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161268091906155d5565b60206040518083038186803b15801561269857600080fd5b505afa1580156126ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d09190615034565b6040518363ffffffff1660e01b81526004016126ed929190615697565b602060405180830381600087803b15801561270757600080fd5b505af115801561271b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273f9190614f90565b506128d6600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b1580156127ab57600080fd5b505afa1580156127bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e39190614e21565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161283e91906155d5565b60206040518083038186803b15801561285657600080fd5b505afa15801561286a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288e9190615034565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613fa49092919063ffffffff16565b5b6128df6145dc565b50505050565b620186a081565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461297c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129739061585f565b60405180910390fd5b80600f8190555050565b61271081565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a159061575f565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa69061579f565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612ae891906155d5565b60206040518083038186803b158015612b0057600080fd5b505afa158015612b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b389190615034565b9050612b87600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff16613fa49092919063ffffffff16565b919050565b60035481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c199061585f565b60405180910390fd5b80600e8190555050565b60005481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612ca7612c9161100f565b612c99613610565b613e9590919063ffffffff16565b905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d339061585f565b60405180910390fd5b8060028190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dcf9061575f565b60405180910390fd5b612de06148c8565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612e3b91906155d5565b60206040518083038186803b158015612e5357600080fd5b505afa158015612e67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e8b9190615034565b90506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca6a48c2600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401612f0c91906155d5565b60206040518083038186803b158015612f2457600080fd5b505afa158015612f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5c9190614e21565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc5906157ff565b60405180910390fd5b61301b8183600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613fa49092919063ffffffff16565b5090565b600a6020528060005260406000206000915054906101000a900460ff1681565b60015481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806130ee5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61312d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131249061585f565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60025481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131fe9061585f565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d29061571f565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146133af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a69061585f565b60405180910390fd5b8060038190555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806134625750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6134a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613498906157bf565b60405180910390fd5b60008090505b82829050811015613537576000600a60008585858181106134c457fe5b90506020020160208101906134d99190614df8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806001019150506134a7565b505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146135cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135c39061585f565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161366d91906155d5565b60206040518083038186803b15801561368557600080fd5b505afa158015613699573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136bd9190615034565b905090565b600f5481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461375a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137519061575f565b60405180910390fd5b61376382613e06565b50600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016137bf91906155d5565b60206040518083038186803b1580156137d757600080fd5b505afa1580156137eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061380f9190615034565b90506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca6a48c2600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161389091906155d5565b60206040518083038186803b1580156138a857600080fd5b505afa1580156138bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138e09190614e21565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613952576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613949906157ff565b60405180910390fd5b61399f8183600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613fa49092919063ffffffff16565b50919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a2c9061585f565b60405180910390fd5b8060018190555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ac69061571f565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613b9691906155d5565b60206040518083038186803b158015613bae57600080fd5b505afa158015613bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613be69190615034565b90506000811115613d3a57613c5373f4d73326c13a4fc5fd7a064217e12780e9bd62c36000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661447e9092919063ffffffff16565b613cb473f4d73326c13a4fc5fd7a064217e12780e9bd62c382600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661447e9092919063ffffffff16565b73f4d73326c13a4fc5fd7a064217e12780e9bd62c373ffffffffffffffffffffffffffffffffffffffff16638dbdbe6d60105483306040518463ffffffff1660e01b8152600401613d079392919061599d565b600060405180830381600087803b158015613d2157600080fd5b505af1158015613d35573d6000803e3d6000fd5b505050505b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b620186a081565b6000613dfe83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506148db565b905092915050565b600073f4d73326c13a4fc5fd7a064217e12780e9bd62c373ffffffffffffffffffffffffffffffffffffffff16630ad58d2f60105484306040518463ffffffff1660e01b8152600401613e5b9392919061599d565b600060405180830381600087803b158015613e7557600080fd5b505af1158015613e89573d6000803e3d6000fd5b50505050819050919050565b600080828401905083811015613ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ed79061577f565b60405180910390fd5b8091505092915050565b600080831415613efd5760009050613f54565b6000828402905082848281613f0e57fe5b0414613f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f46906157df565b60405180910390fd5b809150505b92915050565b6000613f9c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614936565b905092915050565b6140258363a9059cbb60e01b8484604051602401613fc3929190615697565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050614997565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561406457600080fd5b60607382af49447d8a07e3bd95bd0d56f35241523fbab173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806140f357507382af49447d8a07e3bd95bd0d56f35241523fbab173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156141d757600267ffffffffffffffff8111801561411057600080fd5b5060405190808252806020026020018201604052801561413f5781602001602082028036833780820191505090505b509050838160008151811061415057fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050828160018151811061419857fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061430e565b600367ffffffffffffffff811180156141ef57600080fd5b5060405190808252806020026020018201604052801561421e5781602001602082028036833780820191505090505b509050838160008151811061422f57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507382af49447d8a07e3bd95bd0d56f35241523fbab18160018151811061428b57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505082816002815181106142d357fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b61435c600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660008673ffffffffffffffffffffffffffffffffffffffff1661447e9092919063ffffffff16565b6143a9600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838673ffffffffffffffffffffffffffffffffffffffff1661447e9092919063ffffffff16565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338ed17398360008430614400603c42613e9590919063ffffffff16565b6040518663ffffffff1660e01b815260040161442095949392919061591a565b600060405180830381600087803b15801561443a57600080fd5b505af115801561444e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906144779190614f4f565b5050505050565b6000811480614517575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b81526004016144c59291906155f0565b60206040518083038186803b1580156144dd57600080fd5b505afa1580156144f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145159190615034565b145b614556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161454d9061587f565b60405180910390fd5b6145d78363095ea7b360e01b8484604051602401614575929190615697565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050614997565b505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161463991906155d5565b60206040518083038186803b15801561465157600080fd5b505afa158015614665573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146899190615034565b905060008111156148c5576147a8600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b1580156146ff57600080fd5b505afa158015614713573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147379190614e21565b61476061271061475260005486613eea90919063ffffffff16565b613f5a90919063ffffffff16565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613fa49092919063ffffffff16565b6148bc600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d8f1e676040518163ffffffff1660e01b815260040160206040518083038186803b15801561481357600080fd5b505afa158015614827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061484b9190614e21565b61487461271061486660015486613eea90919063ffffffff16565b613f5a90919063ffffffff16565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613fa49092919063ffffffff16565b6148c4613b39565b5b50565b6148d86148d361100f565b613e06565b50565b6000838311158290614923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161491a91906156fd565b60405180910390fd5b5060008385039050809150509392505050565b6000808311829061497d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161497491906156fd565b60405180910390fd5b50600083858161498957fe5b049050809150509392505050565b60606149f9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16614a5e9092919063ffffffff16565b9050600081511115614a595780806020019051810190614a199190614f90565b614a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614a4f9061583f565b60405180910390fd5b5b505050565b6060614a6d8484600085614a76565b90509392505050565b6060614a8185614b99565b614ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614ab79061581f565b60405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff168587604051614aea91906155be565b60006040518083038185875af1925050503d8060008114614b27576040519150601f19603f3d011682016040523d82523d6000602084013e614b2c565b606091505b50915091508115614b41578092505050614b91565b600081511115614b545780518082602001fd5b836040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614b8891906156fd565b60405180910390fd5b949350505050565b600080823b905060008111915050919050565b600081359050614bbb81615bca565b92915050565b600081519050614bd081615bca565b92915050565b60008083601f840112614be857600080fd5b8235905067ffffffffffffffff811115614c0157600080fd5b602083019150836020820283011115614c1957600080fd5b9250929050565b600082601f830112614c3157600080fd5b8151614c44614c3f82615a01565b6159d4565b91508181835260208401935060208101905083856020840282011115614c6957600080fd5b60005b83811015614c995781614c7f8882614da4565b845260208401935060208301925050600181019050614c6c565b5050505092915050565b600082601f830112614cb457600080fd5b8151614cc7614cc282615a29565b6159d4565b91508181835260208401935060208101905083856020840282011115614cec57600080fd5b60005b83811015614d1c5781614d028882614de3565b845260208401935060208301925050600181019050614cef565b5050505092915050565b600081519050614d3581615be1565b92915050565b600082601f830112614d4c57600080fd5b8135614d5f614d5a82615a51565b6159d4565b91508082526020830160208301858383011115614d7b57600080fd5b614d86838284615b77565b50505092915050565b600081359050614d9e81615bf8565b92915050565b600081519050614db381615bf8565b92915050565b600081519050614dc881615c0f565b92915050565b600081359050614ddd81615c26565b92915050565b600081519050614df281615c26565b92915050565b600060208284031215614e0a57600080fd5b6000614e1884828501614bac565b91505092915050565b600060208284031215614e3357600080fd5b6000614e4184828501614bc1565b91505092915050565b60008060408385031215614e5d57600080fd5b6000614e6b85828601614bac565b925050602083013567ffffffffffffffff811115614e8857600080fd5b614e9485828601614d3b565b9150509250929050565b60008060208385031215614eb157600080fd5b600083013567ffffffffffffffff811115614ecb57600080fd5b614ed785828601614bd6565b92509250509250929050565b60008060408385031215614ef657600080fd5b600083015167ffffffffffffffff811115614f1057600080fd5b614f1c85828601614c20565b925050602083015167ffffffffffffffff811115614f3957600080fd5b614f4585828601614ca3565b9150509250929050565b600060208284031215614f6157600080fd5b600082015167ffffffffffffffff811115614f7b57600080fd5b614f8784828501614ca3565b91505092915050565b600060208284031215614fa257600080fd5b6000614fb084828501614d26565b91505092915050565b600060208284031215614fcb57600080fd5b6000614fd984828501614d8f565b91505092915050565b600060208284031215614ff457600080fd5b600061500284828501614db9565b91505092915050565b60006020828403121561501d57600080fd5b600061502b84828501614dce565b91505092915050565b60006020828403121561504657600080fd5b600061505484828501614de3565b91505092915050565b6000806040838503121561507057600080fd5b600061507e85828601614de3565b925050602061508f85828601614de3565b9150509250929050565b6000806000606084860312156150ae57600080fd5b60006150bc86828701614de3565b93505060206150cd86828701614de3565b92505060406150de86828701614de3565b9150509250925092565b60006150f48383615100565b60208301905092915050565b61510981615af9565b82525050565b61511881615af9565b82525050565b600061512982615a8d565b6151338185615abb565b935061513e83615a7d565b8060005b8381101561516f57815161515688826150e8565b975061516183615aae565b925050600181019050615142565b5085935050505092915050565b61518581615b0b565b82525050565b600061519682615a98565b6151a08185615acc565b93506151b0818560208601615b86565b6151b981615bb9565b840191505092915050565b60006151cf82615a98565b6151d98185615add565b93506151e9818560208601615b86565b80840191505092915050565b6151fe81615b65565b82525050565b600061520f82615aa3565b6152198185615ae8565b9350615229818560208601615b86565b61523281615bb9565b840191505092915050565b600061524a600b83615ae8565b91507f21676f7665726e616e63650000000000000000000000000000000000000000006000830152602082019050919050565b600061528a600783615ae8565b91507f21746172676574000000000000000000000000000000000000000000000000006000830152602082019050919050565b60006152ca600b83615ae8565b91507f21636f6e74726f6c6c65720000000000000000000000000000000000000000006000830152602082019050919050565b600061530a601b83615ae8565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b600061534a600483615ae8565b91507f77616e74000000000000000000000000000000000000000000000000000000006000830152602082019050919050565b600061538a600e83615ae8565b91507f6e6f7420617574686f72697a65640000000000000000000000000000000000006000830152602082019050919050565b60006153ca602183615ae8565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000615430600483615ae8565b91507f216a6172000000000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000615470601d83615ae8565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b60006154b0602a83615ae8565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000615516600983615ae8565b91507f2174696d656c6f636b00000000000000000000000000000000000000000000006000830152602082019050919050565b6000615556603683615ae8565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b6155b881615b5b565b82525050565b60006155ca82846151c4565b915081905092915050565b60006020820190506155ea600083018461510f565b92915050565b6000604082019050615605600083018561510f565b615612602083018461510f565b9392505050565b60006101008201905061562f600083018b61510f565b61563c602083018a61510f565b61564960408301896155af565b61565660608301886155af565b61566360808301876151f5565b61567060a08301866151f5565b61567d60c083018561510f565b61568a60e08301846155af565b9998505050505050505050565b60006040820190506156ac600083018561510f565b6156b960208301846155af565b9392505050565b60006020820190506156d5600083018461517c565b92915050565b600060208201905081810360008301526156f5818461518b565b905092915050565b600060208201905081810360008301526157178184615204565b905092915050565b600060208201905081810360008301526157388161523d565b9050919050565b600060208201905081810360008301526157588161527d565b9050919050565b60006020820190508181036000830152615778816152bd565b9050919050565b60006020820190508181036000830152615798816152fd565b9050919050565b600060208201905081810360008301526157b88161533d565b9050919050565b600060208201905081810360008301526157d88161537d565b9050919050565b600060208201905081810360008301526157f8816153bd565b9050919050565b6000602082019050818103600083015261581881615423565b9050919050565b6000602082019050818103600083015261583881615463565b9050919050565b60006020820190508181036000830152615858816154a3565b9050919050565b6000602082019050818103600083015261587881615509565b9050919050565b6000602082019050818103600083015261589881615549565b9050919050565b60006020820190506158b460008301846155af565b92915050565b60006040820190506158cf60008301856155af565b6158dc602083018461510f565b9392505050565b60006060820190506158f860008301866155af565b615905602083018561510f565b61591260408301846151f5565b949350505050565b600060a08201905061592f60008301886155af565b61593c60208301876151f5565b818103604083015261594e818661511e565b905061595d606083018561510f565b61596a60808301846155af565b9695505050505050565b600060408201905061598960008301856155af565b61599660208301846155af565b9392505050565b60006060820190506159b260008301866155af565b6159bf60208301856155af565b6159cc604083018461510f565b949350505050565b6000604051905081810181811067ffffffffffffffff821117156159f757600080fd5b8060405250919050565b600067ffffffffffffffff821115615a1857600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115615a4057600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115615a6857600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000615b0482615b3b565b9050919050565b60008115159050919050565b6000615b2282615af9565b9050919050565b6000615b3482615af9565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000615b7082615b5b565b9050919050565b82818337600083830152505050565b60005b83811015615ba4578082015181840152602081019050615b89565b83811115615bb3576000848401525b50505050565b6000601f19601f8301169050919050565b615bd381615af9565b8114615bde57600080fd5b50565b615bea81615b0b565b8114615bf557600080fd5b50565b615c0181615b17565b8114615c0c57600080fd5b50565b615c1881615b29565b8114615c2357600080fd5b50565b615c2f81615b5b565b8114615c3a57600080fd5b5056fea26469706673582212206e16a9a9dc30e823d7385529fd3b96b2986dc8e776329908de371496883ec29764736f6c63430006070033000000000000000000000000f02ceb58d549e4b403e8f85fbbaee4c5dfa47c01000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c00000000000000000000000055d5bcef2bfd4921b8790525ff87919c2e26bd03000000000000000000000000f02ceb58d549e4b403e8f85fbbaee4c5dfa47c01
Deployed Bytecode
0x6080604052600436106102ff5760003560e01c8063665b815511610190578063bdacb303116100dc578063ce01a11711610095578063d33219b41161006f578063d33219b414610b0c578063ebb55a6814610b37578063f77c479114610b62578063fe1f8f7a14610b8d576102ff565b8063ce01a11714610a9f578063d0e30db014610aca578063d21220a714610ae1576102ff565b8063bdacb30314610991578063c1a3d44c146109ba578063c39d4334146109e5578063c6223e2614610a10578063c65e324214610a4d578063c7b9d53014610a76576102ff565b806388993f221161014957806392eefe9b1161012357806392eefe9b146108ed578063ab033ea914610916578063ab73e4331461093f578063b1f55bd414610968576102ff565b806388993f221461086e5780638aee8127146108995780638ccdbb70146108c2576102ff565b8063665b81551461075c5780636d13582c14610787578063722713f7146107b257806382378594146107dd578063853828b6146108065780638797658314610831576102ff565b80632e1a7d4d1161024f5780634c2798ad1161020857806351f3d0b8116101e257806351f3d0b8146106b257806359274a04146106dd57806359739ec4146107065780635aa6e67514610731576102ff565b80634c2798ad146106215780634fe809cc1461064a57806351cff8d914610675576102ff565b80632e1a7d4d146105355780633e0dc34e1461055e5780633fc8cef3146105895780634005760a146105b45780634641257d146105df578063479119be146105f6576102ff565b806311588086116102bc5780631f1fcd51116102965780631f1fcd511461048b5780631fe4a686146104b6578063249fb9b4146104e157806326e886c61461050a576102ff565b8063115880861461040557806317d7de7c146104305780631cff79cd1461045b576102ff565b80630547104d146103045780630975d8d8146103305780630a0879031461035b5780630d854646146103865780630dfe1681146103b15780630e364fb6146103dc575b600080fd5b34801561031057600080fd5b50610319610bb8565b604051610327929190615974565b60405180910390f35b34801561033c57600080fd5b50610345610dce565b604051610352919061589f565b60405180910390f35b34801561036757600080fd5b50610370610dd4565b60405161037d91906155d5565b60405180910390f35b34801561039257600080fd5b5061039b610dec565b6040516103a891906155d5565b60405180910390f35b3480156103bd57600080fd5b506103c6610e12565b6040516103d391906155d5565b60405180910390f35b3480156103e857600080fd5b5061040360048036038101906103fe9190614e9e565b610e38565b005b34801561041157600080fd5b5061041a61100f565b604051610427919061589f565b60405180910390f35b34801561043c57600080fd5b506104456110bc565b60405161045291906156fd565b60405180910390f35b61047560048036038101906104709190614e4a565b6110f9565b60405161048291906156db565b60405180910390f35b34801561049757600080fd5b506104a061124b565b6040516104ad91906155d5565b60405180910390f35b3480156104c257600080fd5b506104cb611271565b6040516104d891906155d5565b60405180910390f35b3480156104ed57600080fd5b506105086004803603810190610503919061500b565b611297565b005b34801561051657600080fd5b5061051f611331565b60405161052c919061589f565b60405180910390f35b34801561054157600080fd5b5061055c6004803603810190610557919061500b565b611337565b005b34801561056a57600080fd5b5061057361189e565b604051610580919061589f565b60405180910390f35b34801561059557600080fd5b5061059e6118a4565b6040516105ab91906155d5565b60405180910390f35b3480156105c057600080fd5b506105c96118bc565b6040516105d691906155d5565b60405180910390f35b3480156105eb57600080fd5b506105f46118d4565b005b34801561060257600080fd5b5061060b6128e5565b604051610618919061589f565b60405180910390f35b34801561062d57600080fd5b506106486004803603810190610643919061500b565b6128ec565b005b34801561065657600080fd5b5061065f612986565b60405161066c919061589f565b60405180910390f35b34801561068157600080fd5b5061069c60048036038101906106979190614fb9565b61298c565b6040516106a9919061589f565b60405180910390f35b3480156106be57600080fd5b506106c7612b8c565b6040516106d4919061589f565b60405180910390f35b3480156106e957600080fd5b5061070460048036038101906106ff919061500b565b612b92565b005b34801561071257600080fd5b5061071b612c2c565b604051610728919061589f565b60405180910390f35b34801561073d57600080fd5b50610746612c32565b60405161075391906155d5565b60405180910390f35b34801561076857600080fd5b50610771612c58565b60405161077e919061589f565b60405180910390f35b34801561079357600080fd5b5061079c612c5e565b6040516107a991906155d5565b60405180910390f35b3480156107be57600080fd5b506107c7612c84565b6040516107d4919061589f565b60405180910390f35b3480156107e957600080fd5b5061080460048036038101906107ff919061500b565b612cac565b005b34801561081257600080fd5b5061081b612d46565b604051610828919061589f565b60405180910390f35b34801561083d57600080fd5b5061085860048036038101906108539190614df8565b61301f565b60405161086591906156c0565b60405180910390f35b34801561087a57600080fd5b5061088361303f565b604051610890919061589f565b60405180910390f35b3480156108a557600080fd5b506108c060048036038101906108bb9190614df8565b613045565b005b3480156108ce57600080fd5b506108d7613171565b6040516108e4919061589f565b60405180910390f35b3480156108f957600080fd5b50610914600480360381019061090f9190614df8565b613177565b005b34801561092257600080fd5b5061093d60048036038101906109389190614df8565b61324b565b005b34801561094b57600080fd5b506109666004803603810190610961919061500b565b61331f565b005b34801561097457600080fd5b5061098f600480360381019061098a9190614e9e565b6133b9565b005b34801561099d57600080fd5b506109b860048036038101906109b39190614df8565b61353c565b005b3480156109c657600080fd5b506109cf613610565b6040516109dc919061589f565b60405180910390f35b3480156109f157600080fd5b506109fa6136c2565b604051610a07919061589f565b60405180910390f35b348015610a1c57600080fd5b50610a376004803603810190610a32919061500b565b6136c8565b604051610a44919061589f565b60405180910390f35b348015610a5957600080fd5b50610a746004803603810190610a6f919061500b565b6139a5565b005b348015610a8257600080fd5b50610a9d6004803603810190610a989190614df8565b613a3f565b005b348015610aab57600080fd5b50610ab4613b13565b604051610ac191906155d5565b60405180910390f35b348015610ad657600080fd5b50610adf613b39565b005b348015610aed57600080fd5b50610af6613d3d565b604051610b0391906155d5565b60405180910390f35b348015610b1857600080fd5b50610b21613d63565b604051610b2e91906155d5565b60405180910390f35b348015610b4357600080fd5b50610b4c613d89565b604051610b59919061589f565b60405180910390f35b348015610b6e57600080fd5b50610b77613d8f565b604051610b8491906155d5565b60405180910390f35b348015610b9957600080fd5b50610ba2613db5565b604051610baf919061589f565b60405180910390f35b600080600073f4d73326c13a4fc5fd7a064217e12780e9bd62c373ffffffffffffffffffffffffffffffffffffffff1663195426ec601054306040518363ffffffff1660e01b8152600401610c0e9291906158ba565b60206040518083038186803b158015610c2657600080fd5b505afa158015610c3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5e9190615034565b9050600073f4d73326c13a4fc5fd7a064217e12780e9bd62c373ffffffffffffffffffffffffffffffffffffffff1663c346253d6010546040518263ffffffff1660e01b8152600401610cb1919061589f565b60206040518083038186803b158015610cc957600080fd5b505afa158015610cdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d019190614fe2565b905060608173ffffffffffffffffffffffffffffffffffffffff1663d63b3c496010543060006040518463ffffffff1660e01b8152600401610d45939291906158e3565b60006040518083038186803b158015610d5d57600080fd5b505afa158015610d71573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610d9a9190614ee3565b91505060008082511115610dc05781600081518110610db557fe5b602002602001015190505b838195509550505050509091565b61271081565b73d4d42f0b6def4ce0383636770ef773390d85c61a81565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ee15750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610f355750600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6b906157bf565b60405180910390fd5b60008090505b8282905081101561100a576001600a6000858585818110610f9757fe5b9050602002016020810190610fac9190614df8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080600101915050610f7a565b505050565b60008073f4d73326c13a4fc5fd7a064217e12780e9bd62c373ffffffffffffffffffffffffffffffffffffffff166393f1a40b601054306040518363ffffffff1660e01b81526004016110639291906158ba565b604080518083038186803b15801561107a57600080fd5b505afa15801561108e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b2919061505d565b5090508091505090565b60606040518060400160405280601781526020017f537472617465677953757368694d616769634574684c70000000000000000000815250905090565b6060600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461118b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111829061585f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f29061573f565b60405180910390fd5b600080835160208501866113885a03f43d6040519250601f19601f6020830101168301604052808352806000602085013e81156001811461123b57611242565b8160208501fd5b50505092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131e9061585f565b60405180910390fd5b8060008190555050565b61271081565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113be9061575f565b60405180910390fd5b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161142491906155d5565b60206040518083038186803b15801561143c57600080fd5b505afa158015611450573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114749190615034565b9050818110156114b1576114996114948284613dbc90919063ffffffff16565b613e06565b91506114ae8183613e9590919063ffffffff16565b91505b60006114dd620186a06114cf60035486613eea90919063ffffffff16565b613f5a90919063ffffffff16565b90506115cb600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d8f1e676040518163ffffffff1660e01b815260040160206040518083038186803b15801561154a57600080fd5b505afa15801561155e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115829190614e21565b82600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613fa49092919063ffffffff16565b60006115f7620186a06115e960025487613eea90919063ffffffff16565b613f5a90919063ffffffff16565b90506116e5600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b15801561166457600080fd5b505afa158015611678573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169c9190614e21565b82600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613fa49092919063ffffffff16565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca6a48c2600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161176491906155d5565b60206040518083038186803b15801561177c57600080fd5b505afa158015611790573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b49190614e21565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181d906157ff565b60405180910390fd5b6118978161184f84611841878a613dbc90919063ffffffff16565b613dbc90919063ffffffff16565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613fa49092919063ffffffff16565b5050505050565b60105481565b7382af49447d8a07e3bd95bd0d56f35241523fbab181565b73f4d73326c13a4fc5fd7a064217e12780e9bd62c381565b600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806119795750600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806119d15750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6119da57600080fd5b73f4d73326c13a4fc5fd7a064217e12780e9bd62c373ffffffffffffffffffffffffffffffffffffffff166318fccc76601054306040518363ffffffff1660e01b8152600401611a2b9291906158ba565b600060405180830381600087803b158015611a4557600080fd5b505af1158015611a59573d6000803e3d6000fd5b50505050600073d4d42f0b6def4ce0383636770ef773390d85c61a73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611aac91906155d5565b60206040518083038186803b158015611ac457600080fd5b505afa158015611ad8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afc9190615034565b90506000811115611c59576000611b32612710611b24600e5485613eea90919063ffffffff16565b613f5a90919063ffffffff16565b9050611c12600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b158015611b9f57600080fd5b505afa158015611bb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd79190614e21565b8273d4d42f0b6def4ce0383636770ef773390d85c61a73ffffffffffffffffffffffffffffffffffffffff16613fa49092919063ffffffff16565b611c5773d4d42f0b6def4ce0383636770ef773390d85c61a7382af49447d8a07e3bd95bd0d56f35241523fbab1611c528486613dbc90919063ffffffff16565b61402a565b505b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ed7576000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d0c91906155d5565b60206040518083038186803b158015611d2457600080fd5b505afa158015611d38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5c9190615034565b90506000811115611ed5576000611d92612710611d84600f5485613eea90919063ffffffff16565b613f5a90919063ffffffff16565b9050611e80600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b158015611dff57600080fd5b505afa158015611e13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e379190614e21565b82600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613fa49092919063ffffffff16565b611ed3600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167382af49447d8a07e3bd95bd0d56f35241523fbab1611ece8486613dbc90919063ffffffff16565b61402a565b505b505b60007382af49447d8a07e3bd95bd0d56f35241523fbab173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611f2691906155d5565b60206040518083038186803b158015611f3e57600080fd5b505afa158015611f52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f769190615034565b9050600081118015611fea57507382af49447d8a07e3bd95bd0d56f35241523fbab173ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15612044576120437382af49447d8a07e3bd95bd0d56f35241523fbab1600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661203e600285613f5a90919063ffffffff16565b61402a565b5b6000811180156120b657507382af49447d8a07e3bd95bd0d56f35241523fbab173ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156121105761210f7382af49447d8a07e3bd95bd0d56f35241523fbab1600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661210a600285613f5a90919063ffffffff16565b61402a565b5b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161216d91906155d5565b60206040518083038186803b15801561218557600080fd5b505afa158015612199573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bd9190615034565b90506000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161221c91906155d5565b60206040518083038186803b15801561223457600080fd5b505afa158015612248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226c9190615034565b905060008211801561227e5750600081115b156128d7576122f3600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661447e9092919063ffffffff16565b612362600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661447e9092919063ffffffff16565b6123d2600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661447e9092919063ffffffff16565b612441600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661447e9092919063ffffffff16565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e33700600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16858560008030603c42016040518963ffffffff1660e01b81526004016124f2989796959493929190615619565b606060405180830381600087803b15801561250c57600080fd5b505af1158015612520573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125449190615099565b505050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b1580156125ed57600080fd5b505afa158015612601573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126259190614e21565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161268091906155d5565b60206040518083038186803b15801561269857600080fd5b505afa1580156126ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d09190615034565b6040518363ffffffff1660e01b81526004016126ed929190615697565b602060405180830381600087803b15801561270757600080fd5b505af115801561271b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273f9190614f90565b506128d6600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b1580156127ab57600080fd5b505afa1580156127bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e39190614e21565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161283e91906155d5565b60206040518083038186803b15801561285657600080fd5b505afa15801561286a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288e9190615034565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613fa49092919063ffffffff16565b5b6128df6145dc565b50505050565b620186a081565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461297c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129739061585f565b60405180910390fd5b80600f8190555050565b61271081565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a159061575f565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa69061579f565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612ae891906155d5565b60206040518083038186803b158015612b0057600080fd5b505afa158015612b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b389190615034565b9050612b87600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff16613fa49092919063ffffffff16565b919050565b60035481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c199061585f565b60405180910390fd5b80600e8190555050565b60005481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000612ca7612c9161100f565b612c99613610565b613e9590919063ffffffff16565b905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d339061585f565b60405180910390fd5b8060028190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612dd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dcf9061575f565b60405180910390fd5b612de06148c8565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612e3b91906155d5565b60206040518083038186803b158015612e5357600080fd5b505afa158015612e67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e8b9190615034565b90506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca6a48c2600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401612f0c91906155d5565b60206040518083038186803b158015612f2457600080fd5b505afa158015612f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5c9190614e21565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc5906157ff565b60405180910390fd5b61301b8183600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613fa49092919063ffffffff16565b5090565b600a6020528060005260406000206000915054906101000a900460ff1681565b60015481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806130ee5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61312d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131249061585f565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60025481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131fe9061585f565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146132db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d29061571f565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146133af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a69061585f565b60405180910390fd5b8060038190555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806134625750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6134a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613498906157bf565b60405180910390fd5b60008090505b82829050811015613537576000600a60008585858181106134c457fe5b90506020020160208101906134d99190614df8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806001019150506134a7565b505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146135cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135c39061585f565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161366d91906155d5565b60206040518083038186803b15801561368557600080fd5b505afa158015613699573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136bd9190615034565b905090565b600f5481565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461375a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137519061575f565b60405180910390fd5b61376382613e06565b50600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016137bf91906155d5565b60206040518083038186803b1580156137d757600080fd5b505afa1580156137eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061380f9190615034565b90506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ca6a48c2600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161389091906155d5565b60206040518083038186803b1580156138a857600080fd5b505afa1580156138bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138e09190614e21565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613952576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613949906157ff565b60405180910390fd5b61399f8183600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613fa49092919063ffffffff16565b50919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a2c9061585f565b60405180910390fd5b8060018190555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ac69061571f565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613b9691906155d5565b60206040518083038186803b158015613bae57600080fd5b505afa158015613bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613be69190615034565b90506000811115613d3a57613c5373f4d73326c13a4fc5fd7a064217e12780e9bd62c36000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661447e9092919063ffffffff16565b613cb473f4d73326c13a4fc5fd7a064217e12780e9bd62c382600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661447e9092919063ffffffff16565b73f4d73326c13a4fc5fd7a064217e12780e9bd62c373ffffffffffffffffffffffffffffffffffffffff16638dbdbe6d60105483306040518463ffffffff1660e01b8152600401613d079392919061599d565b600060405180830381600087803b158015613d2157600080fd5b505af1158015613d35573d6000803e3d6000fd5b505050505b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b620186a081565b6000613dfe83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506148db565b905092915050565b600073f4d73326c13a4fc5fd7a064217e12780e9bd62c373ffffffffffffffffffffffffffffffffffffffff16630ad58d2f60105484306040518463ffffffff1660e01b8152600401613e5b9392919061599d565b600060405180830381600087803b158015613e7557600080fd5b505af1158015613e89573d6000803e3d6000fd5b50505050819050919050565b600080828401905083811015613ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ed79061577f565b60405180910390fd5b8091505092915050565b600080831415613efd5760009050613f54565b6000828402905082848281613f0e57fe5b0414613f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f46906157df565b60405180910390fd5b809150505b92915050565b6000613f9c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614936565b905092915050565b6140258363a9059cbb60e01b8484604051602401613fc3929190615697565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050614997565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561406457600080fd5b60607382af49447d8a07e3bd95bd0d56f35241523fbab173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806140f357507382af49447d8a07e3bd95bd0d56f35241523fbab173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156141d757600267ffffffffffffffff8111801561411057600080fd5b5060405190808252806020026020018201604052801561413f5781602001602082028036833780820191505090505b509050838160008151811061415057fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050828160018151811061419857fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061430e565b600367ffffffffffffffff811180156141ef57600080fd5b5060405190808252806020026020018201604052801561421e5781602001602082028036833780820191505090505b509050838160008151811061422f57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507382af49447d8a07e3bd95bd0d56f35241523fbab18160018151811061428b57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505082816002815181106142d357fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b61435c600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660008673ffffffffffffffffffffffffffffffffffffffff1661447e9092919063ffffffff16565b6143a9600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838673ffffffffffffffffffffffffffffffffffffffff1661447e9092919063ffffffff16565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338ed17398360008430614400603c42613e9590919063ffffffff16565b6040518663ffffffff1660e01b815260040161442095949392919061591a565b600060405180830381600087803b15801561443a57600080fd5b505af115801561444e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906144779190614f4f565b5050505050565b6000811480614517575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b81526004016144c59291906155f0565b60206040518083038186803b1580156144dd57600080fd5b505afa1580156144f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145159190615034565b145b614556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161454d9061587f565b60405180910390fd5b6145d78363095ea7b360e01b8484604051602401614575929190615697565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050614997565b505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161463991906155d5565b60206040518083038186803b15801561465157600080fd5b505afa158015614665573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146899190615034565b905060008111156148c5576147a8600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b1580156146ff57600080fd5b505afa158015614713573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147379190614e21565b61476061271061475260005486613eea90919063ffffffff16565b613f5a90919063ffffffff16565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613fa49092919063ffffffff16565b6148bc600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d8f1e676040518163ffffffff1660e01b815260040160206040518083038186803b15801561481357600080fd5b505afa158015614827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061484b9190614e21565b61487461271061486660015486613eea90919063ffffffff16565b613f5a90919063ffffffff16565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613fa49092919063ffffffff16565b6148c4613b39565b5b50565b6148d86148d361100f565b613e06565b50565b6000838311158290614923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161491a91906156fd565b60405180910390fd5b5060008385039050809150509392505050565b6000808311829061497d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161497491906156fd565b60405180910390fd5b50600083858161498957fe5b049050809150509392505050565b60606149f9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16614a5e9092919063ffffffff16565b9050600081511115614a595780806020019051810190614a199190614f90565b614a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614a4f9061583f565b60405180910390fd5b5b505050565b6060614a6d8484600085614a76565b90509392505050565b6060614a8185614b99565b614ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614ab79061581f565b60405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff168587604051614aea91906155be565b60006040518083038185875af1925050503d8060008114614b27576040519150601f19603f3d011682016040523d82523d6000602084013e614b2c565b606091505b50915091508115614b41578092505050614b91565b600081511115614b545780518082602001fd5b836040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614b8891906156fd565b60405180910390fd5b949350505050565b600080823b905060008111915050919050565b600081359050614bbb81615bca565b92915050565b600081519050614bd081615bca565b92915050565b60008083601f840112614be857600080fd5b8235905067ffffffffffffffff811115614c0157600080fd5b602083019150836020820283011115614c1957600080fd5b9250929050565b600082601f830112614c3157600080fd5b8151614c44614c3f82615a01565b6159d4565b91508181835260208401935060208101905083856020840282011115614c6957600080fd5b60005b83811015614c995781614c7f8882614da4565b845260208401935060208301925050600181019050614c6c565b5050505092915050565b600082601f830112614cb457600080fd5b8151614cc7614cc282615a29565b6159d4565b91508181835260208401935060208101905083856020840282011115614cec57600080fd5b60005b83811015614d1c5781614d028882614de3565b845260208401935060208301925050600181019050614cef565b5050505092915050565b600081519050614d3581615be1565b92915050565b600082601f830112614d4c57600080fd5b8135614d5f614d5a82615a51565b6159d4565b91508082526020830160208301858383011115614d7b57600080fd5b614d86838284615b77565b50505092915050565b600081359050614d9e81615bf8565b92915050565b600081519050614db381615bf8565b92915050565b600081519050614dc881615c0f565b92915050565b600081359050614ddd81615c26565b92915050565b600081519050614df281615c26565b92915050565b600060208284031215614e0a57600080fd5b6000614e1884828501614bac565b91505092915050565b600060208284031215614e3357600080fd5b6000614e4184828501614bc1565b91505092915050565b60008060408385031215614e5d57600080fd5b6000614e6b85828601614bac565b925050602083013567ffffffffffffffff811115614e8857600080fd5b614e9485828601614d3b565b9150509250929050565b60008060208385031215614eb157600080fd5b600083013567ffffffffffffffff811115614ecb57600080fd5b614ed785828601614bd6565b92509250509250929050565b60008060408385031215614ef657600080fd5b600083015167ffffffffffffffff811115614f1057600080fd5b614f1c85828601614c20565b925050602083015167ffffffffffffffff811115614f3957600080fd5b614f4585828601614ca3565b9150509250929050565b600060208284031215614f6157600080fd5b600082015167ffffffffffffffff811115614f7b57600080fd5b614f8784828501614ca3565b91505092915050565b600060208284031215614fa257600080fd5b6000614fb084828501614d26565b91505092915050565b600060208284031215614fcb57600080fd5b6000614fd984828501614d8f565b91505092915050565b600060208284031215614ff457600080fd5b600061500284828501614db9565b91505092915050565b60006020828403121561501d57600080fd5b600061502b84828501614dce565b91505092915050565b60006020828403121561504657600080fd5b600061505484828501614de3565b91505092915050565b6000806040838503121561507057600080fd5b600061507e85828601614de3565b925050602061508f85828601614de3565b9150509250929050565b6000806000606084860312156150ae57600080fd5b60006150bc86828701614de3565b93505060206150cd86828701614de3565b92505060406150de86828701614de3565b9150509250925092565b60006150f48383615100565b60208301905092915050565b61510981615af9565b82525050565b61511881615af9565b82525050565b600061512982615a8d565b6151338185615abb565b935061513e83615a7d565b8060005b8381101561516f57815161515688826150e8565b975061516183615aae565b925050600181019050615142565b5085935050505092915050565b61518581615b0b565b82525050565b600061519682615a98565b6151a08185615acc565b93506151b0818560208601615b86565b6151b981615bb9565b840191505092915050565b60006151cf82615a98565b6151d98185615add565b93506151e9818560208601615b86565b80840191505092915050565b6151fe81615b65565b82525050565b600061520f82615aa3565b6152198185615ae8565b9350615229818560208601615b86565b61523281615bb9565b840191505092915050565b600061524a600b83615ae8565b91507f21676f7665726e616e63650000000000000000000000000000000000000000006000830152602082019050919050565b600061528a600783615ae8565b91507f21746172676574000000000000000000000000000000000000000000000000006000830152602082019050919050565b60006152ca600b83615ae8565b91507f21636f6e74726f6c6c65720000000000000000000000000000000000000000006000830152602082019050919050565b600061530a601b83615ae8565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b600061534a600483615ae8565b91507f77616e74000000000000000000000000000000000000000000000000000000006000830152602082019050919050565b600061538a600e83615ae8565b91507f6e6f7420617574686f72697a65640000000000000000000000000000000000006000830152602082019050919050565b60006153ca602183615ae8565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000615430600483615ae8565b91507f216a6172000000000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000615470601d83615ae8565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b60006154b0602a83615ae8565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000615516600983615ae8565b91507f2174696d656c6f636b00000000000000000000000000000000000000000000006000830152602082019050919050565b6000615556603683615ae8565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b6155b881615b5b565b82525050565b60006155ca82846151c4565b915081905092915050565b60006020820190506155ea600083018461510f565b92915050565b6000604082019050615605600083018561510f565b615612602083018461510f565b9392505050565b60006101008201905061562f600083018b61510f565b61563c602083018a61510f565b61564960408301896155af565b61565660608301886155af565b61566360808301876151f5565b61567060a08301866151f5565b61567d60c083018561510f565b61568a60e08301846155af565b9998505050505050505050565b60006040820190506156ac600083018561510f565b6156b960208301846155af565b9392505050565b60006020820190506156d5600083018461517c565b92915050565b600060208201905081810360008301526156f5818461518b565b905092915050565b600060208201905081810360008301526157178184615204565b905092915050565b600060208201905081810360008301526157388161523d565b9050919050565b600060208201905081810360008301526157588161527d565b9050919050565b60006020820190508181036000830152615778816152bd565b9050919050565b60006020820190508181036000830152615798816152fd565b9050919050565b600060208201905081810360008301526157b88161533d565b9050919050565b600060208201905081810360008301526157d88161537d565b9050919050565b600060208201905081810360008301526157f8816153bd565b9050919050565b6000602082019050818103600083015261581881615423565b9050919050565b6000602082019050818103600083015261583881615463565b9050919050565b60006020820190508181036000830152615858816154a3565b9050919050565b6000602082019050818103600083015261587881615509565b9050919050565b6000602082019050818103600083015261589881615549565b9050919050565b60006020820190506158b460008301846155af565b92915050565b60006040820190506158cf60008301856155af565b6158dc602083018461510f565b9392505050565b60006060820190506158f860008301866155af565b615905602083018561510f565b61591260408301846151f5565b949350505050565b600060a08201905061592f60008301886155af565b61593c60208301876151f5565b818103604083015261594e818661511e565b905061595d606083018561510f565b61596a60808301846155af565b9695505050505050565b600060408201905061598960008301856155af565b61599660208301846155af565b9392505050565b60006060820190506159b260008301866155af565b6159bf60208301856155af565b6159cc604083018461510f565b949350505050565b6000604051905081810181811067ffffffffffffffff821117156159f757600080fd5b8060405250919050565b600067ffffffffffffffff821115615a1857600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115615a4057600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115615a6857600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000615b0482615b3b565b9050919050565b60008115159050919050565b6000615b2282615af9565b9050919050565b6000615b3482615af9565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000615b7082615b5b565b9050919050565b82818337600083830152505050565b60005b83811015615ba4578082015181840152602081019050615b89565b83811115615bb3576000848401525b50505050565b6000601f19601f8301169050919050565b615bd381615af9565b8114615bde57600080fd5b50565b615bea81615b0b565b8114615bf557600080fd5b50565b615c0181615b17565b8114615c0c57600080fd5b50565b615c1881615b29565b8114615c2357600080fd5b50565b615c2f81615b5b565b8114615c3a57600080fd5b5056fea26469706673582212206e16a9a9dc30e823d7385529fd3b96b2986dc8e776329908de371496883ec29764736f6c63430006070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f02ceb58d549e4b403e8f85fbbaee4c5dfa47c01000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c00000000000000000000000055d5bcef2bfd4921b8790525ff87919c2e26bd03000000000000000000000000f02ceb58d549e4b403e8f85fbbaee4c5dfa47c01
-----Decoded View---------------
Arg [0] : _governance (address): 0xf02CeB58d549E4b403e8F85FBBaEe4c5dfA47c01
Arg [1] : _strategist (address): 0xaCfE4511CE883C14c4eA40563F176C3C09b4c47C
Arg [2] : _controller (address): 0x55D5BCEf2BFD4921B8790525FF87919c2E26bD03
Arg [3] : _timelock (address): 0xf02CeB58d549E4b403e8F85FBBaEe4c5dfA47c01
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000f02ceb58d549e4b403e8f85fbbaee4c5dfa47c01
Arg [1] : 000000000000000000000000acfe4511ce883c14c4ea40563f176c3c09b4c47c
Arg [2] : 00000000000000000000000055d5bcef2bfd4921b8790525ff87919c2e26bd03
Arg [3] : 000000000000000000000000f02ceb58d549e4b403e8f85fbbaee4c5dfa47c01
Deployed ByteCode Sourcemap
62622:949:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;57606:685:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;57606:685:0;;;:::i;:::-;;;;;;;;;;;;;;;;;56870:39;;5:9:-1;2:2;;;27:1;24;17:12;2:2;56870:39:0;;;:::i;:::-;;;;;;;;;;;;;;;;56467:74;;5:9:-1;2:2;;;27:1;24;17:12;2:2;56467:74:0;;;:::i;:::-;;;;;;;;;;;;;;;;62894:65;;5:9:-1;2:2;;;27:1;24;17:12;2:2;62894:65:0;;;:::i;:::-;;;;;;;;;;;;;;;;56670:21;;5:9:-1;2:2;;;27:1;24;17:12;2:2;56670:21:0;;;:::i;:::-;;;;;;;;;;;;;;;;44440:340;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44440:340:0;;;;;;;;;;;;;;;;:::i;:::-;;57380:218;;5:9:-1;2:2;;;27:1;24;17:12;2:2;57380:218:0;;;:::i;:::-;;;;;;;;;;;;;;;;63451:117;;5:9:-1;2:2;;;27:1;24;17:12;2:2;63451:117:0;;;:::i;:::-;;;;;;;;;;;;;;;;49343:1053;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;42784:19;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42784:19:0;;;:::i;:::-;;;;;;;;;;;;;;;;42978:25;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42978:25:0;;;:::i;:::-;;;;;;;;;;;;;;;;45684:213;;5:9:-1;2:2;;;27:1;24;17:12;2:2;45684:213:0;;;;;;;;;;;;;;;;:::i;:::-;;42311:54;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42311:54:0;;;:::i;:::-;;;;;;;;;;;;;;;;47060:1022;;5:9:-1;2:2;;;27:1;24;17:12;2:2;47060:1022:0;;;;;;;;;;;;;;;;:::i;:::-;;56918:21;;5:9:-1;2:2;;;27:1;24;17:12;2:2;56918:21:0;;;:::i;:::-;;;;;;;;;;;;;;;;42810:73;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42810:73:0;;;:::i;:::-;;;;;;;;;;;;;;;;56548:86;;5:9:-1;2:2;;;27:1;24;17:12;2:2;56548:86:0;;;:::i;:::-;;;;;;;;;;;;;;;;59489:2987;;5:9:-1;2:2;;;27:1;24;17:12;2:2;59489:2987:0;;;:::i;:::-;;42707:53;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42707:53:0;;;:::i;:::-;;;;;;;;;;;;;;;;59066:151;;5:9:-1;2:2;;;27:1;24;17:12;2:2;59066:151:0;;;;;;;;;;;;;;;;:::i;:::-;;42417:49;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42417:49:0;;;:::i;:::-;;;;;;;;;;;;;;;;46695:289;;5:9:-1;2:2;;;27:1;24;17:12;2:2;46695:289:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;42661:39;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42661:39:0;;;:::i;:::-;;;;;;;;;;;;;;;;58911:147;;5:9:-1;2:2;;;27:1;24;17:12;2:2;58911:147:0;;;;;;;;;;;;;;;;:::i;:::-;;42263:41;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42263:41:0;;;:::i;:::-;;;;;;;;;;;;;;;;42914:25;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42914:25:0;;;:::i;:::-;;;;;;;;;;;;;;;;56793:31;;5:9:-1;2:2;;;27:1;24;17:12;2:2;56793:31:0;;;:::i;:::-;;;;;;;;;;;;;;;;43055:71;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43055:71:0;;;:::i;:::-;;;;;;;;;;;;;;;;44215:113;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44215:113:0;;;:::i;:::-;;;;;;;;;;;;;;;;45294:195;;5:9:-1;2:2;;;27:1;24;17:12;2:2;45294:195:0;;;;;;;;;;;;;;;;:::i;:::-;;48650:430;;5:9:-1;2:2;;;27:1;24;17:12;2:2;48650:430:0;;;:::i;:::-;;;;;;;;;;;;;;;;43135:42;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43135:42:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;42374:36;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42374:36:0;;;:::i;:::-;;;;;;;;;;;;;;;;59225:220;;5:9:-1;2:2;;;27:1;24;17:12;2:2;59225:220:0;;;;;;;;;;;;;;;;:::i;:::-;;42551:40;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42551:40:0;;;:::i;:::-;;;;;;;;;;;;;;;;46382:151;;5:9:-1;2:2;;;27:1;24;17:12;2:2;46382:151:0;;;;;;;;;;;;;;;;:::i;:::-;;46068:155;;5:9:-1;2:2;;;27:1;24;17:12;2:2;46068:155:0;;;;;;;;;;;;;;;;:::i;:::-;;45095:191;;5:9:-1;2:2;;;27:1;24;17:12;2:2;45095:191:0;;;;;;;;;;;;;;;;:::i;:::-;;44788:299;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44788:299:0;;;;;;;;;;;;;;;;:::i;:::-;;46231:143;;5:9:-1;2:2;;;27:1;24;17:12;2:2;46231:143:0;;;;;;;;;;;;;;;;:::i;:::-;;44018:118;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44018:118:0;;;:::i;:::-;;;;;;;;;;;;;;;;56831:32;;5:9:-1;2:2;;;27:1;24;17:12;2:2;56831:32:0;;;:::i;:::-;;;;;;;;;;;;;;;;48146:428;;5:9:-1;2:2;;;27:1;24;17:12;2:2;48146:428:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;45497:179;;5:9:-1;2:2;;;27:1;24;17:12;2:2;45497:179:0;;;;;;;;;;;;;;;;:::i;:::-;;45905:155;;5:9:-1;2:2;;;27:1;24;17:12;2:2;45905:155:0;;;;;;;;;;;;;;;;:::i;:::-;;62809:78;;5:9:-1;2:2;;;27:1;24;17:12;2:2;62809:78:0;;;:::i;:::-;;;;;;;;;;;;;;;;58327:326;;5:9:-1;2:2;;;27:1;24;17:12;2:2;58327:326:0;;;:::i;:::-;;56698:21;;5:9:-1;2:2;;;27:1;24;17:12;2:2;56698:21:0;;;:::i;:::-;;;;;;;;;;;;;;;;43010:23;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43010:23:0;;;:::i;:::-;;;;;;;;;;;;;;;;62736:42;;5:9:-1;2:2;;;27:1;24;17:12;2:2;62736:42:0;;;:::i;:::-;;;;;;;;;;;;;;;;42946:25;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42946:25:0;;;:::i;:::-;;;;;;;;;;;;;;;;42598:54;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42598:54:0;;;:::i;:::-;;;;;;;;;;;;;;;;57606:685;57655:7;57664;57684:21;56592:42;57708:34;;;57757:6;;57786:4;57708:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;57708:94:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;57708:94:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;57708:94:0;;;;;;;;;57684:118;;57813:18;56592:42;57834:30;;;57865:6;;57834:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;57834:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;57834:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;57834:38:0;;;;;;;;;57813:59;;57886:31;57921:8;:22;;;57958:6;;57987:4;58007:1;57921:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;57921:98:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;57921:98:0;;;;;;39:16:-1;36:1;17:17;2:54;57921:98:0;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;57921:98:0;;;;;;;;;57883:136;;;58032:22;58093:1;58069:14;:21;:25;58065:92;;;58128:14;58143:1;58128:17;;;;;;;;;;;;;;58111:34;;58065:92;58253:13;58268:14;58245:38;;;;;;;;57606:685;;:::o;56870:39::-;56904:5;56870:39;:::o;56467:74::-;56499:42;56467:74;:::o;62894:65::-;;;;;;;;;;;;;:::o;56670:21::-;;;;;;;;;;;;;:::o;44440:340::-;44543:10;;;;;;;;;;;44529:24;;:10;:24;;;:66;;;;44585:10;;;;;;;;;;;44571:24;;:10;:24;;;44529:66;:92;;;;44599:10;:22;44610:10;44599:22;;;;;;;;;;;;;;;;;;;;;;;;;44529:92;44521:119;;;;;;;;;;;;;;;;;;;;;;44671:6;44680:1;44671:10;;44666:107;44687:11;;:18;;44683:1;:22;44666:107;;;44757:4;44728:10;:26;44739:11;;44751:1;44739:14;;;;;;;;;;;;;;;;;;;;;;44728:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;44707:4;;;;;;;44666:107;;;;44440:340;;:::o;57380:218::-;57435:7;57456:14;56592:42;57476:30;;;57521:6;;57550:4;57476:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;57476:90:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;57476:90:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;57476:90:0;;;;;;;;;57455:111;;;57584:6;57577:13;;;57380:218;:::o;63451:117::-;63502:13;63528:32;;;;;;;;;;;;;;;;;;;63451:117;:::o;49343:1053::-;49448:21;49509:8;;;;;;;;;;;49495:22;;:10;:22;;;49487:44;;;;;;;;;;;;;;;;;;;;;;49569:1;49550:21;;:7;:21;;;;49542:41;;;;;;;;;;;;;;;;;;;;;;49860:1;49840;49815:5;49809:12;49785:4;49778:5;49774:16;49748:7;49724:4;49717:5;49713:16;49682:194;49902:16;49952:4;49946:11;49934:23;;50069:4;50065:9;50058:4;50051;50045;50041:15;50037:26;50033:42;50023:8;50019:57;49996:4;49971:120;50122:4;50112:8;50105:22;50180:4;50177:1;50170:4;50160:8;50156:19;50141:44;50215:9;50208:17;50248:1;50243:135;;;;50201:177;;50243:135;50354:4;50347;50337:8;50333:19;50326:33;50201:177;;49650:739;;;;;;:::o;42784:19::-;;;;;;;;;;;;;:::o;42978:25::-;;;;;;;;;;;;;:::o;45684:213::-;45808:8;;;;;;;;;;;45794:22;;:10;:22;;;45786:44;;;;;;;;;;;;;;;;;;;;;;45866:23;45841:22;:48;;;;45684:213;:::o;42311:54::-;42360:5;42311:54;:::o;47060:1022::-;47137:10;;;;;;;;;;;47123:24;;:10;:24;;;47115:48;;;;;;;;;;;;;;;;;;;;;;47174:16;47200:4;;;;;;;;;;;47193:22;;;47224:4;47193:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;47193:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47193:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;47193:37:0;;;;;;;;;47174:56;;47256:7;47245:8;:18;47241:143;;;47290:36;47304:21;47316:8;47304:7;:11;;:21;;;;:::i;:::-;47290:13;:36::i;:::-;47280:46;;47351:21;47363:8;47351:7;:11;;:21;;;;:::i;:::-;47341:31;;47241:143;47396:15;47414:83;42754:6;47414:33;47426:20;;47414:7;:11;;:33;;;;:::i;:::-;:37;;:83;;;;:::i;:::-;47396:101;;47508:69;47546:10;;;;;;;;;;;47534:31;;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;47534:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47534:33:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;47534:33:0;;;;;;;;;47569:7;47515:4;;;;;;;;;;;47508:25;;;;:69;;;;;:::i;:::-;47590:20;47613:85;42646:6;47613:34;47625:21;;47613:7;:11;;:34;;;;:::i;:::-;:38;;:85;;;;:::i;:::-;47590:108;;47709:112;47761:10;;;;;;;;;;;47749:32;;;:34;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;47749:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47749:34:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;47749:34:0;;;;;;;;;47798:12;47716:4;;;;;;;;;;;47709:25;;;;:112;;;;;:::i;:::-;47834:12;47861:10;;;;;;;;;;;47849:28;;;47886:4;;;;;;;;;;;47849:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;47849:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47849:43:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;47849:43:0;;;;;;;;;47834:58;;47927:1;47911:18;;:4;:18;;;;47903:35;;;;;;;;;;;;;;;;;;;;;;48003:71;48029:4;48035:38;48060:12;48035:20;48047:7;48035;:11;;:20;;;;:::i;:::-;:24;;:38;;;;:::i;:::-;48010:4;;;;;;;;;;;48003:25;;;;:71;;;;;:::i;:::-;47060:1022;;;;;:::o;56918:21::-;;;;:::o;42810:73::-;42841:42;42810:73;:::o;56548:86::-;56592:42;56548:86;:::o;59489:2987::-;43838:10;:22;43849:10;43838:22;;;;;;;;;;;;;;;;;;;;;;;;;:67;;;;43895:10;;;;;;;;;;;43881:24;;:10;:24;;;43838:67;:112;;;;43940:10;;;;;;;;;;;43926:24;;:10;:24;;;43838:112;43816:145;;12:1:-1;9;2:12;43816:145:0;56592:42:::1;59877:29;;;59907:6;;59923:4;59877:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;59877:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;59877:52:0;;;;59940:14;56499:42;59957:23;;;59989:4;59957:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;59957:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;59957:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;59957:38:0;;;;;;;;;59940:55;;60019:1;60010:6;:10;60006:350;;;60085:18;60106:34;56904:5;60106:21;60117:9;;60106:6;:10;;:21;;;;:::i;:::-;:25;;:34;;;;:::i;:::-;60085:55;;60155:123;60212:10;;;;;;;;;;;60200:32;;;:34;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;60200:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;60200:34:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;60200:34:0;;;;;;;;;60253:10;56499:42;60155:26;;;;:123;;;;;:::i;:::-;60293:51;56499:42;42841;60321:22;60332:10;60321:6;:10;;:22;;;;:::i;:::-;60293:14;:51::i;:::-;60006:350;;60429:1;60406:25;;:11;;;;;;;;;;;:25;;;60402:483;;60448:15;60473:11;;;;;;;;;;;60466:29;;;60504:4;60466:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;60466:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;60466:44:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;60466:44:0;;;;;;;;;60448:62;;60539:1;60529:7;:11;60525:349;;;60561:19;60583:36;56904:5;60583:23;60595:10;;60583:7;:11;;:23;;;;:::i;:::-;:27;;:36;;;;:::i;:::-;60561:58;;60638:142;60705:10;;;;;;;;;;;60693:32;;;:34;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;60693:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;60693:34:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;60693:34:0;;;;;;;;;60750:11;60645;;;;;;;;;;;60638:32;;;;:142;;;;;:::i;:::-;60799:59;60814:11;;;;;;;;;;;42841:42;60833:24;60845:11;60833:7;:11;;:24;;;;:::i;:::-;60799:14;:59::i;:::-;60525:349;;60402:483;;60935:13;42841:42;60951:22;;;60982:4;60951:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;60951:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;60951:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;60951:37:0;;;;;;;;;60935:53;;61011:1;61003:5;:9;:27;;;;;42841:42;61016:14;;:6;;;;;;;;;;;:14;;;;61003:27;60999:102;;;61047:42;42841;61068:6;;;;;;;;;;;61076:12;61086:1;61076:5;:9;;:12;;;;:::i;:::-;61047:14;:42::i;:::-;60999:102;61163:1;61155:5;:9;:27;;;;;42841:42;61168:14;;:6;;;;;;;;;;;:14;;;;61155:27;61151:102;;;61199:42;42841;61220:6;;;;;;;;;;;61228:12;61238:1;61228:5;:9;;:12;;;;:::i;:::-;61199:14;:42::i;:::-;61151:102;61313:15;61338:6;;;;;;;;;;;61331:24;;;61364:4;61331:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;61331:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;61331:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;61331:39:0;;;;;;;;;61313:57;;61381:15;61406:6;;;;;;;;;;;61399:24;;;61432:4;61399:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;61399:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;61399:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;61399:39:0;;;;;;;;;61381:57;;61463:1;61453:7;:11;:26;;;;;61478:1;61468:7;:11;61453:26;61449:921;;;61496:42;61523:11;;;;;;;;;;;61536:1;61503:6;;;;;;;;;;;61496:26;;;;:42;;;;;:::i;:::-;61553:48;61580:11;;;;;;;;;;;61593:7;61560:6;;;;;;;;;;;61553:26;;;;:48;;;;;:::i;:::-;61616:42;61643:11;;;;;;;;;;;61656:1;61623:6;;;;;;;;;;;61616:26;;;;:42;;;;;:::i;:::-;61673:48;61700:11;;;;;;;;;;;61713:7;61680:6;;;;;;;;;;;61673:26;;;;:48;;;;;:::i;:::-;61754:11;;;;;;;;;;;61738:41;;;61798:6;;;;;;;;;;;61823;;;;;;;;;;;61848:7;61874;61900:1;61920::::0;61948:4:::1;61978:2;61972:3;:8;61738:257;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;61738:257:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;61738:257:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;61738:257:0;;;;;;;;;;;;62048:6;;;;;;;;;;;62041:23;;;62095:10;;;;;;;;;;;62083:32;;;:34;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;62083:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;62083:34:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;62083:34:0;;;;;;;;;62143:6;;;;;;;;;;;62136:24;;;62169:4;62136:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;62136:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;62136:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;62136:39:0;;;;;;;;;62041:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;62041:149:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;62041:149:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;62041:149:0;;;;;;;;;;62205:153;62263:10;;;;;;;;;;;62251:32;;;:34;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;62251:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;62251:34:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;62251:34:0;;;;;;;;;62311:6;;;;;;;;;;;62304:24;;;62337:4;62304:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;62304:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;62304:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;62304:39:0;;;;;;;;;62212:6;;;;;;;;;;;62205:27;;;;:153;;;;;:::i;:::-;61449:921;62430:38;:36;:38::i;:::-;43972:1;;;;59489:2987::o:0;42707:53::-;42754:6;42707:53;:::o;59066:151::-;59152:8;;;;;;;;;;;59138:22;;:10;:22;;;59130:44;;;;;;;;;;;;;;;;;;;;;;59198:11;59185:10;:24;;;;59066:151;:::o;42417:49::-;42461:5;42417:49;:::o;46695:289::-;46746:15;46796:10;;;;;;;;;;;46782:24;;:10;:24;;;46774:48;;;;;;;;;;;;;;;;;;;;;;46857:6;46841:23;;:4;;;;;;;;;;;:23;;;;46833:40;;;;;;;;;;;;;;;;;;;;;;46894:6;:16;;;46919:4;46894:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;46894:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;46894:31:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;46894:31:0;;;;;;;;;46884:41;;46936:40;46956:10;;;;;;;;;;;46968:7;46936:6;:19;;;;:40;;;;;:::i;:::-;46695:289;;;:::o;42661:39::-;;;;:::o;58911:147::-;58995:8;;;;;;;;;;;58981:22;;:10;:22;;;58973:44;;;;;;;;;;;;;;;;;;;;;;59040:10;59028:9;:22;;;;58911:147;:::o;42263:41::-;;;;:::o;42914:25::-;;;;;;;;;;;;;:::o;56793:31::-;;;;:::o;43055:71::-;;;;;;;;;;;;;:::o;44215:113::-;44257:7;44284:36;44304:15;:13;:15::i;:::-;44284;:13;:15::i;:::-;:19;;:36;;;;:::i;:::-;44277:43;;44215:113;:::o;45294:195::-;45402:8;;;;;;;;;;;45388:22;;:10;:22;;;45380:44;;;;;;;;;;;;;;;;;;;;;;45459:22;45435:21;:46;;;;45294:195;:::o;48650:430::-;48691:15;48741:10;;;;;;;;;;;48727:24;;:10;:24;;;48719:48;;;;;;;;;;;;;;;;;;;;;;48778:14;:12;:14::i;:::-;48822:4;;;;;;;;;;;48815:22;;;48846:4;48815:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;48815:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48815:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;48815:37:0;;;;;;;;;48805:47;;48865:12;48892:10;;;;;;;;;;;48880:28;;;48917:4;;;;;;;;;;;48880:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;48880:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48880:43:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;48880:43:0;;;;;;;;;48865:58;;48958:1;48942:18;;:4;:18;;;;48934:35;;;;;;;;;;;;;;;;;;;;;;49032:40;49058:4;49064:7;49039:4;;;;;;;;;;;49032:25;;;;:40;;;;;:::i;:::-;48650:430;;:::o;43135:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;42374:36::-;;;;:::o;59225:220::-;59327:8;;;;;;;;;;;59313:22;;:10;:22;;;:50;;;;59353:10;;;;;;;;;;;59339:24;;:10;:24;;;59313:50;59291:109;;;;;;;;;;;;;;;;;;;;;;59425:12;59411:11;;:26;;;;;;;;;;;;;;;;;;59225:220;:::o;42551:40::-;;;;:::o;46382:151::-;46468:8;;;;;;;;;;;46454:22;;:10;:22;;;46446:44;;;;;;;;;;;;;;;;;;;;;;46514:11;46501:10;;:24;;;;;;;;;;;;;;;;;;46382:151;:::o;46068:155::-;46154:10;;;;;;;;;;;46140:24;;:10;:24;;;46132:48;;;;;;;;;;;;;;;;;;;;;;46204:11;46191:10;;:24;;;;;;;;;;;;;;;;;;46068:155;:::o;45095:191::-;45201:8;;;;;;;;;;;45187:22;;:10;:22;;;45179:44;;;;;;;;;;;;;;;;;;;;;;45257:21;45234:20;:44;;;;45095:191;:::o;44788:299::-;44888:10;;;;;;;;;;;44874:24;;:10;:24;;;:66;;;;44930:10;;;;;;;;;;;44916:24;;:10;:24;;;44874:66;44866:93;;;;;;;;;;;;;;;;;;;;;;44977:6;44986:1;44977:10;;44972:108;44993:11;;:18;;44989:1;:22;44972:108;;;45063:5;45034:10;:26;45045:11;;45057:1;45045:14;;;;;;;;;;;;;;;;;;;;;;45034:26;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;45013:4;;;;;;;44972:108;;;;44788:299;;:::o;46231:143::-;46313:8;;;;;;;;;;;46299:22;;:10;:22;;;46291:44;;;;;;;;;;;;;;;;;;;;;;46357:9;46346:8;;:20;;;;;;;;;;;;;;;;;;46231:143;:::o;44018:118::-;44064:7;44098:4;;;;;;;;;;;44091:22;;;44122:4;44091:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44091:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;44091:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;44091:37:0;;;;;;;;;44084:44;;44018:118;:::o;56831:32::-;;;;:::o;48146:428::-;48224:15;48279:10;;;;;;;;;;;48265:24;;:10;:24;;;48257:48;;;;;;;;;;;;;;;;;;;;;;48316:22;48330:7;48316:13;:22::i;:::-;;48368:4;;;;;;;;;;;48361:22;;;48392:4;48361:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;48361:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48361:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;48361:37:0;;;;;;;;;48351:47;;48411:12;48438:10;;;;;;;;;;;48426:28;;;48463:4;;;;;;;;;;;48426:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;48426:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48426:43:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;48426:43:0;;;;;;;;;48411:58;;48504:1;48488:18;;:4;:18;;;;48480:35;;;;;;;;;;;;;;;;;;;;;;48526:40;48552:4;48558:7;48533:4;;;;;;;;;;;48526:25;;;;:40;;;;;:::i;:::-;48146:428;;;;:::o;45497:179::-;45597:8;;;;;;;;;;;45583:22;;:10;:22;;;45575:44;;;;;;;;;;;;;;;;;;;;;;45650:18;45630:17;:38;;;;45497:179;:::o;45905:155::-;45991:10;;;;;;;;;;;45977:24;;:10;:24;;;45969:48;;;;;;;;;;;;;;;;;;;;;;46041:11;46028:10;;:24;;;;;;;;;;;;;;;;;;45905:155;:::o;62809:78::-;;;;;;;;;;;;;:::o;58327:326::-;58373:13;58396:4;;;;;;;;;;;58389:22;;;58420:4;58389:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;58389:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;58389:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;58389:37:0;;;;;;;;;58373:53;;58449:1;58441:5;:9;58437:209;;;58467:37;56592:42;58502:1;58474:4;;;;;;;;;;;58467:24;;;;:37;;;;;:::i;:::-;58519:41;56592:42;58554:5;58526:4;;;;;;;;;;;58519:24;;;;:41;;;;;:::i;:::-;56592:42;58575:29;;;58605:6;;58613:5;58628:4;58575:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;58575:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;58575:59:0;;;;58437:209;58327:326;:::o;56698:21::-;;;;;;;;;;;;;:::o;43010:23::-;;;;;;;;;;;;;:::o;62736:42::-;;;;:::o;42946:25::-;;;;;;;;;;;;;:::o;42598:54::-;42646:6;42598:54;:::o;1463:136::-;1521:7;1548:43;1552:1;1555;1548:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1541:50;;1463:136;;;;:::o;58661:214::-;58755:7;56592:42;58780:30;;;58811:6;;58819:7;58836:4;58780:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;58780:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;58780:62:0;;;;58860:7;58853:14;;58661:214;;;:::o;999:181::-;1057:7;1077:9;1093:1;1089;:5;1077:17;;1118:1;1113;:6;;1105:46;;;;;;;;;;;;;;;;;;;;;;1171:1;1164:8;;;999:181;;;;:::o;2353:471::-;2411:7;2661:1;2656;:6;2652:47;;;2686:1;2679:8;;;;2652:47;2711:9;2727:1;2723;:5;2711:17;;2756:1;2751;2747;:5;;;;;;:10;2739:56;;;;;;;;;;;;;;;;;;;;;;2815:1;2808:8;;;2353:471;;;;;:::o;3300:132::-;3358:7;3385:39;3389:1;3392;3385:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3378:46;;3300:132;;;;:::o;26859:177::-;26942:86;26962:5;26992:23;;;27017:2;27021:5;26969:58;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;26969:58:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;26969:58:0;26942:19;:86::i;:::-;26859:177;;;:::o;50441:794::-;50587:1;50572:17;;:3;:17;;;;50564:26;;12:1:-1;9;2:12;50564:26:0;50603:21;42841:42;50641:13;;:5;:13;;;:28;;;;42841:42;50658:11;;:3;:11;;;50641:28;50637:285;;;50707:1;50693:16;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;50693:16:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;156:4;148:6;144:17;134:27;;0:165;50693:16:0;;;;50686:23;;50734:5;50724:4;50729:1;50724:7;;;;;;;;;;;;;:15;;;;;;;;;;;50764:3;50754:4;50759:1;50754:7;;;;;;;;;;;;;:13;;;;;;;;;;;50637:285;;;50821:1;50807:16;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;50807:16:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;156:4;148:6;144:17;134:27;;0:165;50807:16:0;;;;50800:23;;50848:5;50838:4;50843:1;50838:7;;;;;;;;;;;;;:15;;;;;;;;;;;42841:42;50868:4;50873:1;50868:7;;;;;;;;;;;;;:14;;;;;;;;;;;50907:3;50897:4;50902:1;50897:7;;;;;;;;;;;;;:13;;;;;;;;;;;50637:285;50942:41;50968:11;;;;;;;;;;;50981:1;50949:5;50942:25;;;;:41;;;;;:::i;:::-;50994:47;51020:11;;;;;;;;;;;51033:7;51001:5;50994:25;;;;:47;;;;;:::i;:::-;51068:11;;;;;;;;;;;51052:53;;;51120:7;51142:1;51158:4;51185;51205:11;51213:2;51205:3;:7;;:11;;;;:::i;:::-;51052:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;51052:175:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;51052:175:0;;;;;;39:16:-1;36:1;17:17;2:54;51052:175:0;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;51052:175:0;;;;;;;;;;50441:794;;;;:::o;27518:622::-;27897:1;27888:5;:10;27887:62;;;;27947:1;27904:5;:15;;;27928:4;27935:7;27904:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27904:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27904:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;27904:39:0;;;;;;;;;:44;27887:62;27879:152;;;;;;;;;;;;;;;;;;;;;;28042:90;28062:5;28092:22;;;28116:7;28125:5;28069:62;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;28069:62:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;28069:62:0;28042:19;:90::i;:::-;27518:622;;;:::o;51708:623::-;51776:13;51799:4;;;;;;;;;;;51792:22;;;51823:4;51792:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;51792:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;51792:37:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;51792:37:0;;;;;;;;;51776:53;;51854:1;51846:5;:9;51842:482;;;51902:173;51958:10;;;;;;;;;;;51946:32;;;:34;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;51946:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;51946:34:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;51946:34:0;;;;;;;;;51999:61;42360:5;51999:33;52009:22;;51999:5;:9;;:33;;;;:::i;:::-;:37;;:61;;;;:::i;:::-;51909:4;;;;;;;;;;;51902:25;;;;:173;;;;;:::i;:::-;52124:162;52180:10;;;;;;;;;;;52168:31;;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;52168:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;52168:33:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;52168:33:0;;;;;;;;;52220:51;42461:5;52220:28;52230:17;;52220:5;:9;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;52131:4;;;;;;;;;;;52124:25;;;;:162;;;;;:::i;:::-;52303:9;:7;:9::i;:::-;51842:482;51708:623;:::o;49088:82::-;49132:30;49146:15;:13;:15::i;:::-;49132:13;:30::i;:::-;;49088:82::o;1902:192::-;1988:7;2021:1;2016;:6;;2024:12;2008:29;;;;;;;;;;;;;;;;;;;;;;;;;2048:9;2064:1;2060;:5;2048:17;;2085:1;2078:8;;;1902:192;;;;;:::o;3928:278::-;4014:7;4046:1;4042;:5;4049:12;4034:28;;;;;;;;;;;;;;;;;;;;;;;;;4073:9;4089:1;4085;:5;;;;;;4073:17;;4197:1;4190:8;;;3928:278;;;;;:::o;29164:761::-;29588:23;29614:69;29642:4;29614:69;;;;;;;;;;;;;;;;;29622:5;29614:27;;;;:69;;;;;:::i;:::-;29588:95;;29718:1;29698:10;:17;:21;29694:224;;;29840:10;29829:30;;;;;;;;;;;;;;29821:85;;;;;;;;;;;;;;;;;;;;;;29694:224;29164:761;;;:::o;12985:196::-;13088:12;13120:53;13143:6;13151:4;13157:1;13160:12;13120:22;:53::i;:::-;13113:60;;12985:196;;;;;:::o;14362:979::-;14492:12;14525:18;14536:6;14525:10;:18::i;:::-;14517:60;;;;;;;;;;;;;;;;;;;;;;14651:12;14665:23;14692:6;:11;;14712:8;14723:4;14692:36;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;14650:78:0;;;;14743:7;14739:595;;;14774:10;14767:17;;;;;;14739:595;14908:1;14888:10;:17;:21;14884:439;;;15151:10;15145:17;15212:15;15199:10;15195:2;15191:19;15184:44;15099:148;15294:12;15287:20;;;;;;;;;;;;;;;;;;;;14362:979;;;;;;;:::o;10067:422::-;10127:4;10335:12;10446:7;10434:20;10426:28;;10480:1;10473:4;:8;10466:15;;;10067:422;;;:::o;5:130:-1:-;;85:6;72:20;63:29;;97:33;124:5;97:33;;;57:78;;;;;142:134;;226:6;220:13;211:22;;238:33;265:5;238:33;;;205:71;;;;;301:352;;;431:3;424:4;416:6;412:17;408:27;398:2;;449:1;446;439:12;398:2;482:6;469:20;459:30;;509:18;501:6;498:30;495:2;;;541:1;538;531:12;495:2;575:4;567:6;563:17;551:29;;626:3;618:4;610:6;606:17;596:8;592:32;589:41;586:2;;;643:1;640;633:12;586:2;391:262;;;;;;687:764;;829:3;822:4;814:6;810:17;806:27;796:2;;847:1;844;837:12;796:2;877:6;871:13;899:94;914:78;985:6;914:78;;;899:94;;;890:103;;1010:5;1035:6;1028:5;1021:21;1065:4;1057:6;1053:17;1043:27;;1087:4;1082:3;1078:14;1071:21;;1140:6;1187:3;1179:4;1171:6;1167:17;1162:3;1158:27;1155:36;1152:2;;;1204:1;1201;1194:12;1152:2;1229:1;1214:231;1239:6;1236:1;1233:13;1214:231;;;1297:3;1319:62;1377:3;1365:10;1319:62;;;1314:3;1307:75;1405:4;1400:3;1396:14;1389:21;;1433:4;1428:3;1424:14;1417:21;;1271:174;1261:1;1258;1254:9;1249:14;;1214:231;;;1218:14;789:662;;;;;;;;1477:722;;1605:3;1598:4;1590:6;1586:17;1582:27;1572:2;;1623:1;1620;1613:12;1572:2;1653:6;1647:13;1675:80;1690:64;1747:6;1690:64;;;1675:80;;;1666:89;;1772:5;1797:6;1790:5;1783:21;1827:4;1819:6;1815:17;1805:27;;1849:4;1844:3;1840:14;1833:21;;1902:6;1949:3;1941:4;1933:6;1929:17;1924:3;1920:27;1917:36;1914:2;;;1966:1;1963;1956:12;1914:2;1991:1;1976:217;2001:6;1998:1;1995:13;1976:217;;;2059:3;2081:48;2125:3;2113:10;2081:48;;;2076:3;2069:61;2153:4;2148:3;2144:14;2137:21;;2181:4;2176:3;2172:14;2165:21;;2033:160;2023:1;2020;2016:9;2011:14;;1976:217;;;1980:14;1565:634;;;;;;;;2207:128;;2288:6;2282:13;2273:22;;2300:30;2324:5;2300:30;;;2267:68;;;;;2343:440;;2444:3;2437:4;2429:6;2425:17;2421:27;2411:2;;2462:1;2459;2452:12;2411:2;2499:6;2486:20;2521:64;2536:48;2577:6;2536:48;;;2521:64;;;2512:73;;2605:6;2598:5;2591:21;2641:4;2633:6;2629:17;2674:4;2667:5;2663:16;2709:3;2700:6;2695:3;2691:16;2688:25;2685:2;;;2726:1;2723;2716:12;2685:2;2736:41;2770:6;2765:3;2760;2736:41;;;2404:379;;;;;;;;2791:158;;2885:6;2872:20;2863:29;;2897:47;2938:5;2897:47;;;2857:92;;;;;2956:162;;3054:6;3048:13;3039:22;;3066:47;3107:5;3066:47;;;3033:85;;;;;3125:170;;3227:6;3221:13;3212:22;;3239:51;3284:5;3239:51;;;3206:89;;;;;3302:130;;3382:6;3369:20;3360:29;;3394:33;3421:5;3394:33;;;3354:78;;;;;3439:134;;3523:6;3517:13;3508:22;;3535:33;3562:5;3535:33;;;3502:71;;;;;3580:241;;3684:2;3672:9;3663:7;3659:23;3655:32;3652:2;;;3700:1;3697;3690:12;3652:2;3735:1;3752:53;3797:7;3788:6;3777:9;3773:22;3752:53;;;3742:63;;3714:97;3646:175;;;;;3828:263;;3943:2;3931:9;3922:7;3918:23;3914:32;3911:2;;;3959:1;3956;3949:12;3911:2;3994:1;4011:64;4067:7;4058:6;4047:9;4043:22;4011:64;;;4001:74;;3973:108;3905:186;;;;;4098:470;;;4228:2;4216:9;4207:7;4203:23;4199:32;4196:2;;;4244:1;4241;4234:12;4196:2;4279:1;4296:53;4341:7;4332:6;4321:9;4317:22;4296:53;;;4286:63;;4258:97;4414:2;4403:9;4399:18;4386:32;4438:18;4430:6;4427:30;4424:2;;;4470:1;4467;4460:12;4424:2;4490:62;4544:7;4535:6;4524:9;4520:22;4490:62;;;4480:72;;4365:193;4190:378;;;;;;4575:397;;;4714:2;4702:9;4693:7;4689:23;4685:32;4682:2;;;4730:1;4727;4720:12;4682:2;4793:1;4782:9;4778:17;4765:31;4816:18;4808:6;4805:30;4802:2;;;4848:1;4845;4838:12;4802:2;4876:80;4948:7;4939:6;4928:9;4924:22;4876:80;;;4866:90;;;;4744:218;4676:296;;;;;;4979:685;;;5175:2;5163:9;5154:7;5150:23;5146:32;5143:2;;;5191:1;5188;5181:12;5143:2;5247:1;5236:9;5232:17;5226:24;5270:18;5262:6;5259:30;5256:2;;;5302:1;5299;5292:12;5256:2;5322:103;5417:7;5408:6;5397:9;5393:22;5322:103;;;5312:113;;5205:226;5483:2;5472:9;5468:18;5462:25;5507:18;5499:6;5496:30;5493:2;;;5539:1;5536;5529:12;5493:2;5559:89;5640:7;5631:6;5620:9;5616:22;5559:89;;;5549:99;;5441:213;5137:527;;;;;;5671:392;;5811:2;5799:9;5790:7;5786:23;5782:32;5779:2;;;5827:1;5824;5817:12;5779:2;5883:1;5872:9;5868:17;5862:24;5906:18;5898:6;5895:30;5892:2;;;5938:1;5935;5928:12;5892:2;5958:89;6039:7;6030:6;6019:9;6015:22;5958:89;;;5948:99;;5841:212;5773:290;;;;;6070:257;;6182:2;6170:9;6161:7;6157:23;6153:32;6150:2;;;6198:1;6195;6188:12;6150:2;6233:1;6250:61;6303:7;6294:6;6283:9;6279:22;6250:61;;;6240:71;;6212:105;6144:183;;;;;6334:269;;6452:2;6440:9;6431:7;6427:23;6423:32;6420:2;;;6468:1;6465;6458:12;6420:2;6503:1;6520:67;6579:7;6570:6;6559:9;6555:22;6520:67;;;6510:77;;6482:111;6414:189;;;;;6610:299;;6743:2;6731:9;6722:7;6718:23;6714:32;6711:2;;;6759:1;6756;6749:12;6711:2;6794:1;6811:82;6885:7;6876:6;6865:9;6861:22;6811:82;;;6801:92;;6773:126;6705:204;;;;;6916:241;;7020:2;7008:9;6999:7;6995:23;6991:32;6988:2;;;7036:1;7033;7026:12;6988:2;7071:1;7088:53;7133:7;7124:6;7113:9;7109:22;7088:53;;;7078:63;;7050:97;6982:175;;;;;7164:263;;7279:2;7267:9;7258:7;7254:23;7250:32;7247:2;;;7295:1;7292;7285:12;7247:2;7330:1;7347:64;7403:7;7394:6;7383:9;7379:22;7347:64;;;7337:74;;7309:108;7241:186;;;;;7434:399;;;7566:2;7554:9;7545:7;7541:23;7537:32;7534:2;;;7582:1;7579;7572:12;7534:2;7617:1;7634:64;7690:7;7681:6;7670:9;7666:22;7634:64;;;7624:74;;7596:108;7735:2;7753:64;7809:7;7800:6;7789:9;7785:22;7753:64;;;7743:74;;7714:109;7528:305;;;;;;7840:535;;;;7989:2;7977:9;7968:7;7964:23;7960:32;7957:2;;;8005:1;8002;7995:12;7957:2;8040:1;8057:64;8113:7;8104:6;8093:9;8089:22;8057:64;;;8047:74;;8019:108;8158:2;8176:64;8232:7;8223:6;8212:9;8208:22;8176:64;;;8166:74;;8137:109;8277:2;8295:64;8351:7;8342:6;8331:9;8327:22;8295:64;;;8285:74;;8256:109;7951:424;;;;;;8383:173;;8470:46;8512:3;8504:6;8470:46;;;8545:4;8540:3;8536:14;8522:28;;8463:93;;;;;8564:103;8637:24;8655:5;8637:24;;;8632:3;8625:37;8619:48;;;8674:113;8757:24;8775:5;8757:24;;;8752:3;8745:37;8739:48;;;8825:690;;8970:54;9018:5;8970:54;;;9037:86;9116:6;9111:3;9037:86;;;9030:93;;9144:56;9194:5;9144:56;;;9220:7;9248:1;9233:260;9258:6;9255:1;9252:13;9233:260;;;9325:6;9319:13;9346:63;9405:3;9390:13;9346:63;;;9339:70;;9426:60;9479:6;9426:60;;;9416:70;;9290:203;9280:1;9277;9273:9;9268:14;;9233:260;;;9237:14;9506:3;9499:10;;8949:566;;;;;;;;9523:104;9600:21;9615:5;9600:21;;;9595:3;9588:34;9582:45;;;9634:343;;9744:38;9776:5;9744:38;;;9794:70;9857:6;9852:3;9794:70;;;9787:77;;9869:52;9914:6;9909:3;9902:4;9895:5;9891:16;9869:52;;;9942:29;9964:6;9942:29;;;9937:3;9933:39;9926:46;;9724:253;;;;;;9984:356;;10112:38;10144:5;10112:38;;;10162:88;10243:6;10238:3;10162:88;;;10155:95;;10255:52;10300:6;10295:3;10288:4;10281:5;10277:16;10255:52;;;10328:6;10323:3;10319:16;10312:23;;10092:248;;;;;;10347:142;10438:45;10477:5;10438:45;;;10433:3;10426:58;10420:69;;;10496:347;;10608:39;10641:5;10608:39;;;10659:71;10723:6;10718:3;10659:71;;;10652:78;;10735:52;10780:6;10775:3;10768:4;10761:5;10757:16;10735:52;;;10808:29;10830:6;10808:29;;;10803:3;10799:39;10792:46;;10588:255;;;;;;10851:311;;11011:67;11075:2;11070:3;11011:67;;;11004:74;;11111:13;11107:1;11102:3;11098:11;11091:34;11153:2;11148:3;11144:12;11137:19;;10997:165;;;;11171:306;;11331:66;11395:1;11390:3;11331:66;;;11324:73;;11430:9;11426:1;11421:3;11417:11;11410:30;11468:2;11463:3;11459:12;11452:19;;11317:160;;;;11486:311;;11646:67;11710:2;11705:3;11646:67;;;11639:74;;11746:13;11742:1;11737:3;11733:11;11726:34;11788:2;11783:3;11779:12;11772:19;;11632:165;;;;11806:327;;11966:67;12030:2;12025:3;11966:67;;;11959:74;;12066:29;12062:1;12057:3;12053:11;12046:50;12124:2;12119:3;12115:12;12108:19;;11952:181;;;;12142:303;;12302:66;12366:1;12361:3;12302:66;;;12295:73;;12401:6;12397:1;12392:3;12388:11;12381:27;12436:2;12431:3;12427:12;12420:19;;12288:157;;;;12454:314;;12614:67;12678:2;12673:3;12614:67;;;12607:74;;12714:16;12710:1;12705:3;12701:11;12694:37;12759:2;12754:3;12750:12;12743:19;;12600:168;;;;12777:370;;12937:67;13001:2;12996:3;12937:67;;;12930:74;;13037:34;13033:1;13028:3;13024:11;13017:55;13106:3;13101:2;13096:3;13092:12;13085:25;13138:2;13133:3;13129:12;13122:19;;12923:224;;;;13156:303;;13316:66;13380:1;13375:3;13316:66;;;13309:73;;13415:6;13411:1;13406:3;13402:11;13395:27;13450:2;13445:3;13441:12;13434:19;;13302:157;;;;13468:329;;13628:67;13692:2;13687:3;13628:67;;;13621:74;;13728:31;13724:1;13719:3;13715:11;13708:52;13788:2;13783:3;13779:12;13772:19;;13614:183;;;;13806:379;;13966:67;14030:2;14025:3;13966:67;;;13959:74;;14066:34;14062:1;14057:3;14053:11;14046:55;14135:12;14130:2;14125:3;14121:12;14114:34;14176:2;14171:3;14167:12;14160:19;;13952:233;;;;14194:308;;14354:66;14418:1;14413:3;14354:66;;;14347:73;;14453:11;14449:1;14444:3;14440:11;14433:32;14493:2;14488:3;14484:12;14477:19;;14340:162;;;;14511:391;;14671:67;14735:2;14730:3;14671:67;;;14664:74;;14771:34;14767:1;14762:3;14758:11;14751:55;14840:24;14835:2;14830:3;14826:12;14819:46;14893:2;14888:3;14884:12;14877:19;;14657:245;;;;14910:113;14993:24;15011:5;14993:24;;;14988:3;14981:37;14975:48;;;15030:262;;15174:93;15263:3;15254:6;15174:93;;;15167:100;;15284:3;15277:10;;15155:137;;;;;15299:213;;15417:2;15406:9;15402:18;15394:26;;15431:71;15499:1;15488:9;15484:17;15475:6;15431:71;;;15388:124;;;;;15519:324;;15665:2;15654:9;15650:18;15642:26;;15679:71;15747:1;15736:9;15732:17;15723:6;15679:71;;;15761:72;15829:2;15818:9;15814:18;15805:6;15761:72;;;15636:207;;;;;;15850:1027;;16180:3;16169:9;16165:19;16157:27;;16195:71;16263:1;16252:9;16248:17;16239:6;16195:71;;;16277:72;16345:2;16334:9;16330:18;16321:6;16277:72;;;16360;16428:2;16417:9;16413:18;16404:6;16360:72;;;16443;16511:2;16500:9;16496:18;16487:6;16443:72;;;16526:81;16602:3;16591:9;16587:19;16578:6;16526:81;;;16618;16694:3;16683:9;16679:19;16670:6;16618:81;;;16710:73;16778:3;16767:9;16763:19;16754:6;16710:73;;;16794;16862:3;16851:9;16847:19;16838:6;16794:73;;;16151:726;;;;;;;;;;;;16884:324;;17030:2;17019:9;17015:18;17007:26;;17044:71;17112:1;17101:9;17097:17;17088:6;17044:71;;;17126:72;17194:2;17183:9;17179:18;17170:6;17126:72;;;17001:207;;;;;;17215:201;;17327:2;17316:9;17312:18;17304:26;;17341:65;17403:1;17392:9;17388:17;17379:6;17341:65;;;17298:118;;;;;17423:297;;17559:2;17548:9;17544:18;17536:26;;17609:9;17603:4;17599:20;17595:1;17584:9;17580:17;17573:47;17634:76;17705:4;17696:6;17634:76;;;17626:84;;17530:190;;;;;17727:301;;17865:2;17854:9;17850:18;17842:26;;17915:9;17909:4;17905:20;17901:1;17890:9;17886:17;17879:47;17940:78;18013:4;18004:6;17940:78;;;17932:86;;17836:192;;;;;18035:407;;18226:2;18215:9;18211:18;18203:26;;18276:9;18270:4;18266:20;18262:1;18251:9;18247:17;18240:47;18301:131;18427:4;18301:131;;;18293:139;;18197:245;;;;18449:407;;18640:2;18629:9;18625:18;18617:26;;18690:9;18684:4;18680:20;18676:1;18665:9;18661:17;18654:47;18715:131;18841:4;18715:131;;;18707:139;;18611:245;;;;18863:407;;19054:2;19043:9;19039:18;19031:26;;19104:9;19098:4;19094:20;19090:1;19079:9;19075:17;19068:47;19129:131;19255:4;19129:131;;;19121:139;;19025:245;;;;19277:407;;19468:2;19457:9;19453:18;19445:26;;19518:9;19512:4;19508:20;19504:1;19493:9;19489:17;19482:47;19543:131;19669:4;19543:131;;;19535:139;;19439:245;;;;19691:407;;19882:2;19871:9;19867:18;19859:26;;19932:9;19926:4;19922:20;19918:1;19907:9;19903:17;19896:47;19957:131;20083:4;19957:131;;;19949:139;;19853:245;;;;20105:407;;20296:2;20285:9;20281:18;20273:26;;20346:9;20340:4;20336:20;20332:1;20321:9;20317:17;20310:47;20371:131;20497:4;20371:131;;;20363:139;;20267:245;;;;20519:407;;20710:2;20699:9;20695:18;20687:26;;20760:9;20754:4;20750:20;20746:1;20735:9;20731:17;20724:47;20785:131;20911:4;20785:131;;;20777:139;;20681:245;;;;20933:407;;21124:2;21113:9;21109:18;21101:26;;21174:9;21168:4;21164:20;21160:1;21149:9;21145:17;21138:47;21199:131;21325:4;21199:131;;;21191:139;;21095:245;;;;21347:407;;21538:2;21527:9;21523:18;21515:26;;21588:9;21582:4;21578:20;21574:1;21563:9;21559:17;21552:47;21613:131;21739:4;21613:131;;;21605:139;;21509:245;;;;21761:407;;21952:2;21941:9;21937:18;21929:26;;22002:9;21996:4;21992:20;21988:1;21977:9;21973:17;21966:47;22027:131;22153:4;22027:131;;;22019:139;;21923:245;;;;22175:407;;22366:2;22355:9;22351:18;22343:26;;22416:9;22410:4;22406:20;22402:1;22391:9;22387:17;22380:47;22441:131;22567:4;22441:131;;;22433:139;;22337:245;;;;22589:407;;22780:2;22769:9;22765:18;22757:26;;22830:9;22824:4;22820:20;22816:1;22805:9;22801:17;22794:47;22855:131;22981:4;22855:131;;;22847:139;;22751:245;;;;23003:213;;23121:2;23110:9;23106:18;23098:26;;23135:71;23203:1;23192:9;23188:17;23179:6;23135:71;;;23092:124;;;;;23223:324;;23369:2;23358:9;23354:18;23346:26;;23383:71;23451:1;23440:9;23436:17;23427:6;23383:71;;;23465:72;23533:2;23522:9;23518:18;23509:6;23465:72;;;23340:207;;;;;;23554:451;;23736:2;23725:9;23721:18;23713:26;;23750:71;23818:1;23807:9;23803:17;23794:6;23750:71;;;23832:72;23900:2;23889:9;23885:18;23876:6;23832:72;;;23915:80;23991:2;23980:9;23976:18;23967:6;23915:80;;;23707:298;;;;;;;24012:823;;24300:3;24289:9;24285:19;24277:27;;24315:71;24383:1;24372:9;24368:17;24359:6;24315:71;;;24397:80;24473:2;24462:9;24458:18;24449:6;24397:80;;;24525:9;24519:4;24515:20;24510:2;24499:9;24495:18;24488:48;24550:108;24653:4;24644:6;24550:108;;;24542:116;;24669:72;24737:2;24726:9;24722:18;24713:6;24669:72;;;24752:73;24820:3;24809:9;24805:19;24796:6;24752:73;;;24271:564;;;;;;;;;24842:324;;24988:2;24977:9;24973:18;24965:26;;25002:71;25070:1;25059:9;25055:17;25046:6;25002:71;;;25084:72;25152:2;25141:9;25137:18;25128:6;25084:72;;;24959:207;;;;;;25173:435;;25347:2;25336:9;25332:18;25324:26;;25361:71;25429:1;25418:9;25414:17;25405:6;25361:71;;;25443:72;25511:2;25500:9;25496:18;25487:6;25443:72;;;25526;25594:2;25583:9;25579:18;25570:6;25526:72;;;25318:290;;;;;;;25615:256;;25677:2;25671:9;25661:19;;25715:4;25707:6;25703:17;25814:6;25802:10;25799:22;25778:18;25766:10;25763:34;25760:62;25757:2;;;25835:1;25832;25825:12;25757:2;25855:10;25851:2;25844:22;25655:216;;;;;25878:318;;26051:18;26043:6;26040:30;26037:2;;;26083:1;26080;26073:12;26037:2;26118:4;26110:6;26106:17;26098:25;;26181:4;26175;26171:15;26163:23;;25974:222;;;;26203:304;;26362:18;26354:6;26351:30;26348:2;;;26394:1;26391;26384:12;26348:2;26429:4;26421:6;26417:17;26409:25;;26492:4;26486;26482:15;26474:23;;26285:222;;;;26514:321;;26657:18;26649:6;26646:30;26643:2;;;26689:1;26686;26679:12;26643:2;26756:4;26752:9;26745:4;26737:6;26733:17;26729:33;26721:41;;26820:4;26814;26810:15;26802:23;;26580:255;;;;26842:151;;26928:3;26920:11;;26966:4;26961:3;26957:14;26949:22;;26914:79;;;;27000:137;;27109:5;27103:12;27093:22;;27074:63;;;;27144:121;;27237:5;27231:12;27221:22;;27202:63;;;;27272:122;;27366:5;27360:12;27350:22;;27331:63;;;;27401:108;;27499:4;27494:3;27490:14;27482:22;;27476:33;;;;27517:178;;27647:6;27642:3;27635:19;27684:4;27679:3;27675:14;27660:29;;27628:67;;;;;27704:162;;27818:6;27813:3;27806:19;27855:4;27850:3;27846:14;27831:29;;27799:67;;;;;27875:144;;28010:3;27995:18;;27988:31;;;;;28028:163;;28143:6;28138:3;28131:19;28180:4;28175:3;28171:14;28156:29;;28124:67;;;;;28199:91;;28261:24;28279:5;28261:24;;;28250:35;;28244:46;;;;28297:85;;28370:5;28363:13;28356:21;28345:32;;28339:43;;;;28389:105;;28465:24;28483:5;28465:24;;;28454:35;;28448:46;;;;28501:109;;28581:24;28599:5;28581:24;;;28570:35;;28564:46;;;;28617:121;;28690:42;28683:5;28679:54;28668:65;;28662:76;;;;28745:72;;28807:5;28796:16;;28790:27;;;;28824:116;;28911:24;28929:5;28911:24;;;28898:37;;28892:48;;;;28948:145;29029:6;29024:3;29019;29006:30;29085:1;29076:6;29071:3;29067:16;29060:27;28999:94;;;;29102:268;29167:1;29174:101;29188:6;29185:1;29182:13;29174:101;;;29264:1;29259:3;29255:11;29249:18;29245:1;29240:3;29236:11;29229:39;29210:2;29207:1;29203:10;29198:15;;29174:101;;;29290:6;29287:1;29284:13;29281:2;;;29355:1;29346:6;29341:3;29337:16;29330:27;29281:2;29151:219;;;;;29378:97;;29466:2;29462:7;29457:2;29450:5;29446:14;29442:28;29432:38;;29426:49;;;;29483:117;29552:24;29570:5;29552:24;;;29545:5;29542:35;29532:2;;29591:1;29588;29581:12;29532:2;29526:74;;29607:111;29673:21;29688:5;29673:21;;;29666:5;29663:32;29653:2;;29709:1;29706;29699:12;29653:2;29647:71;;29725:145;29808:38;29840:5;29808:38;;;29801:5;29798:49;29788:2;;29861:1;29858;29851:12;29788:2;29782:88;;29877:153;29964:42;30000:5;29964:42;;;29957:5;29954:53;29944:2;;30021:1;30018;30011:12;29944:2;29938:92;;30037:117;30106:24;30124:5;30106:24;;;30099:5;30096:35;30086:2;;30145:1;30142;30135:12;30086:2;30080:74;
Metadata Hash
6e16a9a9dc30e823d7385529fd3b96b2986dc8e776329908de371496883ec297
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.