false
true
0

Contract Address Details

0x0E29e5AbbB5FD88e28b2d355774e73BD47dE3bcd

Token
Hakka Finance (HAKKA)
Creator
0x1d075f–3a65b2 at 0xdfa3cf–f72682
Balance
0 PLS ( )
Tokens
Fetching tokens...
Transactions
26,873 Transactions
Transfers
0 Transfers
Gas Used
0
Last Balance Update
25990411
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
This contract has been partially verified via Sourcify. View contract in Sourcify repository
Contract name:
Hakka




Optimization enabled
true
Compiler version
v0.5.16+commit.9c3226ce




Optimization runs
200
EVM Version
istanbul




Verified at
2026-03-10T19:51:04.267618Z

Constructor Arguments

454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e7472616374290000000000000000000000000000000000000000000000000000000000000001

Arg [0] (uint256) : 31339120015659993862160253144463915315563489969021235592778649851284316645152

              

Hakka.sol

pragma solidity 0.5.16;

contract Ownable {
    address public owner;

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

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

    modifier onlyOwner() {
        require(msg.sender == owner, "permission denied");
        _;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0), "invalid address");
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }
}

contract ApproveAndCallFallBack {
    function receiveApproval(address from, uint256 value, address token, bytes calldata data) external;
}

contract Hakka is Ownable {
    // --- ERC20 Data ---
    string  public constant name     = "Hakka Finance";
    string  public constant symbol   = "HAKKA";
    string  public constant version  = "1";
    uint8   public constant decimals = 18;
    uint256 public totalSupply;

    mapping (address => uint256)                      public balanceOf;
    mapping (address => mapping (address => uint256)) public allowance;
    mapping (address => uint256)                      public nonces;

    event Approval(address indexed holder, address indexed spender, uint256 amount);
    event Transfer(address indexed from, address indexed to, uint256 amount);

    // --- Math ---
    function add(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require((z = x + y) >= x);
    }
    function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require((z = x - y) <= x);
    }

    // --- EIP712 niceties ---
    bytes32 public DOMAIN_SEPARATOR;
    // bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address holder,address spender,uint256 nonce,uint256 expiry,bool allowed)");
    bytes32 public constant PERMIT_TYPEHASH = 0xea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb;

    constructor(uint256 chainId_) public {
        DOMAIN_SEPARATOR = keccak256(abi.encode(
            keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
            keccak256(bytes(name)),
            keccak256(bytes(version)),
            chainId_,
            address(this)
        ));
    }

    // --- Token ---
    function transfer(address to, uint256 amount) external returns (bool) {
        return transferFrom(msg.sender, to, amount);
    }
    function transferFrom(address from, address to, uint256 amount) public returns (bool) {
        if (from != msg.sender && allowance[from][msg.sender] != uint256(-1))
            allowance[from][msg.sender] = sub(allowance[from][msg.sender], amount);
        require(balanceOf[from] >= amount, "insufficient-balance");
        balanceOf[from] = sub(balanceOf[from], amount);
        balanceOf[to] = add(balanceOf[to], amount);
        emit Transfer(from, to, amount);
        return true;
    }
    function mint(address to, uint256 amount) external onlyOwner {
        balanceOf[to] = add(balanceOf[to], amount);
        totalSupply = add(totalSupply, amount);
        emit Transfer(address(0), to, amount);
    }
    function burn(address from, uint256 amount) external {
        if (from != msg.sender && allowance[from][msg.sender] != uint256(-1))
            allowance[from][msg.sender] = sub(allowance[from][msg.sender], amount);
        require(balanceOf[from] >= amount, "insufficient-balance");
        balanceOf[from] = sub(balanceOf[from], amount);
        totalSupply = sub(totalSupply, amount);
        emit Transfer(from, address(0), amount);
    }
    function approve(address spender, uint256 amount) external returns (bool) {
        allowance[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    // --- Approve and call contract ---
    function approveAndCall(address spender, uint256 amount, bytes calldata data) external returns (bool) {
        allowance[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        ApproveAndCallFallBack(spender).receiveApproval(msg.sender, amount, address(this), data);
        return true;
    }

    // --- Approve by signature ---
    function permit(address holder, address spender, uint256 nonce, uint256 expiry,
                    bool allowed, uint8 v, bytes32 r, bytes32 s) external
    {
        bytes32 digest =
            keccak256(abi.encodePacked(
                "\x19\x01",
                DOMAIN_SEPARATOR,
                keccak256(abi.encode(PERMIT_TYPEHASH,
                                     holder,
                                     spender,
                                     nonce,
                                     expiry,
                                     allowed))
        ));

        require(holder != address(0), "invalid-address-0");
        require(holder == ecrecover(digest, v, r, s), "invalid-permit");
        require(expiry == 0 || now <= expiry, "permit-expired");
        require(nonce == nonces[holder]++, "invalid-nonce");
        uint256 amount = allowed ? uint256(-1) : 0;
        allowance[holder][spender] = amount;
        emit Approval(holder, spender, amount);
    }
}
        

Compiler Settings

{"remappings":[],"optimizer":{"runs":200,"enabled":true},"libraries":{},"evmVersion":"istanbul","compilationTarget":{"Hakka.sol":"Hakka"}}
              

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","payable":false,"inputs":[{"type":"uint256","name":"chainId_","internalType":"uint256"}]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"holder","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"DOMAIN_SEPARATOR","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"PERMIT_TYPEHASH","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"","internalType":"address"},{"type":"address","name":"","internalType":"address"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approveAndCall","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"},{"type":"bytes","name":"data","internalType":"bytes"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"","internalType":"address"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"burn","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"mint","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"nonces","inputs":[{"type":"address","name":"","internalType":"address"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"permit","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"nonce","internalType":"uint256"},{"type":"uint256","name":"expiry","internalType":"uint256"},{"type":"bool","name":"allowed","internalType":"bool"},{"type":"uint8","name":"v","internalType":"uint8"},{"type":"bytes32","name":"r","internalType":"bytes32"},{"type":"bytes32","name":"s","internalType":"bytes32"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"string","name":"","internalType":"string"}],"name":"version","inputs":[],"constant":true}]
              

