ETH Price: $2,707.45 (-2.03%)

Contract

0x22953B20aB21eF5b2A28c1bB55734fB2525Ebaf2
 

Overview

ETH Balance

0.136769323 ETH

Eth Value

$370.30 (@ $2,707.45/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Migrate For94421252020-02-08 12:35:231842 days ago1581165323IN
0x22953B20...2525Ebaf2
0 ETH0.0027603214
Migrate For94421192020-02-08 12:34:231842 days ago1581165263IN
0x22953B20...2525Ebaf2
0 ETH0.0027592714
Migrate For94421152020-02-08 12:33:301842 days ago1581165210IN
0x22953B20...2525Ebaf2
0 ETH0.0027594114
Migrate For94421002020-02-08 12:30:281842 days ago1581165028IN
0x22953B20...2525Ebaf2
0 ETH0.0146615714
Migrate For94367672020-02-07 16:57:221843 days ago1581094642IN
0x22953B20...2525Ebaf2
0 ETH0.0194603715
Migrate For94206752020-02-05 5:16:181845 days ago1580879778IN
0x22953B20...2525Ebaf2
0 ETH0.019145614
Migrate For94121052020-02-03 21:42:351847 days ago1580766155IN
0x22953B20...2525Ebaf2
0 ETH0.0192296314
Migrate For93962982020-02-01 11:37:081849 days ago1580557028IN
0x22953B20...2525Ebaf2
0 ETH0.0185215114
Migrate For93878352020-01-31 4:24:301851 days ago1580444670IN
0x22953B20...2525Ebaf2
0 ETH0.0188778214
Get Fee93878282020-01-31 4:22:101851 days ago1580444530IN
0x22953B20...2525Ebaf2
0 ETH0.000065592.1
Migrate For93403612020-01-23 21:21:251858 days ago1579814485IN
0x22953B20...2525Ebaf2
0 ETH0.0126914211
Migrate For93163892020-01-20 5:22:181861 days ago1579497738IN
0x22953B20...2525Ebaf2
0 ETH0.0116403911
Migrate For93162592020-01-20 4:53:031861 days ago1579495983IN
0x22953B20...2525Ebaf2
0 ETH0.0174885214
Migrate For93013372020-01-17 22:01:341864 days ago1579298494IN
0x22953B20...2525Ebaf2
0 ETH0.0183275114
Migrate For92821692020-01-14 23:26:121867 days ago1579044372IN
0x22953B20...2525Ebaf2
0 ETH0.0182986114
Migrate For92200952020-01-05 11:27:311876 days ago1578223651IN
0x22953B20...2525Ebaf2
0 ETH0.0187102314
Migrate For92100902020-01-03 22:36:391878 days ago1578090999IN
0x22953B20...2525Ebaf2
0 ETH0.0018957614.6
Migrate For92100842020-01-03 22:33:491878 days ago1578090829IN
0x22953B20...2525Ebaf2
0 ETH0.0018957614.6
Migrate For92100812020-01-03 22:33:121878 days ago1578090792IN
0x22953B20...2525Ebaf2
0 ETH0.0018911914.6
Migrate For91623892019-12-25 20:24:381887 days ago1577305478IN
0x22953B20...2525Ebaf2
0 ETH0.0146763614
Migrate For91555672019-12-24 11:44:281888 days ago1577187868IN
0x22953B20...2525Ebaf2
0 ETH0.0161773914
Migrate For91519812019-12-23 18:36:341889 days ago1577126194IN
0x22953B20...2525Ebaf2
0 ETH0.0195774614.1
Migrate For91253212019-12-18 11:20:391894 days ago1576668039IN
0x22953B20...2525Ebaf2
0 ETH0.0018252514
Migrate For91253182019-12-18 11:19:261894 days ago1576667966IN
0x22953B20...2525Ebaf2
0 ETH0.0019310614
Migrate For91253152019-12-18 11:18:351894 days ago1576667915IN
0x22953B20...2525Ebaf2
0 ETH0.0021512316
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
94421002020-02-08 12:30:281842 days ago1581165028
0x22953B20...2525Ebaf2
0.01829088 ETH
94367672020-02-07 16:57:221843 days ago1581094642
0x22953B20...2525Ebaf2
0.02370004 ETH
94206752020-02-05 5:16:181845 days ago1580879778
0x22953B20...2525Ebaf2
0.0246904 ETH
94121052020-02-03 21:42:351847 days ago1580766155
0x22953B20...2525Ebaf2
0.02450562 ETH
93962982020-02-01 11:37:081849 days ago1580557028
0x22953B20...2525Ebaf2
0.02247854 ETH
93878352020-01-31 4:24:301851 days ago1580444670
0x22953B20...2525Ebaf2
0.02310382 ETH
93878282020-01-31 4:22:101851 days ago1580444530
0x22953B20...2525Ebaf2
0.27754537 ETH
93403612020-01-23 21:21:251858 days ago1579814485
0x22953B20...2525Ebaf2
0.01605792 ETH
93163892020-01-20 5:22:181861 days ago1579497738
0x22953B20...2525Ebaf2
0.01449213 ETH
93162592020-01-20 4:53:031861 days ago1579495983
0x22953B20...2525Ebaf2
0.02309211 ETH
93013372020-01-17 22:01:341864 days ago1579298494
0x22953B20...2525Ebaf2
0.02255334 ETH
92821692020-01-14 23:26:121867 days ago1579044372
0x22953B20...2525Ebaf2
0.02225581 ETH
92200952020-01-05 11:27:311876 days ago1578223651
0x22953B20...2525Ebaf2
0.02293606 ETH
91623892019-12-25 20:24:381887 days ago1577305478
0x22953B20...2525Ebaf2
0.01851585 ETH
91555672019-12-24 11:44:281888 days ago1577187868
0x22953B20...2525Ebaf2
0.02061322 ETH
91519812019-12-23 18:36:341889 days ago1577126194
0x22953B20...2525Ebaf2
0.02537337 ETH
91225502019-12-17 21:50:311895 days ago1576619431
0x22953B20...2525Ebaf2
0.0243443 ETH
91223632019-12-17 20:56:051895 days ago1576616165
0x22953B20...2525Ebaf2
0.02116372 ETH
91223132019-12-17 20:44:051895 days ago1576615445
0x22953B20...2525Ebaf2
0.02089987 ETH
91218062019-12-17 18:08:501895 days ago1576606130
0x22953B20...2525Ebaf2
0.02524762 ETH
90773742019-12-09 12:23:371903 days ago1575894217
0x22953B20...2525Ebaf2
0.09875612 ETH
90700342019-12-08 4:59:271904 days ago1575781167
0x22953B20...2525Ebaf2
0.02664436 ETH
90633952019-12-07 0:44:561906 days ago1575679496
0x22953B20...2525Ebaf2
0.02672572 ETH
90633952019-12-07 0:44:561906 days ago1575679496
0x22953B20...2525Ebaf2
0.02048582 ETH
90633952019-12-07 0:44:561906 days ago1575679496
0x22953B20...2525Ebaf2
0.0249002 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AutomaticMigration

Compiler Version
v0.5.7+commit.6da8b019

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-11-26
*/

pragma solidity ^0.5.0;


contract DSMath {
    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x);
    }
    function sub(uint x, uint y) internal pure returns (uint z) {
        require((z = x - y) <= x);
    }
    function mul(uint x, uint y) internal pure returns (uint z) {
        require(y == 0 || (z = x * y) / y == x);
    }

    function min(uint x, uint y) internal pure returns (uint z) {
        return x <= y ? x : y;
    }
    function max(uint x, uint y) internal pure returns (uint z) {
        return x >= y ? x : y;
    }
    function imin(int x, int y) internal pure returns (int z) {
        return x <= y ? x : y;
    }
    function imax(int x, int y) internal pure returns (int z) {
        return x >= y ? x : y;
    }

    uint constant WAD = 10 ** 18;
    uint constant RAY = 10 ** 27;

    function wmul(uint x, uint y) internal pure returns (uint z) {
        z = add(mul(x, y), WAD / 2) / WAD;
    }
    function rmul(uint x, uint y) internal pure returns (uint z) {
        z = add(mul(x, y), RAY / 2) / RAY;
    }
    function wdiv(uint x, uint y) internal pure returns (uint z) {
        z = add(mul(x, WAD), y / 2) / y;
    }
    function rdiv(uint x, uint y) internal pure returns (uint z) {
        z = add(mul(x, RAY), y / 2) / y;
    }

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    function rpow(uint x, uint n) internal pure returns (uint z) {
        z = n % 2 != 0 ? x : RAY;

        for (n /= 2; n != 0; n /= 2) {
            x = rmul(x, x);

            if (n % 2 != 0) {
                z = rmul(z, x);
            }
        }
    }
}

