ETH Price: $2,470.82 (+0.61%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
New Proposal137145912021-11-30 11:54:421069 days ago1638273282IN
0x7cB2Aa86...0F045d183
0 ETH0.3460741795.91997092
New Proposal130421602021-08-17 10:26:351174 days ago1629195995IN
0x7cB2Aa86...0F045d183
0 ETH0.1262781435
New Proposal130419472021-08-17 9:36:521174 days ago1629193012IN
0x7cB2Aa86...0F045d183
0 ETH0.1155699832.03206352
New Proposal128440322021-07-17 11:37:351205 days ago1626521855IN
0x7cB2Aa86...0F045d183
0 ETH0.0721589420
New Proposal128400062021-07-16 20:26:471206 days ago1626467207IN
0x7cB2Aa86...0F045d183
0 ETH0.1071560229.7
New Proposal128254282021-07-14 13:38:591208 days ago1626269939IN
0x7cB2Aa86...0F045d183
0 ETH0.1876132452
New Proposal128252912021-07-14 13:09:101208 days ago1626268150IN
0x7cB2Aa86...0F045d183
0 ETH0.1479258241
New Proposal126920322021-06-23 18:37:211229 days ago1624473441IN
0x7cB2Aa86...0F045d183
0 ETH0.0645684318
New Proposal126394492021-06-15 14:02:321237 days ago1623765752IN
0x7cB2Aa86...0F045d183
0 ETH0.0685507619
New Proposal123301742021-04-28 17:07:051285 days ago1619629625IN
0x7cB2Aa86...0F045d183
0 ETH0.52315231145
New Proposal123299152021-04-28 16:08:001285 days ago1619626080IN
0x7cB2Aa86...0F045d183
0 ETH0.44377748123
New Proposal122334522021-04-13 18:51:401300 days ago1618339900IN
0x7cB2Aa86...0F045d183
0 ETH0.59440375165
New Proposal121081492021-03-25 12:45:221319 days ago1616676322IN
0x7cB2Aa86...0F045d183
0 ETH0.83216526231.00000145
New Proposal120722262021-03-19 23:43:141325 days ago1616197394IN
0x7cB2Aa86...0F045d183
0 ETH0.45030587125
New Proposal120704112021-03-19 16:54:121325 days ago1616172852IN
0x7cB2Aa86...0F045d183
0 ETH0.57509789155
New Proposal119656502021-03-03 13:47:251341 days ago1614779245IN
0x7cB2Aa86...0F045d183
0 ETH0.41979255115
New Proposal119092082021-02-22 21:16:401350 days ago1614028600IN
0x7cB2Aa86...0F045d183
0 ETH0.75651387210
New Proposal118837382021-02-18 23:18:161354 days ago1613690296IN
0x7cB2Aa86...0F045d183
0 ETH0.47552142132
New Proposal118836582021-02-18 23:00:591354 days ago1613689259IN
0x7cB2Aa86...0F045d183
0 ETH0.50092681135
New Proposal118041462021-02-06 17:39:071366 days ago1612633147IN
0x7cB2Aa86...0F045d183
0 ETH0.54106822145
New Proposal117657642021-01-31 19:39:241372 days ago1612121964IN
0x7cB2Aa86...0F045d183
0 ETH0.4142814115
New Proposal112615202020-11-15 9:11:001449 days ago1605431460IN
0x7cB2Aa86...0F045d183
0 ETH0.0923825
New Proposal112615072020-11-15 9:08:511449 days ago1605431331IN
0x7cB2Aa86...0F045d183
0 ETH0.0951662725
New Proposal112614492020-11-15 8:58:341449 days ago1605430714IN
0x7cB2Aa86...0F045d183
0 ETH0.0808258822
New Proposal112569452020-11-14 16:37:001450 days ago1605371820IN
0x7cB2Aa86...0F045d183
0 ETH0.0916824525
View all transactions

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block From To
110883142020-10-19 19:11:061476 days ago1603134666  Contract Creation0 ETH
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xbD811593...C92916952
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
MVDProxy

Compiler Version
v0.6.11+commit.5ef660b1

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 14: MVDProxy.sol
pragma solidity ^0.6.0;

import "./IMVDProxy.sol";
import "./IMVDFunctionalityProposalManager.sol";
import "./IMVDFunctionalityProposal.sol";
import "./IERC20.sol";
import "./IMVDFunctionalityModelsManager.sol";
import "./ICommonUtilities.sol";
import "./IMVDFunctionalitiesManager.sol";
import "./IMVDWallet.sol";
import "./IERC721.sol";

contract MVDProxy is IMVDProxy {

    address[] private _delegates;

    constructor(address votingTokenAddress, address functionalityProposalManagerAddress, address stateHolderAddress, address functionalityModelsManagerAddress, address functionalitiesManagerAddress, address walletAddress, address doubleProxyAddress) public {
        if(votingTokenAddress == address(0)) {
            return;
        }
        init(votingTokenAddress, functionalityProposalManagerAddress, stateHolderAddress, functionalityModelsManagerAddress, functionalitiesManagerAddress, walletAddress, doubleProxyAddress);
    }

    function init(address votingTokenAddress, address functionalityProposalManagerAddress, address stateHolderAddress, address functionalityModelsManagerAddress, address functionalitiesManagerAddress, address walletAddress, address doubleProxyAddress) public override {

        require(_delegates.length == 0, "Init already called!");

        _delegates = new address[](7);

        IMVDProxyDelegate(_delegates[0] = votingTokenAddress).setProxy();

        IMVDProxyDelegate(_delegates[1] = functionalityProposalManagerAddress).setProxy();

        IMVDProxyDelegate(_delegates[2] = stateHolderAddress).setProxy();

        _delegates[3] = functionalityModelsManagerAddress;

        IMVDProxyDelegate(_delegates[4] = functionalitiesManagerAddress).setProxy();

        IMVDProxyDelegate(_delegates[5] = walletAddress).setProxy();

        IMVDProxyDelegate(_delegates[6] = doubleProxyAddress).setProxy();
    }

    receive() external payable {
        revert("No Eth Accepted");
    }

    function getDelegates() public override view returns(address[] memory) {
        return _delegates;
    }

    function getToken() public override view returns(address) {
        return _delegates[0];
    }

    function getMVDFunctionalityProposalManagerAddress() public override view returns(address) {
        return _delegates[1];
    }

    function getStateHolderAddress() public override view returns(address) {
        return _delegates[2];
    }

    function getMVDFunctionalityModelsManagerAddress() public override view returns(address) {
        return _delegates[3];
    }

    function getMVDFunctionalitiesManagerAddress() public override view returns(address) {
        return _delegates[4];
    }

    function getMVDWalletAddress() public override view returns(address) {
        return _delegates[5];
    }

    function getDoubleProxyAddress() public override view returns(address) {
        return _delegates[6];
    }

    function flushToWallet(address tokenAddress, bool is721, uint256 tokenId) public override {
        require(IMVDFunctionalitiesManager(_delegates[4]).isAuthorizedFunctionality(msg.sender), "Unauthorized action!");
        if(tokenAddress == address(0)) {
            payable(_delegates[5]).transfer(payable(address(this)).balance);
            return;
        }
        if(is721) {
            IERC721(tokenAddress).transferFrom(address(this), _delegates[5], tokenId);
            return;
        }
        IERC20 token = IERC20(tokenAddress);
        token.transfer(_delegates[5], token.balanceOf(address(this)));
    }

    function setDelegate(uint256 position, address newAddress) public override returns(address oldAddress) {
        require(IMVDFunctionalitiesManager(_delegates[4]).isAuthorizedFunctionality(msg.sender), "Unauthorized action!");
        require(newAddress != address(0), "Cannot set void address!");
        if(position == 5) {
            IMVDWallet(_delegates[5]).setNewWallet(payable(newAddress), _delegates[0]);
        }
        oldAddress = _delegates[position];
        _delegates[position] = newAddress;
        if(position != 3) {
            IMVDProxyDelegate(oldAddress).setProxy();
            IMVDProxyDelegate(newAddress).setProxy();
        }
        emit DelegateChanged(position, oldAddress, newAddress);
    }

    function changeProxy(address newAddress, bytes memory initPayload) public override {
        require(IMVDFunctionalitiesManager(_delegates[4]).isAuthorizedFunctionality(msg.sender), "Unauthorized action!");
        require(newAddress != address(0), "Cannot set void address!");
        for(uint256 i = 0; i < _delegates.length; i++) {
            if(i != 3) {
                IMVDProxyDelegate(_delegates[i]).setProxy();
            }
        }
        _delegates = new address[](0);
        emit ProxyChanged(newAddress);
        (bool response,) = newAddress.call(initPayload);
        require(response, "New Proxy initPayload failed!");
    }

    function isValidProposal(address proposal) public override view returns (bool) {
        return IMVDFunctionalityProposalManager(_delegates[1]).isValidProposal(proposal);
    }

    function isAuthorizedFunctionality(address functionality) public override view returns(bool) {
        return IMVDFunctionalitiesManager(_delegates[4]).isAuthorizedFunctionality(functionality);
    }

    function newProposal(string memory codeName, bool emergency, address sourceLocation, uint256 sourceLocationId, address location, bool submitable, string memory methodSignature, string memory returnAbiParametersArray, bool isInternal, bool needsSender, string memory replaces) public override returns(address proposalAddress) {
        emergencyBehavior(emergency);

        IMVDFunctionalityModelsManager(_delegates[3]).checkWellKnownFunctionalities(codeName, submitable, methodSignature, returnAbiParametersArray, isInternal, needsSender, replaces);

        IMVDFunctionalitiesManager functionalitiesManager = IMVDFunctionalitiesManager(_delegates[4]);

        IMVDFunctionalityProposal proposal = IMVDFunctionalityProposal(proposalAddress = IMVDFunctionalityProposalManager(_delegates[1]).newProposal(codeName, location, methodSignature, returnAbiParametersArray, replaces));
        proposal.setCollateralData(emergency, sourceLocation, sourceLocationId, submitable, isInternal, needsSender, msg.sender, functionalitiesManager.hasFunctionality("getVotesHardCap") ? toUint256(read("getVotesHardCap", "")) : 0);

        if(functionalitiesManager.hasFunctionality("onNewProposal")) {
            submit("onNewProposal", abi.encode(proposalAddress));
        }

        if(!IMVDFunctionalitiesManager(_delegates[4]).hasFunctionality("startProposal") || !IMVDFunctionalitiesManager(_delegates[4]).hasFunctionality("disableProposal")) {
            proposal.start();
        }

        emit Proposal(proposalAddress);
    }

    function emergencyBehavior(bool emergency) private {
        if(!emergency) {
            return;
        }
        (address loc, , string memory meth,,) = IMVDFunctionalitiesManager(_delegates[4]).getFunctionalityData("getEmergencySurveyStaking");
        (, bytes memory payload) = loc.staticcall(abi.encodeWithSignature(meth));
        uint256 staking = toUint256(payload);
        if(staking > 0) {
            IERC20(_delegates[0]).transferFrom(msg.sender, address(this), staking);
        }
    }

    function startProposal(address proposalAddress) public override {
        require(IMVDFunctionalitiesManager(_delegates[4]).isAuthorizedFunctionality(msg.sender), "Unauthorized action!");
        (address location,,,,) = IMVDFunctionalitiesManager(_delegates[4]).getFunctionalityData("startProposal");
        require(location == msg.sender, "Only startProposal Functionality can enable a delayed proposal");
        require(IMVDFunctionalityProposalManager(_delegates[1]).isValidProposal(proposalAddress), "Invalid Proposal Address!");
        IMVDFunctionalityProposal(proposalAddress).start();
    }

    function disableProposal(address proposalAddress) public override {
        require(IMVDFunctionalitiesManager(_delegates[4]).isAuthorizedFunctionality(msg.sender), "Unauthorized action!");
        (address location,,,,) = IMVDFunctionalitiesManager(_delegates[4]).getFunctionalityData("disableProposal");
        require(location == msg.sender, "Only disableProposal Functionality can disable a delayed proposal");
        IMVDFunctionalityProposal(proposalAddress).disable();
    }

    function transfer(address receiver, uint256 value, address token) public override {
        require(IMVDFunctionalitiesManager(_delegates[4]).isAuthorizedFunctionality(msg.sender), "Only functionalities can transfer Proxy balances!");
        IMVDWallet(_delegates[5]).transfer(receiver, value, token);
    }

    function transfer721(address receiver, uint256 tokenId, bytes memory data, bool safe, address token) public override {
        require(IMVDFunctionalitiesManager(_delegates[4]).isAuthorizedFunctionality(msg.sender), "Only functionalities can transfer Proxy balances!");
        IMVDWallet(_delegates[5]).transfer(receiver, tokenId, data, safe, token);
    }

    function setProposal() public override {

        IMVDFunctionalityProposalManager(_delegates[1]).checkProposal(msg.sender);

        emit ProposalCheck(msg.sender);

        IMVDFunctionalitiesManager functionalitiesManager = IMVDFunctionalitiesManager(_delegates[4]);

        (address addressToCall,,string memory methodSignature,,) = functionalitiesManager.getFunctionalityData("checkSurveyResult");

        (bool surveyResult, bytes memory response) = addressToCall.staticcall(abi.encodeWithSignature(methodSignature, msg.sender));

        surveyResult = toUint256(response) > 0;

        bool collateralCallResult = true;
        (addressToCall,,methodSignature,,) = functionalitiesManager.getFunctionalityData("proposalEnd");
        if(addressToCall != address(0)) {
            functionalitiesManager.setCallingContext(addressToCall);
            (collateralCallResult,) = addressToCall.call(abi.encodeWithSignature(methodSignature, msg.sender, surveyResult));
            functionalitiesManager.clearCallingContext();
        }

        IMVDFunctionalityProposal proposal = IMVDFunctionalityProposal(msg.sender);

        uint256 staking = 0;
        address tokenAddress = _delegates[0];
        address walletAddress = _delegates[5];

        if(proposal.isEmergency()) {
            (addressToCall,,methodSignature,,) = functionalitiesManager.getFunctionalityData("getEmergencySurveyStaking");
            (, response) = addressToCall.staticcall(abi.encodeWithSignature(methodSignature));
            staking = toUint256(response);
        }

        if(!surveyResult) {
            if(collateralCallResult) {
                proposal.set();
                emit ProposalSet(msg.sender, surveyResult);
                if(staking > 0) {
                    IERC20(tokenAddress).transfer(walletAddress, staking);
                }
            }
            return;
        }

        if(collateralCallResult) {
            try functionalitiesManager.setupFunctionality(msg.sender) returns(bool managerResult) {
                collateralCallResult = managerResult;
            } catch {
                collateralCallResult = false;
            }
        }

        if(collateralCallResult) {
            proposal.set();
            emit ProposalSet(msg.sender, surveyResult);
            if(staking > 0) {
                IERC20(tokenAddress).transfer(surveyResult ? proposal.getProposer() : walletAddress, staking);
            }
        }
    }

    function read(string memory codeName, bytes memory data) public override view returns(bytes memory returnData) {

        (address location, bytes memory payload) = IMVDFunctionalitiesManager(_delegates[4]).preConditionCheck(codeName, data, 0, msg.sender, 0);

        bool ok;
        (ok, returnData) = location.staticcall(payload);

        require(ok, "Failed to read from functionality");
    }

    function submit(string memory codeName, bytes memory data) public override payable returns(bytes memory returnData) {

        if(msg.value > 0) {
            payable(_delegates[5]).transfer(msg.value);
        }

        IMVDFunctionalitiesManager manager = IMVDFunctionalitiesManager(_delegates[4]);
        (address location, bytes memory payload) = manager.preConditionCheck(codeName, data, 1, msg.sender, msg.value);

        bool changed = manager.setCallingContext(location);

        bool ok;
        (ok, returnData) = location.call(payload);

        if(changed) {
            manager.clearCallingContext();
        }
        require(ok, "Failed to submit functionality");
    }

    function callFromManager(address location, bytes memory payload) public override returns(bool, bytes memory) {
        require(msg.sender == _delegates[4], "Only Functionalities Manager can call this!");
        return location.call(payload);
    }

    function emitFromManager(string memory codeName, address proposal, string memory replaced, address replacedSourceLocation, uint256 replacedSourceLocationId, address location, bool submitable, string memory methodSignature, bool isInternal, bool needsSender, address proposalAddress) public override {
        require(msg.sender == _delegates[4], "Only Functionalities Manager can call this!");
        emit FunctionalitySet(codeName, proposal, replaced, replacedSourceLocation, replacedSourceLocationId, location, submitable, methodSignature, isInternal, needsSender, proposalAddress);
    }

    function emitEvent(string memory eventSignature, bytes memory firstIndex, bytes memory secondIndex, bytes memory data) public override {
        require(IMVDFunctionalitiesManager(_delegates[4]).isAuthorizedFunctionality(msg.sender), "Only authorized functionalities can emit events!");
        emit Event(eventSignature, keccak256(firstIndex), keccak256(secondIndex), data);
    }

    function compareStrings(string memory a, string memory b) private pure returns(bool) {
        return keccak256(bytes(a)) == keccak256(bytes(b));
    }

    function toUint256(bytes memory bs) internal pure returns(uint256 x) {
        if(bs.length >= 32) {
            assembly {
                x := mload(add(bs, add(0x20, 0)))
            }
        }
    }
}

interface IMVDProxyDelegate {
    function setProxy() external;
}

File 2 of 14: ICommonUtilities.sol
pragma solidity ^0.6.0;

interface ICommonUtilities {
    function toString(address _addr) external pure returns(string memory);
    function toString(uint _i) external pure returns(string memory);
    function toUint256(bytes calldata bs) external pure returns(uint256 x);
    function toAddress(bytes calldata b) external pure returns (address addr);
    function compareStrings(string calldata a, string calldata b) external pure returns(bool);
    function getFirstJSONPart(address sourceLocation, uint256 sourceLocationId, address location) external pure returns(bytes memory);
    function formatReturnAbiParametersArray(string calldata m) external pure returns(string memory);
    function toLowerCase(string calldata str) external pure returns(string memory);
}

File 3 of 14: IDoubleProxy.sol
pragma solidity ^0.6.0;

interface IDoubleProxy {
    function init(address[] calldata proxies, address currentProxy) external;
    function proxy() external view returns(address);
    function setProxy() external;
    function isProxy(address) external view returns(bool);
    function proxiesLength() external view returns(uint256);
    function proxies(uint256 start, uint256 offset) external view returns(address[] memory);
    function proxies() external view returns(address[] memory);
}

File 4 of 14: IERC20.sol
pragma solidity ^0.6.0;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 5 of 14: IERC721.sol
pragma solidity ^0.6.0;

interface IERC721 {
    function ownerOf(uint256 _tokenId) external view returns (address);
    function transferFrom(address _from, address _to, uint256 _tokenId) external payable;
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
}

File 6 of 14: IERC721Receiver.sol
pragma solidity ^0.6.0;

interface IERC721Receiver {
    function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);
}

