Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Multichain Info
No addresses found
Latest 25 from a total of 2,511 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Remove Token Liq... | 13217037 | 1315 days ago | IN | 0 ETH | 0.00530807 | ||||
Withdraw Erc20 | 13216299 | 1315 days ago | IN | 0 ETH | 0.00286453 | ||||
Withdraw Erc20 | 13216295 | 1315 days ago | IN | 0 ETH | 0.00464973 | ||||
Deposit Erc20 | 13213405 | 1316 days ago | IN | 0 ETH | 0.00533808 | ||||
Deposit Erc20 | 13213370 | 1316 days ago | IN | 0 ETH | 0.00479143 | ||||
Send Funds To Us... | 13213363 | 1316 days ago | IN | 0 ETH | 0.00940887 | ||||
Deposit Erc20 | 13212812 | 1316 days ago | IN | 0 ETH | 0.00421624 | ||||
Deposit Erc20 | 13210873 | 1316 days ago | IN | 0 ETH | 0.00336441 | ||||
Send Funds To Us... | 13209771 | 1316 days ago | IN | 0 ETH | 0.00735126 | ||||
Deposit Erc20 | 13207509 | 1317 days ago | IN | 0 ETH | 0.00428467 | ||||
Send Funds To Us... | 13206178 | 1317 days ago | IN | 0 ETH | 0.0078575 | ||||
Send Funds To Us... | 13203487 | 1317 days ago | IN | 0 ETH | 0.00693151 | ||||
Deposit Erc20 | 13202947 | 1317 days ago | IN | 0 ETH | 0.004226 | ||||
Deposit Erc20 | 13202115 | 1318 days ago | IN | 0 ETH | 0.00402585 | ||||
Send Funds To Us... | 13202020 | 1318 days ago | IN | 0 ETH | 0.00646343 | ||||
Deposit Erc20 | 13201707 | 1318 days ago | IN | 0 ETH | 0.00448266 | ||||
Deposit Erc20 | 13201156 | 1318 days ago | IN | 0 ETH | 0.00426969 | ||||
Deposit Erc20 | 13200965 | 1318 days ago | IN | 0 ETH | 0.00616258 | ||||
Deposit Erc20 | 13200815 | 1318 days ago | IN | 0 ETH | 0.00460326 | ||||
Send Funds To Us... | 13200614 | 1318 days ago | IN | 0 ETH | 0.01795114 | ||||
Deposit Erc20 | 13199834 | 1318 days ago | IN | 0 ETH | 0.00803756 | ||||
Send Funds To Us... | 13199099 | 1318 days ago | IN | 0 ETH | 0.01191525 | ||||
Deposit Erc20 | 13198885 | 1318 days ago | IN | 0 ETH | 0.00683166 | ||||
Deposit Erc20 | 13198861 | 1318 days ago | IN | 0 ETH | 0.00867282 | ||||
Deposit Erc20 | 13197498 | 1318 days ago | IN | 0 ETH | 0.00420621 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
LiquidityPoolManager
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-07-30 */ // SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } pragma solidity 0.7.6; /** * a contract must implement this interface in order to support relayed transaction. * It is better to inherit the BaseRelayRecipient as its implementation. */ abstract contract IRelayRecipient { /** * return if the forwarder is trusted to forward relayed transactions to us. * the forwarder is required to verify the sender's signature, and verify * the call is not a replay. */ function isTrustedForwarder(address forwarder) public virtual view returns(bool); /** * return the sender of this call. * if the call came through our trusted forwarder, then the real sender is appended as the last 20 bytes * of the msg.data. * otherwise, return `msg.sender` * should be used in the contract anywhere instead of msg.sender */ function _msgSender() internal virtual view returns (address payable); function versionRecipient() external virtual view returns (string memory); } pragma solidity 0.7.6; /** * A base contract to be inherited by any contract that want to receive relayed transactions * A subclass must use "_msgSender()" instead of "msg.sender" */ abstract contract BaseRelayRecipient is IRelayRecipient { /* * Forwarder singleton we accept calls from */ address public trustedForwarder; /* * require a function to be called through GSN only */ modifier trustedForwarderOnly() { require(msg.sender == address(trustedForwarder), "Function can only be called through the trusted Forwarder"); _; } function isTrustedForwarder(address forwarder) public override view returns(bool) { return forwarder == trustedForwarder; } /** * return the sender of this call. * if the call came through our trusted forwarder, return the original sender. * otherwise, return `msg.sender`. * should be used in the contract anywhere instead of msg.sender */ function _msgSender() internal override virtual view returns (address payable ret) { if (msg.data.length >= 24 && isTrustedForwarder(msg.sender)) { // At this point we know that the sender is a trusted forwarder, // so we trust that the last bytes of msg.data are the verified sender address. // extract sender address from the end of msg.data assembly { ret := shr(96,calldataload(sub(calldatasize(),20))) } } else { return msg.sender; } } } pragma solidity >=0.6.0 <0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } pragma solidity >=0.6.2 <0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // 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); } 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); } } } } pragma solidity >=0.6.0 <0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using 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"); } } } pragma solidity 0.7.6; /** * @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() { _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; } } pragma solidity 0.7.6; // import "../GSN/Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); event PauserChanged( address indexed previousPauser, address indexed newPauser ); bool private _paused; address private _pauser; /** * @dev The pausable constructor sets the original `pauser` of the contract to the sender * account & Initializes the contract in unpaused state.. */ constructor(address pauser) { require(pauser != address(0), "Pauser Address cannot be 0"); _pauser = pauser; _paused = false; } /** * @dev Throws if called by any account other than the pauser. */ modifier onlyPauser() { require( isPauser(), "Only pauser is allowed to perform this operation" ); _; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!_paused, "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(_paused, "Pausable: not paused"); _; } /** * @return the address of the owner. */ function getPauser() public view returns (address) { return _pauser; } /** * @return true if `msg.sender` is the owner of the contract. */ function isPauser() public view returns (bool) { return msg.sender == _pauser; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function isPaused() public view returns (bool) { return _paused; } /** * @dev Allows the current pauser to transfer control of the contract to a newPauser. * @param newPauser The address to transfer pauserShip to. */ function changePauser(address newPauser) public onlyPauser { _changePauser(newPauser); } /** * @dev Transfers control of the contract to a newPauser. * @param newPauser The address to transfer ownership to. */ function _changePauser(address newPauser) internal { require(newPauser != address(0)); emit PauserChanged(_pauser, newPauser); _pauser = newPauser; } function renouncePauser() external virtual onlyPauser { emit PauserChanged(_pauser, address(0)); _pauser = address(0); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function pause() public onlyPauser whenNotPaused { _paused = true; emit Paused(_pauser); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function unpause() public onlyPauser whenPaused { _paused = false; emit Unpaused(_pauser); } } pragma solidity 0.7.6; /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ abstract contract Ownable { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor(address owner) { require(owner != address(0), "Owner Address cannot be 0"); _owner = owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require( isOwner(), "Only contract owner is allowed to perform this operation" ); _; } /** * @return the address of the owner. */ function getOwner() public view returns (address) { return _owner; } /** * @return true if `msg.sender` is the owner of the contract. */ function isOwner() public view returns (bool) { return msg.sender == _owner; } /** * @dev Allows the current owner to relinquish control of the contract. * @notice Renouncing to ownership will leave the contract without an owner. * It will not be possible to call the functions with the `onlyOwner` * modifier anymore. */ function renounceOwnership() external virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0)); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } pragma solidity 0.7.6; contract ExecutorManager is Ownable { address[] internal executors; mapping(address => bool) internal executorStatus; event ExecutorAdded(address executor, address owner); event ExecutorRemoved(address executor, address owner); // MODIFIERS modifier onlyExecutor() { require( executorStatus[msg.sender], "You are not allowed to perform this operation" ); _; } constructor(address owner) Ownable(owner) { require( owner != address(0), "owner cannot be zero"); } function renounceOwnership() external override onlyOwner { revert ("can't renounceOwnership here"); // not possible within this smart contract } function getExecutorStatus(address executor) public view returns (bool status) { status = executorStatus[executor]; } function getAllExecutors() public view returns (address[] memory) { return executors; } //Register new Executors function addExecutors(address[] calldata executorArray) external onlyOwner { for (uint256 i = 0; i < executorArray.length; i++) { addExecutor(executorArray[i]); } } // Register single executor function addExecutor(address executorAddress) public onlyOwner { require(executorAddress != address(0), "executor address can not be 0"); executors.push(executorAddress); executorStatus[executorAddress] = true; emit ExecutorAdded(executorAddress, msg.sender); } //Remove registered Executors function removeExecutors(address[] calldata executorArray) external onlyOwner { for (uint256 i = 0; i < executorArray.length; i++) { removeExecutor(executorArray[i]); } } // Remove Register single executor function removeExecutor(address executorAddress) public onlyOwner { require(executorAddress != address(0), "executor address can not be 0"); executorStatus[executorAddress] = false; emit ExecutorRemoved(executorAddress, msg.sender); } } pragma solidity 0.7.6; interface IERC20Detailed is IERC20 { function name() external view returns(string memory); function decimals() external view returns(uint256); } interface IERC20Nonces is IERC20Detailed { function nonces(address holder) external view returns(uint); } interface IERC20Permit is IERC20Nonces { function permit(address holder, address spender, uint256 nonce, uint256 expiry, bool allowed, uint8 v, bytes32 r, bytes32 s) external; function permit(address holder, address spender, uint256 value, uint256 expiry, uint8 v, bytes32 r, bytes32 s) external; } pragma solidity 0.7.6; pragma abicoder v2; contract LiquidityPoolManager is ReentrancyGuard, Ownable, BaseRelayRecipient, Pausable { using SafeMath for uint256; address private constant NATIVE = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; uint256 public baseGas; ExecutorManager private executorManager; uint256 public adminFee; struct TokenInfo { uint256 transferOverhead; bool supportedToken; uint256 minCap; uint256 maxCap; uint256 liquidity; mapping(address => uint256) liquidityProvider; } struct PermitRequest { uint256 nonce; uint256 expiry; bool allowed; uint8 v; bytes32 r; bytes32 s; } mapping ( address => TokenInfo ) public tokensInfo; mapping ( bytes32 => bool ) public processedHash; event AssetSent(address indexed asset, uint256 indexed amount, uint256 indexed transferredAmount, address target, bytes depositHash); event Received(address indexed from, uint256 indexed amount); event Deposit(address indexed from, address indexed tokenAddress, address indexed receiver, uint256 toChainId, uint256 amount); event LiquidityAdded(address indexed from, address indexed tokenAddress, address indexed receiver, uint256 amount); event LiquidityRemoved(address indexed tokenAddress, uint256 indexed amount, address indexed sender); event fundsWithdraw(address indexed tokenAddress, address indexed owner, uint256 indexed amount); event AdminFeeChanged(uint256 indexed newAdminFee); event TrustedForwarderChanged(address indexed forwarderAddress); // MODIFIERS modifier onlyExecutor() { require(executorManager.getExecutorStatus(_msgSender()), "You are not allowed to perform this operation" ); _; } modifier tokenChecks(address tokenAddress){ require(tokenAddress != address(0), "Token address cannot be 0"); require(tokensInfo[tokenAddress].supportedToken, "Token not supported"); _; } constructor(address _executorManagerAddress, address owner, address pauser, address _trustedForwarder, uint256 _adminFee) Ownable(owner) Pausable(pauser) { require(_executorManagerAddress != address(0), "ExecutorManager Contract Address cannot be 0"); require(_trustedForwarder != address(0), "TrustedForwarder Contract Address cannot be 0"); require(_adminFee != 0, "AdminFee cannot be 0"); executorManager = ExecutorManager(_executorManagerAddress); trustedForwarder = _trustedForwarder; adminFee = _adminFee; baseGas = 21000; } function renounceOwnership() external override onlyOwner { revert ("can't renounceOwnership here"); // not possible within this smart contract } function renouncePauser() external override onlyPauser { revert ("can't renouncePauser here"); // not possible within this smart contract } function getAdminFee() public view returns (uint256 ) { return adminFee; } function changeAdminFee(uint256 newAdminFee) external onlyOwner whenNotPaused { require(newAdminFee != 0, "Admin Fee cannot be 0"); adminFee = newAdminFee; emit AdminFeeChanged(newAdminFee); } function versionRecipient() external override virtual view returns (string memory){ return "1"; } function setBaseGas(uint128 gas) external onlyOwner{ baseGas = gas; } function getExecutorManager() public view returns (address){ return address(executorManager); } function setExecutorManager(address _executorManagerAddress) external onlyOwner { require(_executorManagerAddress != address(0), "Executor Manager Address cannot be 0"); executorManager = ExecutorManager(_executorManagerAddress); } function setTrustedForwarder( address forwarderAddress ) external onlyOwner { require(forwarderAddress != address(0), "Forwarder Address cannot be 0"); trustedForwarder = forwarderAddress; emit TrustedForwarderChanged(forwarderAddress); } function setTokenTransferOverhead( address tokenAddress, uint256 gasOverhead ) external tokenChecks(tokenAddress) onlyOwner { tokensInfo[tokenAddress].transferOverhead = gasOverhead; } function addSupportedToken( address tokenAddress, uint256 minCapLimit, uint256 maxCapLimit ) external onlyOwner { require(tokenAddress != address(0), "Token address cannot be 0"); require(maxCapLimit > minCapLimit, "maxCapLimit cannot be smaller than minCapLimit"); tokensInfo[tokenAddress].supportedToken = true; tokensInfo[tokenAddress].minCap = minCapLimit; tokensInfo[tokenAddress].maxCap = maxCapLimit; } function removeSupportedToken( address tokenAddress ) external tokenChecks(tokenAddress) onlyOwner { tokensInfo[tokenAddress].supportedToken = false; } function updateTokenCap( address tokenAddress, uint256 minCapLimit, uint256 maxCapLimit ) external tokenChecks(tokenAddress) onlyOwner { require(maxCapLimit > minCapLimit, "maxCapLimit cannot be smaller than minCapLimit"); tokensInfo[tokenAddress].minCap = minCapLimit; tokensInfo[tokenAddress].maxCap = maxCapLimit; } function addNativeLiquidity() external payable whenNotPaused { require(msg.value != 0, "Amount cannot be 0"); address payable sender = _msgSender(); tokensInfo[NATIVE].liquidityProvider[sender] = tokensInfo[NATIVE].liquidityProvider[sender].add(msg.value); tokensInfo[NATIVE].liquidity = tokensInfo[NATIVE].liquidity.add(msg.value); emit LiquidityAdded(sender, NATIVE, address(this), msg.value); } function removeNativeLiquidity(uint256 amount) external whenNotPaused nonReentrant { require(amount != 0 , "Amount cannot be 0"); address payable sender = _msgSender(); require(tokensInfo[NATIVE].liquidityProvider[sender] >= amount, "Not enough balance"); tokensInfo[NATIVE].liquidityProvider[sender] = tokensInfo[NATIVE].liquidityProvider[sender].sub(amount); tokensInfo[NATIVE].liquidity = tokensInfo[NATIVE].liquidity.sub(amount); (bool success, ) = sender.call{ value: amount }(""); require(success, "Native Transfer Failed"); emit LiquidityRemoved( NATIVE, amount, sender); } function addTokenLiquidity( address tokenAddress, uint256 amount ) external tokenChecks(tokenAddress) whenNotPaused { require(amount != 0, "Amount cannot be 0"); address payable sender = _msgSender(); tokensInfo[tokenAddress].liquidityProvider[sender] = tokensInfo[tokenAddress].liquidityProvider[sender].add(amount); tokensInfo[tokenAddress].liquidity = tokensInfo[tokenAddress].liquidity.add(amount); SafeERC20.safeTransferFrom(IERC20(tokenAddress), sender, address(this), amount); emit LiquidityAdded(sender, tokenAddress, address(this), amount); } function removeTokenLiquidity( address tokenAddress, uint256 amount ) external tokenChecks(tokenAddress) whenNotPaused { require(amount != 0, "Amount cannot be 0"); address payable sender = _msgSender(); require(tokensInfo[tokenAddress].liquidityProvider[sender] >= amount, "Not enough balance"); tokensInfo[tokenAddress].liquidityProvider[sender] = tokensInfo[tokenAddress].liquidityProvider[sender].sub(amount); tokensInfo[tokenAddress].liquidity = tokensInfo[tokenAddress].liquidity.sub(amount); SafeERC20.safeTransfer(IERC20(tokenAddress), sender, amount); emit LiquidityRemoved( tokenAddress, amount, sender); } function getLiquidity(address liquidityProviderAddress, address tokenAddress) public view returns (uint256 ) { return tokensInfo[tokenAddress].liquidityProvider[liquidityProviderAddress]; } function depositErc20( address tokenAddress, address receiver, uint256 amount, uint256 toChainId ) public tokenChecks(tokenAddress) whenNotPaused { require(tokensInfo[tokenAddress].minCap <= amount && tokensInfo[tokenAddress].maxCap >= amount, "Deposit amount should be within allowed Cap limits"); require(receiver != address(0), "Receiver address cannot be 0"); require(amount != 0, "Amount cannot be 0"); address payable sender = _msgSender(); SafeERC20.safeTransferFrom(IERC20(tokenAddress), sender, address(this),amount); emit Deposit(sender, tokenAddress, receiver, toChainId, amount); } /** * DAI permit and Deposit. */ function permitAndDepositErc20( address tokenAddress, address receiver, uint256 amount, uint256 toChainId, PermitRequest calldata permitOptions ) external { IERC20Permit(tokenAddress).permit(_msgSender(), address(this), permitOptions.nonce, permitOptions.expiry, permitOptions.allowed, permitOptions.v, permitOptions.r, permitOptions.s); depositErc20(tokenAddress, receiver, amount, toChainId); } /** * EIP2612 and Deposit. */ function permitEIP2612AndDepositErc20( address tokenAddress, address receiver, uint256 amount, uint256 toChainId, PermitRequest calldata permitOptions ) external { IERC20Permit(tokenAddress).permit(_msgSender(), address(this), amount, permitOptions.expiry, permitOptions.v, permitOptions.r, permitOptions.s); depositErc20(tokenAddress, receiver, amount, toChainId); } function depositNative( address receiver, uint256 toChainId ) external whenNotPaused payable { require(tokensInfo[NATIVE].minCap <= msg.value && tokensInfo[NATIVE].maxCap >= msg.value, "Deposit amount should be within allowed Cap limit"); require(receiver != address(0), "Receiver address cannot be 0"); require(msg.value != 0, "Amount cannot be 0"); emit Deposit(_msgSender(), NATIVE, receiver, toChainId, msg.value); } function sendFundsToUser( address tokenAddress, uint256 amount, address payable receiver, bytes memory depositHash, uint256 tokenGasPrice ) external nonReentrant onlyExecutor tokenChecks(tokenAddress) whenNotPaused { uint256 initialGas = gasleft(); require(tokensInfo[tokenAddress].minCap <= amount && tokensInfo[tokenAddress].maxCap >= amount, "Withdraw amount should be within allowed Cap limits"); require(receiver != address(0), "Bad receiver address"); (bytes32 hashSendTransaction, bool status) = checkHashStatus(tokenAddress, amount, receiver, depositHash); require(!status, "Already Processed"); processedHash[hashSendTransaction] = true; uint256 calculateAdminFee = amount.mul(adminFee).div(10000); uint256 totalGasUsed = (initialGas.sub(gasleft())).add(tokensInfo[tokenAddress].transferOverhead).add(baseGas); uint256 gasFeeInToken = totalGasUsed.mul(tokenGasPrice); uint256 amountToTransfer = amount.sub(calculateAdminFee.add(gasFeeInToken)); if (tokenAddress == NATIVE) { require(address(this).balance >= amountToTransfer, "Not Enough Balance"); (bool success, ) = receiver.call{ value: amountToTransfer }(""); require(success, "Native Transfer Failed"); } else { require(IERC20(tokenAddress).balanceOf(address(this)) >= amountToTransfer, "Not Enough Balance"); SafeERC20.safeTransfer(IERC20(tokenAddress), receiver, amountToTransfer); } emit AssetSent(tokenAddress, amount, amountToTransfer, receiver, depositHash); } function checkHashStatus(address tokenAddress, uint256 amount, address payable receiver, bytes memory depositHash) public view returns(bytes32 hashSendTransaction, bool status){ hashSendTransaction = keccak256( abi.encode( tokenAddress, amount, receiver, keccak256(depositHash) ) ); status = processedHash[hashSendTransaction]; } function withdrawErc20(address tokenAddress) external onlyOwner whenNotPaused { uint256 profitEarned = (IERC20(tokenAddress).balanceOf(address(this))).sub(tokensInfo[tokenAddress].liquidity); require(profitEarned != 0, "Profit earned is 0"); address payable sender = _msgSender(); SafeERC20.safeTransfer(IERC20(tokenAddress), sender, profitEarned); emit fundsWithdraw(tokenAddress, sender, profitEarned); } function withdrawNative() external onlyOwner whenNotPaused { uint256 profitEarned = (address(this).balance).sub(tokensInfo[NATIVE].liquidity); require(profitEarned != 0, "Profit earned is 0"); address payable sender = _msgSender(); (bool success, ) = sender.call{ value: profitEarned }(""); require(success, "Native Transfer Failed"); emit fundsWithdraw(address(this), sender, profitEarned); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_executorManagerAddress","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"pauser","type":"address"},{"internalType":"address","name":"_trustedForwarder","type":"address"},{"internalType":"uint256","name":"_adminFee","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newAdminFee","type":"uint256"}],"name":"AdminFeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"transferredAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"bytes","name":"depositHash","type":"bytes"}],"name":"AssetSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"toChainId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousPauser","type":"address"},{"indexed":true,"internalType":"address","name":"newPauser","type":"address"}],"name":"PauserChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Received","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"forwarderAddress","type":"address"}],"name":"TrustedForwarderChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"fundsWithdraw","type":"event"},{"inputs":[],"name":"addNativeLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"minCapLimit","type":"uint256"},{"internalType":"uint256","name":"maxCapLimit","type":"uint256"}],"name":"addSupportedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addTokenLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"adminFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAdminFee","type":"uint256"}],"name":"changeAdminFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPauser","type":"address"}],"name":"changePauser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"receiver","type":"address"},{"internalType":"bytes","name":"depositHash","type":"bytes"}],"name":"checkHashStatus","outputs":[{"internalType":"bytes32","name":"hashSendTransaction","type":"bytes32"},{"internalType":"bool","name":"status","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"toChainId","type":"uint256"}],"name":"depositErc20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"toChainId","type":"uint256"}],"name":"depositNative","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getAdminFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getExecutorManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"liquidityProviderAddress","type":"address"},{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauser","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPauser","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"forwarder","type":"address"}],"name":"isTrustedForwarder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"toChainId","type":"uint256"},{"components":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"bool","name":"allowed","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct LiquidityPoolManager.PermitRequest","name":"permitOptions","type":"tuple"}],"name":"permitAndDepositErc20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"toChainId","type":"uint256"},{"components":[{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"bool","name":"allowed","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"internalType":"struct LiquidityPoolManager.PermitRequest","name":"permitOptions","type":"tuple"}],"name":"permitEIP2612AndDepositErc20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"processedHash","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"removeNativeLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"removeSupportedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"removeTokenLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renouncePauser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"receiver","type":"address"},{"internalType":"bytes","name":"depositHash","type":"bytes"},{"internalType":"uint256","name":"tokenGasPrice","type":"uint256"}],"name":"sendFundsToUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"gas","type":"uint128"}],"name":"setBaseGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_executorManagerAddress","type":"address"}],"name":"setExecutorManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"gasOverhead","type":"uint256"}],"name":"setTokenTransferOverhead","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"forwarderAddress","type":"address"}],"name":"setTrustedForwarder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokensInfo","outputs":[{"internalType":"uint256","name":"transferOverhead","type":"uint256"},{"internalType":"bool","name":"supportedToken","type":"bool"},{"internalType":"uint256","name":"minCap","type":"uint256"},{"internalType":"uint256","name":"maxCap","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"trustedForwarder","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"minCapLimit","type":"uint256"},{"internalType":"uint256","name":"maxCapLimit","type":"uint256"}],"name":"updateTokenCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"versionRecipient","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"withdrawErc20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawNative","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200369e3803806200369e83398101604081905262000034916200019b565b600160005582846001600160a01b0381166200006d5760405162461bcd60e51b8152600401620000649062000238565b60405180910390fd5b600180546001600160a01b0319166001600160a01b039283161790558116620000aa5760405162461bcd60e51b815260040162000064906200026f565b600380546001600160a01b0319166001600160a01b039283161790556002805460ff60a01b191690558516620000f45760405162461bcd60e51b81526004016200006490620002f3565b6001600160a01b0382166200011d5760405162461bcd60e51b81526004016200006490620002a6565b806200013d5760405162461bcd60e51b8152600401620000649062000201565b600580546001600160a01b039687166001600160a01b031991821617909155600280549390961692169190911790935550506006556152086004556200033f565b80516001600160a01b03811681146200019657600080fd5b919050565b600080600080600060a08688031215620001b3578081fd5b620001be866200017e565b9450620001ce602087016200017e565b9350620001de604087016200017e565b9250620001ee606087016200017e565b9150608086015190509295509295909350565b60208082526014908201527f41646d696e4665652063616e6e6f742062652030000000000000000000000000604082015260600190565b60208082526019908201527f4f776e657220416464726573732063616e6e6f74206265203000000000000000604082015260600190565b6020808252601a908201527f50617573657220416464726573732063616e6e6f742062652030000000000000604082015260600190565b6020808252602d908201527f54727573746564466f7277617264657220436f6e74726163742041646472657360408201526c0732063616e6e6f74206265203609c1b606082015260800190565b6020808252602c908201527f4578656375746f724d616e6167657220436f6e7472616374204164647265737360408201526b02063616e6e6f7420626520360a41b606082015260800190565b61334f806200034f6000396000f3fe6080604052600436106102465760003560e01c806384d9361211610139578063b6632cb3116100b6578063ea526de71161007a578063ea526de714610634578063edd9587b14610654578063ef0d457214610674578063f2fde38b14610694578063f72780ef146106b4578063fc07ec25146106d457610246565b8063b6632cb314610583578063ba8dbea2146105a3578063c7e42b1b146105d4578063ccb844e1146105f4578063da7422281461061457610246565b80638f32d59b116100fd5780638f32d59b14610527578063a0be06f91461053c578063ab1635b714610551578063b187bd2614610566578063b238b5331461057b57610246565b806384d936121461048457806385a25597146104a45780638909bb83146104d2578063893d20e8146104f25780638b56d0b71461050757610246565b8063583bbc40116101c7578063715018a61161018b578063715018a614610405578063760d098a1461041a578063763191901461043a5780637da0a8771461045a5780638456cb591461046f57610246565b8063583bbc40146103845780636125ca02146103995780636a8a3b96146103b95780636ef8d66d146103ce5780637008b548146103e357610246565b80633f4ba83a1161020e5780633f4ba83a146102eb578063486ff0cd1461030057806350431ce41461032257806356e3866d14610337578063572b6c051461035757610246565b806302279b4a1461024b57806313fe24e11461026057806314fe72aa146102805780632a905ccc146102a05780632cd271e7146102cb575b600080fd5b61025e6102593660046127ce565b6106f4565b005b34801561026c57600080fd5b5061025e61027b366004612723565b61087f565b34801561028c57600080fd5b5061025e61029b3660046127ce565b610a27565b3480156102ac57600080fd5b506102b5610bd5565b6040516102c29190613250565b60405180910390f35b3480156102d757600080fd5b5061025e6102e63660046126cf565b610bdc565b3480156102f757600080fd5b5061025e610c0c565b34801561030c57600080fd5b50610315610cad565b6040516102c29190612b45565b34801561032e57600080fd5b5061025e610cc8565b34801561034357600080fd5b5061025e6103523660046128d5565b610e34565b34801561036357600080fd5b506103776103723660046126cf565b610f01565b6040516102c29190612b2a565b34801561039057600080fd5b506102b5610f15565b3480156103a557600080fd5b5061025e6103b4366004612768565b610f1b565b3480156103c557600080fd5b50610377610fba565b3480156103da57600080fd5b5061025e610fcb565b3480156103ef57600080fd5b506103f8611007565b6040516102c29190612a01565b34801561041157600080fd5b5061025e611016565b34801561042657600080fd5b50610377610435366004612941565b611052565b34801561044657600080fd5b5061025e6104553660046126cf565b611067565b34801561046657600080fd5b506103f8611112565b34801561047b57600080fd5b5061025e611121565b34801561049057600080fd5b5061025e61049f3660046127ce565b6111bf565b3480156104b057600080fd5b506104c46104bf3660046127f9565b6113a1565b6040516102c2929190612b35565b3480156104de57600080fd5b5061025e6104ed366004612863565b6113f8565b3480156104fe57600080fd5b506103f8611868565b34801561051357600080fd5b5061025e6105223660046127ce565b611877565b34801561053357600080fd5b5061037761191a565b34801561054857600080fd5b506102b561192b565b34801561055d57600080fd5b506103f8611931565b34801561057257600080fd5b50610377611940565b61025e611950565b34801561058f57600080fd5b5061025e61059e366004612941565b611aaf565b3480156105af57600080fd5b506105c36105be3660046126cf565b611b4d565b6040516102c2959493929190613259565b3480156105e057600080fd5b5061025e6105ef3660046126cf565b611b80565b34801561060057600080fd5b5061025e61060f366004612959565b611ce5565b34801561062057600080fd5b5061025e61062f3660046126cf565b611d17565b34801561064057600080fd5b506102b561064f3660046126eb565b611dab565b34801561066057600080fd5b5061025e61066f3660046128d5565b611ddc565b34801561068057600080fd5b5061025e61068f3660046126cf565b611e7c565b3480156106a057600080fd5b5061025e6106af3660046126cf565b611ee8565b3480156106c057600080fd5b5061025e6106cf366004612941565b611f15565b3480156106e057600080fd5b5061025e6106ef366004612768565b61216a565b600254600160a01b900460ff16156107275760405162461bcd60e51b815260040161071e90612ddb565b60405180910390fd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee60005260076020527fb2084a3e4595ccf007fb44245853374aaf0de960074375e8e0fb334712e94d105434108015906107b3575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee60005260076020527fb2084a3e4595ccf007fb44245853374aaf0de960074375e8e0fb334712e94d11543411155b6107cf5760405162461bcd60e51b815260040161071e90612e05565b6001600160a01b0382166107f55760405162461bcd60e51b815260040161071e90612f44565b346108125760405162461bcd60e51b815260040161071e90612f7b565b6001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6108396121d6565b6001600160a01b03167f5fe47ed6d4225326d3303476197d782ded5a4e9c14f479dc9ec4992af4e85d59843460405161087392919061327c565b60405180910390a45050565b836001600160a01b0381166108a65760405162461bcd60e51b815260040161071e90612c30565b6001600160a01b03811660009081526007602052604090206001015460ff166108e15760405162461bcd60e51b815260040161071e90612fa7565b600254600160a01b900460ff161561090b5760405162461bcd60e51b815260040161071e90612ddb565b6001600160a01b038516600090815260076020526040902060020154831080159061095157506001600160a01b0385166000908152600760205260409020600301548311155b61096d5760405162461bcd60e51b815260040161071e90612c93565b6001600160a01b0384166109935760405162461bcd60e51b815260040161071e90612f44565b826109b05760405162461bcd60e51b815260040161071e90612f7b565b60006109ba6121d6565b90506109c886823087612208565b846001600160a01b0316866001600160a01b0316826001600160a01b03167f5fe47ed6d4225326d3303476197d782ded5a4e9c14f479dc9ec4992af4e85d598688604051610a1792919061327c565b60405180910390a4505050505050565b816001600160a01b038116610a4e5760405162461bcd60e51b815260040161071e90612c30565b6001600160a01b03811660009081526007602052604090206001015460ff16610a895760405162461bcd60e51b815260040161071e90612fa7565b600254600160a01b900460ff1615610ab35760405162461bcd60e51b815260040161071e90612ddb565b81610ad05760405162461bcd60e51b815260040161071e90612f7b565b6000610ada6121d6565b6001600160a01b0380861660009081526007602090815260408083209385168352600590930190522054909150610b119084612266565b6001600160a01b038086166000818152600760208181526040808420958816845260058601825283209590955591905290915260040154610b529084612266565b6001600160a01b038516600090815260076020526040902060040155610b7a84823086612208565b306001600160a01b0316846001600160a01b0316826001600160a01b03167f2db8fc28326a114fe00f000205e13b79bbdeaeae6568b34ccf9fe0991da2285e86604051610bc79190613250565b60405180910390a450505050565b6006545b90565b610be4610fba565b610c005760405162461bcd60e51b815260040161071e906131c9565b610c0981612292565b50565b610c14610fba565b610c305760405162461bcd60e51b815260040161071e906131c9565b600254600160a01b900460ff16610c595760405162461bcd60e51b815260040161071e90612b58565b6002805460ff60a01b191690556003546040517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa91610ca3916001600160a01b0390911690612a01565b60405180910390a1565b6040805180820190915260018152603160f81b602082015290565b610cd061191a565b610cec5760405162461bcd60e51b815260040161071e90612fd4565b600254600160a01b900460ff1615610d165760405162461bcd60e51b815260040161071e90612ddb565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee600090815260076020526000805160206132da83398151915254610d50904790612301565b905080610d6f5760405162461bcd60e51b815260040161071e90612ed7565b6000610d796121d6565b90506000816001600160a01b031683604051610d9490610bd9565b60006040518083038185875af1925050503d8060008114610dd1576040519150601f19603f3d011682016040523d82523d6000602084013e610dd6565b606091505b5050905080610df75760405162461bcd60e51b815260040161071e90613031565b60405183906001600160a01b0384169030907f8a42c105b9b9c7739e44588d5e160a2e119ec86e88b6159e003b9118d9ae7b4d90600090a4505050565b826001600160a01b038116610e5b5760405162461bcd60e51b815260040161071e90612c30565b6001600160a01b03811660009081526007602052604090206001015460ff16610e965760405162461bcd60e51b815260040161071e90612fa7565b610e9e61191a565b610eba5760405162461bcd60e51b815260040161071e90612fd4565b828211610ed95760405162461bcd60e51b815260040161071e90613098565b506001600160a01b039092166000908152600760205260409020600281019190915560030155565b6002546001600160a01b0390811691161490565b60045481565b846001600160a01b031663d505accf610f326121d6565b30866020860135610f496080880160608901612998565b87608001358860a001356040518863ffffffff1660e01b8152600401610f759796959493929190612a5e565b600060405180830381600087803b158015610f8f57600080fd5b505af1158015610fa3573d6000803e3d6000fd5b50505050610fb38585858561087f565b5050505050565b6003546001600160a01b0316331490565b610fd3610fba565b610fef5760405162461bcd60e51b815260040161071e906131c9565b60405162461bcd60e51b815260040161071e906130e6565b6003546001600160a01b031690565b61101e61191a565b61103a5760405162461bcd60e51b815260040161071e90612fd4565b60405162461bcd60e51b815260040161071e90612ce5565b60086020526000908152604090205460ff1681565b806001600160a01b03811661108e5760405162461bcd60e51b815260040161071e90612c30565b6001600160a01b03811660009081526007602052604090206001015460ff166110c95760405162461bcd60e51b815260040161071e90612fa7565b6110d161191a565b6110ed5760405162461bcd60e51b815260040161071e90612fd4565b506001600160a01b03166000908152600760205260409020600101805460ff19169055565b6002546001600160a01b031681565b611129610fba565b6111455760405162461bcd60e51b815260040161071e906131c9565b600254600160a01b900460ff161561116f5760405162461bcd60e51b815260040161071e90612ddb565b6002805460ff60a01b1916600160a01b1790556003546040517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25891610ca3916001600160a01b0390911690612a01565b816001600160a01b0381166111e65760405162461bcd60e51b815260040161071e90612c30565b6001600160a01b03811660009081526007602052604090206001015460ff166112215760405162461bcd60e51b815260040161071e90612fa7565b600254600160a01b900460ff161561124b5760405162461bcd60e51b815260040161071e90612ddb565b816112685760405162461bcd60e51b815260040161071e90612f7b565b60006112726121d6565b6001600160a01b03808616600090815260076020908152604080832093851683526005909301905220549091508311156112be5760405162461bcd60e51b815260040161071e90612daf565b6001600160a01b03808516600090815260076020908152604080832093851683526005909301905220546112f29084612301565b6001600160a01b0380861660008181526007602081815260408084209588168452600586018252832095909555919052909152600401546113339084612301565b6001600160a01b03851660009081526007602052604090206004015561135a848285612343565b806001600160a01b031683856001600160a01b03167f70516e69d9b3069ff3184583d867f7a832772e850ba89b554ae06ff752474f9e60405160405180910390a450505050565b60008085858585805190602001206040516020016113c29493929190612b00565b60408051601f19818403018152918152815160209283012060008181526008909352912054909760ff9091169650945050505050565b6002600054141561141b5760405162461bcd60e51b815260040161071e90613167565b60026000556005546001600160a01b0316630768d65c6114396121d6565b6040518263ffffffff1660e01b81526004016114559190612a01565b60206040518083038186803b15801561146d57600080fd5b505afa158015611481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a59190612925565b6114c15760405162461bcd60e51b815260040161071e90612d62565b846001600160a01b0381166114e85760405162461bcd60e51b815260040161071e90612c30565b6001600160a01b03811660009081526007602052604090206001015460ff166115235760405162461bcd60e51b815260040161071e90612fa7565b600254600160a01b900460ff161561154d5760405162461bcd60e51b815260040161071e90612ddb565b60005a6001600160a01b038816600090815260076020526040902060020154909150861080159061159957506001600160a01b0387166000908152600760205260409020600301548611155b6115b55760405162461bcd60e51b815260040161071e90612e56565b6001600160a01b0385166115db5760405162461bcd60e51b815260040161071e90612ea9565b6000806115ea898989896113a1565b91509150801561160c5760405162461bcd60e51b815260040161071e9061319e565b6000828152600860205260408120805460ff19166001179055600654611641906127109061163b908c90612367565b906123a1565b6004546001600160a01b038c1660009081526007602052604081205492935091611679919061167390815a8a90612301565b90612266565b905060006116878289612367565b9050600061169f6116988584612266565b8d90612301565b90506001600160a01b038d1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561176857804710156116e65760405162461bcd60e51b815260040161071e90612c67565b60008b6001600160a01b0316826040516116ff90610bd9565b60006040518083038185875af1925050503d806000811461173c576040519150601f19603f3d011682016040523d82523d6000602084013e611741565b606091505b50509050806117625760405162461bcd60e51b815260040161071e90613031565b5061180f565b6040516370a0823160e01b815281906001600160a01b038f16906370a0823190611796903090600401612a01565b60206040518083038186803b1580156117ae57600080fd5b505afa1580156117c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e69190612980565b10156118045760405162461bcd60e51b815260040161071e90612c67565b61180f8d8c83612343565b808c8e6001600160a01b03167fec1dcc5633614eade4a5730f51adc7444a5103a8477965a32f2e886f5b20f6948e8e60405161184c929190612a9f565b60405180910390a4505060016000555050505050505050505050565b6001546001600160a01b031690565b816001600160a01b03811661189e5760405162461bcd60e51b815260040161071e90612c30565b6001600160a01b03811660009081526007602052604090206001015460ff166118d95760405162461bcd60e51b815260040161071e90612fa7565b6118e161191a565b6118fd5760405162461bcd60e51b815260040161071e90612fd4565b506001600160a01b03909116600090815260076020526040902055565b6001546001600160a01b0316331490565b60065481565b6005546001600160a01b031690565b600254600160a01b900460ff1690565b600254600160a01b900460ff161561197a5760405162461bcd60e51b815260040161071e90612ddb565b346119975760405162461bcd60e51b815260040161071e90612f7b565b60006119a16121d6565b6001600160a01b03811660009081526000805160206132fa83398151915260205260409020549091506119d49034612266565b6001600160a01b03821660009081526000805160206132fa8339815191526020908152604082209290925573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee9052600790526000805160206132da83398151915254611a349034612266565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee600081905260076020526000805160206132da833981519152919091556040513091906001600160a01b038416907f2db8fc28326a114fe00f000205e13b79bbdeaeae6568b34ccf9fe0991da2285e90611aa4903490613250565b60405180910390a450565b611ab761191a565b611ad35760405162461bcd60e51b815260040161071e90612fd4565b600254600160a01b900460ff1615611afd5760405162461bcd60e51b815260040161071e90612ddb565b80611b1a5760405162461bcd60e51b815260040161071e90612b86565b600681905560405181907f11a80b766155f9b8f16a7da44d66269fd694cb1c247f4814244586f68dd5348790600090a250565b60076020526000908152604090208054600182015460028301546003840154600490940154929360ff9092169290919085565b611b8861191a565b611ba45760405162461bcd60e51b815260040161071e90612fd4565b600254600160a01b900460ff1615611bce5760405162461bcd60e51b815260040161071e90612ddb565b6001600160a01b03811660008181526007602052604080822060049081015491516370a0823160e01b81529293611c699390916370a0823191611c1391309101612a01565b60206040518083038186803b158015611c2b57600080fd5b505afa158015611c3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c639190612980565b90612301565b905080611c885760405162461bcd60e51b815260040161071e90612ed7565b6000611c926121d6565b9050611c9f838284612343565b81816001600160a01b0316846001600160a01b03167f8a42c105b9b9c7739e44588d5e160a2e119ec86e88b6159e003b9118d9ae7b4d60405160405180910390a4505050565b611ced61191a565b611d095760405162461bcd60e51b815260040161071e90612fd4565b6001600160801b0316600455565b611d1f61191a565b611d3b5760405162461bcd60e51b815260040161071e90612fd4565b6001600160a01b038116611d615760405162461bcd60e51b815260040161071e90613219565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f871264f4293af7d2865ae7eae628b228f4991c57cb45b39c99f0b774ebe2901890600090a250565b6001600160a01b03808216600090815260076020908152604080832093861683526005909301905220545b92915050565b611de461191a565b611e005760405162461bcd60e51b815260040161071e90612fd4565b6001600160a01b038316611e265760405162461bcd60e51b815260040161071e90612c30565b818111611e455760405162461bcd60e51b815260040161071e90613098565b6001600160a01b0390921660009081526007602052604090206001818101805460ff19169091179055600281019190915560030155565b611e8461191a565b611ea05760405162461bcd60e51b815260040161071e90612fd4565b6001600160a01b038116611ec65760405162461bcd60e51b815260040161071e90612bb5565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b611ef061191a565b611f0c5760405162461bcd60e51b815260040161071e90612fd4565b610c09816123e3565b600254600160a01b900460ff1615611f3f5760405162461bcd60e51b815260040161071e90612ddb565b60026000541415611f625760405162461bcd60e51b815260040161071e90613167565b600260005580611f845760405162461bcd60e51b815260040161071e90612f7b565b6000611f8e6121d6565b6001600160a01b03811660009081526000805160206132fa8339815191526020526040902054909150821115611fd65760405162461bcd60e51b815260040161071e90612daf565b6001600160a01b03811660009081526000805160206132fa83398151915260205260409020546120069083612301565b6001600160a01b03821660009081526000805160206132fa8339815191526020908152604082209290925573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee9052600790526000805160206132da833981519152546120669083612301565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee600090815260076020526000805160206132da833981519152919091556040516001600160a01b0383169084906120b190610bd9565b60006040518083038185875af1925050503d80600081146120ee576040519150601f19603f3d011682016040523d82523d6000602084013e6120f3565b606091505b50509050806121145760405162461bcd60e51b815260040161071e90613031565b6040516001600160a01b03831690849073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee907f70516e69d9b3069ff3184583d867f7a832772e850ba89b554ae06ff752474f9e90600090a45050600160005550565b846001600160a01b0316638fcbaf0c6121816121d6565b30843560208601356121996060880160408901612909565b6121a96080890160608a01612998565b88608001358960a001356040518963ffffffff1660e01b8152600401610f75989796959493929190612a15565b6000601836108015906121ed57506121ed33610f01565b15612201575060131936013560601c610bd9565b5033610bd9565b612260846323b872dd60e01b85858560405160240161222993929190612ac3565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612452565b50505050565b60008282018381101561228b5760405162461bcd60e51b815260040161071e90612bf9565b9392505050565b6001600160a01b0381166122a557600080fd5b6003546040516001600160a01b038084169216907f95bb211a5a393c4d30c3edc9a745825fba4e6ad3e3bb949e6bf8ccdfe431a81190600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b600061228b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124e1565b6123628363a9059cbb60e01b8484604051602401612229929190612ae7565b505050565b60008261237657506000611dd6565b8282028284828161238357fe5b041461228b5760405162461bcd60e51b815260040161071e90612f03565b600061228b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061250d565b6001600160a01b0381166123f657600080fd5b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b60006124a7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166125449092919063ffffffff16565b80519091501561236257808060200190518101906124c59190612925565b6123625760405162461bcd60e51b815260040161071e9061311d565b600081848411156125055760405162461bcd60e51b815260040161071e9190612b45565b505050900390565b6000818361252e5760405162461bcd60e51b815260040161071e9190612b45565b50600083858161253a57fe5b0495945050505050565b6060612553848460008561255b565b949350505050565b60608247101561257d5760405162461bcd60e51b815260040161071e90612d1c565b6125868561261b565b6125a25760405162461bcd60e51b815260040161071e90613061565b600080866001600160a01b031685876040516125be91906129e5565b60006040518083038185875af1925050503d80600081146125fb576040519150601f19603f3d011682016040523d82523d6000602084013e612600565b606091505b5091509150612610828286612621565b979650505050505050565b3b151590565b6060831561263057508161228b565b8251156126405782518084602001fd5b8160405162461bcd60e51b815260040161071e9190612b45565b600082601f83011261266a578081fd5b813567ffffffffffffffff8082111561267f57fe5b604051601f8301601f19168101602001828111828210171561269d57fe5b6040528281528483016020018610156126b4578384fd5b82602086016020830137918201602001929092529392505050565b6000602082840312156126e0578081fd5b813561228b816132b6565b600080604083850312156126fd578081fd5b8235612708816132b6565b91506020830135612718816132b6565b809150509250929050565b60008060008060808587031215612738578182fd5b8435612743816132b6565b93506020850135612753816132b6565b93969395505050506040820135916060013590565b6000806000806000858703610140811215612781578182fd5b863561278c816132b6565b9550602087013561279c816132b6565b9450604087013593506060870135925060c0607f19820112156127bd578182fd5b506080860190509295509295909350565b600080604083850312156127e0578182fd5b82356127eb816132b6565b946020939093013593505050565b6000806000806080858703121561280e578384fd5b8435612819816132b6565b9350602085013592506040850135612830816132b6565b9150606085013567ffffffffffffffff81111561284b578182fd5b6128578782880161265a565b91505092959194509250565b600080600080600060a0868803121561287a578081fd5b8535612885816132b6565b945060208601359350604086013561289c816132b6565b9250606086013567ffffffffffffffff8111156128b7578182fd5b6128c38882890161265a565b95989497509295608001359392505050565b6000806000606084860312156128e9578283fd5b83356128f4816132b6565b95602085013595506040909401359392505050565b60006020828403121561291a578081fd5b813561228b816132cb565b600060208284031215612936578081fd5b815161228b816132cb565b600060208284031215612952578081fd5b5035919050565b60006020828403121561296a578081fd5b81356001600160801b038116811461228b578182fd5b600060208284031215612991578081fd5b5051919050565b6000602082840312156129a9578081fd5b813560ff8116811461228b578182fd5b600081518084526129d181602086016020860161328a565b601f01601f19169290920160200192915050565b600082516129f781846020870161328a565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039889168152969097166020870152604086019490945260608501929092521515608084015260ff1660a083015260c082015260e08101919091526101000190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b0383168152604060208201819052600090612553908301846129b9565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039485168152602081019390935292166040820152606081019190915260800190565b901515815260200190565b9182521515602082015260400190565b60006020825261228b60208301846129b9565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b602080825260159082015274041646d696e204665652063616e6e6f74206265203605c1b604082015260600190565b60208082526024908201527f4578656375746f72204d616e6167657220416464726573732063616e6e6f74206040820152630626520360e41b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526019908201527f546f6b656e20616464726573732063616e6e6f74206265203000000000000000604082015260600190565b6020808252601290820152714e6f7420456e6f7567682042616c616e636560701b604082015260600190565b60208082526032908201527f4465706f73697420616d6f756e742073686f756c642062652077697468696e20604082015271616c6c6f77656420436170206c696d69747360701b606082015260800190565b6020808252601c908201527f63616e27742072656e6f756e63654f776e657273686970206865726500000000604082015260600190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b6020808252602d908201527f596f7520617265206e6f7420616c6c6f77656420746f20706572666f726d207460408201526c3434b99037b832b930ba34b7b760991b606082015260800190565b6020808252601290820152714e6f7420656e6f7567682062616c616e636560701b604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526031908201527f4465706f73697420616d6f756e742073686f756c642062652077697468696e20604082015270185b1b1bddd9590810d85c081b1a5b5a5d607a1b606082015260800190565b60208082526033908201527f576974686472617720616d6f756e742073686f756c642062652077697468696e60408201527220616c6c6f77656420436170206c696d69747360681b606082015260800190565b602080825260149082015273426164207265636569766572206164647265737360601b604082015260600190565b602080825260129082015271050726f666974206561726e656420697320360741b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601c908201527f526563656976657220616464726573732063616e6e6f74206265203000000000604082015260600190565b6020808252601290820152710416d6f756e742063616e6e6f7420626520360741b604082015260600190565b602080825260139082015272151bdad95b881b9bdd081cdd5c1c1bdc9d1959606a1b604082015260600190565b60208082526038908201527f4f6e6c7920636f6e7472616374206f776e657220697320616c6c6f776564207460408201527f6f20706572666f726d2074686973206f7065726174696f6e0000000000000000606082015260800190565b60208082526016908201527513985d1a5d9948151c985b9cd9995c8811985a5b195960521b604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602e908201527f6d61784361704c696d69742063616e6e6f7420626520736d616c6c657220746860408201526d185b881b5a5b90d85c131a5b5a5d60921b606082015260800190565b60208082526019908201527f63616e27742072656e6f756e6365506175736572206865726500000000000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b602080825260119082015270105b1c9958591e48141c9bd8d95cdcd959607a1b604082015260600190565b60208082526030908201527f4f6e6c792070617573657220697320616c6c6f77656420746f20706572666f7260408201526f36903a3434b99037b832b930ba34b7b760811b606082015260800190565b6020808252601d908201527f466f7277617264657220416464726573732063616e6e6f742062652030000000604082015260600190565b90815260200190565b948552921515602085015260408401919091526060830152608082015260a00190565b918252602082015260400190565b60005b838110156132a557818101518382015260200161328d565b838111156122605750506000910152565b6001600160a01b0381168114610c0957600080fd5b8015158114610c0957600080fdfeb2084a3e4595ccf007fb44245853374aaf0de960074375e8e0fb334712e94d12b2084a3e4595ccf007fb44245853374aaf0de960074375e8e0fb334712e94d13a2646970667358221220a95dcaf41d41f0325e42f9e9dfa6a7b0d5032c8b64329c793ee10b519f78279a64736f6c63430007060033000000000000000000000000eed0c0aa1d73ed0f48559e6cc2c762d4ed5ca1ca000000000000000000000000915ed219e303c4f5a08227d8865f022bbb90c502000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000084a0856b038eaad1cc7e297cf34a7e72685a8693000000000000000000000000000000000000000000000000000000000000000a
Deployed Bytecode
0x6080604052600436106102465760003560e01c806384d9361211610139578063b6632cb3116100b6578063ea526de71161007a578063ea526de714610634578063edd9587b14610654578063ef0d457214610674578063f2fde38b14610694578063f72780ef146106b4578063fc07ec25146106d457610246565b8063b6632cb314610583578063ba8dbea2146105a3578063c7e42b1b146105d4578063ccb844e1146105f4578063da7422281461061457610246565b80638f32d59b116100fd5780638f32d59b14610527578063a0be06f91461053c578063ab1635b714610551578063b187bd2614610566578063b238b5331461057b57610246565b806384d936121461048457806385a25597146104a45780638909bb83146104d2578063893d20e8146104f25780638b56d0b71461050757610246565b8063583bbc40116101c7578063715018a61161018b578063715018a614610405578063760d098a1461041a578063763191901461043a5780637da0a8771461045a5780638456cb591461046f57610246565b8063583bbc40146103845780636125ca02146103995780636a8a3b96146103b95780636ef8d66d146103ce5780637008b548146103e357610246565b80633f4ba83a1161020e5780633f4ba83a146102eb578063486ff0cd1461030057806350431ce41461032257806356e3866d14610337578063572b6c051461035757610246565b806302279b4a1461024b57806313fe24e11461026057806314fe72aa146102805780632a905ccc146102a05780632cd271e7146102cb575b600080fd5b61025e6102593660046127ce565b6106f4565b005b34801561026c57600080fd5b5061025e61027b366004612723565b61087f565b34801561028c57600080fd5b5061025e61029b3660046127ce565b610a27565b3480156102ac57600080fd5b506102b5610bd5565b6040516102c29190613250565b60405180910390f35b3480156102d757600080fd5b5061025e6102e63660046126cf565b610bdc565b3480156102f757600080fd5b5061025e610c0c565b34801561030c57600080fd5b50610315610cad565b6040516102c29190612b45565b34801561032e57600080fd5b5061025e610cc8565b34801561034357600080fd5b5061025e6103523660046128d5565b610e34565b34801561036357600080fd5b506103776103723660046126cf565b610f01565b6040516102c29190612b2a565b34801561039057600080fd5b506102b5610f15565b3480156103a557600080fd5b5061025e6103b4366004612768565b610f1b565b3480156103c557600080fd5b50610377610fba565b3480156103da57600080fd5b5061025e610fcb565b3480156103ef57600080fd5b506103f8611007565b6040516102c29190612a01565b34801561041157600080fd5b5061025e611016565b34801561042657600080fd5b50610377610435366004612941565b611052565b34801561044657600080fd5b5061025e6104553660046126cf565b611067565b34801561046657600080fd5b506103f8611112565b34801561047b57600080fd5b5061025e611121565b34801561049057600080fd5b5061025e61049f3660046127ce565b6111bf565b3480156104b057600080fd5b506104c46104bf3660046127f9565b6113a1565b6040516102c2929190612b35565b3480156104de57600080fd5b5061025e6104ed366004612863565b6113f8565b3480156104fe57600080fd5b506103f8611868565b34801561051357600080fd5b5061025e6105223660046127ce565b611877565b34801561053357600080fd5b5061037761191a565b34801561054857600080fd5b506102b561192b565b34801561055d57600080fd5b506103f8611931565b34801561057257600080fd5b50610377611940565b61025e611950565b34801561058f57600080fd5b5061025e61059e366004612941565b611aaf565b3480156105af57600080fd5b506105c36105be3660046126cf565b611b4d565b6040516102c2959493929190613259565b3480156105e057600080fd5b5061025e6105ef3660046126cf565b611b80565b34801561060057600080fd5b5061025e61060f366004612959565b611ce5565b34801561062057600080fd5b5061025e61062f3660046126cf565b611d17565b34801561064057600080fd5b506102b561064f3660046126eb565b611dab565b34801561066057600080fd5b5061025e61066f3660046128d5565b611ddc565b34801561068057600080fd5b5061025e61068f3660046126cf565b611e7c565b3480156106a057600080fd5b5061025e6106af3660046126cf565b611ee8565b3480156106c057600080fd5b5061025e6106cf366004612941565b611f15565b3480156106e057600080fd5b5061025e6106ef366004612768565b61216a565b600254600160a01b900460ff16156107275760405162461bcd60e51b815260040161071e90612ddb565b60405180910390fd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee60005260076020527fb2084a3e4595ccf007fb44245853374aaf0de960074375e8e0fb334712e94d105434108015906107b3575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee60005260076020527fb2084a3e4595ccf007fb44245853374aaf0de960074375e8e0fb334712e94d11543411155b6107cf5760405162461bcd60e51b815260040161071e90612e05565b6001600160a01b0382166107f55760405162461bcd60e51b815260040161071e90612f44565b346108125760405162461bcd60e51b815260040161071e90612f7b565b6001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6108396121d6565b6001600160a01b03167f5fe47ed6d4225326d3303476197d782ded5a4e9c14f479dc9ec4992af4e85d59843460405161087392919061327c565b60405180910390a45050565b836001600160a01b0381166108a65760405162461bcd60e51b815260040161071e90612c30565b6001600160a01b03811660009081526007602052604090206001015460ff166108e15760405162461bcd60e51b815260040161071e90612fa7565b600254600160a01b900460ff161561090b5760405162461bcd60e51b815260040161071e90612ddb565b6001600160a01b038516600090815260076020526040902060020154831080159061095157506001600160a01b0385166000908152600760205260409020600301548311155b61096d5760405162461bcd60e51b815260040161071e90612c93565b6001600160a01b0384166109935760405162461bcd60e51b815260040161071e90612f44565b826109b05760405162461bcd60e51b815260040161071e90612f7b565b60006109ba6121d6565b90506109c886823087612208565b846001600160a01b0316866001600160a01b0316826001600160a01b03167f5fe47ed6d4225326d3303476197d782ded5a4e9c14f479dc9ec4992af4e85d598688604051610a1792919061327c565b60405180910390a4505050505050565b816001600160a01b038116610a4e5760405162461bcd60e51b815260040161071e90612c30565b6001600160a01b03811660009081526007602052604090206001015460ff16610a895760405162461bcd60e51b815260040161071e90612fa7565b600254600160a01b900460ff1615610ab35760405162461bcd60e51b815260040161071e90612ddb565b81610ad05760405162461bcd60e51b815260040161071e90612f7b565b6000610ada6121d6565b6001600160a01b0380861660009081526007602090815260408083209385168352600590930190522054909150610b119084612266565b6001600160a01b038086166000818152600760208181526040808420958816845260058601825283209590955591905290915260040154610b529084612266565b6001600160a01b038516600090815260076020526040902060040155610b7a84823086612208565b306001600160a01b0316846001600160a01b0316826001600160a01b03167f2db8fc28326a114fe00f000205e13b79bbdeaeae6568b34ccf9fe0991da2285e86604051610bc79190613250565b60405180910390a450505050565b6006545b90565b610be4610fba565b610c005760405162461bcd60e51b815260040161071e906131c9565b610c0981612292565b50565b610c14610fba565b610c305760405162461bcd60e51b815260040161071e906131c9565b600254600160a01b900460ff16610c595760405162461bcd60e51b815260040161071e90612b58565b6002805460ff60a01b191690556003546040517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa91610ca3916001600160a01b0390911690612a01565b60405180910390a1565b6040805180820190915260018152603160f81b602082015290565b610cd061191a565b610cec5760405162461bcd60e51b815260040161071e90612fd4565b600254600160a01b900460ff1615610d165760405162461bcd60e51b815260040161071e90612ddb565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee600090815260076020526000805160206132da83398151915254610d50904790612301565b905080610d6f5760405162461bcd60e51b815260040161071e90612ed7565b6000610d796121d6565b90506000816001600160a01b031683604051610d9490610bd9565b60006040518083038185875af1925050503d8060008114610dd1576040519150601f19603f3d011682016040523d82523d6000602084013e610dd6565b606091505b5050905080610df75760405162461bcd60e51b815260040161071e90613031565b60405183906001600160a01b0384169030907f8a42c105b9b9c7739e44588d5e160a2e119ec86e88b6159e003b9118d9ae7b4d90600090a4505050565b826001600160a01b038116610e5b5760405162461bcd60e51b815260040161071e90612c30565b6001600160a01b03811660009081526007602052604090206001015460ff16610e965760405162461bcd60e51b815260040161071e90612fa7565b610e9e61191a565b610eba5760405162461bcd60e51b815260040161071e90612fd4565b828211610ed95760405162461bcd60e51b815260040161071e90613098565b506001600160a01b039092166000908152600760205260409020600281019190915560030155565b6002546001600160a01b0390811691161490565b60045481565b846001600160a01b031663d505accf610f326121d6565b30866020860135610f496080880160608901612998565b87608001358860a001356040518863ffffffff1660e01b8152600401610f759796959493929190612a5e565b600060405180830381600087803b158015610f8f57600080fd5b505af1158015610fa3573d6000803e3d6000fd5b50505050610fb38585858561087f565b5050505050565b6003546001600160a01b0316331490565b610fd3610fba565b610fef5760405162461bcd60e51b815260040161071e906131c9565b60405162461bcd60e51b815260040161071e906130e6565b6003546001600160a01b031690565b61101e61191a565b61103a5760405162461bcd60e51b815260040161071e90612fd4565b60405162461bcd60e51b815260040161071e90612ce5565b60086020526000908152604090205460ff1681565b806001600160a01b03811661108e5760405162461bcd60e51b815260040161071e90612c30565b6001600160a01b03811660009081526007602052604090206001015460ff166110c95760405162461bcd60e51b815260040161071e90612fa7565b6110d161191a565b6110ed5760405162461bcd60e51b815260040161071e90612fd4565b506001600160a01b03166000908152600760205260409020600101805460ff19169055565b6002546001600160a01b031681565b611129610fba565b6111455760405162461bcd60e51b815260040161071e906131c9565b600254600160a01b900460ff161561116f5760405162461bcd60e51b815260040161071e90612ddb565b6002805460ff60a01b1916600160a01b1790556003546040517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25891610ca3916001600160a01b0390911690612a01565b816001600160a01b0381166111e65760405162461bcd60e51b815260040161071e90612c30565b6001600160a01b03811660009081526007602052604090206001015460ff166112215760405162461bcd60e51b815260040161071e90612fa7565b600254600160a01b900460ff161561124b5760405162461bcd60e51b815260040161071e90612ddb565b816112685760405162461bcd60e51b815260040161071e90612f7b565b60006112726121d6565b6001600160a01b03808616600090815260076020908152604080832093851683526005909301905220549091508311156112be5760405162461bcd60e51b815260040161071e90612daf565b6001600160a01b03808516600090815260076020908152604080832093851683526005909301905220546112f29084612301565b6001600160a01b0380861660008181526007602081815260408084209588168452600586018252832095909555919052909152600401546113339084612301565b6001600160a01b03851660009081526007602052604090206004015561135a848285612343565b806001600160a01b031683856001600160a01b03167f70516e69d9b3069ff3184583d867f7a832772e850ba89b554ae06ff752474f9e60405160405180910390a450505050565b60008085858585805190602001206040516020016113c29493929190612b00565b60408051601f19818403018152918152815160209283012060008181526008909352912054909760ff9091169650945050505050565b6002600054141561141b5760405162461bcd60e51b815260040161071e90613167565b60026000556005546001600160a01b0316630768d65c6114396121d6565b6040518263ffffffff1660e01b81526004016114559190612a01565b60206040518083038186803b15801561146d57600080fd5b505afa158015611481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a59190612925565b6114c15760405162461bcd60e51b815260040161071e90612d62565b846001600160a01b0381166114e85760405162461bcd60e51b815260040161071e90612c30565b6001600160a01b03811660009081526007602052604090206001015460ff166115235760405162461bcd60e51b815260040161071e90612fa7565b600254600160a01b900460ff161561154d5760405162461bcd60e51b815260040161071e90612ddb565b60005a6001600160a01b038816600090815260076020526040902060020154909150861080159061159957506001600160a01b0387166000908152600760205260409020600301548611155b6115b55760405162461bcd60e51b815260040161071e90612e56565b6001600160a01b0385166115db5760405162461bcd60e51b815260040161071e90612ea9565b6000806115ea898989896113a1565b91509150801561160c5760405162461bcd60e51b815260040161071e9061319e565b6000828152600860205260408120805460ff19166001179055600654611641906127109061163b908c90612367565b906123a1565b6004546001600160a01b038c1660009081526007602052604081205492935091611679919061167390815a8a90612301565b90612266565b905060006116878289612367565b9050600061169f6116988584612266565b8d90612301565b90506001600160a01b038d1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561176857804710156116e65760405162461bcd60e51b815260040161071e90612c67565b60008b6001600160a01b0316826040516116ff90610bd9565b60006040518083038185875af1925050503d806000811461173c576040519150601f19603f3d011682016040523d82523d6000602084013e611741565b606091505b50509050806117625760405162461bcd60e51b815260040161071e90613031565b5061180f565b6040516370a0823160e01b815281906001600160a01b038f16906370a0823190611796903090600401612a01565b60206040518083038186803b1580156117ae57600080fd5b505afa1580156117c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e69190612980565b10156118045760405162461bcd60e51b815260040161071e90612c67565b61180f8d8c83612343565b808c8e6001600160a01b03167fec1dcc5633614eade4a5730f51adc7444a5103a8477965a32f2e886f5b20f6948e8e60405161184c929190612a9f565b60405180910390a4505060016000555050505050505050505050565b6001546001600160a01b031690565b816001600160a01b03811661189e5760405162461bcd60e51b815260040161071e90612c30565b6001600160a01b03811660009081526007602052604090206001015460ff166118d95760405162461bcd60e51b815260040161071e90612fa7565b6118e161191a565b6118fd5760405162461bcd60e51b815260040161071e90612fd4565b506001600160a01b03909116600090815260076020526040902055565b6001546001600160a01b0316331490565b60065481565b6005546001600160a01b031690565b600254600160a01b900460ff1690565b600254600160a01b900460ff161561197a5760405162461bcd60e51b815260040161071e90612ddb565b346119975760405162461bcd60e51b815260040161071e90612f7b565b60006119a16121d6565b6001600160a01b03811660009081526000805160206132fa83398151915260205260409020549091506119d49034612266565b6001600160a01b03821660009081526000805160206132fa8339815191526020908152604082209290925573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee9052600790526000805160206132da83398151915254611a349034612266565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee600081905260076020526000805160206132da833981519152919091556040513091906001600160a01b038416907f2db8fc28326a114fe00f000205e13b79bbdeaeae6568b34ccf9fe0991da2285e90611aa4903490613250565b60405180910390a450565b611ab761191a565b611ad35760405162461bcd60e51b815260040161071e90612fd4565b600254600160a01b900460ff1615611afd5760405162461bcd60e51b815260040161071e90612ddb565b80611b1a5760405162461bcd60e51b815260040161071e90612b86565b600681905560405181907f11a80b766155f9b8f16a7da44d66269fd694cb1c247f4814244586f68dd5348790600090a250565b60076020526000908152604090208054600182015460028301546003840154600490940154929360ff9092169290919085565b611b8861191a565b611ba45760405162461bcd60e51b815260040161071e90612fd4565b600254600160a01b900460ff1615611bce5760405162461bcd60e51b815260040161071e90612ddb565b6001600160a01b03811660008181526007602052604080822060049081015491516370a0823160e01b81529293611c699390916370a0823191611c1391309101612a01565b60206040518083038186803b158015611c2b57600080fd5b505afa158015611c3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c639190612980565b90612301565b905080611c885760405162461bcd60e51b815260040161071e90612ed7565b6000611c926121d6565b9050611c9f838284612343565b81816001600160a01b0316846001600160a01b03167f8a42c105b9b9c7739e44588d5e160a2e119ec86e88b6159e003b9118d9ae7b4d60405160405180910390a4505050565b611ced61191a565b611d095760405162461bcd60e51b815260040161071e90612fd4565b6001600160801b0316600455565b611d1f61191a565b611d3b5760405162461bcd60e51b815260040161071e90612fd4565b6001600160a01b038116611d615760405162461bcd60e51b815260040161071e90613219565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f871264f4293af7d2865ae7eae628b228f4991c57cb45b39c99f0b774ebe2901890600090a250565b6001600160a01b03808216600090815260076020908152604080832093861683526005909301905220545b92915050565b611de461191a565b611e005760405162461bcd60e51b815260040161071e90612fd4565b6001600160a01b038316611e265760405162461bcd60e51b815260040161071e90612c30565b818111611e455760405162461bcd60e51b815260040161071e90613098565b6001600160a01b0390921660009081526007602052604090206001818101805460ff19169091179055600281019190915560030155565b611e8461191a565b611ea05760405162461bcd60e51b815260040161071e90612fd4565b6001600160a01b038116611ec65760405162461bcd60e51b815260040161071e90612bb5565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b611ef061191a565b611f0c5760405162461bcd60e51b815260040161071e90612fd4565b610c09816123e3565b600254600160a01b900460ff1615611f3f5760405162461bcd60e51b815260040161071e90612ddb565b60026000541415611f625760405162461bcd60e51b815260040161071e90613167565b600260005580611f845760405162461bcd60e51b815260040161071e90612f7b565b6000611f8e6121d6565b6001600160a01b03811660009081526000805160206132fa8339815191526020526040902054909150821115611fd65760405162461bcd60e51b815260040161071e90612daf565b6001600160a01b03811660009081526000805160206132fa83398151915260205260409020546120069083612301565b6001600160a01b03821660009081526000805160206132fa8339815191526020908152604082209290925573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee9052600790526000805160206132da833981519152546120669083612301565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee600090815260076020526000805160206132da833981519152919091556040516001600160a01b0383169084906120b190610bd9565b60006040518083038185875af1925050503d80600081146120ee576040519150601f19603f3d011682016040523d82523d6000602084013e6120f3565b606091505b50509050806121145760405162461bcd60e51b815260040161071e90613031565b6040516001600160a01b03831690849073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee907f70516e69d9b3069ff3184583d867f7a832772e850ba89b554ae06ff752474f9e90600090a45050600160005550565b846001600160a01b0316638fcbaf0c6121816121d6565b30843560208601356121996060880160408901612909565b6121a96080890160608a01612998565b88608001358960a001356040518963ffffffff1660e01b8152600401610f75989796959493929190612a15565b6000601836108015906121ed57506121ed33610f01565b15612201575060131936013560601c610bd9565b5033610bd9565b612260846323b872dd60e01b85858560405160240161222993929190612ac3565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612452565b50505050565b60008282018381101561228b5760405162461bcd60e51b815260040161071e90612bf9565b9392505050565b6001600160a01b0381166122a557600080fd5b6003546040516001600160a01b038084169216907f95bb211a5a393c4d30c3edc9a745825fba4e6ad3e3bb949e6bf8ccdfe431a81190600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b600061228b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124e1565b6123628363a9059cbb60e01b8484604051602401612229929190612ae7565b505050565b60008261237657506000611dd6565b8282028284828161238357fe5b041461228b5760405162461bcd60e51b815260040161071e90612f03565b600061228b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061250d565b6001600160a01b0381166123f657600080fd5b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b60006124a7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166125449092919063ffffffff16565b80519091501561236257808060200190518101906124c59190612925565b6123625760405162461bcd60e51b815260040161071e9061311d565b600081848411156125055760405162461bcd60e51b815260040161071e9190612b45565b505050900390565b6000818361252e5760405162461bcd60e51b815260040161071e9190612b45565b50600083858161253a57fe5b0495945050505050565b6060612553848460008561255b565b949350505050565b60608247101561257d5760405162461bcd60e51b815260040161071e90612d1c565b6125868561261b565b6125a25760405162461bcd60e51b815260040161071e90613061565b600080866001600160a01b031685876040516125be91906129e5565b60006040518083038185875af1925050503d80600081146125fb576040519150601f19603f3d011682016040523d82523d6000602084013e612600565b606091505b5091509150612610828286612621565b979650505050505050565b3b151590565b6060831561263057508161228b565b8251156126405782518084602001fd5b8160405162461bcd60e51b815260040161071e9190612b45565b600082601f83011261266a578081fd5b813567ffffffffffffffff8082111561267f57fe5b604051601f8301601f19168101602001828111828210171561269d57fe5b6040528281528483016020018610156126b4578384fd5b82602086016020830137918201602001929092529392505050565b6000602082840312156126e0578081fd5b813561228b816132b6565b600080604083850312156126fd578081fd5b8235612708816132b6565b91506020830135612718816132b6565b809150509250929050565b60008060008060808587031215612738578182fd5b8435612743816132b6565b93506020850135612753816132b6565b93969395505050506040820135916060013590565b6000806000806000858703610140811215612781578182fd5b863561278c816132b6565b9550602087013561279c816132b6565b9450604087013593506060870135925060c0607f19820112156127bd578182fd5b506080860190509295509295909350565b600080604083850312156127e0578182fd5b82356127eb816132b6565b946020939093013593505050565b6000806000806080858703121561280e578384fd5b8435612819816132b6565b9350602085013592506040850135612830816132b6565b9150606085013567ffffffffffffffff81111561284b578182fd5b6128578782880161265a565b91505092959194509250565b600080600080600060a0868803121561287a578081fd5b8535612885816132b6565b945060208601359350604086013561289c816132b6565b9250606086013567ffffffffffffffff8111156128b7578182fd5b6128c38882890161265a565b95989497509295608001359392505050565b6000806000606084860312156128e9578283fd5b83356128f4816132b6565b95602085013595506040909401359392505050565b60006020828403121561291a578081fd5b813561228b816132cb565b600060208284031215612936578081fd5b815161228b816132cb565b600060208284031215612952578081fd5b5035919050565b60006020828403121561296a578081fd5b81356001600160801b038116811461228b578182fd5b600060208284031215612991578081fd5b5051919050565b6000602082840312156129a9578081fd5b813560ff8116811461228b578182fd5b600081518084526129d181602086016020860161328a565b601f01601f19169290920160200192915050565b600082516129f781846020870161328a565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039889168152969097166020870152604086019490945260608501929092521515608084015260ff1660a083015260c082015260e08101919091526101000190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b0383168152604060208201819052600090612553908301846129b9565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039485168152602081019390935292166040820152606081019190915260800190565b901515815260200190565b9182521515602082015260400190565b60006020825261228b60208301846129b9565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b602080825260159082015274041646d696e204665652063616e6e6f74206265203605c1b604082015260600190565b60208082526024908201527f4578656375746f72204d616e6167657220416464726573732063616e6e6f74206040820152630626520360e41b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526019908201527f546f6b656e20616464726573732063616e6e6f74206265203000000000000000604082015260600190565b6020808252601290820152714e6f7420456e6f7567682042616c616e636560701b604082015260600190565b60208082526032908201527f4465706f73697420616d6f756e742073686f756c642062652077697468696e20604082015271616c6c6f77656420436170206c696d69747360701b606082015260800190565b6020808252601c908201527f63616e27742072656e6f756e63654f776e657273686970206865726500000000604082015260600190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b6020808252602d908201527f596f7520617265206e6f7420616c6c6f77656420746f20706572666f726d207460408201526c3434b99037b832b930ba34b7b760991b606082015260800190565b6020808252601290820152714e6f7420656e6f7567682062616c616e636560701b604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526031908201527f4465706f73697420616d6f756e742073686f756c642062652077697468696e20604082015270185b1b1bddd9590810d85c081b1a5b5a5d607a1b606082015260800190565b60208082526033908201527f576974686472617720616d6f756e742073686f756c642062652077697468696e60408201527220616c6c6f77656420436170206c696d69747360681b606082015260800190565b602080825260149082015273426164207265636569766572206164647265737360601b604082015260600190565b602080825260129082015271050726f666974206561726e656420697320360741b604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601c908201527f526563656976657220616464726573732063616e6e6f74206265203000000000604082015260600190565b6020808252601290820152710416d6f756e742063616e6e6f7420626520360741b604082015260600190565b602080825260139082015272151bdad95b881b9bdd081cdd5c1c1bdc9d1959606a1b604082015260600190565b60208082526038908201527f4f6e6c7920636f6e7472616374206f776e657220697320616c6c6f776564207460408201527f6f20706572666f726d2074686973206f7065726174696f6e0000000000000000606082015260800190565b60208082526016908201527513985d1a5d9948151c985b9cd9995c8811985a5b195960521b604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602e908201527f6d61784361704c696d69742063616e6e6f7420626520736d616c6c657220746860408201526d185b881b5a5b90d85c131a5b5a5d60921b606082015260800190565b60208082526019908201527f63616e27742072656e6f756e6365506175736572206865726500000000000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b602080825260119082015270105b1c9958591e48141c9bd8d95cdcd959607a1b604082015260600190565b60208082526030908201527f4f6e6c792070617573657220697320616c6c6f77656420746f20706572666f7260408201526f36903a3434b99037b832b930ba34b7b760811b606082015260800190565b6020808252601d908201527f466f7277617264657220416464726573732063616e6e6f742062652030000000604082015260600190565b90815260200190565b948552921515602085015260408401919091526060830152608082015260a00190565b918252602082015260400190565b60005b838110156132a557818101518382015260200161328d565b838111156122605750506000910152565b6001600160a01b0381168114610c0957600080fd5b8015158114610c0957600080fdfeb2084a3e4595ccf007fb44245853374aaf0de960074375e8e0fb334712e94d12b2084a3e4595ccf007fb44245853374aaf0de960074375e8e0fb334712e94d13a2646970667358221220a95dcaf41d41f0325e42f9e9dfa6a7b0d5032c8b64329c793ee10b519f78279a64736f6c63430007060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000eed0c0aa1d73ed0f48559e6cc2c762d4ed5ca1ca000000000000000000000000915ed219e303c4f5a08227d8865f022bbb90c502000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000084a0856b038eaad1cc7e297cf34a7e72685a8693000000000000000000000000000000000000000000000000000000000000000a
-----Decoded View---------------
Arg [0] : _executorManagerAddress (address): 0xEeD0c0AA1d73Ed0F48559e6CC2C762D4Ed5ca1Ca
Arg [1] : owner (address): 0x915Ed219E303c4f5a08227d8865f022bbb90c502
Arg [2] : pauser (address): 0xdAC17F958D2ee523a2206206994597C13D831ec7
Arg [3] : _trustedForwarder (address): 0x84a0856b038eaAd1cC7E297cF34A7e72685A8693
Arg [4] : _adminFee (uint256): 10
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000eed0c0aa1d73ed0f48559e6cc2c762d4ed5ca1ca
Arg [1] : 000000000000000000000000915ed219e303c4f5a08227d8865f022bbb90c502
Arg [2] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Arg [3] : 00000000000000000000000084a0856b038eaad1cc7e297cf34a7e72685a8693
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000a
Deployed Bytecode Sourcemap
33119:13386:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42979:463;;;;;;:::i;:::-;;:::i;:::-;;41237:656;;;;;;;;;;-1:-1:-1;41237:656:0;;;;;:::i;:::-;;:::i;39700:620::-;;;;;;;;;;-1:-1:-1;39700:620:0;;;;;:::i;:::-;;:::i;36133:88::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26780:102;;;;;;;;;;-1:-1:-1;26780:102:0;;;;;:::i;:::-;;:::i;27768:115::-;;;;;;;;;;;;;:::i;36461:111::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;46040:462::-;;;;;;;;;;;;;:::i;38184:374::-;;;;;;;;;;-1:-1:-1;38184:374:0;;;;;:::i;:::-;;:::i;6990:137::-;;;;;;;;;;-1:-1:-1;6990:137:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;33332:22::-;;;;;;;;;;;;;:::i;42498:473::-;;;;;;;;;;-1:-1:-1;42498:473:0;;;;;:::i;:::-;;:::i;26325:94::-;;;;;;;;;;;;;:::i;35972:153::-;;;;;;;;;;;;;:::i;26148:84::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;35806:158::-;;;;;;;;;;;;;:::i;33905:48::-;;;;;;;;;;-1:-1:-1;33905:48:0;;;;;:::i;:::-;;:::i;38011:165::-;;;;;;;;;;-1:-1:-1;38011:165:0;;;;;:::i;:::-;;:::i;6696:31::-;;;;;;;;;;;;;:::i;27514:113::-;;;;;;;;;;;;;:::i;40328:690::-;;;;;;;;;;-1:-1:-1;40328:690:0;;;;;:::i;:::-;;:::i;45106:457::-;;;;;;;;;;-1:-1:-1;45106:457:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;43450:1648::-;;;;;;;;;;-1:-1:-1;43450:1648:0;;;;;:::i;:::-;;:::i;28878:82::-;;;;;;;;;;;;;:::i;37328:198::-;;;;;;;;;;-1:-1:-1;37328:198:0;;;;;:::i;:::-;;:::i;29053:92::-;;;;;;;;;;;;;:::i;33413:23::-;;;;;;;;;;;;;:::i;36671:109::-;;;;;;;;;;;;;:::i;26519:80::-;;;;;;;;;;;;;:::i;38566:449::-;;;:::i;36229:224::-;;;;;;;;;;-1:-1:-1;36229:224:0;;;;;:::i;:::-;;:::i;33848:50::-;;;;;;;;;;-1:-1:-1;33848:50:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;45571:461::-;;;;;;;;;;-1:-1:-1;45571:461:0;;;;;:::i;:::-;;:::i;36580:83::-;;;;;;;;;;-1:-1:-1;36580:83:0;;;;;:::i;:::-;;:::i;37050:270::-;;;;;;;;;;-1:-1:-1;37050:270:0;;;;;:::i;:::-;;:::i;41026:203::-;;;;;;;;;;-1:-1:-1;41026:203:0;;;;;:::i;:::-;;:::i;37534:469::-;;;;;;;;;;-1:-1:-1;37534:469:0;;;;;:::i;:::-;;:::i;36788:254::-;;;;;;;;;;-1:-1:-1;36788:254:0;;;;;:::i;:::-;;:::i;29758:109::-;;;;;;;;;;-1:-1:-1;29758:109:0;;;;;:::i;:::-;;:::i;39023:669::-;;;;;;;;;;-1:-1:-1;39023:669:0;;;;;:::i;:::-;;:::i;41952:490::-;;;;;;;;;;-1:-1:-1;41952:490:0;;;;;:::i;:::-;;:::i;42979:463::-;25752:7;;-1:-1:-1;;;25752:7:0;;;;25751:8;25743:37;;;;-1:-1:-1;;;25743:37:0;;;;;;;:::i;:::-;;;;;;;;;33283:42:::1;43091:18;::::0;:10:::1;:18;::::0;:25;;43120:9:::1;-1:-1:-1::0;43091:38:0;::::1;::::0;:80:::1;;-1:-1:-1::0;33283:42:0::1;43133:18;::::0;:10:::1;:18;::::0;:25;;43162:9:::1;-1:-1:-1::0;43133:38:0::1;43091:80;43083:142;;;;-1:-1:-1::0;;;43083:142:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43244:22:0;::::1;43236:63;;;;-1:-1:-1::0;;;43236:63:0::1;;;;;;;:::i;:::-;43318:9;43310:45;;;;-1:-1:-1::0;;;43310:45:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43373:61:0;::::1;33283:42;43381:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;43373:61:0::1;;43413:9;43424;43373:61;;;;;;;:::i;:::-;;;;;;;;42979:463:::0;;:::o;41237:656::-;41355:12;-1:-1:-1;;;;;35032:26:0;;35024:64;;;;-1:-1:-1;;;35024:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35107:24:0;;;;;;:10;:24;;;;;:39;;;;;35099:71;;;;-1:-1:-1;;;35099:71:0;;;;;;;:::i;:::-;25752:7:::1;::::0;-1:-1:-1;;;25752:7:0;::::1;;;25751:8;25743:37;;;;-1:-1:-1::0;;;25743:37:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;41402:24:0;::::2;;::::0;;;:10:::2;:24;::::0;;;;:31:::2;;::::0;:41;-1:-1:-1;41402:41:0;::::2;::::0;:86:::2;;-1:-1:-1::0;;;;;;41447:24:0;::::2;;::::0;;;:10:::2;:24;::::0;;;;:31:::2;;::::0;:41;-1:-1:-1;41447:41:0::2;41402:86;41394:149;;;;-1:-1:-1::0;;;41394:149:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;41562:22:0;::::2;41554:63;;;;-1:-1:-1::0;;;41554:63:0::2;;;;;;;:::i;:::-;41636:11:::0;41628:42:::2;;;;-1:-1:-1::0;;;41628:42:0::2;;;;;;;:::i;:::-;41683:22;41708:12;:10;:12::i;:::-;41683:37;;41733:78;41767:12;41782:6;41798:4;41804:6;41733:26;:78::i;:::-;41857:8;-1:-1:-1::0;;;;;41827:58:0::2;41843:12;-1:-1:-1::0;;;;;41827:58:0::2;41835:6;-1:-1:-1::0;;;;;41827:58:0::2;;41867:9;41878:6;41827:58;;;;;;;:::i;:::-;;;;;;;;25791:1;41237:656:::0;;;;;:::o;39700:620::-;39788:12;-1:-1:-1;;;;;35032:26:0;;35024:64;;;;-1:-1:-1;;;35024:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35107:24:0;;;;;;:10;:24;;;;;:39;;;;;35099:71;;;;-1:-1:-1;;;35099:71:0;;;;;;;:::i;:::-;25752:7:::1;::::0;-1:-1:-1;;;25752:7:0;::::1;;;25751:8;25743:37;;;;-1:-1:-1::0;;;25743:37:0::1;;;;;;;:::i;:::-;39835:11:::0;39827:42:::2;;;;-1:-1:-1::0;;;39827:42:0::2;;;;;;;:::i;:::-;39880:22;39905:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;39981:24:0;;::::2;;::::0;;;:10:::2;:24;::::0;;;;;;;:50;;::::2;::::0;;:42:::2;::::0;;::::2;:50:::0;;;;39880:37;;-1:-1:-1;39981:62:0::2;::::0;40036:6;39981:54:::2;:62::i;:::-;-1:-1:-1::0;;;;;39928:24:0;;::::2;;::::0;;;:10:::2;:24;::::0;;;;;;;:50;;::::2;::::0;;:42:::2;::::0;::::2;:50:::0;;;;:115;;;;40091:24;;;;;;:34:::2;;::::0;:46:::2;::::0;40130:6;40091:38:::2;:46::i;:::-;-1:-1:-1::0;;;;;40054:24:0;::::2;;::::0;;;:10:::2;:24;::::0;;;;:34:::2;;:83:::0;40158:79:::2;40065:12:::0;40207:6;40223:4:::2;40230:6:::0;40158:26:::2;:79::i;:::-;40298:4;-1:-1:-1::0;;;;;40253:59:0::2;40276:12;-1:-1:-1::0;;;;;40253:59:0::2;40268:6;-1:-1:-1::0;;;;;40253:59:0::2;;40305:6;40253:59;;;;;;:::i;:::-;;;;;;;;25791:1;39700:620:::0;;;:::o;36133:88::-;36205:8;;36133:88;;:::o;26780:102::-;25406:10;:8;:10::i;:::-;25384:108;;;;-1:-1:-1;;;25384:108:0;;;;;;;:::i;:::-;26850:24:::1;26864:9;26850:13;:24::i;:::-;26780:102:::0;:::o;27768:115::-;25406:10;:8;:10::i;:::-;25384:108;;;;-1:-1:-1;;;25384:108:0;;;;;;;:::i;:::-;26028:7:::1;::::0;-1:-1:-1;;;26028:7:0;::::1;;;26020:40;;;;-1:-1:-1::0;;;26020:40:0::1;;;;;;;:::i;:::-;27827:7:::2;:15:::0;;-1:-1:-1;;;;27827:15:0::2;::::0;;27867:7:::2;::::0;27858:17:::2;::::0;::::2;::::0;::::2;::::0;-1:-1:-1;;;;;27867:7:0;;::::2;::::0;27858:17:::2;:::i;:::-;;;;;;;;27768:115::o:0;36461:111::-;36554:10;;;;;;;;;;;;-1:-1:-1;;;36554:10:0;;;;36461:111;:::o;46040:462::-;28697:9;:7;:9::i;:::-;28675:115;;;;-1:-1:-1;;;28675:115:0;;;;;;;:::i;:::-;25752:7:::1;::::0;-1:-1:-1;;;25752:7:0;::::1;;;25751:8;25743:37;;;;-1:-1:-1::0;;;25743:37:0::1;;;;;;;:::i;:::-;33283:42:::2;46110:20;46161:18:::0;;;:10:::2;:18;::::0;-1:-1:-1;;;;;;;;;;;46161:28:0;46133:57:::2;::::0;46134:21:::2;::::0;46133:27:::2;:57::i;:::-;46110:80:::0;-1:-1:-1;46209:17:0;46201:48:::2;;;;-1:-1:-1::0;;;46201:48:0::2;;;;;;;:::i;:::-;46260:22;46285:12;:10;:12::i;:::-;46260:37;;46309:12;46327:6;-1:-1:-1::0;;;;;46327:11:0::2;46347:12;46327:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46308:57;;;46384:7;46376:42;;;;-1:-1:-1::0;;;46376:42:0::2;;;;;;;:::i;:::-;46444:50;::::0;46481:12;;-1:-1:-1;;;;;46444:50:0;::::2;::::0;46466:4:::2;::::0;46444:50:::2;::::0;;;::::2;25791:1;;;46040:462::o:0;38184:374::-;38295:12;-1:-1:-1;;;;;35032:26:0;;35024:64;;;;-1:-1:-1;;;35024:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35107:24:0;;;;;;:10;:24;;;;;:39;;;;;35099:71;;;;-1:-1:-1;;;35099:71:0;;;;;;;:::i;:::-;28697:9:::1;:7;:9::i;:::-;28675:115;;;;-1:-1:-1::0;;;28675:115:0::1;;;;;;;:::i;:::-;38352:11:::2;38338;:25;38330:84;;;;-1:-1:-1::0;;;38330:84:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;38441:24:0;;::::2;;::::0;;;:10:::2;:24;::::0;;;;:31:::2;::::0;::::2;:45:::0;;;;38505:31:::2;;:45:::0;38184:374::o;6990:137::-;7103:16;;-1:-1:-1;;;;;7103:16:0;;;7090:29;;;;6990:137::o;33332:22::-;;;;:::o;42498:473::-;42751:12;-1:-1:-1;;;;;42738:33:0;;42772:12;:10;:12::i;:::-;42794:4;42801:6;42809:20;;;;42831:15;;;;;;;;:::i;:::-;42848:13;:15;;;42865:13;:15;;;42738:143;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42896:55;42909:12;42923:8;42933:6;42941:9;42896:12;:55::i;:::-;42498:473;;;;;:::o;26325:94::-;26404:7;;-1:-1:-1;;;;;26404:7:0;26390:10;:21;;26325:94::o;35972:153::-;25406:10;:8;:10::i;:::-;25384:108;;;;-1:-1:-1;;;25384:108:0;;;;;;;:::i;:::-;36038:36:::1;;-1:-1:-1::0;;;36038:36:0::1;;;;;;;:::i;26148:84::-:0;26217:7;;-1:-1:-1;;;;;26217:7:0;26148:84;:::o;35806:158::-;28697:9;:7;:9::i;:::-;28675:115;;;;-1:-1:-1;;;28675:115:0;;;;;;;:::i;:::-;35874:39:::1;;-1:-1:-1::0;;;35874:39:0::1;;;;;;;:::i;33905:48::-:0;;;;;;;;;;;;;;;:::o;38011:165::-;38086:12;-1:-1:-1;;;;;35032:26:0;;35024:64;;;;-1:-1:-1;;;35024:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35107:24:0;;;;;;:10;:24;;;;;:39;;;;;35099:71;;;;-1:-1:-1;;;35099:71:0;;;;;;;:::i;:::-;28697:9:::1;:7;:9::i;:::-;28675:115;;;;-1:-1:-1::0;;;28675:115:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;38121:24:0::2;38163:5;38121:24:::0;;;:10:::2;:24;::::0;;;;:39:::2;;:47:::0;;-1:-1:-1;;38121:47:0::2;::::0;;38011:165::o;6696:31::-;;;-1:-1:-1;;;;;6696:31:0;;:::o;27514:113::-;25406:10;:8;:10::i;:::-;25384:108;;;;-1:-1:-1;;;25384:108:0;;;;;;;:::i;:::-;25752:7:::1;::::0;-1:-1:-1;;;25752:7:0;::::1;;;25751:8;25743:37;;;;-1:-1:-1::0;;;25743:37:0::1;;;;;;;:::i;:::-;27574:7:::2;:14:::0;;-1:-1:-1;;;;27574:14:0::2;-1:-1:-1::0;;;27574:14:0::2;::::0;;27611:7:::2;::::0;27604:15:::2;::::0;::::2;::::0;::::2;::::0;-1:-1:-1;;;;;27611:7:0;;::::2;::::0;27604:15:::2;:::i;40328:690::-:0;40419:12;-1:-1:-1;;;;;35032:26:0;;35024:64;;;;-1:-1:-1;;;35024:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35107:24:0;;;;;;:10;:24;;;;;:39;;;;;35099:71;;;;-1:-1:-1;;;35099:71:0;;;;;;;:::i;:::-;25752:7:::1;::::0;-1:-1:-1;;;25752:7:0;::::1;;;25751:8;25743:37;;;;-1:-1:-1::0;;;25743:37:0::1;;;;;;;:::i;:::-;40466:11:::0;40458:42:::2;;;;-1:-1:-1::0;;;40458:42:0::2;;;;;;;:::i;:::-;40511:22;40536:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;40567:24:0;;::::2;;::::0;;;:10:::2;:24;::::0;;;;;;;:50;;::::2;::::0;;:42:::2;::::0;;::::2;:50:::0;;;;40511:37;;-1:-1:-1;40567:60:0;-1:-1:-1;40567:60:0::2;40559:91;;;;-1:-1:-1::0;;;40559:91:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40716:24:0;;::::2;;::::0;;;:10:::2;:24;::::0;;;;;;;:50;;::::2;::::0;;:42:::2;::::0;;::::2;:50:::0;;;;:62:::2;::::0;40771:6;40716:54:::2;:62::i;:::-;-1:-1:-1::0;;;;;40663:24:0;;::::2;;::::0;;;:10:::2;:24;::::0;;;;;;;:50;;::::2;::::0;;:42:::2;::::0;::::2;:50:::0;;;;:115;;;;40826:24;;;;;;:34:::2;;::::0;:46:::2;::::0;40865:6;40826:38:::2;:46::i;:::-;-1:-1:-1::0;;;;;40789:24:0;::::2;;::::0;;;:10:::2;:24;::::0;;;;:34:::2;;:83:::0;40885:60:::2;40800:12:::0;40930:6;40938;40885:22:::2;:60::i;:::-;41001:6;-1:-1:-1::0;;;;;40961:47:0::2;40993:6;40979:12;-1:-1:-1::0;;;;;40961:47:0::2;;;;;;;;;;;25791:1;40328:690:::0;;;:::o;45106:457::-;45241:27;45270:11;45368:12;45399:6;45424:8;45461:11;45451:22;;;;;;45339:149;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;45339:149:0;;;;;;;;;45315:184;;45339:149;45315:184;;;;45521:34;;;;:13;:34;;;;;;45315:184;;45521:34;;;;;-1:-1:-1;45106:457:0;-1:-1:-1;;;;;45106:457:0:o;43450:1648::-;23025:1;23621:7;;:19;;23613:63;;;;-1:-1:-1;;;23613:63:0;;;;;;;:::i;:::-;23025:1;23754:7;:18;34823:15:::1;::::0;-1:-1:-1;;;;;34823:15:0::1;:33;34857:12;:10;:12::i;:::-;34823:47;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34815:128;;;;-1:-1:-1::0;;;34815:128:0::1;;;;;;;:::i;:::-;43637:12:::0;-1:-1:-1;;;;;35032:26:0;::::2;35024:64;;;;-1:-1:-1::0;;;35024:64:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35107:24:0;::::2;;::::0;;;:10:::2;:24;::::0;;;;:39:::2;;::::0;::::2;;35099:71;;;;-1:-1:-1::0;;;35099:71:0::2;;;;;;;:::i;:::-;25752:7:::3;::::0;-1:-1:-1;;;25752:7:0;::::3;;;25751:8;25743:37;;;;-1:-1:-1::0;;;25743:37:0::3;;;;;;;:::i;:::-;43676:18:::4;43697:9;-1:-1:-1::0;;;;;43725:24:0;::::4;;::::0;;;:10:::4;:24;::::0;;;;:31:::4;;::::0;43676:30;;-1:-1:-1;43725:41:0;-1:-1:-1;43725:41:0;::::4;::::0;:86:::4;;-1:-1:-1::0;;;;;;43770:24:0;::::4;;::::0;;;:10:::4;:24;::::0;;;;:31:::4;;::::0;:41;-1:-1:-1;43770:41:0::4;43725:86;43717:150;;;;-1:-1:-1::0;;;43717:150:0::4;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43886:22:0;::::4;43878:55;;;;-1:-1:-1::0;;;43878:55:0::4;;;;;;;:::i;:::-;43955:27;43984:11:::0;43999:60:::4;44015:12;44029:6;44037:8;44047:11;43999:15;:60::i;:::-;43954:105;;;;44081:6;44080:7;44072:37;;;;-1:-1:-1::0;;;44072:37:0::4;;;;;;;:::i;:::-;44120:34;::::0;;;:13:::4;:34;::::0;;;;:41;;-1:-1:-1;;44120:41:0::4;44157:4;44120:41;::::0;;44213:8:::4;::::0;44202:31:::4;::::0;44227:5:::4;::::0;44202:20:::4;::::0;:6;;:10:::4;:20::i;:::-;:24:::0;::::4;:31::i;:::-;44348:7;::::0;-1:-1:-1;;;;;44301:24:0;::::4;44246:20;44301:24:::0;;;:10:::4;:24;::::0;;;;:41;44174:59;;-1:-1:-1;44246:20:0;44269:87:::4;::::0;44348:7;44269:74:::4;::::0;;44285:9:::4;44270:10:::0;;:14:::4;:25::i;:::-;44269:31:::0;::::4;:74::i;:87::-;44246:110:::0;-1:-1:-1;44369:21:0::4;44393:31;44246:110:::0;44410:13;44393:16:::4;:31::i;:::-;44369:55:::0;-1:-1:-1;44435:24:0::4;44462:48;44473:36;:17:::0;44369:55;44473:21:::4;:36::i;:::-;44462:6:::0;;:10:::4;:48::i;:::-;44435:75:::0;-1:-1:-1;;;;;;44527:22:0;::::4;33283:42;44527:22;44523:478;;;44599:16;44574:21;:41;;44566:72;;;;-1:-1:-1::0;;;44566:72:0::4;;;;;;;:::i;:::-;44654:12;44672:8;-1:-1:-1::0;;;;;44672:13:0::4;44694:16;44672:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44653:63;;;44739:7;44731:42;;;;-1:-1:-1::0;;;44731:42:0::4;;;;;;;:::i;:::-;44523:478;;;;44814:45;::::0;-1:-1:-1;;;44814:45:0;;44863:16;;-1:-1:-1;;;;;44814:30:0;::::4;::::0;::::4;::::0;:45:::4;::::0;44853:4:::4;::::0;44814:45:::4;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:65;;44806:96;;;;-1:-1:-1::0;;;44806:96:0::4;;;;;;;:::i;:::-;44917:72;44947:12;44962:8;44972:16;44917:22;:72::i;:::-;45050:16;45042:6;45028:12;-1:-1:-1::0;;;;;45018:72:0::4;;45068:8;45078:11;45018:72;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;22981:1:0;23933:7;:22;-1:-1:-1;;;;;;;;;;;43450:1648:0:o;28878:82::-;28946:6;;-1:-1:-1;;;;;28946:6:0;28878:82;:::o;37328:198::-;37428:12;-1:-1:-1;;;;;35032:26:0;;35024:64;;;;-1:-1:-1;;;35024:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35107:24:0;;;;;;:10;:24;;;;;:39;;;;;35099:71;;;;-1:-1:-1;;;35099:71:0;;;;;;;:::i;:::-;28697:9:::1;:7;:9::i;:::-;28675:115;;;;-1:-1:-1::0;;;28675:115:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;37463:24:0;;::::2;;::::0;;;:10:::2;:24;::::0;;;;:55;37328:198::o;29053:92::-;29131:6;;-1:-1:-1;;;;;29131:6:0;29117:10;:20;;29053:92::o;33413:23::-;;;;:::o;36671:109::-;36756:15;;-1:-1:-1;;;;;36756:15:0;36671:109;:::o;26519:80::-;26584:7;;-1:-1:-1;;;26584:7:0;;;;;26519:80::o;38566:449::-;25752:7;;-1:-1:-1;;;25752:7:0;;;;25751:8;25743:37;;;;-1:-1:-1;;;25743:37:0;;;;;;;:::i;:::-;38646:9:::1;38638:45;;;;-1:-1:-1::0;;;38638:45:0::1;;;;;;;:::i;:::-;38694:22;38719:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;38789:44:0;::::1;:18;:44:::0;;;-1:-1:-1;;;;;;;;;;;38789:18:0::1;:44:::0;:18;:44;;;38694:37;;-1:-1:-1;38789:59:0::1;::::0;38838:9:::1;38789:48;:59::i;:::-;-1:-1:-1::0;;;;;38742:44:0;::::1;:18;:44:::0;;;-1:-1:-1;;;;;;;;;;;38742:18:0::1;:44:::0;;;:18;:44;;:106;;;;33283:42:::1;38890:18:::0;;38742:10:::1;38890:18:::0;;-1:-1:-1;;;;;;;;;;;38890:28:0;:43:::1;::::0;38923:9:::1;38890:32;:43::i;:::-;33283:42;38859:18;::::0;;;:10:::1;:18;::::0;-1:-1:-1;;;;;;;;;;;38859:74:0;;;;:18;38951:56;38990:4:::1;::::0;33283:42;-1:-1:-1;;;;;38951:56:0;::::1;::::0;::::1;::::0;::::1;::::0;38997:9:::1;::::0;38951:56:::1;:::i;:::-;;;;;;;;25791:1;38566:449::o:0;36229:224::-;28697:9;:7;:9::i;:::-;28675:115;;;;-1:-1:-1;;;28675:115:0;;;;;;;:::i;:::-;25752:7:::1;::::0;-1:-1:-1;;;25752:7:0;::::1;;;25751:8;25743:37;;;;-1:-1:-1::0;;;25743:37:0::1;;;;;;;:::i;:::-;36326:16:::0;36318:50:::2;;;;-1:-1:-1::0;;;36318:50:0::2;;;;;;;:::i;:::-;36379:8;:22:::0;;;36417:28:::2;::::0;36390:11;;36417:28:::2;::::0;;;::::2;36229:224:::0;:::o;33848:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45571:461::-;28697:9;:7;:9::i;:::-;28675:115;;;;-1:-1:-1;;;28675:115:0;;;;;;;:::i;:::-;25752:7:::1;::::0;-1:-1:-1;;;25752:7:0;::::1;;;25751:8;25743:37;;;;-1:-1:-1::0;;;25743:37:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;45735:24:0;::::2;45660:20;45735:24:::0;;;:10:::2;:24;::::0;;;;;:34:::2;::::0;;::::2;::::0;45684:45;;-1:-1:-1;;;45684:45:0;;45660:20;;45683:87:::2;::::0;45735:24;;45684:30:::2;::::0;:45:::2;::::0;45723:4:::2;::::0;45684:45:::2;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45683:51:::0;::::2;:87::i;:::-;45660:110:::0;-1:-1:-1;45789:17:0;45781:48:::2;;;;-1:-1:-1::0;;;45781:48:0::2;;;;;;;:::i;:::-;45840:22;45865:12;:10;:12::i;:::-;45840:37;;45890:66;45920:12;45935:6;45943:12;45890:22;:66::i;:::-;46011:12;46002:6;-1:-1:-1::0;;;;;45974:50:0::2;45988:12;-1:-1:-1::0;;;;;45974:50:0::2;;;;;;;;;;;25791:1;;45571:461:::0;:::o;36580:83::-;28697:9;:7;:9::i;:::-;28675:115;;;;-1:-1:-1;;;28675:115:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36642:13:0::1;:7;:13:::0;36580:83::o;37050:270::-;28697:9;:7;:9::i;:::-;28675:115;;;;-1:-1:-1;;;28675:115:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37145:30:0;::::1;37137:72;;;;-1:-1:-1::0;;;37137:72:0::1;;;;;;;:::i;:::-;37220:16;:35:::0;;-1:-1:-1;;;;;;37220:35:0::1;-1:-1:-1::0;;;;;37220:35:0;::::1;::::0;;::::1;::::0;;;37271:41:::1;::::0;::::1;::::0;-1:-1:-1;;37271:41:0::1;37050:270:::0;:::o;41026:203::-;-1:-1:-1;;;;;41153:24:0;;;41125:7;41153:24;;;:10;:24;;;;;;;;:68;;;;;:42;;;;:68;;;;41026:203;;;;;:::o;37534:469::-;28697:9;:7;:9::i;:::-;28675:115;;;;-1:-1:-1;;;28675:115:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37665:26:0;::::1;37657:64;;;;-1:-1:-1::0;;;37657:64:0::1;;;;;;;:::i;:::-;37756:11;37742;:25;37734:84;;;;-1:-1:-1::0;;;37734:84:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37837:24:0;;::::1;;::::0;;;:10:::1;:24;::::0;;;;37879:4:::1;37837:39:::0;;::::1;:46:::0;;-1:-1:-1;;37837:46:0::1;::::0;;::::1;::::0;;37894:31:::1;::::0;::::1;:45:::0;;;;37950:31:::1;;:45:::0;37534:469::o;36788:254::-;28697:9;:7;:9::i;:::-;28675:115;;;;-1:-1:-1;;;28675:115:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36887:37:0;::::1;36879:86;;;;-1:-1:-1::0;;;36879:86:0::1;;;;;;;:::i;:::-;36976:15;:58:::0;;-1:-1:-1;;;;;;36976:58:0::1;-1:-1:-1::0;;;;;36976:58:0;;;::::1;::::0;;;::::1;::::0;;36788:254::o;29758:109::-;28697:9;:7;:9::i;:::-;28675:115;;;;-1:-1:-1;;;28675:115:0;;;;;;;:::i;:::-;29831:28:::1;29850:8;29831:18;:28::i;39023:669::-:0;25752:7;;-1:-1:-1;;;25752:7:0;;;;25751:8;25743:37;;;;-1:-1:-1;;;25743:37:0;;;;;;;:::i;:::-;23025:1:::1;23621:7;;:19;;23613:63;;;;-1:-1:-1::0;;;23613:63:0::1;;;;;;;:::i;:::-;23025:1;23754:7;:18:::0;39125:11;39117:43:::2;;;;-1:-1:-1::0;;;39117:43:0::2;;;;;;;:::i;:::-;39171:22;39196:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;39227:44:0;::::2;:18;:44:::0;;;-1:-1:-1;;;;;;;;;;;39227:18:0::2;:44:::0;:18;:44;;;39171:37;;-1:-1:-1;39227:54:0;-1:-1:-1;39227:54:0::2;39219:85;;;;-1:-1:-1::0;;;39219:85:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39362:44:0;::::2;:18;:44:::0;;;-1:-1:-1;;;;;;;;;;;39362:18:0::2;:44:::0;:18;:44;;;:56:::2;::::0;39411:6;39362:48:::2;:56::i;:::-;-1:-1:-1::0;;;;;39315:44:0;::::2;:18;:44:::0;;;-1:-1:-1;;;;;;;;;;;39315:18:0::2;:44:::0;;;:18;:44;;:103;;;;33283:42:::2;39460:18:::0;;39315:10:::2;39460:18:::0;;-1:-1:-1;;;;;;;;;;;39460:28:0;:40:::2;::::0;39493:6;39460:32:::2;:40::i;:::-;33283:42;39429:18;::::0;;;:10:::2;:18;::::0;-1:-1:-1;;;;;;;;;;;39429:71:0;;;;:18;39540:32;-1:-1:-1;;;;;39540:11:0;::::2;::::0;39560:6;;39540:32:::2;::::0;::::2;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39521:51;;;39591:7;39583:42;;;;-1:-1:-1::0;;;39583:42:0::2;;;;;;;:::i;:::-;39643:41;::::0;-1:-1:-1;;;;;39643:41:0;::::2;::::0;39669:6;;33283:42:::2;::::0;39643:41:::2;::::0;;;::::2;-1:-1:-1::0;;22981:1:0::1;23933:7;:22:::0;-1:-1:-1;39023:669:0:o;41952:490::-;42198:12;-1:-1:-1;;;;;42185:33:0;;42219:12;:10;:12::i;:::-;42241:4;42248:19;;42269:20;;;;42291:21;;;;;;;;:::i;:::-;42314:15;;;;;;;;:::i;:::-;42331:13;:15;;;42348:13;:15;;;42185:179;;;;;;;;;;;;;;;;;;;;;;:::i;7387:567::-;7449:19;7504:2;7485:8;:21;;;;:55;;;7510:30;7529:10;7510:18;:30::i;:::-;7481:466;;;-1:-1:-1;;;7851:14:0;7847:22;7834:36;7831:2;7827:44;7801:85;;;-1:-1:-1;7925:10:0;7918:17;;18467:205;18568:96;18588:5;18618:27;;;18647:4;18653:2;18657:5;18595:68;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;18595:68:0;;;;;;;;;;;;;;-1:-1:-1;;;;;18595:68:0;-1:-1:-1;;;;;;18595:68:0;;;;;;;;;;18568:19;:96::i;:::-;18467:205;;;;:::o;910:181::-;968:7;1000:5;;;1024:6;;;;1016:46;;;;-1:-1:-1;;;1016:46:0;;;;;;;:::i;:::-;1082:1;910:181;-1:-1:-1;;;910:181:0:o;27034:::-;-1:-1:-1;;;;;27104:23:0;;27096:32;;;;;;27158:7;;27144:33;;-1:-1:-1;;;;;27144:33:0;;;;27158:7;;27144:33;;27158:7;;27144:33;27188:7;:19;;-1:-1:-1;;;;;;27188:19:0;-1:-1:-1;;;;;27188:19:0;;;;;;;;;;27034:181::o;1374:136::-;1432:7;1459:43;1463:1;1466;1459:43;;;;;;;;;;;;;;;;;:3;:43::i;18282:177::-;18365:86;18385:5;18415:23;;;18440:2;18444:5;18392:58;;;;;;;;;:::i;18365:86::-;18282:177;;;:::o;2264:471::-;2322:7;2567:6;2563:47;;-1:-1:-1;2597:1:0;2590:8;;2563:47;2634:5;;;2638:1;2634;:5;:1;2658:5;;;;;:10;2650:56;;;;-1:-1:-1;;;2650:56:0;;;;;;;:::i;3211:132::-;3269:7;3296:39;3300:1;3303;3296:39;;;;;;;;;;;;;;;;;:3;:39::i;30017:187::-;-1:-1:-1;;;;;30091:22:0;;30083:31;;;;;;30151:6;;30130:38;;-1:-1:-1;;;;;30130:38:0;;;;30151:6;;30130:38;;30151:6;;30130:38;30179:6;:17;;-1:-1:-1;;;;;;30179:17:0;-1:-1:-1;;;;;30179:17:0;;;;;;;;;;30017:187::o;20587:761::-;21011:23;21037:69;21065:4;21037:69;;;;;;;;;;;;;;;;;21045:5;-1:-1:-1;;;;;21037:27:0;;;:69;;;;;:::i;:::-;21121:17;;21011:95;;-1:-1:-1;21121:21:0;21117:224;;21263:10;21252:30;;;;;;;;;;;;:::i;:::-;21244:85;;;;-1:-1:-1;;;21244:85:0;;;;;;;:::i;1813:192::-;1899:7;1935:12;1927:6;;;;1919:29;;;;-1:-1:-1;;;1919:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;1971:5:0;;;1813:192::o;3839:278::-;3925:7;3960:12;3953:5;3945:28;;;;-1:-1:-1;;;3945:28:0;;;;;;;;:::i;:::-;;3984:9;4000:1;3996;:5;;;;;;;3839:278;-1:-1:-1;;;;;3839:278:0:o;14347:195::-;14450:12;14482:52;14504:6;14512:4;14518:1;14521:12;14482:21;:52::i;:::-;14475:59;14347:195;-1:-1:-1;;;;14347:195:0:o;15399:530::-;15526:12;15584:5;15559:21;:30;;15551:81;;;;-1:-1:-1;;;15551:81:0;;;;;;;:::i;:::-;15651:18;15662:6;15651:10;:18::i;:::-;15643:60;;;;-1:-1:-1;;;15643:60:0;;;;;;;:::i;:::-;15777:12;15791:23;15818:6;-1:-1:-1;;;;;15818:11:0;15838:5;15846:4;15818:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15776:75;;;;15869:52;15887:7;15896:10;15908:12;15869:17;:52::i;:::-;15862:59;15399:530;-1:-1:-1;;;;;;;15399:530:0:o;11429:422::-;11796:20;11835:8;;;11429:422::o;16935:742::-;17050:12;17079:7;17075:595;;;-1:-1:-1;17110:10:0;17103:17;;17075:595;17224:17;;:21;17220:439;;17487:10;17481:17;17548:15;17535:10;17531:2;17527:19;17520:44;17435:148;17630:12;17623:20;;-1:-1:-1;;;17623:20:0;;;;;;;;:::i;14:694:1:-;;111:3;104:4;96:6;92:17;88:27;78:2;;133:5;126;119:20;78:2;173:6;160:20;199:18;236:2;232;229:10;226:2;;;242:9;226:2;282;276:9;351:2;332:13;;-1:-1:-1;;328:27:1;316:40;;358:4;312:51;378:18;;;398:22;;;375:46;372:2;;;424:9;372:2;451;444:22;475:18;;;512:15;;;529:4;508:26;505:35;-1:-1:-1;502:2:1;;;557:5;550;543:20;502:2;625;618:4;610:6;606:17;599:4;591:6;587:17;574:54;648:15;;;665:4;644:26;637:41;;;;652:6;68:640;-1:-1:-1;;;68:640:1:o;713:259::-;;825:2;813:9;804:7;800:23;796:32;793:2;;;846:6;838;831:22;793:2;890:9;877:23;909:33;936:5;909:33;:::i;977:402::-;;;1106:2;1094:9;1085:7;1081:23;1077:32;1074:2;;;1127:6;1119;1112:22;1074:2;1171:9;1158:23;1190:33;1217:5;1190:33;:::i;:::-;1242:5;-1:-1:-1;1299:2:1;1284:18;;1271:32;1312:35;1271:32;1312:35;:::i;:::-;1366:7;1356:17;;;1064:315;;;;;:::o;1384:539::-;;;;;1547:3;1535:9;1526:7;1522:23;1518:33;1515:2;;;1569:6;1561;1554:22;1515:2;1613:9;1600:23;1632:33;1659:5;1632:33;:::i;:::-;1684:5;-1:-1:-1;1741:2:1;1726:18;;1713:32;1754:35;1713:32;1754:35;:::i;:::-;1505:418;;1808:7;;-1:-1:-1;;;;1862:2:1;1847:18;;1834:32;;1913:2;1898:18;1885:32;;1505:418::o;1928:714::-;;;;;;2132:9;2123:7;2119:23;2162:3;2158:2;2154:12;2151:2;;;2184:6;2176;2169:22;2151:2;2228:9;2215:23;2247:33;2274:5;2247:33;:::i;:::-;2299:5;-1:-1:-1;2356:2:1;2341:18;;2328:32;2369:35;2328:32;2369:35;:::i;:::-;2423:7;-1:-1:-1;2477:2:1;2462:18;;2449:32;;-1:-1:-1;2528:2:1;2513:18;;2500:32;;-1:-1:-1;2567:3:1;-1:-1:-1;;2548:17:1;;2544:27;2541:2;;;2589:6;2581;2574:22;2541:2;;2632:3;2621:9;2617:19;2607:29;;2099:543;;;;;;;;:::o;2647:327::-;;;2776:2;2764:9;2755:7;2751:23;2747:32;2744:2;;;2797:6;2789;2782:22;2744:2;2841:9;2828:23;2860:33;2887:5;2860:33;:::i;:::-;2912:5;2964:2;2949:18;;;;2936:32;;-1:-1:-1;;;2734:240:1:o;2979:699::-;;;;;3159:3;3147:9;3138:7;3134:23;3130:33;3127:2;;;3181:6;3173;3166:22;3127:2;3225:9;3212:23;3244:33;3271:5;3244:33;:::i;:::-;3296:5;-1:-1:-1;3348:2:1;3333:18;;3320:32;;-1:-1:-1;3404:2:1;3389:18;;3376:32;3417:35;3376:32;3417:35;:::i;:::-;3471:7;-1:-1:-1;3529:2:1;3514:18;;3501:32;3556:18;3545:30;;3542:2;;;3593:6;3585;3578:22;3542:2;3621:51;3664:7;3655:6;3644:9;3640:22;3621:51;:::i;:::-;3611:61;;;3117:561;;;;;;;:::o;3683:768::-;;;;;;3880:3;3868:9;3859:7;3855:23;3851:33;3848:2;;;3902:6;3894;3887:22;3848:2;3946:9;3933:23;3965:33;3992:5;3965:33;:::i;:::-;4017:5;-1:-1:-1;4069:2:1;4054:18;;4041:32;;-1:-1:-1;4125:2:1;4110:18;;4097:32;4138:35;4097:32;4138:35;:::i;:::-;4192:7;-1:-1:-1;4250:2:1;4235:18;;4222:32;4277:18;4266:30;;4263:2;;;4314:6;4306;4299:22;4263:2;4342:51;4385:7;4376:6;4365:9;4361:22;4342:51;:::i;:::-;3838:613;;;;-1:-1:-1;3838:613:1;;4440:3;4425:19;4412:33;;3838:613;-1:-1:-1;;;3838:613:1:o;4456:395::-;;;;4602:2;4590:9;4581:7;4577:23;4573:32;4570:2;;;4623:6;4615;4608:22;4570:2;4667:9;4654:23;4686:33;4713:5;4686:33;:::i;:::-;4738:5;4790:2;4775:18;;4762:32;;-1:-1:-1;4841:2:1;4826:18;;;4813:32;;4560:291;-1:-1:-1;;;4560:291:1:o;4856:253::-;;4965:2;4953:9;4944:7;4940:23;4936:32;4933:2;;;4986:6;4978;4971:22;4933:2;5030:9;5017:23;5049:30;5073:5;5049:30;:::i;5114:257::-;;5234:2;5222:9;5213:7;5209:23;5205:32;5202:2;;;5255:6;5247;5240:22;5202:2;5292:9;5286:16;5311:30;5335:5;5311:30;:::i;5376:190::-;;5488:2;5476:9;5467:7;5463:23;5459:32;5456:2;;;5509:6;5501;5494:22;5456:2;-1:-1:-1;5537:23:1;;5446:120;-1:-1:-1;5446:120:1:o;5571:321::-;;5683:2;5671:9;5662:7;5658:23;5654:32;5651:2;;;5704:6;5696;5689:22;5651:2;5748:9;5735:23;-1:-1:-1;;;;;5791:5:1;5787:46;5780:5;5777:57;5767:2;;5853:6;5845;5838:22;6092:194;;6215:2;6203:9;6194:7;6190:23;6186:32;6183:2;;;6236:6;6228;6221:22;6183:2;-1:-1:-1;6264:16:1;;6173:113;-1:-1:-1;6173:113:1:o;6291:289::-;;6401:2;6389:9;6380:7;6376:23;6372:32;6369:2;;;6422:6;6414;6407:22;6369:2;6466:9;6453:23;6516:4;6509:5;6505:16;6498:5;6495:27;6485:2;;6541:6;6533;6526:22;6585:259;;6666:5;6660:12;6693:6;6688:3;6681:19;6709:63;6765:6;6758:4;6753:3;6749:14;6742:4;6735:5;6731:16;6709:63;:::i;:::-;6826:2;6805:15;-1:-1:-1;;6801:29:1;6792:39;;;;6833:4;6788:50;;6636:208;-1:-1:-1;;6636:208:1:o;6849:274::-;;7016:6;7010:13;7032:53;7078:6;7073:3;7066:4;7058:6;7054:17;7032:53;:::i;:::-;7101:16;;;;;6986:137;-1:-1:-1;;6986:137:1:o;7338:203::-;-1:-1:-1;;;;;7502:32:1;;;;7484:51;;7472:2;7457:18;;7439:102::o;7762:760::-;-1:-1:-1;;;;;8159:15:1;;;8141:34;;8211:15;;;;8206:2;8191:18;;8184:43;8258:2;8243:18;;8236:34;;;;8301:2;8286:18;;8279:34;;;;8357:14;8350:22;8344:3;8329:19;;8322:51;8422:4;8410:17;8121:3;8389:19;;8382:46;8459:3;8444:19;;8437:35;8503:3;8488:19;;8481:35;;;;8090:3;8075:19;;8057:465::o;8527:678::-;-1:-1:-1;;;;;8902:15:1;;;8884:34;;8954:15;;;;8949:2;8934:18;;8927:43;9001:2;8986:18;;8979:34;;;;9044:2;9029:18;;9022:34;;;;9105:4;9093:17;9087:3;9072:19;;9065:46;8864:3;9127:19;;9120:35;9186:3;9171:19;;9164:35;;;;8833:3;8818:19;;8800:405::o;9210:324::-;-1:-1:-1;;;;;9393:32:1;;9375:51;;9462:2;9457;9442:18;;9435:30;;;9210:324;;9482:46;;9509:18;;9501:6;9482:46;:::i;9539:375::-;-1:-1:-1;;;;;9797:15:1;;;9779:34;;9849:15;;;;9844:2;9829:18;;9822:43;9896:2;9881:18;;9874:34;;;;9729:2;9714:18;;9696:218::o;9919:274::-;-1:-1:-1;;;;;10111:32:1;;;;10093:51;;10175:2;10160:18;;10153:34;10081:2;10066:18;;10048:145::o;10198:463::-;-1:-1:-1;;;;;10501:15:1;;;10483:34;;10548:2;10533:18;;10526:34;;;;10596:15;;10591:2;10576:18;;10569:43;10643:2;10628:18;;10621:34;;;;10432:3;10417:19;;10399:262::o;10666:187::-;10831:14;;10824:22;10806:41;;10794:2;10779:18;;10761:92::o;10858:258::-;11026:25;;;11094:14;11087:22;11082:2;11067:18;;11060:50;11014:2;10999:18;;10981:135::o;11121:221::-;;11270:2;11259:9;11252:21;11290:46;11332:2;11321:9;11317:18;11309:6;11290:46;:::i;11347:344::-;11549:2;11531:21;;;11588:2;11568:18;;;11561:30;-1:-1:-1;;;11622:2:1;11607:18;;11600:50;11682:2;11667:18;;11521:170::o;11696:345::-;11898:2;11880:21;;;11937:2;11917:18;;;11910:30;-1:-1:-1;;;11971:2:1;11956:18;;11949:51;12032:2;12017:18;;11870:171::o;12046:400::-;12248:2;12230:21;;;12287:2;12267:18;;;12260:30;12326:34;12321:2;12306:18;;12299:62;-1:-1:-1;;;12392:2:1;12377:18;;12370:34;12436:3;12421:19;;12220:226::o;12451:351::-;12653:2;12635:21;;;12692:2;12672:18;;;12665:30;12731:29;12726:2;12711:18;;12704:57;12793:2;12778:18;;12625:177::o;12807:349::-;13009:2;12991:21;;;13048:2;13028:18;;;13021:30;13087:27;13082:2;13067:18;;13060:55;13147:2;13132:18;;12981:175::o;13161:342::-;13363:2;13345:21;;;13402:2;13382:18;;;13375:30;-1:-1:-1;;;13436:2:1;13421:18;;13414:48;13494:2;13479:18;;13335:168::o;13508:414::-;13710:2;13692:21;;;13749:2;13729:18;;;13722:30;13788:34;13783:2;13768:18;;13761:62;-1:-1:-1;;;13854:2:1;13839:18;;13832:48;13912:3;13897:19;;13682:240::o;13927:352::-;14129:2;14111:21;;;14168:2;14148:18;;;14141:30;14207;14202:2;14187:18;;14180:58;14270:2;14255:18;;14101:178::o;14284:402::-;14486:2;14468:21;;;14525:2;14505:18;;;14498:30;14564:34;14559:2;14544:18;;14537:62;-1:-1:-1;;;14630:2:1;14615:18;;14608:36;14676:3;14661:19;;14458:228::o;14691:409::-;14893:2;14875:21;;;14932:2;14912:18;;;14905:30;14971:34;14966:2;14951:18;;14944:62;-1:-1:-1;;;15037:2:1;15022:18;;15015:43;15090:3;15075:19;;14865:235::o;15105:342::-;15307:2;15289:21;;;15346:2;15326:18;;;15319:30;-1:-1:-1;;;15380:2:1;15365:18;;15358:48;15438:2;15423:18;;15279:168::o;15452:340::-;15654:2;15636:21;;;15693:2;15673:18;;;15666:30;-1:-1:-1;;;15727:2:1;15712:18;;15705:46;15783:2;15768:18;;15626:166::o;15797:413::-;15999:2;15981:21;;;16038:2;16018:18;;;16011:30;16077:34;16072:2;16057:18;;16050:62;-1:-1:-1;;;16143:2:1;16128:18;;16121:47;16200:3;16185:19;;15971:239::o;16215:415::-;16417:2;16399:21;;;16456:2;16436:18;;;16429:30;16495:34;16490:2;16475:18;;16468:62;-1:-1:-1;;;16561:2:1;16546:18;;16539:49;16620:3;16605:19;;16389:241::o;16635:344::-;16837:2;16819:21;;;16876:2;16856:18;;;16849:30;-1:-1:-1;;;16910:2:1;16895:18;;16888:50;16970:2;16955:18;;16809:170::o;16984:342::-;17186:2;17168:21;;;17225:2;17205:18;;;17198:30;-1:-1:-1;;;17259:2:1;17244:18;;17237:48;17317:2;17302:18;;17158:168::o;17331:397::-;17533:2;17515:21;;;17572:2;17552:18;;;17545:30;17611:34;17606:2;17591:18;;17584:62;-1:-1:-1;;;17677:2:1;17662:18;;17655:31;17718:3;17703:19;;17505:223::o;17733:352::-;17935:2;17917:21;;;17974:2;17954:18;;;17947:30;18013;18008:2;17993:18;;17986:58;18076:2;18061:18;;17907:178::o;18090:342::-;18292:2;18274:21;;;18331:2;18311:18;;;18304:30;-1:-1:-1;;;18365:2:1;18350:18;;18343:48;18423:2;18408:18;;18264:168::o;18437:343::-;18639:2;18621:21;;;18678:2;18658:18;;;18651:30;-1:-1:-1;;;18712:2:1;18697:18;;18690:49;18771:2;18756:18;;18611:169::o;18785:420::-;18987:2;18969:21;;;19026:2;19006:18;;;18999:30;19065:34;19060:2;19045:18;;19038:62;19136:26;19131:2;19116:18;;19109:54;19195:3;19180:19;;18959:246::o;19210:346::-;19412:2;19394:21;;;19451:2;19431:18;;;19424:30;-1:-1:-1;;;19485:2:1;19470:18;;19463:52;19547:2;19532:18;;19384:172::o;19561:353::-;19763:2;19745:21;;;19802:2;19782:18;;;19775:30;19841:31;19836:2;19821:18;;19814:59;19905:2;19890:18;;19735:179::o;19919:410::-;20121:2;20103:21;;;20160:2;20140:18;;;20133:30;20199:34;20194:2;20179:18;;20172:62;-1:-1:-1;;;20265:2:1;20250:18;;20243:44;20319:3;20304:19;;20093:236::o;20334:349::-;20536:2;20518:21;;;20575:2;20555:18;;;20548:30;20614:27;20609:2;20594:18;;20587:55;20674:2;20659:18;;20508:175::o;20688:406::-;20890:2;20872:21;;;20929:2;20909:18;;;20902:30;20968:34;20963:2;20948:18;;20941:62;-1:-1:-1;;;21034:2:1;21019:18;;21012:40;21084:3;21069:19;;20862:232::o;21099:355::-;21301:2;21283:21;;;21340:2;21320:18;;;21313:30;21379:33;21374:2;21359:18;;21352:61;21445:2;21430:18;;21273:181::o;21459:341::-;21661:2;21643:21;;;21700:2;21680:18;;;21673:30;-1:-1:-1;;;21734:2:1;21719:18;;21712:47;21791:2;21776:18;;21633:167::o;21805:412::-;22007:2;21989:21;;;22046:2;22026:18;;;22019:30;22085:34;22080:2;22065:18;;22058:62;-1:-1:-1;;;22151:2:1;22136:18;;22129:46;22207:3;22192:19;;21979:238::o;22222:353::-;22424:2;22406:21;;;22463:2;22443:18;;;22436:30;22502:31;22497:2;22482:18;;22475:59;22566:2;22551:18;;22396:179::o;22580:177::-;22726:25;;;22714:2;22699:18;;22681:76::o;22762:473::-;23015:25;;;23083:14;;23076:22;23071:2;23056:18;;23049:50;23130:2;23115:18;;23108:34;;;;23173:2;23158:18;;23151:34;23216:3;23201:19;;23194:35;23002:3;22987:19;;22969:266::o;23240:248::-;23414:25;;;23470:2;23455:18;;23448:34;23402:2;23387:18;;23369:119::o;23493:258::-;23565:1;23575:113;23589:6;23586:1;23583:13;23575:113;;;23665:11;;;23659:18;23646:11;;;23639:39;23611:2;23604:10;23575:113;;;23706:6;23703:1;23700:13;23697:2;;;-1:-1:-1;;23741:1:1;23723:16;;23716:27;23546:205::o;23756:133::-;-1:-1:-1;;;;;23833:31:1;;23823:42;;23813:2;;23879:1;23876;23869:12;23894:120;23982:5;23975:13;23968:21;23961:5;23958:32;23948:2;;24004:1;24001;23994:12
Swarm Source
ipfs://a95dcaf41d41f0325e42f9e9dfa6a7b0d5032c8b64329c793ee10b519f78279a
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.