contract Gem {
    function dec() public returns (uint);
    function gem() public returns (Gem);
    function join(address, uint) public payable;
    function exit(address, uint) public;

    function approve(address, uint) public;
    function transfer(address, uint) public returns (bool);
    function transferFrom(address, address, uint) public returns (bool);
    function deposit() public payable;
    function withdraw(uint) public;
    function allowance(address, address) public returns (uint);
}

contract ValueLike {
    function peek() public returns (uint, bool);
}

contract VoxLike {
    function par() public returns (uint);
}

contract SaiTubLike {
    function skr() public view returns (Gem);
    function gem() public view returns (Gem);
    function gov() public view returns (Gem);
    function sai() public view returns (Gem);
    function pep() public view returns (ValueLike);
    function vox() public view returns (VoxLike);
    function bid(uint) public view returns (uint);
    function ink(bytes32) public view returns (uint);
    function tag() public view returns (uint);
    function tab(bytes32) public returns (uint);
    function rap(bytes32) public returns (uint);
    function draw(bytes32, uint) public;
    function shut(bytes32) public;
    function exit(uint) public;
    function give(bytes32, address) public;
    function lad(bytes32 cup) public view returns (address);
    function cups(bytes32) public returns (address, uint, uint, uint);
}

contract Vat {

    struct Urn {
        uint256 ink;   
        uint256 art;   
    }

    struct Ilk {
        uint256 Art;   
        uint256 rate;  
        uint256 spot;  
        uint256 line;  
        uint256 dust;  
    }

    mapping (bytes32 => mapping (address => Urn )) public urns;
    mapping (bytes32 => Ilk)                       public ilks;

    function can(address, address) public view returns (uint);
    function dai(address) public view returns (uint);
    function frob(bytes32, address, address, address, int, int) public;
    function hope(address) public;
    function move(address, address, uint) public;
}

contract DaiJoin {
    function vat() public returns (Vat);
    function dai() public returns (Gem);
    function join(address, uint) public payable;
    function exit(address, uint) public;
}

contract ScdMcdMigration {
    SaiTubLike public tub;
    DaiJoin public daiJoin;

    function swapSaiToDai(uint) external;
    function swapDaiToSai(uint) external;
    function migrate(bytes32) external returns (uint);
}

contract ConstantAddressesMainnet {
    address public constant MAKER_DAI_ADDRESS = 0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359;
    address public constant IDAI_ADDRESS = 0x14094949152EDDBFcd073717200DA82fEd8dC960;
    address public constant SOLO_MARGIN_ADDRESS = 0x1E0447b19BB6EcFdAe1e4AE1694b0C3659614e4e;
    address public constant CDAI_ADDRESS = 0xF5DCe57282A584D2746FaF1593d3121Fcac444dC;
    address public constant KYBER_ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
    address public constant MKR_ADDRESS = 0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2;
    address public constant WETH_ADDRESS = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address public constant VOX_ADDRESS = 0x9B0F70Df76165442ca6092939132bBAEA77f2d7A;
    address public constant PETH_ADDRESS = 0xf53AD2c6851052A81B42133467480961B2321C09;
    address public constant TUB_ADDRESS = 0x448a5065aeBB8E423F0896E6c5D525C040f59af3;
    address payable public constant WALLET_ID = 0x322d58b9E75a6918f7e7849AEe0fF09369977e08;
    address public constant LOGGER_ADDRESS = 0xeCf88e1ceC2D2894A0295DB3D86Fe7CE4991E6dF;
    address public constant OTC_ADDRESS = 0x39755357759cE0d7f32dC8dC45414CCa409AE24e;
    address public constant DISCOUNT_ADDRESS = 0x1b14E8D511c9A4395425314f849bD737BAF8208F;

    address public constant KYBER_WRAPPER = 0x8F337bD3b7F2b05d9A8dC8Ac518584e833424893;
    address public constant UNISWAP_WRAPPER = 0x1e30124FDE14533231216D95F7798cD0061e5cf8;
    address public constant ETH2DAI_WRAPPER = 0xd7BBB1777E13b6F535Dec414f575b858ed300baF;
    address public constant OASIS_WRAPPER = 0x9aBE2715D2d99246269b8E17e9D1b620E9bf6558;

    address public constant KYBER_INTERFACE = 0x818E6FECD516Ecc3849DAf6845e3EC868087B755;
    address public constant UNISWAP_FACTORY = 0xc0a47dFe034B400B47bDaD5FecDa2621de6c4d95;
    address public constant FACTORY_ADDRESS = 0x5a15566417e6C1c9546523066500bDDBc53F88C7;
    address public constant PIP_INTERFACE_ADDRESS = 0x729D19f657BD0614b4985Cf1D82531c67569197B;

    address public constant PROXY_REGISTRY_INTERFACE_ADDRESS = 0x4678f0a6958e4D2Bc4F1BAF7Bc52E8F3564f3fE4;
    address public constant GAS_TOKEN_INTERFACE_ADDRESS = 0x0000000000b3F879cb30FE243b4Dfee438691c04;

    address public constant SAVINGS_LOGGER_ADDRESS = 0x89b3635BD2bAD145C6f92E82C9e83f06D5654984;

    address public constant SAVER_EXCHANGE_ADDRESS = 0x865B41584A22F8345Fca4B71c42a1E7aBcD67eCB;

    
    address public constant COMPOUND_DAI_ADDRESS = 0x25a01a05C188DaCBCf1D61Af55D4a5B4021F7eeD;
    address public constant STUPID_EXCHANGE = 0x863E41FE88288ebf3fcd91d8Dbb679fb83fdfE17;

    
    address public constant MANAGER_ADDRESS = 0x5ef30b9986345249bc32d8928B7ee64DE9435E39;
    address public constant VAT_ADDRESS = 0x35D1b3F3D7966A1DFe207aa4514C12a259A0492B;
    address public constant SPOTTER_ADDRESS = 0x65C79fcB50Ca1594B025960e539eD7A9a6D434A3;
    address public constant PROXY_ACTIONS = 0x82ecD135Dce65Fbc6DbdD0e4237E0AF93FFD5038;

    address public constant JUG_ADDRESS = 0x19c0976f590D67707E62397C87829d896Dc0f1F1;
    address public constant DAI_JOIN_ADDRESS = 0x9759A6Ac90977b93B58547b4A71c78317f391A28;
    address public constant ETH_JOIN_ADDRESS = 0x2F0b23f53734252Bda2277357e97e1517d6B042A;
    address public constant MIGRATION_ACTIONS_PROXY = 0xe4B22D484958E582098A98229A24e8A43801b674;

    address public constant SAI_ADDRESS = 0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359;
    address public constant DAI_ADDRESS = 0x6B175474E89094C44Da98b954EedeAC495271d0F;

    address payable public constant SCD_MCD_MIGRATION = 0xc73e0383F3Aff3215E6f04B0331D58CeCf0Ab849;

    
    address public constant SUBSCRIPTION_ADDRESS = 0x83152CAA0d344a2Fd428769529e2d490A88f4393;
    address public constant MONITOR_ADDRESS = 0x3F4339816EDEF8D3d3970DB2993e2e0Ec6010760;

}