Contract Creation Code

Verify & Publish
0x608060405234801561001057600080fd5b506040516110de3803806110de8339818101604052602081101561003357600080fd5b5051600080546001600160a01b0319163317905560405180605261108c8239604080519182900360520182208282018252600d83526c48616b6b612046696e616e636560981b6020938401528151808301835260018152603160f81b908401528151808401919091527f05bb016de582ee20238e29c52124e74574148e3d29f920ece50f1b59415ffb53818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060055550610f67806101256000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806370a08231116100ad5780639dc29fac116100715780639dc29fac14610369578063a9059cbb14610395578063cae9ca51146103c1578063dd62ed3e14610446578063f2fde38b1461047457610121565b806370a08231146102975780637ecebe00146102bd5780638da5cb5b146102e35780638fcbaf0c1461030757806395d89b411461036157610121565b806330adf81f116100f457806330adf81f14610233578063313ce5671461023b5780633644e5151461025957806340c10f191461026157806354fd4d501461028f57610121565b806306fdde0314610126578063095ea7b3146101a357806318160ddd146101e357806323b872dd146101fd575b600080fd5b61012e61049a565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610168578181015183820152602001610150565b50505050905090810190601f1680156101955780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101cf600480360360408110156101b957600080fd5b506001600160a01b0381351690602001356104c3565b604080519115158252519081900360200190f35b6101eb61052a565b60408051918252519081900360200190f35b6101cf6004803603606081101561021357600080fd5b506001600160a01b03813581169160208101359091169060400135610530565b6101eb6106df565b610243610703565b6040805160ff9092168252519081900360200190f35b6101eb610708565b61028d6004803603604081101561027757600080fd5b506001600160a01b03813516906020013561070e565b005b61012e6107f2565b6101eb600480360360208110156102ad57600080fd5b50356001600160a01b031661080f565b6101eb600480360360208110156102d357600080fd5b50356001600160a01b0316610821565b6102eb610833565b604080516001600160a01b039092168252519081900360200190f35b61028d600480360361010081101561031e57600080fd5b506001600160a01b038135811691602081013590911690604081013590606081013590608081013515159060ff60a0820135169060c08101359060e00135610842565b61012e610b29565b61028d6004803603604081101561037f57600080fd5b506001600160a01b038135169060200135610b4a565b6101cf600480360360408110156103ab57600080fd5b506001600160a01b038135169060200135610cd5565b6101cf600480360360608110156103d757600080fd5b6001600160a01b038235169160208101359181019060608101604082013564010000000081111561040757600080fd5b82018360208201111561041957600080fd5b8035906020019184600183028401116401000000008311171561043b57600080fd5b509092509050610ce9565b6101eb6004803603604081101561045c57600080fd5b506001600160a01b0381358116916020013516610dfa565b61028d6004803603602081101561048a57600080fd5b50356001600160a01b0316610e17565b6040518060400160405280600d81526020016c48616b6b612046696e616e636560981b81525081565b3360008181526003602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b60015481565b60006001600160a01b038416331480159061057057506001600160a01b038416600090815260036020908152604080832033845290915290205460001914155b156105c8576001600160a01b03841660009081526003602090815260408083203384529091529020546105a39083610f12565b6001600160a01b03851660009081526003602090815260408083203384529091529020555b6001600160a01b03841660009081526002602052604090205482111561062c576040805162461bcd60e51b8152602060048201526014602482015273696e73756666696369656e742d62616c616e636560601b604482015290519081900360640190fd5b6001600160a01b03841660009081526002602052604090205461064f9083610f12565b6001600160a01b03808616600090815260026020526040808220939093559085168152205461067e9083610f22565b6001600160a01b0380851660008181526002602090815260409182902094909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35060019392505050565b7fea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb81565b601281565b60055481565b6000546001600160a01b03163314610761576040805162461bcd60e51b81526020600482015260116024820152701c195c9b5a5cdcda5bdb8819195b9a5959607a1b604482015290519081900360640190fd5b6001600160a01b0382166000908152600260205260409020546107849082610f22565b6001600160a01b0383166000908152600260205260409020556001546107aa9082610f22565b6001556040805182815290516001600160a01b038416916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b604051806040016040528060018152602001603160f81b81525081565b60026020526000908152604090205481565b60046020526000908152604090205481565b6000546001600160a01b031681565b600554604080517fea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb6020808301919091526001600160a01b03808d16838501819052908c166060840152608083018b905260a083018a905288151560c0808501919091528451808503909101815260e08401855280519083012061190160f01b6101008501526101028401959095526101228084019590955283518084039095018552610142909201909252825192909101919091209061093e576040805162461bcd60e51b81526020600482015260116024820152700696e76616c69642d616464726573732d3607c1b604482015290519081900360640190fd5b6040805160008152602080820180845284905260ff8716828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa158015610995573d6000803e3d6000fd5b505050602060405103516001600160a01b0316896001600160a01b0316146109f5576040805162461bcd60e51b815260206004820152600e60248201526d1a5b9d985b1a590b5c195c9b5a5d60921b604482015290519081900360640190fd5b851580610a025750854211155b610a44576040805162461bcd60e51b815260206004820152600e60248201526d1c195c9b5a5d0b595e1c1a5c995960921b604482015290519081900360640190fd5b6001600160a01b03891660009081526004602052604090208054600181019091558714610aa8576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642d6e6f6e636560981b604482015290519081900360640190fd5b600085610ab6576000610aba565b6000195b6001600160a01b03808c166000818152600360209081526040808320948f168084529482529182902085905581518581529151949550929391927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92592918290030190a350505050505050505050565b6040518060400160405280600581526020016448414b4b4160d81b81525081565b6001600160a01b0382163314801590610b8857506001600160a01b038216600090815260036020908152604080832033845290915290205460001914155b15610be0576001600160a01b0382166000908152600360209081526040808320338452909152902054610bbb9082610f12565b6001600160a01b03831660009081526003602090815260408083203384529091529020555b6001600160a01b038216600090815260026020526040902054811115610c44576040805162461bcd60e51b8152602060048201526014602482015273696e73756666696369656e742d62616c616e636560601b604482015290519081900360640190fd5b6001600160a01b038216600090815260026020526040902054610c679082610f12565b6001600160a01b038316600090815260026020526040902055600154610c8d9082610f12565b6001556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000610ce2338484610530565b9392505050565b3360008181526003602090815260408083206001600160a01b038916808552908352818420889055815188815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a3604051638f4ffcb160e01b81523360048201818152602483018790523060448401819052608060648501908152608485018790526001600160a01b038a1694638f4ffcb194938a93928a928a92919060a401848480828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b158015610dd757600080fd5b505af1158015610deb573d6000803e3d6000fd5b50600198975050505050505050565b600360209081526000928352604080842090915290825290205481565b6000546001600160a01b03163314610e6a576040805162461bcd60e51b81526020600482015260116024820152701c195c9b5a5cdcda5bdb8819195b9a5959607a1b604482015290519081900360640190fd5b6001600160a01b038116610eb7576040805162461bcd60e51b815260206004820152600f60248201526e696e76616c6964206164647265737360881b604482015290519081900360640190fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b8082038281111561052457600080fd5b8082018281101561052457600080fdfea265627a7a723158203c906be090347bbc5e2d73a0f763fbf0c9ad80d5e2536a75c2c2073c461defe064736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e7472616374290000000000000000000000000000000000000000000000000000000000000001

