Contract 0x0316EB71485b0Ab14103307bf65a021042c6d380 7

 

Contract Overview

Huobi: HBTC Token
Balance:
0 Ether

EtherValue:
$0.00

Token:
Txn Hash Method
Block
From
To
Value
0x167f8ee76df231972db13cf358a52440f5fcc2296296eb33c695ec77bc65266dTransfer(pending)2021-09-26 2:47:501 day 8 hrs ago0x5699202cf2f351157bcd3af8f311361504f43a46 IN Huobi: HBTC Token0 Ether(Pending)(Pending)
0x5b0862e0defdccd126f33fa171225237f1d9391e9954b0a1e4e0099686345c90Transfer133069562021-09-27 9:17:221 hr 55 mins ago0x9ab4f9d7e6c951c0dd1adb953d90b5cefc576359 IN  Huobi: HBTC Token0 Ether0.0030500456
0xb086aa2f5f00d6bc92df29d044e88ba67780cdd5e5e5f26742e074cf1ce7cd12Transfer133069062021-09-27 9:06:272 hrs 6 mins ago0x2ccedf46556b3b25794e8f9b84fd62577e848c15 IN  Huobi: HBTC Token0 Ether0.00484692073963.470447716
0x47f2b4c8f1182a093372f1e89f705963324196ee6a3210f42790996d59880c48Transfer133061172021-09-27 5:59:295 hrs 13 mins ago0x8d04e0645e6648a2649ae3289f64a4bf09d3e09e IN  Huobi: HBTC Token0 Ether0.00359548266
0x5952defcd34c07ae9cde11b44f0fa2e34590711f94c008cebd331a59508ea8e6Transfer133060802021-09-27 5:49:305 hrs 23 mins ago0xeb1ba8583bfbe3c3f589caad6cf6203493365591 IN  Huobi: HBTC Token0 Ether0.00391395100954.681685595
0x1997b881c1b726e4b216523f333ef72003647a532c564dc5eec68ba1847cda13Transfer133059962021-09-27 5:32:435 hrs 39 mins agoHuobi 12 IN  Huobi: HBTC Token0 Ether0.00755894799
0x93b5f552fb92ee80183caf2cdbd0d6e9d15146700689982c1c285b8f786f4fa4Transfer133058722021-09-27 5:02:226 hrs 10 mins ago0x7931cb92c651f6a0c3cd5d5d188acad92c0bec51 IN  Huobi: HBTC Token0 Ether0.00254891143
0x70755a4fd0c89760ee27c15ccd73358dc02e1efd395e74572a3ae0ecd5894fa1Transfer133058342021-09-27 4:54:596 hrs 17 mins agoHuobi 12 IN  Huobi: HBTC Token0 Ether0.008629245113
0x296ad45502ee5b690bcc94de885aed4c2a8900a76f3b95f4f426d7d22c13c31fTransfer133049182021-09-27 1:20:529 hrs 51 mins ago0xe2cce325bcfb9a7c5f408db6f3eb7265b54a3e37 IN  Huobi: HBTC Token0 Ether0.002843477252 47.969317823
0xc2578dc7ac6d23783e12d4fa11910587c7a5a5454dfc66a2161fd1ff10a8b023Transfer133048942021-09-27 1:15:469 hrs 56 mins agoHuobi 12 IN  Huobi: HBTC Token0 Ether0.00481175163
0x3cd06f09ce8c348792c181ee8887fae81286a4a1e3b1153d9c544eb76e159cf7Transfer133048922021-09-27 1:15:169 hrs 57 mins agoHuobi 12 IN  Huobi: HBTC Token0 Ether0.00481099563
0xee683a4a7d20726c0dd7379f15bd3ca0cb36f83d3e8d630fec04bf9be7c95f86Transfer133048092021-09-27 0:59:5610 hrs 12 mins agoHuobi 12 IN  Huobi: HBTC Token0 Ether0.00580465276
0x3cec8996266d7d3b897f1e2c81a4b264b9038b51e1fcb5138f50d02b553a3afbTransfer133047952021-09-27 0:56:1210 hrs 16 mins agoHuobi 12 IN  Huobi: HBTC Token0 Ether0.00572737575
0x2e7e365236d63d7c08ab1d97b54b774c61a12c1c8288f94d3f6fbb92a02f738aTransfer133047662021-09-27 0:50:5210 hrs 21 mins agoHuobi 12 IN  Huobi: HBTC Token0 Ether0.00641566884
0xdc1a78ba6751bb0b4e55531bbf5349a1a15249b240f73407bd8dd867567087bfTransfer133047402021-09-27 0:46:2310 hrs 26 mins agoHuobi 12 IN  Huobi: HBTC Token0 Ether0.0071783194
0x61c1c67e21d1f3095fd4cd7ea4c139489fb0a3d7df3adc22baf6bc087c86e6dcTransfer133026072021-09-26 16:58:5518 hrs 13 mins agoHuobi 12 IN  Huobi: HBTC Token0 Ether0.009071217153
0x722675876fc16048fb857dfa682f6e95a969d34d5e7a47cdae50cd43dabd41f1Transfer133026032021-09-26 16:57:4318 hrs 14 mins agoHuobi 12 IN  Huobi: HBTC Token0 Ether0.009071217153
0x1f2e7a8cc2a8519ff6464b7a6a91ef52d0490167f2431b65ff5f7c89015c831bTransfer133025992021-09-26 16:57:2518 hrs 15 mins agoHuobi 12 IN  Huobi: HBTC Token0 Ether0.009071217153
0x09fa8f5df09d47dbec834cd245a223f5a402f99957ebc042af2858b45500f390Transfer133025942021-09-26 16:56:1718 hrs 16 mins agoHuobi 12 IN  Huobi: HBTC Token0 Ether0.011687517153
0xf64f517d5be0ccdc11293ea4419b54c7ba7d87c0e07d58e0d46f8c21359ca336Transfer133023452021-09-26 16:00:4819 hrs 11 mins agoHuobi 12 IN  Huobi: HBTC Token0 Ether0.00521637688
0xc4f077b508762f05ab93e761239c9fcafc80ac3876d8c09bd4bf570c534caf48Approve133023132021-09-26 15:52:5019 hrs 19 mins ago0xe2cce325bcfb9a7c5f408db6f3eb7265b54a3e37 IN  Huobi: HBTC Token0 Ether0.002942625911 45.761164343
0x9958766c6f274814ff791cf603bd090a67ff9a1e22a7b4281333fc7c446f66caTransfer133023022021-09-26 15:50:3119 hrs 22 mins agoHuobi 12 IN  Huobi: HBTC Token0 Ether0.00565189874
0xb2a04aa1c3c061ce2f304eebaae12c439674af22969fa71aa71a5e1523b707b1Transfer133020412021-09-26 14:57:2720 hrs 15 mins ago0xa9c0204b10bba10ffce488dce6ffff1cacdbbb10 IN  Huobi: HBTC Token0 Ether0.00332309761
0xb89b59943e982f118eefa203e88b4fbf14a4068448228a706ed29d8bdea0c461Approve133013072021-09-26 12:14:3922 hrs 58 mins ago0xe2cce325bcfb9a7c5f408db6f3eb7265b54a3e37 IN  Huobi: HBTC Token0 Ether0.003096976313 48.161487838
0x41e2739be746418b8f6e818c5f20188aaf5df952cca2e267bd698422c17e3392Transfer133011532021-09-26 11:37:2123 hrs 35 mins ago0x66c77353cf689a96166c0d06f05d0b2e2fddadba IN  Huobi: HBTC Token0 Ether0.0023964644
[ Download CSV Export 

OVERVIEW

HBTC is a standard ERC20 token backed by 100% BTC. While maintaining the equivalent value of Bitcoin, it also has the flexibility of Ethereum. A bridge between the centralized market and the DeFi market.

View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
HBTCToken

Compiler Version
v0.5.11+commit.c082d0b4

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 5 of 9: HBTCToken.sol
pragma solidity ^0.5.11;

import "./IERC20Token.sol";
import "./HBTCAdmin.sol";
import "./HBTCLogic.sol";
import "./HBTCStorage.sol";
import "./Pausable.sol";

contract HBTCToken is IERC20Token,Pausable, HBTCAdmin{
    string public constant name = "Huobi BTC";

    string public constant symbol = "HBTC";

    uint8 public constant decimals = 18;

    HBTCLogic private logic;

    event Burning(address indexed from, uint256 value, string proof, string  btcAddress, address burner);
    event Burned(address indexed from, uint256 value, string proof, string  btcAddress);
    event Minting(address indexed to, uint256 value, string proof, address  minter);
    event Minted(address indexed to, uint256 value, string proof);

    constructor(address owner0, address owner1, address owner2) public{
        initAdmin(owner0, owner1, owner2);
    }


    function totalSupply() public view returns (uint256 supply) {
        return logic.getTotalSupply();
    }

    function balanceOf(address owner) public view returns (uint256 balance) {
        return logic.balanceOf(owner);
    }

    function mint(address to, uint256 value, string memory proof,bytes32 taskHash) public whenNotPaused returns(bool){
        require(itemAddressExists(OPERATORHASH, msg.sender), "wrong operator");
        uint256 status = logic.mintLogic(value,to,proof,taskHash, msg.sender, operatorRequireNum);
        if (status == 1){
            emit Minting(to, value, proof, msg.sender);
        }else if (status == 3) {
            emit Minting(to, value, proof, msg.sender);
            emit Minted(to, value, proof);
            emit Transfer(address(0x0),to,value);
        }
        return true;
    }


    function burn(address from,uint256 value,string memory btcAddress,string memory proof, bytes32 taskHash)
    public whenNotPaused returns(bool){
        require(itemAddressExists(OPERATORHASH, msg.sender), "wrong operator");
        uint256 status = logic.burnLogic(from,value,btcAddress,proof,taskHash, msg.sender, operatorRequireNum);
        if (status == 1){
           emit Burning(from, value, proof,btcAddress, msg.sender);
        }else if (status == 3) {
           emit Burning(from, value, proof,btcAddress,  msg.sender);
           emit Burned(from, value, proof,btcAddress);
           emit Transfer(from, address(0x0),value);
        }
        return true;
    }

    function cancelTask(bytes32 taskHash)  public returns(uint256){
        require(itemAddressExists(OPERATORHASH, msg.sender), "wrong operator");
        return logic.cancelTask(taskHash);
    }

    function transfer(address to, uint256 value) public whenNotPaused returns (bool) {
        bool flag = logic.transferLogic(msg.sender,to,value);
        require(flag, "transfer failed");
        emit Transfer(msg.sender,to,value);
        return true;
    }

    function transferFrom(address from, address to, uint256 value) public whenNotPaused  returns (bool){
        bool flag = logic.transferFromLogic(msg.sender,from,to,value);
        require(flag,"transferFrom failed");
        emit Transfer(from, to, value);
        return true;
    }


    function approve(address spender, uint256 value) public whenNotPaused returns (bool){
        bool flag = logic.approveLogic(msg.sender,spender,value);
        require(flag, "approve failed");
        emit Approval(msg.sender, spender, value);
        return true;
    }

    function allowance(address owner, address spender) public view returns (uint256 remaining){
        return logic.getAllowed(owner,spender);
    }

    function modifyAdminAddress(string memory class, address oldAddress, address newAddress) public whenPaused{
        require(newAddress != address(0x0), "wrong address");
        bool flag = modifyAddress(class, oldAddress, newAddress);
        if(flag){
            bytes32 classHash = keccak256(abi.encodePacked(class));
            if(classHash == LOGICHASH){
                logic = HBTCLogic(newAddress);
            }else if(classHash == STOREHASH){
                logic.resetStoreLogic(newAddress);
            }
        }
    }

    function getLogicAddress() public view returns(address){
        return address(logic);
    }

    function getStoreAddress() public view returns(address){
        return logic.getStoreAddress();
    }

    function pause() public{
        require(itemAddressExists(PAUSERHASH, msg.sender), "wrong user to pauser");
        doPause();
    }

}

File 1 of 9: Container.sol
pragma solidity ^0.5.11;

contract Container{
    struct Item{
        uint256 itemType;
        uint256 status;
        address[] addresses;
    }
    uint256 MaxItemAdressNum = 255;

    mapping (bytes32 => Item) private container;

    function itemAddressExists(bytes32 id, address oneAddress) internal view returns(bool){
        for(uint256 i = 0; i < container[id].addresses.length; i++){
            if(container[id].addresses[i] == oneAddress)
                return true;
        }
        return false;
    }
    function getItemAddresses(bytes32 id) internal view returns(address[] memory){
        return container[id].addresses;
    }

    function getItemInfo(bytes32 id) internal view returns(uint256, uint256, uint256){
        return (container[id].itemType, container[id].status, container[id].addresses.length);
    }

    function getItemAddressCount(bytes32 id) internal view returns(uint256){
        return container[id].addresses.length;
    }

    function setItemInfo(bytes32 id, uint256 itemType, uint256 status) internal{
        container[id].itemType = itemType;
        container[id].status = status;
    }

    function addItemAddress(bytes32 id, address oneAddress) internal{
        require(!itemAddressExists(id, oneAddress), "dup address added");
        require(container[id].addresses.length < MaxItemAdressNum, "too many addresses");
        container[id].addresses.push(oneAddress);
    }
    function removeItemAddresses(bytes32 id) internal{
        container[id].addresses.length = 0;
    }

    function removeOneItemAddress(bytes32 id, address oneAddress) internal{
        for(uint256 i = 0; i < container[id].addresses.length; i++){
            if(container[id].addresses[i] == oneAddress){
                container[id].addresses[i] = container[id].addresses[container[id].addresses.length - 1];
                container[id].addresses.length--;
                return;
            }
        }
        revert("not exist address");
    }

    function removeItem(bytes32 id) internal{
        delete container[id];
    }

    function replaceItemAddress(bytes32 id, address oneAddress, address anotherAddress) internal{
        require(!itemAddressExists(id,anotherAddress),"dup address added");
        for(uint256 i = 0; i < container[id].addresses.length; i++){
            if(container[id].addresses[i] == oneAddress){
                container[id].addresses[i] = anotherAddress;
                return;
            }
        }
        revert("not exist address");
    }
}

File 2 of 9: HBTCAdmin.sol
pragma solidity ^0.5.11;

import "./Container.sol";

contract HBTCAdmin is Container{

    bytes32 internal constant OWNERHASH = 0x02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c0;
    bytes32 internal constant OPERATORHASH = 0x46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f622;
    bytes32 internal constant PAUSERHASH = 0x0cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f;
    bytes32 internal constant STOREHASH = 0xe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd1680;
    bytes32 internal constant LOGICHASH = 0x397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f182;
    uint256 internal constant MAXUSERNUM = 255;
    bytes32[] private classHashArray;

    uint256 internal ownerRequireNum;
    uint256 internal operatorRequireNum;

    event AdminChanged(string TaskType, string class, address oldAddress, address newAddress);
    event AdminRequiredNumChanged(string TaskType, string class, uint256 previousNum, uint256 requiredNum);
    event AdminTaskDropped(bytes32 taskHash);

    function initAdmin(address owner0, address owner1, address owner2) internal{
        addItemAddress(OWNERHASH, owner0);
        addItemAddress(OWNERHASH, owner1);
        addItemAddress(OWNERHASH, owner2);
        addItemAddress(LOGICHASH, address(0x0));
        addItemAddress(STOREHASH, address(0x1));

        classHashArray.push(OWNERHASH);
        classHashArray.push(OPERATORHASH);
        classHashArray.push(PAUSERHASH);
        classHashArray.push(STOREHASH);
        classHashArray.push(LOGICHASH);
        ownerRequireNum = 2;
        operatorRequireNum = 2;
    }

    function classHashExist(bytes32 aHash) private view returns(bool){
        for(uint256 i = 0; i < classHashArray.length; i++)
            if(classHashArray[i] == aHash) return true;
        return false;
    }
    function getAdminAddresses(string memory class) public view returns(address[] memory) {
        bytes32 classHash = getClassHash(class);
        return getItemAddresses(classHash);
    }
    function getOwnerRequiredNum() public view returns(uint256){
        return ownerRequireNum;
    }
    function getOperatorRequiredNum() public view returns(uint256){
        return operatorRequireNum;
    }

    function resetRequiredNum(string memory class, uint256 requiredNum)
        public onlyOwner returns(bool){
        bytes32 classHash = getClassHash(class);
        require((classHash == OPERATORHASH) || (classHash == OWNERHASH),"wrong class");
        if (classHash == OWNERHASH)
            require(requiredNum <= getItemAddressCount(OWNERHASH),"num larger than existed owners");

        bytes32 taskHash = keccak256(abi.encodePacked("resetRequiredNum", class, requiredNum));
        addItemAddress(taskHash, msg.sender);

        if(getItemAddressCount(taskHash) >= ownerRequireNum){
            removeItem(taskHash);
            uint256 previousNum = 0;
            if (classHash == OWNERHASH){
                previousNum = ownerRequireNum;
                ownerRequireNum = requiredNum;
            }
            else if(classHash == OPERATORHASH){
                previousNum = operatorRequireNum;
                operatorRequireNum = requiredNum;
            }else{
                revert("wrong class");
            }
            emit AdminRequiredNumChanged("resetRequiredNum", class, previousNum, requiredNum);
        }
        return true;
    }


    function modifyAddress(string memory class, address oldAddress, address newAddress)
        internal onlyOwner returns(bool){
        bytes32 classHash = getClassHash(class);
        require(!itemAddressExists(classHash,newAddress),"address existed already");
        require(itemAddressExists(classHash,oldAddress),"address not existed");
        bytes32 taskHash = keccak256(abi.encodePacked("modifyAddress", class, oldAddress, newAddress));
        addItemAddress(taskHash, msg.sender);
        if(getItemAddressCount(taskHash) >= ownerRequireNum){
            replaceItemAddress(classHash, oldAddress, newAddress);
            emit AdminChanged("modifyAddress", class, oldAddress, newAddress);
            removeItem(taskHash);
            return true;
        }
        return false;
    }

    function getClassHash(string memory class) private view returns (bytes32){
        bytes32 classHash = keccak256(abi.encodePacked(class));
        require(classHashExist(classHash), "invalid class");
        return classHash;
    }

    function dropAddress(string memory class, address oneAddress)
        public onlyOwner returns(bool){
        bytes32 classHash = getClassHash(class);
        require(classHash != STOREHASH && classHash != LOGICHASH, "wrong class");
        require(itemAddressExists(classHash, oneAddress), "no such address exist");

        if(classHash == OWNERHASH)
            require(getItemAddressCount(classHash) > ownerRequireNum, "insuffience addresses");

        bytes32 taskHash = keccak256(abi.encodePacked("dropAddress", class, oneAddress));
        addItemAddress(taskHash, msg.sender);
        if(getItemAddressCount(taskHash) >= ownerRequireNum){
            removeOneItemAddress(classHash, oneAddress);
            emit AdminChanged("dropAddress", class, oneAddress, oneAddress);
            removeItem(taskHash);
            return true;
        }
        return false;

    }

    function addAddress(string memory class, address oneAddress)
        public onlyOwner returns(bool){
        bytes32 classHash = getClassHash(class);
        require(classHash != STOREHASH && classHash != LOGICHASH, "wrong class");
        require(!itemAddressExists(classHash,oneAddress),"address existed already");

        bytes32 taskHash = keccak256(abi.encodePacked("addAddress", class, oneAddress));
        addItemAddress(taskHash, msg.sender);
        if(getItemAddressCount(taskHash) >= ownerRequireNum){
            addItemAddress(classHash, oneAddress);
            emit AdminChanged("addAddress", class, oneAddress, oneAddress);
            removeItem(taskHash);
            return true;
        }
        return false;
    }


    function dropTask(bytes32 taskHash)
    public onlyOwner returns (bool){
        removeItem(taskHash);
        emit AdminTaskDropped(taskHash);
        return true;
    }

    modifier onlyOwner() {
        require(itemAddressExists(OWNERHASH, msg.sender), "only use owner to call");
        _;
    }

}

File 3 of 9: HBTCLogic.sol
pragma solidity ^0.5.11;

import "./SafeMath.sol";
import "./HBTCStorage.sol";

contract HBTCLogic {

    using SafeMath for uint256;

    string public constant name = "HBTCLogic";

    uint256 public constant TASKINIT = 0;
    uint256 public constant TASKPROCESSING = 1;
    uint256 public constant TASKCANCELLED = 2;
    uint256 public constant TASKDONE = 3;
    uint256 public constant MINTTASK = 1;
    uint256 public constant BURNTASK = 2;

    address private caller;
    HBTCStorage private store;

    constructor(address aCaller) public{
        caller = aCaller;
    }

    modifier onlyCaller(){
        require(msg.sender == caller, "only main contract can call");
        _;
    }

    function mintLogic(uint256 value,address to,string calldata proof,
        bytes32 taskHash, address supportAddress, uint256 requireNum)
        external onlyCaller returns(uint256){
        require(to != address(0), "cannot be burned from zero address");
        require(value > 0, "value need > 0");
        require(taskHash == keccak256((abi.encodePacked(to,value,proof))),"taskHash is wrong");
        uint256 status = supportTask(MINTTASK, taskHash, supportAddress, requireNum);

        if( status == TASKDONE){
            uint256 totalSupply = store.getTotalSupply();
            uint256 balanceTo = store.balanceOf(to);
            balanceTo = balanceTo.safeAdd(value);
            totalSupply = totalSupply.safeAdd(value);
            store.setBalance(to,balanceTo);
            store.setTotalSupply(totalSupply);
        }
        return status;
    }

    function burnLogic(address from, uint256 value,string calldata btcAddress,
        string calldata proof,bytes32 taskHash, address supportAddress, uint256 requireNum)
        external onlyCaller returns(uint256){

        uint256 balance = store.balanceOf(from);
        require(balance >= value,"sender address not have enough HBTC");
        require(value > 0, "value need > 0");
        require(taskHash == keccak256((abi.encodePacked(from,value,btcAddress,proof))),"taskHash is wrong");
        uint256 status = supportTask(BURNTASK, taskHash, supportAddress, requireNum);

        if ( status == TASKDONE ){
            uint256 totalSupply = store.getTotalSupply();
            totalSupply = totalSupply.safeSub(value);
            balance = balance.safeSub(value);
            store.setBalance(from,balance);
            store.setTotalSupply(totalSupply);

        }
        return status;
    }

    function transferLogic(address sender,address to,uint256 value) external onlyCaller returns(bool) {
        require(to != address(0), "cannot transfer to address zero");
        require(sender != to, "sender need != to");
        require(value > 0, "value need > 0");
        require(address(store) != address(0), "dataStore address error");

        uint256 balanceFrom = store.balanceOf(sender);
        uint256 balanceTo = store.balanceOf(to);
        require(value <= balanceFrom, "insufficient funds");
        balanceFrom = balanceFrom.safeSub(value);
        balanceTo = balanceTo.safeAdd(value);
        store.setBalance(sender,balanceFrom);
        store.setBalance(to,balanceTo);
        return true;
    }

    function transferFromLogic(address sender,address from,address to,uint256 value) external onlyCaller returns(bool) {
        require(from != address(0), "cannot transfer from address zero");
        require(to != address(0), "cannot transfer to address zero");
        require(value > 0, "can not tranfer zero Token");
        require(from!=to,"from and to can not be be the same ");
        require(address(store) != address(0), "dataStore address error");

        uint256 balanceFrom = store.balanceOf(from);
        uint256 balanceTo = store.balanceOf(to);
        uint256 allowedvalue = store.getAllowed(from,sender);

        require(value <= allowedvalue, "insufficient allowance");
        require(value <= balanceFrom, "insufficient funds");

        balanceFrom = balanceFrom.safeSub(value);
        balanceTo = balanceTo.safeAdd(value);
        allowedvalue = allowedvalue.safeSub(value);

        store.setBalance(from,balanceFrom);
        store.setBalance(to,balanceTo);
        store.setAllowed(from,sender,allowedvalue);
        return true;
    }

    function approveLogic(address sender,address spender,uint256 value)  external onlyCaller returns(bool success){
        require(spender != address(0), "spender address zero");
        require(value > 0, "value need > 0");
        require(address(store) != address(0), "dataStore address error");

        store.setAllowed(sender,spender,value);
        return true;
    }

    function resetStoreLogic(address storeAddress) external onlyCaller {
        store = HBTCStorage(storeAddress);
    }

    function getTotalSupply() public view returns (uint256 supply) {
        return store.getTotalSupply();
    }

    function balanceOf(address owner) public view returns (uint256 balance) {
        return store.balanceOf(owner);
    }

    function getAllowed(address owner, address spender) public view returns (uint256 remaining){
        return store.getAllowed(owner,spender);
    }

    function getStoreAddress() public view returns(address){
        return address(store);
    }

    function supportTask(uint256 taskType, bytes32 taskHash, address oneAddress, uint256 requireNum) private returns(uint256){
        require(!store.supporterExists(taskHash, oneAddress), "supporter already exists");
        (uint256 theTaskType,uint256 theTaskStatus,uint256 theSupporterNum) = store.getTaskInfo(taskHash);
        require(theTaskStatus < TASKDONE, "wrong status");

        if (theTaskStatus != TASKINIT)
            require(theTaskType == taskType, "task type not match");
        store.addSupporter(taskHash, oneAddress);
        theSupporterNum++;
        if(theSupporterNum >= requireNum)
            theTaskStatus = TASKDONE;
        else
            theTaskStatus = TASKPROCESSING;
        store.setTaskInfo(taskHash, taskType, theTaskStatus);
        return theTaskStatus;
    }

    function cancelTask(bytes32 taskHash)  external onlyCaller returns(uint256){
        (uint256 theTaskType,uint256 theTaskStatus,uint256 theSupporterNum) = store.getTaskInfo(taskHash);
        require(theTaskStatus == TASKPROCESSING, "wrong status");
        if(theSupporterNum > 0) store.removeAllSupporter(taskHash);
        theTaskStatus = TASKCANCELLED;
        store.setTaskInfo(taskHash, theTaskType, theTaskStatus);
        return theTaskStatus;
    }
}

File 4 of 9: HBTCStorage.sol
pragma solidity ^0.5.11;

import "./Container.sol";

contract HBTCStorage is Container{

    string public constant name = "HBTCStorage";

    address private caller;

    constructor(address aCaller) public{
        totalSupply = 0;
        caller = aCaller;
    }
    uint256 public totalSupply;

    mapping (address => uint256) private balances;

    mapping (address => mapping (address => uint256)) private allowed;

    function supporterExists(bytes32 taskHash, address user) public view returns(bool){
        return itemAddressExists(taskHash, user);
    }

    function setTaskInfo(bytes32 taskHash, uint256 taskType, uint256 status) external onlyCaller{
        setItemInfo(taskHash, taskType, status);
    }

    function getTaskInfo(bytes32 taskHash) public view returns(uint256, uint256, uint256){
        return getItemInfo(taskHash);
    }

    function addSupporter(bytes32 taskHash, address oneAddress) external onlyCaller{
        addItemAddress(taskHash, oneAddress);
    }

    function removeAllSupporter(bytes32 taskHash) external onlyCaller{
        removeItemAddresses(taskHash);
    }

    modifier onlyCaller() {
        require(msg.sender == caller, "only use main main contract to call");
        _;
    }

    function getTotalSupply() external view returns(uint256) {
        return totalSupply;
    }

    function setTotalSupply(uint256 amount) external onlyCaller {
        totalSupply = amount;
    }

    function balanceOf(address account) external view returns(uint256) {
        return balances[account];
    }

    function setBalance(address account,uint256 amount) external onlyCaller {
        require(account != address(0),"account address error");
        balances[account] = amount;
    }

    function getAllowed(address owner,address spender) external view returns(uint256) {
        return allowed[owner][spender];
    }

    function setAllowed(address owner,address spender,uint256 amount) external onlyCaller {
        require(owner != address(0),"owner address error");
        require(spender != address(0),"spender address error");
        require(amount <= balances[owner], "owner balance need >= amount");
        allowed[owner][spender] = amount;
    }
}

File 6 of 9: IERC20Token.sol
pragma solidity ^0.5.11;

contract IERC20Token {
    function totalSupply() public view returns (uint256 supply);
    /// @param owner The address from which the balance will be retrieved
    /// @return The balance
    //solium-disable security/enforce-explicit-visibility
    function balanceOf(address owner) public view returns (uint256 balance);

    /// @notice send `value` token to `to` from `msg.sender`
    /// @param to The address of the recipient
    /// @param value The amount of token to be transferred
    /// @return Whether the transfer was successful or not
    function transfer(address to, uint256 value) public returns (bool success);

    /// @notice send `value` token to `to` from `from` on the condition it is approved by `from`
    /// @param from The address of the sender
    /// @param to The address of the recipient
    /// @param value The amount of token to be transferred
    /// @return Whether the transfer was successful or not
    function transferFrom(address from, address to, uint256 value) public returns (bool success);

    /// @notice `msg.sender` approves `spender` to spend `value` tokens
    /// @param spender The address of the account able to transfer the tokens
    /// @param value The amount of tokens to be approved for transfer
    /// @return Whether the approval was successful or not
    function approve(address spender, uint256 value) public returns (bool success);

    /// @param owner The address of the account owning tokens
    /// @param spender The address of the account able to transfer the tokens
    /// @return Amount of remaining tokens allowed to spent
    function allowance(address owner, address spender) public view returns (uint256 remaining);

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

}

File 7 of 9: Migrations.sol
pragma solidity >=0.4.21 <0.6.0;

contract Migrations {
  address public owner;
  uint public last_completed_migration;

  constructor() public {
    owner = msg.sender;
  }

  modifier restricted() {
    if (msg.sender == owner) _;
  }

  function setCompleted(uint completed) public restricted {
    last_completed_migration = completed;
  }

  function upgrade(address new_address) public restricted {
    Migrations upgraded = Migrations(new_address);
    upgraded.setCompleted(last_completed_migration);
  }
}

File 8 of 9: Pausable.sol
pragma solidity ^0.5.11;

contract Pausable {

    bool private pauseState = true;

    event PauseChangedTo(bool pauseState);

    function doPause() internal {
        pauseState = !pauseState;
        emit PauseChangedTo(pauseState);
    }

    function isPaused() public view returns (bool) {
        return pauseState;
    }

    modifier whenPaused() {
        require(pauseState, "it is not paused now");
        _;
    }

    modifier whenNotPaused() {
        require(!pauseState, "it is paused now");
        _;
    }

}

File 9 of 9: SafeMath.sol
// solium-disable linebreak-style
pragma solidity ^0.5.11;

library SafeMath {
    function safeAdd(uint a, uint b) public pure returns (uint c) {
        c = a + b;
        require(c >= a,"");
    }
    function safeSub(uint a, uint b) public pure returns (uint c) {
        require(b <= a,"");
        c = a - b;
    }
    function safeMul(uint a, uint b) public pure returns (uint c) {
        c = a * b;
        require(a == 0 || c / a == b,"");
    }
    function safeDiv(uint a, uint b) public pure returns (uint c) {
        require(b > 0,"");
        c = a / b;
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"supply","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"class","type":"string"},{"internalType":"address","name":"oldAddress","type":"address"},{"internalType":"address","name":"newAddress","type":"address"}],"name":"modifyAdminAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"taskHash","type":"bytes32"}],"name":"dropTask","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getOwnerRequiredNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"class","type":"string"},{"internalType":"address","name":"oneAddress","type":"address"}],"name":"dropAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getLogicAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getStoreAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOperatorRequiredNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"string","name":"class","type":"string"}],"name":"getAdminAddresses","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"class","type":"string"},{"internalType":"address","name":"oneAddress","type":"address"}],"name":"addAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"proof","type":"string"},{"internalType":"bytes32","name":"taskHash","type":"bytes32"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"class","type":"string"},{"internalType":"uint256","name":"requiredNum","type":"uint256"}],"name":"resetRequiredNum","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"taskHash","type":"bytes32"}],"name":"cancelTask","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"string","name":"btcAddress","type":"string"},{"internalType":"string","name":"proof","type":"string"},{"internalType":"bytes32","name":"taskHash","type":"bytes32"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner0","type":"address"},{"internalType":"address","name":"owner1","type":"address"},{"internalType":"address","name":"owner2","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"proof","type":"string"},{"indexed":false,"internalType":"string","name":"btcAddress","type":"string"},{"indexed":false,"internalType":"address","name":"burner","type":"address"}],"name":"Burning","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"proof","type":"string"},{"indexed":false,"internalType":"string","name":"btcAddress","type":"string"}],"name":"Burned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"proof","type":"string"},{"indexed":false,"internalType":"address","name":"minter","type":"address"}],"name":"Minting","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"string","name":"proof","type":"string"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"TaskType","type":"string"},{"indexed":false,"internalType":"string","name":"class","type":"string"},{"indexed":false,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"TaskType","type":"string"},{"indexed":false,"internalType":"string","name":"class","type":"string"},{"indexed":false,"internalType":"uint256","name":"previousNum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"requiredNum","type":"uint256"}],"name":"AdminRequiredNumChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"taskHash","type":"bytes32"}],"name":"AdminTaskDropped","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"pauseState","type":"bool"}],"name":"PauseChangedTo","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"}]