contract ConstantAddressesKovan {
    address public constant KYBER_ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
    address public constant WETH_ADDRESS = 0xd0A1E359811322d97991E03f863a0C30C2cF029C;
    address public constant MAKER_DAI_ADDRESS = 0xC4375B7De8af5a38a93548eb8453a498222C4fF2;
    address public constant MKR_ADDRESS = 0xAaF64BFCC32d0F15873a02163e7E500671a4ffcD;
    address public constant VOX_ADDRESS = 0xBb4339c0aB5B1d9f14Bd6e3426444A1e9d86A1d9;
    address public constant PETH_ADDRESS = 0xf4d791139cE033Ad35DB2B2201435fAd668B1b64;
    address public constant TUB_ADDRESS = 0xa71937147b55Deb8a530C7229C442Fd3F31b7db2;
    address public constant LOGGER_ADDRESS = 0x32d0e18f988F952Eb3524aCE762042381a2c39E5;
    address payable public  constant WALLET_ID = 0x54b44C6B18fc0b4A1010B21d524c338D1f8065F6;
    address public constant OTC_ADDRESS = 0x4A6bC4e803c62081ffEbCc8d227B5a87a58f1F8F;
    address public constant COMPOUND_DAI_ADDRESS = 0x25a01a05C188DaCBCf1D61Af55D4a5B4021F7eeD;
    address public constant SOLO_MARGIN_ADDRESS = 0x4EC3570cADaAEE08Ae384779B0f3A45EF85289DE;
    address public constant IDAI_ADDRESS = 0xA1e58F3B1927743393b25f261471E1f2D3D9f0F6;
    address public constant CDAI_ADDRESS = 0xb6b09fBffBa6A5C4631e5F7B2e3Ee183aC259c0d;
    address public constant STUPID_EXCHANGE = 0x863E41FE88288ebf3fcd91d8Dbb679fb83fdfE17;
    address public constant DISCOUNT_ADDRESS = 0x1297c1105FEDf45E0CF6C102934f32C4EB780929;
    address public constant SAI_SAVER_PROXY = 0xADB7c74bCe932fC6C27ddA3Ac2344707d2fBb0E6;

    address public constant KYBER_WRAPPER = 0x68c56FF0E7BBD30AF9Ad68225479449869fC1bA0;
    address public constant UNISWAP_WRAPPER = 0x2A4ee140F05f1Ba9A07A020b07CCFB76CecE4b43;
    address public constant ETH2DAI_WRAPPER = 0x823cde416973a19f98Bb9C96d97F4FE6C9A7238B;
    address public constant OASIS_WRAPPER = 0x0257Ba4876863143bbeDB7847beC583e4deb6fE6;

    address public constant SAVER_EXCHANGE_ADDRESS = 0xACA7d11e3f482418C324aAC8e90AaD0431f692A6;


    address public constant FACTORY_ADDRESS = 0xc72E74E474682680a414b506699bBcA44ab9a930;
    
    address public constant PIP_INTERFACE_ADDRESS = 0xA944bd4b25C9F186A846fd5668941AA3d3B8425F;
    address public constant PROXY_REGISTRY_INTERFACE_ADDRESS = 0x64A436ae831C1672AE81F674CAb8B6775df3475C;
    address public constant GAS_TOKEN_INTERFACE_ADDRESS = 0x0000000000170CcC93903185bE5A2094C870Df62;
    address public constant KYBER_INTERFACE = 0x692f391bCc85cefCe8C237C01e1f636BbD70EA4D;

    address public constant SAVINGS_LOGGER_ADDRESS = 0xA6E5d5F489b1c00d9C11E1caF45BAb6e6e26443d;

    
    address public constant UNISWAP_FACTORY = 0xf5D915570BC477f9B8D6C0E980aA81757A3AaC36;

    
    address public constant MANAGER_ADDRESS = 0x1476483dD8C35F25e568113C5f70249D3976ba21;
    address public constant VAT_ADDRESS = 0xbA987bDB501d131f766fEe8180Da5d81b34b69d9;
    address public constant SPOTTER_ADDRESS = 0x3a042de6413eDB15F2784f2f97cC68C7E9750b2D;

    address public constant JUG_ADDRESS = 0xcbB7718c9F39d05aEEDE1c472ca8Bf804b2f1EaD;
    address public constant DAI_JOIN_ADDRESS = 0x5AA71a3ae1C0bd6ac27A1f28e1415fFFB6F15B8c;
    address public constant ETH_JOIN_ADDRESS = 0x775787933e92b709f2a3C70aa87999696e74A9F8;
    address public constant MIGRATION_ACTIONS_PROXY = 0x433870076aBd08865f0e038dcC4Ac6450e313Bd8;
    address public constant PROXY_ACTIONS = 0xd1D24637b9109B7f61459176EdcfF9Be56283a7B;

    address public constant SAI_ADDRESS = 0xC4375B7De8af5a38a93548eb8453a498222C4fF2;
    address public constant DAI_ADDRESS = 0x4F96Fe3b7A6Cf9725f59d353F723c1bDb64CA6Aa;

    address payable public constant SCD_MCD_MIGRATION = 0x411B2Faa662C8e3E5cF8f01dFdae0aeE482ca7b0;

    
    address public constant SUBSCRIPTION_ADDRESS = 0xFC41f79776061a396635aD0b9dF7a640A05063C1;
    address public constant MONITOR_ADDRESS = 0xfC1Fc0502e90B7A3766f93344E1eDb906F8A75DD;
}

contract ConstantAddresses is ConstantAddressesMainnet {
}

contract DSProxyInterface {
    function execute(bytes memory _code, bytes memory _data) public payable returns (address, bytes32);

    function execute(address _target, bytes memory _data) public payable returns (bytes32);

    function setCache(address _cacheAddr) public payable returns (bool);

    function owner() public returns (address);
}

contract Manager {
    function last(address) public returns (uint);
    function cdpCan(address, uint, address) public view returns (uint);
    function ilks(uint) public view returns (bytes32);
    function owns(uint) public view returns (address);
    function urns(uint) public view returns (address);
    function vat() public view returns (address);
    function open(bytes32, address) public returns (uint);
    function give(uint, address) public;
    function cdpAllow(uint, address, uint) public;
    function urnAllow(address, uint) public;
    function frob(uint, int, int) public;
    function flux(uint, address, uint) public;
    function move(uint, address, uint) public;
    function exit(address, uint, address, uint) public;
    function quit(uint, address) public;
    function enter(address, uint) public;
    function shift(uint, uint) public;
}

contract Join {
    bytes32 public ilk;

    function dec() public returns (uint);
    function gem() public returns (Gem);
    function join(address, uint) public payable;
    function exit(address, uint) public;
}