File 7 of 14: IMVDFunctionalitiesManager.sol
pragma solidity ^0.6.0;

interface IMVDFunctionalitiesManager {

    function getProxy() external view returns (address);
    function setProxy() external;

    function init(address sourceLocation,
        uint256 getMinimumBlockNumberSourceLocationId, address getMinimumBlockNumberFunctionalityAddress,
        uint256 getEmergencyMinimumBlockNumberSourceLocationId, address getEmergencyMinimumBlockNumberFunctionalityAddress,
        uint256 getEmergencySurveyStakingSourceLocationId, address getEmergencySurveyStakingFunctionalityAddress,
        uint256 checkVoteResultSourceLocationId, address checkVoteResultFunctionalityAddress) external;

    function addFunctionality(string calldata codeName, address sourceLocation, uint256 sourceLocationId, address location, bool submitable, string calldata methodSignature, string calldata returnAbiParametersArray, bool isInternal, bool needsSender) external;
    function addFunctionality(string calldata codeName, address sourceLocation, uint256 sourceLocationId, address location, bool submitable, string calldata methodSignature, string calldata returnAbiParametersArray, bool isInternal, bool needsSender, uint256 position) external;
    function removeFunctionality(string calldata codeName) external returns(bool removed, uint256 position);
    function isValidFunctionality(address functionality) external view returns(bool);
    function isAuthorizedFunctionality(address functionality) external view returns(bool);
    function setCallingContext(address location) external returns(bool);
    function clearCallingContext() external;
    function getFunctionalityData(string calldata codeName) external view returns(address, uint256, string memory, address, uint256);
    function hasFunctionality(string calldata codeName) external view returns(bool);
    function getFunctionalitiesAmount() external view returns(uint256);
    function functionalitiesToJSON() external view returns(string memory);
    function functionalitiesToJSON(uint256 start, uint256 l) external view returns(string memory functionsJSONArray);
    function functionalityNames() external view returns(string memory);
    function functionalityNames(uint256 start, uint256 l) external view returns(string memory functionsJSONArray);
    function functionalityToJSON(string calldata codeName) external view returns(string memory);

    function preConditionCheck(string calldata codeName, bytes calldata data, uint8 submitable, address sender, uint256 value) external view returns(address location, bytes memory payload);

    function setupFunctionality(address proposalAddress) external returns (bool);
}

File 8 of 14: IMVDFunctionalityModelsManager.sol
pragma solidity ^0.6.0;

interface IMVDFunctionalityModelsManager {
    function init() external;
    function checkWellKnownFunctionalities(string calldata codeName, bool submitable, string calldata methodSignature, string calldata returnAbiParametersArray, bool isInternal, bool needsSender, string calldata replaces) external view;
}

File 9 of 14: IMVDFunctionalityProposal.sol
pragma solidity ^0.6.0;

interface IMVDFunctionalityProposal {

    function init(string calldata codeName, address location, string calldata methodSignature, string calldata returnAbiParametersArray, string calldata replaces, address proxy) external;
    function setCollateralData(bool emergency, address sourceLocation, uint256 sourceLocationId, bool submitable, bool isInternal, bool needsSender, address proposer, uint256 votesHardCap) external;

    function getProxy() external view returns(address);
    function getCodeName() external view returns(string memory);
    function isEmergency() external view returns(bool);
    function getSourceLocation() external view returns(address);
    function getSourceLocationId() external view returns(uint256);
    function getLocation() external view returns(address);
    function isSubmitable() external view returns(bool);
    function getMethodSignature() external view returns(string memory);
    function getReturnAbiParametersArray() external view returns(string memory);
    function isInternal() external view returns(bool);
    function needsSender() external view returns(bool);
    function getReplaces() external view returns(string memory);
    function getProposer() external view returns(address);
    function getSurveyEndBlock() external view returns(uint256);
    function getSurveyDuration() external view returns(uint256);
    function isVotesHardCapReached() external view returns(bool);
    function getVotesHardCapToReach() external view returns(uint256);
    function toJSON() external view returns(string memory);
    function getVote(address addr) external view returns(uint256 accept, uint256 refuse);
    function getVotes() external view returns(uint256, uint256);
    function start() external;
    function disable() external;
    function isDisabled() external view returns(bool);
    function isTerminated() external view returns(bool);
    function accept(uint256 amount) external;
    function retireAccept(uint256 amount) external;
    function moveToAccept(uint256 amount) external;
    function refuse(uint256 amount) external;
    function retireRefuse(uint256 amount) external;
    function moveToRefuse(uint256 amount) external;
    function retireAll() external;
    function withdraw() external;
    function terminate() external;
    function set() external;

    event Accept(address indexed voter, uint256 amount);
    event RetireAccept(address indexed voter, uint256 amount);
    event MoveToAccept(address indexed voter, uint256 amount);
    event Refuse(address indexed voter, uint256 amount);
    event RetireRefuse(address indexed voter, uint256 amount);
    event MoveToRefuse(address indexed voter, uint256 amount);
    event RetireAll(address indexed voter, uint256 amount);
}

File 10 of 14: IMVDFunctionalityProposalManager.sol
pragma solidity ^0.6.0;

interface IMVDFunctionalityProposalManager {
    function newProposal(string calldata codeName, address location, string calldata methodSignature, string calldata returnAbiParametersArray, string calldata replaces) external returns(address);
    function checkProposal(address proposalAddress) external;
    function getProxy() external view returns (address);
    function setProxy() external;
    function isValidProposal(address proposal) external view returns (bool);
}

File 11 of 14: IMVDProxy.sol
pragma solidity ^0.6.0;

interface IMVDProxy {

    function init(address votingTokenAddress, address functionalityProposalManagerAddress, address stateHolderAddress, address functionalityModelsManagerAddress, address functionalitiesManagerAddress, address walletAddress, address doubleProxyAddress) external;

    function getDelegates() external view returns(address[] memory);
    function getToken() external view returns(address);
    function getMVDFunctionalityProposalManagerAddress() external view returns(address);
    function getStateHolderAddress() external view returns(address);
    function getMVDFunctionalityModelsManagerAddress() external view returns(address);
    function getMVDFunctionalitiesManagerAddress() external view returns(address);
    function getMVDWalletAddress() external view returns(address);
    function getDoubleProxyAddress() external view returns(address);
    function setDelegate(uint256 position, address newAddress) external returns(address oldAddress);
    function changeProxy(address newAddress, bytes calldata initPayload) external;
    function isValidProposal(address proposal) external view returns (bool);
    function isAuthorizedFunctionality(address functionality) external view returns(bool);
    function newProposal(string calldata codeName, bool emergency, address sourceLocation, uint256 sourceLocationId, address location, bool submitable, string calldata methodSignature, string calldata returnParametersJSONArray, bool isInternal, bool needsSender, string calldata replaces) external returns(address proposalAddress);
    function startProposal(address proposalAddress) external;
    function disableProposal(address proposalAddress) external;
    function transfer(address receiver, uint256 value, address token) external;
    function transfer721(address receiver, uint256 tokenId, bytes calldata data, bool safe, address token) external;
    function flushToWallet(address tokenAddress, bool is721, uint256 tokenId) external;
    function setProposal() external;
    function read(string calldata codeName, bytes calldata data) external view returns(bytes memory returnData);
    function submit(string calldata codeName, bytes calldata data) external payable returns(bytes memory returnData);
    function callFromManager(address location, bytes calldata payload) external returns(bool, bytes memory);
    function emitFromManager(string calldata codeName, address proposal, string calldata replaced, address replacedSourceLocation, uint256 replacedSourceLocationId, address location, bool submitable, string calldata methodSignature, bool isInternal, bool needsSender, address proposalAddress) external;

    function emitEvent(string calldata eventSignature, bytes calldata firstIndex, bytes calldata secondIndex, bytes calldata data) external;

    event ProxyChanged(address indexed newAddress);
    event DelegateChanged(uint256 position, address indexed oldAddress, address indexed newAddress);

