Contract 0xa14EEefa753a166a5651bce7B84094f614Df0D05

 
Txn Hash
Method
Block
From
To
Value
0xca5ea946e166da3ff7d96d8b766179719b6f71db43f0ceda811da087e2e63662Renounce Ownersh...126509082021-06-17 8:33:27472 days 47 mins ago0xa0863436913b1b439ccaa6fbf89408116c1dde29 IN  Zapper.Fi: Bancor Add0 Ether0.0003953414
0x5f9c3a30816825ba4a45db4c08831b612ba33e4bb96020ecca2da7c8b4d18bfbToggle Contract ...124959872021-05-24 8:44:19496 days 36 mins ago0xa0863436913b1b439ccaa6fbf89408116c1dde29 IN  Zapper.Fi: Bancor Add0 Ether0.0016451762
0x020696569dafce9d24531a32dd8646d8bd22458438cfe20f36c2991f723e3cd4Zap In Single Si...123119712021-04-25 21:51:04524 days 11 hrs ago0x1520941c3257d4c9ccb1ff783250458dda71980d IN  Zapper.Fi: Bancor Add0 Ether0.0582669481
0xc6ec1a45763626b64f8ded394491a4261264b33370244677937eebf5b281091eZap In Single Si...122981212021-04-23 18:31:31526 days 14 hrs ago0x9238dcfb75ce314338e8884a438f69f2cb1e12f7 IN  Zapper.Fi: Bancor Add0 Ether0.0687324378
0xeccca3c2bc4928bc8361f92ea501786472bcdc122971a0f24696f44535654c12Zap In Single Si...122980902021-04-23 18:23:40526 days 14 hrs ago0x9238dcfb75ce314338e8884a438f69f2cb1e12f7 IN  Zapper.Fi: Bancor Add0 Ether0.0482771673
0x774d42ffdcce9756b418aa756772485c5c738911eed171760e058e513137a230Zap In Single Si...122544002021-04-17 0:33:20533 days 8 hrs ago0x7ba7f4773fa7890bad57879f0a1faa0edffb3520 IN  Zapper.Fi: Bancor Add0 Ether0.16492465155
0x4c13b0b0b91e6b9f06f75f4db278da838560160c96a65819561db42bf18cfdbaZap In Single Si...122542712021-04-17 0:04:32533 days 9 hrs ago0x7ba7f4773fa7890bad57879f0a1faa0edffb3520 IN  Zapper.Fi: Bancor Add0 Ether0.10226441123
0xe51e6846629717278dbbce06b6e33071feed4949915d48e72891f505d1c5c0bcZap In Single Si...122542622021-04-17 0:02:47533 days 9 hrs ago0x7ba7f4773fa7890bad57879f0a1faa0edffb3520 IN  Zapper.Fi: Bancor Add0 Ether0.08270229124
0xb7ca1aac764b446a460d0bf420ff19da9064cf0bbaeb65c6700aa0f073c67302Zap In Single Si...122542622021-04-17 0:02:47533 days 9 hrs ago0x7ba7f4773fa7890bad57879f0a1faa0edffb3520 IN  Zapper.Fi: Bancor Add20 Ether0.11394666119
0x9982e27dabdb8077f6f8402725b1c7b6f6718b204d0941c6bd7b54e96c9b5d58Zap In Single Si...122214972021-04-11 22:39:12538 days 10 hrs ago0x1f4d4cbd6915b306e5e14812742a79cb780180dc IN  Zapper.Fi: Bancor Add0 Ether0.07074181102.2
0x98c0f9951b40db6e8a0a81c2263c9df03d296b954459667bf5858676cf8bf1c9Zap In Single Si...122082362021-04-09 22:04:52540 days 11 hrs ago0x7ba7f4773fa7890bad57879f0a1faa0edffb3520 IN  Zapper.Fi: Bancor Add200 Ether0.0760789492
0x2e8d979a6fbefff72b8bfd7cc47f4326b5a9a0f60f11f83edd15a838445c2fdfZap In Single Si...122082202021-04-09 22:01:42540 days 11 hrs ago0x7ba7f4773fa7890bad57879f0a1faa0edffb3520 IN  Zapper.Fi: Bancor Add50 Ether0.09176289113
0x3767e4aaa1d57a53b34fb09f6a72ba7bfb9b71afac23a0ea4ddfd5715baa1fefZap In Single Si...121901072021-04-07 2:54:14543 days 6 hrs ago0x7ba7f4773fa7890bad57879f0a1faa0edffb3520 IN  Zapper.Fi: Bancor Add0 Ether0.06182451103.00000145
0x2e93f7febb86a40bfdc987d63ef5b65ab0b492201614854ef1694a347ad8af2aZap In Single Si...121900992021-04-07 2:53:19543 days 6 hrs ago0x7ba7f4773fa7890bad57879f0a1faa0edffb3520 IN  Zapper.Fi: Bancor Add0 Ether0.06366136106.3726375
0xbc319e27ef7430838434b01bf9eae946f7ef3234c0cc431e16bad9e638546808Zap In Single Si...121896212021-04-07 1:12:45543 days 8 hrs ago0x7ba7f4773fa7890bad57879f0a1faa0edffb3520 IN  Zapper.Fi: Bancor Add400 Ether0.13112584177
0x46e6e15cc02a25d09cf54606decfc7248659c8ead70c2dba2eb20bf9f7e6018eZap In Single Si...121883342021-04-06 20:23:18543 days 12 hrs ago0xe746f87c7f3c55b48fc8570c5126db680eeab078 IN  Zapper.Fi: Bancor Add0 Ether0.12783384141
0xacd891583004591f033bd27b52aaf289d7b6c1a5bccbb1845de5770745d6ecf5Zap In Single Si...121461452021-03-31 8:51:25550 days 29 mins agoENS Name flinstones.eth IN  Zapper.Fi: Bancor Add0 Ether0.160215200.00000145
0x94a305875ab182a58ae4a79bfb856665526e1653ebaa35660ee9c07253b21cc2Zap In Single Si...121443482021-03-31 2:10:43550 days 7 hrs agoENS Name mroberts.eth IN  Zapper.Fi: Bancor Add0 Ether0.09405538131
0x9d26bb03de2d5e2201245e2e4b74d56565b0a330721aa5d699483255f30bec58Zap In Single Si...121131122021-03-26 6:51:34555 days 2 hrs ago0x709a48f9f4b786cae1de8e438263bdf4fdebb8a6 IN  Zapper.Fi: Bancor Add0 Ether0.09074527110
0x7fd70d98fa1982611f9b16d7e78604b13ffa156e031e5cf88da155774793ff4aZap In Single Si...120949572021-03-23 11:50:34557 days 21 hrs ago0x788550d00579f66c06ce209d14056c8f2c0a8188 IN  Zapper.Fi: Bancor Add0 Ether0.0915722115
0x0d34d674c1f01ade9f0d44acb25b5190144b6817cd0832f3cfeea8241a88c249Zap In Single Si...120751062021-03-20 10:20:08560 days 23 hrs ago0x6b1c399881a3dc598875a22fa313aa1df8aeb692 IN  Zapper.Fi: Bancor Add0 Ether0.08670736108
0xd0d469a465ded81e60700bb4f4c25a343453223d008e13d4c5d35942d5cb20f7Zap In Single Si...120726792021-03-20 1:24:30561 days 7 hrs ago0x45be454c5a0b767a38e808280c308f8a7ca4d0ab IN  Zapper.Fi: Bancor Add0 Ether0.10490121135
0x7744e0f31fa99522d592a3e0eb73e43abdcf7b7442e0ec844c05d503e204c683Zap In Single Si...120720222021-03-19 22:59:42561 days 10 hrs ago0x45be454c5a0b767a38e808280c308f8a7ca4d0ab IN  Zapper.Fi: Bancor Add0 Ether0.10575584115
0x674a772dc5acc57c43b406a5efee39d716649b36c8a70106fd652f418a04e85eZap In Single Si...120709572021-03-19 18:52:44561 days 14 hrs agoENS Name flinstones.eth IN  Zapper.Fi: Bancor Add12 Ether0.13443008146
0x7b06a936f1ddff5a280549367b4f0d942f7b07fec4af3a27c1479e4040a20d84Zap In Single Si...120569612021-03-17 15:22:32563 days 17 hrs agoENS Name flinstones.eth IN  Zapper.Fi: Bancor Add0 Ether0.21868371210.00000145
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xb7ca1aac764b446a460d0bf420ff19da9064cf0bbaeb65c6700aa0f073c67302122542622021-04-17 0:02:47533 days 9 hrs ago Zapper.Fi: Bancor Add 0x: Exchange Proxy20 Ether
0x98c0f9951b40db6e8a0a81c2263c9df03d296b954459667bf5858676cf8bf1c9122082362021-04-09 22:04:52540 days 11 hrs ago Zapper.Fi: Bancor Add 0x: Exchange Proxy200 Ether
0x2e8d979a6fbefff72b8bfd7cc47f4326b5a9a0f60f11f83edd15a838445c2fdf122082202021-04-09 22:01:42540 days 11 hrs ago Zapper.Fi: Bancor Add 0x: Exchange Proxy50 Ether
0xbc319e27ef7430838434b01bf9eae946f7ef3234c0cc431e16bad9e638546808121896212021-04-07 1:12:45543 days 8 hrs ago Zapper.Fi: Bancor Add Bancor: Protected Liquidity400 Ether
0x674a772dc5acc57c43b406a5efee39d716649b36c8a70106fd652f418a04e85e120709572021-03-19 18:52:44561 days 14 hrs ago Zapper.Fi: Bancor Add 0x: Exchange Proxy12 Ether
0x7c205286850387e5b3c3eb54ea1d708fdb230b76683286ff07c103bf24777bf3120492022021-03-16 10:52:50564 days 22 hrs ago Zapper.Fi: Bancor Add 0x: Exchange Proxy17 Ether
0xbe318adec2704225ae0a66744f50d478f9d54122bbe9021296bf7358989deb9f120374472021-03-14 15:15:21566 days 18 hrs ago Zapper.Fi: Bancor Add 0x: Exchange Proxy2.4 Ether
0xb2f803a8b64a0fa20be72fe9e7e0a574f2b4f5317525b175c2c32da5fcdfa1f3119890632021-03-07 3:54:52574 days 5 hrs ago Zapper.Fi: Bancor Add 0x: Exchange Proxy2 Ether
0x7670e5b2e9458123469a6a3f73edda82d631188f58dc8ab4800d18a9c25fb5e4119749592021-03-05 0:10:10576 days 9 hrs ago Zapper.Fi: Bancor Add 0x: Exchange Proxy25 Ether
0x0b9d37b5ffc71c6c3dfe4f05a7917bf3d07f4770ca32de4167deaf0f6d86e0aa119744232021-03-04 22:11:54576 days 11 hrs ago Zapper.Fi: Bancor Add 0x: Exchange Proxy3.2 Ether
0x344a77be84047e268cadc2ec5b0dea9c9a05d1c7512445ab01e086739fb8a12a119730812021-03-04 17:12:01576 days 16 hrs ago Zapper.Fi: Bancor Add 0x: Exchange Proxy10 Ether
0x8746d2974840f0cb910c0e42b116ab287bf3b537670dc42320153a63b5bedf0d119687942021-03-04 1:24:29577 days 7 hrs ago Zapper.Fi: Bancor Add 0x: Exchange Proxy1 Ether
0x9408fa40c0aeef9e5ba79701a9d7332552d7e6a92b19e879741419eeb6214f94119663282021-03-03 16:13:27577 days 17 hrs ago Zapper.Fi: Bancor Add 0x: Exchange Proxy22 Ether
0xc68a0298e5f1bf2adee3a2601c867be56c81a91ef980c578cd94b42c236591ad119603392021-03-02 17:57:41578 days 15 hrs ago Zapper.Fi: Bancor Add 0x: Exchange Proxy1 Ether
0xceb8c982c174efd656354b29e05e986d5f8b9c31c2b96f2f95cd27795a02af19119572742021-03-02 6:48:12579 days 2 hrs ago Zapper.Fi: Bancor Add 0x: Exchange Proxy15 Ether
0x19120ae6e89b40697fbaef77dd3b05a1f36465a53009012cbea513b9d009f50c119544532021-03-01 20:20:51579 days 12 hrs ago Zapper.Fi: Bancor Add 0x: Exchange Proxy3 Ether
0x16b9a4c16e764ec04f9bd5e2b327703fb414324f2b96e44c89ee2b1ab621dfde119503862021-03-01 5:14:14580 days 4 hrs ago Zapper.Fi: Bancor Add Bancor: Protected Liquidity2.5 Ether
0xacc649a14442099da0a0a5179e9d687e6502db0e3c197e46ee724535d73e2b6a118775962021-02-18 0:28:37591 days 8 hrs ago Zapper.Fi: Bancor Add 0x: Exchange Proxy0.6 Ether
0x403e63fe83f0a8390763c7e52b30f74ee66b21a97653d7f7b1ffbfa330b6c9b1118753912021-02-17 16:19:39591 days 17 hrs ago Zapper.Fi: Bancor Add 0x: Exchange Proxy1 Ether
0x9cb63bc66ceb046a509c36b52b243a5893bde5cbcf273196fd787c89ff2c1bdd118752412021-02-17 15:47:48591 days 17 hrs ago Zapper.Fi: Bancor Add 0x: Exchange Proxy1.1 Ether
0xd0afeb14730e61babff1b6730f92c2e4a42293c14e954ef8263b4f6860d6bd61118405062021-02-12 7:44:05597 days 1 hr ago Zapper.Fi: Bancor Add Bancor: Protected Liquidity4 Ether
0x531094e5c638d5dac23f9dc5f560d2bdc5787cd61a86f93ac560a108479ba11e117590162021-01-30 18:56:08609 days 14 hrs ago Zapper.Fi: Bancor Add 0x: Exchange Proxy0.85 Ether
0x18c4d154060a631c0f9d66e1d839422f83df4e52b75ab7f14bf39ab76b2399ed117590152021-01-30 18:56:00609 days 14 hrs ago Zapper.Fi: Bancor Add 0x: Exchange Proxy0.85 Ether
0xa9cb0403c3e372cb810e9a7d2c0a6cc83139e790676abd7e3179b0c0232bb7ed117473232021-01-28 23:30:38611 days 9 hrs ago Zapper.Fi: Bancor Add 0x9ab934010e6f2d633feeb5b6f1ddceeded601bcf2 Ether
0x9e894695234a47554a58b354f8c92525504cca30ef83e27eedc7d2b844e5cbf4117251312021-01-25 13:25:39614 days 19 hrs ago Zapper.Fi: Bancor Add 0x: Exchange Proxy1.2 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BancorV2_ZapIn_General_V2_1

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv2 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-12-15
*/

