Contract 0xEa7fCb85802713Cb03291311C66d6012b23402ea 8
Contract Overview
Balance:
0 ETH
ETH Value:
$0.00
My Name Tag:
Not Available
Txn Hash | Method |
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0x09cfc5a01e4955087bc59efcc2ab2aa7000ff577d55962bce0ddbab05863646f | Unstake And Rede... | 226696 | 941 days 19 hrs ago | 0xbb00f2e53888e60974110d68f1060e5eaab34790 | IN | 0xea7fcb85802713cb03291311c66d6012b23402ea | 0 ETH | 0.001079255535 ETH | |
0x6922806b0d49d5ef49daa3ea8df4a47c1c0444b4715afbbc18e69ed2494748cc | Mint And Stake G... | 226648 | 941 days 22 hrs ago | GMX: Deployer | IN | 0xea7fcb85802713cb03291311c66d6012b23402ea | 0 ETH | 0.000725689727 ETH | |
0xe7eb505935ea79884aeaaa84bb017e5247c203e46539f900b7a910a813e3c58b | Mint And Stake G... | 226636 | 941 days 22 hrs ago | GMX: Deployer | IN | 0xea7fcb85802713cb03291311c66d6012b23402ea | 0 ETH | 0.000720233237 ETH | |
0xe046ae3f219768067d58f43b7bf1ff2ee2da2ad4030508ea4289ecca11c264fa | Mint And Stake G... | 226631 | 941 days 22 hrs ago | GMX: Deployer | IN | 0xea7fcb85802713cb03291311c66d6012b23402ea | 1 ETH | 0.000671429509 ETH | |
0x0426fdf130a3decc161ac7489e07ab5ed42868aeb5a5b6667ef089a0e0d566d3 | Unstake And Rede... | 226629 | 941 days 22 hrs ago | GMX: Deployer | IN | 0xea7fcb85802713cb03291311c66d6012b23402ea | 0 ETH | 0.000743844752 ETH | |
0x4c291f0dd61b6e8c186c2d2ca0ccd275c366802dcff5a1c5b1e4609e0a78d585 | Mint And Stake G... | 226621 | 941 days 23 hrs ago | GMX: Deployer | IN | 0xea7fcb85802713cb03291311c66d6012b23402ea | 0 ETH | 0.000717880853 ETH | |
0xa99df468cb78f671f0534d0fcae8b57e30bc7d8f06d1d483167002cd835278b1 | Mint And Stake G... | 226620 | 941 days 23 hrs ago | GMX: Deployer | IN | 0xea7fcb85802713cb03291311c66d6012b23402ea | 0 ETH | 0.000712749877 ETH | |
0x7baf9611c054c46a3b3bb4aff0c7b4fb6ea47ac4e625c0800b3eb6151a685533 | Unstake And Rede... | 226619 | 941 days 23 hrs ago | GMX: Deployer | IN | 0xea7fcb85802713cb03291311c66d6012b23402ea | 0 ETH | 0.000745042645 ETH | |
0x9a2cc75493b3c17238037f509a9cf3605443fcbdecdc345363f10b058e67e793 | Unstake And Rede... | 226618 | 941 days 23 hrs ago | GMX: Deployer | IN | 0xea7fcb85802713cb03291311c66d6012b23402ea | 0 ETH | 0.00074298713 ETH | |
0x031c200f9fda276de380034a62a344ab6f0ace31a67064dae4ccf0bb65bd3a21 | Unstake And Rede... | 226617 | 941 days 23 hrs ago | GMX: Deployer | IN | 0xea7fcb85802713cb03291311c66d6012b23402ea | 0 ETH | 0.000742252769 ETH | |
0xac99c348e1988464b54a25e50de02abab74ac46160f7b2ac648d975bc81475b7 | Mint And Stake G... | 226584 | 942 days 6 mins ago | 0xbb00f2e53888e60974110d68f1060e5eaab34790 | IN | 0xea7fcb85802713cb03291311c66d6012b23402ea | 0 ETH | 0.000898089881 ETH | |
0xc1af36ba43e2aa42c732879549e7f94dccd8369f1a2411674bd08644f40f862a | Unstake Es Gmx | 226579 | 942 days 11 mins ago | 0xbb00f2e53888e60974110d68f1060e5eaab34790 | IN | 0xea7fcb85802713cb03291311c66d6012b23402ea | 0 ETH | 0.000628369075 ETH | |
0xa4f0ed3faca785d2b9c3739372428dd1de2f3700e5e6048c45c1d6a3c4bbce22 | Stake Es Gmx | 226577 | 942 days 15 mins ago | 0xbb00f2e53888e60974110d68f1060e5eaab34790 | IN | 0xea7fcb85802713cb03291311c66d6012b23402ea | 0 ETH | 0.000789652843 ETH | |
0x9205ac2c9093bff15a7dff43a4aa4128f6bc507b591f7a0b1c305a2351a61e82 | Claim | 226574 | 942 days 18 mins ago | 0xbb00f2e53888e60974110d68f1060e5eaab34790 | IN | 0xea7fcb85802713cb03291311c66d6012b23402ea | 0 ETH | 0.000586051668 ETH | |
0x7718d46aeaa33836f2d6a148bac4c3369100d0e9641c89ad733185b961b60f11 | Mint And Stake G... | 226542 | 942 days 1 hr ago | GMX: Deployer | IN | 0xea7fcb85802713cb03291311c66d6012b23402ea | 0 ETH | 0.00181086102 ETH | |
0x77786b74ae7708082aae24a6728f2240b9d62e3f25a4a82f1059bd55dc970bb9 | Unstake And Rede... | 226126 | 942 days 22 hrs ago | GMX: Deployer | IN | 0xea7fcb85802713cb03291311c66d6012b23402ea | 0 ETH | 0.00078772654 ETH | |
0x6459ba3ff0112e909fa10b9d83f56ffd4c97019f987a86f7841cac9185194b60 | Unstake And Rede... | 226125 | 942 days 22 hrs ago | GMX: Deployer | IN | 0xea7fcb85802713cb03291311c66d6012b23402ea | 0 ETH | 0.001010869043 ETH | |
0x5b751ebfe415173bf145903f28559c34cf219f7dd76b0767c0366a3ef2c85dc3 | Mint And Stake G... | 226123 | 942 days 23 hrs ago | GMX: Deployer | IN | 0xea7fcb85802713cb03291311c66d6012b23402ea | 0 ETH | 0.000790672098 ETH | |
0xeebe255ec3b03c896eaf6ab9befe1d3a04ecf14a2cca587b7f39ac63227d6d68 | Compound | 226122 | 942 days 23 hrs ago | GMX: Deployer | IN | 0xea7fcb85802713cb03291311c66d6012b23402ea | 0 ETH | 0.000685852558 ETH | |
0x7ca8a514ad248d46c2fbff7837ddd8d58fc1587d5edc77f73c613d1b1126f943 | Unstake Gmx | 226121 | 942 days 23 hrs ago | GMX: Deployer | IN | 0xea7fcb85802713cb03291311c66d6012b23402ea | 0 ETH | 0.000680801937 ETH | |
0x69b27b677c2b2ca15f7ab58d6d621f5b6d181e8a7826541aa7f7834de1f63dc7 | Stake Gmx | 226120 | 942 days 23 hrs ago | GMX: Deployer | IN | 0xea7fcb85802713cb03291311c66d6012b23402ea | 0 ETH | 0.000862696103 ETH | |
0x2d0006601ad87293a8a48fd280240fda930ae4a09d91b2b5a6b36f717efa1e41 | Initialize | 226112 | 942 days 23 hrs ago | GMX: Deployer | IN | 0xea7fcb85802713cb03291311c66d6012b23402ea | 0 ETH | 0.003176969129 ETH | |
0xaaa1069075c867681069aaf354ccd2f1c05b0a65d9d9cc211d001b6e7411e6ae | 0x60806040 | 226111 | 942 days 23 hrs ago | GMX: Deployer | IN | Create: RewardRouter | 0 ETH | 0.09702378569 ETH |
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
RewardRouter
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Arbiscan.io on 2021-08-30 */ // Sources flattened with hardhat v2.6.1 https://hardhat.org // File contracts/libraries/math/SafeMath.sol // SPDX-License-Identifier: MIT pragma solidity 0.6.12; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File contracts/libraries/token/IERC20.sol pragma solidity 0.6.12; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File contracts/libraries/utils/Address.sol pragma solidity ^0.6.2; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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.3._ */ 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.3._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File contracts/libraries/token/SafeERC20.sol pragma solidity 0.6.12; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File contracts/libraries/utils/ReentrancyGuard.sol pragma solidity 0.6.12; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () internal { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File contracts/staking/interfaces/IRewardTracker.sol pragma solidity 0.6.12; interface IRewardTracker { function depositBalances(address _account, address _depositToken) external view returns (uint256); function stakedAmounts(address _account) external view returns (uint256); function updateRewards() external; function stake(address _depositToken, uint256 _amount) external; function stakeForAccount(address _fundingAccount, address _account, address _depositToken, uint256 _amount) external; function unstake(address _depositToken, uint256 _amount) external; function unstakeForAccount(address _account, address _depositToken, uint256 _amount, address _receiver) external; function tokensPerInterval() external view returns (uint256); function claim(address _receiver) external returns (uint256); function claimForAccount(address _account, address _receiver) external returns (uint256); function claimable(address _account) external view returns (uint256); function averageStakedAmounts(address _account) external view returns (uint256); function cumulativeRewards(address _account) external view returns (uint256); } // File contracts/tokens/interfaces/IMintable.sol pragma solidity 0.6.12; interface IMintable { function mint(address _account, uint256 _amount) external; function burn(address _account, uint256 _amount) external; } // File contracts/tokens/interfaces/IWETH.sol pragma solidity 0.6.12; interface IWETH { function deposit() external payable; function transfer(address to, uint value) external returns (bool); function withdraw(uint) external; } // File contracts/core/interfaces/IGlpManager.sol pragma solidity 0.6.12; interface IGlpManager { function addLiquidity(address _token, uint256 _amount, uint256 _minUsdg, uint256 _minGlp) external returns (uint256); function addLiquidityForAccount(address _fundingAccount, address _account, address _token, uint256 _amount, uint256 _minUsdg, uint256 _minGlp) external returns (uint256); function removeLiquidity(address _tokenOut, uint256 _glpAmount, uint256 _minOut, address _receiver) external returns (uint256); function removeLiquidityForAccount(address _account, address _tokenOut, uint256 _glpAmount, uint256 _minOut, address _receiver) external returns (uint256); } // File contracts/access/Governable.sol pragma solidity 0.6.12; contract Governable { address public gov; constructor() public { gov = msg.sender; } modifier onlyGov() { require(msg.sender == gov, "Governable: forbidden"); _; } function setGov(address _gov) external onlyGov { gov = _gov; } } // File contracts/staking/RewardRouter.sol pragma solidity 0.6.12; contract RewardRouter is ReentrancyGuard, Governable { using SafeMath for uint256; using SafeERC20 for IERC20; using Address for address payable; bool public isInitialized; address public weth; address public gmx; address public esGmx; address public bnGmx; address public glp; // GMX Liquidity Provider token address public stakedGmxTracker; address public bonusGmxTracker; address public feeGmxTracker; address public stakedGlpTracker; address public feeGlpTracker; address public glpManager; event StakeGmx(address account, uint256 amount); event UnstakeGmx(address account, uint256 amount); event StakeGlp(address account, uint256 amount); event UnstakeGlp(address account, uint256 amount); receive() external payable { require(msg.sender == weth, "Router: invalid sender"); } function initialize( address _weth, address _gmx, address _esGmx, address _bnGmx, address _glp, address _stakedGmxTracker, address _bonusGmxTracker, address _feeGmxTracker, address _feeGlpTracker, address _stakedGlpTracker, address _glpManager ) external onlyGov { require(!isInitialized, "RewardRouter: already initialized"); isInitialized = true; weth = _weth; gmx = _gmx; esGmx = _esGmx; bnGmx = _bnGmx; glp = _glp; stakedGmxTracker = _stakedGmxTracker; bonusGmxTracker = _bonusGmxTracker; feeGmxTracker = _feeGmxTracker; feeGlpTracker = _feeGlpTracker; stakedGlpTracker = _stakedGlpTracker; glpManager = _glpManager; } // to help users who accidentally send their tokens to this contract function withdrawToken(address _token, address _account, uint256 _amount) external onlyGov { IERC20(_token).safeTransfer(_account, _amount); } function batchStakeGmxForAccount(address[] memory _accounts, uint256[] memory _amounts) external nonReentrant onlyGov { address _gmx = gmx; for (uint256 i = 0; i < _accounts.length; i++) { _stakeGmx(msg.sender, _accounts[i], _gmx, _amounts[i]); } } function stakeGmxForAccount(address _account, uint256 _amount) external nonReentrant onlyGov { _stakeGmx(msg.sender, _account, gmx, _amount); } function stakeGmx(uint256 _amount) external nonReentrant { _stakeGmx(msg.sender, msg.sender, gmx, _amount); } function stakeEsGmx(uint256 _amount) external nonReentrant { _stakeGmx(msg.sender, msg.sender, esGmx, _amount); } function unstakeGmx(uint256 _amount) external nonReentrant { _unstakeGmx(msg.sender, gmx, _amount); } function unstakeEsGmx(uint256 _amount) external nonReentrant { _unstakeGmx(msg.sender, esGmx, _amount); } function mintAndStakeGlp(address _token, uint256 _amount, uint256 _minUsdg, uint256 _minGlp) external nonReentrant returns (uint256) { require(_amount > 0, "RewardRouter: invalid _amount"); address account = msg.sender; uint256 glpAmount = IGlpManager(glpManager).addLiquidityForAccount(account, account, _token, _amount, _minUsdg, _minGlp); IRewardTracker(feeGlpTracker).stakeForAccount(account, account, glp, glpAmount); IRewardTracker(stakedGlpTracker).stakeForAccount(account, account, feeGlpTracker, glpAmount); emit StakeGlp(account, glpAmount); return glpAmount; } function mintAndStakeGlpETH(uint256 _minUsdg, uint256 _minGlp) external payable nonReentrant returns (uint256) { require(msg.value > 0, "RewardRouter: invalid msg.value"); IWETH(weth).deposit{value: msg.value}(); IERC20(weth).approve(glpManager, msg.value); address account = msg.sender; uint256 glpAmount = IGlpManager(glpManager).addLiquidityForAccount(address(this), account, weth, msg.value, _minUsdg, _minGlp); IRewardTracker(feeGlpTracker).stakeForAccount(account, account, glp, glpAmount); IRewardTracker(stakedGlpTracker).stakeForAccount(account, account, feeGlpTracker, glpAmount); emit StakeGlp(account, glpAmount); return glpAmount; } function unstakeAndRedeemGlp(address _tokenOut, uint256 _glpAmount, uint256 _minOut, address _receiver) external nonReentrant returns (uint256) { require(_glpAmount > 0, "RewardRouter: invalid _glpAmount"); address account = msg.sender; IRewardTracker(stakedGlpTracker).unstakeForAccount(account, feeGlpTracker, _glpAmount, account); IRewardTracker(feeGlpTracker).unstakeForAccount(account, glp, _glpAmount, account); uint256 amountOut = IGlpManager(glpManager).removeLiquidityForAccount(account, _tokenOut, _glpAmount, _minOut, _receiver); emit UnstakeGlp(account, _glpAmount); return amountOut; } function unstakeAndRedeemGlpETH(uint256 _glpAmount, uint256 _minOut, address payable _receiver) external nonReentrant returns (uint256) { require(_glpAmount > 0, "RewardRouter: invalid _glpAmount"); address account = msg.sender; IRewardTracker(stakedGlpTracker).unstakeForAccount(account, feeGlpTracker, _glpAmount, account); IRewardTracker(feeGlpTracker).unstakeForAccount(account, glp, _glpAmount, account); uint256 amountOut = IGlpManager(glpManager).removeLiquidityForAccount(account, weth, _glpAmount, _minOut, address(this)); IWETH(weth).withdraw(amountOut); _receiver.sendValue(amountOut); emit UnstakeGlp(account, _glpAmount); return amountOut; } function claim() external nonReentrant { address account = msg.sender; IRewardTracker(feeGmxTracker).claimForAccount(account, account); IRewardTracker(feeGlpTracker).claimForAccount(account, account); IRewardTracker(stakedGmxTracker).claimForAccount(account, account); IRewardTracker(stakedGlpTracker).claimForAccount(account, account); } function claimEsGmx() external nonReentrant { address account = msg.sender; IRewardTracker(stakedGmxTracker).claimForAccount(account, account); IRewardTracker(stakedGlpTracker).claimForAccount(account, account); } function claimFees() external nonReentrant { address account = msg.sender; IRewardTracker(feeGmxTracker).claimForAccount(account, account); IRewardTracker(feeGlpTracker).claimForAccount(account, account); } function compound() external nonReentrant { _compound(msg.sender); } function compoundForAccount(address _account) external nonReentrant onlyGov { _compound(_account); } function batchCompoundForAccounts(address[] memory _accounts) external nonReentrant onlyGov { for (uint256 i = 0; i < _accounts.length; i++) { _compound(_accounts[i]); } } function _compound(address _account) private { _compoundGmx(_account); _compoundGlp(_account); } function _compoundGmx(address _account) private { uint256 esGmxAmount = IRewardTracker(stakedGmxTracker).claimForAccount(_account, _account); if (esGmxAmount > 0) { _stakeGmx(_account, _account, esGmx, esGmxAmount); } uint256 bnGmxAmount = IRewardTracker(bonusGmxTracker).claimForAccount(_account, _account); if (bnGmxAmount > 0) { IRewardTracker(feeGmxTracker).stakeForAccount(_account, _account, bnGmx, bnGmxAmount); } } function _compoundGlp(address _account) private { uint256 esGmxAmount = IRewardTracker(stakedGlpTracker).claimForAccount(_account, _account); if (esGmxAmount > 0) { _stakeGmx(_account, _account, esGmx, esGmxAmount); } } function _stakeGmx(address _fundingAccount, address _account, address _token, uint256 _amount) private { require(_amount > 0, "RewardRouter: invalid _amount"); IRewardTracker(stakedGmxTracker).stakeForAccount(_fundingAccount, _account, _token, _amount); IRewardTracker(bonusGmxTracker).stakeForAccount(_account, _account, stakedGmxTracker, _amount); IRewardTracker(feeGmxTracker).stakeForAccount(_account, _account, bonusGmxTracker, _amount); emit StakeGmx(_account, _amount); } function _unstakeGmx(address _account, address _token, uint256 _amount) private { require(_amount > 0, "RewardRouter: invalid _amount"); uint256 balance = IRewardTracker(stakedGmxTracker).stakedAmounts(_account); IRewardTracker(feeGmxTracker).unstakeForAccount(_account, bonusGmxTracker, _amount, _account); IRewardTracker(bonusGmxTracker).unstakeForAccount(_account, stakedGmxTracker, _amount, _account); IRewardTracker(stakedGmxTracker).unstakeForAccount(_account, _token, _amount, _account); uint256 bnGmxAmount = IRewardTracker(bonusGmxTracker).claimForAccount(_account, _account); if (bnGmxAmount > 0) { IRewardTracker(feeGmxTracker).stakeForAccount(_account, _account, bnGmx, bnGmxAmount); } uint256 stakedBnGmx = IRewardTracker(feeGmxTracker).depositBalances(_account, bnGmx); if (stakedBnGmx > 0) { uint256 reductionAmount = stakedBnGmx.mul(_amount).div(balance); IRewardTracker(feeGmxTracker).unstakeForAccount(_account, bnGmx, reductionAmount, _account); IMintable(bnGmx).burn(_account, reductionAmount); } emit UnstakeGmx(_account, _amount); } }
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"StakeGlp","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"StakeGmx","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UnstakeGlp","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UnstakeGmx","type":"event"},{"inputs":[{"internalType":"address[]","name":"_accounts","type":"address[]"}],"name":"batchCompoundForAccounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_accounts","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"batchStakeGmxForAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bnGmx","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bonusGmxTracker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimEsGmx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"compound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"compoundForAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"esGmx","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeGlpTracker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeGmxTracker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"glp","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"glpManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gmx","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gov","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_weth","type":"address"},{"internalType":"address","name":"_gmx","type":"address"},{"internalType":"address","name":"_esGmx","type":"address"},{"internalType":"address","name":"_bnGmx","type":"address"},{"internalType":"address","name":"_glp","type":"address"},{"internalType":"address","name":"_stakedGmxTracker","type":"address"},{"internalType":"address","name":"_bonusGmxTracker","type":"address"},{"internalType":"address","name":"_feeGmxTracker","type":"address"},{"internalType":"address","name":"_feeGlpTracker","type":"address"},{"internalType":"address","name":"_stakedGlpTracker","type":"address"},{"internalType":"address","name":"_glpManager","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_minUsdg","type":"uint256"},{"internalType":"uint256","name":"_minGlp","type":"uint256"}],"name":"mintAndStakeGlp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minUsdg","type":"uint256"},{"internalType":"uint256","name":"_minGlp","type":"uint256"}],"name":"mintAndStakeGlpETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_gov","type":"address"}],"name":"setGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"stakeEsGmx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"stakeGmx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"stakeGmxForAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakedGlpTracker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakedGmxTracker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenOut","type":"address"},{"internalType":"uint256","name":"_glpAmount","type":"uint256"},{"internalType":"uint256","name":"_minOut","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"unstakeAndRedeemGlp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_glpAmount","type":"uint256"},{"internalType":"uint256","name":"_minOut","type":"uint256"},{"internalType":"address payable","name":"_receiver","type":"address"}],"name":"unstakeAndRedeemGlpETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"unstakeEsGmx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"unstakeGmx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561001057600080fd5b506001600081905580546001600160a01b0319163317905561304c806100376000396000f3fe6080604052600436106101775760003560e01c806301e33667146101db578063078580d21461021e5780630ce4018a146102485780630db79e52146102795780630f3aa554146103a957806312d43a51146104025780631af276a6146104175780631fcd60e5146104c55780632a9f4083146104da57806331e67c711461050d578063364e231114610522578063392e53cd146105675780633fc8cef3146105905780634e71d92d146105a557806351c3e3b4146105ba57806353a8aa03146105cf5780635da4b8dd146105f25780635fe3945f1461062b57806364f64467146106405780636a192a781461066a57806376902b831461067f57806378a207ee14610708578063abb5e5e21461071d578063af394d001461075c578063cfad57a214610771578063d294f093146107a4578063e102f564146107b9578063e1c363b7146107ce578063ef8c5994146107e3578063f3daeacc1461080d578063f69e204614610837578063fa6db1bc1461084c576101d6565b366101d6576002546001600160a01b031633146101d4576040805162461bcd60e51b81526020600482015260166024820152752937baba32b91d1034b73b30b634b21039b2b73232b960511b604482015290519081900360640190fd5b005b600080fd5b3480156101e757600080fd5b506101d4600480360360608110156101fe57600080fd5b506001600160a01b03813581169160208101359091169060400135610861565b34801561022a57600080fd5b506101d46004803603602081101561024157600080fd5b50356108c7565b34801561025457600080fd5b5061025d610932565b604080516001600160a01b039092168252519081900360200190f35b34801561028557600080fd5b506101d46004803603604081101561029c57600080fd5b810190602081018135600160201b8111156102b657600080fd5b8201836020820111156102c857600080fd5b803590602001918460208302840111600160201b831117156102e957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561033857600080fd5b82018360208201111561034a57600080fd5b803590602001918460208302840111600160201b8311171561036b57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610941945050505050565b3480156103b557600080fd5b506103f0600480360360808110156103cc57600080fd5b506001600160a01b0381358116916020810135916040820135916060013516610a36565b60408051918252519081900360200190f35b34801561040e57600080fd5b5061025d610ca6565b34801561042357600080fd5b506101d46004803603602081101561043a57600080fd5b810190602081018135600160201b81111561045457600080fd5b82018360208201111561046657600080fd5b803590602001918460208302840111600160201b8311171561048757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610cb5945050505050565b3480156104d157600080fd5b5061025d610d86565b3480156104e657600080fd5b506101d4600480360360208110156104fd57600080fd5b50356001600160a01b0316610d95565b34801561051957600080fd5b5061025d610e36565b34801561052e57600080fd5b506103f06004803603608081101561054557600080fd5b506001600160a01b038135169060208101359060408101359060600135610e45565b34801561057357600080fd5b5061057c6110b3565b604080519115158252519081900360200190f35b34801561059c57600080fd5b5061025d6110c3565b3480156105b157600080fd5b506101d46110d2565b3480156105c657600080fd5b5061025d611331565b6103f0600480360360408110156105e557600080fd5b5080359060200135611340565b3480156105fe57600080fd5b506101d46004803603604081101561061557600080fd5b506001600160a01b0381351690602001356116ab565b34801561063757600080fd5b506101d461175d565b34801561064c57600080fd5b506101d46004803603602081101561066357600080fd5b5035611802565b34801561067657600080fd5b5061025d611865565b34801561068b57600080fd5b506101d460048036036101608110156106a357600080fd5b506001600160a01b038135811691602081013582169160408201358116916060810135821691608082013581169160a081013582169160c082013581169160e08101358216916101008201358116916101208101358216916101409091013516611874565b34801561071457600080fd5b5061025d6119db565b34801561072957600080fd5b506103f06004803603606081101561074057600080fd5b50803590602081013590604001356001600160a01b03166119ea565b34801561076857600080fd5b5061025d611cd3565b34801561077d57600080fd5b506101d46004803603602081101561079457600080fd5b50356001600160a01b0316611ce2565b3480156107b057600080fd5b506101d4611d51565b3480156107c557600080fd5b5061025d611e78565b3480156107da57600080fd5b5061025d611e87565b3480156107ef57600080fd5b506101d46004803603602081101561080657600080fd5b5035611e96565b34801561081957600080fd5b506101d46004803603602081101561083057600080fd5b5035611efb565b34801561084357600080fd5b506101d4611f60565b34801561085857600080fd5b5061025d611fbb565b6001546001600160a01b031633146108ae576040805162461bcd60e51b81526020600482015260156024820152600080516020612eab833981519152604482015290519081900360640190fd5b6108c26001600160a01b0384168383611fca565b505050565b6002600054141561090d576040805162461bcd60e51b815260206004820152601f6024820152600080516020612e8b833981519152604482015290519081900360640190fd5b600260005560035461092a9033906001600160a01b03168361201c565b506001600055565b6007546001600160a01b031681565b60026000541415610987576040805162461bcd60e51b815260206004820152601f6024820152600080516020612e8b833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b031633146109d9576040805162461bcd60e51b81526020600482015260156024820152600080516020612eab833981519152604482015290519081900360640190fd5b6003546001600160a01b031660005b8351811015610a2b57610a2333858381518110610a0157fe5b602002602001015184868581518110610a1657fe5b6020026020010151612550565b6001016109e8565b505060016000555050565b600060026000541415610a7e576040805162461bcd60e51b815260206004820152601f6024820152600080516020612e8b833981519152604482015290519081900360640190fd5b600260005583610ac3576040805162461bcd60e51b81526020600482018190526024820152600080516020612fd7833981519152604482015290519081900360640190fd5b600a54600b546040805163098bf59d60e01b815233600482018190526001600160a01b039384166024830152604482018990526064820181905291519193929092169163098bf59d91608480830192600092919082900301818387803b158015610b2c57600080fd5b505af1158015610b40573d6000803e3d6000fd5b5050600b546006546040805163098bf59d60e01b81526001600160a01b03878116600483018190529381166024830152604482018c90526064820193909352905191909216935063098bf59d9250608480830192600092919082900301818387803b158015610bae57600080fd5b505af1158015610bc2573d6000803e3d6000fd5b5050600c54604080516371d597ad60e01b81526001600160a01b0386811660048301528b81166024830152604482018b9052606482018a905288811660848301529151600095509190921692506371d597ad9160a48082019260209290919082900301818787803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b505050506040513d6020811015610c6057600080fd5b5051604080516001600160a01b0385168152602081018990528151929350600080516020612f8d833981519152929081900390910190a160016000559695505050505050565b6001546001600160a01b031681565b60026000541415610cfb576040805162461bcd60e51b815260206004820152601f6024820152600080516020612e8b833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b03163314610d4d576040805162461bcd60e51b81526020600482015260156024820152600080516020612eab833981519152604482015290519081900360640190fd5b60005b8151811015610d7d57610d75828281518110610d6857fe5b6020026020010151612758565b600101610d50565b50506001600055565b6008546001600160a01b031681565b60026000541415610ddb576040805162461bcd60e51b815260206004820152601f6024820152600080516020612e8b833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b03163314610e2d576040805162461bcd60e51b81526020600482015260156024820152600080516020612eab833981519152604482015290519081900360640190fd5b61092a81612758565b6003546001600160a01b031681565b600060026000541415610e8d576040805162461bcd60e51b815260206004820152601f6024820152600080516020612e8b833981519152604482015290519081900360640190fd5b600260005583610ed2576040805162461bcd60e51b815260206004820152601d6024820152600080516020612ff7833981519152604482015290519081900360640190fd5b600c54604080516317eb2a1560e01b81523360048201819052602482018190526001600160a01b038981166044840152606483018990526084830188905260a483018790529251909360009316916317eb2a159160c480830192602092919082900301818787803b158015610f4657600080fd5b505af1158015610f5a573d6000803e3d6000fd5b505050506040513d6020811015610f7057600080fd5b5051600b5460065460408051631e42d69b60e21b81526001600160a01b03878116600483018190526024830152928316604482015260648101859052905193945091169163790b5a6c9160848082019260009290919082900301818387803b158015610fdb57600080fd5b505af1158015610fef573d6000803e3d6000fd5b5050600a54600b5460408051631e42d69b60e21b81526001600160a01b03888116600483018190526024830152928316604482015260648101879052905191909216935063790b5a6c9250608480830192600092919082900301818387803b15801561105a57600080fd5b505af115801561106e573d6000803e3d6000fd5b5050604080516001600160a01b0386168152602081018590528151600080516020612f6d8339815191529450908190039091019150a160016000559695505050505050565b600154600160a01b900460ff1681565b6002546001600160a01b031681565b60026000541415611118576040805162461bcd60e51b815260206004820152601f6024820152600080516020612e8b833981519152604482015290519081900360640190fd5b60026000908155600954604080516309f4173d60e11b8152336004820181905260248201819052915191936001600160a01b03909316926313e82e7a926044808401936020939083900390910190829087803b15801561117757600080fd5b505af115801561118b573d6000803e3d6000fd5b505050506040513d60208110156111a157600080fd5b5050600b54604080516309f4173d60e11b81526001600160a01b03848116600483018190526024830152915191909216916313e82e7a9160448083019260209291908290030181600087803b1580156111f957600080fd5b505af115801561120d573d6000803e3d6000fd5b505050506040513d602081101561122357600080fd5b5050600754604080516309f4173d60e11b81526001600160a01b03848116600483018190526024830152915191909216916313e82e7a9160448083019260209291908290030181600087803b15801561127b57600080fd5b505af115801561128f573d6000803e3d6000fd5b505050506040513d60208110156112a557600080fd5b5050600a54604080516309f4173d60e11b81526001600160a01b03848116600483018190526024830152915191909216916313e82e7a9160448083019260209291908290030181600087803b1580156112fd57600080fd5b505af1158015611311573d6000803e3d6000fd5b505050506040513d602081101561132757600080fd5b5050600160005550565b6009546001600160a01b031681565b600060026000541415611388576040805162461bcd60e51b815260206004820152601f6024820152600080516020612e8b833981519152604482015290519081900360640190fd5b6002600055346113df576040805162461bcd60e51b815260206004820152601f60248201527f526577617264526f757465723a20696e76616c6964206d73672e76616c756500604482015290519081900360640190fd5b600260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561142f57600080fd5b505af1158015611443573d6000803e3d6000fd5b5050600254600c546040805163095ea7b360e01b81526001600160a01b039283166004820152346024820152905191909216945063095ea7b39350604480830193506020928290030181600087803b15801561149e57600080fd5b505af11580156114b2573d6000803e3d6000fd5b505050506040513d60208110156114c857600080fd5b5050600c54600254604080516317eb2a1560e01b815230600482015233602482018190526001600160a01b0393841660448301523460648301526084820188905260a482018790529151919360009316916317eb2a159160c48082019260209290919082900301818787803b15801561154057600080fd5b505af1158015611554573d6000803e3d6000fd5b505050506040513d602081101561156a57600080fd5b5051600b5460065460408051631e42d69b60e21b81526001600160a01b03878116600483018190526024830152928316604482015260648101859052905193945091169163790b5a6c9160848082019260009290919082900301818387803b1580156115d557600080fd5b505af11580156115e9573d6000803e3d6000fd5b5050600a54600b5460408051631e42d69b60e21b81526001600160a01b03888116600483018190526024830152928316604482015260648101879052905191909216935063790b5a6c9250608480830192600092919082900301818387803b15801561165457600080fd5b505af1158015611668573d6000803e3d6000fd5b5050604080516001600160a01b0386168152602081018590528151600080516020612f6d8339815191529450908190039091019150a16001600055949350505050565b600260005414156116f1576040805162461bcd60e51b815260206004820152601f6024820152600080516020612e8b833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b03163314611743576040805162461bcd60e51b81526020600482015260156024820152600080516020612eab833981519152604482015290519081900360640190fd5b600354610d7d90339084906001600160a01b031684612550565b600260005414156117a3576040805162461bcd60e51b815260206004820152601f6024820152600080516020612e8b833981519152604482015290519081900360640190fd5b60026000908155600754604080516309f4173d60e11b8152336004820181905260248201819052915191936001600160a01b03909316926313e82e7a926044808401936020939083900390910190829087803b15801561127b57600080fd5b60026000541415611848576040805162461bcd60e51b815260206004820152601f6024820152600080516020612e8b833981519152604482015290519081900360640190fd5b600260005560045461092a9033906001600160a01b03168361201c565b6004546001600160a01b031681565b6001546001600160a01b031633146118c1576040805162461bcd60e51b81526020600482015260156024820152600080516020612eab833981519152604482015290519081900360640190fd5b600154600160a01b900460ff161561190a5760405162461bcd60e51b8152600401808060200182810382526021815260200180612f056021913960400191505060405180910390fd5b60018054600160a01b60ff60a01b19909116179055600280546001600160a01b03199081166001600160a01b039d8e16179091556003805482169b8d169b909b17909a55600480548b16998c1699909917909855600580548a16978b1697909717909655600680548916958a169590951790945560078054881693891693909317909255600880548716918816919091179055600980548616918716919091179055600b80548516918616919091179055600a80548416918516919091179055600c80549092169216919091179055565b6006546001600160a01b031681565b600060026000541415611a32576040805162461bcd60e51b815260206004820152601f6024820152600080516020612e8b833981519152604482015290519081900360640190fd5b600260005583611a77576040805162461bcd60e51b81526020600482018190526024820152600080516020612fd7833981519152604482015290519081900360640190fd5b600a54600b546040805163098bf59d60e01b815233600482018190526001600160a01b039384166024830152604482018990526064820181905291519193929092169163098bf59d91608480830192600092919082900301818387803b158015611ae057600080fd5b505af1158015611af4573d6000803e3d6000fd5b5050600b546006546040805163098bf59d60e01b81526001600160a01b03878116600483018190529381166024830152604482018c90526064820193909352905191909216935063098bf59d9250608480830192600092919082900301818387803b158015611b6257600080fd5b505af1158015611b76573d6000803e3d6000fd5b5050600c54600254604080516371d597ad60e01b81526001600160a01b0387811660048301529283166024820152604481018b9052606481018a90523060848201529051600095509190921692506371d597ad9160a48082019260209290919082900301818787803b158015611beb57600080fd5b505af1158015611bff573d6000803e3d6000fd5b505050506040513d6020811015611c1557600080fd5b505160025460408051632e1a7d4d60e01b81526004810184905290519293506001600160a01b0390911691632e1a7d4d9160248082019260009290919082900301818387803b158015611c6757600080fd5b505af1158015611c7b573d6000803e3d6000fd5b50611c93925050506001600160a01b0385168261276d565b604080516001600160a01b0384168152602081018890528151600080516020612f8d833981519152929181900390910190a1600160005595945050505050565b600a546001600160a01b031681565b6001546001600160a01b03163314611d2f576040805162461bcd60e51b81526020600482015260156024820152600080516020612eab833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60026000541415611d97576040805162461bcd60e51b815260206004820152601f6024820152600080516020612e8b833981519152604482015290519081900360640190fd5b60026000908155600954604080516309f4173d60e11b8152336004820181905260248201819052915191936001600160a01b03909316926313e82e7a926044808401936020939083900390910190829087803b158015611df657600080fd5b505af1158015611e0a573d6000803e3d6000fd5b505050506040513d6020811015611e2057600080fd5b5050600b54604080516309f4173d60e11b81526001600160a01b03848116600483018190526024830152915191909216916313e82e7a9160448083019260209291908290030181600087803b1580156112fd57600080fd5b6005546001600160a01b031681565b600b546001600160a01b031681565b60026000541415611edc576040805162461bcd60e51b815260206004820152601f6024820152600080516020612e8b833981519152604482015290519081900360640190fd5b600260005560045461092a90339081906001600160a01b031684612550565b60026000541415611f41576040805162461bcd60e51b815260206004820152601f6024820152600080516020612e8b833981519152604482015290519081900360640190fd5b600260005560035461092a90339081906001600160a01b031684612550565b60026000541415611fa6576040805162461bcd60e51b815260206004820152601f6024820152600080516020612e8b833981519152604482015290519081900360640190fd5b6002600055611fb433612758565b6001600055565b600c546001600160a01b031681565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526108c2908490612852565b6000811161205f576040805162461bcd60e51b815260206004820152601d6024820152600080516020612ff7833981519152604482015290519081900360640190fd5b600754604080516310c1c10360e01b81526001600160a01b038681166004830152915160009392909216916310c1c10391602480820192602092909190829003018186803b1580156120b057600080fd5b505afa1580156120c4573d6000803e3d6000fd5b505050506040513d60208110156120da57600080fd5b50516009546008546040805163098bf59d60e01b81526001600160a01b03898116600483018190529381166024830152604482018890526064820193909352905193945091169163098bf59d9160848082019260009290919082900301818387803b15801561214857600080fd5b505af115801561215c573d6000803e3d6000fd5b50506008546007546040805163098bf59d60e01b81526001600160a01b038a8116600483018190529381166024830152604482018990526064820193909352905191909216935063098bf59d9250608480830192600092919082900301818387803b1580156121ca57600080fd5b505af11580156121de573d6000803e3d6000fd5b50506007546040805163098bf59d60e01b81526001600160a01b03898116600483018190528982166024840152604483018990526064830152915191909216935063098bf59d9250608480830192600092919082900301818387803b15801561224657600080fd5b505af115801561225a573d6000803e3d6000fd5b5050600854604080516309f4173d60e11b81526001600160a01b038981166004830181905260248301529151600095509190921692506313e82e7a9160448082019260209290919082900301818787803b1580156122b757600080fd5b505af11580156122cb573d6000803e3d6000fd5b505050506040513d60208110156122e157600080fd5b50519050801561236b5760095460055460408051631e42d69b60e21b81526001600160a01b038981166004830181905260248301529283166044820152606481018590529051919092169163790b5a6c91608480830192600092919082900301818387803b15801561235257600080fd5b505af1158015612366573d6000803e3d6000fd5b505050505b60095460055460408051637aeceb1f60e11b81526001600160a01b03898116600483015292831660248201529051600093929092169163f5d9d63e91604480820192602092909190829003018186803b1580156123c757600080fd5b505afa1580156123db573d6000803e3d6000fd5b505050506040513d60208110156123f157600080fd5b5051905080156125045760006124118461240b8488612903565b90612965565b6009546005546040805163098bf59d60e01b81526001600160a01b038c8116600483018190529381166024830152604482018690526064820193909352905193945091169163098bf59d9160848082019260009290919082900301818387803b15801561247d57600080fd5b505af1158015612491573d6000803e3d6000fd5b505060055460408051632770a7eb60e21b81526001600160a01b038c81166004830152602482018790529151919092169350639dc29fac9250604480830192600092919082900301818387803b1580156124ea57600080fd5b505af11580156124fe573d6000803e3d6000fd5b50505050505b604080516001600160a01b03881681526020810186905281517fe9da6f830e88eb523af6d57c34cc795daaafe1ab891b6ec4f276a550532124a5929181900390910190a1505050505050565b60008111612593576040805162461bcd60e51b815260206004820152601d6024820152600080516020612ff7833981519152604482015290519081900360640190fd5b60075460408051631e42d69b60e21b81526001600160a01b03878116600483015286811660248301528581166044830152606482018590529151919092169163790b5a6c91608480830192600092919082900301818387803b1580156125f857600080fd5b505af115801561260c573d6000803e3d6000fd5b505060085460075460408051631e42d69b60e21b81526001600160a01b03898116600483018190526024830152928316604482015260648101879052905191909216935063790b5a6c9250608480830192600092919082900301818387803b15801561267757600080fd5b505af115801561268b573d6000803e3d6000fd5b505060095460085460408051631e42d69b60e21b81526001600160a01b03898116600483018190526024830152928316604482015260648101879052905191909216935063790b5a6c9250608480830192600092919082900301818387803b1580156126f657600080fd5b505af115801561270a573d6000803e3d6000fd5b5050604080516001600160a01b03871681526020810185905281517f277a108bb56dcaa99fe060708d8fdf34a9ad95c3f857452c0a2621154ec90b789450908190039091019150a150505050565b612761816129a4565b61276a81612b5c565b50565b804710156127c2576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d806000811461280d576040519150601f19603f3d011682016040523d82523d6000602084013e612812565b606091505b50509050806108c25760405162461bcd60e51b815260040180806020018281038252603a815260200180612ecb603a913960400191505060405180910390fd5b60606128a7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612c079092919063ffffffff16565b8051909150156108c2578080602001905160208110156128c657600080fd5b50516108c25760405162461bcd60e51b815260040180806020018281038252602a815260200180612fad602a913960400191505060405180910390fd5b6000826129125750600061295f565b8282028284828161291f57fe5b041461295c5760405162461bcd60e51b8152600401808060200182810382526021815260200180612f4c6021913960400191505060405180910390fd5b90505b92915050565b600061295c83836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b815250612c20565b600754604080516309f4173d60e11b81526001600160a01b03848116600483018190526024830152915160009392909216916313e82e7a9160448082019260209290919082900301818787803b1580156129fd57600080fd5b505af1158015612a11573d6000803e3d6000fd5b505050506040513d6020811015612a2757600080fd5b505190508015612a4b57600454612a4b90839081906001600160a01b031684612550565b600854604080516309f4173d60e11b81526001600160a01b03858116600483018190526024830152915160009392909216916313e82e7a9160448082019260209290919082900301818787803b158015612aa457600080fd5b505af1158015612ab8573d6000803e3d6000fd5b505050506040513d6020811015612ace57600080fd5b5051905080156108c25760095460055460408051631e42d69b60e21b81526001600160a01b038781166004830181905260248301529283166044820152606481018590529051919092169163790b5a6c91608480830192600092919082900301818387803b158015612b3f57600080fd5b505af1158015612b53573d6000803e3d6000fd5b50505050505050565b600a54604080516309f4173d60e11b81526001600160a01b03848116600483018190526024830152915160009392909216916313e82e7a9160448082019260209290919082900301818787803b158015612bb557600080fd5b505af1158015612bc9573d6000803e3d6000fd5b505050506040513d6020811015612bdf57600080fd5b505190508015612c0357600454612c0390839081906001600160a01b031684612550565b5050565b6060612c168484600085612cc2565b90505b9392505050565b60008183612cac5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612c71578181015183820152602001612c59565b50505050905090810190601f168015612c9e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612cb857fe5b0495945050505050565b606082471015612d035760405162461bcd60e51b8152600401808060200182810382526026815260200180612f266026913960400191505060405180910390fd5b612d0c85612e1e565b612d5d576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310612d9c5780518252601f199092019160209182019101612d7d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612dfe576040519150601f19603f3d011682016040523d82523d6000602084013e612e03565b606091505b5091509150612e13828286612e24565b979650505050505050565b3b151590565b60608315612e33575081612c19565b825115612e435782518084602001fd5b60405162461bcd60e51b8152602060048201818152845160248401528451859391928392604401919085019080838360008315612c71578181015183820152602001612c5956fe5265656e7472616e637947756172643a207265656e7472616e742063616c6c00476f7665726e61626c653a20666f7262696464656e0000000000000000000000416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564526577617264526f757465723a20616c726561647920696e697469616c697a6564416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a4725d47fa458d9222498e4d63f34527cf7318c1506f89d9092b35fdbcb64f3a1cb6202519b6b6c72ba5ed11e2c3f53af3cea010f96bfc705584e53e75cf034c5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564526577617264526f757465723a20696e76616c6964205f676c70416d6f756e74526577617264526f757465723a20696e76616c6964205f616d6f756e74000000a264697066735822122042bf299e1a444b564c14d9e0ed393d463ef4b8631aee6be1a562b1ceb98be22064736f6c634300060c0033
Deployed Bytecode
0x6080604052600436106101775760003560e01c806301e33667146101db578063078580d21461021e5780630ce4018a146102485780630db79e52146102795780630f3aa554146103a957806312d43a51146104025780631af276a6146104175780631fcd60e5146104c55780632a9f4083146104da57806331e67c711461050d578063364e231114610522578063392e53cd146105675780633fc8cef3146105905780634e71d92d146105a557806351c3e3b4146105ba57806353a8aa03146105cf5780635da4b8dd146105f25780635fe3945f1461062b57806364f64467146106405780636a192a781461066a57806376902b831461067f57806378a207ee14610708578063abb5e5e21461071d578063af394d001461075c578063cfad57a214610771578063d294f093146107a4578063e102f564146107b9578063e1c363b7146107ce578063ef8c5994146107e3578063f3daeacc1461080d578063f69e204614610837578063fa6db1bc1461084c576101d6565b366101d6576002546001600160a01b031633146101d4576040805162461bcd60e51b81526020600482015260166024820152752937baba32b91d1034b73b30b634b21039b2b73232b960511b604482015290519081900360640190fd5b005b600080fd5b3480156101e757600080fd5b506101d4600480360360608110156101fe57600080fd5b506001600160a01b03813581169160208101359091169060400135610861565b34801561022a57600080fd5b506101d46004803603602081101561024157600080fd5b50356108c7565b34801561025457600080fd5b5061025d610932565b604080516001600160a01b039092168252519081900360200190f35b34801561028557600080fd5b506101d46004803603604081101561029c57600080fd5b810190602081018135600160201b8111156102b657600080fd5b8201836020820111156102c857600080fd5b803590602001918460208302840111600160201b831117156102e957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561033857600080fd5b82018360208201111561034a57600080fd5b803590602001918460208302840111600160201b8311171561036b57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610941945050505050565b3480156103b557600080fd5b506103f0600480360360808110156103cc57600080fd5b506001600160a01b0381358116916020810135916040820135916060013516610a36565b60408051918252519081900360200190f35b34801561040e57600080fd5b5061025d610ca6565b34801561042357600080fd5b506101d46004803603602081101561043a57600080fd5b810190602081018135600160201b81111561045457600080fd5b82018360208201111561046657600080fd5b803590602001918460208302840111600160201b8311171561048757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610cb5945050505050565b3480156104d157600080fd5b5061025d610d86565b3480156104e657600080fd5b506101d4600480360360208110156104fd57600080fd5b50356001600160a01b0316610d95565b34801561051957600080fd5b5061025d610e36565b34801561052e57600080fd5b506103f06004803603608081101561054557600080fd5b506001600160a01b038135169060208101359060408101359060600135610e45565b34801561057357600080fd5b5061057c6110b3565b604080519115158252519081900360200190f35b34801561059c57600080fd5b5061025d6110c3565b3480156105b157600080fd5b506101d46110d2565b3480156105c657600080fd5b5061025d611331565b6103f0600480360360408110156105e557600080fd5b5080359060200135611340565b3480156105fe57600080fd5b506101d46004803603604081101561061557600080fd5b506001600160a01b0381351690602001356116ab565b34801561063757600080fd5b506101d461175d565b34801561064c57600080fd5b506101d46004803603602081101561066357600080fd5b5035611802565b34801561067657600080fd5b5061025d611865565b34801561068b57600080fd5b506101d460048036036101608110156106a357600080fd5b506001600160a01b038135811691602081013582169160408201358116916060810135821691608082013581169160a081013582169160c082013581169160e08101358216916101008201358116916101208101358216916101409091013516611874565b34801561071457600080fd5b5061025d6119db565b34801561072957600080fd5b506103f06004803603606081101561074057600080fd5b50803590602081013590604001356001600160a01b03166119ea565b34801561076857600080fd5b5061025d611cd3565b34801561077d57600080fd5b506101d46004803603602081101561079457600080fd5b50356001600160a01b0316611ce2565b3480156107b057600080fd5b506101d4611d51565b3480156107c557600080fd5b5061025d611e78565b3480156107da57600080fd5b5061025d611e87565b3480156107ef57600080fd5b506101d46004803603602081101561080657600080fd5b5035611e96565b34801561081957600080fd5b506101d46004803603602081101561083057600080fd5b5035611efb565b34801561084357600080fd5b506101d4611f60565b34801561085857600080fd5b5061025d611fbb565b6001546001600160a01b031633146108ae576040805162461bcd60e51b81526020600482015260156024820152600080516020612eab833981519152604482015290519081900360640190fd5b6108c26001600160a01b0384168383611fca565b505050565b6002600054141561090d576040805162461bcd60e51b815260206004820152601f6024820152600080516020612e8b833981519152604482015290519081900360640190fd5b600260005560035461092a9033906001600160a01b03168361201c565b506001600055565b6007546001600160a01b031681565b60026000541415610987576040805162461bcd60e51b815260206004820152601f6024820152600080516020612e8b833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b031633146109d9576040805162461bcd60e51b81526020600482015260156024820152600080516020612eab833981519152604482015290519081900360640190fd5b6003546001600160a01b031660005b8351811015610a2b57610a2333858381518110610a0157fe5b602002602001015184868581518110610a1657fe5b6020026020010151612550565b6001016109e8565b505060016000555050565b600060026000541415610a7e576040805162461bcd60e51b815260206004820152601f6024820152600080516020612e8b833981519152604482015290519081900360640190fd5b600260005583610ac3576040805162461bcd60e51b81526020600482018190526024820152600080516020612fd7833981519152604482015290519081900360640190fd5b600a54600b546040805163098bf59d60e01b815233600482018190526001600160a01b039384166024830152604482018990526064820181905291519193929092169163098bf59d91608480830192600092919082900301818387803b158015610b2c57600080fd5b505af1158015610b40573d6000803e3d6000fd5b5050600b546006546040805163098bf59d60e01b81526001600160a01b03878116600483018190529381166024830152604482018c90526064820193909352905191909216935063098bf59d9250608480830192600092919082900301818387803b158015610bae57600080fd5b505af1158015610bc2573d6000803e3d6000fd5b5050600c54604080516371d597ad60e01b81526001600160a01b0386811660048301528b81166024830152604482018b9052606482018a905288811660848301529151600095509190921692506371d597ad9160a48082019260209290919082900301818787803b158015610c3657600080fd5b505af1158015610c4a573d6000803e3d6000fd5b505050506040513d6020811015610c6057600080fd5b5051604080516001600160a01b0385168152602081018990528151929350600080516020612f8d833981519152929081900390910190a160016000559695505050505050565b6001546001600160a01b031681565b60026000541415610cfb576040805162461bcd60e51b815260206004820152601f6024820152600080516020612e8b833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b03163314610d4d576040805162461bcd60e51b81526020600482015260156024820152600080516020612eab833981519152604482015290519081900360640190fd5b60005b8151811015610d7d57610d75828281518110610d6857fe5b6020026020010151612758565b600101610d50565b50506001600055565b6008546001600160a01b031681565b60026000541415610ddb576040805162461bcd60e51b815260206004820152601f6024820152600080516020612e8b833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b03163314610e2d576040805162461bcd60e51b81526020600482015260156024820152600080516020612eab833981519152604482015290519081900360640190fd5b61092a81612758565b6003546001600160a01b031681565b600060026000541415610e8d576040805162461bcd60e51b815260206004820152601f6024820152600080516020612e8b833981519152604482015290519081900360640190fd5b600260005583610ed2576040805162461bcd60e51b815260206004820152601d6024820152600080516020612ff7833981519152604482015290519081900360640190fd5b600c54604080516317eb2a1560e01b81523360048201819052602482018190526001600160a01b038981166044840152606483018990526084830188905260a483018790529251909360009316916317eb2a159160c480830192602092919082900301818787803b158015610f4657600080fd5b505af1158015610f5a573d6000803e3d6000fd5b505050506040513d6020811015610f7057600080fd5b5051600b5460065460408051631e42d69b60e21b81526001600160a01b03878116600483018190526024830152928316604482015260648101859052905193945091169163790b5a6c9160848082019260009290919082900301818387803b158015610fdb57600080fd5b505af1158015610fef573d6000803e3d6000fd5b5050600a54600b5460408051631e42d69b60e21b81526001600160a01b03888116600483018190526024830152928316604482015260648101879052905191909216935063790b5a6c9250608480830192600092919082900301818387803b15801561105a57600080fd5b505af115801561106e573d6000803e3d6000fd5b5050604080516001600160a01b0386168152602081018590528151600080516020612f6d8339815191529450908190039091019150a160016000559695505050505050565b600154600160a01b900460ff1681565b6002546001600160a01b031681565b60026000541415611118576040805162461bcd60e51b815260206004820152601f6024820152600080516020612e8b833981519152604482015290519081900360640190fd5b60026000908155600954604080516309f4173d60e11b8152336004820181905260248201819052915191936001600160a01b03909316926313e82e7a926044808401936020939083900390910190829087803b15801561117757600080fd5b505af115801561118b573d6000803e3d6000fd5b505050506040513d60208110156111a157600080fd5b5050600b54604080516309f4173d60e11b81526001600160a01b03848116600483018190526024830152915191909216916313e82e7a9160448083019260209291908290030181600087803b1580156111f957600080fd5b505af115801561120d573d6000803e3d6000fd5b505050506040513d602081101561122357600080fd5b5050600754604080516309f4173d60e11b81526001600160a01b03848116600483018190526024830152915191909216916313e82e7a9160448083019260209291908290030181600087803b15801561127b57600080fd5b505af115801561128f573d6000803e3d6000fd5b505050506040513d60208110156112a557600080fd5b5050600a54604080516309f4173d60e11b81526001600160a01b03848116600483018190526024830152915191909216916313e82e7a9160448083019260209291908290030181600087803b1580156112fd57600080fd5b505af1158015611311573d6000803e3d6000fd5b505050506040513d602081101561132757600080fd5b5050600160005550565b6009546001600160a01b031681565b600060026000541415611388576040805162461bcd60e51b815260206004820152601f6024820152600080516020612e8b833981519152604482015290519081900360640190fd5b6002600055346113df576040805162461bcd60e51b815260206004820152601f60248201527f526577617264526f757465723a20696e76616c6964206d73672e76616c756500604482015290519081900360640190fd5b600260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561142f57600080fd5b505af1158015611443573d6000803e3d6000fd5b5050600254600c546040805163095ea7b360e01b81526001600160a01b039283166004820152346024820152905191909216945063095ea7b39350604480830193506020928290030181600087803b15801561149e57600080fd5b505af11580156114b2573d6000803e3d6000fd5b505050506040513d60208110156114c857600080fd5b5050600c54600254604080516317eb2a1560e01b815230600482015233602482018190526001600160a01b0393841660448301523460648301526084820188905260a482018790529151919360009316916317eb2a159160c48082019260209290919082900301818787803b15801561154057600080fd5b505af1158015611554573d6000803e3d6000fd5b505050506040513d602081101561156a57600080fd5b5051600b5460065460408051631e42d69b60e21b81526001600160a01b03878116600483018190526024830152928316604482015260648101859052905193945091169163790b5a6c9160848082019260009290919082900301818387803b1580156115d557600080fd5b505af11580156115e9573d6000803e3d6000fd5b5050600a54600b5460408051631e42d69b60e21b81526001600160a01b03888116600483018190526024830152928316604482015260648101879052905191909216935063790b5a6c9250608480830192600092919082900301818387803b15801561165457600080fd5b505af1158015611668573d6000803e3d6000fd5b5050604080516001600160a01b0386168152602081018590528151600080516020612f6d8339815191529450908190039091019150a16001600055949350505050565b600260005414156116f1576040805162461bcd60e51b815260206004820152601f6024820152600080516020612e8b833981519152604482015290519081900360640190fd5b60026000556001546001600160a01b03163314611743576040805162461bcd60e51b81526020600482015260156024820152600080516020612eab833981519152604482015290519081900360640190fd5b600354610d7d90339084906001600160a01b031684612550565b600260005414156117a3576040805162461bcd60e51b815260206004820152601f6024820152600080516020612e8b833981519152604482015290519081900360640190fd5b60026000908155600754604080516309f4173d60e11b8152336004820181905260248201819052915191936001600160a01b03909316926313e82e7a926044808401936020939083900390910190829087803b15801561127b57600080fd5b60026000541415611848576040805162461bcd60e51b815260206004820152601f6024820152600080516020612e8b833981519152604482015290519081900360640190fd5b600260005560045461092a9033906001600160a01b03168361201c565b6004546001600160a01b031681565b6001546001600160a01b031633146118c1576040805162461bcd60e51b81526020600482015260156024820152600080516020612eab833981519152604482015290519081900360640190fd5b600154600160a01b900460ff161561190a5760405162461bcd60e51b8152600401808060200182810382526021815260200180612f056021913960400191505060405180910390fd5b60018054600160a01b60ff60a01b19909116179055600280546001600160a01b03199081166001600160a01b039d8e16179091556003805482169b8d169b909b17909a55600480548b16998c1699909917909855600580548a16978b1697909717909655600680548916958a169590951790945560078054881693891693909317909255600880548716918816919091179055600980548616918716919091179055600b80548516918616919091179055600a80548416918516919091179055600c80549092169216919091179055565b6006546001600160a01b031681565b600060026000541415611a32576040805162461bcd60e51b815260206004820152601f6024820152600080516020612e8b833981519152604482015290519081900360640190fd5b600260005583611a77576040805162461bcd60e51b81526020600482018190526024820152600080516020612fd7833981519152604482015290519081900360640190fd5b600a54600b546040805163098bf59d60e01b815233600482018190526001600160a01b039384166024830152604482018990526064820181905291519193929092169163098bf59d91608480830192600092919082900301818387803b158015611ae057600080fd5b505af1158015611af4573d6000803e3d6000fd5b5050600b546006546040805163098bf59d60e01b81526001600160a01b03878116600483018190529381166024830152604482018c90526064820193909352905191909216935063098bf59d9250608480830192600092919082900301818387803b158015611b6257600080fd5b505af1158015611b76573d6000803e3d6000fd5b5050600c54600254604080516371d597ad60e01b81526001600160a01b0387811660048301529283166024820152604481018b9052606481018a90523060848201529051600095509190921692506371d597ad9160a48082019260209290919082900301818787803b158015611beb57600080fd5b505af1158015611bff573d6000803e3d6000fd5b505050506040513d6020811015611c1557600080fd5b505160025460408051632e1a7d4d60e01b81526004810184905290519293506001600160a01b0390911691632e1a7d4d9160248082019260009290919082900301818387803b158015611c6757600080fd5b505af1158015611c7b573d6000803e3d6000fd5b50611c93925050506001600160a01b0385168261276d565b604080516001600160a01b0384168152602081018890528151600080516020612f8d833981519152929181900390910190a1600160005595945050505050565b600a546001600160a01b031681565b6001546001600160a01b03163314611d2f576040805162461bcd60e51b81526020600482015260156024820152600080516020612eab833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60026000541415611d97576040805162461bcd60e51b815260206004820152601f6024820152600080516020612e8b833981519152604482015290519081900360640190fd5b60026000908155600954604080516309f4173d60e11b8152336004820181905260248201819052915191936001600160a01b03909316926313e82e7a926044808401936020939083900390910190829087803b158015611df657600080fd5b505af1158015611e0a573d6000803e3d6000fd5b505050506040513d6020811015611e2057600080fd5b5050600b54604080516309f4173d60e11b81526001600160a01b03848116600483018190526024830152915191909216916313e82e7a9160448083019260209291908290030181600087803b1580156112fd57600080fd5b6005546001600160a01b031681565b600b546001600160a01b031681565b60026000541415611edc576040805162461bcd60e51b815260206004820152601f6024820152600080516020612e8b833981519152604482015290519081900360640190fd5b600260005560045461092a90339081906001600160a01b031684612550565b60026000541415611f41576040805162461bcd60e51b815260206004820152601f6024820152600080516020612e8b833981519152604482015290519081900360640190fd5b600260005560035461092a90339081906001600160a01b031684612550565b60026000541415611fa6576040805162461bcd60e51b815260206004820152601f6024820152600080516020612e8b833981519152604482015290519081900360640190fd5b6002600055611fb433612758565b6001600055565b600c546001600160a01b031681565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526108c2908490612852565b6000811161205f576040805162461bcd60e51b815260206004820152601d6024820152600080516020612ff7833981519152604482015290519081900360640190fd5b600754604080516310c1c10360e01b81526001600160a01b038681166004830152915160009392909216916310c1c10391602480820192602092909190829003018186803b1580156120b057600080fd5b505afa1580156120c4573d6000803e3d6000fd5b505050506040513d60208110156120da57600080fd5b50516009546008546040805163098bf59d60e01b81526001600160a01b03898116600483018190529381166024830152604482018890526064820193909352905193945091169163098bf59d9160848082019260009290919082900301818387803b15801561214857600080fd5b505af115801561215c573d6000803e3d6000fd5b50506008546007546040805163098bf59d60e01b81526001600160a01b038a8116600483018190529381166024830152604482018990526064820193909352905191909216935063098bf59d9250608480830192600092919082900301818387803b1580156121ca57600080fd5b505af11580156121de573d6000803e3d6000fd5b50506007546040805163098bf59d60e01b81526001600160a01b03898116600483018190528982166024840152604483018990526064830152915191909216935063098bf59d9250608480830192600092919082900301818387803b15801561224657600080fd5b505af115801561225a573d6000803e3d6000fd5b5050600854604080516309f4173d60e11b81526001600160a01b038981166004830181905260248301529151600095509190921692506313e82e7a9160448082019260209290919082900301818787803b1580156122b757600080fd5b505af11580156122cb573d6000803e3d6000fd5b505050506040513d60208110156122e157600080fd5b50519050801561236b5760095460055460408051631e42d69b60e21b81526001600160a01b038981166004830181905260248301529283166044820152606481018590529051919092169163790b5a6c91608480830192600092919082900301818387803b15801561235257600080fd5b505af1158015612366573d6000803e3d6000fd5b505050505b60095460055460408051637aeceb1f60e11b81526001600160a01b03898116600483015292831660248201529051600093929092169163f5d9d63e91604480820192602092909190829003018186803b1580156123c757600080fd5b505afa1580156123db573d6000803e3d6000fd5b505050506040513d60208110156123f157600080fd5b5051905080156125045760006124118461240b8488612903565b90612965565b6009546005546040805163098bf59d60e01b81526001600160a01b038c8116600483018190529381166024830152604482018690526064820193909352905193945091169163098bf59d9160848082019260009290919082900301818387803b15801561247d57600080fd5b505af1158015612491573d6000803e3d6000fd5b505060055460408051632770a7eb60e21b81526001600160a01b038c81166004830152602482018790529151919092169350639dc29fac9250604480830192600092919082900301818387803b1580156124ea57600080fd5b505af11580156124fe573d6000803e3d6000fd5b50505050505b604080516001600160a01b03881681526020810186905281517fe9da6f830e88eb523af6d57c34cc795daaafe1ab891b6ec4f276a550532124a5929181900390910190a1505050505050565b60008111612593576040805162461bcd60e51b815260206004820152601d6024820152600080516020612ff7833981519152604482015290519081900360640190fd5b60075460408051631e42d69b60e21b81526001600160a01b03878116600483015286811660248301528581166044830152606482018590529151919092169163790b5a6c91608480830192600092919082900301818387803b1580156125f857600080fd5b505af115801561260c573d6000803e3d6000fd5b505060085460075460408051631e42d69b60e21b81526001600160a01b03898116600483018190526024830152928316604482015260648101879052905191909216935063790b5a6c9250608480830192600092919082900301818387803b15801561267757600080fd5b505af115801561268b573d6000803e3d6000fd5b505060095460085460408051631e42d69b60e21b81526001600160a01b03898116600483018190526024830152928316604482015260648101879052905191909216935063790b5a6c9250608480830192600092919082900301818387803b1580156126f657600080fd5b505af115801561270a573d6000803e3d6000fd5b5050604080516001600160a01b03871681526020810185905281517f277a108bb56dcaa99fe060708d8fdf34a9ad95c3f857452c0a2621154ec90b789450908190039091019150a150505050565b612761816129a4565b61276a81612b5c565b50565b804710156127c2576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d806000811461280d576040519150601f19603f3d011682016040523d82523d6000602084013e612812565b606091505b50509050806108c25760405162461bcd60e51b815260040180806020018281038252603a815260200180612ecb603a913960400191505060405180910390fd5b60606128a7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612c079092919063ffffffff16565b8051909150156108c2578080602001905160208110156128c657600080fd5b50516108c25760405162461bcd60e51b815260040180806020018281038252602a815260200180612fad602a913960400191505060405180910390fd5b6000826129125750600061295f565b8282028284828161291f57fe5b041461295c5760405162461bcd60e51b8152600401808060200182810382526021815260200180612f4c6021913960400191505060405180910390fd5b90505b92915050565b600061295c83836040518060400160405280601a815260200179536166654d6174683a206469766973696f6e206279207a65726f60301b815250612c20565b600754604080516309f4173d60e11b81526001600160a01b03848116600483018190526024830152915160009392909216916313e82e7a9160448082019260209290919082900301818787803b1580156129fd57600080fd5b505af1158015612a11573d6000803e3d6000fd5b505050506040513d6020811015612a2757600080fd5b505190508015612a4b57600454612a4b90839081906001600160a01b031684612550565b600854604080516309f4173d60e11b81526001600160a01b03858116600483018190526024830152915160009392909216916313e82e7a9160448082019260209290919082900301818787803b158015612aa457600080fd5b505af1158015612ab8573d6000803e3d6000fd5b505050506040513d6020811015612ace57600080fd5b5051905080156108c25760095460055460408051631e42d69b60e21b81526001600160a01b038781166004830181905260248301529283166044820152606481018590529051919092169163790b5a6c91608480830192600092919082900301818387803b158015612b3f57600080fd5b505af1158015612b53573d6000803e3d6000fd5b50505050505050565b600a54604080516309f4173d60e11b81526001600160a01b03848116600483018190526024830152915160009392909216916313e82e7a9160448082019260209290919082900301818787803b158015612bb557600080fd5b505af1158015612bc9573d6000803e3d6000fd5b505050506040513d6020811015612bdf57600080fd5b505190508015612c0357600454612c0390839081906001600160a01b031684612550565b5050565b6060612c168484600085612cc2565b90505b9392505050565b60008183612cac5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612c71578181015183820152602001612c59565b50505050905090810190601f168015612c9e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612cb857fe5b0495945050505050565b606082471015612d035760405162461bcd60e51b8152600401808060200182810382526026815260200180612f266026913960400191505060405180910390fd5b612d0c85612e1e565b612d5d576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310612d9c5780518252601f199092019160209182019101612d7d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612dfe576040519150601f19603f3d011682016040523d82523d6000602084013e612e03565b606091505b5091509150612e13828286612e24565b979650505050505050565b3b151590565b60608315612e33575081612c19565b825115612e435782518084602001fd5b60405162461bcd60e51b8152602060048201818152845160248401528451859391928392604401919085019080838360008315612c71578181015183820152602001612c5956fe5265656e7472616e637947756172643a207265656e7472616e742063616c6c00476f7665726e61626c653a20666f7262696464656e0000000000000000000000416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564526577617264526f757465723a20616c726561647920696e697469616c697a6564416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a4725d47fa458d9222498e4d63f34527cf7318c1506f89d9092b35fdbcb64f3a1cb6202519b6b6c72ba5ed11e2c3f53af3cea010f96bfc705584e53e75cf034c5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564526577617264526f757465723a20696e76616c6964205f676c70416d6f756e74526577617264526f757465723a20696e76616c6964205f616d6f756e74000000a264697066735822122042bf299e1a444b564c14d9e0ed393d463ef4b8631aee6be1a562b1ceb98be22064736f6c634300060c0033
Deployed ByteCode Sourcemap
25574:9868:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26449:4;;-1:-1:-1;;;;;26449:4:0;26435:10;:18;26427:53;;;;;-1:-1:-1;;;26427:53:0;;;;;;;;;;;;-1:-1:-1;;;26427:53:0;;;;;;;;;;;;;;;25574:9868;;;;;27438:156;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27438:156:0;;;;;;;;;;;;;;;;;:::i;28334:115::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28334:115:0;;:::i;25944:31::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;25944:31:0;;;;;;;;;;;;;;27602:293;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27602:293:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27602:293:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27602:293:0;;;;;;;;-1:-1:-1;27602:293:0;;-1:-1:-1;;;;;27602:293:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27602:293:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27602:293:0;;-1:-1:-1;27602:293:0;;-1:-1:-1;;;;;27602:293:0:i;29986:672::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29986:672:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;25198:18;;;;;;;;;;;;;:::i;32539:207::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32539:207:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32539:207:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32539:207:0;;-1:-1:-1;32539:207:0;;-1:-1:-1;;;;;32539:207:0:i;25982:30::-;;;;;;;;;;;;;:::i;32417:114::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32417:114:0;-1:-1:-1;;;;;32417:114:0;;:::i;25804:18::-;;;;;;;;;;;;;:::i;28584:645::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28584:645:0;;;;;;;;;;;;;;;;;;:::i;25742:25::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;25776:19;;;;;;;;;;;;;:::i;31424:392::-;;;;;;;;;;;;;:::i;26019:28::-;;;;;;;;;;;;;:::i;29237:741::-;;;;;;;;;;;;;;;;-1:-1:-1;29237:741:0;;;;;;;:::i;27903:157::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27903:157:0;;;;;;;;:::i;31824:247::-;;;;;;;;;;;;;:::i;28457:119::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28457:119:0;;:::i;25829:20::-;;;;;;;;;;;;;:::i;26496:860::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26496:860:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25885:18::-;;;;;;;;;;;;;:::i;30666:750::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30666:750:0;;;;;;;;;;;-1:-1:-1;;;;;30666:750:0;;:::i;26056:31::-;;;;;;;;;;;;;:::i;25398:76::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25398:76:0;-1:-1:-1;;;;;25398:76:0;;:::i;32079:240::-;;;;;;;;;;;;;:::i;25856:20::-;;;;;;;;;;;;;:::i;26094:28::-;;;;;;;;;;;;;:::i;28199:127::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28199:127:0;;:::i;28068:123::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28068:123:0;;:::i;32327:82::-;;;;;;;;;;;;;:::i;26131:25::-;;;;;;;;;;;;;:::i;27438:156::-;25341:3;;-1:-1:-1;;;;;25341:3:0;25327:10;:17;25319:51;;;;;-1:-1:-1;;;25319:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25319:51:0;;;;;;;;;;;;;;;27540:46:::1;-1:-1:-1::0;;;;;27540:27:0;::::1;27568:8:::0;27578:7;27540:27:::1;:46::i;:::-;27438:156:::0;;;:::o;28334:115::-;21735:1;22341:7;;:19;;22333:63;;;;;-1:-1:-1;;;22333:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22333:63:0;;;;;;;;;;;;;;;21735:1;22474:7;:18;28428:3:::1;::::0;28404:37:::1;::::0;28416:10:::1;::::0;-1:-1:-1;;;;;28428:3:0::1;28433:7:::0;28404:11:::1;:37::i;:::-;-1:-1:-1::0;21691:1:0;22653:7;:22;28334:115::o;25944:31::-;;;-1:-1:-1;;;;;25944:31:0;;:::o;27602:293::-;21735:1;22341:7;;:19;;22333:63;;;;;-1:-1:-1;;;22333:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22333:63:0;;;;;;;;;;;;;;;21735:1;22474:7;:18;25341:3:::1;::::0;-1:-1:-1;;;;;25341:3:0::1;25327:10;:17;25319:51;;;::::0;;-1:-1:-1;;;25319:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;25319:51:0;;;;;;;;;;;;;::::1;;27746:3:::2;::::0;-1:-1:-1;;;;;27746:3:0::2;27731:12;27760:128;27784:9;:16;27780:1;:20;27760:128;;;27822:54;27832:10;27844:9;27854:1;27844:12;;;;;;;;;;;;;;27858:4;27864:8;27873:1;27864:11;;;;;;;;;;;;;;27822:9;:54::i;:::-;27802:3;;27760:128;;;-1:-1:-1::0;;21691:1:0;22653:7;:22;-1:-1:-1;;27602:293:0:o;29986:672::-;30121:7;21735:1;22341:7;;:19;;22333:63;;;;;-1:-1:-1;;;22333:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22333:63:0;;;;;;;;;;;;;;;21735:1;22474:7;:18;30149:14;30141:59:::1;;;::::0;;-1:-1:-1;;;30141:59:0;;::::1;;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;;;;;;;30141:59:0;;;;;;;;;;;;;::::1;;30267:16;::::0;30312:13:::1;::::0;30252:95:::1;::::0;;-1:-1:-1;;;30252:95:0;;30231:10:::1;30252:95;::::0;::::1;::::0;;;-1:-1:-1;;;;;30312:13:0;;::::1;30252:95:::0;;;;;;;;;;;;;;;;;;30231:10;;30267:16;;;::::1;::::0;30252:50:::1;::::0;:95;;;;;30213:15:::1;::::0;30252:95;;;;;;;30213:15;30267:16;30252:95;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;30373:13:0::1;::::0;30415:3:::1;::::0;30358:82:::1;::::0;;-1:-1:-1;;;30358:82:0;;-1:-1:-1;;;;;30358:82:0;;::::1;;::::0;::::1;::::0;;;30415:3;;::::1;30358:82:::0;;;;;;;;;;;;;;;;;;;30373:13;;;::::1;::::0;-1:-1:-1;30358:47:0::1;::::0;-1:-1:-1;30358:82:0;;;;;30373:13:::1;::::0;30358:82;;;;;;;30373:13;;30358:82;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;30483:10:0::1;::::0;30471:101:::1;::::0;;-1:-1:-1;;;30471:101:0;;-1:-1:-1;;;;;30471:101:0;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;30451:17:::1;::::0;-1:-1:-1;30483:10:0;;;::::1;::::0;-1:-1:-1;30471:49:0::1;::::0;:101;;;;;::::1;::::0;;;;;;;;;30451:17;30483:10;30471:101;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;30471:101:0;30590:31:::1;::::0;;-1:-1:-1;;;;;30590:31:0;::::1;::::0;;30471:101:::1;30590:31:::0;::::1;::::0;;;;;30471:101;;-1:-1:-1;;;;;;;;;;;;30590:31:0;;;;;;;;;::::1;21691:1:::0;22653:7;:22;30641:9;29986:672;-1:-1:-1;;;;;;29986:672:0:o;25198:18::-;;;-1:-1:-1;;;;;25198:18:0;;:::o;32539:207::-;21735:1;22341:7;;:19;;22333:63;;;;;-1:-1:-1;;;22333:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22333:63:0;;;;;;;;;;;;;;;21735:1;22474:7;:18;25341:3:::1;::::0;-1:-1:-1;;;;;25341:3:0::1;25327:10;:17;25319:51;;;::::0;;-1:-1:-1;;;25319:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;25319:51:0;;;;;;;;;;;;;::::1;;32647:9:::2;32642:97;32666:9;:16;32662:1;:20;32642:97;;;32704:23;32714:9;32724:1;32714:12;;;;;;;;;;;;;;32704:9;:23::i;:::-;32684:3;;32642:97;;;-1:-1:-1::0;;21691:1:0;22653:7;:22;32539:207::o;25982:30::-;;;-1:-1:-1;;;;;25982:30:0;;:::o;32417:114::-;21735:1;22341:7;;:19;;22333:63;;;;;-1:-1:-1;;;22333:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22333:63:0;;;;;;;;;;;;;;;21735:1;22474:7;:18;25341:3:::1;::::0;-1:-1:-1;;;;;25341:3:0::1;25327:10;:17;25319:51;;;::::0;;-1:-1:-1;;;25319:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;25319:51:0;;;;;;;;;;;;;::::1;;32504:19:::2;32514:8;32504:9;:19::i;25804:18::-:0;;;-1:-1:-1;;;;;25804:18:0;;:::o;28584:645::-;28708:7;21735:1;22341:7;;:19;;22333:63;;;;;-1:-1:-1;;;22333:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22333:63:0;;;;;;;;;;;;;;;21735:1;22474:7;:18;28736:11;28728:53:::1;;;::::0;;-1:-1:-1;;;28728:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28728:53:0;;;;;;;;;;;;;::::1;;28865:10;::::0;28853:100:::1;::::0;;-1:-1:-1;;;28853:100:0;;28812:10:::1;28853:100;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;28853:100:0;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;28812:10;;28794:15:::1;::::0;28865:10:::1;::::0;28853:46:::1;::::0;:100;;;;;::::1;::::0;;;;;;;;28794:15;28865:10;28853:100;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;28853:100:0;28979:13:::1;::::0;29028:3:::1;::::0;28964:79:::1;::::0;;-1:-1:-1;;;28964:79:0;;-1:-1:-1;;;;;28964:79:0;;::::1;;::::0;::::1;::::0;;;;;;;29028:3;;::::1;28964:79:::0;;;;;;;;;;;;28853:100;;-1:-1:-1;28979:13:0;::::1;::::0;28964:45:::1;::::0;:79;;;;;28979:13:::1;::::0;28964:79;;;;;;;;28979:13;;28964:79;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;29069:16:0::1;::::0;29121:13:::1;::::0;29054:92:::1;::::0;;-1:-1:-1;;;29054:92:0;;-1:-1:-1;;;;;29054:92:0;;::::1;;::::0;::::1;::::0;;;;;;;29121:13;;::::1;29054:92:::0;;;;;;;;;;;;29069:16;;;::::1;::::0;-1:-1:-1;29054:48:0::1;::::0;-1:-1:-1;29054:92:0;;;;;29069:16:::1;::::0;29054:92;;;;;;;29069:16;;29054:92;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;29164:28:0::1;::::0;;-1:-1:-1;;;;;29164:28:0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;;;;;;;29164:28:0;-1:-1:-1;29164:28:0;;;;;;;;-1:-1:-1;29164:28:0::1;21691:1:::0;22653:7;:22;29212:9;28584:645;-1:-1:-1;;;;;;28584:645:0:o;25742:25::-;;;-1:-1:-1;;;25742:25:0;;;;;:::o;25776:19::-;;;-1:-1:-1;;;;;25776:19:0;;:::o;31424:392::-;21735:1;22341:7;;:19;;22333:63;;;;;-1:-1:-1;;;22333:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22333:63:0;;;;;;;;;;;;;;;21735:1;22474:7;:18;;;31530:13:::1;::::0;31515:63:::1;::::0;;-1:-1:-1;;;31515:63:0;;31492:10:::1;31515:63;::::0;::::1;::::0;;;;;;;;;;;31492:10;;-1:-1:-1;;;;;31530:13:0;;::::1;::::0;31515:45:::1;::::0;:63;;;;;::::1;::::0;;;;;;;;;;;31530:13;31515:63;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;31604:13:0::1;::::0;31589:63:::1;::::0;;-1:-1:-1;;;31589:63:0;;-1:-1:-1;;;;;31589:63:0;;::::1;;::::0;::::1;::::0;;;;;;;;;31604:13;;;::::1;::::0;31589:45:::1;::::0;:63;;;;;31515::::1;::::0;31589;;;;;;;31604:13:::1;::::0;31589:63;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;31680:16:0::1;::::0;31665:66:::1;::::0;;-1:-1:-1;;;31665:66:0;;-1:-1:-1;;;;;31665:66:0;;::::1;;::::0;::::1;::::0;;;;;;;;;31680:16;;;::::1;::::0;31665:48:::1;::::0;:66;;;;;31589:63:::1;::::0;31665:66;;;;;;;31680:16:::1;::::0;31665:66;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;31757:16:0::1;::::0;31742:66:::1;::::0;;-1:-1:-1;;;31742:66:0;;-1:-1:-1;;;;;31742:66:0;;::::1;;::::0;::::1;::::0;;;;;;;;;31757:16;;;::::1;::::0;31742:48:::1;::::0;:66;;;;;31665::::1;::::0;31742;;;;;;;31757:16:::1;::::0;31742:66;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;21691:1:0;22653:7;:22;-1:-1:-1;31424:392:0:o;26019:28::-;;;-1:-1:-1;;;;;26019:28:0;;:::o;29237:741::-;29339:7;21735:1;22341:7;;:19;;22333:63;;;;;-1:-1:-1;;;22333:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22333:63:0;;;;;;;;;;;;;;;21735:1;22474:7;:18;29367:9:::1;29359:57;;;::::0;;-1:-1:-1;;;29359:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;29435:4;;;;;;;;;-1:-1:-1::0;;;;;29435:4:0::1;-1:-1:-1::0;;;;;29429:19:0::1;;29456:9;29429:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;29486:4:0::1;::::0;29500:10:::1;::::0;29479:43:::1;::::0;;-1:-1:-1;;;29479:43:0;;-1:-1:-1;;;;;29500:10:0;;::::1;29479:43;::::0;::::1;::::0;29512:9:::1;29479:43:::0;;;;;;29486:4;;;::::1;::::0;-1:-1:-1;29479:20:0::1;::::0;-1:-1:-1;29479:43:0;;;;;-1:-1:-1;29479:43:0::1;::::0;;;;;;29486:4:::1;::::0;29479:43;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;29606:10:0::1;::::0;29665:4:::1;::::0;29594:106:::1;::::0;;-1:-1:-1;;;29594:106:0;;29649:4:::1;29594:106;::::0;::::1;::::0;29553:10:::1;29594:106:::0;;;;;;-1:-1:-1;;;;;29665:4:0;;::::1;29594:106:::0;;;;29671:9:::1;29594:106:::0;;;;;;;;;;;;;;;;;;29553:10;;29535:15:::1;::::0;29606:10:::1;::::0;29594:46:::1;::::0;:106;;;;;29479:43:::1;::::0;29594:106;;;;;;;;29535:15;29606:10;29594:106;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;29594:106:0;29728:13:::1;::::0;29777:3:::1;::::0;29713:79:::1;::::0;;-1:-1:-1;;;29713:79:0;;-1:-1:-1;;;;;29713:79:0;;::::1;;::::0;::::1;::::0;;;;;;;29777:3;;::::1;29713:79:::0;;;;;;;;;;;;29594:106;;-1:-1:-1;29728:13:0;::::1;::::0;29713:45:::1;::::0;:79;;;;;29728:13:::1;::::0;29713:79;;;;;;;;29728:13;;29713:79;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;29818:16:0::1;::::0;29870:13:::1;::::0;29803:92:::1;::::0;;-1:-1:-1;;;29803:92:0;;-1:-1:-1;;;;;29803:92:0;;::::1;;::::0;::::1;::::0;;;;;;;29870:13;;::::1;29803:92:::0;;;;;;;;;;;;29818:16;;;::::1;::::0;-1:-1:-1;29803:48:0::1;::::0;-1:-1:-1;29803:92:0;;;;;29818:16:::1;::::0;29803:92;;;;;;;29818:16;;29803:92;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;29913:28:0::1;::::0;;-1:-1:-1;;;;;29913:28:0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;;;;;;;29913:28:0;-1:-1:-1;29913:28:0;;;;;;;;-1:-1:-1;29913:28:0::1;21691:1:::0;22653:7;:22;29961:9;29237:741;-1:-1:-1;;;;29237:741:0:o;27903:157::-;21735:1;22341:7;;:19;;22333:63;;;;;-1:-1:-1;;;22333:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22333:63:0;;;;;;;;;;;;;;;21735:1;22474:7;:18;25341:3:::1;::::0;-1:-1:-1;;;;;25341:3:0::1;25327:10;:17;25319:51;;;::::0;;-1:-1:-1;;;25319:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;25319:51:0;;;;;;;;;;;;;::::1;;28039:3:::2;::::0;28007:45:::2;::::0;28017:10:::2;::::0;28029:8;;-1:-1:-1;;;;;28039:3:0::2;28044:7:::0;28007:9:::2;:45::i;31824:247::-:0;21735:1;22341:7;;:19;;22333:63;;;;;-1:-1:-1;;;22333:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22333:63:0;;;;;;;;;;;;;;;21735:1;22474:7;:18;;;31935:16:::1;::::0;31920:66:::1;::::0;;-1:-1:-1;;;31920:66:0;;31897:10:::1;31920:66;::::0;::::1;::::0;;;;;;;;;;;31897:10;;-1:-1:-1;;;;;31935:16:0;;::::1;::::0;31920:48:::1;::::0;:66;;;;;::::1;::::0;;;;;;;;;;;31935:16;31920:66;::::1;;::::0;::::1;;;;::::0;::::1;28457:119:::0;21735:1;22341:7;;:19;;22333:63;;;;;-1:-1:-1;;;22333:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22333:63:0;;;;;;;;;;;;;;;21735:1;22474:7;:18;28553:5:::1;::::0;28529:39:::1;::::0;28541:10:::1;::::0;-1:-1:-1;;;;;28553:5:0::1;28560:7:::0;28529:11:::1;:39::i;25829:20::-:0;;;-1:-1:-1;;;;;25829:20:0;;:::o;26496:860::-;25341:3;;-1:-1:-1;;;;;25341:3:0;25327:10;:17;25319:51;;;;;-1:-1:-1;;;25319:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25319:51:0;;;;;;;;;;;;;;;26883:13:::1;::::0;-1:-1:-1;;;26883:13:0;::::1;;;26882:14;26874:60;;;;-1:-1:-1::0;;;26874:60:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26961:4;26945:20:::0;;-1:-1:-1;;;;;;;26945:20:0;;::::1;;::::0;;26978:4:::1;:12:::0;;-1:-1:-1;;;;;;26978:12:0;;::::1;-1:-1:-1::0;;;;;26978:12:0;;::::1;;::::0;;;27003:3:::1;:10:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;27024:5:::1;:14:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;27049:5:::1;:14:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;27076:3:::1;:10:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;27099:16:::1;:36:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;27146:15:::1;:34:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;27191:13:::1;:30:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;27234:13:::1;:30:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;27275:16:::1;:36:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;27324:10:::1;:24:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;26496:860::o;25885:18::-;;;-1:-1:-1;;;;;25885:18:0;;:::o;30666:750::-;30793:7;21735:1;22341:7;;:19;;22333:63;;;;;-1:-1:-1;;;22333:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22333:63:0;;;;;;;;;;;;;;;21735:1;22474:7;:18;30821:14;30813:59:::1;;;::::0;;-1:-1:-1;;;30813:59:0;;::::1;;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;;;;;;;30813:59:0;;;;;;;;;;;;;::::1;;30939:16;::::0;30984:13:::1;::::0;30924:95:::1;::::0;;-1:-1:-1;;;30924:95:0;;30903:10:::1;30924:95;::::0;::::1;::::0;;;-1:-1:-1;;;;;30984:13:0;;::::1;30924:95:::0;;;;;;;;;;;;;;;;;;30903:10;;30939:16;;;::::1;::::0;30924:50:::1;::::0;:95;;;;;30885:15:::1;::::0;30924:95;;;;;;;30885:15;30939:16;30924:95;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;31045:13:0::1;::::0;31087:3:::1;::::0;31030:82:::1;::::0;;-1:-1:-1;;;31030:82:0;;-1:-1:-1;;;;;31030:82:0;;::::1;;::::0;::::1;::::0;;;31087:3;;::::1;31030:82:::0;;;;;;;;;;;;;;;;;;;31045:13;;;::::1;::::0;-1:-1:-1;31030:47:0::1;::::0;-1:-1:-1;31030:82:0;;;;;31045:13:::1;::::0;31030:82;;;;;;;31045:13;;31030:82;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;31155:10:0::1;::::0;31202:4:::1;::::0;31143:100:::1;::::0;;-1:-1:-1;;;31143:100:0;;-1:-1:-1;;;;;31143:100:0;;::::1;;::::0;::::1;::::0;31202:4;;::::1;31143:100:::0;;;;;;;;;;;;;;;;31237:4:::1;31143:100:::0;;;;;;31123:17:::1;::::0;-1:-1:-1;31155:10:0;;;::::1;::::0;-1:-1:-1;31143:49:0::1;::::0;:100;;;;;::::1;::::0;;;;;;;;;31123:17;31155:10;31143:100;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31143:100:0;31262:4:::1;::::0;31256:31:::1;::::0;;-1:-1:-1;;;31256:31:0;;::::1;::::0;::::1;::::0;;;;;31143:100;;-1:-1:-1;;;;;;31262:4:0;;::::1;::::0;31256:20:::1;::::0;:31;;;;;31262:4:::1;::::0;31256:31;;;;;;;;31262:4;;31256:31;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;31300:30:0::1;::::0;-1:-1:-1;;;;;;;;31300:19:0;::::1;31320:9:::0;31300:19:::1;:30::i;:::-;31348:31;::::0;;-1:-1:-1;;;;;31348:31:0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;;;;;;;31348:31:0;;;;;;;;;::::1;21691:1:::0;22653:7;:22;31399:9;30666:750;-1:-1:-1;;;;;30666:750:0:o;26056:31::-;;;-1:-1:-1;;;;;26056:31:0;;:::o;25398:76::-;25341:3;;-1:-1:-1;;;;;25341:3:0;25327:10;:17;25319:51;;;;;-1:-1:-1;;;25319:51:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;25319:51:0;;;;;;;;;;;;;;;25456:3:::1;:10:::0;;-1:-1:-1;;;;;;25456:10:0::1;-1:-1:-1::0;;;;;25456:10:0;;;::::1;::::0;;;::::1;::::0;;25398:76::o;32079:240::-;21735:1;22341:7;;:19;;22333:63;;;;;-1:-1:-1;;;22333:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22333:63:0;;;;;;;;;;;;;;;21735:1;22474:7;:18;;;32189:13:::1;::::0;32174:63:::1;::::0;;-1:-1:-1;;;32174:63:0;;32151:10:::1;32174:63;::::0;::::1;::::0;;;;;;;;;;;32151:10;;-1:-1:-1;;;;;32189:13:0;;::::1;::::0;32174:45:::1;::::0;:63;;;;;::::1;::::0;;;;;;;;;;;32189:13;32174:63;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;32263:13:0::1;::::0;32248:63:::1;::::0;;-1:-1:-1;;;32248:63:0;;-1:-1:-1;;;;;32248:63:0;;::::1;;::::0;::::1;::::0;;;;;;;;;32263:13;;;::::1;::::0;32248:45:::1;::::0;:63;;;;;32174::::1;::::0;32248;;;;;;;32263:13:::1;::::0;32248:63;::::1;;::::0;::::1;;;;::::0;::::1;25856:20:::0;;;-1:-1:-1;;;;;25856:20:0;;:::o;26094:28::-;;;-1:-1:-1;;;;;26094:28:0;;:::o;28199:127::-;21735:1;22341:7;;:19;;22333:63;;;;;-1:-1:-1;;;22333:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22333:63:0;;;;;;;;;;;;;;;21735:1;22474:7;:18;28303:5:::1;::::0;28269:49:::1;::::0;28279:10:::1;::::0;;;-1:-1:-1;;;;;28303:5:0::1;28310:7:::0;28269:9:::1;:49::i;28068:123::-:0;21735:1;22341:7;;:19;;22333:63;;;;;-1:-1:-1;;;22333:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22333:63:0;;;;;;;;;;;;;;;21735:1;22474:7;:18;28170:3:::1;::::0;28136:47:::1;::::0;28146:10:::1;::::0;;;-1:-1:-1;;;;;28170:3:0::1;28175:7:::0;28136:9:::1;:47::i;32327:82::-:0;21735:1;22341:7;;:19;;22333:63;;;;;-1:-1:-1;;;22333:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22333:63:0;;;;;;;;;;;;;;;21735:1;22474:7;:18;32380:21:::1;32390:10;32380:9;:21::i;:::-;21691:1:::0;22653:7;:22;32327:82::o;26131:25::-;;;-1:-1:-1;;;;;26131:25:0;;:::o;16932:177::-;17042:58;;;-1:-1:-1;;;;;17042:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17042:58:0;-1:-1:-1;;;17042:58:0;;;17015:86;;17035:5;;17015:19;:86::i;34210:1229::-;34319:1;34309:7;:11;34301:53;;;;;-1:-1:-1;;;34301:53:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;34301:53:0;;;;;;;;;;;;;;;34400:16;;34385:56;;;-1:-1:-1;;;34385:56:0;;-1:-1:-1;;;;;34385:56:0;;;;;;;;;34367:15;;34400:16;;;;;34385:46;;:56;;;;;;;;;;;;;;;34400:16;34385:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34385:56:0;34469:13;;34512:15;;34454:93;;;-1:-1:-1;;;34454:93:0;;-1:-1:-1;;;;;34454:93:0;;;;;;;;;34512:15;;;34454:93;;;;;;;;;;;;;;;;;;;34385:56;;-1:-1:-1;34469:13:0;;;34454:47;;:93;;;;;34469:13;;34454:93;;;;;;;;34469:13;;34454:93;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34573:15:0;;34618:16;;34558:96;;;-1:-1:-1;;;34558:96:0;;-1:-1:-1;;;;;34558:96:0;;;;;;;;;34618:16;;;34558:96;;;;;;;;;;;;;;;;;;;34573:15;;;;;-1:-1:-1;34558:49:0;;-1:-1:-1;34558:96:0;;;;;34573:15;;34558:96;;;;;;;34573:15;;34558:96;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34680:16:0;;34665:87;;;-1:-1:-1;;;34665:87:0;;-1:-1:-1;;;;;34665:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;34680:16;;;;;-1:-1:-1;34665:50:0;;-1:-1:-1;34665:87:0;;;;;34680:16;;34665:87;;;;;;;34680:16;;34665:87;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34802:15:0;;34787:67;;;-1:-1:-1;;;34787:67:0;;-1:-1:-1;;;;;34787:67:0;;;;;;;;;;;;;;;34765:19;;-1:-1:-1;34802:15:0;;;;;-1:-1:-1;34787:47:0;;:67;;;;;;;;;;;;;;;34765:19;34802:15;34787:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34787:67:0;;-1:-1:-1;34869:15:0;;34865:133;;34916:13;;34967:5;;34901:85;;;-1:-1:-1;;;34901:85:0;;-1:-1:-1;;;;;34901:85:0;;;;;;;;;;;;;34967:5;;;34901:85;;;;;;;;;;;;34916:13;;;;;34901:45;;:85;;;;;34916:13;;34901:85;;;;;;;34916:13;;34901:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34865:133;35047:13;;35088:5;;35032:62;;;-1:-1:-1;;;35032:62:0;;-1:-1:-1;;;;;35032:62:0;;;;;;;35088:5;;;35032:62;;;;;;35010:19;;35047:13;;;;;35032:45;;:62;;;;;;;;;;;;;;;35047:13;35032:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35032:62:0;;-1:-1:-1;35109:15:0;;35105:280;;35141:23;35167:37;35196:7;35167:24;:11;35183:7;35167:15;:24::i;:::-;:28;;:37::i;:::-;35234:13;;35277:5;;35219:91;;;-1:-1:-1;;;35219:91:0;;-1:-1:-1;;;;;35219:91:0;;;;;;;;;35277:5;;;35219:91;;;;;;;;;;;;;;;;;;;35141:63;;-1:-1:-1;35234:13:0;;;35219:47;;:91;;;;;35234:13;;35219:91;;;;;;;;35234:13;;35219:91;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35335:5:0;;35325:48;;;-1:-1:-1;;;35325:48:0;;-1:-1:-1;;;;;35325:48:0;;;;;;;;;;;;;;;35335:5;;;;;-1:-1:-1;35325:21:0;;-1:-1:-1;35325:48:0;;;;;35335:5;;35325:48;;;;;;;35335:5;;35325:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35105:280;;35402:29;;;-1:-1:-1;;;;;35402:29:0;;;;;;;;;;;;;;;;;;;;;;;34210:1229;;;;;;:::o;33670:532::-;33802:1;33792:7;:11;33784:53;;;;;-1:-1:-1;;;33784:53:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;33784:53:0;;;;;;;;;;;;;;;33865:16;;33850:92;;;-1:-1:-1;;;33850:92:0;;-1:-1:-1;;;;;33850:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33865:16;;;;;33850:48;;:92;;;;;33865:16;;33850:92;;;;;;;33865:16;;33850:92;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33968:15:0;;34021:16;;33953:94;;;-1:-1:-1;;;33953:94:0;;-1:-1:-1;;;;;33953:94:0;;;;;;;;;;;;;34021:16;;;33953:94;;;;;;;;;;;;33968:15;;;;;-1:-1:-1;33953:47:0;;-1:-1:-1;33953:94:0;;;;;33968:15;;33953:94;;;;;;;33968:15;;33953:94;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34073:13:0;;34124:15;;34058:91;;;-1:-1:-1;;;34058:91:0;;-1:-1:-1;;;;;34058:91:0;;;;;;;;;;;;;34124:15;;;34058:91;;;;;;;;;;;;34073:13;;;;;-1:-1:-1;34058:45:0;;-1:-1:-1;34058:91:0;;;;;34073:13;;34058:91;;;;;;;34073:13;;34058:91;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34167:27:0;;;-1:-1:-1;;;;;34167:27:0;;;;;;;;;;;;;;-1:-1:-1;34167:27:0;;;;;;;;-1:-1:-1;34167:27:0;33670:532;;;;:::o;32754:119::-;32810:22;32823:8;32810:12;:22::i;:::-;32843;32856:8;32843:12;:22::i;:::-;32754:119;:::o;10385:397::-;10500:6;10475:21;:31;;10467:73;;;;;-1:-1:-1;;;10467:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10650:35;;10632:12;;-1:-1:-1;;;;;10650:14:0;;;10673:6;;10632:12;10650:35;10632:12;10650:35;10673:6;10650:14;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10631:54;;;10704:7;10696:78;;;;-1:-1:-1;;;10696:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19237:761;19661:23;19687:69;19715:4;19687:69;;;;;;;;;;;;;;;;;19695:5;-1:-1:-1;;;;;19687:27:0;;;:69;;;;;:::i;:::-;19771:17;;19661:95;;-1:-1:-1;19771:21:0;19767:224;;19913:10;19902:30;;;;;;;;;;;;;;;-1:-1:-1;19902:30:0;19894:85;;;;-1:-1:-1;;;19894:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2369:471;2427:7;2672:6;2668:47;;-1:-1:-1;2702:1:0;2695:8;;2668:47;2739:5;;;2743:1;2739;:5;:1;2763:5;;;;;:10;2755:56;;;;-1:-1:-1;;;2755:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2831:1;-1:-1:-1;2369:471:0;;;;;:::o;3316:132::-;3374:7;3401:39;3405:1;3408;3401:39;;;;;;;;;;;;;-1:-1:-1;;;3401:39:0;;;:3;:39::i;32881:509::-;32977:16;;32962:68;;;-1:-1:-1;;;32962:68:0;;-1:-1:-1;;;;;32962:68:0;;;;;;;;;;;;;;;32940:19;;32977:16;;;;;32962:48;;:68;;;;;;;;;;;;;;;32940:19;32977:16;32962:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32962:68:0;;-1:-1:-1;33045:15:0;;33041:97;;33107:5;;33077:49;;33087:8;;;;-1:-1:-1;;;;;33107:5:0;33114:11;33077:9;:49::i;:::-;33187:15;;33172:67;;;-1:-1:-1;;;33172:67:0;;-1:-1:-1;;;;;33172:67:0;;;;;;;;;;;;;;;33150:19;;33187:15;;;;;33172:47;;:67;;;;;;;;;;;;;;;33150:19;33187:15;33172:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33172:67:0;;-1:-1:-1;33254:15:0;;33250:133;;33301:13;;33352:5;;33286:85;;;-1:-1:-1;;;33286:85:0;;-1:-1:-1;;;;;33286:85:0;;;;;;;;;;;;;33352:5;;;33286:85;;;;;;;;;;;;33301:13;;;;;33286:45;;:85;;;;;33301:13;;33286:85;;;;;;;33301:13;;33286:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32881:509;;;:::o;33398:264::-;33494:16;;33479:68;;;-1:-1:-1;;;33479:68:0;;-1:-1:-1;;;;;33479:68:0;;;;;;;;;;;;;;;33457:19;;33494:16;;;;;33479:48;;:68;;;;;;;;;;;;;;;33457:19;33494:16;33479:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33479:68:0;;-1:-1:-1;33562:15:0;;33558:97;;33624:5;;33594:49;;33604:8;;;;-1:-1:-1;;;;;33624:5:0;33631:11;33594:9;:49::i;:::-;33398:264;;:::o;11946:195::-;12049:12;12081:52;12103:6;12111:4;12117:1;12120:12;12081:21;:52::i;:::-;12074:59;;11946:195;;;;;;:::o;3944:278::-;4030:7;4065:12;4058:5;4050:28;;;;-1:-1:-1;;;4050:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4089:9;4105:1;4101;:5;;;;;;;3944:278;-1:-1:-1;;;;;3944:278:0:o;12998:530::-;13125:12;13183:5;13158:21;:30;;13150:81;;;;-1:-1:-1;;;13150:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13250:18;13261:6;13250:10;:18::i;:::-;13242:60;;;;;-1:-1:-1;;;13242:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13376:12;13390:23;13417:6;-1:-1:-1;;;;;13417:11:0;13437:5;13445:4;13417:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13417:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13375:75;;;;13468:52;13486:7;13495:10;13507:12;13468:17;:52::i;:::-;13461:59;12998:530;-1:-1:-1;;;;;;;12998:530:0:o;9028:422::-;9395:20;9434:8;;;9028:422::o;15538:742::-;15653:12;15682:7;15678:595;;;-1:-1:-1;15713:10:0;15706:17;;15678:595;15827:17;;:21;15823:439;;16090:10;16084:17;16151:15;16138:10;16134:2;16130:19;16123:44;16038:148;16226:20;;-1:-1:-1;;;16226:20:0;;;;;;;;;;;;;;;;;16233:12;;16226:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Metadata Hash
42bf299e1a444b564c14d9e0ed393d463ef4b8631aee6be1a562b1ceb98be220
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.