    event Proposal(address proposal);
    event ProposalCheck(address indexed proposal);
    event ProposalSet(address indexed proposal, bool success);
    event FunctionalitySet(string codeName, address indexed proposal, string replaced, address replacedSourceLocation, uint256 replacedSourceLocationId, address indexed replacedLocation, bool replacedWasSubmitable, string replacedMethodSignature, bool replacedWasInternal, bool replacedNeededSender, address indexed replacedProposal);

    event Event(string indexed key, bytes32 indexed firstIndex, bytes32 indexed secondIndex, bytes data);
}

File 12 of 14: IMVDWallet.sol
pragma solidity ^0.6.0;

interface IMVDWallet {

    function getProxy() external view returns (address);

    function setProxy() external;

    function setNewWallet(address payable newWallet, address tokenAddress) external;

    function transfer(address receiver, uint256 value, address tokenAddress) external;
    
    function transfer(address receiver, uint256 tokenId, bytes calldata data, bool safe, address token) external;

    function flushToNewWallet(address token) external;

    function flush721ToNewWallet(uint256 tokenId, bytes calldata data, bool safe, address tokenAddress) external;
}

File 13 of 14: IStateHolder.sol
pragma solidity ^0.6.0;

interface IStateHolder {

    function init() external;

    function getProxy() external view returns (address);
    function setProxy() external;
    function toJSON() external view returns(string memory);
    function toJSON(uint256 start, uint256 l) external view returns(string memory);
    function getStateSize() external view returns (uint256);
    function exists(string calldata varName) external view returns(bool);
    function getDataType(string calldata varName) external view returns(string memory dataType);
    function clear(string calldata varName) external returns(string memory oldDataType, bytes memory oldVal);
    function setBytes(string calldata varName, bytes calldata val) external returns(bytes memory);
    function getBytes(string calldata varName) external view returns(bytes memory);
    function setString(string calldata varName, string calldata val) external returns(string memory);
    function getString(string calldata varName) external view returns (string memory);
    function setBool(string calldata varName, bool val) external returns(bool);
    function getBool(string calldata varName) external view returns (bool);
    function getUint256(string calldata varName) external view returns (uint256);
    function setUint256(string calldata varName, uint256 val) external returns(uint256);
    function getAddress(string calldata varName) external view returns (address);
    function setAddress(string calldata varName, address val) external returns (address);
}

File 14 of 14: IVotingToken.sol
pragma solidity ^0.6.0;

interface IVotingToken {
    function init(string calldata name, string calldata symbol, uint256 decimals, uint256 totalSupply) external;

    function getProxy() external view returns (address);
    function setProxy() external;

    function name() external view returns(string memory);
    function symbol() external view returns(string memory);
    function decimals() external view returns(uint256);

    function mint(uint256 amount) external;
    function burn(uint256 amount) external;