608060405260016000806101000a81548160ff02191690831515021790555060ff6001553480156200003057600080fd5b5060405162004f3e38038062004f3e833981810160405260608110156200005657600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050506200008e8383836200009760201b60201c565b505050620005a7565b620000cc7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b846200034260201b60201c565b620001017f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b836200034260201b60201c565b620001367f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b826200034260201b60201c565b6200016c7f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b60006200034260201b60201c565b620001a27fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b60016200034260201b60201c565b60037f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b908060018154018082558091505090600182039060005260206000200160009091929091909150555060037f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b908060018154018082558091505090600182039060005260206000200160009091929091909150555060037f0cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f60001b908060018154018082558091505090600182039060005260206000200160009091929091909150555060037fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b908060018154018082558091505090600182039060005260206000200160009091929091909150555060037f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b908060018154018082558091505090600182039060005260206000200160009091929091909150555060026004819055506002600581905550505050565b620003548282620004d760201b60201c565b15620003c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f647570206164647265737320616464656400000000000000000000000000000081525060200191505060405180910390fd5b60015460026000848152602001908152602001600020600201805490501062000459576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f746f6f206d616e7920616464726573736573000000000000000000000000000081525060200191505060405180910390fd5b600260008381526020019081526020016000206002018190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600080600090505b60026000858152602001908152602001600020600201805490508110156200059b578273ffffffffffffffffffffffffffffffffffffffff166002600086815260200190815260200160002060020182815481106200053a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156200058d576001915050620005a1565b8080600101915050620004df565b50600090505b92915050565b61498780620005b76000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c8063a9059cbb116100c3578063ceb35b0f1161007c578063ceb35b0f1461088f578063d4bf51a714610982578063dd62ed3e14610a89578063e9e211bd14610b01578063ee8ca3b514610bde578063f691b71a14610c2057610158565b8063a9059cbb14610645578063abd108ba146106ab578063b07ed3a9146106f5578063b187bd261461073f578063b1d3e05e14610761578063c8e369bf1461077f57610158565b8063521cb59011610115578063521cb590146104095780635dd882dd1461044f57806370a082311461046d5780638456cb59146104c557806391c40bf7146104cf57806395d89b41146105c257610158565b806306fdde031461015d578063095ea7b3146101e057806318160ddd1461024657806323b872dd146102645780632c2df742146102ea578063313ce567146103e5575b600080fd5b610165610dbe565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101a557808201518184015260208101905061018a565b50505050905090810190601f1680156101d25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61022c600480360360408110156101f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610df7565b604051808215151515815260200191505060405180910390f35b61024e61107a565b6040518082815260200191505060405180910390f35b6102d06004803603606081101561027a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611124565b604051808215151515815260200191505060405180910390f35b6103e36004803603606081101561030057600080fd5b810190808035906020019064010000000081111561031d57600080fd5b82018360208201111561032f57600080fd5b8035906020019184600183028401116401000000008311171561035157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113dc565b005b6103ed6116ea565b604051808260ff1660ff16815260200191505060405180910390f35b6104356004803603602081101561041f57600080fd5b81019080803590602001909291905050506116ef565b604051808215151515815260200191505060405180910390f35b6104576117d9565b6040518082815260200191505060405180910390f35b6104af6004803603602081101561048357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117e3565b6040518082815260200191505060405180910390f35b6104cd6118c6565b005b6105a8600480360360408110156104e557600080fd5b810190808035906020019064010000000081111561050257600080fd5b82018360208201111561051457600080fd5b8035906020019184600183028401116401000000008311171561053657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061196f565b604051808215151515815260200191505060405180910390f35b6105ca611e64565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561060a5780820151818401526020810190506105ef565b50505050905090810190601f1680156106375780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106916004803603604081101561065b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e9d565b604051808215151515815260200191505060405180910390f35b6106b3612120565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106fd61214a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107476121f4565b604051808215151515815260200191505060405180910390f35b61076961220a565b6040518082815260200191505060405180910390f35b6108386004803603602081101561079557600080fd5b81019080803590602001906401000000008111156107b257600080fd5b8201836020820111156107c457600080fd5b803590602001918460018302840111640100000000831117156107e657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612214565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561087b578082015181840152602081019050610860565b505050509050019250505060405180910390f35b610968600480360360408110156108a557600080fd5b81019080803590602001906401000000008111156108c257600080fd5b8201836020820111156108d457600080fd5b803590602001918460018302840111640100000000831117156108f657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612234565b604051808215151515815260200191505060405180910390f35b610a6f6004803603608081101561099857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156109df57600080fd5b8201836020820111156109f157600080fd5b80359060200191846001830284011164010000000083111715610a1357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919050505061267f565b604051808215151515815260200191505060405180910390f35b610aeb60048036036040811015610a9f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c62565b6040518082815260200191505060405180910390f35b610bc460048036036040811015610b1757600080fd5b8101908080359060200190640100000000811115610b3457600080fd5b820183602082011115610b4657600080fd5b80359060200191846001830284011164010000000083111715610b6857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050612d7a565b604051808215151515815260200191505060405180910390f35b610c0a60048036036020811015610bf457600080fd5b8101908080359060200190929190505050613263565b6040518082815260200191505060405180910390f35b610da4600480360360a0811015610c3657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610c7d57600080fd5b820183602082011115610c8f57600080fd5b80359060200191846001830284011164010000000083111715610cb157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610d1457600080fd5b820183602082011115610d2657600080fd5b80359060200191846001830284011164010000000083111715610d4857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291905050506133bb565b604051808215151515815260200191505060405180910390f35b6040518060400160405280600981526020017f48756f626920425443000000000000000000000000000000000000000000000081525081565b60008060009054906101000a900460ff1615610e7b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f697420697320706175736564206e6f770000000000000000000000000000000081525060200191505060405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166311a02e483386866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610f5a57600080fd5b505af1158015610f6e573d6000803e3d6000fd5b505050506040513d6020811015610f8457600080fd5b810190808051906020019092919050505090508061100a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f617070726f7665206661696c656400000000000000000000000000000000000081525060200191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a3600191505092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c4e41b226040518163ffffffff1660e01b815260040160206040518083038186803b1580156110e457600080fd5b505afa1580156110f8573d6000803e3d6000fd5b505050506040513d602081101561110e57600080fd5b8101908080519060200190929190505050905090565b60008060009054906101000a900460ff16156111a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f697420697320706175736564206e6f770000000000000000000000000000000081525060200191505060405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d7e3ef3338787876040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001945050505050602060405180830381600087803b1580156112bb57600080fd5b505af11580156112cf573d6000803e3d6000fd5b505050506040513d60208110156112e557600080fd5b810190808051906020019092919050505090508061136b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f7472616e7366657246726f6d206661696c65640000000000000000000000000081525060200191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360019150509392505050565b6000809054906101000a900460ff1661145d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6974206973206e6f7420706175736564206e6f7700000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611500576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f77726f6e6720616464726573730000000000000000000000000000000000000081525060200191505060405180910390fd5b600061150d848484613b53565b905080156116e4576000846040516020018082805190602001908083835b6020831061154e578051825260208201915060208101905060208303925061152b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090507f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b8114156115fc5782600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506116e2565b7fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b8114156116e157600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b0d80346846040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156116c857600080fd5b505af11580156116dc573d6000803e3d6000fd5b505050505b5b505b50505050565b601281565b600061171e7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613f8b565b611790576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b61179982614056565b7f468b360fa155a4c5fdf0cb38ce238407e41508a56023e7536088c21b2cd64139826040518082815260200191505060405180910390a160019050919050565b6000600454905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561188457600080fd5b505afa158015611898573d6000803e3d6000fd5b505050506040513d60208110156118ae57600080fd5b81019080805190602001909291905050509050919050565b6118f37f0cc58340b26c619cd4edc70f833d3f4d9d26f3ae7d5ef2965f81fe5495049a4f60001b33613f8b565b611965576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f77726f6e67207573657220746f2070617573657200000000000000000000000081525060200191505060405180910390fd5b61196d61408f565b565b600061199e7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613f8b565b611a10576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b6000611a1b84614102565b90507fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b8114158015611a7357507f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b8114155b611ae5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b611aef8184613f8b565b611b61576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f6e6f20737563682061646472657373206578697374000000000000000000000081525060200191505060405180910390fd5b7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b811415611c0c57600454611b98826141fd565b11611c0b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f696e7375666669656e636520616464726573736573000000000000000000000081525060200191505060405180910390fd5b5b6000848460405160200180807f64726f7041646472657373000000000000000000000000000000000000000000815250600b0183805190602001908083835b60208310611c6e5780518252602082019150602081019050602083039250611c4b565b6001836020036101000a0380198251168184511680821785525050505050509050018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b815260140192505050604051602081830303815290604052805190602001209050611ceb8133614220565b600454611cf7826141fd565b10611e5757611d0682856143ab565b7fb02ddf2800cd4468f7eb14268a7c9f1b6e816aa425ed542d13d8d3a96fa445668585866040518080602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381038352600b8152602001807f64726f7041646472657373000000000000000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b83811015611e06578082015181840152602081019050611deb565b50505050905090810190601f168015611e335780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1611e4c81614056565b600192505050611e5e565b6000925050505b92915050565b6040518060400160405280600481526020017f484254430000000000000000000000000000000000000000000000000000000081525081565b60008060009054906101000a900460ff1615611f21576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f697420697320706175736564206e6f770000000000000000000000000000000081525060200191505060405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637ea560783386866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561200057600080fd5b505af1158015612014573d6000803e3d6000fd5b505050506040513d602081101561202a57600080fd5b81019080805190602001909291905050509050806120b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f7472616e73666572206661696c6564000000000000000000000000000000000081525060200191505060405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3600191505092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b07ed3a96040518163ffffffff1660e01b815260040160206040518083038186803b1580156121b457600080fd5b505afa1580156121c8573d6000803e3d6000fd5b505050506040513d60208110156121de57600080fd5b8101908080519060200190929190505050905090565b60008060009054906101000a900460ff16905090565b6000600554905090565b6060600061222183614102565b905061222c816145d2565b915050919050565b60006122637f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613f8b565b6122d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b60006122e084614102565b90507fe41d88711b08bdcd7556c5d2d24e0da6fa1f614cf2055f4d7e10206017cd168060001b811415801561233857507f397bc5b97f629151e68146caedba62f10b47e426b38db589771a288c0861f18260001b8114155b6123aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b6123b48184613f8b565b15612427576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f61646472657373206578697374656420616c726561647900000000000000000081525060200191505060405180910390fd5b6000848460405160200180807f6164644164647265737300000000000000000000000000000000000000000000815250600a0183805190602001908083835b602083106124895780518252602082019150602081019050602083039250612466565b6001836020036101000a0380198251168184511680821785525050505050509050018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b8152601401925050506040516020818303038152906040528051906020012090506125068133614220565b600454612512826141fd565b10612672576125218285614220565b7fb02ddf2800cd4468f7eb14268a7c9f1b6e816aa425ed542d13d8d3a96fa445668585866040518080602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381038352600a8152602001807f6164644164647265737300000000000000000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b83811015612621578082015181840152602081019050612606565b50505050905090810190601f16801561264e5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a161266781614056565b600192505050612679565b6000925050505b92915050565b60008060009054906101000a900460ff1615612703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f697420697320706175736564206e6f770000000000000000000000000000000081525060200191505060405180910390fd5b6127307f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b33613f8b565b6127a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f77726f6e67206f70657261746f7200000000000000000000000000000000000081525060200191505060405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ac1348f786888787336005546040518763ffffffff1660e01b8152600401808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825286818151815260200191508051906020019080838360005b838110156128af578082015181840152602081019050612894565b50505050905090810190601f1680156128dc5780820380516001836020036101000a031916815260200191505b50975050505050505050602060405180830381600087803b15801561290057600080fd5b505af1158015612914573d6000803e3d6000fd5b505050506040513d602081101561292a57600080fd5b810190808051906020019092919050505090506001811415612a3a578573ffffffffffffffffffffffffffffffffffffffff167f0416081e24ea042d7f2160192c1d6bef74c76f5f4fffeb36c5dcc9e4a5dcf9b486863360405180848152602001806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b838110156129f95780820151818401526020810190506129de565b50505050905090810190601f168015612a265780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2612c55565b6003811415612c54578573ffffffffffffffffffffffffffffffffffffffff167f0416081e24ea042d7f2160192c1d6bef74c76f5f4fffeb36c5dcc9e4a5dcf9b486863360405180848152602001806020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019080838360005b83811015612af6578082015181840152602081019050612adb565b50505050905090810190601f168015612b235780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a28573ffffffffffffffffffffffffffffffffffffffff167fe7cd4ce7f2a465edc730269a1305e8a48bad821e8fb7e152ec413829c01a53c486866040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612bb2578082015181840152602081019050612b97565b50505050905090810190601f168015612bdf5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a28573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef876040518082815260200191505060405180910390a35b5b6001915050949350505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c7c7e9ea84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015612d3757600080fd5b505afa158015612d4b573d6000803e3d6000fd5b505050506040513d6020811015612d6157600080fd5b8101908080519060200190929190505050905092915050565b6000612da97f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613f8b565b612e1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b6000612e2684614102565b90507f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b811480612e7b57507f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b81145b612eed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b811415612fba57612f447f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b6141fd565b831115612fb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f6e756d206c6172676572207468616e2065786973746564206f776e657273000081525060200191505060405180910390fd5b5b6000848460405160200180807f726573657452657175697265644e756d0000000000000000000000000000000081525060100183805190602001908083835b6020831061301c5780518252602082019150602081019050602083039250612ff9565b6001836020036101000a0380198251168184511680821785525050505050509050018281526020019250505060405160208183030381529060405280519060200120905061306a8133614220565b600454613076826141fd565b106132575761308481614056565b60008090507f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b8314156130c557600454905084600481905550613170565b7f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b8314156131015760055490508460058190555061316f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f77726f6e6720636c61737300000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b7fce49fc04234925e87b95750e0e50cac6d4ffcf8a696e3316b3e13bedc84ee7a8868287604051808060200180602001858152602001848152602001838103835260108152602001807f726573657452657175697265644e756d00000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b838110156132185780820151818401526020810190506131fd565b50505050905090810190601f1680156132455780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1505b60019250505092915050565b60006132927f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b33613f8b565b613304576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f77726f6e67206f70657261746f7200000000000000000000000000000000000081525060200191505060405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ee8ca3b5836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b15801561337957600080fd5b505af115801561338d573d6000803e3d6000fd5b505050506040513d60208110156133a357600080fd5b81019080805190602001909291905050509050919050565b60008060009054906101000a900460ff161561343f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f697420697320706175736564206e6f770000000000000000000000000000000081525060200191505060405180910390fd5b61346c7f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62260001b33613f8b565b6134de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f77726f6e67206f70657261746f7200000000000000000000000000000000000081525060200191505060405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323d3eb368888888888336005546040518863ffffffff1660e01b8152600401808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200187815260200180602001806020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838103835288818151815260200191508051906020019080838360005b838110156135f05780820151818401526020810190506135d5565b50505050905090810190601f16801561361d5780820380516001836020036101000a031916815260200191505b50838103825287818151815260200191508051906020019080838360005b8381101561365657808201518184015260208101905061363b565b50505050905090810190601f1680156136835780820380516001836020036101000a031916815260200191505b509950505050505050505050602060405180830381600087803b1580156136a957600080fd5b505af11580156136bd573d6000803e3d6000fd5b505050506040513d60208110156136d357600080fd5b810190808051906020019092919050505090506001811415613850578673ffffffffffffffffffffffffffffffffffffffff167ff5577aec900779fdc4060207f95a90077d57e4ac39af49c805a073b9b1b852ea878688336040518085815260200180602001806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838103835286818151815260200191508051906020019080838360005b838110156137a757808201518184015260208101905061378c565b50505050905090810190601f1680156137d45780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b8381101561380d5780820151818401526020810190506137f2565b50505050905090810190601f16801561383a5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a2613b45565b6003811415613b44578673ffffffffffffffffffffffffffffffffffffffff167ff5577aec900779fdc4060207f95a90077d57e4ac39af49c805a073b9b1b852ea878688336040518085815260200180602001806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838103835286818151815260200191508051906020019080838360005b838110156139115780820151818401526020810190506138f6565b50505050905090810190601f16801561393e5780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b8381101561397757808201518184015260208101905061395c565b50505050905090810190601f1680156139a45780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a28673ffffffffffffffffffffffffffffffffffffffff167fe7fe72e51b458dcd29475a3be9675669af7aa5c3d7e9161fdb6cbba71803dd50878688604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015613a3a578082015181840152602081019050613a1f565b50505050905090810190601f168015613a675780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015613aa0578082015181840152602081019050613a85565b50505050905090810190601f168015613acd5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a2600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef886040518082815260200191505060405180910390a35b5b600191505095945050505050565b6000613b827f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c060001b33613f8b565b613bf4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6f6e6c7920757365206f776e657220746f2063616c6c0000000000000000000081525060200191505060405180910390fd5b6000613bff85614102565b9050613c0b8184613f8b565b15613c7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f61646472657373206578697374656420616c726561647900000000000000000081525060200191505060405180910390fd5b613c888185613f8b565b613cfa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f61646472657373206e6f7420657869737465640000000000000000000000000081525060200191505060405180910390fd5b600085858560405160200180807f6d6f646966794164647265737300000000000000000000000000000000000000815250600d0184805190602001908083835b60208310613d5d5780518252602082019150602081019050602083039250613d3a565b6001836020036101000a0380198251168184511680821785525050505050509050018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660601b81526014019350505050604051602081830303815290604052805190602001209050613e108133614220565b600454613e1c826141fd565b10613f7d57613e2c828686614676565b7fb02ddf2800cd4468f7eb14268a7c9f1b6e816aa425ed542d13d8d3a96fa445668686866040518080602001806020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381038352600d8152602001807f6d6f646966794164647265737300000000000000000000000000000000000000815250602001838103825286818151815260200191508051906020019080838360005b83811015613f2c578082015181840152602081019050613f11565b50505050905090810190601f168015613f595780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1613f7281614056565b600192505050613f84565b6000925050505b9392505050565b600080600090505b600260008581526020019081526020016000206002018054905081101561404a578273ffffffffffffffffffffffffffffffffffffffff16600260008681526020019081526020016000206002018281548110613fec57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561403d576001915050614050565b8080600101915050613f93565b50600090505b92915050565b60026000828152602001908152602001600020600080820160009055600182016000905560028201600061408a91906148e0565b505050565b6000809054906101000a900460ff16156000806101000a81548160ff0219169083151502179055507f0619930b74b56b9cdbdbd8709cef274ec3e9ed0616d7e996599558acccac8e6e6000809054906101000a900460ff16604051808215151515815260200191505060405180910390a1565b600080826040516020018082805190602001908083835b6020831061413c5780518252602082019150602081019050602083039250614119565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090506141828161488a565b6141f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f696e76616c696420636c6173730000000000000000000000000000000000000081525060200191505060405180910390fd5b80915050919050565b600060026000838152602001908152602001600020600201805490509050919050565b61422a8282613f8b565b1561429d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f647570206164647265737320616464656400000000000000000000000000000081525060200191505060405180910390fd5b60015460026000848152602001908152602001600020600201805490501061432d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f746f6f206d616e7920616464726573736573000000000000000000000000000081525060200191505060405180910390fd5b600260008381526020019081526020016000206002018190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b60008090505b600260008481526020019081526020016000206002018054905081101561455f578173ffffffffffffffffffffffffffffffffffffffff1660026000858152602001908152602001600020600201828154811061440a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415614552576002600084815260200190815260200160002060020160016002600086815260200190815260200160002060020180549050038154811061448e57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002600085815260200190815260200160002060020182815481106144da57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506002600084815260200190815260200160002060020180548091906001900361454b9190614901565b50506145ce565b80806001019150506143b1565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6e6f74206578697374206164647265737300000000000000000000000000000081525060200191505060405180910390fd5b5050565b60606002600083815260200190815260200160002060020180548060200260200160405190810160405280929190818152602001828054801561466a57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311614620575b50505050509050919050565b6146808382613f8b565b156146f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f647570206164647265737320616464656400000000000000000000000000000081525060200191505060405180910390fd5b60008090505b6002600085815260200190815260200160002060020180549050811015614816578273ffffffffffffffffffffffffffffffffffffffff1660026000868152602001908152602001600020600201828154811061475257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561480957816002600086815260200190815260200160002060020182815481106147bb57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050614885565b80806001019150506146f9565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f6e6f74206578697374206164647265737300000000000000000000000000000081525060200191505060405180910390fd5b505050565b600080600090505b6003805490508110156148d55782600382815481106148ad57fe5b906000526020600020015414156148c85760019150506148db565b8080600101915050614892565b50600090505b919050565b50805460008255906000526020600020908101906148fe919061492d565b50565b81548183558181111561492857818360005260206000209182019101614927919061492d565b5b505050565b61494f91905b8082111561494b576000816000905550600101614933565b5090565b9056fea265627a7a72315820d8d46d203e04bf8dcd287bf533e28887bd4432856e7b208f559d4486d229eef564736f6c634300050b00320000000000000000000000003cb0efa4fab108e2406bfb9afd82c636fcd1d758000000000000000000000000167e3b1b844faff53ed46378337cfd21e96feed00000000000000000000000003f94d59473fef0537c50ed71bd41dce9bcf513c7

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