Deployed ByteCode

0x608060405234801561001057600080fd5b50600436106101215760003560e01c806370a08231116100ad5780639dc29fac116100715780639dc29fac14610369578063a9059cbb14610395578063cae9ca51146103c1578063dd62ed3e14610446578063f2fde38b1461047457610121565b806370a08231146102975780637ecebe00146102bd5780638da5cb5b146102e35780638fcbaf0c1461030757806395d89b411461036157610121565b806330adf81f116100f457806330adf81f14610233578063313ce5671461023b5780633644e5151461025957806340c10f191461026157806354fd4d501461028f57610121565b806306fdde0314610126578063095ea7b3146101a357806318160ddd146101e357806323b872dd146101fd575b600080fd5b61012e61049a565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610168578181015183820152602001610150565b50505050905090810190601f1680156101955780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101cf600480360360408110156101b957600080fd5b506001600160a01b0381351690602001356104c3565b604080519115158252519081900360200190f35b6101eb61052a565b60408051918252519081900360200190f35b6101cf6004803603606081101561021357600080fd5b506001600160a01b03813581169160208101359091169060400135610530565b6101eb6106df565b610243610703565b6040805160ff9092168252519081900360200190f35b6101eb610708565b61028d6004803603604081101561027757600080fd5b506001600160a01b03813516906020013561070e565b005b61012e6107f2565b6101eb600480360360208110156102ad57600080fd5b50356001600160a01b031661080f565b6101eb600480360360208110156102d357600080fd5b50356001600160a01b0316610821565b6102eb610833565b604080516001600160a01b039092168252519081900360200190f35b61028d600480360361010081101561031e57600080fd5b506001600160a01b038135811691602081013590911690604081013590606081013590608081013515159060ff60a0820135169060c08101359060e00135610842565b61012e610b29565b61028d6004803603604081101561037f57600080fd5b506001600160a01b038135169060200135610b4a565b6101cf600480360360408110156103ab57600080fd5b506001600160a01b038135169060200135610cd5565b6101cf600480360360608110156103d757600080fd5b6001600160a01b038235169160208101359181019060608101604082013564010000000081111561040757600080fd5b82018360208201111561041957600080fd5b8035906020019184600183028401116401000000008311171561043b57600080fd5b509092509050610ce9565b6101eb6004803603604081101561045c57600080fd5b506001600160a01b0381358116916020013516610dfa565b61028d6004803603602081101561048a57600080fd5b50356001600160a01b0316610e17565b6040518060400160405280600d81526020016c48616b6b612046696e616e636560981b81525081565b3360008181526003602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b60015481565b60006001600160a01b038416331480159061057057506001600160a01b038416600090815260036020908152604080832033845290915290205460001914155b156105c8576001600160a01b03841660009081526003602090815260408083203384529091529020546105a39083610f12565b6001600160a01b03851660009081526003602090815260408083203384529091529020555b6001600160a01b03841660009081526002602052604090205482111561062c576040805162461bcd60e51b8152602060048201526014602482015273696e73756666696369656e742d62616c616e636560601b604482015290519081900360640190fd5b6001600160a01b03841660009081526002602052604090205461064f9083610f12565b6001600160a01b03808616600090815260026020526040808220939093559085168152205461067e9083610f22565b6001600160a01b0380851660008181526002602090815260409182902094909455805186815290519193928816927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a35060019392505050565b7fea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb81565b601281565b60055481565b6000546001600160a01b03163314610761576040805162461bcd60e51b81526020600482015260116024820152701c195c9b5a5cdcda5bdb8819195b9a5959607a1b604482015290519081900360640190fd5b6001600160a01b0382166000908152600260205260409020546107849082610f22565b6001600160a01b0383166000908152600260205260409020556001546107aa9082610f22565b6001556040805182815290516001600160a01b038416916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b604051806040016040528060018152602001603160f81b81525081565b60026020526000908152604090205481565b60046020526000908152604090205481565b6000546001600160a01b031681565b600554604080517fea2aa0a1be11a07ed86d755c93467f4f82362b452371d1ba94d1715123511acb6020808301919091526001600160a01b03808d16838501819052908c166060840152608083018b905260a083018a905288151560c0808501919091528451808503909101815260e08401855280519083012061190160f01b6101008501526101028401959095526101228084019590955283518084039095018552610142909201909252825192909101919091209061093e576040805162461bcd60e51b81526020600482015260116024820152700696e76616c69642d616464726573732d3607c1b604482015290519081900360640190fd5b6040805160008152602080820180845284905260ff8716828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa158015610995573d6000803e3d6000fd5b505050602060405103516001600160a01b0316896001600160a01b0316146109f5576040805162461bcd60e51b815260206004820152600e60248201526d1a5b9d985b1a590b5c195c9b5a5d60921b604482015290519081900360640190fd5b851580610a025750854211155b610a44576040805162461bcd60e51b815260206004820152600e60248201526d1c195c9b5a5d0b595e1c1a5c995960921b604482015290519081900360640190fd5b6001600160a01b03891660009081526004602052604090208054600181019091558714610aa8576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642d6e6f6e636560981b604482015290519081900360640190fd5b600085610ab6576000610aba565b6000195b6001600160a01b03808c166000818152600360209081526040808320948f168084529482529182902085905581518581529151949550929391927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92592918290030190a350505050505050505050565b6040518060400160405280600581526020016448414b4b4160d81b81525081565b6001600160a01b0382163314801590610b8857506001600160a01b038216600090815260036020908152604080832033845290915290205460001914155b15610be0576001600160a01b0382166000908152600360209081526040808320338452909152902054610bbb9082610f12565b6001600160a01b03831660009081526003602090815260408083203384529091529020555b6001600160a01b038216600090815260026020526040902054811115610c44576040805162461bcd60e51b8152602060048201526014602482015273696e73756666696369656e742d62616c616e636560601b604482015290519081900360640190fd5b6001600160a01b038216600090815260026020526040902054610c679082610f12565b6001600160a01b038316600090815260026020526040902055600154610c8d9082610f12565b6001556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000610ce2338484610530565b9392505050565b3360008181526003602090815260408083206001600160a01b038916808552908352818420889055815188815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a3604051638f4ffcb160e01b81523360048201818152602483018790523060448401819052608060648501908152608485018790526001600160a01b038a1694638f4ffcb194938a93928a928a92919060a401848480828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b158015610dd757600080fd5b505af1158015610deb573d6000803e3d6000fd5b50600198975050505050505050565b600360209081526000928352604080842090915290825290205481565b6000546001600160a01b03163314610e6a576040805162461bcd60e51b81526020600482015260116024820152701c195c9b5a5cdcda5bdb8819195b9a5959607a1b604482015290519081900360640190fd5b6001600160a01b038116610eb7576040805162461bcd60e51b815260206004820152600f60248201526e696e76616c6964206164647265737360881b604482015290519081900360640190fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b8082038281111561052457600080fd5b8082018281101561052457600080fdfea265627a7a723158203c906be090347bbc5e2d73a0f763fbf0c9ad80d5e2536a75c2c2073c461defe064736f6c63430005100032