contract AutomaticMigration is DSMath, ConstantAddresses {

    enum MigrationType { WITH_MKR, WITH_CONVERSION, WITH_DEBT }

    bytes32 SAI_ILK = 0x5341490000000000000000000000000000000000000000000000000000000000;

    uint MAX_GAS_PRICE = 50000000000;

    address public constant CUSTOM_MIGRATION_ACTIONS_PROXY = 0xc2429Ea56D3Eb580c9bda2A8ee08Fb8837Cb400c;

    struct Subscription {
        bytes32 cdpId;
        address owner;
        MigrationType migType;
    }

    address payable public owner;
    uint public changeIndex;

    mapping (address => bool) public approvedCallers;
    mapping (bytes32 => Subscription) public subscribers;

    ScdMcdMigration public migrationContract = ScdMcdMigration(SCD_MCD_MIGRATION);
    SaiTubLike public tubContract = SaiTubLike(TUB_ADDRESS);
    Vat public vat = Vat(VAT_ADDRESS);
    Manager public manager = Manager(MANAGER_ADDRESS);

    modifier isApprovedCaller() {
        require(approvedCallers[msg.sender]);
        _;
    }

    modifier onlyOwner() {
        require(owner == msg.sender);
        _;
    }

    event Subscribed(address indexed owner, bytes32 cdpId, MigrationType migType);
    event Unsubscribed(address indexed owner, bytes32 cdpId);
    event Migrated(bytes32 indexed oldCdp, uint indexed newCdp, address owner, uint timestamp);

    constructor() public {
        owner = msg.sender;
        approvedCallers[owner] = true;
    }

    function subscribe(bytes32 _cdpId, MigrationType _type) external {
        require(subscribers[_cdpId].owner == address(0x0));
        require(isOwner(msg.sender, _cdpId));

        subscribers[_cdpId] = Subscription({
            cdpId: _cdpId,
            owner: msg.sender,
            migType: _type
        });

        changeIndex++;

        emit Subscribed(msg.sender, _cdpId, _type);
    }

    function unsubscribe(bytes32 _cdpId) external {
        require(subscribers[_cdpId].owner != address(0x0));
        require(isOwner(msg.sender, _cdpId));

        delete subscribers[_cdpId];

        changeIndex++;

        emit Unsubscribed(msg.sender, _cdpId);
    }

    function migrateFor(bytes32 _cdpId) external isApprovedCaller() {
        uint256 startGas = gasleft();

        require(subscribers[_cdpId].cdpId == _cdpId);

        require(hasEnoughLiquidity(_cdpId));

        MigrationType migType = subscribers[_cdpId].migType;

        if (migType == MigrationType.WITH_MKR) {
            DSProxyInterface(subscribers[_cdpId].owner).execute(CUSTOM_MIGRATION_ACTIONS_PROXY,
                abi.encodeWithSignature("migrate(address,bytes32)", SCD_MCD_MIGRATION, _cdpId));
        } else if (migType == MigrationType.WITH_CONVERSION) {
            DSProxyInterface(subscribers[_cdpId].owner).execute(CUSTOM_MIGRATION_ACTIONS_PROXY,
                abi.encodeWithSignature("migratePayFeeWithGem(address,bytes32,address,address,uint256)", SCD_MCD_MIGRATION, _cdpId, OTC_ADDRESS, MAKER_DAI_ADDRESS, uint(-1)));
        } else if (migType == MigrationType.WITH_DEBT) {
             DSProxyInterface(subscribers[_cdpId].owner).execute(CUSTOM_MIGRATION_ACTIONS_PROXY,
                abi.encodeWithSignature("migratePayFeeWithDebt(address,bytes32,address,uint256,uint256)", SCD_MCD_MIGRATION, _cdpId, OTC_ADDRESS, uint(-1), 0));
        }

        uint newVault = manager.last(subscribers[_cdpId].owner);

        uint currGasLeft = gasleft();
        uint gasCost = calcTxCost(startGas, currGasLeft);

        
        DSProxyInterface(subscribers[_cdpId].owner).execute(PROXY_ACTIONS,
                abi.encodeWithSignature("freeETH(address,address,uint256,uint256)", MANAGER_ADDRESS, ETH_JOIN_ADDRESS, newVault, gasCost));

        emit Migrated(_cdpId, newVault, subscribers[_cdpId].owner, block.timestamp);
    }

    function hasEnoughLiquidity(bytes32 _cdpId) public returns (bool) {
        uint migrationSai;
        uint cdpDebt;

        (, migrationSai) = vat.urns(SAI_ILK, SCD_MCD_MIGRATION);
        migrationSai = sub(migrationSai, 1000);

        cdpDebt = getDebt(_cdpId);

        return migrationSai > cdpDebt;
    }

    function getDebt(bytes32 _cdpId) public returns (uint cdpDebt) {
        ( , , cdpDebt, ) = tubContract.cups(_cdpId);
    }

    function calcTxCost(uint _startGas, uint _currGasLeft) public view returns(uint) {
        uint gasUsed = sub(_startGas, _currGasLeft);
        uint gasPrice = tx.gasprice > MAX_GAS_PRICE ? MAX_GAS_PRICE : tx.gasprice;

        gasUsed = add(gasUsed, 180000); 

        return mul(gasPrice, gasUsed);
    }

    function isOwner(address _owner, bytes32 _cdpId) internal view returns(bool) {
        require(tubContract.lad(_cdpId) == _owner);

        return true;
    }

    function() external payable {}

    


    
    
    function addCaller(address _caller) public onlyOwner {
        approvedCallers[_caller] = true;
    }

    
    
    function removeCaller(address _caller) public onlyOwner {
        approvedCallers[_caller] = false;
    }

    
    function getFee() public onlyOwner {
        owner.transfer(address(this).balance);
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"WETH_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CDAI_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"SAVINGS_LOGGER_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"SAI_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"migrationContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"changeIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tubContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PIP_INTERFACE_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_startGas","type":"uint256"},{"name":"_currGasLeft","type":"uint256"}],"name":"calcTxCost","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"KYBER_ETH_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"OTC_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DAI_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"IDAI_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"GAS_TOKEN_INTERFACE_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_cdpId","type":"bytes32"}],"name":"hasEnoughLiquidity","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"vat","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"VOX_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MANAGER_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MONITOR_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ETH2DAI_WRAPPER","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"manager","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"STUPID_EXCHANGE","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_cdpId","type":"bytes32"}],"name":"migrateFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"MIGRATION_ACTIONS_PROXY","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"SPOTTER_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_cdpId","type":"bytes32"},{"name":"_type","type":"uint8"}],"name":"subscribe","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"PROXY_REGISTRY_INTERFACE_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_caller","type":"address"}],"name":"addCaller","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"PROXY_ACTIONS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MKR_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"FACTORY_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"subscribers","outputs":[{"name":"cdpId","type":"bytes32"},{"name":"owner","type":"address"},{"name":"migType","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"LOGGER_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"SAVER_EXCHANGE_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MAKER_DAI_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DISCOUNT_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"approvedCallers","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"JUG_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"KYBER_WRAPPER","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"SUBSCRIPTION_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"COMPOUND_DAI_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UNISWAP_FACTORY","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"OASIS_WRAPPER","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PETH_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"KYBER_INTERFACE","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"getFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"VAT_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DAI_JOIN_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"WALLET_ID","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"SOLO_MARGIN_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UNISWAP_WRAPPER","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_cdpId","type":"bytes32"}],"name":"getDebt","outputs":[{"name":"cdpDebt","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"CUSTOM_MIGRATION_ACTIONS_PROXY","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_caller","type":"address"}],"name":"removeCaller","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TUB_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ETH_JOIN_ADDRESS","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"SCD_MCD_MIGRATION","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_cdpId","type":"bytes32"}],"name":"unsubscribe","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":false,"name":"cdpId","type":"bytes32"},{"indexed":false,"name":"migType","type":"uint8"}],"name":"Subscribed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":false,"name":"cdpId","type":"bytes32"}],"name":"Unsubscribed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldCdp","type":"bytes32"},{"indexed":true,"name":"newCdp","type":"uint256"},{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"Migrated","type":"event"}]