    function increaseAllowance(address spender, uint256 addedValue) external returns (bool);
    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool);
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"votingTokenAddress","type":"address"},{"internalType":"address","name":"functionalityProposalManagerAddress","type":"address"},{"internalType":"address","name":"stateHolderAddress","type":"address"},{"internalType":"address","name":"functionalityModelsManagerAddress","type":"address"},{"internalType":"address","name":"functionalitiesManagerAddress","type":"address"},{"internalType":"address","name":"walletAddress","type":"address"},{"internalType":"address","name":"doubleProxyAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"position","type":"uint256"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"key","type":"string"},{"indexed":true,"internalType":"bytes32","name":"firstIndex","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"secondIndex","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"Event","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"codeName","type":"string"},{"indexed":true,"internalType":"address","name":"proposal","type":"address"},{"indexed":false,"internalType":"string","name":"replaced","type":"string"},{"indexed":false,"internalType":"address","name":"replacedSourceLocation","type":"address"},{"indexed":false,"internalType":"uint256","name":"replacedSourceLocationId","type":"uint256"},{"indexed":true,"internalType":"address","name":"replacedLocation","type":"address"},{"indexed":false,"internalType":"bool","name":"replacedWasSubmitable","type":"bool"},{"indexed":false,"internalType":"string","name":"replacedMethodSignature","type":"string"},{"indexed":false,"internalType":"bool","name":"replacedWasInternal","type":"bool"},{"indexed":false,"internalType":"bool","name":"replacedNeededSender","type":"bool"},{"indexed":true,"internalType":"address","name":"replacedProposal","type":"address"}],"name":"FunctionalitySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"proposal","type":"address"}],"name":"Proposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposal","type":"address"}],"name":"ProposalCheck","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proposal","type":"address"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"ProposalSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"ProxyChanged","type":"event"},{"inputs":[{"internalType":"address","name":"location","type":"address"},{"internalType":"bytes","name":"payload","type":"bytes"}],"name":"callFromManager","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"},{"internalType":"bytes","name":"initPayload","type":"bytes"}],"name":"changeProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"proposalAddress","type":"address"}],"name":"disableProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"eventSignature","type":"string"},{"internalType":"bytes","name":"firstIndex","type":"bytes"},{"internalType":"bytes","name":"secondIndex","type":"bytes"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"emitEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"codeName","type":"string"},{"internalType":"address","name":"proposal","type":"address"},{"internalType":"string","name":"replaced","type":"string"},{"internalType":"address","name":"replacedSourceLocation","type":"address"},{"internalType":"uint256","name":"replacedSourceLocationId","type":"uint256"},{"internalType":"address","name":"location","type":"address"},{"internalType":"bool","name":"submitable","type":"bool"},{"internalType":"string","name":"methodSignature","type":"string"},{"internalType":"bool","name":"isInternal","type":"bool"},{"internalType":"bool","name":"needsSender","type":"bool"},{"internalType":"address","name":"proposalAddress","type":"address"}],"name":"emitFromManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"bool","name":"is721","type":"bool"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"flushToWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getDelegates","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDoubleProxyAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMVDFunctionalitiesManagerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMVDFunctionalityModelsManagerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMVDFunctionalityProposalManagerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMVDWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStateHolderAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"votingTokenAddress","type":"address"},{"internalType":"address","name":"functionalityProposalManagerAddress","type":"address"},{"internalType":"address","name":"stateHolderAddress","type":"address"},{"internalType":"address","name":"functionalityModelsManagerAddress","type":"address"},{"internalType":"address","name":"functionalitiesManagerAddress","type":"address"},{"internalType":"address","name":"walletAddress","type":"address"},{"internalType":"address","name":"doubleProxyAddress","type":"address"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"functionality","type":"address"}],"name":"isAuthorizedFunctionality","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"proposal","type":"address"}],"name":"isValidProposal","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"codeName","type":"string"},{"internalType":"bool","name":"emergency","type":"bool"},{"internalType":"address","name":"sourceLocation","type":"address"},{"internalType":"uint256","name":"sourceLocationId","type":"uint256"},{"internalType":"address","name":"location","type":"address"},{"internalType":"bool","name":"submitable","type":"bool"},{"internalType":"string","name":"methodSignature","type":"string"},{"internalType":"string","name":"returnAbiParametersArray","type":"string"},{"internalType":"bool","name":"isInternal","type":"bool"},{"internalType":"bool","name":"needsSender","type":"bool"},{"internalType":"string","name":"replaces","type":"string"}],"name":"newProposal","outputs":[{"internalType":"address","name":"proposalAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"codeName","type":"string"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"read","outputs":[{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"position","type":"uint256"},{"internalType":"address","name":"newAddress","type":"address"}],"name":"setDelegate","outputs":[{"internalType":"address","name":"oldAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"proposalAddress","type":"address"}],"name":"startProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"codeName","type":"string"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"submit","outputs":[{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"address","name":"token","type":"address"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bool","name":"safe","type":"bool"},{"internalType":"address","name":"token","type":"address"}],"name":"transfer721","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

Deployed Bytecode

0x60806040526004361061016a5760003560e01c8063841d0ed7116100d1578063a9771afd1161008a578063c838ccb611610064578063c838ccb614611009578063dbba0f011461106e578063f0d4d592146110b1578063f5f62a6914611116576101ae565b8063a9771afd14610fac578063ba83c16f14610fdf578063c5c2fb6b14610ff4576101ae565b8063841d0ed714610bb45780638a86203914610d5f5780638e98ab5214610e2057806394dcf2e614610e355780639e813f1f14610e6e578063a58ea74314610f97576101ae565b806331c6903d1161012357806331c6903d146105f957806337aa4d791461060e57806337f2a380146106e45780634d4e352d146108ef5780634e0a53ec146109225780636701586a14610b9f576101ae565b80630c259388146101b3578063161f2a1e146103f55780631a7e9d781461042857806321df0da71461056c5780632a7434a81461059d5780633191d332146105b2576101ae565b366101ae576040805162461bcd60e51b815260206004820152600f60248201526e139bc8115d1a081058d8d95c1d1959608a1b604482015290519081900360640190fd5b600080fd5b3480156101bf57600080fd5b506103f3600480360360808110156101d657600080fd5b810190602081018135600160201b8111156101f057600080fd5b82018360208201111561020257600080fd5b803590602001918460018302840111600160201b8311171561022357600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561027557600080fd5b82018360208201111561028757600080fd5b803590602001918460018302840111600160201b831117156102a857600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156102fa57600080fd5b82018360208201111561030c57600080fd5b803590602001918460018302840111600160201b8311171561032d57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561037f57600080fd5b82018360208201111561039157600080fd5b803590602001918460018302840111600160201b831117156103b257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611157945050505050565b005b34801561040157600080fd5b506103f36004803603602081101561041857600080fd5b50356001600160a01b031661131e565b34801561043457600080fd5b506104e96004803603604081101561044b57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561047557600080fd5b82018360208201111561048757600080fd5b803590602001918460018302840111600160201b831117156104a857600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506116e6945050505050565b604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610530578181015183820152602001610518565b50505050905090810190601f16801561055d5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b34801561057857600080fd5b506105816117f7565b604080516001600160a01b039092168252519081900360200190f35b3480156105a957600080fd5b506103f3611821565b3480156105be57600080fd5b506105e5600480360360208110156105d557600080fd5b50356001600160a01b0316612619565b604080519115158252519081900360200190f35b34801561060557600080fd5b506105816126af565b34801561061a57600080fd5b506103f3600480360360a081101561063157600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561066057600080fd5b82018360208201111561067257600080fd5b803590602001918460018302840111600160201b8311171561069357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550505050803515159150602001356001600160a01b03166126be565b3480156106f057600080fd5b506103f3600480360361016081101561070857600080fd5b810190602081018135600160201b81111561072257600080fd5b82018360208201111561073457600080fd5b803590602001918460018302840111600160201b8311171561075557600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160a01b03853516959094909350604081019250602001359050600160201b8111156107b857600080fd5b8201836020820111156107ca57600080fd5b803590602001918460018302840111600160201b831117156107eb57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160a01b0385358116966020870135966040810135909216955060608201351515945091925060a081019060800135600160201b81111561086357600080fd5b82018360208201111561087557600080fd5b803590602001918460018302840111600160201b8311171561089657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050508035151591506020810135151590604001356001600160a01b0316612895565b3480156108fb57600080fd5b506103f36004803603602081101561091257600080fd5b50356001600160a01b0316612acd565b34801561092e57600080fd5b50610581600480360361016081101561094657600080fd5b810190602081018135600160201b81111561096057600080fd5b82018360208201111561097257600080fd5b803590602001918460018302840111600160201b8311171561099357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929584351515956001600160a01b036020870135811696604081013596506060810135909116945060808101351515935060c081019060a00135600160201b811115610a1157600080fd5b820183602082011115610a2357600080fd5b803590602001918460018302840111600160201b83111715610a4457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b811115610a9657600080fd5b820183602082011115610aa857600080fd5b803590602001918460018302840111600160201b83111715610ac957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929584351515956020860135151595919450925060608101915060400135600160201b811115610b2b57600080fd5b820183602082011115610b3d57600080fd5b803590602001918460018302840111600160201b83111715610b5e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612d9d945050505050565b348015610bab57600080fd5b506105816136e9565b348015610bc057600080fd5b50610cea60048036036040811015610bd757600080fd5b810190602081018135600160201b811115610bf157600080fd5b820183602082011115610c0357600080fd5b803590602001918460018302840111600160201b83111715610c2457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b811115610c7657600080fd5b820183602082011115610c8857600080fd5b803590602001918460018302840111600160201b83111715610ca957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506136f8945050505050565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610d24578181015183820152602001610d0c565b50505050905090810190601f168015610d515780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610d6b57600080fd5b506103f360048036036040811015610d8257600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610dac57600080fd5b820183602082011115610dbe57600080fd5b803590602001918460018302840111600160201b83111715610ddf57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550613a27945050505050565b348015610e2c57600080fd5b50610581613d2a565b348015610e4157600080fd5b5061058160048036036040811015610e5857600080fd5b50803590602001356001600160a01b0316613d39565b610cea60048036036040811015610e8457600080fd5b810190602081018135600160201b811115610e9e57600080fd5b820183602082011115610eb057600080fd5b803590602001918460018302840111600160201b83111715610ed157600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b811115610f2357600080fd5b820183602082011115610f3557600080fd5b803590602001918460018302840111600160201b83111715610f5657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550614072945050505050565b348015610fa357600080fd5b5061058161451a565b348015610fb857600080fd5b506105e560048036036020811015610fcf57600080fd5b50356001600160a01b0316614529565b348015610feb57600080fd5b5061058161458b565b34801561100057600080fd5b5061058161459a565b34801561101557600080fd5b5061101e6145a9565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561105a578181015183820152602001611042565b505050509050019250505060405180910390f35b34801561107a57600080fd5b506103f36004803603606081101561109157600080fd5b506001600160a01b0381358116916020810135916040909101351661460b565b3480156110bd57600080fd5b506103f3600480360360e08110156110d457600080fd5b506001600160a01b038135811691602081013582169160408201358116916060810135821691608082013581169160a081013582169160c0909101351661475b565b34801561112257600080fd5b506103f36004803603606081101561113957600080fd5b506001600160a01b0381351690602081013515159060400135614b72565b600060048154811061116557fe5b60009182526020918290200154604080516318c8e99960e11b815233600482015290516001600160a01b0390921692633191d33292602480840193829003018186803b1580156111b457600080fd5b505afa1580156111c8573d6000803e3d6000fd5b505050506040513d60208110156111de57600080fd5b505161121b5760405162461bcd60e51b81526004018080602001828103825260308152602001806152916030913960400191505060405180910390fd5b81805190602001208380519060200120856040518082805190602001908083835b6020831061125b5780518252601f19909201916020918201910161123c565b51815160209384036101000a60001901801990921691161790526040805192909401829003822081835289518383015289519096507f83476fc047a113041fb40ec31039c5f12a2c2066570160c7be1cd7936bdd7e4895508994929350839283019185019080838360005b838110156112de5781810151838201526020016112c6565b50505050905090810190601f16801561130b5780820380516001836020036101000a031916815260200191505b509250505060405180910390a450505050565b600060048154811061132c57fe5b60009182526020918290200154604080516318c8e99960e11b815233600482015290516001600160a01b0390921692633191d33292602480840193829003018186803b15801561137b57600080fd5b505afa15801561138f573d6000803e3d6000fd5b505050506040513d60208110156113a557600080fd5b50516113ef576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420616374696f6e2160601b604482015290519081900360640190fd5b6000806004815481106113fe57fe5b600091825260208083209091015460408051636427760f60e11b81526004810193909352600d60248401526c1cdd185c9d141c9bdc1bdcd85b609a1b6044840152516001600160a01b039091169263c84eec1e9260648082019391829003018186803b15801561146d57600080fd5b505afa158015611481573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260a08110156114aa57600080fd5b81516020830151604080850180519151939592948301929184600160201b8211156114d457600080fd5b9083019060208201858111156114e957600080fd5b8251600160201b81118282018810171561150257600080fd5b82525081516020918201929091019080838360005b8381101561152f578181015183820152602001611517565b50505050905090810190601f16801561155c5780820380516001836020036101000a031916815260200191505b506040525093945050506001600160a01b038316331491506115b190505760405162461bcd60e51b815260040180806020018281038252603e81526020018061531d603e913960400191505060405180910390fd5b60006001815481106115bf57fe5b600091825260209182902001546040805163a9771afd60e01b81526001600160a01b0386811660048301529151919092169263a9771afd9260248082019391829003018186803b15801561161257600080fd5b505afa158015611626573d6000803e3d6000fd5b505050506040513d602081101561163c57600080fd5b505161168f576040805162461bcd60e51b815260206004820152601960248201527f496e76616c69642050726f706f73616c20416464726573732100000000000000604482015290519081900360640190fd5b816001600160a01b031663be9a65556040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156116ca57600080fd5b505af11580156116de573d6000803e3d6000fd5b505050505050565b6000606060006004815481106116f857fe5b6000918252602090912001546001600160a01b0316331461174a5760405162461bcd60e51b815260040180806020018281038252602b8152602001806152c1602b913960400191505060405180910390fd5b836001600160a01b0316836040518082805190602001908083835b602083106117845780518252601f199092019160209182019101611765565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146117e6576040519150601f19603f3d011682016040523d82523d6000602084013e6117eb565b606091505b50915091509250929050565b60008060008154811061180657fe5b6000918252602090912001546001600160a01b031690505b90565b600060018154811061182f57fe5b600091825260208220015460408051632c9f55ed60e01b815233600482015290516001600160a01b0390921692632c9f55ed9260248084019382900301818387803b15801561187d57600080fd5b505af1158015611891573d6000803e3d6000fd5b50506040513392507f8919c8af6c1a3c8d9432e127fc80d1dd4021f7a2c7193c6e7fa8950a452eb6639150600090a26000806004815481106118cf57fe5b600091825260208083209091015460408051636427760f60e11b81526004810193909352601160248401527018da1958dad4dd5c9d995e54995cdd5b1d607a1b6044840152516001600160a01b039091169350606091849163c84eec1e916064808201928792909190829003018186803b15801561194c57600080fd5b505afa158015611960573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260a081101561198957600080fd5b81516020830151604080850180519151939592948301929184600160201b8211156119b357600080fd5b9083019060208201858111156119c857600080fd5b8251600160201b8111828201881017156119e157600080fd5b82525081516020918201929091019080838360005b83811015611a0e5781810151838201526020016119f6565b50505050905090810190601f168015611a3b5780820380516001836020036101000a031916815260200191505b50604081815233602480840191909152815180840390910181526044909201908190528551979950949750600096606096506001600160a01b038a1695919450889350909150819060208401908083835b60208310611aab5780518252601f199092019160209182019101611a8c565b51815160001960209485036101000a01908116901991909116179052604080519490920184900390932092860180516001600160e01b03166001600160e01b031990941693909317835251855190945084935090508083835b60208310611b235780518252601f199092019160209182019101611b04565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114611b83576040519150601f19603f3d011682016040523d82523d6000602084013e611b88565b606091505b50915091506000611b9882614e5f565b60408051636427760f60e11b815260206004820152600b60248201526a1c1c9bdc1bdcd85b115b9960aa1b604482015290519290911193506001916001600160a01b0388169163c84eec1e916064808301926000929190829003018186803b158015611c0357600080fd5b505afa158015611c17573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260a0811015611c4057600080fd5b81516020830151604080850180519151939592948301929184600160201b821115611c6a57600080fd5b908301906020820185811115611c7f57600080fd5b8251600160201b811182820188101715611c9857600080fd5b82525081516020918201929091019080838360005b83811015611cc5578181015183820152602001611cad565b50505050905090810190601f168015611cf25780820380516001836020036101000a031916815260200191505b506040525093985090965050506001600160a01b038616159050611f2f57856001600160a01b03166374f81676866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015611d6857600080fd5b505af1158015611d7c573d6000803e3d6000fd5b505050506040513d6020811015611d9257600080fd5b5050604080513360248201528415156044808301919091528251808303909101815260649091019182905285516001600160a01b038816928791819060208401908083835b60208310611df65780518252601f199092019160209182019101611dd7565b51815160001960209485036101000a01908116901991909116179052604080519490920184900390932092860180516001600160e01b03166001600160e01b031990941693909317835251855190945084935090508083835b60208310611e6e5780518252601f199092019160209182019101611e4f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611ed0576040519150601f19603f3d011682016040523d82523d6000602084013e611ed5565b606091505b505080915050856001600160a01b031663d7e5d1af6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611f1657600080fd5b505af1158015611f2a573d6000803e3d6000fd5b505050505b60008054339190819081908190611f4257fe5b600091825260208220015481546001600160a01b03909116925081906005908110611f6957fe5b9060005260206000200160009054906101000a90046001600160a01b03169050836001600160a01b0316635f9e8f826040518163ffffffff1660e01b815260040160206040518083038186803b158015611fc257600080fd5b505afa158015611fd6573d6000803e3d6000fd5b505050506040513d6020811015611fec57600080fd5b5051156122bd5760408051636427760f60e11b8152602060048201526019602482015278676574456d657267656e63795375727665795374616b696e6760381b604482015290516001600160a01b038c169163c84eec1e916064808301926000929190829003018186803b15801561206357600080fd5b505afa158015612077573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260a08110156120a057600080fd5b81516020830151604080850180519151939592948301929184600160201b8211156120ca57600080fd5b9083019060208201858111156120df57600080fd5b8251600160201b8111828201881017156120f857600080fd5b82525081516020918201929091019080838360005b8381101561212557818101518382015260200161210d565b50505050905090810190601f1680156121525780820380516001836020036101000a031916815260200191505b50604052602001805190602001909291908051906020019092919050505090919250905050809950819a505050886001600160a01b031688604051602401604051602081830303815290604052906040518082805190602001908083835b602083106121cf5780518252601f1990920191602091820191016121b0565b51815160001960209485036101000a01908116901991909116179052604080519490920184900390932092860180516001600160e01b03166001600160e01b031990941693909317835251855190945084935090508083835b602083106122475780518252601f199092019160209182019101612228565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d80600081146122a7576040519150601f19603f3d011682016040523d82523d6000602084013e6122ac565b606091505b5096506122ba905086614e5f565b92505b866123f55784156123e657836001600160a01b031663b8e010de6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561230357600080fd5b505af1158015612317573d6000803e3d6000fd5b5050604080518a1515815290513393507fcecdf35241f88c3f9351331a7f5416b48d30429075f1061f7b247814050c4abc92509081900360200190a282156123e657816001600160a01b031663a9059cbb82856040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156123b957600080fd5b505af11580156123cd573d6000803e3d6000fd5b505050506040513d60208110156123e357600080fd5b50505b50505050505050505050612617565b8415612478576040805163fd5d2d1b60e01b815233600482015290516001600160a01b038c169163fd5d2d1b9160248083019260209291908290030181600087803b15801561244357600080fd5b505af192505050801561246857506040513d602081101561246357600080fd5b505160015b6124755760009450612478565b94505b841561260c57836001600160a01b031663b8e010de6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156124b957600080fd5b505af11580156124cd573d6000803e3d6000fd5b5050604080518a1515815290513393507fcecdf35241f88c3f9351331a7f5416b48d30429075f1061f7b247814050c4abc92509081900360200190a2821561260c57816001600160a01b031663a9059cbb88612529578261258f565b856001600160a01b031663e9790d026040518163ffffffff1660e01b815260040160206040518083038186803b15801561256257600080fd5b505afa158015612576573d6000803e3d6000fd5b505050506040513d602081101561258c57600080fd5b50515b856040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156125df57600080fd5b505af11580156125f3573d6000803e3d6000fd5b505050506040513d602081101561260957600080fd5b50505b505050505050505050505b565b60008060048154811061262857fe5b60009182526020918290200154604080516318c8e99960e11b81526001600160a01b03868116600483015291519190921692633191d3329260248082019391829003018186803b15801561267b57600080fd5b505afa15801561268f573d6000803e3d6000fd5b505050506040513d60208110156126a557600080fd5b505190505b919050565b60008060058154811061180657fe5b60006004815481106126cc57fe5b60009182526020918290200154604080516318c8e99960e11b815233600482015290516001600160a01b0390921692633191d33292602480840193829003018186803b15801561271b57600080fd5b505afa15801561272f573d6000803e3d6000fd5b505050506040513d602081101561274557600080fd5b50516127825760405162461bcd60e51b81526004018080602001828103825260318152602001806152ec6031913960400191505060405180910390fd5b600060058154811061279057fe5b60009182526020808320909101546040516371a76b3960e11b81526001600160a01b0389811660048301908152602483018a90528715156064840152868216608484015260a060448401908152895160a48501528951929094169563e34ed672958c958c958c958c958c95909460c490930192880191908190849084905b8381101561282657818101518382015260200161280e565b50505050905090810190601f1680156128535780820380516001836020036101000a031916815260200191505b509650505050505050600060405180830381600087803b15801561287657600080fd5b505af115801561288a573d6000803e3d6000fd5b505050505050505050565b60006004815481106128a357fe5b6000918252602090912001546001600160a01b031633146128f55760405162461bcd60e51b815260040180806020018281038252602b8152602001806152c1602b913960400191505060405180910390fd5b806001600160a01b0316866001600160a01b03168b6001600160a01b03167febd5e569e8bbe9e5ac1bcb04b1b69233c70f22f3984d8d033b245f4c10297a878e8d8d8d8c8c8c8c604051808060200180602001896001600160a01b03166001600160a01b031681526020018881526020018715151515815260200180602001861515151581526020018515151515815260200184810384528c818151815260200191508051906020019080838360005b838110156129bd5781810151838201526020016129a5565b50505050905090810190601f1680156129ea5780820380516001836020036101000a031916815260200191505b5084810383528b5181528b516020918201918d019080838360005b83811015612a1d578181015183820152602001612a05565b50505050905090810190601f168015612a4a5780820380516001836020036101000a031916815260200191505b50848103825287518152875160209182019189019080838360005b83811015612a7d578181015183820152602001612a65565b50505050905090810190601f168015612aaa5780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060405180910390a45050505050505050505050565b6000600481548110612adb57fe5b60009182526020918290200154604080516318c8e99960e11b815233600482015290516001600160a01b0390921692633191d33292602480840193829003018186803b158015612b2a57600080fd5b505afa158015612b3e573d6000803e3d6000fd5b505050506040513d6020811015612b5457600080fd5b5051612b9e576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420616374696f6e2160601b604482015290519081900360640190fd5b600080600481548110612bad57fe5b600091825260208083209091015460408051636427760f60e11b81526004810193909352600f60248401526e191a5cd8589b19541c9bdc1bdcd85b608a1b6044840152516001600160a01b039091169263c84eec1e9260648082019391829003018186803b158015612c1e57600080fd5b505afa158015612c32573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260a0811015612c5b57600080fd5b81516020830151604080850180519151939592948301929184600160201b821115612c8557600080fd5b908301906020820185811115612c9a57600080fd5b8251600160201b811182820188101715612cb357600080fd5b82525081516020918201929091019080838360005b83811015612ce0578181015183820152602001612cc8565b50505050905090810190601f168015612d0d5780820380516001836020036101000a031916815260200191505b506040525093945050506001600160a01b03831633149150612d6290505760405162461bcd60e51b815260040180806020018281038252604181526020018061535b6041913960600191505060405180910390fd5b816001600160a01b0316632f2770db6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156116ca57600080fd5b6000612da88b614e72565b6000600381548110612db657fe5b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b0316637415579f8d8989898989896040518863ffffffff1660e01b8152600401808060200188151515158152602001806020018060200187151515158152602001861515151581526020018060200185810385528c818151815260200191508051906020019080838360005b83811015612e5f578181015183820152602001612e47565b50505050905090810190601f168015612e8c5780820380516001836020036101000a031916815260200191505b5085810384528a5181528a516020918201918c019080838360005b83811015612ebf578181015183820152602001612ea7565b50505050905090810190601f168015612eec5780820380516001836020036101000a031916815260200191505b5085810383528951815289516020918201918b019080838360005b83811015612f1f578181015183820152602001612f07565b50505050905090810190601f168015612f4c5780820380516001836020036101000a031916815260200191505b50858103825286518152865160209182019188019080838360005b83811015612f7f578181015183820152602001612f67565b50505050905090810190601f168015612fac5780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060006040518083038186803b158015612fd257600080fd5b505afa158015612fe6573d6000803e3d6000fd5b50505050600080600481548110612ff957fe5b600091825260208220015481546001600160a01b0390911692508190600190811061302057fe5b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b031663a7d5a1ee8f8c8b8b896040518663ffffffff1660e01b81526004018080602001866001600160a01b03166001600160a01b0316815260200180602001806020018060200185810385528a818151815260200191508051906020019080838360005b838110156130c15781810151838201526020016130a9565b50505050905090810190601f1680156130ee5780820380516001836020036101000a031916815260200191505b5085810384528851815288516020918201918a019080838360005b83811015613121578181015183820152602001613109565b50505050905090810190601f16801561314e5780820380516001836020036101000a031916815260200191505b50858103835287518152875160209182019189019080838360005b83811015613181578181015183820152602001613169565b50505050905090810190601f1680156131ae5780820380516001836020036101000a031916815260200191505b50858103825286518152865160209182019188019080838360005b838110156131e15781810151838201526020016131c9565b50505050905090810190601f16801561320e5780820380516001836020036101000a031916815260200191505b509950505050505050505050602060405180830381600087803b15801561323457600080fd5b505af1158015613248573d6000803e3d6000fd5b505050506040513d602081101561325e57600080fd5b81019080805190602001909291905050509250829050806001600160a01b0316638d06bc5b8e8e8e8d8b8b338a6001600160a01b0316633c9808046040518163ffffffff1660e01b815260040180806020018281038252600f8152602001806e0676574566f7465734861726443617608c1b81525060200191505060206040518083038186803b1580156132f157600080fd5b505afa158015613305573d6000803e3d6000fd5b505050506040513d602081101561331b57600080fd5b5051613328576000613370565b61337061336b6040518060400160405280600f81526020016e0676574566f7465734861726443617608c1b815250604051806020016040528060008152506136f8565b614e5f565b604080516001600160e01b031960e08c901b16815298151560048a01526001600160a01b0397881660248a0152604489019690965293151560648801529115156084870152151560a486015290921660c484015260e48301919091525161010480830192600092919082900301818387803b1580156133ee57600080fd5b505af1158015613402573d6000803e3d6000fd5b505060408051630f26020160e21b8152602060048201819052600d60248301526c1bdb93995dd41c9bdc1bdcd85b609a1b604483015291516001600160a01b0387169450633c980804935060648083019392829003018186803b15801561346857600080fd5b505afa15801561347c573d6000803e3d6000fd5b505050506040513d602081101561349257600080fd5b5051156134ea57604080518082018252600d81526c1bdb93995dd41c9bdc1bdcd85b609a1b60208083019190915282516001600160a01b038716818301528351808203909201825283019092526134e891614072565b505b60006004815481106134f857fe5b6000918252602091829020015460408051630f26020160e21b815260048101849052600d60248201526c1cdd185c9d141c9bdc1bdcd85b609a1b604482015290516001600160a01b0390921692633c98080492606480840193829003018186803b15801561356557600080fd5b505afa158015613579573d6000803e3d6000fd5b505050506040513d602081101561358f57600080fd5b50511580613643575060006004815481106135a657fe5b6000918252602091829020015460408051630f26020160e21b815260048101849052600f60248201526e191a5cd8589b19541c9bdc1bdcd85b608a1b604482015290516001600160a01b0390921692633c98080492606480840193829003018186803b15801561361557600080fd5b505afa158015613629573d6000803e3d6000fd5b505050506040513d602081101561363f57600080fd5b5051155b1561369c57806001600160a01b031663be9a65556040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561368357600080fd5b505af1158015613697573d6000803e3d6000fd5b505050505b604080516001600160a01b038516815290517fd721fc4b71111225bba131141f013ef3e3956654b0eade3c9e9f611f0d93b5519181900360200190a150509b9a5050505050505050505050565b60008060048154811061180657fe5b606060006060600060048154811061370c57fe5b6000918252602080832090910154604051630c1423cb60e41b81526044810184905233606482018190526084820185905260a0600483019081528a5160a48401528a516001600160a01b039094169563c1423cb0958c958c95929493859390928392602483019260c401918a0190808383895b8381101561379757818101518382015260200161377f565b50505050905090810190601f1680156137c45780820380516001836020036101000a031916815260200191505b50838103825287518152875160209182019189019080838360005b838110156137f75781810151838201526020016137df565b50505050905090810190601f1680156138245780820380516001836020036101000a031916815260200191505b5097505050505050505060006040518083038186803b15801561384657600080fd5b505afa15801561385a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604090815281101561388357600080fd5b815160208301805160405192949293830192919084600160201b8211156138a957600080fd5b9083019060208201858111156138be57600080fd5b8251600160201b8111828201881017156138d757600080fd5b82525081516020918201929091019080838360005b838110156139045781810151838201526020016138ec565b50505050905090810190601f1680156139315780820380516001836020036101000a031916815260200191505b50604052505050915091506000826001600160a01b0316826040518082805190602001908083835b602083106139785780518252601f199092019160209182019101613959565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d80600081146139d8576040519150601f19603f3d011682016040523d82523d6000602084013e6139dd565b606091505b509450905080613a1e5760405162461bcd60e51b81526004018080602001828103825260218152602001806152706021913960400191505060405180910390fd5b50505092915050565b6000600481548110613a3557fe5b60009182526020918290200154604080516318c8e99960e11b815233600482015290516001600160a01b0390921692633191d33292602480840193829003018186803b158015613a8457600080fd5b505afa158015613a98573d6000803e3d6000fd5b505050506040513d6020811015613aae57600080fd5b5051613af8576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420616374696f6e2160601b604482015290519081900360640190fd5b6001600160a01b038216613b4e576040805162461bcd60e51b815260206004820152601860248201527743616e6e6f742073657420766f696420616464726573732160401b604482015290519081900360640190fd5b60005b600054811015613bd95780600314613bd15760008181548110613b7057fe5b600091825260208220015460408051633914a04f60e01b815290516001600160a01b0390921692633914a04f9260048084019382900301818387803b158015613bb857600080fd5b505af1158015613bcc573d6000803e3d6000fd5b505050505b600101613b51565b5060408051600080825260208201928390529051613bf792906151e6565b506040516001600160a01b038316907ff0cd76016a4ee33fe62814f8afd5492f47062ea7615bcc094f2f6fe71b62d1c490600090a26000826001600160a01b0316826040518082805190602001908083835b60208310613c685780518252601f199092019160209182019101613c49565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613cca576040519150601f19603f3d011682016040523d82523d6000602084013e613ccf565b606091505b5050905080613d25576040805162461bcd60e51b815260206004820152601d60248201527f4e65772050726f787920696e69745061796c6f6164206661696c656421000000604482015290519081900360640190fd5b505050565b60008060038154811061180657fe5b600080600481548110613d4857fe5b60009182526020918290200154604080516318c8e99960e11b815233600482015290516001600160a01b0390921692633191d33292602480840193829003018186803b158015613d9757600080fd5b505afa158015613dab573d6000803e3d6000fd5b505050506040513d6020811015613dc157600080fd5b5051613e0b576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420616374696f6e2160601b604482015290519081900360640190fd5b6001600160a01b038216613e61576040805162461bcd60e51b815260206004820152601860248201527743616e6e6f742073657420766f696420616464726573732160401b604482015290519081900360640190fd5b8260051415613f10576000600581548110613e7857fe5b600091825260208220015481546001600160a01b0390911691636c261975918591908190613ea257fe5b6000918252602082200154604080516001600160e01b031960e087901b1681526001600160a01b0394851660048201529390911660248401525160448084019382900301818387803b158015613ef757600080fd5b505af1158015613f0b573d6000803e3d6000fd5b505050505b60008381548110613f1d57fe5b600091825260208220015481546001600160a01b03909116925083919085908110613f4457fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260031461402157806001600160a01b0316633914a04f6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613fb557600080fd5b505af1158015613fc9573d6000803e3d6000fd5b50505050816001600160a01b0316633914a04f6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561400857600080fd5b505af115801561401c573d6000803e3d6000fd5b505050505b816001600160a01b0316816001600160a01b03167f5b9724fbfed485031cb1f2632de8a498984da9c3bb6a8b77b659abc1ce82970b856040518082815260200191505060405180910390a392915050565b606034156140cb57600060058154811061408857fe5b60009182526020822001546040516001600160a01b03909116913480156108fc02929091818181858888f193505050501580156140c9573d6000803e3d6000fd5b505b6000806004815481106140da57fe5b9060005260206000200160009054906101000a90046001600160a01b0316905060006060826001600160a01b031663c1423cb08787600133346040518663ffffffff1660e01b81526004018080602001806020018660ff168152602001856001600160a01b03166001600160a01b03168152602001848152602001838103835288818151815260200191508051906020019080838360005b8381101561418a578181015183820152602001614172565b50505050905090810190601f1680156141b75780820380516001836020036101000a031916815260200191505b50838103825287518152875160209182019189019080838360005b838110156141ea5781810151838201526020016141d2565b50505050905090810190601f1680156142175780820380516001836020036101000a031916815260200191505b5097505050505050505060006040518083038186803b15801561423957600080fd5b505afa15801561424d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604090815281101561427657600080fd5b815160208301805160405192949293830192919084600160201b82111561429c57600080fd5b9083019060208201858111156142b157600080fd5b8251600160201b8111828201881017156142ca57600080fd5b82525081516020918201929091019080838360005b838110156142f75781810151838201526020016142df565b50505050905090810190601f1680156143245780820380516001836020036101000a031916815260200191505b50604052505050915091506000836001600160a01b03166374f81676846040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561438957600080fd5b505af115801561439d573d6000803e3d6000fd5b505050506040513d60208110156143b357600080fd5b505160405183519192506000916001600160a01b038616918591819060208401908083835b602083106143f75780518252601f1990920191602091820191016143d8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614459576040519150601f19603f3d011682016040523d82523d6000602084013e61445e565b606091505b509650905081156144bd57846001600160a01b031663d7e5d1af6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156144a457600080fd5b505af11580156144b8573d6000803e3d6000fd5b505050505b8061450f576040805162461bcd60e51b815260206004820152601e60248201527f4661696c656420746f207375626d69742066756e6374696f6e616c6974790000604482015290519081900360640190fd5b505050505092915050565b60008060068154811061180657fe5b60008060018154811061453857fe5b600091825260209182902001546040805163a9771afd60e01b81526001600160a01b0386811660048301529151919092169263a9771afd9260248082019391829003018186803b15801561267b57600080fd5b60008060028154811061180657fe5b60008060018154811061180657fe5b6060600080548060200260200160405190810160405280929190818152602001828054801561460157602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116145e3575b5050505050905090565b600060048154811061461957fe5b60009182526020918290200154604080516318c8e99960e11b815233600482015290516001600160a01b0390921692633191d33292602480840193829003018186803b15801561466857600080fd5b505afa15801561467c573d6000803e3d6000fd5b505050506040513d602081101561469257600080fd5b50516146cf5760405162461bcd60e51b81526004018080602001828103825260318152602001806152ec6031913960400191505060405180910390fd5b60006005815481106146dd57fe5b60009182526020822001546040805163dbba0f0160e01b81526001600160a01b0387811660048301526024820187905285811660448301529151919092169263dbba0f01926064808201939182900301818387803b15801561473e57600080fd5b505af1158015614752573d6000803e3d6000fd5b50505050505050565b600054156147a7576040805162461bcd60e51b8152602060048201526014602482015273496e697420616c72656164792063616c6c65642160601b604482015290519081900360640190fd5b6040805160078082526101008201909252906020820160e080368337505081516147d89260009250602001906151e6565b5086600080815481106147e757fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790556001600160a01b0316633914a04f6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561484e57600080fd5b505af1158015614862573d6000803e3d6000fd5b5050505085600060018154811061487557fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790556001600160a01b0316633914a04f6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156148dc57600080fd5b505af11580156148f0573d6000803e3d6000fd5b5050505084600060028154811061490357fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790556001600160a01b0316633914a04f6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561496a57600080fd5b505af115801561497e573d6000803e3d6000fd5b5050505083600060038154811061499157fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508260006004815481106149ce57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790556001600160a01b0316633914a04f6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614a3557600080fd5b505af1158015614a49573d6000803e3d6000fd5b50505050816000600581548110614a5c57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790556001600160a01b0316633914a04f6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614ac357600080fd5b505af1158015614ad7573d6000803e3d6000fd5b50505050806000600681548110614aea57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790556001600160a01b0316633914a04f6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614b5157600080fd5b505af1158015614b65573d6000803e3d6000fd5b5050505050505050505050565b6000600481548110614b8057fe5b60009182526020918290200154604080516318c8e99960e11b815233600482015290516001600160a01b0390921692633191d33292602480840193829003018186803b158015614bcf57600080fd5b505afa158015614be3573d6000803e3d6000fd5b505050506040513d6020811015614bf957600080fd5b5051614c43576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420616374696f6e2160601b604482015290519081900360640190fd5b6001600160a01b038316614ca7576000600581548110614c5f57fe5b60009182526020822001546040516001600160a01b0390911691303180156108fc02929091818181858888f19350505050158015614ca1573d6000803e3d6000fd5b50613d25565b8115614d4457826001600160a01b03166323b872dd306000600581548110614ccb57fe5b6000918252602082200154604080516001600160e01b031960e087901b1681526001600160a01b039485166004820152939091166024840152604483018690525160648084019382900301818387803b158015614d2757600080fd5b505af1158015614d3b573d6000803e3d6000fd5b50505050613d25565b6000839050806001600160a01b031663a9059cbb6000600581548110614d6657fe5b60009182526020918290200154604080516370a0823160e01b815230600482015290516001600160a01b0392831693928716926370a082319260248082019391829003018186803b158015614dba57600080fd5b505afa158015614dce573d6000803e3d6000fd5b505050506040513d6020811015614de457600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b158015614e3557600080fd5b505af1158015614e49573d6000803e3d6000fd5b505050506040513d60208110156116de57600080fd5b600060208251106126aa57506020015190565b80614e7c576151e3565b600060606000600481548110614e8e57fe5b600091825260208083209091015460408051636427760f60e11b815260048101939093526019602484015278676574456d657267656e63795375727665795374616b696e6760381b6044840152516001600160a01b039091169263c84eec1e9260648082019391829003018186803b158015614f0957600080fd5b505afa158015614f1d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260a0811015614f4657600080fd5b81516020830151604080850180519151939592948301929184600160201b821115614f7057600080fd5b908301906020820185811115614f8557600080fd5b8251600160201b811182820188101715614f9e57600080fd5b82525081516020918201929091019080838360005b83811015614fcb578181015183820152602001614fb3565b50505050905090810190601f168015614ff85780820380516001836020036101000a031916815260200191505b506004815260248101604081905285519799509497506060966001600160a01b038a1696509094889450925082915060208401908083835b6020831061504f5780518252601f199092019160209182019101615030565b51815160001960209485036101000a01908116901991909116179052604080519490920184900390932092860180516001600160e01b03166001600160e01b031990941693909317835251855190945084935090508083835b602083106150c75780518252601f1990920191602091820191016150a8565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114615127576040519150601f19603f3d011682016040523d82523d6000602084013e61512c565b606091505b50915050600061513b82614e5f565b905080156151de576000808154811061515057fe5b6000918252602080832090910154604080516323b872dd60e01b81523360048201523060248201526044810186905290516001600160a01b03909216936323b872dd9360648084019491939192918390030190829087803b1580156151b457600080fd5b505af11580156151c8573d6000803e3d6000fd5b505050506040513d602081101561475257600080fd5b505050505b50565b82805482825590600052602060002090810192821561523b579160200282015b8281111561523b57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190615206565b5061524792915061524b565b5090565b61181e91905b808211156152475780546001600160a01b031916815560010161525156fe4661696c656420746f20726561642066726f6d2066756e6374696f6e616c6974794f6e6c7920617574686f72697a65642066756e6374696f6e616c69746965732063616e20656d6974206576656e7473214f6e6c792046756e6374696f6e616c6974696573204d616e616765722063616e2063616c6c2074686973214f6e6c792066756e6374696f6e616c69746965732063616e207472616e736665722050726f78792062616c616e636573214f6e6c7920737461727450726f706f73616c2046756e6374696f6e616c6974792063616e20656e61626c6520612064656c617965642070726f706f73616c4f6e6c792064697361626c6550726f706f73616c2046756e6374696f6e616c6974792063616e2064697361626c6520612064656c617965642070726f706f73616ca26469706673582212204c026691d666c8a17dbe99eb837d63d058de7eb407b82527bc273a9c9b8475c864736f6c634300060b0033

Deployed Bytecode Sourcemap

340:13916:13:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1901:25;;;-1:-1:-1;;;1901:25:13;;;;;;;;;;;;-1:-1:-1;;;1901:25:13;;;;;;;;;;;;;;340:13916;;;;13507:381;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;13507:381:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;13507:381:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13507:381:13;;;;;;;;-1:-1:-1;13507:381:13;;-1:-1:-1;;;;;13507:381:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;13507:381:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13507:381:13;;;;;;;;-1:-1:-1;13507:381:13;;-1:-1:-1;;;;;13507:381:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;13507:381:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13507:381:13;;;;;;;;-1:-1:-1;13507:381:13;;-1:-1:-1;;;;;13507:381:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;13507:381:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13507:381:13;;-1:-1:-1;13507:381:13;;-1:-1:-1;;;;;13507:381:13:i;:::-;;7317:602;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7317:602:13;-1:-1:-1;;;;;7317:602:13;;:::i;12656:248::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12656:248:13;;;;;;;;;;;;;;;-1:-1:-1;;;12656:248:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12656:248:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12656:248:13;;-1:-1:-1;12656:248:13;;-1:-1:-1;;;;;12656:248:13:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2050:95;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;2050:95:13;;;;;;;;;;;;;;9091:2460;;;;;;;;;;;;;:::i;5075:199::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5075:199:13;-1:-1:-1;;;;;5075:199:13;;:::i;:::-;;;;;;;;;;;;;;;;;;2659:106;;;;;;;;;;;;;:::i;8728:357::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8728:357:13;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8728:357:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8728:357:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8728:357:13;;-1:-1:-1;;;;8728:357:13;;;;;-1:-1:-1;8728:357:13;;;-1:-1:-1;;;;;8728:357:13;;:::i;12910:591::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12910:591:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12910:591:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12910:591:13;;-1:-1:-1;;;;;12910:591:13;;;;;;;;-1:-1:-1;12910:591:13;;;;-1:-1:-1;12910:591:13;;;;-1:-1:-1;;;;12910:591:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12910:591:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12910:591:13;;-1:-1:-1;;;;;12910:591:13;;;;;;;;;;;;;;;;;;-1:-1:-1;12910:591:13;;;;;;;-1:-1:-1;12910:591:13;;-1:-1:-1;12910:591:13;;;;;;;-1:-1:-1;;;12910:591:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12910:591:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12910:591:13;;-1:-1:-1;;;;12910:591:13;;;;;-1:-1:-1;12910:591:13;;;;;;;;;;-1:-1:-1;;;;;12910:591:13;;:::i;7925:483::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7925:483:13;-1:-1:-1;;;;;7925:483:13;;:::i;5280:1523::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5280:1523:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5280:1523:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5280:1523:13;;;;;;;-1:-1:-1;;;;;5280:1523:13;;;;;;;;;;;;-1:-1:-1;5280:1523:13;;;;;;;;-1:-1:-1;5280:1523:13;;;;;;;-1:-1:-1;5280:1523:13;;;;;;;-1:-1:-1;;;5280:1523:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5280:1523:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5280:1523:13;;;;;;;;-1:-1:-1;5280:1523:13;;-1:-1:-1;;;;;5280:1523:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5280:1523:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5280:1523:13;;;;;;;;;;;;;;;;-1:-1:-1;5280:1523:13;-1:-1:-1;5280:1523:13;;;;-1:-1:-1;5280:1523:13;;;-1:-1:-1;;;5280:1523:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5280:1523:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5280:1523:13;;-1:-1:-1;5280:1523:13;;-1:-1:-1;;;;;5280:1523:13:i;2531:122::-;;;;;;;;;;;;;:::i;11557:399::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11557:399:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11557:399:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11557:399:13;;;;;;;;-1:-1:-1;11557:399:13;;-1:-1:-1;;;;;11557:399:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11557:399:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11557:399:13;;-1:-1:-1;11557:399:13;;-1:-1:-1;;;;;11557:399:13:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4242:645;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4242:645:13;;;;;;;;;;;;;;;-1:-1:-1;;;4242:645:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4242:645:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4242:645:13;;-1:-1:-1;4242:645:13;;-1:-1:-1;;;;;4242:645:13:i;2399:126::-;;;;;;;;;;;;;:::i;3511:725::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3511:725:13;;;;;;-1:-1:-1;;;;;3511:725:13;;:::i;11962:688::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11962:688:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11962:688:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11962:688:13;;;;;;;;-1:-1:-1;11962:688:13;;-1:-1:-1;;;;;11962:688:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11962:688:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11962:688:13;;-1:-1:-1;11962:688:13;;-1:-1:-1;;;;;11962:688:13:i;2771:108::-;;;;;;;;;;;;;:::i;4893:176::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4893:176:13;-1:-1:-1;;;;;4893:176:13;;:::i;2285:108::-;;;;;;;;;;;;;:::i;2151:128::-;;;;;;;;;;;;;:::i;1939:105::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8414:308;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;8414:308:13;;;;;;;;;;;;;;;;;:::i;948:910::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;948:910:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2885:620::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2885:620:13;;;;;;;;;;;;;;;:::i;13507:381::-;13687:10;13698:1;13687:13;;;;;;;;;;;;;;;;;;;13660:79;;;-1:-1:-1;;;13660:79:13;;13728:10;13660:79;;;;;;-1:-1:-1;;;;;13687:13:13;;;;13660:67;;:79;;;;;;;;;;13687:13;13660:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13660:79:13;13652:140;;;;-1:-1:-1;;;13652:140:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13862:11;13852:22;;;;;;13839:10;13829:21;;;;;;13813:14;13807:74;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13807:74:13;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13807:74:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13807:74:13;;-1:-1:-1;13807:74:13;;;;-1:-1:-1;13807:74:13;;;;;;;;;;;-1:-1:-1;13807:74:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13507:381;;;;:::o;7317:602::-;7426:10;7437:1;7426:13;;;;;;;;;;;;;;;;;;;7399:79;;;-1:-1:-1;;;7399:79:13;;7467:10;7399:79;;;;;;-1:-1:-1;;;;;7426:13:13;;;;7399:67;;:79;;;;;;;;;;7426:13;7399:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7399:79:13;7391:112;;;;;-1:-1:-1;;;7391:112:13;;;;;;;;;;;;-1:-1:-1;;;7391:112:13;;;;;;;;;;;;;;;7514:16;7565:10;7576:1;7565:13;;;;;;;;;;;;;;;;;;;;7538:79;;;-1:-1:-1;;;7538:79:13;;;;;;;;;;;;;;-1:-1:-1;;;7538:79:13;;;;;-1:-1:-1;;;;;7565:13:13;;;;7538:62;;:79;;;;;;;;;;;7565:13;7538:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7538:79:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7538:79:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7538:79:13;;;;;;-1:-1:-1;7538:79:13;;;;;;;;;;-1:-1:-1;7538:79:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7538:79:13;;-1:-1:-1;7513:104:13;;-1:-1:-1;;;;;;;;7635:22:13;;7647:10;7635:22;;-1:-1:-1;7627:97:13;;-1:-1:-1;7627:97:13;;;-1:-1:-1;;;7627:97:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7775:10;7786:1;7775:13;;;;;;;;;;;;;;;;;;;7742:80;;;-1:-1:-1;;;7742:80:13;;-1:-1:-1;;;;;7742:80:13;;;;;;;;;7775:13;;;;;7742:63;;:80;;;;;;;;;;;7775:13;7742:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7742:80:13;7734:118;;;;;-1:-1:-1;;;7734:118:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;7888:15;-1:-1:-1;;;;;7862:48:13;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7317:602;;:::o;12656:248::-;12745:4;12751:12;12797:10;12808:1;12797:13;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12797:13:13;12783:10;:27;12775:83;;;;-1:-1:-1;;;12775:83:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12875:8;-1:-1:-1;;;;;12875:13:13;12889:7;12875:22;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12875:22:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12868:29;;;;12656:248;;;;;:::o;2050:95::-;2099:7;2125:10;2136:1;2125:13;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2125:13:13;;-1:-1:-1;2050:95:13;;:::o;9091:2460::-;9174:10;9185:1;9174:13;;;;;;;;;;;;;;;;;9141:73;;;-1:-1:-1;;;9141:73:13;;9203:10;9141:73;;;;;;-1:-1:-1;;;;;9174:13:13;;;;9141:61;;:73;;;;;;;;;;9174:13;;9141:73;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9230:25:13;;9244:10;;-1:-1:-1;9230:25:13;;-1:-1:-1;9230:25:13;;;9266:49;9345:10;9356:1;9345:13;;;;;;;;;;;;;;;;;;;;9429:64;;;-1:-1:-1;;;9429:64:13;;;;;;;;;;;;;;-1:-1:-1;;;9429:64:13;;;;;-1:-1:-1;;;;;9345:13:13;;;;-1:-1:-1;9394:29:13;;9345:13;;9429:43;;:64;;;;;9345:13;;9429:64;;;;;;;;9345:13;9429:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9429:64:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9429:64:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9429:64:13;;;;;;-1:-1:-1;9429:64:13;;;;;;;;;;-1:-1:-1;9429:64:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9429:64:13;;;;9615:10;9574:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;9370:123;;-1:-1:-1;9370:123:13;;-1:-1:-1;9505:17:13;;9429:64;;-1:-1:-1;;;;;;9549:24:13;;;9574:52;;-1:-1:-1;9370:123:13;;-1:-1:-1;9574:52:13;;-1:-1:-1;9574:52:13;;9429:64;9574:52;;;;;;;;;;;;;;;;-1:-1:-1;;9574:52:13;;;;;;;;;;;;;;;;-1:-1:-1;;9574:52:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9574:52:13;-1:-1:-1;;;;;;9574:52:13;;;;;;;;;9549:78;;;;;-1:-1:-1;9549:78:13;;-1:-1:-1;9549:78:13;-1:-1:-1;9549:78:13;;9574:52;9549:78;;;;;;;;;;-1:-1:-1;;9549:78:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9504:123;;;;9675:1;9653:19;9663:8;9653:9;:19::i;:::-;9766:58;;;-1:-1:-1;;;9766:58:13;;;;;;;;;;;;-1:-1:-1;;;9766:58:13;;;;;;9653:23;;;;;-1:-1:-1;9715:4:13;;-1:-1:-1;;;;;9766:43:13;;;;;:58;;;;;9687:25;;9766:58;;;;;;;:43;:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9766:58:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9766:58:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9766:58:13;;;;;;-1:-1:-1;9766:58:13;;;;;;;;;;-1:-1:-1;9766:58:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9766:58:13;;-1:-1:-1;9729:95:13;;-1:-1:-1;9729:95:13;;-1:-1:-1;;;;;;;;9837:27:13;;;;-1:-1:-1;9834:296:13;;9880:22;-1:-1:-1;;;;;9880:40:13;;9921:13;9880:55;;;;;;;;;;;;;-1:-1:-1;;;;;9880:55:13;-1:-1:-1;;;;;9880:55:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9994:66:13;;;10035:10;9994:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9975:18:13;;;10018:15;;9994:66;;9880:55;9994:66;;;;;;;;;;;;;;;;-1:-1:-1;;9994:66:13;;;;;;;;;;;;;;;;-1:-1:-1;;9994:66:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9994:66:13;-1:-1:-1;;;;;;9994:66:13;;;;;;;;;9975:86;;;;;-1:-1:-1;9975:86:13;;-1:-1:-1;9975:86:13;-1:-1:-1;9975:86:13;;9994:66;9975:86;;;;;;;;;;-1:-1:-1;;9975:86:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9949:112;;;;;10075:22;-1:-1:-1;;;;;10075:42:13;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9834:296;10140:34;10277:13;;10203:10;;10140:34;;;;;;;10277:13;;;;;;;;;;;;;10324;;-1:-1:-1;;;;;10277:13:13;;;;-1:-1:-1;10277:13:13;;10335:1;;10324:13;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10324:13:13;10300:37;;10351:8;-1:-1:-1;;;;;10351:20:13;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10351:22:13;10348:299;;;10426:72;;;-1:-1:-1;;;10426:72:13;;;;;;;;;;;;-1:-1:-1;;;10426:72:13;;;;;;-1:-1:-1;;;;;10426:43:13;;;;;:72;;;;;;;;;;;;;;:43;:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10426:72:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10426:72:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10426:72:13;;;;;;-1:-1:-1;10426:72:13;;;;;;;;;;-1:-1:-1;10426:72:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10389:109;;;;;;;;;;;;;;;10527:13;-1:-1:-1;;;;;10527:24:13;10576:15;10552:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10552:40:13;;;;;;;;;;;;;;;;-1:-1:-1;;10552:40:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10552:40:13;-1:-1:-1;;;;;;10552:40:13;;;;;;;;;10527:66;;;;;-1:-1:-1;10527:66:13;;-1:-1:-1;10527:66:13;-1:-1:-1;10527:66:13;;10552:40;10527:66;;;;;;;;;;-1:-1:-1;;10527:66:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10512:81:13;-1:-1:-1;10617:19:13;;-1:-1:-1;10512:81:13;10617:9;:19::i;:::-;10607:29;;10348:299;10661:12;10657:321;;10692:20;10689:259;;;10732:8;-1:-1:-1;;;;;10732:12:13;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10769:37:13;;;;;;;;;;10781:10;;-1:-1:-1;10769:37:13;;-1:-1:-1;10769:37:13;;;;;;;;10827:11;;10824:110;;10869:12;-1:-1:-1;;;;;10862:29:13;;10892:13;10907:7;10862:53;;;;;;;;;;;;;-1:-1:-1;;;;;10862:53:13;-1:-1:-1;;;;;10862:53:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10824:110:13;10961:7;;;;;;;;;;;;10657:321;10991:20;10988:272;;;11031:53;;;-1:-1:-1;;;11031:53:13;;11073:10;11031:53;;;;;;-1:-1:-1;;;;;11031:41:13;;;;;:53;;;;;;;;;;;;;;-1:-1:-1;11031:41:13;:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11031:53:13;;;11027:223;;11230:5;11207:28;;11027:223;;;11154:13;-1:-1:-1;11027:223:13;11273:20;11270:275;;;11309:8;-1:-1:-1;;;;;11309:12:13;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11342:37:13;;;;;;;;;;11354:10;;-1:-1:-1;11342:37:13;;-1:-1:-1;11342:37:13;;;;;;;;11396:11;;11393:142;;11434:12;-1:-1:-1;;;;;11427:29:13;;11457:12;:53;;11497:13;11457:53;;;11472:8;-1:-1:-1;;;;;11472:20:13;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11472:22:13;11457:53;11512:7;11427:93;;;;;;;;;;;;;-1:-1:-1;;;;;11427:93:13;-1:-1:-1;;;;;11427:93:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11393:142:13;9091:2460;;;;;;;;;;;:::o;5075:199::-;5162:4;5212:10;5223:1;5212:13;;;;;;;;;;;;;;;;;;;5185:82;;;-1:-1:-1;;;5185:82:13;;-1:-1:-1;;;;;5185:82:13;;;;;;;;;5212:13;;;;;5185:67;;:82;;;;;;;;;;;5212:13;5185:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5185:82:13;;-1:-1:-1;5075:199:13;;;;:::o;2659:106::-;2719:7;2745:10;2756:1;2745:13;;;;;;;8728:357;8890:10;8901:1;8890:13;;;;;;;;;;;;;;;;;;;8863:79;;;-1:-1:-1;;;8863:79:13;;8931:10;8863:79;;;;;;-1:-1:-1;;;;;8890:13:13;;;;8863:67;;:79;;;;;;;;;;8890:13;8863:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8863:79:13;8855:141;;;;-1:-1:-1;;;8855:141:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9017:10;9028:1;9017:13;;;;;;;;;;;;;;;;;;;;9006:72;;-1:-1:-1;;;9006:72:13;;-1:-1:-1;;;;;9006:72:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9017:13;;;;;9006:34;;9041:8;;9051:7;;9060:4;;9066;;9072:5;;9006:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8728:357;;;;;:::o;12910:591::-;13241:10;13252:1;13241:13;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13241:13:13;13227:10;:27;13219:83;;;;-1:-1:-1;;;13219:83:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13478:15;-1:-1:-1;;;;;13317:177:13;13414:8;-1:-1:-1;;;;;13317:177:13;13344:8;-1:-1:-1;;;;;13317:177:13;;13334:8;13354;13364:22;13388:24;13424:10;13436:15;13453:10;13465:11;13317:177;;;;;;;;;;-1:-1:-1;;;;;13317:177:13;-1:-1:-1;;;;;13317:177:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13317:177:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13317:177:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12910:591;;;;;;;;;;;:::o;7925:483::-;8036:10;8047:1;8036:13;;;;;;;;;;;;;;;;;;;8009:79;;;-1:-1:-1;;;8009:79:13;;8077:10;8009:79;;;;;;-1:-1:-1;;;;;8036:13:13;;;;8009:67;;:79;;;;;;;;;;8036:13;8009:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8009:79:13;8001:112;;;;;-1:-1:-1;;;8001:112:13;;;;;;;;;;;;-1:-1:-1;;;8001:112:13;;;;;;;;;;;;;;;8124:16;8175:10;8186:1;8175:13;;;;;;;;;;;;;;;;;;;;8148:81;;;-1:-1:-1;;;8148:81:13;;;;;;;;;;;;;;-1:-1:-1;;;8148:81:13;;;;;-1:-1:-1;;;;;8175:13:13;;;;8148:62;;:81;;;;;;;;;;;8175:13;8148:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8148:81:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8148:81:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8148:81:13;;;;;;-1:-1:-1;8148:81:13;;;;;;;;;;-1:-1:-1;8148:81:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8148:81:13;;-1:-1:-1;8123:106:13;;-1:-1:-1;;;;;;;;8247:22:13;;8259:10;8247:22;;-1:-1:-1;8239:100:13;;-1:-1:-1;8239:100:13;;;-1:-1:-1;;;8239:100:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8375:15;-1:-1:-1;;;;;8349:50:13;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5280:1523;5580:23;5615:28;5633:9;5615:17;:28::i;:::-;5685:10;5696:1;5685:13;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5685:13:13;-1:-1:-1;;;;;5654:75:13;;5730:8;5740:10;5752:15;5769:24;5795:10;5807:11;5820:8;5654:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5654:175:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5654:175:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5654:175:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5840:49;5919:10;5930:1;5919:13;;;;;;;;;;;;;;;;;6058;;-1:-1:-1;;;;;5919:13:13;;;;-1:-1:-1;5919:13:13;;;;6058;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6058:13:13;-1:-1:-1;;;;;6025:59:13;;6085:8;6095;6105:15;6122:24;6148:8;6025:132;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6025:132:13;-1:-1:-1;;;;;6025:132:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6025:132:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6025:132:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6025:132:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6007:150;;;5944:214;;6168:8;-1:-1:-1;;;;;6168:26:13;;6195:9;6206:14;6222:16;6240:10;6252;6264:11;6277:10;6289:22;-1:-1:-1;;;;;6289:39:13;;:58;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6289:58:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6289:58:13;:103;;6391:1;6289:103;;;6350:38;6360:27;;;;;;;;;;;;;;-1:-1:-1;;;6360:27:13;;;;;;;;;;;;;;;:4;:27::i;:::-;6350:9;:38::i;:::-;6168:225;;;-1:-1:-1;;;;;;6168:225:13;;;;;;;;;;;;;;-1:-1:-1;;;;;6168:225:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6168:225:13;;;;;;;-1:-1:-1;6168:225:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6407:56:13;;;-1:-1:-1;;;6407:56:13;;;;;;;;;;;;;;-1:-1:-1;;;6407:56:13;;;;;;-1:-1:-1;;;;;6407:39:13;;;-1:-1:-1;6407:39:13;;-1:-1:-1;6407:56:13;;;;;;;;;;;:39;:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6407:56:13;6404:138;;;6479:52;;;;;;;;;;;-1:-1:-1;;;6479:52:13;;;;;;;;6503:27;;-1:-1:-1;;;;;6503:27:13;;;;;;;;;;;;;;;;;;;;;6479:52;;:6;:52::i;:::-;;6404:138;6583:10;6594:1;6583:13;;;;;;;;;;;;;;;;;;;6556:75;;;-1:-1:-1;;;6556:75:13;;;;;;;;;;;;;-1:-1:-1;;;6556:75:13;;;;;;-1:-1:-1;;;;;6583:13:13;;;;6556:58;;:75;;;;;;;;;;6583:13;6556:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6556:75:13;6555:76;;:158;;;6663:10;6674:1;6663:13;;;;;;;;;;;;;;;;;;;6636:77;;;-1:-1:-1;;;6636:77:13;;;;;;;;;;;;;-1:-1:-1;;;6636:77:13;;;;;;-1:-1:-1;;;;;6663:13:13;;;;6636:58;;:77;;;;;;;;;;6663:13;6636:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6636:77:13;6635:78;6555:158;6552:204;;;6729:8;-1:-1:-1;;;;;6729:14:13;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6552:204;6771:25;;;-1:-1:-1;;;;;6771:25:13;;;;;;;;;;;;;;;5280:1523;;;;;;;;;;;;;;;:::o;2531:122::-;2607:7;2633:10;2644:1;2633:13;;;;;;;11557:399;11643:23;11680:16;11698:20;11749:10;11760:1;11749:13;;;;;;;;;;;;;;;;;;;;11722:93;;-1:-1:-1;;;11722:93:13;;;;;;;;11801:10;11722:93;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11749:13:13;;;;11722:59;;11782:8;;11792:4;;11749:13;;11801:10;11749:13;;11722:93;;;;;;;;;;;;;;;;;11749:13;11722:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11722:93:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11722:93:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11722:93:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11722:93:13;;;;;;-1:-1:-1;11722:93:13;;;;;;;;;;-1:-1:-1;11722:93:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11679:136;;;;11826:7;11862:8;-1:-1:-1;;;;;11862:19:13;11882:7;11862:28;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11862:28:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11843:47:13;-1:-1:-1;11843:47:13;-1:-1:-1;11843:47:13;11901:48;;;;-1:-1:-1;;;11901:48:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11557:399;;;;;;;:::o;4242:645::-;4370:10;4381:1;4370:13;;;;;;;;;;;;;;;;;;;4343:79;;;-1:-1:-1;;;4343:79:13;;4411:10;4343:79;;;;;;-1:-1:-1;;;;;4370:13:13;;;;4343:67;;:79;;;;;;;;;;4370:13;4343:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4343:79:13;4335:112;;;;;-1:-1:-1;;;4335:112:13;;;;;;;;;;;;-1:-1:-1;;;4335:112:13;;;;;;;;;;;;;;;-1:-1:-1;;;;;4465:24:13;;4457:61;;;;;-1:-1:-1;;;4457:61:13;;;;;;;;;;;;-1:-1:-1;;;4457:61:13;;;;;;;;;;;;;;;4532:9;4528:158;4551:10;:17;4547:21;;4528:158;;;4592:1;4597;4592:6;4589:87;;4636:10;4647:1;4636:13;;;;;;;;;;;;;;;;;4618:43;;;-1:-1:-1;;;4618:43:13;;;;-1:-1:-1;;;;;4636:13:13;;;;4618:41;;:43;;;;;;;;;;4636:13;;4618:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4589:87;4570:3;;4528:158;;;-1:-1:-1;4708:16:13;;;4722:1;4708:16;;;;;;;;;;4695:29;;;;4708:16;4695:29;:::i;:::-;-1:-1:-1;4739:24:13;;-1:-1:-1;;;;;4739:24:13;;;;;;;;4774:13;4792:10;-1:-1:-1;;;;;4792:15:13;4808:11;4792:28;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4792:28:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4773:47;;;4838:8;4830:50;;;;;-1:-1:-1;;;4830:50:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;4242:645;;;:::o;2399:126::-;2479:7;2505:10;2516:1;2505:13;;;;;;;3511:725;3594:18;3659:10;3670:1;3659:13;;;;;;;;;;;;;;;;;;;3632:79;;;-1:-1:-1;;;3632:79:13;;3700:10;3632:79;;;;;;-1:-1:-1;;;;;3659:13:13;;;;3632:67;;:79;;;;;;;;;;3659:13;3632:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3632:79:13;3624:112;;;;;-1:-1:-1;;;3624:112:13;;;;;;;;;;;;-1:-1:-1;;;3624:112:13;;;;;;;;;;;;;;;-1:-1:-1;;;;;3754:24:13;;3746:61;;;;;-1:-1:-1;;;3746:61:13;;;;;;;;;;;;-1:-1:-1;;;3746:61:13;;;;;;;;;;;;;;;3820:8;3832:1;3820:13;3817:117;;;3860:10;3871:1;3860:13;;;;;;;;;;;;;;;;;3909;;-1:-1:-1;;;;;3860:13:13;;;;3849:38;;3896:10;;3860:13;;;3909;;;;;;;;;;;;;3849:74;;;-1:-1:-1;;;;;;3849:74:13;;;;;;;-1:-1:-1;;;;;3849:74:13;;;;;;;3909:13;;;;3849:74;;;;;;;;;;;;;;;3909:13;3849:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3817:117;3956:10;3967:8;3956:20;;;;;;;;;;;;;;;;;3986;;-1:-1:-1;;;;;3956:20:13;;;;-1:-1:-1;4009:10:13;;3956:20;3997:8;;3986:20;;;;;;;;;;;;;;:33;;;;;-1:-1:-1;;;;;3986:33:13;;;;;-1:-1:-1;;;;;3986:33:13;;;;;;4032:8;4044:1;4032:13;4029:137;;4079:10;-1:-1:-1;;;;;4061:38:13;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4133:10;-1:-1:-1;;;;;4115:38:13;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4029:137;4218:10;-1:-1:-1;;;;;4180:49:13;4206:10;-1:-1:-1;;;;;4180:49:13;;4196:8;4180:49;;;;;;;;;;;;;;;;;;3511:725;;;;:::o;11962:688::-;12053:23;12092:9;:13;12089:85;;12129:10;12140:1;12129:13;;;;;;;;;;;;;;;;;12121:42;;-1:-1:-1;;;;;12129:13:13;;;;12153:9;12121:42;;;;;12153:9;;12121:42;12129:13;12121:42;12153:9;12129:13;12121:42;;;;;;;;;;;;;;;;;;;;;12089:85;12184:34;12248:10;12259:1;12248:13;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12248:13:13;12184:78;;12273:16;12291:20;12315:7;-1:-1:-1;;;;;12315:25:13;;12341:8;12351:4;12357:1;12360:10;12372:9;12315:67;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12315:67:13;-1:-1:-1;;;;;12315:67:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12315:67:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12315:67:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12315:67:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12315:67:13;;;;;;-1:-1:-1;12315:67:13;;;;;;;;;;-1:-1:-1;12315:67:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12272:110;;;;12393:12;12408:7;-1:-1:-1;;;;;12408:25:13;;12434:8;12408:35;;;;;;;;;;;;;-1:-1:-1;;;;;12408:35:13;-1:-1:-1;;;;;12408:35:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12408:35:13;12490:22;;;;12408:35;;-1:-1:-1;12454:7:13;;-1:-1:-1;;;;;12490:13:13;;;12504:7;;12490:22;;12408:35;12490:22;;;;;;;;;;;;;;;;-1:-1:-1;;12490:22:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12471:41:13;-1:-1:-1;12471:41:13;-1:-1:-1;12523:66:13;;;;12549:7;-1:-1:-1;;;;;12549:27:13;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12523:66;12606:2;12598:45;;;;;-1:-1:-1;;;12598:45:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;11962:688;;;;;;;;;:::o;2771:108::-;2833:7;2859:10;2870:1;2859:13;;;;;;;4893:176;4966:4;5022:10;5033:1;5022:13;;;;;;;;;;;;;;;;;;;4989:73;;;-1:-1:-1;;;4989:73:13;;-1:-1:-1;;;;;4989:73:13;;;;;;;;;5022:13;;;;;4989:63;;:73;;;;;;;;;;;5022:13;4989:73;;;;;;;;;;2285:108;2347:7;2373:10;2384:1;2373:13;;;;;;;2151:128;2233:7;2259:10;2270:1;2259:13;;;;;;;1939:105;1992:16;2027:10;2020:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2020:17:13;;;;;;;;;;;;;;;;;;;;;;;1939:105;:::o;8414:308::-;8541:10;8552:1;8541:13;;;;;;;;;;;;;;;;;;;8514:79;;;-1:-1:-1;;;8514:79:13;;8582:10;8514:79;;;;;;-1:-1:-1;;;;;8541:13:13;;;;8514:67;;:79;;;;;;;;;;8541:13;8514:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8514:79:13;8506:141;;;;-1:-1:-1;;;8506:141:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8668:10;8679:1;8668:13;;;;;;;;;;;;;;;;;8657:58;;;-1:-1:-1;;;8657:58:13;;-1:-1:-1;;;;;8657:58:13;;;;;;;;;;;;;;;;;;;;;;8668:13;;;;;8657:34;;:58;;;;;;;;;;;8668:13;;8657:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8414:308;;;:::o;948:910::-;1231:10;:17;:22;1223:55;;;;;-1:-1:-1;;;1223:55:13;;;;;;;;;;;;-1:-1:-1;;;1223:55:13;;;;;;;;;;;;;;;1302:16;;;1316:1;1302:16;;;;;;;;;;;;;;;;;;-1:-1:-1;;1289:29:13;;;;:10;;-1:-1:-1;1289:29:13;;;;:::i;:::-;;1363:18;1347:10;1358:1;1347:13;;;;;;;;;;;;;;;;:34;;;;;-1:-1:-1;;;;;1347:34:13;;;;;-1:-1:-1;;;;;1347:34:13;;;;;-1:-1:-1;;;;;1329:62:13;;:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1438:35;1422:10;1433:1;1422:13;;;;;;;;;;;;;;;;:51;;;;;-1:-1:-1;;;;;1422:51:13;;;;;-1:-1:-1;;;;;1422:51:13;;;;;-1:-1:-1;;;;;1404:79:13;;:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1530:18;1514:10;1525:1;1514:13;;;;;;;;;;;;;;;;:34;;;;;-1:-1:-1;;;;;1514:34:13;;;;;-1:-1:-1;;;;;1514:34:13;;;;;-1:-1:-1;;;;;1496:62:13;;:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1587:33;1571:10;1582:1;1571:13;;;;;;;;;;;;;;;;:49;;;;;-1:-1:-1;;;;;1571:49:13;;;;;-1:-1:-1;;;;;1571:49:13;;;;;;1665:29;1649:10;1660:1;1649:13;;;;;;;;;;;;;;;;:45;;;;;-1:-1:-1;;;;;1649:45:13;;;;;-1:-1:-1;;;;;1649:45:13;;;;;-1:-1:-1;;;;;1631:73:13;;:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1751:13;1735:10;1746:1;1735:13;;;;;;;;;;;;;;;;:29;;;;;-1:-1:-1;;;;;1735:29:13;;;;;-1:-1:-1;;;;;1735:29:13;;;;;-1:-1:-1;;;;;1717:57:13;;:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1821:18;1805:10;1816:1;1805:13;;;;;;;;;;;;;;;;:34;;;;;-1:-1:-1;;;;;1805:34:13;;;;;-1:-1:-1;;;;;1805:34:13;;;;;-1:-1:-1;;;;;1787:62:13;;:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;948:910;;;;;;;:::o;2885:620::-;3020:10;3031:1;3020:13;;;;;;;;;;;;;;;;;;;2993:79;;;-1:-1:-1;;;2993:79:13;;3061:10;2993:79;;;;;;-1:-1:-1;;;;;3020:13:13;;;;2993:67;;:79;;;;;;;;;;3020:13;2993:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2993:79:13;2985:112;;;;;-1:-1:-1;;;2985:112:13;;;;;;;;;;;;-1:-1:-1;;;2985:112:13;;;;;;;;;;;;;;;-1:-1:-1;;;;;3110:26:13;;3107:139;;3160:10;3171:1;3160:13;;;;;;;;;;;;;;;;;3152:63;;-1:-1:-1;;;;;3160:13:13;;;;3200:4;3184:30;3152:63;;;;;3184:30;;3152:63;3160:13;3152:63;3184:30;3160:13;3152:63;;;;;;;;;;;;;;;;;;;;;3229:7;;3107:139;3258:5;3255:128;;;3287:12;-1:-1:-1;;;;;3279:34:13;;3322:4;3329:10;3340:1;3329:13;;;;;;;;;;;;;;;;;3279:73;;;-1:-1:-1;;;;;;3279:73:13;;;;;;;-1:-1:-1;;;;;3279:73:13;;;;;;;3329:13;;;;3279:73;;;;;;;;;;;;;;;;;;;;;3329:13;3279:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3366:7;;3255:128;3392:12;3414;3392:35;;3437:5;-1:-1:-1;;;;;3437:14:13;;3452:10;3463:1;3452:13;;;;;;;;;;;;;;;;;;;3467:30;;;-1:-1:-1;;;3467:30:13;;3491:4;3467:30;;;;;;-1:-1:-1;;;;;3452:13:13;;;;3467:15;;;;;;:30;;;;;;;;;;;:15;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3467:30:13;3437:61;;;-1:-1:-1;;;;;;3437:61:13;;;;;;;-1:-1:-1;;;;;3437:61:13;;;;;;;;;;;;;;;;;;;;3467:30;;3437:61;;;;;;;-1:-1:-1;3437:61:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14051:203;14109:9;14146:2;14133;:9;:15;14130:118;;-1:-1:-1;14214:4:13;14202:21;14196:28;;14051:203::o;6809:502::-;6874:9;6870:46;;6899:7;;6870:46;6926:11;6941:18;6992:10;7003:1;6992:13;;;;;;;;;;;;;;;;;;;;6965:91;;;-1:-1:-1;;;6965:91:13;;;;;;;;;;;;;;-1:-1:-1;;;6965:91:13;;;;;-1:-1:-1;;;;;6992:13:13;;;;6965:62;;:91;;;;;;;;;;;6992:13;6965:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6965:91:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6965:91:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6965:91:13;;;;;;-1:-1:-1;6965:91:13;;;;;;;;;;-1:-1:-1;6965:91:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7108:29:13;;;;;;6965:91;7108:29;;;;;6925:131;;-1:-1:-1;6925:131:13;;-1:-1:-1;6965:91:13;;-1:-1:-1;;;;;7093:14:13;;;-1:-1:-1;6965:91:13;;6925:131;;-1:-1:-1;7108:29:13;-1:-1:-1;7108:29:13;;-1:-1:-1;6965:91:13;7108:29;;;;;;;;;;;;;;;;-1:-1:-1;;7108:29:13;;;;;;;;;;;;;;;;-1:-1:-1;;7108:29:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7108:29:13;-1:-1:-1;;;;;;7108:29:13;;;;;;;;;7093:45;;;;;-1:-1:-1;7093:45:13;;-1:-1:-1;7093:45:13;-1:-1:-1;7093:45:13;;7108:29;7093:45;;;;;;;;;;-1:-1:-1;;7093:45:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7066:72;;;7148:15;7166:18;7176:7;7166:9;:18::i;:::-;7148:36;-1:-1:-1;7197:11:13;;7194:111;;7231:10;7242:1;7231:13;;;;;;;;;;;;;;;;;;;;7224:70;;;-1:-1:-1;;;7224:70:13;;7259:10;7224:70;;;;7279:4;7224:70;;;;;;;;;;;;-1:-1:-1;;;;;7231:13:13;;;;7224:34;;:70;;;;;7231:13;;7224:70;;;;;;;;;;7231:13;7224:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7194:111;6809:502;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

ipfs://4c026691d666c8a17dbe99eb837d63d058de7eb407b82527bc273a9c9b8475c8

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.