// ███████╗░█████╗░██████╗░██████╗░███████╗██████╗░░░░███████╗██╗
// ╚════██║██╔══██╗██╔══██╗██╔══██╗██╔════╝██╔══██╗░░░██╔════╝██║
// ░░███╔═╝███████║██████╔╝██████╔╝█████╗░░██████╔╝░░░█████╗░░██║
// ██╔══╝░░██╔══██║██╔═══╝░██╔═══╝░██╔══╝░░██╔══██╗░░░██╔══╝░░██║
// ███████╗██║░░██║██║░░░░░██║░░░░░███████╗██║░░██║██╗██║░░░░░██║
// ╚══════╝╚═╝░░╚═╝╚═╝░░░░░╚═╝░░░░░╚══════╝╚═╝░░╚═╝╚═╝╚═╝░░░░░╚═╝
// Copyright (C) 2020 zapper

// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//

///@author Zapper
///@notice This contract adds liquidity to BancorV2 Pools using ETH or ERC20 Tokens

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/math/SafeMath.sol

pragma solidity ^0.5.5;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see {ERC20Detailed}.
 */
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
    );
}

/**
 * @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.
     *
     * _Available since v2.4.0._
     */
    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.
     *
     * _Available since v2.4.0._
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        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.
     *
     * _Available since v2.4.0._
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;


            bytes32 accountHash
         = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Converts an `address` into `address payable`. Note that this is
     * simply a type cast: the actual underlying value is not changed.
     *
     * _Available since v2.4.0._
     */
    function toPayable(address account)
        internal
        pure
        returns (address payable)
    {
        return address(uint160(account));
    }

    /**
     * @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].
     *
     * _Available since v2.4.0._
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        // solhint-disable-next-line avoid-call-value
        (bool success, ) = recipient.call.value(amount)("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }
}

/**
 * @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 ERC20;` 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)
        );
    }

    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.

        // A Solidity high level call has three parts:
        //  1. The target address is checked to verify it contains contract code
        //  2. The call itself is made, and success asserted
        //  3. The return value is decoded, which in turn checks the size of the returned data.
        // solhint-disable-next-line max-line-length
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "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"
            );
        }
    }
}

/**
 * @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.
 *
 * _Since v2.5.0:_ this module is now much more gas efficient, given net gas
 * metering changes introduced in the Istanbul hardfork.
 */