60806040527f534149000000000000000000000000000000000000000000000000000000000060001b600055640ba43b740060015573c73e0383f3aff3215e6f04b0331d58cecf0ab849600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073448a5065aebb8e423f0896e6c5d525c040f59af3600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507335d1b3f3d7966a1dfe207aa4514c12a259a0492b600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735ef30b9986345249bc32d8928b7ee64de9435e39600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561019457600080fd5b5033600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160046000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506133038061025f6000396000f3fe60806040526004361061038c5760003560e01c8063825ffd92116101dc578063c9fde27011610102578063ddaa293c116100a0578063f0d405e51161006f578063f0d405e5146115e4578063f1d253961461163b578063f835247214611692578063f8c60146146116e95761038c565b8063ddaa293c14611496578063dff01deb146114ed578063e8f8d8071461153c578063eef21cd2146115935761038c565b8063cf786f8f116100dc578063cf786f8f1461133a578063cfac57c714611391578063d3661fa5146113e8578063d36b907d1461143f5761038c565b8063c9fde27014611275578063ce9bde1d146112cc578063ced72f87146113235761038c565b8063a46a66c91161017a578063bc17effa11610149578063bc17effa14611119578063c16921b714611170578063c74c0fac146111c7578063c917c2d31461121e5761038c565b8063a46a66c914610fab578063a71975af14611002578063acbeba611461106b578063b175afa1146110c25761038c565b806393d8a7ec116101b657806393d8a7ec14610e0f57806394bfbe7414610ea657806394f0eb3d14610efd5780639da779e914610f545761038c565b8063825ffd9214610d0a5780638823151b14610d615780638da5cb5b14610db85761038c565b80633410a699116102c1578063502237d71161025f5780636a68de1e1161022e5780636a68de1e14610bc3578063728c009214610c0b578063747293fb14610c62578063819854e714610cb35761038c565b8063502237d714610a835780635cd9e16f14610ada57806362da5d9014610b155780636738929f14610b6c5761038c565b8063380d42441161029b578063380d42441461092757806342c1eb4e1461097e57806343fb75e8146109d5578063481c6a7514610a2c5761038c565b80633410a6991461082657806336569e771461087957806336e6da11146108d05761038c565b80631dab52b01161032e5780632a441f05116103085780632a441f05146106ca5780632a4c0a1a146107215780632d5eeb3f1461077857806332ac5cd2146107cf5761038c565b80631dab52b0146105c357806320ecf9b71461061a57806329f7fc9e146106735761038c565b80630bd4a73e1161036a5780630bd4a73e146104935780630fee1a20146104ea578063106b03391461054157806314d41c871461056c5761038c565b8063040141e51461038e5780630531b2ad146103e557806308204ea31461043c575b005b34801561039a57600080fd5b506103a3611724565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103f157600080fd5b506103fa61173c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561044857600080fd5b50610451611754565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561049f57600080fd5b506104a861176c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104f657600080fd5b506104ff611784565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561054d57600080fd5b506105566117aa565b6040518082815260200191505060405180910390f35b34801561057857600080fd5b506105816117b0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105cf57600080fd5b506105d86117d6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561062657600080fd5b5061065d6004803603604081101561063d57600080fd5b8101908080359060200190929190803590602001909291905050506117ee565b6040518082815260200191505060405180910390f35b34801561067f57600080fd5b50610688611837565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106d657600080fd5b506106df61184f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561072d57600080fd5b50610736611867565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561078457600080fd5b5061078d61187f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107db57600080fd5b506107e4611897565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561083257600080fd5b5061085f6004803603602081101561084957600080fd5b81019080803590602001909291905050506118aa565b604051808215151515815260200191505060405180910390f35b34801561088557600080fd5b5061088e6119db565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108dc57600080fd5b506108e5611a01565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561093357600080fd5b5061093c611a19565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561098a57600080fd5b50610993611a31565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109e157600080fd5b506109ea611a49565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a3857600080fd5b50610a41611a61565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a8f57600080fd5b50610a98611a87565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ae657600080fd5b50610b1360048036036020811015610afd57600080fd5b8101908080359060200190929190505050611a9f565b005b348015610b2157600080fd5b50610b2a612833565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b7857600080fd5b50610b8161284b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610bcf57600080fd5b50610c0960048036036040811015610be657600080fd5b8101908080359060200190929190803560ff169060200190929190505050612863565b005b348015610c1757600080fd5b50610c20612a2b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610c6e57600080fd5b50610cb160048036036020811015610c8557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a43565b005b348015610cbf57600080fd5b50610cc8612af8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d1657600080fd5b50610d1f612b10565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d6d57600080fd5b50610d76612b28565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610dc457600080fd5b50610dcd612b40565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610e1b57600080fd5b50610e4860048036036020811015610e3257600080fd5b8101908080359060200190929190505050612b66565b604051808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001826002811115610e9057fe5b60ff168152602001935050505060405180910390f35b348015610eb257600080fd5b50610ebb612bbd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610f0957600080fd5b50610f12612bd5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610f6057600080fd5b50610f69612bed565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610fb757600080fd5b50610fc0612c05565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561100e57600080fd5b506110516004803603602081101561102557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c1d565b604051808215151515815260200191505060405180910390f35b34801561107757600080fd5b50611080612c3d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156110ce57600080fd5b506110d7612c55565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561112557600080fd5b5061112e612c6d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561117c57600080fd5b50611185612c85565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156111d357600080fd5b506111dc612c9d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561122a57600080fd5b50611233612cb5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561128157600080fd5b5061128a612ccd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156112d857600080fd5b506112e1612ce5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561132f57600080fd5b50611338612cfd565b005b34801561134657600080fd5b5061134f612dd9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561139d57600080fd5b506113a6612df1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156113f457600080fd5b506113fd612e09565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561144b57600080fd5b50611454612e21565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156114a257600080fd5b506114ab612e39565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156114f957600080fd5b506115266004803603602081101561151057600080fd5b8101908080359060200190929190505050612e51565b6040518082815260200191505060405180910390f35b34801561154857600080fd5b50611551612f32565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561159f57600080fd5b506115e2600480360360208110156115b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f4a565b005b3480156115f057600080fd5b506115f9612fff565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561164757600080fd5b50611650613017565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561169e57600080fd5b506116a761302f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156116f557600080fd5b506117226004803603602081101561170c57600080fd5b8101908080359060200190929190505050613047565b005b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b73f5dce57282a584d2746faf1593d3121fcac444dc81565b7389b3635bd2bad145c6f92e82c9e83f06d565498481565b7389d24a6b4ccb1b6faa2625fe562bdd9a2326035981565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b73729d19f657bd0614b4985cf1d82531c67569197b81565b6000806117fb8484613186565b905060006001543a1161180e573a611812565b6001545b9050611821826202bf206131a0565b915061182d81836131ba565b9250505092915050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b7339755357759ce0d7f32dc8dc45414cca409ae24e81565b736b175474e89094c44da98b954eedeac495271d0f81565b7314094949152eddbfcd073717200da82fed8dc96081565b6eb3f879cb30fe243b4dfee438691c0481565b6000806000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632424be5c60005473c73e0383f3aff3215e6f04b0331d58cecf0ab8496040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050604080518083038186803b15801561196b57600080fd5b505afa15801561197f573d6000803e3d6000fd5b505050506040513d604081101561199557600080fd5b8101908080519060200190929190805190602001909291905050509050809250506119c2826103e8613186565b91506119cd84612e51565b905080821192505050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b739b0f70df76165442ca6092939132bbaea77f2d7a81565b735ef30b9986345249bc32d8928b7ee64de9435e3981565b733f4339816edef8d3d3970db2993e2e0ec601076081565b73d7bbb1777e13b6f535dec414f575b858ed300baf81565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b73863e41fe88288ebf3fcd91d8dbb679fb83fdfe1781565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611af557600080fd5b60005a905081600560008481526020019081526020016000206000015414611b1c57600080fd5b611b25826118aa565b611b2e57600080fd5b60006005600084815260200190815260200160002060010160149054906101000a900460ff16905060006002811115611b6357fe5b816002811115611b6f57fe5b1415611dc1576005600084815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631cff79cd73c2429ea56d3eb580c9bda2a8ee08fb8837cb400c73c73e0383f3aff3215e6f04b0331d58cecf0ab84986604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040527fd25d7cc0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611d33578082015181840152602081019050611d18565b50505050905090810190601f168015611d605780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b158015611d8057600080fd5b505af1158015611d94573d6000803e3d6000fd5b505050506040513d6020811015611daa57600080fd5b8101908080519060200190929190505050506123c8565b60016002811115611dce57fe5b816002811115611dda57fe5b14156120e4576005600084815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631cff79cd73c2429ea56d3eb580c9bda2a8ee08fb8837cb400c73c73e0383f3aff3215e6f04b0331d58cecf0ab849867339755357759ce0d7f32dc8dc45414cca409ae24e7389d24a6b4ccb1b6faa2625fe562bdd9a232603597fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff604051602401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001955050505050506040516020818303038152906040527fb3e2c80d000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561205657808201518184015260208101905061203b565b50505050905090810190601f1680156120835780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b1580156120a357600080fd5b505af11580156120b7573d6000803e3d6000fd5b505050506040513d60208110156120cd57600080fd5b8101908080519060200190929190505050506123c7565b6002808111156120f057fe5b8160028111156120fc57fe5b14156123c6576005600084815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631cff79cd73c2429ea56d3eb580c9bda2a8ee08fb8837cb400c73c73e0383f3aff3215e6f04b0331d58cecf0ab849867339755357759ce0d7f32dc8dc45414cca409ae24e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000604051602401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018260ff168152602001955050505050506040516020818303038152906040527f512da898000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561233c578082015181840152602081019050612321565b50505050905090810190601f1680156123695780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b15801561238957600080fd5b505af115801561239d573d6000803e3d6000fd5b505050506040513d60208110156123b357600080fd5b8101908080519060200190929190505050505b5b5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639a816f7d6005600087815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156124a157600080fd5b505af11580156124b5573d6000803e3d6000fd5b505050506040513d60208110156124cb57600080fd5b8101908080519060200190929190505050905060005a905060006124ef85836117ee565b90506005600087815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631cff79cd7382ecd135dce65fbc6dbdd0e4237e0af93ffd5038735ef30b9986345249bc32d8928b7ee64de9435e39732f0b23f53734252bda2277357e97e1517d6b042a8786604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019450505050506040516020818303038152906040527f7b5a3b43000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156126ff5780820151818401526020810190506126e4565b50505050905090810190601f16801561272c5780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b15801561274c57600080fd5b505af1158015612760573d6000803e3d6000fd5b505050506040513d602081101561277657600080fd5b81019080805190602001909291905050505082867f0a0994e6123c6933ee759886905757defe22c1f5d03cd1ee315cb6bde8d11ae8600560008a815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1642604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a3505050505050565b73e4b22d484958e582098a98229a24e8a43801b67481565b7365c79fcb50ca1594b025960e539ed7a9a6d434a381565b600073ffffffffffffffffffffffffffffffffffffffff166005600084815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128d257600080fd5b6128dc33836131e6565b6128e557600080fd5b60405180606001604052808381526020013373ffffffffffffffffffffffffffffffffffffffff16815260200182600281111561291e57fe5b815250600560008481526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160146101000a81548160ff021916908360028111156129a957fe5b02179055509050506003600081548092919060010191905055503373ffffffffffffffffffffffffffffffffffffffff167f69578285144d6f0cb02144d864dca2866b7500614111db91cd3785ec7f60ea98838360405180838152602001826002811115612a1357fe5b60ff1681526020019250505060405180910390a25050565b734678f0a6958e4d2bc4f1baf7bc52e8f3564f3fe481565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a9d57600080fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7382ecd135dce65fbc6dbdd0e4237e0af93ffd503881565b739f8f72aa9304c8b593d555f12ef6589cc3a579a281565b735a15566417e6c1c9546523066500bddbc53f88c781565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60056020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160149054906101000a900460ff16905083565b73ecf88e1cec2d2894a0295db3d86fe7ce4991e6df81565b73865b41584a22f8345fca4b71c42a1e7abcd67ecb81565b7389d24a6b4ccb1b6faa2625fe562bdd9a2326035981565b731b14e8d511c9a4395425314f849bd737baf8208f81565b60046020528060005260406000206000915054906101000a900460ff1681565b7319c0976f590d67707e62397c87829d896dc0f1f181565b738f337bd3b7f2b05d9a8dc8ac518584e83342489381565b7383152caa0d344a2fd428769529e2d490a88f439381565b7325a01a05c188dacbcf1d61af55d4a5b4021f7eed81565b73c0a47dfe034b400b47bdad5fecda2621de6c4d9581565b739abe2715d2d99246269b8e17e9d1b620e9bf655881565b73f53ad2c6851052a81b42133467480961b2321c0981565b73818e6fecd516ecc3849daf6845e3ec868087b75581565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d5757600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015612dd6573d6000803e3d6000fd5b50565b7335d1b3f3d7966a1dfe207aa4514c12a259a0492b81565b739759a6ac90977b93b58547b4a71c78317f391a2881565b73322d58b9e75a6918f7e7849aee0ff09369977e0881565b731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e81565b731e30124fde14533231216d95f7798cd0061e5cf881565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fdac0025836040518263ffffffff1660e01b815260040180828152602001915050608060405180830381600087803b158015612ec857600080fd5b505af1158015612edc573d6000803e3d6000fd5b505050506040513d6080811015612ef257600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190505050909192509091505080915050919050565b73c2429ea56d3eb580c9bda2a8ee08fb8837cb400c81565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612fa457600080fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b73448a5065aebb8e423f0896e6c5d525c040f59af381565b732f0b23f53734252bda2277357e97e1517d6b042a81565b73c73e0383f3aff3215e6f04b0331d58cecf0ab84981565b600073ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156130b757600080fd5b6130c133826131e6565b6130ca57600080fd5b600560008281526020019081526020016000206000808201600090556001820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160146101000a81549060ff021916905550506003600081548092919060010191905055503373ffffffffffffffffffffffffffffffffffffffff167fbd7d343a76cb95ae0e4391dff1b19b1894066d854717b1b63971cb7e4ad56410826040518082815260200191505060405180910390a250565b600082828403915081111561319a57600080fd5b92915050565b60008282840191508110156131b457600080fd5b92915050565b6000808214806131d757508282838502925082816131d457fe5b04145b6131e057600080fd5b92915050565b60008273ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663de5f5517846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561327257600080fd5b505afa158015613286573d6000803e3d6000fd5b505050506040513d602081101561329c57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16146132cd57600080fd5b600190509291505056fea165627a7a72305820c8d0ab7df222d45d51da0f3071bb0c18121855abb484797e921e8cb7d22ac35f0029