0000000000000000000000003cb0efa4fab108e2406bfb9afd82c636fcd1d758000000000000000000000000167e3b1b844faff53ed46378337cfd21e96feed00000000000000000000000003f94d59473fef0537c50ed71bd41dce9bcf513c7

-----Decoded View---------------
Arg [0] : owner0 (address): 0x3cb0efa4fab108e2406bfb9afd82c636fcd1d758
Arg [1] : owner1 (address): 0x167e3b1b844faff53ed46378337cfd21e96feed0
Arg [2] : owner2 (address): 0x3f94d59473fef0537c50ed71bd41dce9bcf513c7

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000003cb0efa4fab108e2406bfb9afd82c636fcd1d758
Arg [1] : 000000000000000000000000167e3b1b844faff53ed46378337cfd21e96feed0
Arg [2] : 0000000000000000000000003f94d59473fef0537c50ed71bd41dce9bcf513c7


Deployed ByteCode Sourcemap

160:4276:4:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;160:4276:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;219:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;219:41:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3125:270;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3125:270:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;855:106;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2835:283;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2835:283:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3552:535;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3552:535:4;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;3552:535:4;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3552:535:4;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;3552:535:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;3552:535:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;312:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6094:170:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6094:170:1;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2048:98;;;:::i;:::-;;;;;;;;;;;;;;;;;;;967:118:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;967:118:4;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4300:133;;;:::i;:::-;;4464:879:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4464:879:1;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;4464:879:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4464:879:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;4464:879:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;4464:879:1;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;267:38:4;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;267:38:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2572:257;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2572:257:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4093:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4192:102;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;248:81:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2151:104:1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1857:186;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1857:186:1;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1857:186:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1857:186:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1857:186:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1857:186:1;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1857:186:1;;;;;;;;;;;;;;;;;5349:738;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5349:738:1;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;5349:738:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5349:738:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;5349:738:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;5349:738:1;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1091:594:4;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;1091:594:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1091:594:4;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1091:594:4;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1091:594:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1091:594:4;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3401:145;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3401:145:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2261:1159:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2261:1159:1;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;2261:1159:1;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2261:1159:1;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;2261:1159:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;2261:1159:1;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2374:192:4;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2374:192:4;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1692:676;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;1692:676:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1692:676:4;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1692:676:4;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1692:676:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1692:676:4;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1692:676:4;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1692:676:4;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1692:676:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1692:676:4;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;219:41;;;;;;;;;;;;;;;;;;;:::o;3125:270::-;3204:4;478:10:7;;;;;;;;;;;477:11;469:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3219:9:4;3231:5;;;;;;;;;;;:18;;;3250:10;3261:7;3269:5;3231:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3231:44:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3231:44:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3231:44:4;;;;;;;;;;;;;;;;3219:56;;3293:4;3285:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3352:7;3331:36;;3340:10;3331:36;;;3361:5;3331:36;;;;;;;;;;;;;;;;;;3384:4;3377:11;;;3125:270;;;;:::o;855:106::-;899:14;932:5;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;932:22:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;932:22:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;932:22:4;;;;;;;;;;;;;;;;925:29;;855:106;:::o;2835:283::-;2929:4;478:10:7;;;;;;;;;;;477:11;469:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2944:9:4;2956:5;;;;;;;;;;;:23;;;2980:10;2991:4;2996:2;2999:5;2956:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2956:49:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2956:49:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2956:49:4;;;;;;;;;;;;;;;;2944:61;;3023:4;3015:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3080:2;3065:25;;3074:4;3065:25;;;3084:5;3065:25;;;;;;;;;;;;;;;;;;3107:4;3100:11;;;2835:283;;;;;:::o;3552:535::-;375:10:7;;;;;;;;;;;367:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3698:3:4;3676:26;;:10;:26;;;;3668:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3730:9;3742:44;3756:5;3763:10;3775;3742:13;:44::i;:::-;3730:56;;3799:4;3796:285;;;3818:17;3865:5;3848:23;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;3848:23:4;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3848:23:4;;;3838:34;;;;;;3818:54;;573:66:1;3902:9:4;;3889;:22;3886:185;;;3948:10;3930:5;;:29;;;;;;;;;;;;;;;;;;3886:185;;;463:66:1;3995:9:4;;3982;:22;3979:92;;;4023:5;;;;;;;;;;;:21;;;4045:10;4023:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4023:33:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4023:33:4;;;;3979:92;3886:185;3796:285;;420:1:7;3552:535:4;;;:::o;312:35::-;345:2;312:35;:::o;6094:170:1:-;6160:4;6309:40;129:66;6327:9;;6338:10;6309:17;:40::i;:::-;6301:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6175:20;6186:8;6175:10;:20::i;:::-;6210:26;6227:8;6210:26;;;;;;;;;;;;;;;;;;6253:4;6246:11;;6094:170;;;:::o;2048:98::-;2099:7;2124:15;;2117:22;;2048:98;:::o;967:118:4:-;1022:15;1056:5;;;;;;;;;;;:15;;;1072:5;1056:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1056:22:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1056:22:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1056:22:4;;;;;;;;;;;;;;;;1049:29;;967:118;;;:::o;4300:133::-;4341:41;353:66:1;4359:10:4;;4371;4341:17;:41::i;:::-;4333:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4417:9;:7;:9::i;:::-;4300:133::o;4464:879:1:-;4559:4;6309:40;129:66;6327:9;;6338:10;6309:17;:40::i;:::-;6301:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4574:17;4594:19;4607:5;4594:12;:19::i;:::-;4574:39;;463:66;4644:9;;4631;:22;;:48;;;;;573:66;4670:9;;4657;:22;;4631:48;4623:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4713:40;4731:9;4742:10;4713:17;:40::i;:::-;4705:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;129:66;4806:9;;4793;:22;4790:121;;;4870:15;;4837:30;4857:9;4837:19;:30::i;:::-;:48;4829:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4790:121;4922:16;4983:5;4990:10;4951:50;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;4951:50:1;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;4951:50:1;;;4941:61;;;;;;4922:80;;5012:36;5027:8;5037:10;5012:14;:36::i;:::-;5094:15;;5061:29;5081:8;5061:19;:29::i;:::-;:48;5058:256;;5124:43;5145:9;5156:10;5124:20;:43::i;:::-;5186:58;5214:5;5221:10;5233;5186:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5186:58:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5258:20;5269:8;5258:10;:20::i;:::-;5299:4;5292:11;;;;;;5058:256;5330:5;5323:12;;;;6386:1;4464:879;;;;:::o;267:38:4:-;;;;;;;;;;;;;;;;;;;:::o;2572:257::-;2647:4;478:10:7;;;;;;;;;;;477:11;469:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2663:9:4;2675:5;;;;;;;;;;;:19;;;2695:10;2706:2;2709:5;2675:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2675:40:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2675:40:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2675:40:4;;;;;;;;;;;;;;;;2663:52;;2733:4;2725:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2792:2;2772:29;;2781:10;2772:29;;;2795:5;2772:29;;;;;;;;;;;;;;;;;;2818:4;2811:11;;;2572:257;;;;:::o;4093:93::-;4140:7;4173:5;;;;;;;;;;;4158:21;;4093:93;:::o;4192:102::-;4239:7;4264:5;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4264:23:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4264:23:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4264:23:4;;;;;;;;;;;;;;;;4257:30;;4192:102;:::o;248:81:7:-;289:4;312:10;;;;;;;;;;;305:17;;248:81;:::o;2151:104:1:-;2205:7;2230:18;;2223:25;;2151:104;:::o;1857:186::-;1925:16;1953:17;1973:19;1986:5;1973:12;:19::i;:::-;1953:39;;2009:27;2026:9;2009:16;:27::i;:::-;2002:34;;;1857:186;;;:::o;5349:738::-;5443:4;6309:40;129:66;6327:9;;6338:10;6309:17;:40::i;:::-;6301:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5458:17;5478:19;5491:5;5478:12;:19::i;:::-;5458:39;;463:66;5528:9;;5515;:22;;:48;;;;;573:66;5554:9;;5541;:22;;5515:48;5507:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5598:39;5616:9;5626:10;5598:17;:39::i;:::-;5597:40;5589:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5675:16;5735:5;5742:10;5704:49;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;5704:49:1;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;5704::1;;;5694:60;;;;;;5675:79;;5764:36;5779:8;5789:10;5764:14;:36::i;:::-;5846:15;;5813:29;5833:8;5813:19;:29::i;:::-;:48;5810:249;;5876:37;5891:9;5902:10;5876:14;:37::i;:::-;5932:57;5959:5;5966:10;5978;5932:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;5932:57:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6003:20;6014:8;6003:10;:20::i;:::-;6044:4;6037:11;;;;;;5810:249;6075:5;6068:12;;;;6386:1;5349:738;;;;:::o;1091:594:4:-;1199:4;478:10:7;;;;;;;;;;;477:11;469:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1222:43:4;242:66:1;1240:12:4;;1254:10;1222:17;:43::i;:::-;1214:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1294:14;1311:5;;;;;;;;;;;:15;;;1327:5;1333:2;1336:5;1342:8;1352:10;1364:18;;1311:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1311:72:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1311:72:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1311:72:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1311:72:4;;;;;;;;;;;;;;;;1294:89;;1407:1;1397:6;:11;1393:265;;;1436:2;1428:37;;;1440:5;1447;1454:10;1428:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1428:37:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1393:265;;;1495:1;1485:6;:11;1481:177;;;1525:2;1517:37;;;1529:5;1536;1543:10;1517:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1517:37:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1580:2;1573:24;;;1584:5;1591;1573:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1573:24:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1638:2;1616:31;;1633:3;1616:31;;;1641:5;1616:31;;;;;;;;;;;;;;;;;;1481:177;1393:265;1674:4;1667:11;;;1091:594;;;;;;:::o;3401:145::-;3473:17;3508:5;;;;;;;;;;;:16;;;3525:5;3531:7;3508:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3508:31:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3508:31:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3508:31:4;;;;;;;;;;;;;;;;3501:38;;3401:145;;;;:::o;2261:1159:1:-;2362:4;6309:40;129:66;6327:9;;6338:10;6309:17;:40::i;:::-;6301:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2377:17;2397:19;2410:5;2397:12;:19::i;:::-;2377:39;;242:66;2448:12;;2435:9;:25;2434:55;;;;129:66;2479:9;;2466;:22;2434:55;2426:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;129:66;2531:9;;2518;:22;2514:127;;;2577:30;129:66;2597:9;;2577:19;:30::i;:::-;2562:11;:45;;2554:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2514:127;2652:16;2718:5;2725:11;2681:56;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2681:56:1;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2681:56:1;;;2671:67;;;;;;2652:86;;2748:36;2763:8;2773:10;2748:14;:36::i;:::-;2831:15;;2798:29;2818:8;2798:19;:29::i;:::-;:48;2795:598;;2861:20;2872:8;2861:10;:20::i;:::-;2895:19;2917:1;2895:23;;129:66;2949:9;;2936;:22;2932:356;;;2991:15;;2977:29;;3042:11;3024:15;:29;;;;2932:356;;;242:66;3102:12;;3089:9;:25;3086:202;;;3147:18;;3133:32;;3204:11;3183:18;:32;;;;3086:202;;;3252:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3086:202;2932:356;3306:76;3350:5;3357:11;3370;3306:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;3306:76:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2795:598;;3409:4;3402:11;;;;2261:1159;;;;:::o;2374:192:4:-;2428:7;2454:43;242:66:1;2472:12:4;;2486:10;2454:17;:43::i;:::-;2446:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2533:5;;;;;;;;;;;:16;;;2550:8;2533:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2533:26:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2533:26:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2533:26:4;;;;;;;;;;;;;;;;2526:33;;2374:192;;;:::o;1692:676::-;1830:4;478:10:7;;;;;;;;;;;477:11;469:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1853:43:4;242:66:1;1871:12:4;;1885:10;1853:17;:43::i;:::-;1845:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1925:14;1942:5;;;;;;;;;;;:15;;;1958:4;1963:5;1969:10;1980:5;1986:8;1996:10;2008:18;;1942:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1942:85:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1942:85:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1942:85:4;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1942:85:4;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1942:85:4;;;;;;;;;;;;;;;;1925:102;;2051:1;2041:6;:11;2037:304;;;2079:4;2071:50;;;2085:5;2092;2098:10;2110;2071:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2071:50:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2071:50:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2037:304;;;2151:1;2141:6;:11;2137:204;;;2180:4;2172:51;;;2186:5;2193;2199:10;2212;2172:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2172:51:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2172:51:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2248:4;2241:37;;;2254:5;2261;2267:10;2241:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2241:37:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;2241:37:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2319:3;2296:34;;2305:4;2296:34;;;2324:5;2296:34;;;;;;;;;;;;;;;;;;2137:204;2037:304;2357:4;2350:11;;;1692:676;;;;;;;:::o;3427:794:1:-;3546:4;6309:40;129:66;6327:9;;6338:10;6309:17;:40::i;:::-;6301:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3561:17;3581:19;3594:5;3581:12;:19::i;:::-;3561:39;;3619;3637:9;3647:10;3619:17;:39::i;:::-;3618:40;3610:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3703:39;3721:9;3731:10;3703:17;:39::i;:::-;3695:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3775:16;3838:5;3845:10;3857;3804:64;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;3804:64:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3804:64:1;;;3794:75;;;;;;3775:94;;3879:36;3894:8;3904:10;3879:14;:36::i;:::-;3961:15;;3928:29;3948:8;3928:19;:29::i;:::-;:48;3925:268;;3991:53;4010:9;4021:10;4033;3991:18;:53::i;:::-;4063:60;4093:5;4100:10;4112;4063:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;4063:60:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4137:20;4148:8;4137:10;:20::i;:::-;4178:4;4171:11;;;;;;3925:268;4209:5;4202:12;;;;6386:1;3427:794;;;;;:::o;239:280:0:-;320:4;339:9;351:1;339:13;;335:156;358:9;:13;368:2;358:13;;;;;;;;;;;:23;;:30;;;;354:1;:34;335:156;;;441:10;411:40;;:9;:13;421:2;411:13;;;;;;;;;;;:23;;435:1;411:26;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;408:72;;;476:4;469:11;;;;;408:72;390:3;;;;;;;335:156;;;;507:5;500:12;;239:280;;;;;:::o;1991:77::-;2048:9;:13;2058:2;2048:13;;;;;;;;;;;;2041:20;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;1991:77;:::o;132:110:7:-;184:10;;;;;;;;;;;183:11;170:10;;:24;;;;;;;;;;;;;;;;;;209:26;224:10;;;;;;;;;;;209:26;;;;;;;;;;;;;;;;;;;;;;132:110::o;4227:231:1:-;4292:7;4310:17;4357:5;4340:23;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;4340:23:1;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;4340:23:1;;;4330:34;;;;;;4310:54;;4382:25;4397:9;4382:14;:25::i;:::-;4374:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4442:9;4435:16;;;4227:231;;;:::o;843:125:0:-;906:7;931:9;:13;941:2;931:13;;;;;;;;;;;:23;;:30;;;;924:37;;843:125;;;:::o;1144:285::-;1227:33;1245:2;1249:10;1227:17;:33::i;:::-;1226:34;1218:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1333:16;;1300:9;:13;1310:2;1300:13;;;;;;;;;;;:23;;:30;;;;:49;1292:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1382:9;:13;1392:2;1382:13;;;;;;;;;;;:23;;1411:10;1382:40;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;1382:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1144:285;;:::o;1540:445::-;1624:9;1636:1;1624:13;;1620:322;1643:9;:13;1653:2;1643:13;;;;;;;;;;;:23;;:30;;;;1639:1;:34;1620:322;;;1726:10;1696:40;;:9;:13;1706:2;1696:13;;;;;;;;;;;:23;;1720:1;1696:26;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;1693:239;;;1784:9;:13;1794:2;1784:13;;;;;;;;;;;:23;;1841:1;1808:9;:13;1818:2;1808:13;;;;;;;;;;;:23;;:30;;;;:34;1784:59;;;;;;;;;;;;;;;;;;;;;;;;;1755:9;:13;1765:2;1755:13;;;;;;;;;;;:23;;1779:1;1755:26;;;;;;;;;;;;;;;;:88;;;;;;;;;;;;;;;;;;1861:9;:13;1871:2;1861:13;;;;;;;;;;;:23;;:32;;;;;;;;;;;;:::i;:::-;;1911:7;;;1693:239;1675:3;;;;;;;1620:322;;;;1951:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1540:445;;;:::o;524:124::-;584:16;618:9;:13;628:2;618:13;;;;;;;;;;;:23;;611:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;524:124;;;:::o;2074:448::-;2185:36;2203:2;2206:14;2185:17;:36::i;:::-;2184:37;2176:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2256:9;2268:1;2256:13;;2252:227;2275:9;:13;2285:2;2275:13;;;;;;;;;;;:23;;:30;;;;2271:1;:34;2252:227;;;2358:10;2328:40;;:9;:13;2338:2;2328:13;;;;;;;;;;;:23;;2352:1;2328:26;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;2325:144;;;2416:14;2387:9;:13;2397:2;2387:13;;;;;;;;;;;:23;;2411:1;2387:26;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;2448:7;;;2325:144;2307:3;;;;;;;2252:227;;;;2488:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2074:448;;;;:::o;1643:209:1:-;1703:4;1722:9;1734:1;1722:13;;1718:105;1741:14;:21;;;;1737:1;:25;1718:105;;;1805:5;1784:14;1799:1;1784:17;;;;;;;;;;;;;;;;:26;1781:42;;;1819:4;1812:11;;;;;1781:42;1764:3;;;;;;;1718:105;;;;1840:5;1833:12;;1643:209;;;;:::o;160:4276:4:-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

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