contract ReentrancyGuard {
    bool private _notEntered;

    constructor() internal {
        // Storing an initial 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 percetange 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.
        _notEntered = true;
    }

    /**
     * @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(_notEntered, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _notEntered = false;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _notEntered = true;
    }
}

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
contract Context {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    constructor() internal {}

    // solhint-disable-previous-line no-empty-blocks

    function _msgSender() internal view returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address payable public _owner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() internal {
        address payable msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Returns true if the caller is the current owner.
     */
    function isOwner() public view returns (bool) {
        return _msgSender() == _owner;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address payable newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     */
    function _transferOwnership(address payable newOwner) internal {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IBancorV2Converter {
    function anchor() external view returns (address);
}

interface IBancorLiquidityProtection {
    function addLiquidityFor(
        address _owner,
        address _poolAnchor,
        address _reserveToken,
        uint256 _amount
    ) external payable returns (uint256 poolTokenAmount);
}

interface IBancorLiquidityProtectionStore {
    function protectedLiquidity(uint256 _id)
        external
        view
        returns (
            address,
            address,
            address,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        );
}

interface IBancorContractRegistry {
    function addressOf(bytes32 _contractName) external view returns (address);
}

contract BancorV2_ZapIn_General_V2_1 is ReentrancyGuard, Ownable {
    using SafeMath for uint256;
    using Address for address;
    using SafeERC20 for IERC20;

    bool public stopped = false;
    uint16 public goodwill;

    address
        private constant ETHAddress = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
    address
        private constant wethTokenAddress = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address payable
        private constant zgoodwillAddress = 0x3CE37278de6388532C3949ce4e886F365B14fB56;

    bytes32 private constant liquidityProtectionName = "LiquidityProtection";
    bytes32
        private constant liquidityProtectionStoreName = "LiquidityProtectionStore";

    IBancorContractRegistry
        public constant bancorRegistry = IBancorContractRegistry(
        0x52Ae12ABe5D8BD778BD5397F99cA900624CfADD4
    );

    event Zapin(
        address toWhomToIssue,
        address toPoolAnchor,
        uint256 LPTRec,
        uint256 id
    );

    constructor(uint16 _goodwill) public {
        goodwill = _goodwill;
    }

    // circuit breaker modifiers
    modifier stopInEmergency {
        if (stopped) {
            revert("Temporarily Paused");
        } else {
            _;
        }
    }

    /**
    @notice This function is used to add single-sided protected liquidity to BancorV2 Pool
    @dev This function stakes LPT Received so the 
    @param _fromTokenAddress The token used for investment (address(0x00) if ether)
    @param _toBanConverterAddress The address of pool to add liquidity to
    @param _toReserveTokenAddress The Reserve to add liquidity to
    @param _amount The amount of ERC to invest
    @param _allowanceTarget Spender for the swap
    @param _swapTarget Excecution target for the swap
    @param swapData DEX quote data
    @return LPT Received
     */
    function ZapInSingleSided(
        address _fromTokenAddress,
        address _toBanConverterAddress,
        address _toReserveTokenAddress,
        uint256 _amount,
        address _allowanceTarget,
        address _swapTarget,
        bytes calldata swapData
    )
        external
        payable
        nonReentrant
        stopInEmergency
        returns (uint256 lptReceived, uint256 id)
    {
        uint256 valueToSend;
        address tokenToSend;
        address poolAnchor = IBancorV2Converter(_toBanConverterAddress)
            .anchor();

        if (_fromTokenAddress == address(0)) {
            require(msg.value > 0, "ERR: No ETH sent");
            valueToSend = _transferGoodwill(_fromTokenAddress, msg.value);
        } else {
            require(_amount > 0, "Err: No Tokens Sent");
            require(msg.value == 0, "ERR: ETH sent with Token");
            tokenToSend = _fromTokenAddress;
            IERC20(tokenToSend).safeTransferFrom(
                msg.sender,
                address(this),
                _amount
            );
            valueToSend = _transferGoodwill(_fromTokenAddress, _amount);
        }

        if (_fromTokenAddress == _toReserveTokenAddress) {
            (lptReceived, id) = _enterBancor(
                poolAnchor,
                tokenToSend,
                valueToSend
            );
        } else {
            uint256 reserveTokensBought = _fillQuote(
                tokenToSend,
                _toReserveTokenAddress,
                valueToSend,
                _allowanceTarget,
                _swapTarget,
                swapData
            );
            (lptReceived, id) = _enterBancor(
                poolAnchor,
                _toReserveTokenAddress,
                reserveTokensBought
            );
        }
        emit Zapin(msg.sender, poolAnchor, lptReceived, id);
    }

    function _enterBancor(
        address _poolAnchor,
        address _reserveToken,
        uint256 _amount
    ) internal returns (uint256 lptReceived, uint256 id) {
        uint256 valueToSend;
        address reserveToken = _reserveToken;
        address bancorLiquidityProtectionAddress = bancorRegistry.addressOf(
            liquidityProtectionName
        );

        if (_reserveToken != address(0)) {
            IERC20 toReserveToken = IERC20(_reserveToken);
            toReserveToken.safeApprove(bancorLiquidityProtectionAddress, 0);
            toReserveToken.safeApprove(
                bancorLiquidityProtectionAddress,
                _amount
            );
        } else {
            valueToSend = _amount;
            reserveToken = ETHAddress;
        }


            IBancorLiquidityProtection bancorLiquidityProtection
         = IBancorLiquidityProtection(bancorLiquidityProtectionAddress);

        id = bancorLiquidityProtection.addLiquidityFor.value(valueToSend)(
            msg.sender,
            _poolAnchor,
            reserveToken,
            _amount
        );


            IBancorLiquidityProtectionStore liquidityProtectionStore
         = IBancorLiquidityProtectionStore(
            bancorRegistry.addressOf(liquidityProtectionStoreName)
        );

        (, , , lptReceived, , , , ) = liquidityProtectionStore
            .protectedLiquidity(id);
    }

    function _fillQuote(
        address _fromTokenAddress,
        address _toReserveTokenAddress,
        uint256 _amount,
        address _allowanceTarget,
        address _swapTarget,
        bytes memory swapData
    ) internal returns (uint256) {
        uint256 valueToSend;
        if (_fromTokenAddress == address(0)) {
            valueToSend = _amount;
        } else {
            IERC20 fromToken = IERC20(_fromTokenAddress);
            fromToken.safeApprove(address(_allowanceTarget), 0);
            fromToken.safeApprove(address(_allowanceTarget), _amount);
        }

        uint256 initialBalance = _toReserveTokenAddress == address(0)
            ? address(this).balance
            : IERC20(_toReserveTokenAddress).balanceOf(address(this));

        (bool success, ) = _swapTarget.call.value(valueToSend)(swapData);
        require(success, "Error Swapping Tokens");

        uint256 finalBalance = _toReserveTokenAddress == address(0)
            ? (address(this).balance).sub(initialBalance)
            : IERC20(_toReserveTokenAddress).balanceOf(address(this)).sub(
                initialBalance
            );

        require(finalBalance > 0, "Swapped to Invalid Intermediate");

        return finalBalance;
    }

    /**
    @dev This function is used to calculate and transfer goodwill
    @param _tokenContractAddress Token from which goodwill is deducted
    @param valueToSend The total value being zapped in
    @return The quantity of remaining tokens
     */
    function _transferGoodwill(
        address _tokenContractAddress,
        uint256 valueToSend
    ) internal returns (uint256) {
        if (goodwill == 0) return valueToSend;

        uint256 goodwillPortion = SafeMath.div(
            SafeMath.mul(valueToSend, goodwill),
            10000
        );
        if (_tokenContractAddress == address(0)) {
            zgoodwillAddress.transfer(goodwillPortion);
        } else {
            IERC20(_tokenContractAddress).safeTransfer(
                zgoodwillAddress,
                goodwillPortion
            );
        }
        return valueToSend.sub(goodwillPortion);
    }

    function set_new_goodwill(uint16 _new_goodwill) public onlyOwner {
        require(
            _new_goodwill >= 0 && _new_goodwill < 10000,
            "GoodWill Value not allowed"
        );
        goodwill = _new_goodwill;
    }

    function inCaseTokengetsStuck(address _tokenAddress) public onlyOwner {
        IERC20 tokenAddress = IERC20(_tokenAddress);
        uint256 qty = tokenAddress.balanceOf(address(this));
        tokenAddress.safeTransfer(owner(), qty);
    }

    // - to Pause the contract
    function toggleContractActive() public onlyOwner {
        stopped = !stopped;
    }

    // - to withdraw any ETH balance sitting in the contract
    function withdraw() public onlyOwner {
        uint256 contractBalance = address(this).balance;
        address payable _to = owner().toPayable();
        _to.transfer(contractBalance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint16","name":"_goodwill","type":"uint16"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"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":"toWhomToIssue","type":"address"},{"indexed":false,"internalType":"address","name":"toPoolAnchor","type":"address"},{"indexed":false,"internalType":"uint256","name":"LPTRec","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Zapin","type":"event"},{"constant":false,"inputs":[{"internalType":"address","name":"_fromTokenAddress","type":"address"},{"internalType":"address","name":"_toBanConverterAddress","type":"address"},{"internalType":"address","name":"_toReserveTokenAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_allowanceTarget","type":"address"},{"internalType":"address","name":"_swapTarget","type":"address"},{"internalType":"bytes","name":"swapData","type":"bytes"}],"name":"ZapInSingleSided","outputs":[{"internalType":"uint256","name":"lptReceived","type":"uint256"},{"internalType":"uint256","name":"id","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"_owner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bancorRegistry","outputs":[{"internalType":"contract IBancorContractRegistry","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"goodwill","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"inCaseTokengetsStuck","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint16","name":"_new_goodwill","type":"uint16"}],"name":"set_new_goodwill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"stopped","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"toggleContractActive","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

60806040526000805460ff60a81b1916905534801561001d57600080fd5b506040516119453803806119458339818101604052602081101561004057600080fd5b50516000805460ff191660011781556100606001600160e01b036100d716565b60008054610100600160a81b0319166101006001600160a01b038416908102919091178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000805461ffff909216600160b01b0261ffff60b01b199092169190911790556100db565b3390565b61185b806100ea6000396000f3fe6080604052600436106100c25760003560e01c806375f12b211161007f578063b10e1dbc11610059578063b10e1dbc146101eb578063b2bdfa7b14610219578063b9e3adaa1461022e578063f2fde38b146102ee576100c2565b806375f12b21146101985780638da5cb5b146101c15780638f32d59b146101d6576100c2565b80630f4f8184146100c75780631385d24c146100f85780633ccfd60b1461010f578063551196d5146101245780635de0398e14610157578063715018a614610183575b600080fd5b3480156100d357600080fd5b506100dc610321565b604080516001600160a01b039092168252519081900360200190f35b34801561010457600080fd5b5061010d610339565b005b34801561011b57600080fd5b5061010d6103a1565b34801561013057600080fd5b5061010d6004803603602081101561014757600080fd5b50356001600160a01b0316610442565b34801561016357600080fd5b5061016c610524565b6040805161ffff9092168252519081900360200190f35b34801561018f57600080fd5b5061010d610535565b3480156101a457600080fd5b506101ad6105cb565b604080519115158252519081900360200190f35b3480156101cd57600080fd5b506100dc6105db565b3480156101e257600080fd5b506101ad6105ef565b3480156101f757600080fd5b5061010d6004803603602081101561020e57600080fd5b503561ffff16610618565b34801561022557600080fd5b506100dc6106db565b6102d5600480360360e081101561024457600080fd5b6001600160a01b03823581169260208101358216926040820135831692606083013592608081013582169260a08201359092169181019060e0810160c082013564010000000081111561029657600080fd5b8201836020820111156102a857600080fd5b803590602001918460018302840111640100000000831117156102ca57600080fd5b5090925090506106ef565b6040805192835260208301919091528051918290030190f35b3480156102fa57600080fd5b5061010d6004803603602081101561031157600080fd5b50356001600160a01b0316610a39565b7352ae12abe5d8bd778bd5397f99ca900624cfadd481565b6103416105ef565b610380576040805162461bcd60e51b815260206004820181905260248201526000805160206117a7833981519152604482015290519081900360640190fd5b6000805460ff60a81b198116600160a81b9182900460ff1615909102179055565b6103a96105ef565b6103e8576040805162461bcd60e51b815260206004820181905260248201526000805160206117a7833981519152604482015290519081900360640190fd5b4760006104046103f66105db565b6001600160a01b0316610a8c565b6040519091506001600160a01b0382169083156108fc029084906000818181858888f1935050505015801561043d573d6000803e3d6000fd5b505050565b61044a6105ef565b610489576040805162461bcd60e51b815260206004820181905260248201526000805160206117a7833981519152604482015290519081900360640190fd5b604080516370a0823160e01b8152306004820152905182916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156104d457600080fd5b505afa1580156104e8573d6000803e3d6000fd5b505050506040513d60208110156104fe57600080fd5b5051905061043d61050d6105db565b6001600160a01b038416908363ffffffff610a8f16565b600054600160b01b900461ffff1681565b61053d6105ef565b61057c576040805162461bcd60e51b815260206004820181905260248201526000805160206117a7833981519152604482015290519081900360640190fd5b600080546040516101009091046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360008054610100600160a81b0319169055565b600054600160a81b900460ff1681565b60005461010090046001600160a01b031690565b6000805461010090046001600160a01b0316610609610ae1565b6001600160a01b031614905090565b6106206105ef565b61065f576040805162461bcd60e51b815260206004820181905260248201526000805160206117a7833981519152604482015290519081900360640190fd5b6127108161ffff16106106b9576040805162461bcd60e51b815260206004820152601a60248201527f476f6f6457696c6c2056616c7565206e6f7420616c6c6f776564000000000000604482015290519081900360640190fd5b6000805461ffff909216600160b01b0261ffff60b01b19909216919091179055565b60005461010090046001600160a01b031681565b60008054819060ff16610749576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff191690819055600160a81b900460ff16156107a6576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b60008060008b6001600160a01b031663d3fb73b46040518163ffffffff1660e01b815260040160206040518083038186803b1580156107e457600080fd5b505afa1580156107f8573d6000803e3d6000fd5b505050506040513d602081101561080e57600080fd5b505190506001600160a01b038d166108795760003411610868576040805162461bcd60e51b815260206004820152601060248201526f1154948e88139bc8115512081cd95b9d60821b604482015290519081900360640190fd5b6108728d34610ae5565b9250610942565b60008a116108c4576040805162461bcd60e51b8152602060048201526013602482015272115c9c8e88139bc8151bdad95b9cc814d95b9d606a1b604482015290519081900360640190fd5b3415610917576040805162461bcd60e51b815260206004820152601860248201527f4552523a204554482073656e74207769746820546f6b656e0000000000000000604482015290519081900360640190fd5b8c91506109356001600160a01b03831633308d63ffffffff610bc416565b61093f8d8b610ae5565b92505b8a6001600160a01b03168d6001600160a01b0316141561097157610967818385610c24565b90955093506109cb565b60006109b7838d868d8d8d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610ef092505050565b90506109c4828d83610c24565b9096509450505b604080513381526001600160a01b03831660208201528082018790526060810186905290517faabbf208c2aff7b9d621d05b383eec3d7996881c1117be9ae3a6a866ddfd0bfb9181900360800190a15050506000805460ff1916600117905590999098509650505050505050565b610a416105ef565b610a80576040805162461bcd60e51b815260206004820181905260248201526000805160206117a7833981519152604482015290519081900360640190fd5b610a89816111cd565b50565b90565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261043d908490611278565b3390565b60008054600160b01b900461ffff16610aff575080610bbe565b60008054610b2590610b1d908590600160b01b900461ffff16611430565b612710611490565b90506001600160a01b038416610b7c57604051733ce37278de6388532c3949ce4e886f365b14fb569082156108fc029083906000818181858888f19350505050158015610b76573d6000803e3d6000fd5b50610baa565b610baa6001600160a01b038516733ce37278de6388532c3949ce4e886f365b14fb568363ffffffff610a8f16565b610bba838263ffffffff6114d216565b9150505b92915050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610c1e908590611278565b50505050565b60008060008085905060007352ae12abe5d8bd778bd5397f99ca900624cfadd46001600160a01b031663bb34534c722634b8bab4b234ba3ca83937ba32b1ba34b7b760691b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610c9d57600080fd5b505afa158015610cb1573d6000803e3d6000fd5b505050506040513d6020811015610cc757600080fd5b505190506001600160a01b03871615610d165786610cf66001600160a01b03821683600063ffffffff61151416565b610d106001600160a01b038216838963ffffffff61151416565b50610d31565b85925073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee91505b6040805163caee4c8f60e01b81523360048201526001600160a01b038a811660248301528481166044830152606482018990529151839283169163caee4c8f91879160848082019260209290919082900301818588803b158015610d9457600080fd5b505af1158015610da8573d6000803e3d6000fd5b50505050506040513d6020811015610dbf57600080fd5b505160408051632ecd14d360e21b81527f4c697175696469747950726f74656374696f6e53746f72650000000000000000600482015290519196506000917352ae12abe5d8bd778bd5397f99ca900624cfadd49163bb34534c916024808301926020929190829003018186803b158015610e3857600080fd5b505afa158015610e4c573d6000803e3d6000fd5b505050506040513d6020811015610e6257600080fd5b505160408051635290ffbb60e01b81526004810189905290519192506001600160a01b03831691635290ffbb9160248082019261010092909190829003018186803b158015610eb057600080fd5b505afa158015610ec4573d6000803e3d6000fd5b505050506040513d610100811015610edb57600080fd5b50606001519a95995094975050505050505050565b6000806001600160a01b038816610f08575084610f40565b87610f246001600160a01b03821687600063ffffffff61151416565b610f3e6001600160a01b038216878963ffffffff61151416565b505b60006001600160a01b03881615610fc857604080516370a0823160e01b815230600482015290516001600160a01b038a16916370a08231916024808301926020929190829003018186803b158015610f9757600080fd5b505afa158015610fab573d6000803e3d6000fd5b505050506040513d6020811015610fc157600080fd5b5051610fca565b475b90506000856001600160a01b031683866040518082805190602001908083835b602083106110095780518252601f199092019160209182019101610fea565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461106b576040519150601f19603f3d011682016040523d82523d6000602084013e611070565b606091505b50509050806110be576040805162461bcd60e51b81526020600482015260156024820152744572726f72205377617070696e6720546f6b656e7360581b604482015290519081900360640190fd5b60006001600160a01b038a161561115857604080516370a0823160e01b815230600482015290516111539185916001600160a01b038e16916370a08231916024808301926020929190829003018186803b15801561111b57600080fd5b505afa15801561112f573d6000803e3d6000fd5b505050506040513d602081101561114557600080fd5b50519063ffffffff6114d216565b611168565b611168478463ffffffff6114d216565b9050600081116111bf576040805162461bcd60e51b815260206004820152601f60248201527f5377617070656420746f20496e76616c696420496e7465726d65646961746500604482015290519081900360640190fd5b9a9950505050505050505050565b6001600160a01b0381166112125760405162461bcd60e51b81526004018080602001828103825260268152602001806117606026913960400191505060405180910390fd5b600080546040516001600160a01b038085169361010090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b61128a826001600160a01b0316611627565b6112db576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106113195780518252601f1990920191602091820191016112fa565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461137b576040519150601f19603f3d011682016040523d82523d6000602084013e611380565b606091505b5091509150816113d7576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115610c1e578080602001905160208110156113f357600080fd5b5051610c1e5760405162461bcd60e51b815260040180806020018281038252602a8152602001806117c7602a913960400191505060405180910390fd5b60008261143f57506000610bbe565b8282028284828161144c57fe5b04146114895760405162461bcd60e51b81526004018080602001828103825260218152602001806117866021913960400191505060405180910390fd5b9392505050565b600061148983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611663565b600061148983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611705565b80158061159a575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b15801561156c57600080fd5b505afa158015611580573d6000803e3d6000fd5b505050506040513d602081101561159657600080fd5b5051155b6115d55760405162461bcd60e51b81526004018080602001828103825260368152602001806117f16036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261043d908490611278565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061165b57508115155b949350505050565b600081836116ef5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156116b457818101518382015260200161169c565b50505050905090810190601f1680156116e15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816116fb57fe5b0495945050505050565b600081848411156117575760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156116b457818101518382015260200161169c565b50505090039056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a265627a7a723158202b2ec2e52b25dc6681699e001747878b646eaaec6835fe18913cb70540b9decd64736f6c634300051100320000000000000000000000000000000000000000000000000000000000000000

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _goodwill (uint16): 0

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

24379:8353:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25105:149;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25105:149:0;;;:::i;:::-;;;;-1:-1:-1;;;;;25105:149:0;;;;;;;;;;;;;;32378:86;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32378:86:0;;;:::i;:::-;;32534:195;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32534:195:0;;;:::i;32094:244::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32094:244:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32094:244:0;-1:-1:-1;;;;;32094:244:0;;:::i;24585:22::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24585:22:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22784:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22784:140:0;;;:::i;24551:27::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24551:27:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;21973:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21973:79:0;;;:::i;22339:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22339:94:0;;;:::i;31848:238::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31848:238:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31848:238:0;;;;:::i;21468:29::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21468:29:0;;;:::i;26274:1925::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;26274:1925:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;26274:1925:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;26274:1925:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;26274:1925:0;;-1:-1:-1;26274:1925:0;-1:-1:-1;26274:1925:0;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;23079:117;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23079:117:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23079:117:0;-1:-1:-1;;;;;23079:117:0;;:::i;25105:149::-;25205:42;25105:149;:::o;32378:86::-;22185:9;:7;:9::i;:::-;22177:54;;;;;-1:-1:-1;;;22177:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22177:54:0;;;;;;;;;;;;;;;32449:7;;;-1:-1:-1;;;;32438:18:0;;-1:-1:-1;;;32449:7:0;;;;;;32448:8;32438:18;;;;;;32378:86::o;32534:195::-;22185:9;:7;:9::i;:::-;22177:54;;;;;-1:-1:-1;;;22177:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22177:54:0;;;;;;;;;;;;;;;32608:21;32582:23;32662:19;:7;:5;:7::i;:::-;-1:-1:-1;;;;;32662:17:0;;:19::i;:::-;32692:29;;32640:41;;-1:-1:-1;;;;;;32692:12:0;;;:29;;;;;32705:15;;32692:29;;;;32705:15;32692:12;:29;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32692:29:0;22242:1;;32534:195::o;32094:244::-;22185:9;:7;:9::i;:::-;22177:54;;;;;-1:-1:-1;;;22177:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22177:54:0;;;;;;;;;;;;;;;32243:37;;;-1:-1:-1;;;32243:37:0;;32274:4;32243:37;;;;;;32204:13;;32175:19;;-1:-1:-1;;;;;32243:22:0;;;;;:37;;;;;;;;;;;;;;:22;:37;;;5:2:-1;;;;30:1;27;20:12;5:2;32243:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32243:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32243:37:0;;-1:-1:-1;32291:39:0;32317:7;:5;:7::i;:::-;-1:-1:-1;;;;;32291:25:0;;;32326:3;32291:39;:25;:39;:::i;24585:22::-;;;-1:-1:-1;;;24585:22:0;;;;;:::o;22784:140::-;22185:9;:7;:9::i;:::-;22177:54;;;;;-1:-1:-1;;;22177:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22177:54:0;;;;;;;;;;;;;;;22883:1;22867:6;;22846:40;;22867:6;;;;-1:-1:-1;;;;;22867:6:0;;22846:40;;22883:1;;22846:40;22914:1;22897:19;;-1:-1:-1;;;;;;22897:19:0;;;22784:140::o;24551:27::-;;;-1:-1:-1;;;24551:27:0;;;;;:::o;21973:79::-;22011:7;22038:6;;;;-1:-1:-1;;;;;22038:6:0;;21973:79::o;22339:94::-;22379:4;22419:6;;;;;-1:-1:-1;;;;;22419:6:0;22403:12;:10;:12::i;:::-;-1:-1:-1;;;;;22403:22:0;;22396:29;;22339:94;:::o;31848:238::-;22185:9;:7;:9::i;:::-;22177:54;;;;;-1:-1:-1;;;22177:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22177:54:0;;;;;;;;;;;;;;;31984:5;31968:13;:21;;;31924:119;;;;;-1:-1:-1;;;31924:119:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;32054:8;:24;;;;;;-1:-1:-1;;;32054:24:0;-1:-1:-1;;;;32054:24:0;;;;;;;;;31848:238::o;21468:29::-;;;;;;-1:-1:-1;;;;;21468:29:0;;:::o;26274:1925::-;26650:19;19608:11;;26650:19;;19608:11;;19600:55;;;;;-1:-1:-1;;;19600:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19747:5;19733:19;;-1:-1:-1;;19733:19:0;;;;;-1:-1:-1;;;25557:7:0;;19733:19;25557:7;25553:102;;;25581:28;;;-1:-1:-1;;;25581:28:0;;;;;;;;;;;;-1:-1:-1;;;25581:28:0;;;;;;;;;;;;;;25553:102;26699:19;26729;26759:18;26799:22;-1:-1:-1;;;;;26780:63:0;;:65;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26780:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26780:65:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26780:65:0;;-1:-1:-1;;;;;;26862:31:0;;26858:597;;26930:1;26918:9;:13;26910:42;;;;;-1:-1:-1;;;26910:42:0;;;;;;;;;;;;-1:-1:-1;;;26910:42:0;;;;;;;;;;;;;;;26981:47;26999:17;27018:9;26981:17;:47::i;:::-;26967:61;;26858:597;;;27079:1;27069:7;:11;27061:43;;;;;-1:-1:-1;;;27061:43:0;;;;;;;;;;;;-1:-1:-1;;;27061:43:0;;;;;;;;;;;;;;;27127:9;:14;27119:51;;;;;-1:-1:-1;;;27119:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;27199:17;;-1:-1:-1;27231:138:0;-1:-1:-1;;;;;27231:36:0;;27286:10;27323:4;27347:7;27231:138;:36;:138;:::i;:::-;27398:45;27416:17;27435:7;27398:17;:45::i;:::-;27384:59;;26858:597;27492:22;-1:-1:-1;;;;;27471:43:0;:17;-1:-1:-1;;;;;27471:43:0;;27467:663;;;27551:116;27582:10;27611:11;27641;27551:12;:116::i;:::-;27531:136;;-1:-1:-1;27531:136:0;-1:-1:-1;27467:663:0;;;27700:27;27730:218;27759:11;27789:22;27830:11;27860:16;27895:11;27925:8;;27730:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;27730:10:0;;-1:-1:-1;;;27730:218:0:i;:::-;27700:248;;27983:135;28014:10;28043:22;28084:19;27983:12;:135::i;:::-;27963:155;;-1:-1:-1;27963:155:0;-1:-1:-1;;27467:663:0;28145:46;;;28151:10;28145:46;;-1:-1:-1;;;;;28145:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25642:1;;;19913:11;:18;;-1:-1:-1;;19913:18:0;19927:4;19913:18;;;26274:1925;;;;-1:-1:-1;26274:1925:0;-1:-1:-1;;;;;;;26274:1925:0:o;23079:117::-;22185:9;:7;:9::i;:::-;22177:54;;;;;-1:-1:-1;;;22177:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;22177:54:0;;;;;;;;;;;;;;;23160:28;23179:8;23160:18;:28::i;:::-;23079:117;:::o;11943:159::-;12085:7;11943:159::o;14089:247::-;14259:58;;;-1:-1:-1;;;;;14259:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;14259:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;14206:122:0;;14239:5;;14206:18;:122::i;20725:98::-;20805:10;20725:98;:::o;31192:648::-;31314:7;31338:8;;-1:-1:-1;;;31338:8:0;;;;31334:37;;-1:-1:-1;31360:11:0;31353:18;;31334:37;31384:23;31463:8;;31410:93;;31437:35;;31450:11;;-1:-1:-1;;;31463:8:0;;;;31437:12;:35::i;:::-;31487:5;31410:12;:93::i;:::-;31384:119;-1:-1:-1;;;;;;31518:35:0;;31514:269;;31570:42;;24875;;31570;;;;;31596:15;;31570:42;;;;31596:15;24875:42;31570;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31570:42:0;31514:269;;;31645:126;-1:-1:-1;;;;;31645:42:0;;24875;31741:15;31645:126;:42;:126;:::i;:::-;31800:32;:11;31816:15;31800:32;:15;:32;:::i;:::-;31793:39;;;31192:648;;;;;:::o;14344:284::-;14541:68;;;-1:-1:-1;;;;;14541:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;14541:68:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;14488:132:0;;14521:5;;14488:18;:132::i;:::-;14344:284;;;;:::o;28207:1438::-;28342:19;28363:10;28386:19;28416:20;28439:13;28416:36;;28463:40;25205:42;-1:-1:-1;;;;;28506:24:0;;-1:-1:-1;;;28506:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28506:73:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28506:73:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28506:73:0;;-1:-1:-1;;;;;;28596:27:0;;;28592:410;;28671:13;28700:63;-1:-1:-1;;;;;28700:26:0;;28727:32;28640:21;28700:63;:26;:63;:::i;:::-;28778:118;-1:-1:-1;;;;;28778:26:0;;28823:32;28874:7;28778:118;:26;:118;:::i;:::-;28592:410;;;;28943:7;28929:21;;24663:42;28965:25;;28592:410;29163:171;;;-1:-1:-1;;;29163:171:0;;29238:10;29163:171;;;;-1:-1:-1;;;;;29163:171:0;;;;;;;;;;;;;;;;;;;;;;29112:32;;29163:41;;;;;29211:11;;29163:171;;;;;;;;;;;;;;;29211:11;29163:41;:171;;;5:2:-1;;;;30:1;27;20:12;5:2;29163:171:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29163:171:0;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29163:171:0;29468:54;;;-1:-1:-1;;;29468:54:0;;29493:28;29468:54;;;;;;29163:171;;-1:-1:-1;29353:56:0;;25205:42;;29468:24;;:54;;;;;29163:171;;29468:54;;;;;;;25205:42;29468:54;;;5:2:-1;;;;30:1;27;20:12;5:2;29468:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29468:54:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29468:54:0;29576:61;;;-1:-1:-1;;;29576:61:0;;;;;;;;;;29468:54;;-1:-1:-1;;;;;;29576:57:0;;;;;:61;;;;;;;;;;;;;;;:57;:61;;;5:2:-1;;;;30:1;27;20:12;5:2;29576:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29576:61:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;29576:61:0;;;;28207:1438;;-1:-1:-1;28207:1438:0;;-1:-1:-1;;;;;;;;28207:1438:0:o;29653:1272::-;29898:7;;-1:-1:-1;;;;;29952:31:0;;29948:300;;-1:-1:-1;30014:7:0;29948:300;;;30080:17;30113:51;-1:-1:-1;;;;;30113:21:0;;30143:16;30054;30113:51;:21;:51;:::i;:::-;30179:57;-1:-1:-1;;;;;30179:21:0;;30209:16;30228:7;30179:57;:21;:57;:::i;:::-;29948:300;;30260:22;-1:-1:-1;;;;;30285:36:0;;;:144;;30374:55;;;-1:-1:-1;;;30374:55:0;;30423:4;30374:55;;;;;;-1:-1:-1;;;;;30374:40:0;;;;;:55;;;;;;;;;;;;;;:40;:55;;;5:2:-1;;;;30:1;27;20:12;5:2;30374:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30374:55:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30374:55:0;30285:144;;;30337:21;30285:144;30260:169;;30443:12;30461:11;-1:-1:-1;;;;;30461:16:0;30484:11;30497:8;30461:45;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;30461:45:0;;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;30442:64:0;;;30525:7;30517:41;;;;;-1:-1:-1;;;30517:41:0;;;;;;;;;;;;-1:-1:-1;;;30517:41:0;;;;;;;;;;;;;;;30571:20;-1:-1:-1;;;;;30594:36:0;;;:218;;30705:55;;;-1:-1:-1;;;30705:55:0;;30754:4;30705:55;;;;;;:107;;30783:14;;-1:-1:-1;;;;;30705:40:0;;;;;:55;;;;;;;;;;;;;;:40;:55;;;5:2:-1;;;;30:1;27;20:12;5:2;30705:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30705:55:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30705:55:0;;:107;:59;:107;:::i;:::-;30594:218;;;30646:43;30647:21;30674:14;30646:43;:27;:43;:::i;:::-;30571:241;;30848:1;30833:12;:16;30825:60;;;;;-1:-1:-1;;;30825:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;30905:12;29653:1272;-1:-1:-1;;;;;;;;;;29653:1272:0:o;23302:274::-;-1:-1:-1;;;;;23398:22:0;;23376:110;;;;-1:-1:-1;;;23376:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23523:6;;;23502:38;;-1:-1:-1;;;;;23502:38:0;;;;23523:6;;;;;;23502:38;;;23551:6;:17;;-1:-1:-1;;;;;23551:17:0;;;;;-1:-1:-1;;;;;;23551:17:0;;;;;;;;;23302:274::o;16699:1176::-;17303:27;17311:5;-1:-1:-1;;;;;17303:25:0;;:27::i;:::-;17295:71;;;;;-1:-1:-1;;;17295:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17440:12;17454:23;17489:5;-1:-1:-1;;;;;17481:19:0;17501:4;17481:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;17481:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;17439:67:0;;;;17525:7;17517:52;;;;;-1:-1:-1;;;17517:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17586:17;;:21;17582:286;;17759:10;17748:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17748:30:0;17722:134;;;;-1:-1:-1;;;17722:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7093:471;7151:7;7396:6;7392:47;;-1:-1:-1;7426:1:0;7419:8;;7392:47;7463:5;;;7467:1;7463;:5;:1;7487:5;;;;;:10;7479:56;;;;-1:-1:-1;;;7479:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7555:1;7093:471;-1:-1:-1;;;7093:471:0:o;8032:132::-;8090:7;8117:39;8121:1;8124;8117:39;;;;;;;;;;;;;;;;;:3;:39::i;6143:136::-;6201:7;6228:43;6232:1;6235;6228:43;;;;;;;;;;;;;;;;;:3;:43::i;14636:706::-;15054:10;;;15053:62;;-1:-1:-1;15070:39:0;;;-1:-1:-1;;;15070:39:0;;15094:4;15070:39;;;;-1:-1:-1;;;;;15070:39:0;;;;;;;;;:15;;;;;;:39;;;;;;;;;;;;;;;:15;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;15070:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15070:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15070:39:0;:44;15053:62;15031:166;;;;-1:-1:-1;;;15031:166:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15261:62;;;-1:-1:-1;;;;;15261:62:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;15261:62:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;15208:126:0;;15241:5;;15208:18;:126::i;11067:659::-;11127:4;11626:20;;11456:66;11675:23;;;;;;:42;;-1:-1:-1;11702:15:0;;;11675:42;11667:51;11067:659;-1:-1:-1;;;;11067:659:0:o;8694:379::-;8814:7;8916:12;8909:5;8901:28;;;;-1:-1:-1;;;8901:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;8901:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8940:9;8956:1;8952;:5;;;;;;;8694:379;-1:-1:-1;;;;;8694:379:0:o;6616:226::-;6736:7;6772:12;6764:6;;;;6756:29;;;;-1:-1:-1;;;6756:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;6756:29:0;-1:-1:-1;;;6808:5:0;;;6616:226::o

Swarm Source

bzzr://2b2ec2e52b25dc6681699e001747878b646eaaec6835fe18913cb70540b9decd
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

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.