BNB Chain

0x6afe99e0105af17b0aa24a9fd88169c22682eaa8

Decompiled Solidity recovered from this contract's runtime bytecode. Best-effort reconstruction — confirm behaviour against on-chain state.

Decompilation outputBNB Chain · 0x6afe99e0…2682eaa820.5 KB87.4 s
Share
2,729 lines · Click a variable or keyword to highlight its references · Click a line number to copy its link; Shift-click to copy a block link
//decompiled by exvvul decompiler tool [email protected] https://x.com/exvulsec// SPDX-License-Identifier: MITpragma solidity >=0.8.0;interface IDesolexERC20 {    function balanceOf(address account) external view returns (uint256 balance);    function transfer(address recipient, uint256 amount) external returns (bool success);    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool success);    function decimals() external view returns (uint8 value);}contract DesolexContract {    uint256 public constant MAX_INT = 115792089237316195423570985008687907853269984665640564039457584007913129639935;    uint256 public constant DEFAULT_ADMIN_ROLE = 0;        uint256 stor_0; // STORAGE[0x0]    uint256[] array_1; // STORAGE[0x1]    uint256[] array_2; // STORAGE[0x2]    bytes32[] array_4; // STORAGE[0x4]    uint256[] array_6; // STORAGE[0x6]    mapping(bytes32 => uint256) public getRoleMemberCount; // STORAGE[0x65]    bool public paused; // STORAGE[0x97] bytes 0 to 0    bool stor_c9_0_0; // STORAGE[0xc9] bytes 0 to 0    address[] public stakerAddresses; // STORAGE[0xfb]    uint256[] public stakerAmounts; // STORAGE[0xfc]    address stor_fd; // STORAGE[0xfd]    address public rewardsAddress; // STORAGE[0xfe]    uint256 public maxStakingAmount; // STORAGE[0xff]    uint256 public currentTotalStake; // STORAGE[0x100]    uint256 public unstakingPeriod; // STORAGE[0x101]    uint256 public apy; // STORAGE[0x102]    uint256 stor_103; // STORAGE[0x103]    uint256 public rewardsDistributed; // STORAGE[0x104]    uint256 public rewardsWithdrawn; // STORAGE[0x105]    uint256 public totalRewardsDistributed; // STORAGE[0x106]    mapping(address => uint256) mapping_107; // STORAGE[0x107]    mapping(address => uint256) mapping_108; // STORAGE[0x108]    uint256[] public feeDurations; // STORAGE[0x109]    uint256[] public feeBurnPcts; // STORAGE[0x10a]    uint256[] public feeRewardPcts; // STORAGE[0x10b]    address public feeRewardAddress; // STORAGE[0x10c]    uint256 rewardsDistributedLastDate2; // STORAGE[0x10d]    mapping(address => bool) mapping_expr_bg;    mapping(address => uint256) mapping_expr_bj;    mapping(address => uint256) mapping_expr_bk;    mapping(address => uint256) mapping_expr_bp;    mapping(bytes32 => bytes32) mapping_expr_dr; // DESOLEX_RAW_STORAGE: mapping key 0: address [VerifiedAbi] vs bytes32 [VerifiedAbi] (ambiguous)    mapping(address => bool) mapping_expr_es;    mapping(address => bool) mapping_expr_eu;    mapping(address => bool) mapping_expr_k;    bytes32 stor_expr_a;    uint256 stor_expr_ad;    bytes32 stor_expr_ae;    bytes32 stor_expr_af;    bytes32 stor_expr_ag;    bool stor_expr_ah;    uint256 stor_expr_ai;    bytes32 stor_expr_aj;    uint256 stor_expr_al;    uint256 stor_expr_am;    uint256 stor_expr_an;    uint256 stor_expr_ao;    uint256 stor_expr_ap;    uint256 stor_expr_at;    bytes32 stor_expr_au;    bytes32 stor_expr_av;    bytes32 stor_expr_ax;    bool stor_expr_b;    bytes32 stor_expr_ba;    uint256 stor_expr_bb;    bytes32 stor_expr_bc;    bytes32 stor_expr_bd;    bytes32 stor_expr_be;    uint256 stor_expr_bh;    address stor_expr_bi;    uint256 stor_expr_bl;    uint256 stor_expr_bm;    bytes32 stor_expr_bn;    uint256 stor_expr_bo;    bytes32 stor_expr_bq;    bytes32 stor_expr_bu;    bytes32 stor_expr_bv;    bytes32 stor_expr_bw;    bytes32 stor_expr_bx;    bytes32 stor_expr_by;    bytes32 stor_expr_bz;    uint256 stor_expr_c;    bytes32 stor_expr_cc;    bool stor_expr_cd;    uint256 stor_expr_ce;    uint256 stor_expr_cf;    uint256 stor_expr_cj;    uint256 stor_expr_ck;    bytes32 stor_expr_cl;    bytes32 stor_expr_cm;    bytes32 stor_expr_cr;    uint256 stor_expr_cx;    uint256 stor_expr_cy;    bytes32 stor_expr_cz;    uint256 stor_expr_d;    bytes32 stor_expr_da;    uint256 stor_expr_dp;    address stor_expr_dq;    uint256 stor_expr_dw;    uint256 stor_expr_dx;    uint256 stor_expr_ec;    uint256 stor_expr_ed;    uint256 stor_expr_ee;    bytes32 stor_expr_eh;    uint256 stor_expr_en;    uint256 stor_expr_eo;    uint256 stor_expr_ev;    bytes32 stor_expr_ew;    bytes32 stor_expr_ex;    uint256 stor_expr_ey;    uint256 stor_expr_ez;    bytes32 stor_expr_fb;    bytes32 stor_expr_fc;    bytes32 stor_expr_fd;    bytes32 stor_expr_fe;    bytes32 stor_expr_ff;    bytes32 stor_expr_fg;    uint256 stor_expr_fk;    bytes32 stor_expr_fl;    uint256 stor_expr_fm;    uint256 stor_expr_fo;    bytes32 stor_expr_m;        event RoleRevoked(bytes32 indexed, address indexed, address indexed);    event Paused(address);    event RewardsDistributed(uint256);    event RewardsWithdrawn(address indexed, uint256);    event Unstaked(address indexed, uint256, uint256);    event Staked(address indexed, uint256);    event RoleGranted(bytes32 indexed, address indexed, address indexed);    event Withdrawn(address indexed, uint256, uint256);    event Unpaused(address);    event RewardsStaked(address indexed, uint256);    fallback() external {        // Synthetic compatibility routes preserve original selectors for unresolved names.        if ((msg.data.length >= 4) && (msg.sig == 0x9010d07c)) {            // Route to Unknown_9010d07c(uint256,uint256) after replacing only msg.sig.            __desolexSelectorShim(uint32(0xb656a175));            return;        }        revert();    }            function infoWalletFees(address arg0) public view returns (bytes memory) {        internal_694(arg0);        return abi.encodePacked(value15, value14);    }        function setMaxStakingAmount(uint256 newMaxStakingAmount) public payable {        var_a = var_a;        require(mapping_expr_k[msg.sender], "[Validation] The caller must have owner role to set max staking amount");        maxStakingAmount = newMaxStakingAmount;    }        function getRoleAdmin(bytes32 role) public view returns (uint256) {        return stor_expr_m;    }        function setAPY(uint256 newApy) public payable {        var_a = var_a;        require(mapping_expr_k[msg.sender], "[Validation] The caller must have owner role to set APY");        apy = newApy;    }        function setTokenAddress(address newAddress) public payable {        require((0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 != newAddress.codehash && newAddress.codehash), "[Validation] The address does not contain a contract");        require(paused, "Pausable: not paused");        var_a = var_a;        require(mapping_expr_k[msg.sender], "[Validation] The caller must have owner role to set token address");        require(newAddress != address(0), "[Validation] Invalid swap token address");        stor_fd = newAddress;    }        function getStakersRewards(uint256 arg0, uint256 arg1) public view returns (bytes memory) {        if (!(stakerAddresses.length > 0x0 && arg0 < stakerAddresses.length)) {            uint256 value0 = 0;            uint256 value1 = 0x80;            uint256 var_a;            uint256 value2 = (var_a + 0x60) + 0x20;            while (true) {                if (!(value0 < var_d)) {                    break;                }                value0 = 0x01 + value0;                value1 = 0x20 + value1;                value2 = 0x20 + value2;            }            uint256 value3 = 0;            uint256 value4 = 0x80;            uint256 value5 = ((var_a + 0x60) + 0x20) + 0x20;            while (true) {                if (!(value3 < var_d)) {                    break;                }                value3 = 0x01 + value3;                value4 = 0x20 + value4;                value5 = 0x20 + value5;            }            value3 = 0;            value4 = 0x80;            value5 = (((var_a + 0x60) + 0x20) + 0x20) + 0x20;            while (true) {                if (!(value3 < var_d)) {                    break;                }                value3 = 0x01 + value3;                value4 = 0x20 + value4;                value5 = 0x20 + value5;            }            return abi.encodePacked(0x60, value2 - var_a, value5 - var_a, var_d, var_d, var_d);        } else {            var_a = 0x40 + var_a;            if (arg0 > stakerAddresses.length) {                uint256 value6 = 0;                while (true) {                    if (value6 >= var_a.length) {                        break;                    }                    value6 = 0x20 + value6;                    revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");                }                if (value6 > var_a.length) {                }            }            uint256 value7 = arg1;            if ((stakerAddresses.length - arg0) < arg1) {                var_a = 0x40 + var_a;                if (arg0 > stakerAddresses.length) {                    uint256 value6 = 0;                    while (true) {                        if (value6 >= var_a.length) {                            break;                        }                        value6 = 0x20 + value6;                        revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");                    }                    if (value6 > var_a.length) {                    }                }                value7 = stakerAddresses.length - arg0;            }            require(value7 <= 0xffffffffffffffff);            var_a = var_a + (0x20 + (0x20 * value7));            uint256 value8 = value7;            if (value7 != 0x0) {                value8 = (value7 * 0x20) + (0x20 + var_a);            }            require(value7 <= 0xffffffffffffffff);            var_a = var_a + (0x20 + (0x20 * value7));            uint256 value9 = value7;            if (value7 != 0x0) {                value9 = (value7 * 0x20) + (0x20 + var_a);            }            require(value7 <= 0xffffffffffffffff);            var_a = var_a + (0x20 + (0x20 * value7));            uint256 value10 = value7;            if (value7 != 0x0) {                var_t = msg.data[4:4];                value10 = (value7 * 0x20) + (0x20 + var_a);            }            uint256 value11 = 0;            while (true) {                if (value11 >= value7) {                    break;                }                require(value11 + arg0 >= arg0, "SafeMath: addition overflow");                if ((value11 + arg0) >= stakerAddresses.length) {                    break;                }                if (value11 >= var_a.length) {                    break;                }                if ((value11 + arg0) >= stakerAmounts.length) {                    break;                }                if (value11 >= var_a.length) {                    break;                }                if (value11 >= var_a.length) {                    break;                }                var_a = var_a + 0xe0;                uint256 value14 = var_ad - var_ac;                if (var_ae != 0x0) {                    var_a = 0x40 + var_a;                    if (!(var_ac <= var_ad)) {                        uint256 value6 = 0;                        uint256 value12;                        while (true) {                            value12 = value6;                            if (value6 >= var_a.length) {                                break;                            }                            if (0x20 + value6 >= var_a.length) {                                break;                            }                            value6 = 0x20 + (0x20 + value6);                            value12 = 0x20 + value6;                        }                        if (!(value12 <= var_a.length)) {                        }                        revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");                    }                } else {                    var_a = 0x40 + var_a;                    if (!(var_ac <= stor_103)) {                        uint256 value6 = 0;                        uint256 value13;                        while (true) {                            value13 = value6;                            if (value6 >= var_a.length) {                                break;                            }                            if (0x20 + value6 >= var_a.length) {                                break;                            }                            value6 = 0x20 + (0x20 + value6);                            value13 = 0x20 + value6;                        }                        if (!(value13 <= var_a.length)) {                        }                        revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");                    }                    value14 = stor_103 - var_ac;                }                uint256 value15 = value14 * var_t;                if (var_t != 0x0) {                    require(value14 * var_t / var_t == value14, "SafeMath: multiplication overflow");                } else {                    value15 = 0;                }                var_a = 0x40 + var_a;                if (value11 >= var_a.length) {                    break;                }                value11 = 0x01 + value11;            }            uint256 value0 = 0;            uint256 value1 = 0x80;            uint256 value2 = (var_a + 0x60) + 0x20;            while (true) {                if (!(value0 < var_d)) {                    break;                }                value0 = 0x01 + value0;                value1 = 0x20 + value1;                value2 = 0x20 + value2;            }            uint256 value3 = 0;            uint256 value4 = 0x80;            uint256 value5 = ((var_a + 0x60) + 0x20) + 0x20;            while (true) {                if (!(value3 < var_d)) {                    break;                }                value3 = 0x01 + value3;                value4 = 0x20 + value4;                value5 = 0x20 + value5;            }            value3 = 0;            value4 = 0x80;            value5 = (((var_a + 0x60) + 0x20) + 0x20) + 0x20;            while (true) {                if (!(value3 < var_d)) {                    break;                }                value3 = 0x01 + value3;                value4 = 0x20 + value4;                value5 = 0x20 + value5;            }            return abi.encodePacked(0x60, value2 - var_a, value5 - var_a, var_a.length, var_a.length, var_a.length);        }    }        function unstake(uint256 arg0) public payable {        require(stor_c9_0_0, "ReentrancyGuard: reentrant call");        stor_c9_0_0 = false;        require(!paused, "Pausable: paused");        require(arg0 > 0x0, "[Unstake] Invalid unstake amount");        require(!(arg0 > stor_expr_ad), "[Unstake] amount exceed the staked amount");        require((0xff & stor_expr_af && stor_expr_ag != 0x0), "[Unstake] There is no staked amount for this account");        require(!(stor_expr_ah), "[Unstake] You have already initiated unstaking");        require(!(stor_expr_ai), "[Unstake] You have already initiated unstaking");        stor_expr_ah = block.timestamp;        stor_expr_aj = stor_103;        stor_expr_ai = arg0;        mapping_108[msg.sender] = block.timestamp;        if (!(arg0 == stor_expr_al)) {            if (!(stor_expr_ai > stor_expr_al)) {                var_c = 0x40 + var_c;                if (!(0x01 <= stor_expr_ao)) {                    uint256 value0 = 0;                    while (true) {                        if (value0 >= var_c.length) {                            break;                        }                        value0 = 0x20 + value0;                        revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");                    }                    if (value0 > var_c.length) {                    }                }                if ((stor_expr_ao - 0x01) < stakerAmounts.length) {                    stor_expr_ap = stor_expr_an - stor_expr_am;                    if (arg0 <= currentTotalStake) {                        currentTotalStake = currentTotalStake - arg0;                        if (unstakingPeriod == 0) {                            var_c = 0x40 + var_c;                            bool flag1 = !(0 == var_ag);                            if (0 == var_ag) {                                flag1 = !(!(var_ah));                            }                            require(flag1, "[Withdraw] You must unstake first");                            uint256 value1 = var_ai;                            if (var_ai != 0x0) {                                value1 = !(!(var_ah));                            }                            require(value1 != 0x0, "[Withdraw] There is no staked amount for this account");                            require(!(unstakingPeriod > (block.timestamp - var_ag)), "[Withdraw] The unstaking period did not pass");                        } else {                            emit Unstaked(msg.sender, arg0, block.timestamp);                            stor_c9_0_0 = true;                        }                    } else {                        uint256 value0 = 0;                        while (true) {                            if (value0 >= var_c.length) {                                break;                            }                            value0 = 0x20 + value0;                            revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");                        }                        if (value0 > var_c.length) {                        }                    }                }            } else {                uint256 value0 = 0;                while (true) {                    if (value0 >= var_c.length) {                        break;                    }                    value0 = 0x20 + value0;                    revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");                }                if (value0 > var_c.length) {                }            }        } else {            var_c = 0x40 + var_c;            if (0x01 > stakerAddresses.length) {                uint256 value0 = 0;                while (true) {                    if (value0 >= var_c.length) {                        break;                    }                    value0 = 0x20 + value0;                    revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");                }                if (value0 > var_c.length) {                }            }            if ((stakerAddresses.length - 0x01) < stakerAddresses.length) {                var_c = 0x40 + var_c;                if (0x01 > stakerAmounts.length) {                    uint256 value0 = 0;                    while (true) {                        if (value0 >= var_c.length) {                            break;                        }                        value0 = 0x20 + value0;                        revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");                    }                    if (value0 > var_c.length) {                    }                }                if ((stakerAmounts.length - 0x01) < stakerAmounts.length) {                    mapping_107[address(stor_expr_ax)] = mapping_107[msg.sender];                    var_c = 0x40 + var_c;                    if (0x01 > mapping_107[msg.sender]) {                        uint256 value0 = 0;                        while (true) {                            if (value0 >= var_c.length) {                                break;                            }                            value0 = 0x20 + value0;                            revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");                        }                        if (value0 > var_c.length) {                        }                    }                    if ((mapping_107[msg.sender] - 0x01) < stakerAddresses.length) {                        stor_expr_ba = (address(stor_expr_ax & (0xffffffffffffffffffffffffffffffffffffffff))) | (0xffffffffffffffffffffffff0000000000000000000000000000000000000000 & stor_expr_ba);                        var_c = 0x40 + var_c;                        if (0x01 > mapping_107[msg.sender]) {                            uint256 value0 = 0;                            while (true) {                                if (value0 >= var_c.length) {                                    break;                                }                                value0 = 0x20 + value0;                                revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");                            }                            if (value0 > var_c.length) {                            }                        }                        if ((mapping_107[msg.sender] - 0x01) < stakerAmounts.length) {                            stor_expr_bb = stor_expr_bc;                            if (stakerAddresses.length != 0x0) {                                stor_expr_bd = (0xffffffffffffffffffffffff0000000000000000000000000000000000000000) & stor_expr_bd;                                stakerAddresses.length = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + stakerAddresses.length;                                if (stakerAmounts.length != 0x0) {                                    stor_expr_be = 0;                                    stakerAmounts.length = stakerAmounts.length - 0x01;                                    if (!(arg0 > currentTotalStake)) {                                        currentTotalStake = currentTotalStake - arg0;                                        if (unstakingPeriod == 0) {                                            var_c = 0xe0 + var_c;                                            var_c = 0x40 + var_c;                                            var_c = 0x40 + var_c;                                            bool flag2 = !(0 == var_ag);                                            if (0 == var_ag) {                                                flag2 = !(!(var_ah));                                            }                                            require(flag2, "[Withdraw] You must unstake first");                                            uint256 value2 = var_ai;                                            if (var_ai != 0x0) {                                                value2 = !(!(var_ah));                                            }                                            require(value2 != 0x0, "[Withdraw] There is no staked amount for this account");                                            require(!(unstakingPeriod > (block.timestamp - var_ag)), "[Withdraw] The unstaking period did not pass");                                        } else {                                            emit Unstaked(msg.sender, arg0, block.timestamp);                                            stor_c9_0_0 = true;                                        }                                    } else {                                        uint256 value0 = 0;                                        while (true) {                                            if (value0 >= var_c.length) {                                                break;                                            }                                            value0 = 0x20 + value0;                                            revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");                                        }                                        if (value0 > var_c.length) {                                        }                                    }                                }                            }                        }                    }                }            }        }    }        function grantRole(bytes32 role, address account) public payable {        require(mapping_expr_k[msg.sender], "AccessControl: sender must be an admin to grant");        uint256 value0 = 0;        if (!mapping_expr_bg[account]) {            stor_expr_bh = 0x01 + stor_expr_bh;            stor_expr_bi = account;            mapping_expr_bj[account] = stor_expr_bh;            flag0 = true;        }        if (flag0) {            emit RoleGranted(role, account, msg.sender);        }    }        function renounceRole(bytes32 role, address account) public payable {        internal_ec0(account, role);    }        function info() public payable returns (bool) {        require(stor_fd.code.length != 0x0);        (bool success0, bytes memory returnData0) = stor_fd.symbol(); // staticcall        require(success0);        uint256 var_b;        var_b = var_b + (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 & (returnData0.length + 0x1f));        require(!(((var_b + returnData0.length) - var_b) < 0x20));        require(!(var_b.length > 0xffffffffffffffff));        require(((var_b + var_b.length) + 0x1f) < (var_b + returnData0.length));        require(!(var_c > 0xffffffffffffffff));        require(!(((0x20 + (var_b + (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 & (var_d + 0x1f)))) < var_b) | ((0x20 + (var_b + (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 & (var_d + 0x1f)))) > 0xffffffffffffffff)));        var_b = 0x20 + (var_b + (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 & (var_d + 0x1f)));        require(!((var_b + returnData0.length) < (0x20 + (var_d + (var_b + var_b.length)))));        uint256 value0 = 0;        while (true) {            if (value0 >= var_d) {                break;            }            value0 = 0x20 + value0;            require(stor_fd.code.length != 0x0);            uint8 tokenDecimals = IDesolexERC20(stor_fd).decimals();            require(tokenDecimals == (bytes1(tokenDecimals)));            uint256 value0 = 0;            while (true) {                if (!(value0 < var_b.length)) {                    break;                }                value0 = 0x20 + value0;                return abi.encodePacked(stor_fd, 0x0120, bytes1(tokenDecimals), stakerAddresses.length, currentTotalStake, apy, unstakingPeriod, !(!(paused)), totalRewardsDistributed, var_b.length);            }            if (value0 > var_b.length) {            }        }        if (value0 > var_d) {        }    }        function withdraw() public payable {        require(stor_c9_0_0, "ReentrancyGuard: reentrant call");        stor_c9_0_0 = false;        require(!paused, "Pausable: paused");        uint256 var_a;        var_a = 0xe0 + var_a;        var_a = 0x40 + var_a;        var_a = 0x40 + var_a;        bool flag0 = !(0 == var_v);        if (0 == var_v) {            flag0 = !(!(var_w));        }        require(flag0, "[Withdraw] You must unstake first");        uint256 value0 = var_x;        if (var_x != 0x0) {            value0 = !(!(var_w));        }        require(value0 != 0x0, "[Withdraw] There is no staked amount for this account");        require(!(unstakingPeriod > (block.timestamp - var_v)), "[Withdraw] The unstaking period did not pass");        if (0 == var_y) {            uint256 value1 = var_z - var_aa;            if (var_ab != 0x0) {                var_a = 0x40 + var_a;                if (!(var_aa <= var_z)) {                    if (0x0 >= var_a.length) {                        if (0 > var_a.length) {                        }                    } else {                    }                    revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");                }            } else {                var_a = 0x40 + var_a;                if (!(var_aa <= stor_103)) {                    if (0x0 >= var_a.length) {                        if (0 > var_a.length) {                        }                    } else {                    }                    revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");                }                value1 = stor_103 - var_aa;            }            uint256 value2 = value1 * var_ak;            if (var_ak != 0x0) {                require(value1 * var_ak / var_ak == value1, "SafeMath: multiplication overflow");            } else {                value2 = 0;            }            var_a = 0x40 + var_a;            require(!(var_aq < var_y), "[withdraw] Invalid withdraw amount specified");            uint256 value3 = bytes1(stor_expr_cc);            if (bytes1(stor_expr_cc)) {                value3 = (!(!(stor_expr_cd))) ? 1 : 0;            }            uint256 value4 = (value3) ? 1 : 0;            if (value3 != 0x0) {                value4 = (!(var_ar < stor_expr_ce)) ? 1 : 0;            }            uint256 value5 = 0;            uint256 value6 = 0;            uint256 value7 = 0;            if (!(value4 == 0x0)) {                var_a = 0x40 + var_a;                if (!(stor_expr_cf <= var_ar)) {                    if (0x0 >= var_a.length) {                        if (0 > var_a.length) {                        }                    } else {                    }                    revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");                }                uint256 value43 = 0;                uint256 value44 = 0;                if (0 < feeDurations.length) {                    if (((var_ar - stor_expr_ce) < feeDurations[0]) && ((0 < feeBurnPcts.length) && (0 < feeRewardPcts.length))) {                    }                    value43 = feeRewardPcts[0];                    value44 = feeBurnPcts[0];                }                value5 = value43;                value6 = value44;                value7 = var_ar - stor_expr_cj;            }            uint256 value8 = value6 * var_y;            if (var_y != 0x0) {                require(value6 * var_y / var_y == value6, "SafeMath: multiplication overflow");            } else {                value8 = 0;            }            uint256 value9 = value5 * var_y;            if (var_y != 0x0) {                require(value5 * var_y / var_y == value5, "SafeMath: multiplication overflow");            } else {                value9 = 0;            }            if (!(var_y < var_aq)) {                mapping_107[msg.sender] = 0;                stor_expr_al = 0;                stor_expr_at = 0;                stor_expr_ah = 0;                stor_expr_au = 0;                stor_expr_aj = 0;                stor_expr_av = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00) & stor_expr_av;            } else {                var_a = 0x40 + var_a;                if (!(var_y <= stor_expr_ck)) {                    if (0x0 >= var_a.length) {                        if (0 > var_a.length) {                        }                    } else {                    }                    revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");                }                stor_expr_ad = stor_expr_ad - var_y;                stor_expr_cl = 0;                stor_expr_cm = stor_103;            }            if (value8 / 0x2710 != 0x0) {                require(stor_fd.code.length != 0x0);                (bool success0, bytes memory returnData0) = stor_fd.burn(value8 / 0x2710); // call                require(success0);            }            if ((value9 / 0x2710 > 0x0) && ((0xffffffffffffffffffffffffffffffffffffffff & feeRewardAddress) != 0x0)) {                require(stor_fd.code.length != 0x0);                (bool success1, bytes memory returnData1) = stor_fd.call(abi.encodeWithSelector(bytes4(0xa9059cbb), address(feeRewardAddress), (value9 / 0x2710))); // call transfer                require(success1);                var_a = var_a + ((returnData1.length + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0));                require((var_a + returnData1.length) - var_a >= 0x20);                require(var_bg == var_bg);                require(var_a.length, "[Withdraw] Something went wrong transferring to rewards address");            }            var_a = 0x40 + var_a;            if (!((value8 / 0x2710) <= var_y)) {                if (0x0 >= var_a.length) {                    if (0 > var_a.length) {                    }                } else {                }                revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");            }            var_a = 0x40 + var_a;            if (!((value9 / 0x2710) <= (var_y - (value8 / 0x2710)))) {                if (0x0 >= var_a.length) {                    if (0 > var_a.length) {                    }                } else {                }                revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");            }            require(stor_fd.code.length != 0x0);            bool transferSucceeded = IDesolexERC20(stor_fd).transfer(msg.sender, ((var_y - (value8 / 0x2710)) - (value9 / 0x2710)));            require(transferSucceeded, "[Withdraw] Something went wrong while transferring your stake");            if (value2 / 0xde0b6b3a7640000 != 0x0) {                require((value2 / 0x0de0b6b3a7640000) + rewardsWithdrawn >= rewardsWithdrawn, "SafeMath: addition overflow");                rewardsWithdrawn = (value2 / 0x0de0b6b3a7640000) + rewardsWithdrawn;                require(stor_fd.code.length != 0x0);                bool transferSucceeded1 = IDesolexERC20(stor_fd).transferFrom(address(rewardsAddress), msg.sender, (value2 / 0x0de0b6b3a7640000));                require(transferSucceeded1, "[Withdraw] Something went wrong while transferring your reward");            }            stor_expr_cr = 0;            mapping_108[msg.sender] = 0;            emit Withdrawn(msg.sender, var_y, (value2 / 0x0de0b6b3a7640000));            stor_c9_0_0 = true;        }        uint256 value12 = var_z - var_aa;        if (var_ab != 0x0) {            var_a = 0x40 + var_a;            if (!(var_aa <= var_z)) {                uint256 value10 = 0;                if (0 < var_a.length) {                    if (0x20 < var_a.length) {                    }                    value10 = 0x20;                }                if (!(value10 <= var_a.length)) {                }                revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");            }        } else {            var_a = 0x40 + var_a;            if (!(var_aa <= stor_103)) {                uint256 value11 = 0;                if (0 < var_a.length) {                    if (0x20 < var_a.length) {                    }                    value11 = 0x20;                }                if (!(value11 <= var_a.length)) {                }                revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");            }            value12 = stor_103 - var_aa;        }        uint256 value13 = value12 * var_ak;        if (var_ak != 0x0) {            require(value12 * var_ak / var_ak == value12, "SafeMath: multiplication overflow");        } else {            value13 = 0;        }        var_a = 0x40 + var_a;        require(!(var_y < var_y), "[withdraw] Invalid withdraw amount specified");        uint256 value15 = bytes1(stor_expr_cc);        if (bytes1(stor_expr_cc)) {            value15 = (!(!(stor_expr_cd))) ? 1 : 0;        }        uint256 value16 = value15;        if (value15 != 0x0) {            value16 = (!(var_v < stor_expr_ce)) ? 1 : 0;        }        uint256 value27 = 0;        uint256 value28 = 0;        uint256 value29 = 0;        if (!(value16 == 0x0)) {            var_a = 0x40 + var_a;            if (!(stor_expr_cf <= var_ar)) {                uint256 value17 = 0;                if (0 < var_a.length) {                    if (0x20 < var_a.length) {                    }                    value17 = 0x20;                }                if (!(value17 <= var_a.length)) {                }                revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");            }            uint256 value34 = 0;            uint256 value35 = 0;            if (0 < feeDurations.length) {                if (!((var_ar - stor_expr_ce) < feeDurations[0])) {                    uint256 value18 = 0;                    uint256 value19 = 0;                    if (0x01 < feeDurations.length) {                        if (((var_ar - stor_expr_cf) < feeDurations[0x01]) && (((0x01 + 0x01) < feeBurnPcts.length) && ((0x01 + 0x01) < feeRewardPcts.length))) {                        }                        value18 = feeRewardPcts[0x01];                        value19 = feeBurnPcts[0x01];                    }                    uint256 value20 = value19 * var_y;                    if (var_y != 0x0) {                        require(value19 * var_y / var_y == value19, "SafeMath: multiplication overflow");                    } else {                        value20 = 0;                    }                    uint256 value21 = value18 * var_y;                    if (var_y != 0x0) {                        require(value18 * var_y / var_y == value18, "SafeMath: multiplication overflow");                    } else {                        value21 = 0;                    }                    if (!(var_y < var_y)) {                        mapping_107[msg.sender] = 0;                        stor_expr_al = 0;                        stor_expr_at = 0;                        stor_expr_ah = 0;                        stor_expr_au = 0;                        stor_expr_aj = 0;                        stor_expr_av = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00) & stor_expr_av;                    } else {                        var_a = 0x40 + var_a;                        if (!(var_y <= stor_expr_ck)) {                            uint256 value22 = 0;                            if (0 < var_a.length) {                                if (0x20 < var_a.length) {                                }                                value22 = 0x20;                            }                            if (!(value22 <= var_a.length)) {                            }                            revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");                        }                        stor_expr_ad = stor_expr_ad - var_y;                        stor_expr_cl = 0;                        stor_expr_cm = stor_103;                    }                    if (value20 / 0x2710 != 0x0) {                        require(stor_fd.code.length != 0x0);                        (bool success4, bytes memory returnData4) = stor_fd.burn(value8 / 0x2710); // call                        require(success4);                    }                    if ((value21 / 0x2710 > 0x0) && ((0xffffffffffffffffffffffffffffffffffffffff & feeRewardAddress) != 0x0)) {                        require(stor_fd.code.length != 0x0);                        (bool success5, bytes memory returnData5) = stor_fd.call(abi.encodeWithSelector(bytes4(0xa9059cbb), address(feeRewardAddress), (value9 / 0x2710))); // call transfer                        require(success5);                        var_a = var_a + ((returnData5.length + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0));                        require((var_a + returnData5.length) - var_a >= 0x20);                        require(var_bg == var_bg);                        require(var_a.length, "[Withdraw] Something went wrong transferring to rewards address");                    }                    var_a = 0x40 + var_a;                    if (!((value20 / 0x2710) <= var_y)) {                        uint256 value23 = 0;                        if (0 < var_a.length) {                            if (0x20 < var_a.length) {                            }                            value23 = 0x20;                        }                        if (!(value23 <= var_a.length)) {                        }                        revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");                    }                    var_a = 0x40 + var_a;                    if (!((value21 / 0x2710) <= (var_y - (value20 / 0x2710)))) {                        uint256 value24 = 0;                        if (0 < var_a.length) {                            if (0x20 < var_a.length) {                            }                            value24 = 0x20;                        }                        if (!(value24 <= var_a.length)) {                        }                        revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");                    }                    require(stor_fd.code.length != 0x0);                    bool transferSucceeded2 = IDesolexERC20(stor_fd).transfer(msg.sender, ((var_y - (value8 / 0x2710)) - (value9 / 0x2710)));                    require(transferSucceeded2, "[Withdraw] Something went wrong while transferring your stake");                    if ((value13 / 0x0de0b6b3a7640000) != 0x0) {                        require((value13 / 0x0de0b6b3a7640000) + rewardsWithdrawn >= rewardsWithdrawn, "SafeMath: addition overflow");                        rewardsWithdrawn = (value13 / 0x0de0b6b3a7640000) + rewardsWithdrawn;                        require(stor_fd.code.length != 0x0);                        bool transferSucceeded3 = IDesolexERC20(stor_fd).transferFrom(address(rewardsAddress), msg.sender, (value2 / 0x0de0b6b3a7640000));                        require(transferSucceeded3, "[Withdraw] Something went wrong while transferring your reward");                    }                    stor_expr_cr = 0;                    mapping_108[msg.sender] = 0;                    emit Withdrawn(msg.sender, var_y, (value2 / 0x0de0b6b3a7640000));                    stor_c9_0_0 = true;                } else {                    if ((0 < feeBurnPcts.length) && (0 < feeRewardPcts.length)) {                    }                }                value34 = feeRewardPcts[0];                value35 = feeBurnPcts[0];            }            value27 = value34;            value28 = value35;            value29 = var_v - stor_expr_cx;        }        uint256 value30 = value28 * var_y;        if (var_y != 0x0) {            require(value28 * var_y / var_y == value28, "SafeMath: multiplication overflow");        } else {            value30 = 0;        }        uint256 value31 = value27 * var_y;        if (var_y != 0x0) {            require(value27 * var_y / var_y == value27, "SafeMath: multiplication overflow");        } else {            value31 = 0;        }        if (!(var_y < var_y)) {            mapping_107[address(msg.sender)] = 0;            stor_expr_bu = 0;            stor_expr_bv = 0;            stor_expr_bw = 0;            stor_expr_bx = 0;            stor_expr_by = 0;            stor_expr_bz = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00) & stor_expr_bz;        } else {            var_a = 0x40 + var_a;            if (!(var_y <= stor_expr_cy)) {                uint256 value32 = 0;                if (0 < var_a.length) {                    if (0x20 < var_a.length) {                    }                    value32 = 0x20;                }                if (!(value32 <= var_a.length)) {                }                revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");            }            stor_expr_cy = stor_expr_cy - var_y;            stor_expr_cz = 0;            stor_expr_da = stor_103;        }        if (value30 / 0x2710 != 0) {            require(stor_fd.code.length != 0x0);            (bool success8, bytes memory returnData8) = stor_fd.burn(value8 / 0x2710); // call            require(success8);        }    }        function unpause() public payable {        require(mapping_expr_k[msg.sender], "SwapStakingContract: must have pauser role to unpause");        require(paused, "Pausable: not paused");        paused = false;        emit Unpaused(msg.sender);    }        function getStakers() public view returns (bytes memory) {        uint256 var_a;        var_a = var_a + (0x20 + (0x20 * stakerAddresses.length));        uint256 value2 = stakerAddresses.length;        uint256 value3 = 0xfb;        uint256 value4 = 0x20 + var_a;        if (stakerAddresses.length != 0x0) {            uint256 value0 = 0x20 + (0x20 + var_a);            uint256 value1 = keccak256(abi.encode(0xfb)) + 0x01;            while (true) {                if ((0x20 + var_a) + (0x20 * stakerAddresses.length) <= value0) {                    break;                }                value0 = 0x20 + value0;                value1 = value1 + 0x01;            }            value2 = (value0) ? 1 : 0;            value3 = (value1) ? 1 : 0;            value4 = (0x20 + var_a) + (0x20 * stakerAddresses.length);        }        var_a = var_a + (0x20 + (0x20 * stakerAmounts.length));        uint256 value7 = stakerAmounts.length;        uint256 value8 = 0xfc;        uint256 value9 = 0x20 + var_a;        if (stakerAmounts.length != 0x0) {            uint256 value5 = 0x20 + (0x20 + var_a);            uint256 value6 = 0x01 + keccak256(abi.encode(0xfc));            while (true) {                if ((0x20 + var_a) + (0x20 * stakerAmounts.length) <= value5) {                    break;                }                value5 = 0x20 + value5;                value6 = 0x01 + value6;            }            value7 = (value5) ? 1 : 0;            value8 = value6;            value9 = (0x20 + var_a) + (0x20 * stakerAmounts.length);        }        uint256 value10 = 0;        uint256 value11 = var_a + 0x20;        uint256 value12 = (var_a + 0x40) + 0x20;        while (true) {            if (!(value10 < var_a.length)) {                break;            }            value10 = 0x01 + value10;            value11 = 0x20 + value11;            value12 = 0x20 + value12;        }        uint256 value13 = 0;        uint256 value14 = var_a + 0x20;        uint256 value15 = ((var_a + 0x40) + 0x20) + 0x20;        while (true) {            if (!(value13 < var_a.length)) {                break;            }            value13 = 0x01 + value13;            value14 = 0x20 + value14;            value15 = 0x20 + value15;            return abi.encodePacked(0x40, value12 - var_a, var_a.length, var_a.length);        }    }        function setUnstakingPeriod(uint256 newUnstakingPeriod) public payable {        var_a = var_a;        require(mapping_expr_k[msg.sender], "[Validation] The caller must have owner role to set unstaking period");        unstakingPeriod = newUnstakingPeriod;    }        function distributeRewards(uint256 arg0) public payable {        require(stor_c9_0_0, "ReentrancyGuard: reentrant call");        stor_c9_0_0 = false;        require(!paused, "Pausable: paused");        require(mapping_expr_k[msg.sender], "[Validation] The caller must have rewards distributor role");        apy = arg0;        require(!paused, "Pausable: paused");        require(mapping_expr_k[msg.sender], "[Validation] The caller must have rewards distributor role");        require(currentTotalStake > 0, "[Validation] not enough total stake accumulated");        require(stor_fd.code.length != 0x0);        (bool success0, bytes memory returnData0) = stor_fd.staticcall(abi.encodeWithSelector(bytes4(0x70a08231), address(__desolex_internal_3da8_2f0c_arg1))); // staticcall balanceOf        require(success0);        require(__desolex_internal_3cce_2f5c_arg1 - __desolex_internal_3cce_2f5c_arg0 >= 0x20);        uint256 value0 = abi.decode(returnData0, (uint256));        require(value0 > 0, "[Validation] not enough rewards accumulated");        require(__desolex_internal_2558_2f9d_arg0 + __desolex_internal_2558_2f9d_arg1 >= __desolex_internal_2558_2f9d_arg1, "SafeMath: addition overflow");        if (__desolex_internal_2ae0_363_arg1 <= __desolex_internal_2ae0_363_arg0) {            if (__desolex_internal_3387_2fc3_arg1 != 0x0) {                require(__desolex_internal_3387_2fc3_arg0 * __desolex_internal_3387_2fc3_arg1 / __desolex_internal_3387_2fc3_arg1 == __desolex_internal_3387_2fc3_arg0, "SafeMath: multiplication overflow");            }            var_e = 0x40 + var_e;            if (__desolex_internal_265f_363_arg1 != 0x0) {                require(!(((__desolex_internal_265f_363_arg0 / __desolex_internal_265f_363_arg1) + stor_103) < stor_103), "SafeMath: addition overflow");                stor_103 = (__desolex_internal_265f_363_arg0 / __desolex_internal_265f_363_arg1) + stor_103;                rewardsDistributed = __desolex_internal_265f_363_arg5;                rewardsWithdrawn = 0;                require(!((__desolex_internal_265f_363_arg4 + totalRewardsDistributed) < totalRewardsDistributed), "SafeMath: addition overflow");                totalRewardsDistributed = __desolex_internal_265f_363_arg4 + totalRewardsDistributed;                rewardsDistributedLastDate2 = block.timestamp;                emit RewardsDistributed(__desolex_internal_265f_363_arg4);                stor_c9_0_0 = true;            } else {                uint256 value1 = 0;                while (true) {                    if (!(value1 < var_e.length)) {                        break;                    }                    value1 = 0x20 + value1;                }                if (value1 > var_e.length) {                }                revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");            }        } else {            uint256 value1 = 0;            while (true) {                if (!(value1 < var_e.length)) {                    break;                }                value1 = 0x20 + value1;                revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");            }            if (value1 > __desolex_internal_513c_3d91_arg2) {            }        }    }        function setRewardAddress(address newAddress) public payable {        require(paused, "Pausable: not paused");        var_a = var_a;        require(mapping_expr_k[msg.sender], "[Validation] The caller must have owner role to set rewards address");        require(newAddress != address(0), "[Validation] _rewardsAddress is the zero address");        require(!(rewardsAddress == newAddress), "[Validation] _rewardsAddress is already set to given address");        rewardsAddress = newAddress;    }        function rewardsDistributedLastDate() public view returns (uint256) {        return rewardsDistributedLastDate2;    }        function calculateFees(address arg0, uint256 arg1) public view returns (bytes memory) {        uint256 value0 = bytes1(stor_expr_a);        if (bytes1(stor_expr_a)) {            value0 = (!(!(stor_expr_b))) ? 1 : 0;        }        uint256 value1 = (value0) ? 1 : 0;        if (value0 != 0x0) {            value1 = (!(arg1 < stor_expr_c)) ? 1 : 0;        }        if (value1 == 0x0) {            return abi.encodePacked(0, 0, 0);        } else {            uint256 var_f;            var_f = 0x40 + var_f;            if (stor_expr_c > arg1) {                uint256 value2 = 0;                while (true) {                    if (value2 >= var_f.length) {                        break;                    }                    value2 = 0x20 + value2;                    revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");                }                if (value2 > var_f.length) {                }            }            uint256 value3 = 0;            while (true) {                if (value3 >= feeDurations.length) {                    break;                }                if (value3 >= feeDurations.length) {                    break;                }                if ((arg1 - stor_expr_c) < feeDurations[value3]) {                    if ((value3 < feeBurnPcts.length) && (value3 < feeRewardPcts.length)) {                        return abi.encodePacked(arg1 - stor_expr_c, feeBurnPcts[value3], feeRewardPcts[value3]);                    }                    break;                }                value3 = 0x01 + value3;            }            return abi.encodePacked(arg1 - stor_expr_c, 0, 0);        }    }        function pause() public payable {        require(mapping_expr_k[msg.sender], "SwapStakingContract: must have pauser role to pause");        require(!paused, "Pausable: paused");        paused = true;        emit Paused(msg.sender);    }        function getStakersRange(uint256 arg0, uint256 arg1) public view returns (bytes memory) {        if (!(stakerAddresses.length > 0x0 && arg0 < stakerAddresses.length)) {            uint256 value0 = 0;            uint256 value1 = 0x80;            uint256 value2 = (var_a + 0x40) + 0x20;            while (true) {                if (!(value0 < var_d)) {                    break;                }                value0 = 0x01 + value0;                value1 = 0x20 + value1;                value2 = 0x20 + value2;            }            uint256 value3 = 0;            uint256 value4 = 0x80;            uint256 value5 = ((var_a + 0x40) + 0x20) + 0x20;            while (true) {                if (!(value3 < var_d)) {                    break;                }                value3 = 0x01 + value3;                value4 = 0x20 + value4;                value5 = 0x20 + value5;                return abi.encodePacked(0x40, value2 - var_a, var_d, var_d);            }        } else {            if (!(arg0 > stakerAddresses.length)) {                uint256 value7 = arg1;                if ((stakerAddresses.length - arg0) < arg1) {                    var_a = 0x40 + var_a;                    if (arg0 > stakerAddresses.length) {                        uint256 value6 = 0;                        while (true) {                            if (!(value6 < var_a.length)) {                                break;                            }                            value6 = 0x20 + value6;                        }                        if (0x20 > var_a.length) {                        }                        revert("SafeMath: subtraction overflow");                    }                    value7 = stakerAddresses.length - arg0;                }                require(value7 <= 0xffffffffffffffff);                var_a = var_a + (0x20 + (0x20 * value7));                uint256 value8 = value7;                if (value7 != 0x0) {                    value8 = (value7 * 0x20) + (0x20 + var_a);                }                require(value7 <= 0xffffffffffffffff);                var_a = var_a + (0x20 + (0x20 * value7));                uint256 value9 = value7;                if (value7 != 0x0) {                    value9 = (value7 * 0x20) + (0x20 + var_a);                }                uint256 value10 = 0;                while (true) {                    if (value10 >= value7) {                        break;                    }                    if ((value10 + arg0) < arg0) {                        revert("SafeMath: addition overflow");                        break;                    }                    if ((value10 + arg0) >= stakerAddresses.length) {                        break;                    }                    if (value10 >= var_a.length) {                        break;                    }                    if ((value10 + arg0) >= stakerAmounts.length) {                        break;                    }                    if (value10 >= var_a.length) {                        break;                    }                    value10 = 0x01 + value10;                }                uint256 value0 = 0;                uint256 value1 = 0x80;                uint256 value2 = (var_a + 0x40) + 0x20;                while (true) {                    if (!(value0 < var_d)) {                        break;                    }                    value0 = 0x01 + value0;                    value1 = 0x20 + value1;                    value2 = 0x20 + value2;                }                uint256 value3 = 0;                uint256 value4 = 0x80;                uint256 value5 = ((var_a + 0x40) + 0x20) + 0x20;                while (true) {                    if (!(value3 < var_d)) {                        break;                    }                    value3 = 0x01 + value3;                    value4 = 0x20 + value4;                    value5 = 0x20 + value5;                    return abi.encodePacked(0x40, value2 - var_a, var_a.length, var_a.length);                }            } else {                uint256 value6 = 0;                while (true) {                    if (!(value6 < var_a.length)) {                        break;                    }                    value6 = 0x20 + value6;                }                if (0x20 > var_a.length) {                }                revert("SafeMath: subtraction overflow");            }        }    }        function Unknown_9010d07c(uint256 arg0, uint256 arg1) public view returns (address) {        require(arg1 < getRoleMemberCount[arg0], "EnumerableSet: index out of bounds");        if (arg1 < stor_expr_dp) {        }        return stor_expr_dq;    }        function hasRole(bytes32 role, address account) public view returns (bool) {        return !(!(mapping_expr_dr[account]));    }        function stake(uint256 amount) public payable {        internal_1740(amount);    }        function infoWallet(address arg0) public view returns (bytes memory) {        internal_1b58(arg0);        return abi.encodePacked(value12, value11, value10, value9, value8, value7);    }        function transfer(uint256 arg0, address arg1) public payable {        var_a = var_a;        require(mapping_expr_k[msg.sender], "[Validation] The caller must have owner role");        require(!(address(this).balance < arg0), "[Validation] Insufficent native token balance to transfer amount.");        require(!(address(this).balance < arg0), "Address: insufficient balance");        (bool success0, bytes memory returnData0) = arg1.call{ value: arg0 }(""); // call        uint256 value0 = 0x60;        if (returnData0.length != 0) {            uint256 var_c;            var_c = var_c + ((returnData0.length + 0x3f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0));            value0 = var_c;        }        require(success0, "Address: unable to send value, recipient may have reverted");    }        function withdrawRewards() public payable {        internal_1d1f();    }        function stakeRewards() public payable {        internal_1fad();    }        function initialize(address arg0, address arg1, uint256 arg2, uint256 arg3, uint256 arg4) public payable {        require((0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 != arg0.codehash && arg0.codehash), "[Validation] The address does not contain a contract");        bool value0 = bytes1(stor_0 / 0x0100);        if (!(bytes1(stor_0 / 0x0100))) {            value0 = !address(this).code.length;        }        require((value0 != 0x0 || (0xff & stor_0) == 0x0), "Contract instance has already been initialized");        if (!(bytes1(stor_0 / 0x0100))) {            stor_0 = 0x01 | ((0x0100 | (stor_0 & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff))) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00));        }        require(arg0 != address(0), "[Validation] Invalid swap token address");        require(arg2 > 0x0, "[Validation] _maxStakingAmount has to be larger than 0");        bool value1 = bytes1(stor_0 / 0x0100);        if (!(bytes1(stor_0 / 0x0100))) {            value1 = (address(this).code.length == 0x0) ? 1 : 0;        }        require((value1 != 0x0 || (0xff & stor_0) == 0x0), "Contract instance has already been initialized");        if (!(bytes1(stor_0 / 0x0100))) {            stor_0 = 0x01 | ((0x0100 | (stor_0 & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff))) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00));        }        if (!(bytes1(stor_0 / 0x0100))) {            stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;        }        bool value2 = bytes1(stor_0 / 0x0100);        if (!(bytes1(stor_0 / 0x0100))) {            value2 = (address(this).code.length == 0x0) ? 1 : 0;        }        require((value2 != 0x0 || (0xff & stor_0) == 0x0), "Contract instance has already been initialized");        if (!(bytes1(stor_0 / 0x0100))) {            stor_0 = 0x01 | ((0x0100 | (stor_0 & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff))) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00));        }        if (!(bytes1(stor_0 / 0x0100))) {            stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;        }        bool value3 = bytes1(stor_0 / 0x0100);        if (!(bytes1(stor_0 / 0x0100))) {            value3 = (address(this).code.length == 0x0) ? 1 : 0;        }        require((value3 != 0x0 || (0xff & stor_0) == 0x0), "Contract instance has already been initialized");        if (!(bytes1(stor_0 / 0x0100))) {            stor_0 = 0x01 | ((0x0100 | (stor_0 & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff))) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00));        }        paused = false;        if (!(bytes1(stor_0 / 0x0100))) {            stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;        }        bool value4 = bytes1(stor_0 / 0x0100);        if (!(bytes1(stor_0 / 0x0100))) {            value4 = (address(this).code.length == 0x0) ? 1 : 0;        }        require((value4 != 0x0 || (0xff & stor_0) == 0x0), "Contract instance has already been initialized");        if (!(bytes1(stor_0 / 0x0100))) {            stor_0 = 0x01 | ((0x0100 | (stor_0 & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff))) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00));        }        stor_c9_0_0 = true;        if (!(bytes1(stor_0 / 0x0100))) {            stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;        }        bool value5 = bytes1(stor_0 / 0x0100);        if (!(bytes1(stor_0 / 0x0100))) {            value5 = (address(this).code.length == 0x0) ? 1 : 0;        }        require((value5 != 0x0 || (0xff & stor_0) == 0x0), "Contract instance has already been initialized");        if (!(bytes1(stor_0 / 0x0100))) {            stor_0 = 0x01 | ((0x0100 | (stor_0 & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff))) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00));        }        uint256 value6 = 0;        if (!mapping_expr_bg[msg.sender]) {            stor_expr_bh = 0x01 + stor_expr_bh;            stor_expr_bi = msg.sender;            mapping_expr_bj[msg.sender] = stor_expr_bh;            flag7 = true;        }        if (flag7) {            emit RoleGranted(0, msg.sender, msg.sender);        }        uint256 value7 = 0;        if (!mapping_expr_bg[msg.sender]) {            stor_expr_bh = 0x01 + stor_expr_bh;            stor_expr_bi = msg.sender;            mapping_expr_bj[msg.sender] = stor_expr_bh;            flag8 = true;        }        if (flag8) {            emit RoleGranted(0, msg.sender, msg.sender);        }        var_a = var_a;        uint256 value8 = 0;        if (!mapping_expr_bg[msg.sender]) {            stor_expr_bh = 0x01 + stor_expr_bh;            stor_expr_bi = msg.sender;            mapping_expr_bj[msg.sender] = stor_expr_bh;            flag9 = true;        }        if (flag9) {            emit RoleGranted(0, msg.sender, msg.sender);        }        uint256 value9 = 0;        if (!mapping_expr_bg[msg.sender]) {            stor_expr_bh = 0x01 + stor_expr_bh;            stor_expr_bi = msg.sender;            mapping_expr_bj[msg.sender] = stor_expr_bh;            flag10 = true;        }        if (flag10) {            emit RoleGranted(0, msg.sender, msg.sender);        }        if (!(bytes1(stor_0 / 0x0100))) {            stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;        }        require(mapping_expr_es[msg.sender], "SwapStakingContract: must have pauser role to pause");        require(!paused, "Pausable: paused");        paused = true;        emit Paused(msg.sender);        require(paused, "Pausable: not paused");        var_a = var_a;        require(mapping_expr_eu[msg.sender], "[Validation] The caller must have owner role to set rewards address");        require(arg1 != address(0), "[Validation] _rewardsAddress is the zero address");        require(!(rewardsAddress == arg1), "[Validation] _rewardsAddress is already set to given address");        rewardsAddress = arg1;        stor_fd = arg0;        maxStakingAmount = arg2;        apy = arg3;        unstakingPeriod = arg4;        uint256 var_c;        var_c = var_c + 0x80;        stor_expr_ev = 0x04;        if (var_c + 0x20 * 0x04 <= var_c) {            if ((keccak256(abi.encode(0x0109)) + stor_expr_ev) > keccak256(abi.encode(0x0109))) {                stor_expr_ew = 0;                if (__desolex_internal_39d3_38b2_arg1 > __desolex_internal_39d3_38b2_arg0) {                    stor_expr_ex = 0;                }                stor_expr_ey = 0x04;                if (var_c + 0x20 * 0x04 <= var_c) {                    if ((keccak256(abi.encode(0x0109)) + stor_expr_ev) > keccak256(abi.encode(0x0109))) {                        stor_expr_ew = 0;                        if (__desolex_internal_39d3_38b2_arg1 > __desolex_internal_39d3_38b2_arg0) {                            stor_expr_ex = 0;                        }                        stor_expr_ez = 0x04;                        if (var_c + 0x20 * 0x04 <= var_c) {                            if ((keccak256(abi.encode(0x0109)) + stor_expr_ev) <= keccak256(abi.encode(0x0109))) {                                feeRewardAddress = arg1;                                rewardsDistributedLastDate2 = block.timestamp;                            } else {                                stor_expr_ew = 0;                                if ((keccak256(abi.encode(0x0109)) + stor_expr_ev) <= 0x1 + keccak256(abi.encode(0x0109))) {                                    feeRewardAddress = arg1;                                    rewardsDistributedLastDate2 = block.timestamp;                                    if (!(bytes1(stor_0 / 0x0100))) {                                        stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;                                    }                                } else {                                    array_1[keccak256(abi.encode(0x0109))] = 0;                                }                            }                        }                    }                } else {                    stor_expr_fb = uint16(var_p);                    if (var_c + 0x20 * 0x04 > 0x20 + var_c) {                        stor_expr_fe = uint16(var_s);                    } else if ((keccak256(abi.encode(0x0109)) + stor_expr_ev) > keccak256(abi.encode(0x0109))) {                        stor_expr_ew = 0;                        if (__desolex_internal_39d3_38b2_arg1 > __desolex_internal_39d3_38b2_arg0) {                            stor_expr_ex = 0;                        }                        stor_expr_ez = 0x04;                        if (var_c + 0x20 * 0x04 <= var_c) {                            if ((keccak256(abi.encode(0x0109)) + stor_expr_ev) <= keccak256(abi.encode(0x0109))) {                                feeRewardAddress = arg1;                                rewardsDistributedLastDate2 = block.timestamp;                                if (!(bytes1(stor_0 / 0x0100))) {                                    stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;                                }                            } else {                                stor_expr_ew = 0;                                if ((keccak256(abi.encode(0x0109)) + stor_expr_ev) <= 0x1 + keccak256(abi.encode(0x0109))) {                                    feeRewardAddress = arg1;                                    rewardsDistributedLastDate2 = block.timestamp;                                    if (!(bytes1(stor_0 / 0x0100))) {                                        stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;                                    }                                } else {                                    array_1[keccak256(abi.encode(0x0109))] = 0;                                }                            }                        } else {                            stor_expr_fc = bytes1(var_q);                            if (var_c + 0x20 * 0x04 <= 0x20 + var_c) {                                if ((keccak256(abi.encode(0x0109)) + stor_expr_ev) <= keccak256(abi.encode(0x0109))) {                                    feeRewardAddress = arg1;                                    rewardsDistributedLastDate2 = block.timestamp;                                    if (!(bytes1(stor_0 / 0x0100))) {                                        stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;                                    }                                } else {                                    stor_expr_ew = 0;                                    if ((keccak256(abi.encode(0x0109)) + stor_expr_ev) <= 0x1 + keccak256(abi.encode(0x0109))) {                                        feeRewardAddress = arg1;                                        rewardsDistributedLastDate2 = block.timestamp;                                        if (!(bytes1(stor_0 / 0x0100))) {                                            stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;                                        }                                    } else {                                        array_1[keccak256(abi.encode(0x0109))] = 0;                                    }                                }                            } else {                                stor_expr_fd = bytes1(var_r);                            }                        }                    } else {                        stor_expr_ez = 0x04;                        if (var_c + 0x20 * 0x04 <= var_c) {                            if ((keccak256(abi.encode(0x0109)) + stor_expr_ev) > keccak256(abi.encode(0x0109))) {                                stor_expr_ew = 0;                                if (__desolex_internal_39d3_38b2_arg1 > __desolex_internal_39d3_38b2_arg0) {                                    stor_expr_ex = 0;                                }                                feeRewardAddress = arg1;                                rewardsDistributedLastDate2 = block.timestamp;                                if (!(bytes1(stor_0 / 0x0100))) {                                    stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;                                }                            }                        } else {                            stor_expr_fc = bytes1(var_q);                            if (var_c + 0x20 * 0x04 <= 0x20 + var_c) {                                if ((keccak256(abi.encode(0x0109)) + stor_expr_ev) > keccak256(abi.encode(0x0109))) {                                    stor_expr_ew = 0;                                    if (__desolex_internal_39d3_38b2_arg1 > __desolex_internal_39d3_38b2_arg0) {                                        stor_expr_ex = 0;                                    }                                    feeRewardAddress = arg1;                                    rewardsDistributedLastDate2 = block.timestamp;                                    if (!(bytes1(stor_0 / 0x0100))) {                                        stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;                                    }                                }                            } else {                                stor_expr_fd = bytes1(var_r);                            }                        }                        feeRewardAddress = arg1;                        rewardsDistributedLastDate2 = block.timestamp;                        if (!(bytes1(stor_0 / 0x0100))) {                            stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;                        }                    }                }            }        } else {            stor_expr_ff = uint24(var_t);            if (var_c + 0x20 * 0x04 > 0x20 + var_c) {                stor_expr_fg = uint24(var_u);            } else if ((keccak256(abi.encode(0x0109)) + stor_expr_ev) > (0x01 + keccak256(abi.encode(0x0109)))) {                stor_expr_ew = 0;                if (__desolex_internal_39d3_38b2_arg1 > __desolex_internal_39d3_38b2_arg0) {                    stor_expr_ex = 0;                }                stor_expr_ey = 0x04;                if (var_c + 0x20 * 0x04 <= var_c) {                    if ((keccak256(abi.encode(0x0109)) + stor_expr_ev) <= keccak256(abi.encode(0x0109))) {                        stor_expr_ez = 0x04;                        if (var_c + 0x20 * 0x04 <= var_c) {                            if ((keccak256(abi.encode(0x0109)) + stor_expr_ev) > keccak256(abi.encode(0x0109))) {                                stor_expr_ew = 0;                                if (__desolex_internal_39d3_38b2_arg1 > __desolex_internal_39d3_38b2_arg0) {                                    stor_expr_ex = 0;                                }                                feeRewardAddress = arg1;                                rewardsDistributedLastDate2 = block.timestamp;                                if (!(bytes1(stor_0 / 0x0100))) {                                    stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;                                }                            }                        } else {                            stor_expr_fc = bytes1(var_q);                            if (var_c + 0x20 * 0x04 <= 0x20 + var_c) {                                if ((keccak256(abi.encode(0x0109)) + stor_expr_ev) > keccak256(abi.encode(0x0109))) {                                    stor_expr_ew = 0;                                    if (__desolex_internal_39d3_38b2_arg1 > __desolex_internal_39d3_38b2_arg0) {                                        stor_expr_ex = 0;                                    }                                    feeRewardAddress = arg1;                                    rewardsDistributedLastDate2 = block.timestamp;                                    if (!(bytes1(stor_0 / 0x0100))) {                                        stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;                                    }                                }                            } else {                                stor_expr_fd = bytes1(var_r);                            }                        }                        feeRewardAddress = arg1;                        rewardsDistributedLastDate2 = block.timestamp;                        if (!(bytes1(stor_0 / 0x0100))) {                            stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;                        }                    } else {                        stor_expr_ew = 0;                        if (__desolex_internal_39d3_38b2_arg1 > __desolex_internal_39d3_38b2_arg0) {                            stor_expr_ex = 0;                        }                        stor_expr_ez = 0x04;                        if (var_c + 0x20 * 0x04 <= var_c) {                            if ((keccak256(abi.encode(0x0109)) + stor_expr_ev) <= keccak256(abi.encode(0x0109))) {                                feeRewardAddress = arg1;                                rewardsDistributedLastDate2 = block.timestamp;                                if (!(bytes1(stor_0 / 0x0100))) {                                    stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;                                }                            } else {                                stor_expr_ew = 0;                                if ((keccak256(abi.encode(0x0109)) + stor_expr_ev) <= 0x1 + keccak256(abi.encode(0x0109))) {                                    feeRewardAddress = arg1;                                    rewardsDistributedLastDate2 = block.timestamp;                                    if (!(bytes1(stor_0 / 0x0100))) {                                        stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;                                    }                                } else {                                    array_1[keccak256(abi.encode(0x0109))] = 0;                                }                            }                        } else {                            stor_expr_fc = bytes1(var_q);                            if (var_c + 0x20 * 0x04 <= 0x20 + var_c) {                                if ((keccak256(abi.encode(0x0109)) + stor_expr_ev) <= keccak256(abi.encode(0x0109))) {                                    feeRewardAddress = arg1;                                    rewardsDistributedLastDate2 = block.timestamp;                                    if (!(bytes1(stor_0 / 0x0100))) {                                        stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;                                    }                                } else {                                    stor_expr_ew = 0;                                    if ((keccak256(abi.encode(0x0109)) + stor_expr_ev) <= 0x1 + keccak256(abi.encode(0x0109))) {                                        feeRewardAddress = arg1;                                        rewardsDistributedLastDate2 = block.timestamp;                                        if (!(bytes1(stor_0 / 0x0100))) {                                            stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;                                        }                                    } else {                                        array_1[keccak256(abi.encode(0x0109))] = 0;                                    }                                }                            } else {                                stor_expr_fd = bytes1(var_r);                            }                        }                    }                } else {                    stor_expr_fb = uint16(var_p);                    if (var_c + 0x20 * 0x04 <= 0x20 + var_c) {                        if ((keccak256(abi.encode(0x0109)) + stor_expr_ev) <= keccak256(abi.encode(0x0109))) {                            stor_expr_ez = 0x04;                            if (var_c + 0x20 * 0x04 <= var_c) {                                if ((keccak256(abi.encode(0x0109)) + stor_expr_ev) > keccak256(abi.encode(0x0109))) {                                    stor_expr_ew = 0;                                    if (__desolex_internal_39d3_38b2_arg1 > __desolex_internal_39d3_38b2_arg0) {                                        stor_expr_ex = 0;                                    }                                    feeRewardAddress = arg1;                                    rewardsDistributedLastDate2 = block.timestamp;                                    if (!(bytes1(stor_0 / 0x0100))) {                                        stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;                                    }                                }                            } else {                                stor_expr_fc = bytes1(var_q);                                if (var_c + 0x20 * 0x04 <= 0x20 + var_c) {                                    if ((keccak256(abi.encode(0x0109)) + stor_expr_ev) > keccak256(abi.encode(0x0109))) {                                        stor_expr_ew = 0;                                        if (__desolex_internal_39d3_38b2_arg1 > __desolex_internal_39d3_38b2_arg0) {                                            stor_expr_ex = 0;                                        }                                        feeRewardAddress = arg1;                                        rewardsDistributedLastDate2 = block.timestamp;                                        if (!(bytes1(stor_0 / 0x0100))) {                                            stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;                                        }                                    }                                } else {                                    stor_expr_fd = bytes1(var_r);                                }                            }                            feeRewardAddress = arg1;                            rewardsDistributedLastDate2 = block.timestamp;                            if (!(bytes1(stor_0 / 0x0100))) {                                stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;                            }                        } else {                            stor_expr_ew = 0;                            if (__desolex_internal_39d3_38b2_arg1 > __desolex_internal_39d3_38b2_arg0) {                                stor_expr_ex = 0;                            }                            stor_expr_ez = 0x04;                            if (var_c + 0x20 * 0x04 <= var_c) {                                if ((keccak256(abi.encode(0x0109)) + stor_expr_ev) <= keccak256(abi.encode(0x0109))) {                                    feeRewardAddress = arg1;                                    rewardsDistributedLastDate2 = block.timestamp;                                    if (!(bytes1(stor_0 / 0x0100))) {                                        stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;                                    }                                } else {                                    stor_expr_ew = 0;                                    if ((keccak256(abi.encode(0x0109)) + stor_expr_ev) <= 0x1 + keccak256(abi.encode(0x0109))) {                                        feeRewardAddress = arg1;                                        rewardsDistributedLastDate2 = block.timestamp;                                        if (!(bytes1(stor_0 / 0x0100))) {                                            stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;                                        }                                    } else {                                        array_1[keccak256(abi.encode(0x0109))] = 0;                                    }                                }                            } else {                                stor_expr_fc = bytes1(var_q);                                if (var_c + 0x20 * 0x04 <= 0x20 + var_c) {                                    if ((keccak256(abi.encode(0x0109)) + stor_expr_ev) <= keccak256(abi.encode(0x0109))) {                                        feeRewardAddress = arg1;                                        rewardsDistributedLastDate2 = block.timestamp;                                        if (!(bytes1(stor_0 / 0x0100))) {                                            stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;                                        }                                    } else {                                        stor_expr_ew = 0;                                        if ((keccak256(abi.encode(0x0109)) + stor_expr_ev) <= 0x1 + keccak256(abi.encode(0x0109))) {                                            feeRewardAddress = arg1;                                            rewardsDistributedLastDate2 = block.timestamp;                                            if (!(bytes1(stor_0 / 0x0100))) {                                                stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;                                            }                                        } else {                                            array_1[keccak256(abi.encode(0x0109))] = 0;                                        }                                    }                                } else {                                    stor_expr_fd = bytes1(var_r);                                }                            }                        }                    } else {                        stor_expr_fe = uint16(var_s);                    }                }            } else {                var_c = var_c + 0x80;                stor_expr_ey = 0x04;                if (var_c + 0x20 * 0x04 <= var_c) {                    if (!((keccak256(abi.encode(0x010a)) + stor_expr_ey) <= keccak256(abi.encode(0x010a)))) {                        stor_expr_ew = 0;                        if (__desolex_internal_39d3_38b2_arg1 > __desolex_internal_39d3_38b2_arg0) {                            stor_expr_ex = 0;                        }                        stor_expr_ez = 0x04;                        if (var_c + 0x20 * 0x04 <= var_c) {                            if ((keccak256(abi.encode(0x0109)) + stor_expr_ev) > keccak256(abi.encode(0x0109))) {                                stor_expr_ew = 0;                                if (__desolex_internal_39d3_38b2_arg1 > __desolex_internal_39d3_38b2_arg0) {                                    stor_expr_ex = 0;                                }                                feeRewardAddress = arg1;                                rewardsDistributedLastDate2 = block.timestamp;                                if (!(bytes1(stor_0 / 0x0100))) {                                    stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;                                }                            }                        } else {                            stor_expr_fc = bytes1(var_q);                            if (var_c + 0x20 * 0x04 <= 0x20 + var_c) {                                if ((keccak256(abi.encode(0x0109)) + stor_expr_ev) > keccak256(abi.encode(0x0109))) {                                    stor_expr_ew = 0;                                    if (__desolex_internal_39d3_38b2_arg1 > __desolex_internal_39d3_38b2_arg0) {                                        stor_expr_ex = 0;                                    }                                    feeRewardAddress = arg1;                                    rewardsDistributedLastDate2 = block.timestamp;                                    if (!(bytes1(stor_0 / 0x0100))) {                                        stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;                                    }                                }                            } else {                                stor_expr_fd = bytes1(var_r);                            }                        }                        feeRewardAddress = arg1;                        rewardsDistributedLastDate2 = block.timestamp;                        if (!(bytes1(stor_0 / 0x0100))) {                            stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;                        }                    }                } else {                    stor_expr_fb = uint16(var_p);                    if (var_c + 0x20 * 0x04 <= 0x20 + var_c) {                        if (!((keccak256(abi.encode(0x010a)) + stor_expr_ey) <= (0x01 + keccak256(abi.encode(0x010a))))) {                            stor_expr_ew = 0;                            if (__desolex_internal_39d3_38b2_arg1 > __desolex_internal_39d3_38b2_arg0) {                                stor_expr_ex = 0;                            }                            stor_expr_ez = 0x04;                            if (var_c + 0x20 * 0x04 <= var_c) {                                if ((keccak256(abi.encode(0x0109)) + stor_expr_ev) > keccak256(abi.encode(0x0109))) {                                    stor_expr_ew = 0;                                    if (__desolex_internal_39d3_38b2_arg1 > __desolex_internal_39d3_38b2_arg0) {                                        stor_expr_ex = 0;                                    }                                    feeRewardAddress = arg1;                                    rewardsDistributedLastDate2 = block.timestamp;                                    if (!(bytes1(stor_0 / 0x0100))) {                                        stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;                                    }                                }                            } else {                                stor_expr_fc = bytes1(var_q);                                if (var_c + 0x20 * 0x04 <= 0x20 + var_c) {                                    if ((keccak256(abi.encode(0x0109)) + stor_expr_ev) > keccak256(abi.encode(0x0109))) {                                        stor_expr_ew = 0;                                        if (__desolex_internal_39d3_38b2_arg1 > __desolex_internal_39d3_38b2_arg0) {                                            stor_expr_ex = 0;                                        }                                        feeRewardAddress = arg1;                                        rewardsDistributedLastDate2 = block.timestamp;                                        if (!(bytes1(stor_0 / 0x0100))) {                                            stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;                                        }                                    }                                } else {                                    stor_expr_fd = bytes1(var_r);                                }                            }                            feeRewardAddress = arg1;                            rewardsDistributedLastDate2 = block.timestamp;                            if (!(bytes1(stor_0 / 0x0100))) {                                stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;                            }                        }                    } else {                        stor_expr_fe = uint16(var_s);                    }                }                var_c = var_c + 0x80;                stor_expr_ez = 0x04;                if (var_c + 0x20 * 0x04 <= var_c) {                    if (!((keccak256(abi.encode(0x010b)) + stor_expr_ez) <= keccak256(abi.encode(0x010b)))) {                        stor_expr_ew = 0;                        if (__desolex_internal_39d3_38b2_arg1 > __desolex_internal_39d3_38b2_arg0) {                            stor_expr_ex = 0;                        }                        feeRewardAddress = arg1;                        rewardsDistributedLastDate2 = block.timestamp;                        if (!(bytes1(stor_0 / 0x0100))) {                            stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;                        }                    }                } else {                    stor_expr_fc = bytes1(var_q);                    if (var_c + 0x20 * 0x04 <= 0x20 + var_c) {                        if (!((keccak256(abi.encode(0x010b)) + stor_expr_ez) <= (0x01 + keccak256(abi.encode(0x010b))))) {                            stor_expr_ew = 0;                            if (__desolex_internal_39d3_38b2_arg1 > __desolex_internal_39d3_38b2_arg0) {                                stor_expr_ex = 0;                            }                            feeRewardAddress = arg1;                            rewardsDistributedLastDate2 = block.timestamp;                            if (!(bytes1(stor_0 / 0x0100))) {                                stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;                            }                        }                    } else {                        stor_expr_fd = bytes1(var_r);                    }                }                feeRewardAddress = arg1;                rewardsDistributedLastDate2 = block.timestamp;                if (!(bytes1(stor_0 / 0x0100))) {                    stor_0 = (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff) & stor_0;                }            }        }    }        function revokeRole(bytes32 role, address account) public payable {        require(mapping_expr_k[msg.sender], "AccessControl: sender must be an admin to revoke");        uint256 value0 = 0;        if (mapping_expr_bk[account] != 0) {            if (((stor_expr_bl + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) < stor_expr_bl) && ((mapping_expr_bk[account] + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) < stor_expr_bm)) {                stor_expr_bn = stor_expr_bo;                mapping_expr_bp[stor_expr_bo] = (mapping_expr_bk[account] + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) + 0x01;                if (stor_expr_bl != 0x0) {                    stor_expr_bq = 0;                    stor_expr_bl = stor_expr_bl - 0x01;                    mapping_expr_bp[account] = 0;                }            }            flag0 = true;        }        if (flag0) {            emit RoleRevoked(role, account, msg.sender);        }    }        function setRewardsDistributedLastDate(uint256 newRewardsDistributedLastDate2) public payable {        var_a = var_a;        require(mapping_expr_k[msg.sender], "[Validation] The caller must have owner role to set rewards distributed last date");        rewardsDistributedLastDate2 = newRewardsDistributedLastDate2;    }        function setFees(uint256[] memory arg0, uint256[] memory arg1, uint256[] memory arg2, address arg3) public payable {        require(!(((0x04 + arg0) + (arg0.length * 0x20) + 0x20) > msg.data.length));        require(!(((0x04 + arg1) + (arg1.length * 0x20) + 0x20) > msg.data.length));        require(!(((0x04 + arg2) + (arg2.length * 0x20) + 0x20) > msg.data.length));        var_a = var_a;        var_a = msg.sender;        require(mapping_expr_eu[msg.sender], "[Validation] The caller must have owner role to set fees");        feeDurations.length = arg0;        uint256 value2 = (0x04 + arg0) + 0x20;        uint256 value3 = keccak256(abi.encode(0x0109));        uint256 value4 = arg0;        if (arg0 != 0x0) {            uint256 value1 = keccak256(abi.encode(0x0109));            uint256 value0 = (0x04 + arg0) + 0x20;            while (true) {                if (((0x04 + arg0) + 0x20) + 0x20 * arg0.length <= value0) {                    break;                }                stor_expr_fk = msg.data[value0];                value1 = 0x01 + value1;                value0 = 0x20 + value0;            }            value2 = ((0x04 + arg0) + 0x20) + (0x20 * arg0.length);            value3 = (value1) ? 1 : 0;            value4 = (value0) ? 1 : 0;        }        uint256 value6 = (value3) ? 1 : 0;        uint256 value5 = keccak256(abi.encode(0x0109)) + feeDurations.length;        while (true) {            if (value5 <= value6) {                break;            }            stor_expr_fl = 0;            if (value5 <= (0x01 + value6)) {                break;            }            stor_expr_ex = 0;            value6 = 0x01 + (0x01 + value6);            value5 = (value5) ? 1 : 0;        }        stor_expr_fm = arg1;        uint256 value13 = (0x04 + arg1) + 0x20;        uint256 value14 = keccak256(abi.encode(0x010a));        uint256 value15 = arg1;        if (arg1 != 0x0) {            uint256 value1 = keccak256(abi.encode(0x010a));            uint256 value0 = (0x04 + arg1) + 0x20;            uint256 value20;            uint256 value19;            while (true) {                value19 = (value1) ? 1 : 0;                value20 = (value0) ? 1 : 0;                if (((0x04 + arg1) + 0x20) + 0x20 * arg1.length <= value0) {                    break;                }                stor_expr_fk = msg.data[value0];                if (((0x04 + arg1) + 0x20) + 0x20 * arg1.length <= 0x20 + value0) {                    break;                }                array_1[value1] = msg.data[0x20 + value0];                value1 = 0x01 + (0x01 + value1);                value0 = 0x20 + (0x20 + value0);                value19 = 0x01 + value1;                value20 = 0x20 + value0;            }            value13 = ((0x04 + arg1) + 0x20) + (0x20 * arg1.length);            value14 = value19;            value15 = value20;        }        value6 = (value3) ? 1 : 0;        value5 = keccak256(abi.encode(0x0109)) + feeDurations.length;        while (true) {            if (value5 <= value6) {                break;            }            stor_expr_fl = 0;            if (value5 <= (0x01 + value6)) {                break;            }            stor_expr_ex = 0;            value6 = 0x01 + value6;            value5 = (value5) ? 1 : 0;        }        stor_expr_fo = __desolex_internal_386b_23a2_arg0;        uint256 value16 = __desolex_internal_386b_23a2_arg1;        uint256 value17 = keccak256(abi.encode(__desolex_internal_386b_23a2_arg2));        uint256 value18 = __desolex_internal_386b_23a2_arg0;        if (__desolex_internal_386b_23a2_arg0 != 0x0) {            uint256 value1 = keccak256(abi.encode(__desolex_internal_386b_23a2_arg2));            uint256 value0 = __desolex_internal_386b_23a2_arg1;            uint256 value22;            uint256 value21;            while (true) {                value21 = (value1) ? 1 : 0;                value22 = (value0) ? 1 : 0;                if (__desolex_internal_386b_23a2_arg1 + 0x20 * __desolex_internal_386b_23a2_arg0 <= value0) {                    break;                }                stor_expr_fk = msg.data[value0];                if (__desolex_internal_386b_23a2_arg1 + 0x20 * __desolex_internal_386b_23a2_arg0 <= 0x20 + value0) {                    break;                }                array_1[value1] = msg.data[0x20 + value0];                value1 = 0x01 + (0x01 + value1);                value0 = 0x20 + (0x20 + value0);                value21 = 0x01 + value1;                value22 = 0x20 + value0;            }            value16 = __desolex_internal_386b_23a2_arg1 + (0x20 * __desolex_internal_386b_23a2_arg0);            value17 = value21;            value18 = value22;        }        value6 = (value3) ? 1 : 0;        value5 = keccak256(abi.encode(0x0109)) + feeDurations.length;        while (true) {            if (value5 <= value6) {                break;            }            stor_expr_fl = 0;            if (value5 <= 0x1 + value6) {                feeRewardAddress = __desolex_internal_23a2_363_arg1 | (0xffffffffffffffffffffffff0000000000000000000000000000000000000000 & feeRewardAddress);                break;            }            array_1[value6] = 0;            value6 = 0x01 + (0x01 + value6);            value5 = (value5) ? 1 : 0;        }        feeRewardAddress = __desolex_internal_2394_363_arg1 | (0xffffffffffffffffffffffff0000000000000000000000000000000000000000 & feeRewardAddress);    }        function transferToken(address arg0, uint256 arg1, address arg2) public payable {        var_a = var_a;        require(mapping_expr_k[msg.sender], "[Validation] The caller must have owner role");        require(arg0.code.length != 0x0);        uint256 value0 = IDesolexERC20(arg0).balanceOf(address(this));        require(!(value0 < arg1), "[Validation] Insufficent token balance to transfer amount.");        require(arg0.code.length != 0x0);        IDesolexERC20(arg0).transfer(arg2, arg1);    }        function getRewardsDistributedLastDate() public view returns (uint256) {        return rewardsDistributedLastDate2;    }        function token() public view returns (address) {        return stor_fd;    }        function internal_694(address arg0) private {        // Decompilation incomplete: helper effect provenance is conservative.        uint256 value14 = 0;        uint256 value15 = 0;        if ((bytes1(stor_expr_a) && !(!(stor_expr_b)))) {            uint256 value0 = bytes1(stor_expr_a);            if (bytes1(stor_expr_a)) {                value0 = (!(!(stor_expr_b))) ? 1 : 0;            }            uint256 value1 = (value0) ? 1 : 0;            if (value0 != 0x0) {                value1 = (!(block.timestamp < stor_expr_c)) ? 1 : 0;            }            uint256 value11 = 0;            uint256 value12 = 0;            uint256 value13 = 0;            if (!(value1 == 0x0)) {                uint256 var_c;                var_c = 0x40 + var_c;                if (!(stor_expr_d <= block.timestamp)) {                    uint256 value2 = 0;                    while (true) {                        uint256 value3 = (value2) ? 1 : 0;                        if (value2 >= var_c.length) {                            break;                        }                        if (0x20 + value2 >= var_c.length) {                            break;                        }                        value2 = 0x20 + (0x20 + value2);                        value3 = 0x20 + value2;                    }                    revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");                }                uint256 value4 = 0;                uint256 value5 = (block.timestamp - stor_expr_c);                uint256 value6 = 0;                uint256 value7 = 0;                uint256 value8 = 0;                uint256 value9 = block.timestamp;                uint256 value10 = arg0;                uint256 value17;                uint256 value16;                while (true) {                    value16 = 0;                    value17 = 0;                    if (value4 >= feeDurations.length) {                        break;                    }                    if (value4 >= feeDurations.length) {                        break;                    }                    if (value5 < feeDurations[value4]) {                        break;                    }                    value4 = (0x01 + value4);                    value5 = (value5) ? 1 : 0;                    value6 = value6;                    value7 = value7;                    value8 = value8;                    value9 = value9;                    value10 = value10;                    value16 = feeRewardPcts[value4];                    value17 = feeBurnPcts[value4];                }                value11 = value16;                value12 = value17;                value13 = (value5) ? 1 : 0;            }            require(value11 + value12 >= value12, "SafeMath: addition overflow");            value14 = value11 + value12;            value15 = value13;        }    }        function internal_ec0(address account, bytes32 role) private {        // Decompilation incomplete: helper effect provenance is conservative.        require(account == msg.sender, "AccessControl: can only renounce roles for self");        uint256 value0 = 0;        if (mapping_expr_bk[account] != 0) {            if (((stor_expr_bl + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) < stor_expr_bl) && ((mapping_expr_bk[account] + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) < stor_expr_bm)) {                stor_expr_bn = stor_expr_bo;                mapping_expr_bp[stor_expr_bo] = (mapping_expr_bk[account] + 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) + 0x01;                if (stor_expr_bl != 0x0) {                    stor_expr_bq = 0;                    stor_expr_bl = stor_expr_bl - 0x01;                    mapping_expr_bp[account] = 0;                }            }            value0 = 0x01;        }        if (!(value0 == 0x0)) {            emit RoleRevoked(role, account, address(msg.sender));        }    }        function internal_1740(uint256 amount) private {        // Decompilation incomplete: helper effect provenance is conservative.        require(stor_c9_0_0, "ReentrancyGuard: reentrant call");        stor_c9_0_0 = false;        require(!paused, "Pausable: paused");        require(0 == stor_expr_cl, "[Stake] You have already initiated the unstake process");        uint256 var_c;        var_c = var_c + 0xe0;        if (!(var_k)) {            var_c = 0x40 + var_c;            if (!(var_l <= stor_103)) {                uint256 value0 = 0;                while (true) {                    uint256 value1 = (value0) ? 1 : 0;                    if (value0 >= var_c.length) {                        break;                    }                    if (0x20 + value0 >= var_c.length) {                        break;                    }                    value0 = 0x20 + (0x20 + value0);                    value1 = 0x20 + value0;                }                revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");            }            uint256 value2 = ((stor_103 - var_l)) * var_w;            if (var_w != 0x0) {                require(((stor_103 - var_l)) * var_w / var_w == ((stor_103 - var_l)), "SafeMath: multiplication overflow");            } else {                value2 = 0;            }            var_c = 0x40 + var_c;            require(amount + stor_expr_an >= stor_expr_an, "SafeMath: addition overflow");            require((value2 / 0x0de0b6b3a7640000) + (amount + stor_expr_an) >= (amount + stor_expr_an), "SafeMath: addition overflow");            require(value2 / 0xde0b6b3a7640000 + (amount + stor_expr_an) > stor_expr_an, "[Stake] Amount has to be larger than 0");            var_c = 0x40 + var_c;            if (!(stor_expr_an <= ((value2 / 0x0de0b6b3a7640000) + (amount + stor_expr_an)))) {                uint256 value0 = 0;                while (true) {                    if (value0 >= var_c.length) {                        break;                    }                    value0 = 0x20 + value0;                    revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");                }            }            require(((value2 / 0x0de0b6b3a7640000) + (amount + stor_expr_an) - stor_expr_an) + currentTotalStake >= currentTotalStake, "SafeMath: addition overflow");            require(!((((value2 / 0x0de0b6b3a7640000) + (amount + stor_expr_an) - stor_expr_an) + currentTotalStake) > maxStakingAmount), "[Stake] Your stake deposit would exceed the current staking limit");            array_1[(keccak256(abi.encode(address(msg.sender), 0x0107)))] = (value2 / 0x0de0b6b3a7640000) + (amount + stor_expr_an);            array_2[(keccak256(abi.encode(address(msg.sender), 0x0107)))] = block.timestamp;            array_6[(keccak256(abi.encode(address(msg.sender), 0x0107)))] = 0x01 | (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 & array_6[(keccak256(abi.encode(address(msg.sender), 0x0107)))]);            array_4[(keccak256(abi.encode(address(msg.sender), 0x0107)))] = stor_103;            if (stor_expr_dw != 0x0) {                var_c = 0x40 + var_c;                if (!(0x01 <= stor_expr_dw)) {                    uint256 value0 = 0;                    while (true) {                        if (value0 >= var_c.length) {                            break;                        }                        value0 = 0x20 + value0;                        revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");                    }                }                if ((stor_expr_dw - 0x01) < stakerAmounts.length) {                    stor_expr_dx = (value2 / 0x0de0b6b3a7640000) + (amount + stor_expr_an);                }            } else {                stakerAddresses.length = stakerAddresses.length + 0x01;                stakerAddresses[stakerAddresses.length] = (msg.sender) | (0xffffffffffffffffffffffff0000000000000000000000000000000000000000 & stakerAddresses[stakerAddresses.length]);                stakerAmounts.length = stakerAmounts.length + 0x01;                stakerAmounts[stakerAmounts.length] = (value2 / 0x0de0b6b3a7640000) + (amount + stor_expr_an);                stor_expr_dw = stakerAddresses.length;            }            currentTotalStake = ((value2 / 0x0de0b6b3a7640000) + (amount + stor_expr_an) - stor_expr_an) + currentTotalStake;            require(stor_fd.code.length != 0x0);            (bool success0, bytes memory returnData0) = stor_fd.call(abi.encodeWithSelector(bytes4(0x23b872dd), msg.sender, address(this), amount)); // call transferFrom            require(success0);            var_c = var_c + ((returnData0.length + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0));            require((var_c + returnData0.length) - var_c >= 0x20);            require(var_al == var_al);            require(var_c.length, "[Stake] Something went wrong during the token transfer");            if (value2 / 0xde0b6b3a7640000 != 0x0) {                require((value2 / 0x0de0b6b3a7640000) + rewardsWithdrawn >= rewardsWithdrawn, "SafeMath: addition overflow");                rewardsWithdrawn = (value2 / 0x0de0b6b3a7640000) + rewardsWithdrawn;                require(stor_fd.code.length != 0x0);                bool transferSucceeded = IDesolexERC20(stor_fd).transferFrom(address(rewardsAddress), address(this), (value2 / 0x0de0b6b3a7640000));                require(transferSucceeded, "[Stake] Something went wrong while transferring rewards");            }            require((value2 / 0x0de0b6b3a7640000) + amount >= amount, "SafeMath: addition overflow");            emit Staked(msg.sender, ((value2 / 0x0de0b6b3a7640000) + amount));            stor_c9_0_0 = true;        }        var_c = 0x40 + var_c;        if (!(var_l <= var_ao)) {            uint256 value0 = 0;            while (true) {                uint256 value3 = (value0) ? 1 : 0;                if (value0 >= var_c.length) {                    break;                }                if (0x20 + value0 >= var_c.length) {                    break;                }                value0 = 0x20 + (0x20 + value0);                value3 = 0x20 + value0;            }            revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");        }        uint256 value4 = ((var_ao - var_l) * var_ap);        if (var_ap != 0x0) {            require(((var_ao - var_l)) * var_ap / var_ap == ((var_ao - var_l)), "SafeMath: multiplication overflow");        } else {            value4 = 0;        }        var_c = 0x40 + var_c;        require(!((amount + stor_expr_al) < stor_expr_al), "SafeMath: addition overflow");        require(!((value4 / 0x0de0b6b3a7640000) + (amount + stor_expr_al) < (amount + stor_expr_al)), "SafeMath: addition overflow");        require((value4 / 0x0de0b6b3a7640000) + (amount + stor_expr_al) > stor_expr_al, "[Stake] Amount has to be larger than 0");        var_c = 0x40 + var_c;        if (stor_expr_al > ((value4 / 0x0de0b6b3a7640000) + (amount + stor_expr_al))) {            uint256 value0 = 0;            while (true) {                if (value0 >= var_c.length) {                    break;                }                value0 = 0x20 + value0;                revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");            }        }        require(!(((value4 / 0x0de0b6b3a7640000) + (amount + stor_expr_al) - stor_expr_al + currentTotalStake) < currentTotalStake), "SafeMath: addition overflow");        require(!(((value4 / 0x0de0b6b3a7640000) + (amount + stor_expr_al) - stor_expr_al + currentTotalStake) > maxStakingAmount), "[Stake] Your stake deposit would exceed the current staking limit");        stor_expr_al = ((value4 / 0x0de0b6b3a7640000)) + (amount + stor_expr_al);        stor_expr_at = block.timestamp;        stor_expr_ae = 0x01 | (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 & stor_expr_ae);        stor_expr_au = stor_103;        if (mapping_107[msg.sender] != 0x0) {            var_c = 0x40 + var_c;            if (0x01 > mapping_107[msg.sender]) {                uint256 value0 = 0;                while (true) {                    if (value0 >= var_c.length) {                        break;                    }                    value0 = 0x20 + value0;                    revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");                }            }            if ((mapping_107[msg.sender] - 0x01) < stakerAmounts.length) {                stor_expr_bb = ((value4 / 0x0de0b6b3a7640000)) + (amount + stor_expr_al);            }        } else {            stakerAddresses.length = stakerAddresses.length + 0x01;            stakerAddresses[stakerAddresses.length] = (msg.sender) | (0xffffffffffffffffffffffff0000000000000000000000000000000000000000 & stakerAddresses[stakerAddresses.length]);            stakerAmounts.length = stakerAmounts.length + 0x01;            stakerAmounts[stakerAmounts.length] = ((value4 / 0x0de0b6b3a7640000)) + (amount + stor_expr_al);            mapping_107[msg.sender] = stakerAddresses.length;        }        currentTotalStake = ((value4 / 0x0de0b6b3a7640000) + (amount + stor_expr_al) - stor_expr_al) + currentTotalStake;        require(stor_fd.code.length != 0x0);        (bool success2, bytes memory returnData2) = stor_fd.call(abi.encodeWithSelector(bytes4(0x23b872dd), msg.sender, address(this), amount)); // call transferFrom        require(success2);        var_c = var_c + ((returnData2.length + 0x1f) & (0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0));        require(!(((var_c + returnData2.length) - var_c) < 0x20));        require(var_c.length, "[Stake] Something went wrong during the token transfer");        if ((value4 / 0x0de0b6b3a7640000) != 0x0) {            require(!(((value4 / 0x0de0b6b3a7640000) + rewardsWithdrawn) < rewardsWithdrawn), "SafeMath: addition overflow");            rewardsWithdrawn = ((value4 / 0x0de0b6b3a7640000)) + rewardsWithdrawn;            require(stor_fd.code.length != 0x0);            bool transferSucceeded1 = IDesolexERC20(stor_fd).transferFrom(rewardsAddress, address(this), (value4 / 0x0de0b6b3a7640000));            require(transferSucceeded1, "[Stake] Something went wrong while transferring rewards");        }        require(!(((value4 / 0x0de0b6b3a7640000) + amount) < amount), "SafeMath: addition overflow");        emit Staked(msg.sender, ((value4 / 0x0de0b6b3a7640000)) + amount);        stor_c9_0_0 = true;    }        function internal_1b58(address arg0) private {        uint256 value7 = 0;        uint256 value8 = 0;        uint256 value9 = 0;        uint256 value10 = 0;        uint256 value11 = 0;        uint256 value12 = 0;        if ((bytes1(stor_expr_a) && !(!(stor_expr_b)))) {            uint256 var_c;            var_c = 0x40 + var_c;            if (stor_expr_ec > stor_expr_ed) {                uint256 value0 = 0;                while (true) {                    if (value0 >= var_c.length) {                        break;                    }                    value0 = 0x20 + value0;                    revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");                }            }            uint256 value1 = 0;            if (stor_expr_ee != 0) {                require(!((unstakingPeriod + stor_expr_ee) < stor_expr_ee), "SafeMath: addition overflow");                value1 = unstakingPeriod + stor_expr_ee;            }            var_c = var_c + 0xe0;            uint256 value4 = (var_s - var_r);            if (var_t != 0x0) {                var_c = 0x40 + var_c;                if (!(var_r <= var_s)) {                    uint256 value0 = 0;                    while (true) {                        uint256 value2 = (value0) ? 1 : 0;                        if (value0 >= var_c.length) {                            break;                        }                        if (0x20 + value0 >= var_c.length) {                            break;                        }                        value0 = 0x20 + (0x20 + value0);                        value2 = 0x20 + value0;                    }                    revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");                }            } else {                var_c = 0x40 + var_c;                if (!(var_r <= stor_103)) {                    uint256 value0 = 0;                    while (true) {                        uint256 value3 = (value0) ? 1 : 0;                        if (value0 >= var_c.length) {                            break;                        }                        if (0x20 + value0 >= var_c.length) {                            break;                        }                        value0 = 0x20 + (0x20 + value0);                        value3 = 0x20 + value0;                    }                    revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");                }                value4 = (stor_103 - var_r);            }            uint256 value5 = (value4 * var_ad);            if (var_ad != 0x0) {                require(value4 * var_ad / var_ad == value4, "SafeMath: multiplication overflow");            } else {                value5 = 0;            }            var_c = 0x40 + var_c;            value7 = (value5 / 0x0de0b6b3a7640000);            value8 = (value1) ? 1 : 0;            value9 = stor_expr_ee;            value10 = stor_expr_eh;            value11 = stor_expr_ec;            value12 = stor_expr_ed - stor_expr_ec;        }    }        function internal_1d1f() private {        // Decompilation incomplete: helper effect provenance is conservative.        require(stor_c9_0_0, "ReentrancyGuard: reentrant call");        stor_c9_0_0 = false;        require(!paused, "Pausable: paused");        require((0xff & stor_expr_af && stor_expr_ag != 0x0), "[Withdraw Rewards] There is no stake deposit for this account");        require(!(stor_expr_ah), "[Withdraw Rewards] You already initiated the full withdrawal");        uint256 var_c;        var_c = var_c + 0xe0;        if (!(var_k)) {            var_c = 0x40 + var_c;            if (!(var_l <= stor_103)) {                uint256 value0 = 0;                while (true) {                    uint256 value1 = (value0) ? 1 : 0;                    if (value0 >= var_c.length) {                        break;                    }                    if (0x20 + value0 >= var_c.length) {                        break;                    }                    value0 = 0x20 + (0x20 + value0);                    value1 = 0x20 + value0;                }                revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");            }            uint256 value2 = ((stor_103 - var_l)) * var_w;            if (var_w != 0x0) {                require(((stor_103 - var_l)) * var_w / var_w == ((stor_103 - var_l)), "SafeMath: multiplication overflow");            } else {                value2 = 0;            }            var_c = 0x40 + var_c;            require(value2 / 0xde0b6b3a7640000 > 0x0, "[Withdraw Rewards] The reward amount has to be larger than 0");            array_4[(keccak256(abi.encode(address(msg.sender), 0x0107)))] = stor_103;            require((value2 / 0x0de0b6b3a7640000) + rewardsWithdrawn >= rewardsWithdrawn, "SafeMath: addition overflow");            rewardsWithdrawn = (value2 / 0x0de0b6b3a7640000) + rewardsWithdrawn;            require(stor_fd.code.length != 0x0);            bool transferSucceeded = IDesolexERC20(stor_fd).transferFrom(address(rewardsAddress), msg.sender, (value2 / 0x0de0b6b3a7640000));            require(transferSucceeded, "[Withdraw Rewards] Something went wrong while transferring your reward");            emit RewardsWithdrawn(msg.sender, (value2 / 0x0de0b6b3a7640000));            stor_c9_0_0 = true;        }        var_c = 0x40 + var_c;        if (!(var_l <= var_ac)) {            uint256 value0 = 0;            while (true) {                uint256 value3 = (value0) ? 1 : 0;                if (value0 >= var_c.length) {                    break;                }                if (0x20 + value0 >= var_c.length) {                    break;                }                value0 = 0x20 + (0x20 + value0);                value3 = 0x20 + value0;            }            revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");        }        uint256 value4 = ((var_ac - var_l) * var_ad);        if (var_ad != 0x0) {            require(((var_ac - var_l)) * var_ad / var_ad == ((var_ac - var_l)), "SafeMath: multiplication overflow");        } else {            value4 = 0;        }        var_c = 0x40 + var_c;        require((value4 / 0x0de0b6b3a7640000) > 0, "[Withdraw Rewards] The reward amount has to be larger than 0");        stor_expr_au = stor_103;        require(!(((value4 / 0x0de0b6b3a7640000) + rewardsWithdrawn) < rewardsWithdrawn), "SafeMath: addition overflow");        rewardsWithdrawn = ((value4 / 0x0de0b6b3a7640000)) + rewardsWithdrawn;        require(stor_fd.code.length != 0x0);        bool transferSucceeded1 = IDesolexERC20(stor_fd).transferFrom(rewardsAddress, msg.sender, (value4 / 0x0de0b6b3a7640000));        require(transferSucceeded1, "[Withdraw Rewards] Something went wrong while transferring your reward");        emit RewardsWithdrawn(msg.sender, (value4 / 0x0de0b6b3a7640000));        stor_c9_0_0 = true;    }        function internal_1fad() private {        // Decompilation incomplete: helper effect provenance is conservative.        require(stor_c9_0_0, "ReentrancyGuard: reentrant call");        stor_c9_0_0 = false;        require(!paused, "Pausable: paused");        require(stor_expr_ad > 0, "[Stake Rewards] You have must have a staked amount");        require(!(stor_expr_ah), "[Stake Rewards] You have already initiated unstaking");        uint256 var_c;        var_c = var_c + 0xe0;        if (!(var_k)) {            var_c = 0x40 + var_c;            if (!(var_l <= stor_103)) {                uint256 value0 = 0;                while (true) {                    uint256 value1 = (value0) ? 1 : 0;                    if (value0 >= var_c.length) {                        break;                    }                    if (0x20 + value0 >= var_c.length) {                        break;                    }                    value0 = 0x20 + (0x20 + value0);                    value1 = 0x20 + value0;                }                revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");            }            uint256 value2 = ((stor_103 - var_l)) * var_w;            if (var_w != 0x0) {                require(((stor_103 - var_l)) * var_w / var_w == ((stor_103 - var_l)), "SafeMath: multiplication overflow");            } else {                value2 = 0;            }            var_c = 0x40 + var_c;            require(value2 / 0xde0b6b3a7640000 > 0x0, "[Stake Rewards] Rewards to be staked has to be larger than 0");            require((value2 / 0x0de0b6b3a7640000) + currentTotalStake >= currentTotalStake, "SafeMath: addition overflow");            require(!(((value2 / 0x0de0b6b3a7640000) + currentTotalStake) > maxStakingAmount), "[Stake Rewards] Your staked rewards would exceed the current staking limit");            require((value2 / 0x0de0b6b3a7640000) + array_1[(keccak256(abi.encode(address(msg.sender), 0x0107)))] >= array_1[(keccak256(abi.encode(address(msg.sender), 0x0107)))], "SafeMath: addition overflow");            array_1[(keccak256(abi.encode(address(msg.sender), 0x0107)))] = (value2 / 0x0de0b6b3a7640000) + array_1[(keccak256(abi.encode(address(msg.sender), 0x0107)))];            var_c = 0x40 + var_c;            if (!(0x01 <= stor_expr_en)) {                uint256 value0 = 0;                while (true) {                    if (value0 >= var_c.length) {                        break;                    }                    value0 = 0x20 + value0;                    revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");                }            }            if ((stor_expr_en - 0x01) < stakerAmounts.length) {                stor_expr_eo = (value2 / 0x0de0b6b3a7640000) + array_1[(keccak256(abi.encode(address(msg.sender), 0x0107)))];                currentTotalStake = (value2 / 0x0de0b6b3a7640000) + currentTotalStake;                require((value2 / 0x0de0b6b3a7640000) + rewardsWithdrawn >= rewardsWithdrawn, "SafeMath: addition overflow");                rewardsWithdrawn = (value2 / 0x0de0b6b3a7640000) + rewardsWithdrawn;                require(stor_fd.code.length != 0x0);                bool transferSucceeded = IDesolexERC20(stor_fd).transferFrom(address(rewardsAddress), address(this), (value2 / 0x0de0b6b3a7640000));                require(transferSucceeded, "[Stake Rewards] Something went wrong while transferring reward");                array_4[(keccak256(abi.encode(address(msg.sender), 0x0107)))] = stor_103;                emit RewardsStaked(msg.sender, (value2 / 0x0de0b6b3a7640000));                stor_c9_0_0 = true;            }        }        var_c = 0x40 + var_c;        if (!(var_l <= var_ah)) {            uint256 value0 = 0;            while (true) {                uint256 value3 = (value0) ? 1 : 0;                if (value0 >= var_c.length) {                    break;                }                if (0x20 + value0 >= var_c.length) {                    break;                }                value0 = 0x20 + (0x20 + value0);                value3 = 0x20 + value0;            }            revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");        }        uint256 value4 = ((var_ah - var_l) * var_ai);        if (var_ai != 0x0) {            require(((var_ah - var_l)) * var_ai / var_ai == ((var_ah - var_l)), "SafeMath: multiplication overflow");        } else {            value4 = 0;        }        var_c = 0x40 + var_c;        require((value4 / 0x0de0b6b3a7640000) > 0, "[Stake Rewards] Rewards to be staked has to be larger than 0");        require(!(((value4 / 0x0de0b6b3a7640000) + currentTotalStake) < currentTotalStake), "SafeMath: addition overflow");        require(!(((value4 / 0x0de0b6b3a7640000) + currentTotalStake) > maxStakingAmount), "[Stake Rewards] Your staked rewards would exceed the current staking limit");        require(!((value4 / 0x0de0b6b3a7640000) + stor_expr_al < stor_expr_al), "SafeMath: addition overflow");        stor_expr_al = ((value4 / 0x0de0b6b3a7640000)) + stor_expr_al;        var_c = 0x40 + var_c;        if (0x01 > mapping_107[msg.sender]) {            uint256 value0 = 0;            while (true) {                if (value0 >= var_c.length) {                    break;                }                value0 = 0x20 + value0;                revert("\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");            }        }        if ((mapping_107[msg.sender] - 0x01) < stakerAmounts.length) {            stor_expr_bb = ((value4 / 0x0de0b6b3a7640000)) + stor_expr_al;            currentTotalStake = ((value4 / 0x0de0b6b3a7640000)) + currentTotalStake;            require(!(((value4 / 0x0de0b6b3a7640000) + rewardsWithdrawn) < rewardsWithdrawn), "SafeMath: addition overflow");            rewardsWithdrawn = ((value4 / 0x0de0b6b3a7640000)) + rewardsWithdrawn;            require(stor_fd.code.length != 0x0);            bool transferSucceeded1 = IDesolexERC20(stor_fd).transferFrom(rewardsAddress, address(this), (value4 / 0x0de0b6b3a7640000));            require(transferSucceeded1, "[Stake Rewards] Something went wrong while transferring reward");            stor_expr_au = stor_103;            emit RewardsStaked(msg.sender, (value4 / 0x0de0b6b3a7640000));            stor_c9_0_0 = true;        }    }        function __desolexSelectorShim(uint32 rewrittenSelector) private {        assembly {            let input := mload(0x40)            calldatacopy(input, 0, calldatasize())            mstore(input, or(and(mload(input), 0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff), shl(224, and(rewrittenSelector, 0xffffffff))))            let success := delegatecall(gas(), address(), input, calldatasize(), 0, 0)            let size := returndatasize()            returndatacopy(input, 0, size)            switch success            case 0 { revert(input, size) }            default { return(input, size) }        }    }        // Note: This selector table is synthetic and is not part of the original Solidity source.    // It records the recovered selector-to-signature mapping without executable behavior.        // 0x098d3228 => MAX_INT()    // 0x225801a1 => infoWalletFees(address)    // 0x22b10554 => setMaxStakingAmount(uint256)    // 0x248a9ca3 => getRoleAdmin(bytes32)    // 0x24f45e67 => setAPY(uint256)    // 0x26a4e8d2 => setTokenAddress(address)    // 0x2d3d8bc2 => getStakersRewards(uint256,uint256)    // 0x2e17de78 => unstake(uint256)    // 0x2f2ff15d => grantRole(bytes32,address)    // 0x36568abe => renounceRole(bytes32,address)    // 0x370158ea => info()    // 0x3bcfc4b8 => apy()    // 0x3ccfd60b => withdraw()    // 0x3f4ba83a => unpause()    // 0x43352d61 => getStakers()    // 0x43a333bb => setUnstakingPeriod(uint256)    // 0x459598a2 => stakerAddresses(uint256)    // 0x4d5d0806 => maxStakingAmount()    // 0x59974e38 => distributeRewards(uint256)    // 0x5c975abb => paused()    // 0x5e00e679 => setRewardAddress(address)    // 0x6772fc25 => rewardsDistributedLastDate()    // 0x6ad339f1 => feeRewardPcts(uint256)    // 0x71df4ebb => stakerAmounts(uint256)    // 0x72fe4a61 => feeBurnPcts(uint256)    // 0x79350a8f => calculateFees(address,uint256)    // 0x8456cb59 => pause()    // 0x8610d094 => getStakersRange(uint256,uint256)    // 0x9010d07c => Unknown_9010d07c(uint256,uint256)    // 0x91d14854 => hasRole(bytes32,address)    // 0x9c1454d4 => rewardsDistributed()    // 0xa217fddf => DEFAULT_ADMIN_ROLE()    // 0xa694fc3a => stake(uint256)    // 0xa939e300 => infoWallet(address)    // 0xb7760c8f => transfer(uint256,address)    // 0xc0973eed => rewardsAddress()    // 0xc413d100 => rewardsWithdrawn()    // 0xc7b8981c => withdrawRewards()    // 0xca15c873 => getRoleMemberCount(bytes32)    // 0xce4843e9 => currentTotalStake()    // 0xcf9d0b5f => stakeRewards()    // 0xd13f90b4 => initialize(address,address,uint256,uint256,uint256)    // 0xd3606a4b => feeDurations(uint256)    // 0xd547741f => revokeRole(bytes32,address)    // 0xe7ffc683 => setRewardsDistributedLastDate(uint256)    // 0xe9f69f24 => setFees(uint256[],uint256[],uint256[],address)    // 0xee172546 => totalRewardsDistributed()    // 0xf172117c => feeRewardAddress()    // 0xf21c783b => unstakingPeriod()    // 0xf640d508 => transferToken(address,uint256,address)    // 0xf97a3357 => getRewardsDistributedLastDate()    // 0xfc0c546a => token()}