My Name Tag:
Not Available, login to update
[ Download CSV Export ]
OVERVIEW
Contract to provide one click staking.
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
Zap
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at moonbeam.moonscan.io on 2022-02-05 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // 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 (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @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) { return a + b; } /** * @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 a - b; } /** * @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) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting 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 a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting 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) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * 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) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File @openzeppelin/contracts/token/ERC20/[email protected] pragma solidity ^0.8.0; /** * @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 @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @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; 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"); (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"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { 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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/token/ERC20/utils/[email protected] pragma solidity ^0.8.0; /** * @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 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' 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) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _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 require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File @openzeppelin/contracts-upgradeable/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library AddressUpgradeable { /** * @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; 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"); (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"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { 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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts-upgradeable/proxy/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (proxy/utils/Initializable.sol) pragma solidity ^0.8.0; abstract contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private _initializing; /** * @dev Modifier to protect an initializer function from being invoked twice. */ modifier initializer() { // If the contract is initializing we ignore whether _initialized is set in order to support multiple // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the // contract may have been reentered. require(_initializing ? _isConstructor() : !_initialized, "Initializable: contract is already initialized"); bool isTopLevelCall = !_initializing; if (isTopLevelCall) { _initializing = true; _initialized = true; } _; if (isTopLevelCall) { _initializing = false; } } /** * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the * {initializer} modifier, directly or indirectly. */ modifier onlyInitializing() { require(_initializing, "Initializable: contract is not initializing"); _; } function _isConstructor() private view returns (bool) { return !AddressUpgradeable.isContract(address(this)); } } // File @openzeppelin/contracts-upgradeable/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.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 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 ContextUpgradeable is Initializable { function __Context_init() internal onlyInitializing { __Context_init_unchained(); } function __Context_init_unchained() internal onlyInitializing { } function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } uint256[50] private __gap; } // File @openzeppelin/contracts-upgradeable/access/[email protected] // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract OwnableUpgradeable is Initializable, ContextUpgradeable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function __Ownable_init() internal onlyInitializing { __Context_init_unchained(); __Ownable_init_unchained(); } function __Ownable_init_unchained() internal onlyInitializing { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } uint256[49] private __gap; } // File contracts/amm/interfaces/IStellaSwapV2Pair.sol pragma solidity >=0.5.0; interface IStellaSwapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // File contracts/amm/interfaces/IStellaSwapV2Router01.sol pragma solidity >=0.6.2; interface IStellaSwapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // File contracts/amm/interfaces/IStellaSwapV2Router02.sol pragma solidity >=0.6.2; interface IStellaSwapV2Router02 is IStellaSwapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // File contracts/amm/interfaces/IWETH.sol pragma solidity >=0.5.0; interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; } // File contracts/zap/Zap.sol pragma solidity ^0.8.0; /* * Stellaswap * MIT License; modified from TraderJoe from PancakeBunny * */ contract Zap is OwnableUpgradeable { using SafeMath for uint256; using SafeERC20 for IERC20; /* ========== CONSTANT VARIABLES ========== */ address public STELLA; address public constant USDC = 0x818ec0A7Fe18Ff94269904fCED6AE3DaE6d6dC0b; address public constant WGLMR = 0xAcc15dC74880C9944775448304B263D191c6077F; IStellaSwapV2Router02 private ROUTER; /* ========== STATE VARIABLES ========== */ mapping(address => bool) private notLP; mapping(address => address) private routePairAddresses; address[] public tokens; uint256 public zapInFees; // divided by 10,000 uint256 public zapOutFees; // divided by 10,000 /* ========== INITIALIZER ========== */ function initialize(address _stella, address _router) external initializer { __Ownable_init(); require(owner() != address(0), "ZapETH: owner must be set"); STELLA = _stella; ROUTER = IStellaSwapV2Router02(_router); setNotLP(WGLMR); setNotLP(USDC); setNotLP(STELLA); zapInFees = 50; zapOutFees = 25; } receive() external payable {} /* ========== View Functions ========== */ function isLP(address _address) public view returns (bool) { return !notLP[_address]; } function routePair(address _address) external view returns (address) { return routePairAddresses[_address]; } /* ========== External Functions ========== */ function zapInToken( address _from, uint256 amount, address _to ) external { IERC20(_from).safeTransferFrom(msg.sender, address(this), amount); _approveTokenIfNeeded(_from); if (isLP(_to)) { IStellaSwapV2Pair pair = IStellaSwapV2Pair(_to); address token0 = pair.token0(); address token1 = pair.token1(); if (_from == token0 || _from == token1) { uint256 toDeduct = amount.mul(zapInFees).div(10000); // charge 0.5% fees. amount = amount.sub(toDeduct); // swap half amount for other address other = _from == token0 ? token1 : token0; _approveTokenIfNeeded(other); uint256 sellAmount = amount.div(2); uint256 otherAmount = _swap(_from, sellAmount, other, address(this)); ROUTER.addLiquidity( _from, other, amount.sub(sellAmount), otherAmount, 0, 0, msg.sender, block.timestamp ); } } } function zapIn(address _to) external payable { _swapGLMRToLP(_to, msg.value, msg.sender); } function zapOut(address _from, uint256 amount) external { IERC20(_from).safeTransferFrom(msg.sender, address(this), amount); _approveTokenIfNeeded(_from); uint256 toDeduct = amount.mul(zapOutFees).div(10000); // charge 0.5% fees. amount = amount.sub(toDeduct); if (!isLP(_from)) { _swapTokenForGLMR(_from, amount, msg.sender); } else { IStellaSwapV2Pair pair = IStellaSwapV2Pair(_from); address token0 = pair.token0(); address token1 = pair.token1(); if (token0 == WGLMR || token1 == WGLMR) { ROUTER.removeLiquidityETH( token0 != WGLMR ? token0 : token1, amount, 0, 0, msg.sender, block.timestamp ); } else { ROUTER.removeLiquidity(token0, token1, amount, 0, 0, msg.sender, block.timestamp); } } } /* ========== Private Functions ========== */ function _approveTokenIfNeeded(address token) private { if (IERC20(token).allowance(address(this), address(ROUTER)) == 0) { IERC20(token).safeApprove(address(ROUTER), type(uint128).max); } } function _swapGLMRToLP( address lp, uint256 amount, address receiver ) private { uint256 toDeduct = amount.mul(zapInFees).div(10000); // charge 0.5% fees. amount = amount.sub(toDeduct); if (!isLP(lp)) { _swapGLMRForToken(lp, amount, receiver); } else { // lp IStellaSwapV2Pair pair = IStellaSwapV2Pair(lp); address token0 = pair.token0(); address token1 = pair.token1(); if (token0 == WGLMR || token1 == WGLMR) { address token = token0 == WGLMR ? token1 : token0; uint256 swapValue = amount.div(2); uint256 tokenAmount = _swapGLMRForToken(token, swapValue, address(this)); _approveTokenIfNeeded(token); ROUTER.addLiquidityETH{value: amount.sub(swapValue)}( token, tokenAmount, 0, 0, receiver, block.timestamp ); } else { uint256 swapValue = amount.div(2); uint256 token0Amount = _swapGLMRForToken(token0, swapValue, address(this)); uint256 token1Amount = _swapGLMRForToken(token1, amount.sub(swapValue), address(this)); _approveTokenIfNeeded(token0); _approveTokenIfNeeded(token1); ROUTER.addLiquidity(token0, token1, token0Amount, token1Amount, 0, 0, receiver, block.timestamp); } } } function _swapGLMRForToken( address token, uint256 value, address receiver ) private returns (uint256) { address[] memory path; if (routePairAddresses[token] != address(0)) { path = new address[](3); path[0] = WGLMR; path[1] = routePairAddresses[token]; path[2] = token; } else { path = new address[](2); path[0] = WGLMR; path[1] = token; } uint256[] memory amounts = ROUTER.swapExactETHForTokens{value: value}(0, path, receiver, block.timestamp); return amounts[amounts.length - 1]; } function _swapTokenForGLMR( address token, uint256 amount, address receiver ) private returns (uint256) { address[] memory path; if (routePairAddresses[token] != address(0)) { path = new address[](3); path[0] = token; path[1] = routePairAddresses[token]; path[2] = WGLMR; } else { path = new address[](2); path[0] = token; path[1] = WGLMR; } uint256[] memory amounts = ROUTER.swapExactTokensForETH(amount, 0, path, receiver, block.timestamp); return amounts[amounts.length - 1]; } function _swap( address _from, uint256 amount, address _to, address receiver ) private returns (uint256) { address[] memory path; path = new address[](2); path[0] = _from; path[1] = _to; uint256[] memory amounts = ROUTER.swapExactTokensForTokens(amount, 0, path, receiver, block.timestamp); return amounts[amounts.length - 1]; } /* ========== RESTRICTED FUNCTIONS ========== */ function setRoutePairAddress(address asset, address route) external onlyOwner { routePairAddresses[asset] = route; } function setNotLP(address token) public onlyOwner { bool needPush = notLP[token] == false; notLP[token] = true; if (needPush) { tokens.push(token); } } function removeToken(uint256 i) external onlyOwner { address token = tokens[i]; notLP[token] = false; tokens[i] = tokens[tokens.length - 1]; tokens.pop(); } function sweep() external onlyOwner { for (uint256 i = 0; i < tokens.length; i++) { address token = tokens[i]; if (token == address(0)) continue; uint256 amount = IERC20(token).balanceOf(address(this)); if (amount > 0) { if (token == WGLMR) { IWETH(token).withdraw(amount); } else { _swapTokenForGLMR(token, amount, owner()); } } } uint256 balance = address(this).balance; if (balance > 0) { payable(owner()).transfer(balance); } } function withdraw(address token) external onlyOwner { if (token == address(0)) { payable(owner()).transfer(address(this).balance); return; } IERC20(token).transfer(owner(), IERC20(token).balanceOf(address(this))); } function setZapInFees(uint256 _newZapInFees) public onlyOwner { require( 0 <= _newZapInFees && _newZapInFees <= 200, "Zap In Fees cannot be more than 2%" ); zapInFees = _newZapInFees; } function setZapOutFees(uint256 _newZapOutFees) public onlyOwner { require( 0 <= _newZapOutFees && _newZapOutFees <= 200, "Zap Out Fees cannot be more than 2%" ); zapOutFees = _newZapOutFees; } }
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"STELLA","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WGLMR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_stella","type":"address"},{"internalType":"address","name":"_router","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isLP","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"i","type":"uint256"}],"name":"removeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"routePair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"setNotLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"route","type":"address"}],"name":"setRoutePairAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newZapInFees","type":"uint256"}],"name":"setZapInFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newZapOutFees","type":"uint256"}],"name":"setZapOutFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"zapIn","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"zapInFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"zapInToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"zapOut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zapOutFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561001057600080fd5b5061478b806100206000396000f3fe6080604052600436106101395760003560e01c806366280fdc116100ab5780638da5cb5b1161006f5780638da5cb5b146103e157806391d754c41461040c578063985c9d5614610437578063d9139f6314610474578063f2fde38b1461049d578063fe47068d146104c657610140565b806366280fdc1461030c5780636f1b606114610337578063715018a6146103625780637df0f7671461037957806389a30271146103b657610140565b806323a66e1c116100fd57806323a66e1c1461021457806335faa4161461023d57806336c5d72414610254578063485cc9551461027d5780634f64b2be146102a657806351cff8d9146102e357610140565b80630e8891af146101455780631085815b146101705780631c286c8a146101995780631c4009f9146101c25780631eff9adb146101eb57610140565b3661014057005b600080fd5b34801561015157600080fd5b5061015a6104e2565b60405161016791906143a0565b60405180910390f35b34801561017c57600080fd5b50610197600480360381019061019291906139b6565b6104e8565b005b3480156101a557600080fd5b506101c060048036038101906101bb9190613885565b6105bf565b005b3480156101ce57600080fd5b506101e960048036038101906101e491906138fd565b6106bd565b005b3480156101f757600080fd5b50610212600480360381019061020d9190613833565b610a05565b005b34801561022057600080fd5b5061023b600480360381019061023691906139b6565b610b9e565b005b34801561024957600080fd5b50610252610c75565b005b34801561026057600080fd5b5061027b600480360381019061027691906139b6565b610f7f565b005b34801561028957600080fd5b506102a4600480360381019061029f9190613885565b611225565b005b3480156102b257600080fd5b506102cd60048036038101906102c891906139b6565b611481565b6040516102da9190613fc5565b60405180910390f35b3480156102ef57600080fd5b5061030a60048036038101906103059190613833565b6114c0565b005b34801561031857600080fd5b506103216116e5565b60405161032e91906143a0565b60405180910390f35b34801561034357600080fd5b5061034c6116eb565b6040516103599190613fc5565b60405180910390f35b34801561036e57600080fd5b50610377611711565b005b34801561038557600080fd5b506103a0600480360381019061039b9190613833565b611799565b6040516103ad91906141b7565b60405180910390f35b3480156103c257600080fd5b506103cb6117f0565b6040516103d89190613fc5565b60405180910390f35b3480156103ed57600080fd5b506103f6611808565b6040516104039190613fc5565b60405180910390f35b34801561041857600080fd5b50610421611832565b60405161042e9190613fc5565b60405180910390f35b34801561044357600080fd5b5061045e60048036038101906104599190613833565b61184a565b60405161046b9190613fc5565b60405180910390f35b34801561048057600080fd5b5061049b600480360381019061049691906138c1565b6118b3565b005b3480156104a957600080fd5b506104c460048036038101906104bf9190613833565b611cb6565b005b6104e060048036038101906104db9190613833565b611dae565b005b606a5481565b6104f0611dbc565b73ffffffffffffffffffffffffffffffffffffffff1661050e611808565b73ffffffffffffffffffffffffffffffffffffffff1614610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055b906142e0565b60405180910390fd5b80600011158015610576575060c88111155b6105b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ac906142c0565b60405180910390fd5b80606b8190555050565b6105c7611dbc565b73ffffffffffffffffffffffffffffffffffffffff166105e5611808565b73ffffffffffffffffffffffffffffffffffffffff161461063b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610632906142e0565b60405180910390fd5b80606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6106ea3330848673ffffffffffffffffffffffffffffffffffffffff16611dc4909392919063ffffffff16565b6106f383611e4d565b6106fc81611799565b15610a0057600081905060008173ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561074e57600080fd5b505afa158015610762573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610786919061385c565b905060008273ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156107d057600080fd5b505afa1580156107e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610808919061385c565b90508173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148061086f57508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b156109fc57600061089f612710610891606a5489611f6590919063ffffffff16565b611f7b90919063ffffffff16565b90506108b48187611f9190919063ffffffff16565b955060008373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146108f157836108f3565b825b90506108fe81611e4d565b6000610914600289611f7b90919063ffffffff16565b905060006109248a838530611fa7565b9050606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e337008b85610979868e611f9190919063ffffffff16565b8560008033426040518963ffffffff1660e01b81526004016109a29897969594939291906140af565b606060405180830381600087803b1580156109bc57600080fd5b505af11580156109d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f49190613a44565b505050505050505b5050505b505050565b610a0d611dbc565b73ffffffffffffffffffffffffffffffffffffffff16610a2b611808565b73ffffffffffffffffffffffffffffffffffffffff1614610a81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a78906142e0565b60405180910390fd5b6000801515606760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151490506001606760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015610b9a576069829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b610ba6611dbc565b73ffffffffffffffffffffffffffffffffffffffff16610bc4611808565b73ffffffffffffffffffffffffffffffffffffffff1614610c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c11906142e0565b60405180910390fd5b80600011158015610c2c575060c88111155b610c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6290614280565b60405180910390fd5b80606a8190555050565b610c7d611dbc565b73ffffffffffffffffffffffffffffffffffffffff16610c9b611808565b73ffffffffffffffffffffffffffffffffffffffff1614610cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce8906142e0565b60405180910390fd5b60005b606980549050811015610f1e57600060698281548110610d3d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610da55750610f0b565b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610de09190613fc5565b60206040518083038186803b158015610df857600080fd5b505afa158015610e0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3091906139df565b90506000811115610f085773acc15dc74880c9944775448304b263d191c6077f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ef3578173ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b8152600401610ebc91906143a0565b600060405180830381600087803b158015610ed657600080fd5b505af1158015610eea573d6000803e3d6000fd5b50505050610f07565b610f058282610f00611808565b612220565b505b5b50505b8080610f1690614629565b915050610cf4565b5060004790506000811115610f7c57610f35611808565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610f7a573d6000803e3d6000fd5b505b50565b610f87611dbc565b73ffffffffffffffffffffffffffffffffffffffff16610fa5611808565b73ffffffffffffffffffffffffffffffffffffffff1614610ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff2906142e0565b60405180910390fd5b600060698281548110611037577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000606760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550606960016069805490506110d09190614568565b81548110611107577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166069838154811061116c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060698054806111ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555050565b600060019054906101000a900460ff1661124d5760008054906101000a900460ff1615611256565b611255612789565b5b611295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128c906142a0565b60405180910390fd5b60008060019054906101000a900460ff1615905080156112e5576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6112ed61279a565b600073ffffffffffffffffffffffffffffffffffffffff1661130d611808565b73ffffffffffffffffffffffffffffffffffffffff161415611364576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135b90614300565b60405180910390fd5b82606560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081606660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061140373acc15dc74880c9944775448304b263d191c6077f610a05565b61142073818ec0a7fe18ff94269904fced6ae3dae6d6dc0b610a05565b61144b606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610a05565b6032606a819055506019606b81905550801561147c5760008060016101000a81548160ff0219169083151502179055505b505050565b6069818154811061149157600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6114c8611dbc565b73ffffffffffffffffffffffffffffffffffffffff166114e6611808565b73ffffffffffffffffffffffffffffffffffffffff161461153c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611533906142e0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115c457611579611808565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156115be573d6000803e3d6000fd5b506116e2565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6115e8611808565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016116219190613fc5565b60206040518083038186803b15801561163957600080fd5b505afa15801561164d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167191906139df565b6040518363ffffffff1660e01b815260040161168e92919061412d565b602060405180830381600087803b1580156116a857600080fd5b505af11580156116bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e0919061398d565b505b50565b606b5481565b606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611719611dbc565b73ffffffffffffffffffffffffffffffffffffffff16611737611808565b73ffffffffffffffffffffffffffffffffffffffff161461178d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611784906142e0565b60405180910390fd5b61179760006127fb565b565b6000606760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b73818ec0a7fe18ff94269904fced6ae3dae6d6dc0b81565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b73acc15dc74880c9944775448304b263d191c6077f81565b6000606860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6118e03330838573ffffffffffffffffffffffffffffffffffffffff16611dc4909392919063ffffffff16565b6118e982611e4d565b6000611914612710611906606b5485611f6590919063ffffffff16565b611f7b90919063ffffffff16565b90506119298183611f9190919063ffffffff16565b915061193483611799565b61194957611943838333612220565b50611cb1565b600083905060008173ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561199657600080fd5b505afa1580156119aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ce919061385c565b905060008273ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015611a1857600080fd5b505afa158015611a2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a50919061385c565b905073acc15dc74880c9944775448304b263d191c6077f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480611adf575073acc15dc74880c9944775448304b263d191c6077f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15611bf157606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302751cec73acc15dc74880c9944775448304b263d191c6077f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611b705782611b72565b835b8760008033426040518763ffffffff1660e01b8152600401611b9996959493929190614156565b6040805180830381600087803b158015611bb257600080fd5b505af1158015611bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bea9190613a08565b5050611cad565b606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663baa2abde83838860008033426040518863ffffffff1660e01b8152600401611c599796959493929190614040565b6040805180830381600087803b158015611c7257600080fd5b505af1158015611c86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611caa9190613a08565b50505b5050505b505050565b611cbe611dbc565b73ffffffffffffffffffffffffffffffffffffffff16611cdc611808565b73ffffffffffffffffffffffffffffffffffffffff1614611d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d29906142e0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611da2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9990614240565b60405180910390fd5b611dab816127fb565b50565b611db98134336128c1565b50565b600033905090565b611e47846323b872dd60e01b858585604051602401611de593929190614009565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612d3c565b50505050565b60008173ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611eac929190613fe0565b60206040518083038186803b158015611ec457600080fd5b505afa158015611ed8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efc91906139df565b1415611f6257611f61606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff80168373ffffffffffffffffffffffffffffffffffffffff16612e039092919063ffffffff16565b5b50565b60008183611f73919061450e565b905092915050565b60008183611f8991906144dd565b905092915050565b60008183611f9f9190614568565b905092915050565b60006060600267ffffffffffffffff811115611fec577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561201a5781602001602082028036833780820191505090505b5090508581600081518110612058577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505083816001815181106120cd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338ed17398760008588426040518663ffffffff1660e01b815260040161216d9594939291906143bb565b600060405180830381600087803b15801561218757600080fd5b505af115801561219b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906121c4919061394c565b905080600182516121d59190614568565b8151811061220c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015192505050949350505050565b60006060600073ffffffffffffffffffffffffffffffffffffffff16606860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461250057600367ffffffffffffffff8111156122f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156123265781602001602082028036833780820191505090505b5090508481600081518110612364577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050606860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612438577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073acc15dc74880c9944775448304b263d191c6077f816002815181106124c1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612671565b600267ffffffffffffffff811115612541577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561256f5781602001602082028036833780820191505090505b50905084816000815181106125ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073acc15dc74880c9944775448304b263d191c6077f81600181518110612636577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b6000606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318cbafe58660008588426040518663ffffffff1660e01b81526004016126d79594939291906143bb565b600060405180830381600087803b1580156126f157600080fd5b505af1158015612705573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061272e919061394c565b9050806001825161273f9190614568565b81518110612776577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151925050509392505050565b600061279430612f61565b15905090565b600060019054906101000a900460ff166127e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e090614340565b60405180910390fd5b6127f1612f74565b6127f9612fc5565b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006128ec6127106128de606a5486611f6590919063ffffffff16565b611f7b90919063ffffffff16565b90506129018184611f9190919063ffffffff16565b925061290c84611799565b6129215761291b848484613026565b50612d36565b600084905060008173ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561296e57600080fd5b505afa158015612982573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129a6919061385c565b905060008273ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156129f057600080fd5b505afa158015612a04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a28919061385c565b905073acc15dc74880c9944775448304b263d191c6077f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480612ab7575073acc15dc74880c9944775448304b263d191c6077f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15612c1557600073acc15dc74880c9944775448304b263d191c6077f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612b0b5782612b0d565b815b90506000612b25600289611f7b90919063ffffffff16565b90506000612b34838330613026565b9050612b3f83611e4d565b606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719612b90848c611f9190919063ffffffff16565b85846000808e426040518863ffffffff1660e01b8152600401612bb896959493929190614156565b6060604051808303818588803b158015612bd157600080fd5b505af1158015612be5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c0a9190613a44565b505050505050612d32565b6000612c2b600288611f7b90919063ffffffff16565b90506000612c3a848330613026565b90506000612c5b84612c55858c611f9190919063ffffffff16565b30613026565b9050612c6685611e4d565b612c6f84611e4d565b606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e33700868685856000808f426040518963ffffffff1660e01b8152600401612cd99897969594939291906140af565b606060405180830381600087803b158015612cf357600080fd5b505af1158015612d07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2b9190613a44565b5050505050505b5050505b50505050565b6000612d9e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661358e9092919063ffffffff16565b9050600081511115612dfe5780806020019051810190612dbe919061398d565b612dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df490614360565b60405180910390fd5b5b505050565b6000811480612e9c575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401612e4a929190613fe0565b60206040518083038186803b158015612e6257600080fd5b505afa158015612e76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9a91906139df565b145b612edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed290614380565b60405180910390fd5b612f5c8363095ea7b360e01b8484604051602401612efa92919061412d565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612d3c565b505050565b600080823b905060008111915050919050565b600060019054906101000a900460ff16612fc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fba90614340565b60405180910390fd5b565b600060019054906101000a900460ff16613014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300b90614340565b60405180910390fd5b61302461301f611dbc565b6127fb565b565b60006060600073ffffffffffffffffffffffffffffffffffffffff16606860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461330657600367ffffffffffffffff8111156130fe577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561312c5781602001602082028036833780820191505090505b50905073acc15dc74880c9944775448304b263d191c6077f8160008151811061317e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050606860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110613252577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505084816002815181106132c7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613477565b600267ffffffffffffffff811115613347577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156133755781602001602082028036833780820191505090505b50905073acc15dc74880c9944775448304b263d191c6077f816000815181106133c7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050848160018151811061343c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505b6000606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637ff36ab58660008588426040518663ffffffff1660e01b81526004016134dc94939291906141d2565b6000604051808303818588803b1580156134f557600080fd5b505af1158015613509573d6000803e3d6000fd5b50505050506040513d6000823e3d601f19601f82011682018060405250810190613533919061394c565b905080600182516135449190614568565b8151811061357b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151925050509392505050565b606061359d84846000856135a6565b90509392505050565b6060824710156135eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135e290614260565b60405180910390fd5b6135f4856136ba565b613633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362a90614320565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161365c9190613fae565b60006040518083038185875af1925050503d8060008114613699576040519150601f19603f3d011682016040523d82523d6000602084013e61369e565b606091505b50915091506136ae8282866136cd565b92505050949350505050565b600080823b905060008111915050919050565b606083156136dd5782905061372d565b6000835111156136f05782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613724919061421e565b60405180910390fd5b9392505050565b600061374761374284614446565b614415565b9050808382526020820190508285602086028201111561376657600080fd5b60005b85811015613796578161377c888261381e565b845260208401935060208301925050600181019050613769565b5050509392505050565b6000813590506137af81614710565b92915050565b6000815190506137c481614710565b92915050565b600082601f8301126137db57600080fd5b81516137eb848260208601613734565b91505092915050565b60008151905061380381614727565b92915050565b6000813590506138188161473e565b92915050565b60008151905061382d8161473e565b92915050565b60006020828403121561384557600080fd5b6000613853848285016137a0565b91505092915050565b60006020828403121561386e57600080fd5b600061387c848285016137b5565b91505092915050565b6000806040838503121561389857600080fd5b60006138a6858286016137a0565b92505060206138b7858286016137a0565b9150509250929050565b600080604083850312156138d457600080fd5b60006138e2858286016137a0565b92505060206138f385828601613809565b9150509250929050565b60008060006060848603121561391257600080fd5b6000613920868287016137a0565b935050602061393186828701613809565b9250506040613942868287016137a0565b9150509250925092565b60006020828403121561395e57600080fd5b600082015167ffffffffffffffff81111561397857600080fd5b613984848285016137ca565b91505092915050565b60006020828403121561399f57600080fd5b60006139ad848285016137f4565b91505092915050565b6000602082840312156139c857600080fd5b60006139d684828501613809565b91505092915050565b6000602082840312156139f157600080fd5b60006139ff8482850161381e565b91505092915050565b60008060408385031215613a1b57600080fd5b6000613a298582860161381e565b9250506020613a3a8582860161381e565b9150509250929050565b600080600060608486031215613a5957600080fd5b6000613a678682870161381e565b9350506020613a788682870161381e565b9250506040613a898682870161381e565b9150509250925092565b6000613a9f8383613aab565b60208301905092915050565b613ab48161459c565b82525050565b613ac38161459c565b82525050565b6000613ad482614482565b613ade81856144b0565b9350613ae983614472565b8060005b83811015613b1a578151613b018882613a93565b9750613b0c836144a3565b925050600181019050613aed565b5085935050505092915050565b613b30816145ae565b82525050565b6000613b418261448d565b613b4b81856144c1565b9350613b5b8185602086016145f6565b80840191505092915050565b613b70816145e4565b82525050565b6000613b8182614498565b613b8b81856144cc565b9350613b9b8185602086016145f6565b613ba4816146ff565b840191505092915050565b6000613bbc6026836144cc565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c226026836144cc565b91507f416464726573733a20696e73756666696369656e742062616c616e636520666f60008301527f722063616c6c00000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c886022836144cc565b91507f5a617020496e20466565732063616e6e6f74206265206d6f7265207468616e2060008301527f32250000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613cee602e836144cc565b91507f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008301527f647920696e697469616c697a65640000000000000000000000000000000000006020830152604082019050919050565b6000613d546023836144cc565b91507f5a6170204f757420466565732063616e6e6f74206265206d6f7265207468616e60008301527f20322500000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613dba6020836144cc565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613dfa6019836144cc565b91507f5a61704554483a206f776e6572206d75737420626520736574000000000000006000830152602082019050919050565b6000613e3a601d836144cc565b91507f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006000830152602082019050919050565b6000613e7a602b836144cc565b91507f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008301527f6e697469616c697a696e670000000000000000000000000000000000000000006020830152604082019050919050565b6000613ee0602a836144cc565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000613f466036836144cc565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b613fa8816145da565b82525050565b6000613fba8284613b36565b915081905092915050565b6000602082019050613fda6000830184613aba565b92915050565b6000604082019050613ff56000830185613aba565b6140026020830184613aba565b9392505050565b600060608201905061401e6000830186613aba565b61402b6020830185613aba565b6140386040830184613f9f565b949350505050565b600060e082019050614055600083018a613aba565b6140626020830189613aba565b61406f6040830188613f9f565b61407c6060830187613b67565b6140896080830186613b67565b61409660a0830185613aba565b6140a360c0830184613f9f565b98975050505050505050565b6000610100820190506140c5600083018b613aba565b6140d2602083018a613aba565b6140df6040830189613f9f565b6140ec6060830188613f9f565b6140f96080830187613b67565b61410660a0830186613b67565b61411360c0830185613aba565b61412060e0830184613f9f565b9998505050505050505050565b60006040820190506141426000830185613aba565b61414f6020830184613f9f565b9392505050565b600060c08201905061416b6000830189613aba565b6141786020830188613f9f565b6141856040830187613b67565b6141926060830186613b67565b61419f6080830185613aba565b6141ac60a0830184613f9f565b979650505050505050565b60006020820190506141cc6000830184613b27565b92915050565b60006080820190506141e76000830187613b67565b81810360208301526141f98186613ac9565b90506142086040830185613aba565b6142156060830184613f9f565b95945050505050565b600060208201905081810360008301526142388184613b76565b905092915050565b6000602082019050818103600083015261425981613baf565b9050919050565b6000602082019050818103600083015261427981613c15565b9050919050565b6000602082019050818103600083015261429981613c7b565b9050919050565b600060208201905081810360008301526142b981613ce1565b9050919050565b600060208201905081810360008301526142d981613d47565b9050919050565b600060208201905081810360008301526142f981613dad565b9050919050565b6000602082019050818103600083015261431981613ded565b9050919050565b6000602082019050818103600083015261433981613e2d565b9050919050565b6000602082019050818103600083015261435981613e6d565b9050919050565b6000602082019050818103600083015261437981613ed3565b9050919050565b6000602082019050818103600083015261439981613f39565b9050919050565b60006020820190506143b56000830184613f9f565b92915050565b600060a0820190506143d06000830188613f9f565b6143dd6020830187613b67565b81810360408301526143ef8186613ac9565b90506143fe6060830185613aba565b61440b6080830184613f9f565b9695505050505050565b6000604051905081810181811067ffffffffffffffff8211171561443c5761443b6146d0565b5b8060405250919050565b600067ffffffffffffffff821115614461576144606146d0565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006144e8826145da565b91506144f3836145da565b925082614503576145026146a1565b5b828204905092915050565b6000614519826145da565b9150614524836145da565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561455d5761455c614672565b5b828202905092915050565b6000614573826145da565b915061457e836145da565b92508282101561459157614590614672565b5b828203905092915050565b60006145a7826145ba565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006145ef826145da565b9050919050565b60005b838110156146145780820151818401526020810190506145f9565b83811115614623576000848401525b50505050565b6000614634826145da565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561466757614666614672565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6147198161459c565b811461472457600080fd5b50565b614730816145ae565b811461473b57600080fd5b50565b614747816145da565b811461475257600080fd5b5056fea26469706673582212206d0e164c4c454f1575e12c5b14c82f94c37ebda06c0ac37be4a8f8ed4f45bd2364736f6c63430008000033
Deployed ByteCode Sourcemap
42747:9686:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43336:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52180:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50428:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44268:1243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50566:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51929:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50984:654;;;;;;;;;;;;;:::i;:::-;;50779:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43491:388;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43304:23;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51646:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43388:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42911:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33873:103;;;;;;;;;;;;;:::i;:::-;;43974:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42939:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33222:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43019:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44083:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45632:1037;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34131:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45519:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43336:24;;;;:::o;52180:250::-;33453:12;:10;:12::i;:::-;33442:23;;:7;:5;:7::i;:::-;:23;;;33434:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52282:14:::1;52277:1;:19;;:44;;;;;52318:3;52300:14;:21;;52277:44;52255:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;52408:14;52395:10;:27;;;;52180:250:::0;:::o;50428:130::-;33453:12;:10;:12::i;:::-;33442:23;;:7;:5;:7::i;:::-;:23;;;33434:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50545:5:::1;50517:18;:25;50536:5;50517:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;50428:130:::0;;:::o;44268:1243::-;44386:65;44417:10;44437:4;44444:6;44393:5;44386:30;;;;:65;;;;;;:::i;:::-;44462:28;44484:5;44462:21;:28::i;:::-;44507:9;44512:3;44507:4;:9::i;:::-;44503:1001;;;44533:22;44576:3;44533:47;;44595:14;44612:4;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44595:30;;44640:14;44657:4;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44640:30;;44698:6;44689:15;;:5;:15;;;:34;;;;44717:6;44708:15;;:5;:15;;;44689:34;44685:808;;;44744:16;44763:32;44789:5;44763:21;44774:9;;44763:6;:10;;:21;;;;:::i;:::-;:25;;:32;;;;:::i;:::-;44744:51;;44844:20;44855:8;44844:6;:10;;:20;;;;:::i;:::-;44835:29;;44930:13;44955:6;44946:15;;:5;:15;;;:33;;44973:6;44946:33;;;44964:6;44946:33;44930:49;;44998:28;45020:5;44998:21;:28::i;:::-;45045:18;45066:13;45077:1;45066:6;:10;;:13;;;;:::i;:::-;45045:34;;45098:19;45120:46;45126:5;45133:10;45145:5;45160:4;45120:5;:46::i;:::-;45098:68;;45185:6;;;;;;;;;;;:19;;;45227:5;45255;45283:22;45294:10;45283:6;:10;;:22;;;;:::i;:::-;45328:11;45362:1;45386;45410:10;45443:15;45185:292;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;44685:808;;;;;44503:1001;;;;44268:1243;;;:::o;50566:205::-;33453:12;:10;:12::i;:::-;33442:23;;:7;:5;:7::i;:::-;:23;;;33434:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50627:13:::1;50659:5:::0;50643:21:::1;;:5;:12;50649:5;50643:12;;;;;;;;;;;;;;;;;;;;;;;;;:21;;;50627:37;;50690:4;50675:5;:12;50681:5;50675:12;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;;;;;;;50709:8;50705:59;;;50734:6;50746:5;50734:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50705:59;33513:1;50566:205:::0;:::o;51929:243::-;33453:12;:10;:12::i;:::-;33442:23;;:7;:5;:7::i;:::-;:23;;;33434:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52029:13:::1;52024:1;:18;;:42;;;;;52063:3;52046:13;:20;;52024:42;52002:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;52151:13;52139:9;:25;;;;51929:243:::0;:::o;50984:654::-;33453:12;:10;:12::i;:::-;33442:23;;:7;:5;:7::i;:::-;:23;;;33434:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51036:9:::1;51031:460;51055:6;:13;;;;51051:1;:17;51031:460;;;51090:13;51106:6;51113:1;51106:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51090:25;;51151:1;51134:19;;:5;:19;;;51130:33;;;51155:8;;;51130:33;51178:14;51202:5;51195:23;;;51227:4;51195:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51178:55;;51261:1;51252:6;:10;51248:232;;;43051:42;51287:14;;:5;:14;;;51283:182;;;51332:5;51326:21;;;51348:6;51326:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;51283:182;;;51404:41;51422:5;51429:6;51437:7;:5;:7::i;:::-;51404:17;:41::i;:::-;;51283:182;51248:232;51031:460;;;51070:3;;;;;:::i;:::-;;;;51031:460;;;;51503:15;51521:21;51503:39;;51567:1;51557:7;:11;51553:78;;;51593:7;:5;:7::i;:::-;51585:25;;:34;51611:7;51585:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;51553:78;33513:1;50984:654::o:0;50779:197::-;33453:12;:10;:12::i;:::-;33442:23;;:7;:5;:7::i;:::-;:23;;;33434:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50841:13:::1;50857:6;50864:1;50857:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50841:25;;50892:5;50877;:12;50883:5;50877:12;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;50920:6;50943:1;50927:6;:13;;;;:17;;;;:::i;:::-;50920:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50908:6;50915:1;50908:9;;;;;;;;;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;50956:6;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33513:1;50779:197:::0;:::o;43491:388::-;29913:13;;;;;;;;;;;:48;;29949:12;;;;;;;;;;29948:13;29913:48;;;29929:16;:14;:16::i;:::-;29913:48;29905:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;30025:19;30048:13;;;;;;;;;;;30047:14;30025:36;;30076:14;30072:101;;;30123:4;30107:13;;:20;;;;;;;;;;;;;;;;;;30157:4;30142:12;;:19;;;;;;;;;;;;;;;;;;30072:101;43577:16:::1;:14;:16::i;:::-;43631:1;43612:21;;:7;:5;:7::i;:::-;:21;;;;43604:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;43685:7;43676:6;;:16;;;;;;;;;;;;;;;;;;43734:7;43703:6;;:39;;;;;;;;;;;;;;;;;;43753:15;43051:42;43753:8;:15::i;:::-;43779:14;42970:42;43779:8;:14::i;:::-;43804:16;43813:6;;;;;;;;;;;43804:8;:16::i;:::-;43843:2;43831:9;:14;;;;43869:2;43856:10;:15;;;;30203:14:::0;30199:68;;;30250:5;30234:13;;:21;;;;;;;;;;;;;;;;;;30199:68;43491:388;;;:::o;43304:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51646:275::-;33453:12;:10;:12::i;:::-;33442:23;;:7;:5;:7::i;:::-;:23;;;33434:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51730:1:::1;51713:19;;:5;:19;;;51709:121;;;51757:7;:5;:7::i;:::-;51749:25;;:48;51775:21;51749:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;51812:7;;51709:121;51849:5;51842:22;;;51865:7;:5;:7::i;:::-;51881:5;51874:23;;;51906:4;51874:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51842:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33513:1;51646:275:::0;:::o;43388:25::-;;;;:::o;42911:21::-;;;;;;;;;;;;;:::o;33873:103::-;33453:12;:10;:12::i;:::-;33442:23;;:7;:5;:7::i;:::-;:23;;;33434:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33938:30:::1;33965:1;33938:18;:30::i;:::-;33873:103::o:0;43974:101::-;44027:4;44052:5;:15;44058:8;44052:15;;;;;;;;;;;;;;;;;;;;;;;;;44051:16;44044:23;;43974:101;;;:::o;42939:73::-;42970:42;42939:73;:::o;33222:87::-;33268:7;33295:6;;;;;;;;;;;33288:13;;33222:87;:::o;43019:74::-;43051:42;43019:74;:::o;44083:123::-;44143:7;44170:18;:28;44189:8;44170:28;;;;;;;;;;;;;;;;;;;;;;;;;44163:35;;44083:123;;;:::o;45632:1037::-;45699:65;45730:10;45750:4;45757:6;45706:5;45699:30;;;;:65;;;;;;:::i;:::-;45775:28;45797:5;45775:21;:28::i;:::-;45816:16;45835:33;45862:5;45835:22;45846:10;;45835:6;:10;;:22;;;;:::i;:::-;:26;;:33;;;;:::i;:::-;45816:52;;45909:20;45920:8;45909:6;:10;;:20;;;;:::i;:::-;45900:29;;45947:11;45952:5;45947:4;:11::i;:::-;45942:720;;45975:44;45993:5;46000:6;46008:10;45975:17;:44::i;:::-;;45942:720;;;46052:22;46095:5;46052:49;;46116:14;46133:4;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46116:30;;46161:14;46178:4;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46161:30;;43051:42;46210:15;;:6;:15;;;:34;;;;43051:42;46229:15;;:6;:15;;;46210:34;46206:445;;;46265:6;;;;;;;;;;;:25;;;43051:42;46313:15;;:6;:15;;;;:33;;46340:6;46313:33;;;46331:6;46313:33;46369:6;46398:1;46422;46446:10;46479:15;46265:248;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;46206:445;;;46554:6;;;;;;;;;;;:22;;;46577:6;46585;46593;46601:1;46604;46607:10;46619:15;46554:81;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;46206:445;45942:720;;;;45632:1037;;;:::o;34131:201::-;33453:12;:10;:12::i;:::-;33442:23;;:7;:5;:7::i;:::-;:23;;;33434:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34240:1:::1;34220:22;;:8;:22;;;;34212:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34296:28;34315:8;34296:18;:28::i;:::-;34131:201:::0;:::o;45519:105::-;45575:41;45589:3;45594:9;45605:10;45575:13;:41::i;:::-;45519:105;:::o;31656:98::-;31709:7;31736:10;31729:17;;31656:98;:::o;18732:248::-;18876:96;18896:5;18926:27;;;18955:4;18961:2;18965:5;18903:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18876:19;:96::i;:::-;18732:248;;;;:::o;46730:226::-;46858:1;46806:5;46799:23;;;46831:4;46846:6;;;;;;;;;;;46799:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;46795:154;;;46876:61;46910:6;;;;;;;;;;;46919:17;46876:61;;46883:5;46876:25;;;;:61;;;;;:::i;:::-;46795:154;46730:226;:::o;3501:98::-;3559:7;3590:1;3586;:5;;;;:::i;:::-;3579:12;;3501:98;;;;:::o;3900:::-;3958:7;3989:1;3985;:5;;;;:::i;:::-;3978:12;;3900:98;;;;:::o;3144:::-;3202:7;3233:1;3229;:5;;;;:::i;:::-;3222:12;;3144:98;;;;:::o;49936:428::-;50073:7;50093:21;50146:1;50132:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50125:23;;50169:5;50159:4;50164:1;50159:7;;;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;50195:3;50185:4;50190:1;50185:7;;;;;;;;;;;;;;;;;;;;;:13;;;;;;;;;;;50209:24;50236:6;;;;;;;;;;;:31;;;50268:6;50276:1;50279:4;50285:8;50295:15;50236:75;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50209:102;;50329:7;50354:1;50337:7;:14;:18;;;;:::i;:::-;50329:27;;;;;;;;;;;;;;;;;;;;;;50322:34;;;;49936:428;;;;;;:::o;49264:664::-;49391:7;49411:21;49484:1;49447:39;;:18;:25;49466:5;49447:25;;;;;;;;;;;;;;;;;;;;;;;;;:39;;;49443:321;;49524:1;49510:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49503:23;;49551:5;49541:4;49546:1;49541:7;;;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;49581:18;:25;49600:5;49581:25;;;;;;;;;;;;;;;;;;;;;;;;;49571:4;49576:1;49571:7;;;;;;;;;;;;;;;;;;;;;:35;;;;;;;;;;;43051:42;49621:4;49626:1;49621:7;;;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;49443:321;;;49690:1;49676:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49669:23;;49717:5;49707:4;49712:1;49707:7;;;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;43051:42;49737:4;49742:1;49737:7;;;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;49443:321;49776:24;49803:6;;;;;;;;;;;:28;;;49832:6;49840:1;49843:4;49849:8;49859:15;49803:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49776:99;;49893:7;49918:1;49901:7;:14;:18;;;;:::i;:::-;49893:27;;;;;;;;;;;;;;;;;;;;;;49886:34;;;;49264:664;;;;;:::o;30605:125::-;30653:4;30678:44;30716:4;30678:29;:44::i;:::-;30677:45;30670:52;;30605:125;:::o;32886:134::-;30516:13;;;;;;;;;;;30508:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;32949:26:::1;:24;:26::i;:::-;32986;:24;:26::i;:::-;32886:134::o:0;34492:191::-;34566:16;34585:6;;;;;;;;;;;34566:25;;34611:8;34602:6;;:17;;;;;;;;;;;;;;;;;;34666:8;34635:40;;34656:8;34635:40;;;;;;;;;;;;34492:191;;:::o;46964:1615::-;47096:16;47115:32;47141:5;47115:21;47126:9;;47115:6;:10;;:21;;;;:::i;:::-;:25;;:32;;;;:::i;:::-;47096:51;;47188:20;47199:8;47188:6;:10;;:20;;;;:::i;:::-;47179:29;;47226:8;47231:2;47226:4;:8::i;:::-;47221:1351;;47251:39;47269:2;47273:6;47281:8;47251:17;:39::i;:::-;;47221:1351;;;47342:22;47385:2;47342:46;;47403:14;47420:4;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47403:30;;47448:14;47465:4;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47448:30;;43051:42;47497:15;;:6;:15;;;:34;;;;43051:42;47516:15;;:6;:15;;;47497:34;47493:1068;;;47552:13;43051:42;47568:15;;:6;:15;;;:33;;47595:6;47568:33;;;47586:6;47568:33;47552:49;;47620:17;47640:13;47651:1;47640:6;:10;;:13;;;;:::i;:::-;47620:33;;47672:19;47694:50;47712:5;47719:9;47738:4;47694:17;:50::i;:::-;47672:72;;47765:28;47787:5;47765:21;:28::i;:::-;47812:6;;;;;;;;;;;:22;;;47842:21;47853:9;47842:6;:10;;:21;;;;:::i;:::-;47887:5;47915:11;47949:1;47973;47997:8;48028:15;47812:250;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;47493:1068;;;;;;48103:17;48123:13;48134:1;48123:6;:10;;:13;;;;:::i;:::-;48103:33;;48155:20;48178:51;48196:6;48204:9;48223:4;48178:17;:51::i;:::-;48155:74;;48248:20;48271:63;48289:6;48297:21;48308:9;48297:6;:10;;:21;;;;:::i;:::-;48328:4;48271:17;:63::i;:::-;48248:86;;48353:29;48375:6;48353:21;:29::i;:::-;48401;48423:6;48401:21;:29::i;:::-;48449:6;;;;;;;;;;;:19;;;48469:6;48477;48485:12;48499;48513:1;48516;48519:8;48529:15;48449:96;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;47493:1068;;;;47221:1351;;;;46964:1615;;;;:::o;21086:716::-;21510:23;21536:69;21564:4;21536:69;;;;;;;;;;;;;;;;;21544:5;21536:27;;;;:69;;;;;:::i;:::-;21510:95;;21640:1;21620:10;:17;:21;21616:179;;;21717:10;21706:30;;;;;;;;;;;;:::i;:::-;21698:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;21616:179;21086:716;;;:::o;19249:616::-;19622:1;19613:5;:10;19612:62;;;;19672:1;19629:5;:15;;;19653:4;19660:7;19629:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;19612:62;19590:166;;;;;;;;;;;;:::i;:::-;;;;;;;;;19767:90;19787:5;19817:22;;;19841:7;19850:5;19794:62;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19767:19;:90::i;:::-;19249:616;;;:::o;22671:387::-;22731:4;22939:12;23006:7;22994:20;22986:28;;23049:1;23042:4;:8;23035:15;;;22671:387;;;:::o;31580:70::-;30516:13;;;;;;;;;;;30508:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;31580:70::o;33028:113::-;30516:13;;;;;;;;;;;30508:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;33101:32:::1;33120:12;:10;:12::i;:::-;33101:18;:32::i;:::-;33028:113::o:0;48587:669::-;48713:7;48733:21;48808:1;48771:39;;:18;:25;48790:5;48771:25;;;;;;;;;;;;;;;;;;;;;;;;;:39;;;48767:321;;48848:1;48834:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48827:23;;43051:42;48865:4;48870:1;48865:7;;;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;48905:18;:25;48924:5;48905:25;;;;;;;;;;;;;;;;;;;;;;;;;48895:4;48900:1;48895:7;;;;;;;;;;;;;;;;;;;;;:35;;;;;;;;;;;48955:5;48945:4;48950:1;48945:7;;;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;48767:321;;;49014:1;49000:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48993:23;;43051:42;49031:4;49036:1;49031:7;;;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;49071:5;49061:4;49066:1;49061:7;;;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;48767:321;49098:24;49125:6;;;;;;;;;;;:28;;;49161:5;49168:1;49171:4;49177:8;49187:15;49125:78;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49098:105;;49221:7;49246:1;49229:7;:14;:18;;;;:::i;:::-;49221:27;;;;;;;;;;;;;;;;;;;;;;49214:34;;;;48587:669;;;;;:::o;13353:229::-;13490:12;13522:52;13544:6;13552:4;13558:1;13561:12;13522:21;:52::i;:::-;13515:59;;13353:229;;;;;:::o;14473:510::-;14643:12;14701:5;14676:21;:30;;14668:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;14768:18;14779:6;14768:10;:18::i;:::-;14760:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;14834:12;14848:23;14875:6;:11;;14894:5;14901:4;14875:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14833:73;;;;14924:51;14941:7;14950:10;14962:12;14924:16;:51::i;:::-;14917:58;;;;14473:510;;;;;;:::o;10547:387::-;10607:4;10815:12;10882:7;10870:20;10862:28;;10925:1;10918:4;:8;10911:15;;;10547:387;;;:::o;17159:712::-;17309:12;17338:7;17334:530;;;17369:10;17362:17;;;;17334:530;17503:1;17483:10;:17;:21;17479:374;;;17681:10;17675:17;17742:15;17729:10;17725:2;17721:19;17714:44;17629:148;17824:12;17817:20;;;;;;;;;;;:::i;:::-;;;;;;;;17159:712;;;;;;:::o;24:644:1:-;;156:80;171:64;228:6;171:64;:::i;:::-;156:80;:::i;:::-;147:89;;256:5;284:6;277:5;270:21;310:4;303:5;299:16;292:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;402:1;399;392:12;350:2;430:1;415:247;440:6;437:1;434:13;415:247;;;507:3;535:48;579:3;567:10;535:48;:::i;:::-;530:3;523:61;613:4;608:3;604:14;597:21;;647:4;642:3;638:14;631:21;;475:187;462:1;459;455:9;450:14;;415:247;;;419:14;137:531;;;;;;;:::o;674:139::-;;758:6;745:20;736:29;;774:33;801:5;774:33;:::i;:::-;726:87;;;;:::o;819:143::-;;907:6;901:13;892:22;;923:33;950:5;923:33;:::i;:::-;882:80;;;;:::o;985:318::-;;1116:3;1109:4;1101:6;1097:17;1093:27;1083:2;;1134:1;1131;1124:12;1083:2;1167:6;1161:13;1192:105;1293:3;1285:6;1278:4;1270:6;1266:17;1192:105;:::i;:::-;1183:114;;1073:230;;;;;:::o;1309:137::-;;1394:6;1388:13;1379:22;;1410:30;1434:5;1410:30;:::i;:::-;1369:77;;;;:::o;1452:139::-;;1536:6;1523:20;1514:29;;1552:33;1579:5;1552:33;:::i;:::-;1504:87;;;;:::o;1597:143::-;;1685:6;1679:13;1670:22;;1701:33;1728:5;1701:33;:::i;:::-;1660:80;;;;:::o;1746:262::-;;1854:2;1842:9;1833:7;1829:23;1825:32;1822:2;;;1870:1;1867;1860:12;1822:2;1913:1;1938:53;1983:7;1974:6;1963:9;1959:22;1938:53;:::i;:::-;1928:63;;1884:117;1812:196;;;;:::o;2014:284::-;;2133:2;2121:9;2112:7;2108:23;2104:32;2101:2;;;2149:1;2146;2139:12;2101:2;2192:1;2217:64;2273:7;2264:6;2253:9;2249:22;2217:64;:::i;:::-;2207:74;;2163:128;2091:207;;;;:::o;2304:407::-;;;2429:2;2417:9;2408:7;2404:23;2400:32;2397:2;;;2445:1;2442;2435:12;2397:2;2488:1;2513:53;2558:7;2549:6;2538:9;2534:22;2513:53;:::i;:::-;2503:63;;2459:117;2615:2;2641:53;2686:7;2677:6;2666:9;2662:22;2641:53;:::i;:::-;2631:63;;2586:118;2387:324;;;;;:::o;2717:407::-;;;2842:2;2830:9;2821:7;2817:23;2813:32;2810:2;;;2858:1;2855;2848:12;2810:2;2901:1;2926:53;2971:7;2962:6;2951:9;2947:22;2926:53;:::i;:::-;2916:63;;2872:117;3028:2;3054:53;3099:7;3090:6;3079:9;3075:22;3054:53;:::i;:::-;3044:63;;2999:118;2800:324;;;;;:::o;3130:552::-;;;;3272:2;3260:9;3251:7;3247:23;3243:32;3240:2;;;3288:1;3285;3278:12;3240:2;3331:1;3356:53;3401:7;3392:6;3381:9;3377:22;3356:53;:::i;:::-;3346:63;;3302:117;3458:2;3484:53;3529:7;3520:6;3509:9;3505:22;3484:53;:::i;:::-;3474:63;;3429:118;3586:2;3612:53;3657:7;3648:6;3637:9;3633:22;3612:53;:::i;:::-;3602:63;;3557:118;3230:452;;;;;:::o;3688:420::-;;3832:2;3820:9;3811:7;3807:23;3803:32;3800:2;;;3848:1;3845;3838:12;3800:2;3912:1;3901:9;3897:17;3891:24;3942:18;3934:6;3931:30;3928:2;;;3974:1;3971;3964:12;3928:2;4002:89;4083:7;4074:6;4063:9;4059:22;4002:89;:::i;:::-;3992:99;;3862:239;3790:318;;;;:::o;4114:278::-;;4230:2;4218:9;4209:7;4205:23;4201:32;4198:2;;;4246:1;4243;4236:12;4198:2;4289:1;4314:61;4367:7;4358:6;4347:9;4343:22;4314:61;:::i;:::-;4304:71;;4260:125;4188:204;;;;:::o;4398:262::-;;4506:2;4494:9;4485:7;4481:23;4477:32;4474:2;;;4522:1;4519;4512:12;4474:2;4565:1;4590:53;4635:7;4626:6;4615:9;4611:22;4590:53;:::i;:::-;4580:63;;4536:117;4464:196;;;;:::o;4666:284::-;;4785:2;4773:9;4764:7;4760:23;4756:32;4753:2;;;4801:1;4798;4791:12;4753:2;4844:1;4869:64;4925:7;4916:6;4905:9;4901:22;4869:64;:::i;:::-;4859:74;;4815:128;4743:207;;;;:::o;4956:440::-;;;5092:2;5080:9;5071:7;5067:23;5063:32;5060:2;;;5108:1;5105;5098:12;5060:2;5151:1;5176:64;5232:7;5223:6;5212:9;5208:22;5176:64;:::i;:::-;5166:74;;5122:128;5289:2;5315:64;5371:7;5362:6;5351:9;5347:22;5315:64;:::i;:::-;5305:74;;5260:129;5050:346;;;;;:::o;5402:596::-;;;;5555:2;5543:9;5534:7;5530:23;5526:32;5523:2;;;5571:1;5568;5561:12;5523:2;5614:1;5639:64;5695:7;5686:6;5675:9;5671:22;5639:64;:::i;:::-;5629:74;;5585:128;5752:2;5778:64;5834:7;5825:6;5814:9;5810:22;5778:64;:::i;:::-;5768:74;;5723:129;5891:2;5917:64;5973:7;5964:6;5953:9;5949:22;5917:64;:::i;:::-;5907:74;;5862:129;5513:485;;;;;:::o;6004:179::-;;6094:46;6136:3;6128:6;6094:46;:::i;:::-;6172:4;6167:3;6163:14;6149:28;;6084:99;;;;:::o;6189:108::-;6266:24;6284:5;6266:24;:::i;:::-;6261:3;6254:37;6244:53;;:::o;6303:118::-;6390:24;6408:5;6390:24;:::i;:::-;6385:3;6378:37;6368:53;;:::o;6457:732::-;;6605:54;6653:5;6605:54;:::i;:::-;6675:86;6754:6;6749:3;6675:86;:::i;:::-;6668:93;;6785:56;6835:5;6785:56;:::i;:::-;6864:7;6895:1;6880:284;6905:6;6902:1;6899:13;6880:284;;;6981:6;6975:13;7008:63;7067:3;7052:13;7008:63;:::i;:::-;7001:70;;7094:60;7147:6;7094:60;:::i;:::-;7084:70;;6940:224;6927:1;6924;6920:9;6915:14;;6880:284;;;6884:14;7180:3;7173:10;;6581:608;;;;;;;:::o;7195:109::-;7276:21;7291:5;7276:21;:::i;:::-;7271:3;7264:34;7254:50;;:::o;7310:373::-;;7442:38;7474:5;7442:38;:::i;:::-;7496:88;7577:6;7572:3;7496:88;:::i;:::-;7489:95;;7593:52;7638:6;7633:3;7626:4;7619:5;7615:16;7593:52;:::i;:::-;7670:6;7665:3;7661:16;7654:23;;7418:265;;;;;:::o;7689:147::-;7784:45;7823:5;7784:45;:::i;:::-;7779:3;7772:58;7762:74;;:::o;7842:364::-;;7958:39;7991:5;7958:39;:::i;:::-;8013:71;8077:6;8072:3;8013:71;:::i;:::-;8006:78;;8093:52;8138:6;8133:3;8126:4;8119:5;8115:16;8093:52;:::i;:::-;8170:29;8192:6;8170:29;:::i;:::-;8165:3;8161:39;8154:46;;7934:272;;;;;:::o;8212:370::-;;8375:67;8439:2;8434:3;8375:67;:::i;:::-;8368:74;;8472:34;8468:1;8463:3;8459:11;8452:55;8538:8;8533:2;8528:3;8524:12;8517:30;8573:2;8568:3;8564:12;8557:19;;8358:224;;;:::o;8588:370::-;;8751:67;8815:2;8810:3;8751:67;:::i;:::-;8744:74;;8848:34;8844:1;8839:3;8835:11;8828:55;8914:8;8909:2;8904:3;8900:12;8893:30;8949:2;8944:3;8940:12;8933:19;;8734:224;;;:::o;8964:366::-;;9127:67;9191:2;9186:3;9127:67;:::i;:::-;9120:74;;9224:34;9220:1;9215:3;9211:11;9204:55;9290:4;9285:2;9280:3;9276:12;9269:26;9321:2;9316:3;9312:12;9305:19;;9110:220;;;:::o;9336:378::-;;9499:67;9563:2;9558:3;9499:67;:::i;:::-;9492:74;;9596:34;9592:1;9587:3;9583:11;9576:55;9662:16;9657:2;9652:3;9648:12;9641:38;9705:2;9700:3;9696:12;9689:19;;9482:232;;;:::o;9720:367::-;;9883:67;9947:2;9942:3;9883:67;:::i;:::-;9876:74;;9980:34;9976:1;9971:3;9967:11;9960:55;10046:5;10041:2;10036:3;10032:12;10025:27;10078:2;10073:3;10069:12;10062:19;;9866:221;;;:::o;10093:330::-;;10256:67;10320:2;10315:3;10256:67;:::i;:::-;10249:74;;10353:34;10349:1;10344:3;10340:11;10333:55;10414:2;10409:3;10405:12;10398:19;;10239:184;;;:::o;10429:323::-;;10592:67;10656:2;10651:3;10592:67;:::i;:::-;10585:74;;10689:27;10685:1;10680:3;10676:11;10669:48;10743:2;10738:3;10734:12;10727:19;;10575:177;;;:::o;10758:327::-;;10921:67;10985:2;10980:3;10921:67;:::i;:::-;10914:74;;11018:31;11014:1;11009:3;11005:11;10998:52;11076:2;11071:3;11067:12;11060:19;;10904:181;;;:::o;11091:375::-;;11254:67;11318:2;11313:3;11254:67;:::i;:::-;11247:74;;11351:34;11347:1;11342:3;11338:11;11331:55;11417:13;11412:2;11407:3;11403:12;11396:35;11457:2;11452:3;11448:12;11441:19;;11237:229;;;:::o;11472:374::-;;11635:67;11699:2;11694:3;11635:67;:::i;:::-;11628:74;;11732:34;11728:1;11723:3;11719:11;11712:55;11798:12;11793:2;11788:3;11784:12;11777:34;11837:2;11832:3;11828:12;11821:19;;11618:228;;;:::o;11852:386::-;;12015:67;12079:2;12074:3;12015:67;:::i;:::-;12008:74;;12112:34;12108:1;12103:3;12099:11;12092:55;12178:24;12173:2;12168:3;12164:12;12157:46;12229:2;12224:3;12220:12;12213:19;;11998:240;;;:::o;12244:118::-;12331:24;12349:5;12331:24;:::i;:::-;12326:3;12319:37;12309:53;;:::o;12368:271::-;;12520:93;12609:3;12600:6;12520:93;:::i;:::-;12513:100;;12630:3;12623:10;;12502:137;;;;:::o;12645:222::-;;12776:2;12765:9;12761:18;12753:26;;12789:71;12857:1;12846:9;12842:17;12833:6;12789:71;:::i;:::-;12743:124;;;;:::o;12873:332::-;;13032:2;13021:9;13017:18;13009:26;;13045:71;13113:1;13102:9;13098:17;13089:6;13045:71;:::i;:::-;13126:72;13194:2;13183:9;13179:18;13170:6;13126:72;:::i;:::-;12999:206;;;;;:::o;13211:442::-;;13398:2;13387:9;13383:18;13375:26;;13411:71;13479:1;13468:9;13464:17;13455:6;13411:71;:::i;:::-;13492:72;13560:2;13549:9;13545:18;13536:6;13492:72;:::i;:::-;13574;13642:2;13631:9;13627:18;13618:6;13574:72;:::i;:::-;13365:288;;;;;;:::o;13659:918::-;;13974:3;13963:9;13959:19;13951:27;;13988:71;14056:1;14045:9;14041:17;14032:6;13988:71;:::i;:::-;14069:72;14137:2;14126:9;14122:18;14113:6;14069:72;:::i;:::-;14151;14219:2;14208:9;14204:18;14195:6;14151:72;:::i;:::-;14233:80;14309:2;14298:9;14294:18;14285:6;14233:80;:::i;:::-;14323:81;14399:3;14388:9;14384:19;14375:6;14323:81;:::i;:::-;14414:73;14482:3;14471:9;14467:19;14458:6;14414:73;:::i;:::-;14497;14565:3;14554:9;14550:19;14541:6;14497:73;:::i;:::-;13941:636;;;;;;;;;;:::o;14583:1029::-;;14926:3;14915:9;14911:19;14903:27;;14940:71;15008:1;14997:9;14993:17;14984:6;14940:71;:::i;:::-;15021:72;15089:2;15078:9;15074:18;15065:6;15021:72;:::i;:::-;15103;15171:2;15160:9;15156:18;15147:6;15103:72;:::i;:::-;15185;15253:2;15242:9;15238:18;15229:6;15185:72;:::i;:::-;15267:81;15343:3;15332:9;15328:19;15319:6;15267:81;:::i;:::-;15358;15434:3;15423:9;15419:19;15410:6;15358:81;:::i;:::-;15449:73;15517:3;15506:9;15502:19;15493:6;15449:73;:::i;:::-;15532;15600:3;15589:9;15585:19;15576:6;15532:73;:::i;:::-;14893:719;;;;;;;;;;;:::o;15618:332::-;;15777:2;15766:9;15762:18;15754:26;;15790:71;15858:1;15847:9;15843:17;15834:6;15790:71;:::i;:::-;15871:72;15939:2;15928:9;15924:18;15915:6;15871:72;:::i;:::-;15744:206;;;;;:::o;15956:807::-;;16243:3;16232:9;16228:19;16220:27;;16257:71;16325:1;16314:9;16310:17;16301:6;16257:71;:::i;:::-;16338:72;16406:2;16395:9;16391:18;16382:6;16338:72;:::i;:::-;16420:80;16496:2;16485:9;16481:18;16472:6;16420:80;:::i;:::-;16510;16586:2;16575:9;16571:18;16562:6;16510:80;:::i;:::-;16600:73;16668:3;16657:9;16653:19;16644:6;16600:73;:::i;:::-;16683;16751:3;16740:9;16736:19;16727:6;16683:73;:::i;:::-;16210:553;;;;;;;;;:::o;16769:210::-;;16894:2;16883:9;16879:18;16871:26;;16907:65;16969:1;16958:9;16954:17;16945:6;16907:65;:::i;:::-;16861:118;;;;:::o;16985:720::-;;17258:3;17247:9;17243:19;17235:27;;17272:79;17348:1;17337:9;17333:17;17324:6;17272:79;:::i;:::-;17398:9;17392:4;17388:20;17383:2;17372:9;17368:18;17361:48;17426:108;17529:4;17520:6;17426:108;:::i;:::-;17418:116;;17544:72;17612:2;17601:9;17597:18;17588:6;17544:72;:::i;:::-;17626;17694:2;17683:9;17679:18;17670:6;17626:72;:::i;:::-;17225:480;;;;;;;:::o;17711:313::-;;17862:2;17851:9;17847:18;17839:26;;17911:9;17905:4;17901:20;17897:1;17886:9;17882:17;17875:47;17939:78;18012:4;18003:6;17939:78;:::i;:::-;17931:86;;17829:195;;;;:::o;18030:419::-;;18234:2;18223:9;18219:18;18211:26;;18283:9;18277:4;18273:20;18269:1;18258:9;18254:17;18247:47;18311:131;18437:4;18311:131;:::i;:::-;18303:139;;18201:248;;;:::o;18455:419::-;;18659:2;18648:9;18644:18;18636:26;;18708:9;18702:4;18698:20;18694:1;18683:9;18679:17;18672:47;18736:131;18862:4;18736:131;:::i;:::-;18728:139;;18626:248;;;:::o;18880:419::-;;19084:2;19073:9;19069:18;19061:26;;19133:9;19127:4;19123:20;19119:1;19108:9;19104:17;19097:47;19161:131;19287:4;19161:131;:::i;:::-;19153:139;;19051:248;;;:::o;19305:419::-;;19509:2;19498:9;19494:18;19486:26;;19558:9;19552:4;19548:20;19544:1;19533:9;19529:17;19522:47;19586:131;19712:4;19586:131;:::i;:::-;19578:139;;19476:248;;;:::o;19730:419::-;;19934:2;19923:9;19919:18;19911:26;;19983:9;19977:4;19973:20;19969:1;19958:9;19954:17;19947:47;20011:131;20137:4;20011:131;:::i;:::-;20003:139;;19901:248;;;:::o;20155:419::-;;20359:2;20348:9;20344:18;20336:26;;20408:9;20402:4;20398:20;20394:1;20383:9;20379:17;20372:47;20436:131;20562:4;20436:131;:::i;:::-;20428:139;;20326:248;;;:::o;20580:419::-;;20784:2;20773:9;20769:18;20761:26;;20833:9;20827:4;20823:20;20819:1;20808:9;20804:17;20797:47;20861:131;20987:4;20861:131;:::i;:::-;20853:139;;20751:248;;;:::o;21005:419::-;;21209:2;21198:9;21194:18;21186:26;;21258:9;21252:4;21248:20;21244:1;21233:9;21229:17;21222:47;21286:131;21412:4;21286:131;:::i;:::-;21278:139;;21176:248;;;:::o;21430:419::-;;21634:2;21623:9;21619:18;21611:26;;21683:9;21677:4;21673:20;21669:1;21658:9;21654:17;21647:47;21711:131;21837:4;21711:131;:::i;:::-;21703:139;;21601:248;;;:::o;21855:419::-;;22059:2;22048:9;22044:18;22036:26;;22108:9;22102:4;22098:20;22094:1;22083:9;22079:17;22072:47;22136:131;22262:4;22136:131;:::i;:::-;22128:139;;22026:248;;;:::o;22280:419::-;;22484:2;22473:9;22469:18;22461:26;;22533:9;22527:4;22523:20;22519:1;22508:9;22504:17;22497:47;22561:131;22687:4;22561:131;:::i;:::-;22553:139;;22451:248;;;:::o;22705:222::-;;22836:2;22825:9;22821:18;22813:26;;22849:71;22917:1;22906:9;22902:17;22893:6;22849:71;:::i;:::-;22803:124;;;;:::o;22933:831::-;;23234:3;23223:9;23219:19;23211:27;;23248:71;23316:1;23305:9;23301:17;23292:6;23248:71;:::i;:::-;23329:80;23405:2;23394:9;23390:18;23381:6;23329:80;:::i;:::-;23456:9;23450:4;23446:20;23441:2;23430:9;23426:18;23419:48;23484:108;23587:4;23578:6;23484:108;:::i;:::-;23476:116;;23602:72;23670:2;23659:9;23655:18;23646:6;23602:72;:::i;:::-;23684:73;23752:3;23741:9;23737:19;23728:6;23684:73;:::i;:::-;23201:563;;;;;;;;:::o;23770:283::-;;23836:2;23830:9;23820:19;;23878:4;23870:6;23866:17;23985:6;23973:10;23970:22;23949:18;23937:10;23934:34;23931:62;23928:2;;;23996:18;;:::i;:::-;23928:2;24036:10;24032:2;24025:22;23810:243;;;;:::o;24059:311::-;;24226:18;24218:6;24215:30;24212:2;;;24248:18;;:::i;:::-;24212:2;24298:4;24290:6;24286:17;24278:25;;24358:4;24352;24348:15;24340:23;;24141:229;;;:::o;24376:132::-;;24466:3;24458:11;;24496:4;24491:3;24487:14;24479:22;;24448:60;;;:::o;24514:114::-;;24615:5;24609:12;24599:22;;24588:40;;;:::o;24634:98::-;;24719:5;24713:12;24703:22;;24692:40;;;:::o;24738:99::-;;24824:5;24818:12;24808:22;;24797:40;;;:::o;24843:113::-;;24945:4;24940:3;24936:14;24928:22;;24918:38;;;:::o;24962:184::-;;25095:6;25090:3;25083:19;25135:4;25130:3;25126:14;25111:29;;25073:73;;;;:::o;25152:147::-;;25290:3;25275:18;;25265:34;;;;:::o;25305:169::-;;25423:6;25418:3;25411:19;25463:4;25458:3;25454:14;25439:29;;25401:73;;;;:::o;25480:185::-;;25537:20;25555:1;25537:20;:::i;:::-;25532:25;;25571:20;25589:1;25571:20;:::i;:::-;25566:25;;25610:1;25600:2;;25615:18;;:::i;:::-;25600:2;25657:1;25654;25650:9;25645:14;;25522:143;;;;:::o;25671:348::-;;25734:20;25752:1;25734:20;:::i;:::-;25729:25;;25768:20;25786:1;25768:20;:::i;:::-;25763:25;;25956:1;25888:66;25884:74;25881:1;25878:81;25873:1;25866:9;25859:17;25855:105;25852:2;;;25963:18;;:::i;:::-;25852:2;26011:1;26008;26004:9;25993:20;;25719:300;;;;:::o;26025:191::-;;26085:20;26103:1;26085:20;:::i;:::-;26080:25;;26119:20;26137:1;26119:20;:::i;:::-;26114:25;;26158:1;26155;26152:8;26149:2;;;26163:18;;:::i;:::-;26149:2;26208:1;26205;26201:9;26193:17;;26070:146;;;;:::o;26222:96::-;;26288:24;26306:5;26288:24;:::i;:::-;26277:35;;26267:51;;;:::o;26324:90::-;;26401:5;26394:13;26387:21;26376:32;;26366:48;;;:::o;26420:126::-;;26497:42;26490:5;26486:54;26475:65;;26465:81;;;:::o;26552:77::-;;26618:5;26607:16;;26597:32;;;:::o;26635:121::-;;26726:24;26744:5;26726:24;:::i;:::-;26713:37;;26703:53;;;:::o;26762:307::-;26830:1;26840:113;26854:6;26851:1;26848:13;26840:113;;;26939:1;26934:3;26930:11;26924:18;26920:1;26915:3;26911:11;26904:39;26876:2;26873:1;26869:10;26864:15;;26840:113;;;26971:6;26968:1;26965:13;26962:2;;;27051:1;27042:6;27037:3;27033:16;27026:27;26962:2;26811:258;;;;:::o;27075:233::-;;27137:24;27155:5;27137:24;:::i;:::-;27128:33;;27183:66;27176:5;27173:77;27170:2;;;27253:18;;:::i;:::-;27170:2;27300:1;27293:5;27289:13;27282:20;;27118:190;;;:::o;27314:180::-;27362:77;27359:1;27352:88;27459:4;27456:1;27449:15;27483:4;27480:1;27473:15;27500:180;27548:77;27545:1;27538:88;27645:4;27642:1;27635:15;27669:4;27666:1;27659:15;27686:180;27734:77;27731:1;27724:88;27831:4;27828:1;27821:15;27855:4;27852:1;27845:15;27872:102;;27964:2;27960:7;27955:2;27948:5;27944:14;27940:28;27930:38;;27920:54;;;:::o;27980:122::-;28053:24;28071:5;28053:24;:::i;:::-;28046:5;28043:35;28033:2;;28092:1;28089;28082:12;28033:2;28023:79;:::o;28108:116::-;28178:21;28193:5;28178:21;:::i;:::-;28171:5;28168:32;28158:2;;28214:1;28211;28204:12;28158:2;28148:76;:::o;28230:122::-;28303:24;28321:5;28303:24;:::i;:::-;28296:5;28293:35;28283:2;;28342:1;28339;28332:12;28283:2;28273:79;:::o
Swarm Source
ipfs://6d0e164c4c454f1575e12c5b14c82f94c37ebda06c0ac37be4a8f8ed4f45bd23
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.