Deployed Bytecode

0x60806040526004361061038c5760003560e01c8063825ffd92116101dc578063c9fde27011610102578063ddaa293c116100a0578063f0d405e51161006f578063f0d405e5146115e4578063f1d253961461163b578063f835247214611692578063f8c60146146116e95761038c565b8063ddaa293c14611496578063dff01deb146114ed578063e8f8d8071461153c578063eef21cd2146115935761038c565b8063cf786f8f116100dc578063cf786f8f1461133a578063cfac57c714611391578063d3661fa5146113e8578063d36b907d1461143f5761038c565b8063c9fde27014611275578063ce9bde1d146112cc578063ced72f87146113235761038c565b8063a46a66c91161017a578063bc17effa11610149578063bc17effa14611119578063c16921b714611170578063c74c0fac146111c7578063c917c2d31461121e5761038c565b8063a46a66c914610fab578063a71975af14611002578063acbeba611461106b578063b175afa1146110c25761038c565b806393d8a7ec116101b657806393d8a7ec14610e0f57806394bfbe7414610ea657806394f0eb3d14610efd5780639da779e914610f545761038c565b8063825ffd9214610d0a5780638823151b14610d615780638da5cb5b14610db85761038c565b80633410a699116102c1578063502237d71161025f5780636a68de1e1161022e5780636a68de1e14610bc3578063728c009214610c0b578063747293fb14610c62578063819854e714610cb35761038c565b8063502237d714610a835780635cd9e16f14610ada57806362da5d9014610b155780636738929f14610b6c5761038c565b8063380d42441161029b578063380d42441461092757806342c1eb4e1461097e57806343fb75e8146109d5578063481c6a7514610a2c5761038c565b80633410a6991461082657806336569e771461087957806336e6da11146108d05761038c565b80631dab52b01161032e5780632a441f05116103085780632a441f05146106ca5780632a4c0a1a146107215780632d5eeb3f1461077857806332ac5cd2146107cf5761038c565b80631dab52b0146105c357806320ecf9b71461061a57806329f7fc9e146106735761038c565b80630bd4a73e1161036a5780630bd4a73e146104935780630fee1a20146104ea578063106b03391461054157806314d41c871461056c5761038c565b8063040141e51461038e5780630531b2ad146103e557806308204ea31461043c575b005b34801561039a57600080fd5b506103a3611724565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103f157600080fd5b506103fa61173c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561044857600080fd5b50610451611754565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561049f57600080fd5b506104a861176c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104f657600080fd5b506104ff611784565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561054d57600080fd5b506105566117aa565b6040518082815260200191505060405180910390f35b34801561057857600080fd5b506105816117b0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105cf57600080fd5b506105d86117d6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561062657600080fd5b5061065d6004803603604081101561063d57600080fd5b8101908080359060200190929190803590602001909291905050506117ee565b6040518082815260200191505060405180910390f35b34801561067f57600080fd5b50610688611837565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106d657600080fd5b506106df61184f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561072d57600080fd5b50610736611867565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561078457600080fd5b5061078d61187f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107db57600080fd5b506107e4611897565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561083257600080fd5b5061085f6004803603602081101561084957600080fd5b81019080803590602001909291905050506118aa565b604051808215151515815260200191505060405180910390f35b34801561088557600080fd5b5061088e6119db565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156108dc57600080fd5b506108e5611a01565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561093357600080fd5b5061093c611a19565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561098a57600080fd5b50610993611a31565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156109e157600080fd5b506109ea611a49565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a3857600080fd5b50610a41611a61565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a8f57600080fd5b50610a98611a87565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ae657600080fd5b50610b1360048036036020811015610afd57600080fd5b8101908080359060200190929190505050611a9f565b005b348015610b2157600080fd5b50610b2a612833565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b7857600080fd5b50610b8161284b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610bcf57600080fd5b50610c0960048036036040811015610be657600080fd5b8101908080359060200190929190803560ff169060200190929190505050612863565b005b348015610c1757600080fd5b50610c20612a2b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610c6e57600080fd5b50610cb160048036036020811015610c8557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a43565b005b348015610cbf57600080fd5b50610cc8612af8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d1657600080fd5b50610d1f612b10565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d6d57600080fd5b50610d76612b28565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610dc457600080fd5b50610dcd612b40565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610e1b57600080fd5b50610e4860048036036020811015610e3257600080fd5b8101908080359060200190929190505050612b66565b604051808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001826002811115610e9057fe5b60ff168152602001935050505060405180910390f35b348015610eb257600080fd5b50610ebb612bbd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610f0957600080fd5b50610f12612bd5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610f6057600080fd5b50610f69612bed565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610fb757600080fd5b50610fc0612c05565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561100e57600080fd5b506110516004803603602081101561102557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c1d565b604051808215151515815260200191505060405180910390f35b34801561107757600080fd5b50611080612c3d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156110ce57600080fd5b506110d7612c55565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561112557600080fd5b5061112e612c6d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561117c57600080fd5b50611185612c85565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156111d357600080fd5b506111dc612c9d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561122a57600080fd5b50611233612cb5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561128157600080fd5b5061128a612ccd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156112d857600080fd5b506112e1612ce5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561132f57600080fd5b50611338612cfd565b005b34801561134657600080fd5b5061134f612dd9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561139d57600080fd5b506113a6612df1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156113f457600080fd5b506113fd612e09565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561144b57600080fd5b50611454612e21565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156114a257600080fd5b506114ab612e39565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156114f957600080fd5b506115266004803603602081101561151057600080fd5b8101908080359060200190929190505050612e51565b6040518082815260200191505060405180910390f35b34801561154857600080fd5b50611551612f32565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561159f57600080fd5b506115e2600480360360208110156115b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f4a565b005b3480156115f057600080fd5b506115f9612fff565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561164757600080fd5b50611650613017565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561169e57600080fd5b506116a761302f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156116f557600080fd5b506117226004803603602081101561170c57600080fd5b8101908080359060200190929190505050613047565b005b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b73f5dce57282a584d2746faf1593d3121fcac444dc81565b7389b3635bd2bad145c6f92e82c9e83f06d565498481565b7389d24a6b4ccb1b6faa2625fe562bdd9a2326035981565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b73729d19f657bd0614b4985cf1d82531c67569197b81565b6000806117fb8484613186565b905060006001543a1161180e573a611812565b6001545b9050611821826202bf206131a0565b915061182d81836131ba565b9250505092915050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b7339755357759ce0d7f32dc8dc45414cca409ae24e81565b736b175474e89094c44da98b954eedeac495271d0f81565b7314094949152eddbfcd073717200da82fed8dc96081565b6eb3f879cb30fe243b4dfee438691c0481565b6000806000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632424be5c60005473c73e0383f3aff3215e6f04b0331d58cecf0ab8496040518363ffffffff1660e01b8152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050604080518083038186803b15801561196b57600080fd5b505afa15801561197f573d6000803e3d6000fd5b505050506040513d604081101561199557600080fd5b8101908080519060200190929190805190602001909291905050509050809250506119c2826103e8613186565b91506119cd84612e51565b905080821192505050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b739b0f70df76165442ca6092939132bbaea77f2d7a81565b735ef30b9986345249bc32d8928b7ee64de9435e3981565b733f4339816edef8d3d3970db2993e2e0ec601076081565b73d7bbb1777e13b6f535dec414f575b858ed300baf81565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b73863e41fe88288ebf3fcd91d8dbb679fb83fdfe1781565b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611af557600080fd5b60005a905081600560008481526020019081526020016000206000015414611b1c57600080fd5b611b25826118aa565b611b2e57600080fd5b60006005600084815260200190815260200160002060010160149054906101000a900460ff16905060006002811115611b6357fe5b816002811115611b6f57fe5b1415611dc1576005600084815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631cff79cd73c2429ea56d3eb580c9bda2a8ee08fb8837cb400c73c73e0383f3aff3215e6f04b0331d58cecf0ab84986604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040527fd25d7cc0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611d33578082015181840152602081019050611d18565b50505050905090810190601f168015611d605780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b158015611d8057600080fd5b505af1158015611d94573d6000803e3d6000fd5b505050506040513d6020811015611daa57600080fd5b8101908080519060200190929190505050506123c8565b60016002811115611dce57fe5b816002811115611dda57fe5b14156120e4576005600084815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631cff79cd73c2429ea56d3eb580c9bda2a8ee08fb8837cb400c73c73e0383f3aff3215e6f04b0331d58cecf0ab849867339755357759ce0d7f32dc8dc45414cca409ae24e7389d24a6b4ccb1b6faa2625fe562bdd9a232603597fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff604051602401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001955050505050506040516020818303038152906040527fb3e2c80d000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561205657808201518184015260208101905061203b565b50505050905090810190601f1680156120835780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b1580156120a357600080fd5b505af11580156120b7573d6000803e3d6000fd5b505050506040513d60208110156120cd57600080fd5b8101908080519060200190929190505050506123c7565b6002808111156120f057fe5b8160028111156120fc57fe5b14156123c6576005600084815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631cff79cd73c2429ea56d3eb580c9bda2a8ee08fb8837cb400c73c73e0383f3aff3215e6f04b0331d58cecf0ab849867339755357759ce0d7f32dc8dc45414cca409ae24e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000604051602401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018260ff168152602001955050505050506040516020818303038152906040527f512da898000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561233c578082015181840152602081019050612321565b50505050905090810190601f1680156123695780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b15801561238957600080fd5b505af115801561239d573d6000803e3d6000fd5b505050506040513d60208110156123b357600080fd5b8101908080519060200190929190505050505b5b5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639a816f7d6005600087815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1580156124a157600080fd5b505af11580156124b5573d6000803e3d6000fd5b505050506040513d60208110156124cb57600080fd5b8101908080519060200190929190505050905060005a905060006124ef85836117ee565b90506005600087815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631cff79cd7382ecd135dce65fbc6dbdd0e4237e0af93ffd5038735ef30b9986345249bc32d8928b7ee64de9435e39732f0b23f53734252bda2277357e97e1517d6b042a8786604051602401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019450505050506040516020818303038152906040527f7b5a3b43000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156126ff5780820151818401526020810190506126e4565b50505050905090810190601f16801561272c5780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b15801561274c57600080fd5b505af1158015612760573d6000803e3d6000fd5b505050506040513d602081101561277657600080fd5b81019080805190602001909291905050505082867f0a0994e6123c6933ee759886905757defe22c1f5d03cd1ee315cb6bde8d11ae8600560008a815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1642604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a3505050505050565b73e4b22d484958e582098a98229a24e8a43801b67481565b7365c79fcb50ca1594b025960e539ed7a9a6d434a381565b600073ffffffffffffffffffffffffffffffffffffffff166005600084815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128d257600080fd5b6128dc33836131e6565b6128e557600080fd5b60405180606001604052808381526020013373ffffffffffffffffffffffffffffffffffffffff16815260200182600281111561291e57fe5b815250600560008481526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160146101000a81548160ff021916908360028111156129a957fe5b02179055509050506003600081548092919060010191905055503373ffffffffffffffffffffffffffffffffffffffff167f69578285144d6f0cb02144d864dca2866b7500614111db91cd3785ec7f60ea98838360405180838152602001826002811115612a1357fe5b60ff1681526020019250505060405180910390a25050565b734678f0a6958e4d2bc4f1baf7bc52e8f3564f3fe481565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a9d57600080fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b7382ecd135dce65fbc6dbdd0e4237e0af93ffd503881565b739f8f72aa9304c8b593d555f12ef6589cc3a579a281565b735a15566417e6c1c9546523066500bddbc53f88c781565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60056020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160149054906101000a900460ff16905083565b73ecf88e1cec2d2894a0295db3d86fe7ce4991e6df81565b73865b41584a22f8345fca4b71c42a1e7abcd67ecb81565b7389d24a6b4ccb1b6faa2625fe562bdd9a2326035981565b731b14e8d511c9a4395425314f849bd737baf8208f81565b60046020528060005260406000206000915054906101000a900460ff1681565b7319c0976f590d67707e62397c87829d896dc0f1f181565b738f337bd3b7f2b05d9a8dc8ac518584e83342489381565b7383152caa0d344a2fd428769529e2d490a88f439381565b7325a01a05c188dacbcf1d61af55d4a5b4021f7eed81565b73c0a47dfe034b400b47bdad5fecda2621de6c4d9581565b739abe2715d2d99246269b8e17e9d1b620e9bf655881565b73f53ad2c6851052a81b42133467480961b2321c0981565b73818e6fecd516ecc3849daf6845e3ec868087b75581565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d5757600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015612dd6573d6000803e3d6000fd5b50565b7335d1b3f3d7966a1dfe207aa4514c12a259a0492b81565b739759a6ac90977b93b58547b4a71c78317f391a2881565b73322d58b9e75a6918f7e7849aee0ff09369977e0881565b731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e81565b731e30124fde14533231216d95f7798cd0061e5cf881565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fdac0025836040518263ffffffff1660e01b815260040180828152602001915050608060405180830381600087803b158015612ec857600080fd5b505af1158015612edc573d6000803e3d6000fd5b505050506040513d6080811015612ef257600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190505050909192509091505080915050919050565b73c2429ea56d3eb580c9bda2a8ee08fb8837cb400c81565b3373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612fa457600080fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b73448a5065aebb8e423f0896e6c5d525c040f59af381565b732f0b23f53734252bda2277357e97e1517d6b042a81565b73c73e0383f3aff3215e6f04b0331d58cecf0ab84981565b600073ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156130b757600080fd5b6130c133826131e6565b6130ca57600080fd5b600560008281526020019081526020016000206000808201600090556001820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160146101000a81549060ff021916905550506003600081548092919060010191905055503373ffffffffffffffffffffffffffffffffffffffff167fbd7d343a76cb95ae0e4391dff1b19b1894066d854717b1b63971cb7e4ad56410826040518082815260200191505060405180910390a250565b600082828403915081111561319a57600080fd5b92915050565b60008282840191508110156131b457600080fd5b92915050565b6000808214806131d757508282838502925082816131d457fe5b04145b6131e057600080fd5b92915050565b60008273ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663de5f5517846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561327257600080fd5b505afa158015613286573d6000803e3d6000fd5b505050506040513d602081101561329c57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16146132cd57600080fd5b600190509291505056fea165627a7a72305820c8d0ab7df222d45d51da0f3071bb0c18121855abb484797e921e8cb7d22ac35f0029

Swarm Source

bzzr://c8d0ab7df222d45d51da0f3071bb0c18121855abb484797e921e8cb7d22ac35f

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ 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.