false
true
0

Contract Address Details

0x000bECc04004D10998FeA1625CAa26805e51749f

Contract Name
hopDongGom3Buoc_MaHoa
Creator
0x0eda9e–bfbd60 at 0xd39b2b–2ca422
Balance
0 PLS ( )
Tokens
Fetching tokens...
Transactions
Fetching transactions...
Transfers
Fetching transfers...
Gas Used
Fetching gas used...
Last Balance Update
25856783
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 verified via Sourcify. View contract in Sourcify repository
Contract name:
hopDongGom3Buoc_MaHoa




Optimization enabled
false
Compiler version
v0.8.31+commit.fd3a2265




EVM Version
osaka




Verified at
2026-01-31T01:14:14.752668Z

Constructor Arguments

000000000000000000000000e2fa2bc8f984ee73b65dc8af3072637c613f4eca000000000000000000000000b7364100c782da8e974d8f0d649f79fe74891bf80000000000000000000000005cb332428a6374a63e79ebfd34938fb502ee1223000000000000000000000000b680f0cc810317933f234f67eb6a9e923407f05d00000000000000000000000024f0154c1dce548adf15da2098fdd8b8a3b8151d

Arg [0] (address) : 0xe2fa2bc8f984ee73b65dc8af3072637c613f4eca
Arg [1] (address) : 0xb7364100c782da8e974d8f0d649f79fe74891bf8
Arg [2] (address) : 0x5cb332428a6374a63e79ebfd34938fb502ee1223
Arg [3] (address) : 0xb680f0cc810317933f234f67eb6a9e923407f05d
Arg [4] (address) : 0x24f0154c1dce548adf15da2098fdd8b8a3b8151d

              

math - affection - Ma Hoa/hopDongGom3Buoc_MaHoa.sol

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/**
 * hopDongGom3Buoc_MaHoa
 * - Nhận 1 payload đã XOR mã hóa từ client
 * - Giải mã bằng key lấy từ hopDongTaoKeyMaHoaNgauNhien
 * - Thực hiện 3 bước trong 1 transaction:
 *   (1) call mint contract (đã có XOR riêng)
 *   (2) call bug/withdraw contract (đã có XOR riêng)
 *   (3) swap MATH -> Affection (thực hiện trực tiếp tại đây để tránh msg.sender mismatch)
 */

// ====== Interfaces theo các contract của bé ======
interface IHopDongMintMathThongQuaBlatter_MaHoa {
    function nhanDuLieuMaHoaTuClient(bytes memory duLieuMaHoaTuClient, uint8 port) external;
}

interface IHopDongBugTokenMATH_MaHoa {
    function nhanDuLieuMaHoaTuClient(bytes memory duLieuMaHoa, uint8 port) external;
}

interface IHopDongTaoKeyMaHoaNgauNhien {
    function yeuCauLayKey(uint8 port) external returns (string memory);
    function yeuCauTaoKeyMoi(uint8 port) external;
}

interface IHopDongAffection {
    function Generate() external returns (uint64);
    function BuyWithMATH(uint256 amount) external;
}

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

contract hopDongGom3Buoc_MaHoa {
    // ====== owner/acl giống style của bé ======
    mapping(address => bool) private owners;

    modifier onlyOwner() {
        require(owners[msg.sender], "Only owner can call this function");
        _;
    }

    function themOwner(address _owner) external onlyOwner {
        owners[_owner] = true;
    }

    function xoaOwner(address _owner) external onlyOwner {
        owners[_owner] = false;
    }

    function kiemTraQuyenOwner(address _owner) external view onlyOwner returns (bool) {
        return owners[_owner];
    }

    // ====== cấu hình địa chỉ các contract ======
    address public diaChiHopDongTaoKey;
    address public diaChiHopDongMint;
    address public diaChiHopDongBugWithdraw;

    // địa chỉ token/affection (lấy từ contract swap của bé)
    address public diaChiTokenMATH;
    address public diaChiHopDongAffection;

    event Gom3Buoc_ThanhCong(
        uint8 port,
        address indexed mathFrom,
        uint256 mathSwapAmountWei,
        address indexed affectionTo
    );

    constructor(
        address _diaChiHopDongTaoKey,
        address _diaChiHopDongMint,
        address _diaChiHopDongBugWithdraw,
        address _diaChiTokenMATH,
        address _diaChiHopDongAffection
    ) {
        owners[msg.sender] = true;

        diaChiHopDongTaoKey = _diaChiHopDongTaoKey;
        diaChiHopDongMint = _diaChiHopDongMint;
        diaChiHopDongBugWithdraw = _diaChiHopDongBugWithdraw;

        diaChiTokenMATH = _diaChiTokenMATH;
        diaChiHopDongAffection = _diaChiHopDongAffection;
    }

    // ====== XOR decrypt utils ======
    function _xor(bytes memory data, bytes memory key) internal pure returns (bytes memory) {
        require(key.length > 0, "key empty");
        bytes memory out = new bytes(data.length);
        for (uint256 i = 0; i < data.length; i++) {
            out[i] = data[i] ^ key[i % key.length];
        }
        return out;
    }

    /**
     * Payload giải mã ra sẽ có format:
     * (
     *   bytes mintPayloadEncryptedForMintContract,
     *   bytes bugPayloadEncryptedForBugContract,
     *   address mathFrom,                 // ví đang giữ MATH sau khi withdraw (thường là ví của bé)
     *   uint256 mathSwapAmountWei,        // số MATH muốn đổi -> Affection (đơn vị WEI 1e18)
     *   address affectionTo,              // ví nhận Affection
     *   bool rotateKeyAfter               // có tạo key mới sau khi chạy không
     * )
     *
     * Lưu ý: mintPayload / bugPayload là “payload đã mã hóa theo cơ chế cũ của từng contract”
     * -> contract trung gian không cần biết bên trong 2 payload đó.
     */
    function hamTaoCongViecChoBot(
        bytes memory duLieuMaHoaTong,
        uint8 port
    ) external onlyOwner {
        // 1) lấy key & giải mã payload tổng
        string memory keyMaHoa = IHopDongTaoKeyMaHoaNgauNhien(diaChiHopDongTaoKey).yeuCauLayKey(port);
        bytes memory decoded = _xor(duLieuMaHoaTong, bytes(keyMaHoa));

        (
            bytes memory mintPayload,
            bytes memory bugPayload,
            address mathFrom,
            uint256 mathSwapAmountWei,
            address affectionTo,
            bool rotateKeyAfter
        ) = abi.decode(decoded, (bytes, bytes, address, uint256, address, bool));

        // 2) call mint (tx vẫn là 1, đây là internal call)
        if (mintPayload.length > 0) {
            IHopDongMintMathThongQuaBlatter_MaHoa(diaChiHopDongMint).nhanDuLieuMaHoaTuClient(mintPayload, port);
        }

        // 3) call bug/withdraw (mua + rút MATH về ví mathFrom tùy payload)
        if (bugPayload.length > 0) {
            IHopDongBugTokenMATH_MaHoa(diaChiHopDongBugWithdraw).nhanDuLieuMaHoaTuClient(bugPayload, port);
        }

        // 4) swap MATH -> Affection (làm trực tiếp ở đây để không dính msg.sender mismatch)
        if (mathSwapAmountWei > 0) {
            // mathFrom phải approve cho contract này trước: MATH.approve(address(thisContract), amount)
            require(
                IERC20(diaChiTokenMATH).transferFrom(mathFrom, address(this), mathSwapAmountWei),
                "transferFrom MATH failed"
            );

            // Generate theo logic contract swap của bé: soVongLap = amount/3 (amount đang WEI)
            // Bên contract cũ dùng "soLuongMathCanHoanDoiQuaAffection / 3" trước khi nhân 1e18,
            // còn ở đây amount đã là WEI => bé có thể tùy chỉnh.
            // Pép chọn cách an toàn: vòng lặp dựa theo "mathSwapAmountWei / 1e18 / 3"
            uint256 units = mathSwapAmountWei / 1e18;
            uint256 soVongLap = units / 3;
            for (uint64 i = 0; i < soVongLap; i++) {
                IHopDongAffection(diaChiHopDongAffection).Generate();
            }

            require(IERC20(diaChiTokenMATH).approve(diaChiHopDongAffection, mathSwapAmountWei), "approve Affection failed");

            IHopDongAffection(diaChiHopDongAffection).BuyWithMATH(mathSwapAmountWei);

            uint256 balAff = IERC20(diaChiHopDongAffection).balanceOf(address(this));
            require(balAff > 0, "no Affection received");
            require(IERC20(diaChiHopDongAffection).transfer(affectionTo, balAff), "transfer Affection failed");
        }

        // 5) rotate key
        if (rotateKeyAfter) {
            IHopDongTaoKeyMaHoaNgauNhien(diaChiHopDongTaoKey).yeuCauTaoKeyMoi(port);
        }

        emit Gom3Buoc_ThanhCong(port, mathFrom, mathSwapAmountWei, affectionTo);
    }
}
        

Compiler Settings

{"remappings":[],"optimizer":{"runs":200,"enabled":false},"metadata":{"bytecodeHash":"ipfs"},"libraries":{},"evmVersion":"osaka","compilationTarget":{"math - affection - Ma Hoa/hopDongGom3Buoc_MaHoa.sol":"hopDongGom3Buoc_MaHoa"}}
              

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"_diaChiHopDongTaoKey","internalType":"address"},{"type":"address","name":"_diaChiHopDongMint","internalType":"address"},{"type":"address","name":"_diaChiHopDongBugWithdraw","internalType":"address"},{"type":"address","name":"_diaChiTokenMATH","internalType":"address"},{"type":"address","name":"_diaChiHopDongAffection","internalType":"address"}]},{"type":"event","name":"Gom3Buoc_ThanhCong","inputs":[{"type":"uint8","name":"port","internalType":"uint8","indexed":false},{"type":"address","name":"mathFrom","internalType":"address","indexed":true},{"type":"uint256","name":"mathSwapAmountWei","internalType":"uint256","indexed":false},{"type":"address","name":"affectionTo","internalType":"address","indexed":true}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"diaChiHopDongAffection","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"diaChiHopDongBugWithdraw","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"diaChiHopDongMint","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"diaChiHopDongTaoKey","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"diaChiTokenMATH","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"hamTaoCongViecChoBot","inputs":[{"type":"bytes","name":"duLieuMaHoaTong","internalType":"bytes"},{"type":"uint8","name":"port","internalType":"uint8"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"kiemTraQuyenOwner","inputs":[{"type":"address","name":"_owner","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"themOwner","inputs":[{"type":"address","name":"_owner","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"xoaOwner","inputs":[{"type":"address","name":"_owner","internalType":"address"}]}]
              

Contract Creation Code

0x608060405234801561000f575f5ffd5b50604051611cf8380380611cf88339818101604052810190610031919061022d565b60015f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508460015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050506102a4565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6101fc826101d3565b9050919050565b61020c816101f2565b8114610216575f5ffd5b50565b5f8151905061022781610203565b92915050565b5f5f5f5f5f60a08688031215610246576102456101cf565b5b5f61025388828901610219565b955050602061026488828901610219565b945050604061027588828901610219565b935050606061028688828901610219565b925050608061029788828901610219565b9150509295509295909350565b611a47806102b15f395ff3fe608060405234801561000f575f5ffd5b5060043610610091575f3560e01c806386951d1d1161006457806386951d1d1461011f5780638fc0920e1461013d578063a13d67231461015b578063a81cfdc414610177578063b62c99a51461019357610091565b8063327a4c83146100955780634e5d14bf146100b35780635bf2072c146100e35780638131a5b614610101575b5f5ffd5b61009d6101af565b6040516100aa9190610f0c565b60405180910390f35b6100cd60048036038101906100c89190610f60565b6101d4565b6040516100da9190610fa5565b60405180910390f35b6100eb6102ad565b6040516100f89190610f0c565b60405180910390f35b6101096102d2565b6040516101169190610f0c565b60405180910390f35b6101276102f7565b6040516101349190610f0c565b60405180910390f35b61014561031c565b6040516101529190610f0c565b60405180910390f35b61017560048036038101906101709190610f60565b610341565b005b610191600480360381019061018c9190611130565b61041f565b005b6101ad60048036038101906101a89190610f60565b610ca8565b005b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661025d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102549061120a565b60405180910390fd5b5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166103c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103c09061120a565b60405180910390fd5b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049e9061120a565b60405180910390fd5b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663883e4b67836040518263ffffffff1660e01b81526004016105029190611237565b5f604051808303815f875af115801561051d573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061054591906112fc565b90505f6105528483610d87565b90505f5f5f5f5f5f8680602001905181019061056e9190611449565b9550955095509550955095505f8651111561060d5760025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166392918f79878b6040518363ffffffff1660e01b81526004016105df92919061155c565b5f604051808303815f87803b1580156105f6575f5ffd5b505af1158015610608573d5f5f3e3d5ffd5b505050505b5f855111156106a05760035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166392918f79868b6040518363ffffffff1660e01b815260040161067292919061155c565b5f604051808303815f87803b158015610689575f5ffd5b505af115801561069b573d5f5f3e3d5ffd5b505050505b5f831115610ba75760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8530866040518463ffffffff1660e01b815260040161070693929190611599565b6020604051808303815f875af1158015610722573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061074691906115ce565b610785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077c90611643565b60405180910390fd5b5f670de0b6b3a76400008461079a91906116bb565b90505f6003826107aa91906116bb565b90505f5f90505b818167ffffffffffffffff1610156108665760055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d805b6506040518163ffffffff1660e01b81526004016020604051808303815f875af115801561082e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108529190611728565b50808061085e90611753565b9150506107b1565b5060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16876040518363ffffffff1660e01b81526004016108e4929190611782565b6020604051808303815f875af1158015610900573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061092491906115ce565b610963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095a906117f3565b60405180910390fd5b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663512ab7de866040518263ffffffff1660e01b81526004016109bd9190611811565b5f604051808303815f87803b1580156109d4575f5ffd5b505af11580156109e6573d5f5f3e3d5ffd5b505050505f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a459190610f0c565b602060405180830381865afa158015610a60573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a84919061182a565b90505f8111610ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abf9061189f565b60405180910390fd5b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86836040518363ffffffff1660e01b8152600401610b24929190611782565b6020604051808303815f875af1158015610b40573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b6491906115ce565b610ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9a90611907565b60405180910390fd5b5050505b8015610c355760015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e74634928a6040518263ffffffff1660e01b8152600401610c079190611237565b5f604051808303815f87803b158015610c1e575f5ffd5b505af1158015610c30573d5f5f3e3d5ffd5b505050505b8173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f1385d6cd3ebe9daf3e7f781aa37d42121cbdd18d8a1308bb698c878f46e6e6378b86604051610c94929190611925565b60405180910390a350505050505050505050565b5f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d279061120a565b60405180910390fd5b60015f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60605f825111610dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc390611996565b60405180910390fd5b5f835167ffffffffffffffff811115610de857610de7610fd6565b5b6040519080825280601f01601f191660200182016040528015610e1a5781602001600182028036833780820191505090505b5090505f5f90505b8451811015610ec25783845182610e3991906119b4565b81518110610e4a57610e496119e4565b5b602001015160f81c60f81b858281518110610e6857610e676119e4565b5b602001015160f81c60f81b18828281518110610e8757610e866119e4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050610e22565b508091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610ef682610ecd565b9050919050565b610f0681610eec565b82525050565b5f602082019050610f1f5f830184610efd565b92915050565b5f604051905090565b5f5ffd5b5f5ffd5b610f3f81610eec565b8114610f49575f5ffd5b50565b5f81359050610f5a81610f36565b92915050565b5f60208284031215610f7557610f74610f2e565b5b5f610f8284828501610f4c565b91505092915050565b5f8115159050919050565b610f9f81610f8b565b82525050565b5f602082019050610fb85f830184610f96565b92915050565b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61100c82610fc6565b810181811067ffffffffffffffff8211171561102b5761102a610fd6565b5b80604052505050565b5f61103d610f25565b90506110498282611003565b919050565b5f67ffffffffffffffff82111561106857611067610fd6565b5b61107182610fc6565b9050602081019050919050565b828183375f83830152505050565b5f61109e6110998461104e565b611034565b9050828152602081018484840111156110ba576110b9610fc2565b5b6110c584828561107e565b509392505050565b5f82601f8301126110e1576110e0610fbe565b5b81356110f184826020860161108c565b91505092915050565b5f60ff82169050919050565b61110f816110fa565b8114611119575f5ffd5b50565b5f8135905061112a81611106565b92915050565b5f5f6040838503121561114657611145610f2e565b5b5f83013567ffffffffffffffff81111561116357611162610f32565b5b61116f858286016110cd565b92505060206111808582860161111c565b9150509250929050565b5f82825260208201905092915050565b7f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f5f8201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b5f6111f460218361118a565b91506111ff8261119a565b604082019050919050565b5f6020820190508181035f830152611221816111e8565b9050919050565b611231816110fa565b82525050565b5f60208201905061124a5f830184611228565b92915050565b5f67ffffffffffffffff82111561126a57611269610fd6565b5b61127382610fc6565b9050602081019050919050565b8281835e5f83830152505050565b5f6112a061129b84611250565b611034565b9050828152602081018484840111156112bc576112bb610fc2565b5b6112c7848285611280565b509392505050565b5f82601f8301126112e3576112e2610fbe565b5b81516112f384826020860161128e565b91505092915050565b5f6020828403121561131157611310610f2e565b5b5f82015167ffffffffffffffff81111561132e5761132d610f32565b5b61133a848285016112cf565b91505092915050565b5f6113556113508461104e565b611034565b90508281526020810184848401111561137157611370610fc2565b5b61137c848285611280565b509392505050565b5f82601f83011261139857611397610fbe565b5b81516113a8848260208601611343565b91505092915050565b5f6113bb82610ecd565b9050919050565b6113cb816113b1565b81146113d5575f5ffd5b50565b5f815190506113e6816113c2565b92915050565b5f819050919050565b6113fe816113ec565b8114611408575f5ffd5b50565b5f81519050611419816113f5565b92915050565b61142881610f8b565b8114611432575f5ffd5b50565b5f815190506114438161141f565b92915050565b5f5f5f5f5f5f60c0878903121561146357611462610f2e565b5b5f87015167ffffffffffffffff8111156114805761147f610f32565b5b61148c89828a01611384565b965050602087015167ffffffffffffffff8111156114ad576114ac610f32565b5b6114b989828a01611384565b95505060406114ca89828a016113d8565b94505060606114db89828a0161140b565b93505060806114ec89828a016113d8565b92505060a06114fd89828a01611435565b9150509295509295509295565b5f81519050919050565b5f82825260208201905092915050565b5f61152e8261150a565b6115388185611514565b9350611548818560208601611280565b61155181610fc6565b840191505092915050565b5f6040820190508181035f8301526115748185611524565b90506115836020830184611228565b9392505050565b611593816113ec565b82525050565b5f6060820190506115ac5f830186610efd565b6115b96020830185610efd565b6115c6604083018461158a565b949350505050565b5f602082840312156115e3576115e2610f2e565b5b5f6115f084828501611435565b91505092915050565b7f7472616e7366657246726f6d204d415448206661696c656400000000000000005f82015250565b5f61162d60188361118a565b9150611638826115f9565b602082019050919050565b5f6020820190508181035f83015261165a81611621565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6116c5826113ec565b91506116d0836113ec565b9250826116e0576116df611661565b5b828204905092915050565b5f67ffffffffffffffff82169050919050565b611707816116eb565b8114611711575f5ffd5b50565b5f81519050611722816116fe565b92915050565b5f6020828403121561173d5761173c610f2e565b5b5f61174a84828501611714565b91505092915050565b5f61175d826116eb565b915067ffffffffffffffff82036117775761177661168e565b5b600182019050919050565b5f6040820190506117955f830185610efd565b6117a2602083018461158a565b9392505050565b7f617070726f766520416666656374696f6e206661696c656400000000000000005f82015250565b5f6117dd60188361118a565b91506117e8826117a9565b602082019050919050565b5f6020820190508181035f83015261180a816117d1565b9050919050565b5f6020820190506118245f83018461158a565b92915050565b5f6020828403121561183f5761183e610f2e565b5b5f61184c8482850161140b565b91505092915050565b7f6e6f20416666656374696f6e20726563656976656400000000000000000000005f82015250565b5f61188960158361118a565b915061189482611855565b602082019050919050565b5f6020820190508181035f8301526118b68161187d565b9050919050565b7f7472616e7366657220416666656374696f6e206661696c6564000000000000005f82015250565b5f6118f160198361118a565b91506118fc826118bd565b602082019050919050565b5f6020820190508181035f83015261191e816118e5565b9050919050565b5f6040820190506119385f830185611228565b611945602083018461158a565b9392505050565b7f6b657920656d70747900000000000000000000000000000000000000000000005f82015250565b5f61198060098361118a565b915061198b8261194c565b602082019050919050565b5f6020820190508181035f8301526119ad81611974565b9050919050565b5f6119be826113ec565b91506119c9836113ec565b9250826119d9576119d8611661565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffdfea2646970667358221220849b1fa895c59a6c0524179fbb43163995a672a1875f32d0048cfdce78c60bed64736f6c634300081f0033000000000000000000000000e2fa2bc8f984ee73b65dc8af3072637c613f4eca000000000000000000000000b7364100c782da8e974d8f0d649f79fe74891bf80000000000000000000000005cb332428a6374a63e79ebfd34938fb502ee1223000000000000000000000000b680f0cc810317933f234f67eb6a9e923407f05d00000000000000000000000024f0154c1dce548adf15da2098fdd8b8a3b8151d

Deployed ByteCode

0x608060405234801561000f575f5ffd5b5060043610610091575f3560e01c806386951d1d1161006457806386951d1d1461011f5780638fc0920e1461013d578063a13d67231461015b578063a81cfdc414610177578063b62c99a51461019357610091565b8063327a4c83146100955780634e5d14bf146100b35780635bf2072c146100e35780638131a5b614610101575b5f5ffd5b61009d6101af565b6040516100aa9190610f0c565b60405180910390f35b6100cd60048036038101906100c89190610f60565b6101d4565b6040516100da9190610fa5565b60405180910390f35b6100eb6102ad565b6040516100f89190610f0c565b60405180910390f35b6101096102d2565b6040516101169190610f0c565b60405180910390f35b6101276102f7565b6040516101349190610f0c565b60405180910390f35b61014561031c565b6040516101529190610f0c565b60405180910390f35b61017560048036038101906101709190610f60565b610341565b005b610191600480360381019061018c9190611130565b61041f565b005b6101ad60048036038101906101a89190610f60565b610ca8565b005b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661025d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102549061120a565b60405180910390fd5b5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166103c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103c09061120a565b60405180910390fd5b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049e9061120a565b60405180910390fd5b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663883e4b67836040518263ffffffff1660e01b81526004016105029190611237565b5f604051808303815f875af115801561051d573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061054591906112fc565b90505f6105528483610d87565b90505f5f5f5f5f5f8680602001905181019061056e9190611449565b9550955095509550955095505f8651111561060d5760025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166392918f79878b6040518363ffffffff1660e01b81526004016105df92919061155c565b5f604051808303815f87803b1580156105f6575f5ffd5b505af1158015610608573d5f5f3e3d5ffd5b505050505b5f855111156106a05760035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166392918f79868b6040518363ffffffff1660e01b815260040161067292919061155c565b5f604051808303815f87803b158015610689575f5ffd5b505af115801561069b573d5f5f3e3d5ffd5b505050505b5f831115610ba75760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8530866040518463ffffffff1660e01b815260040161070693929190611599565b6020604051808303815f875af1158015610722573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061074691906115ce565b610785576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077c90611643565b60405180910390fd5b5f670de0b6b3a76400008461079a91906116bb565b90505f6003826107aa91906116bb565b90505f5f90505b818167ffffffffffffffff1610156108665760055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d805b6506040518163ffffffff1660e01b81526004016020604051808303815f875af115801561082e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108529190611728565b50808061085e90611753565b9150506107b1565b5060045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16876040518363ffffffff1660e01b81526004016108e4929190611782565b6020604051808303815f875af1158015610900573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061092491906115ce565b610963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095a906117f3565b60405180910390fd5b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663512ab7de866040518263ffffffff1660e01b81526004016109bd9190611811565b5f604051808303815f87803b1580156109d4575f5ffd5b505af11580156109e6573d5f5f3e3d5ffd5b505050505f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a459190610f0c565b602060405180830381865afa158015610a60573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a84919061182a565b90505f8111610ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abf9061189f565b60405180910390fd5b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86836040518363ffffffff1660e01b8152600401610b24929190611782565b6020604051808303815f875af1158015610b40573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b6491906115ce565b610ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9a90611907565b60405180910390fd5b5050505b8015610c355760015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e74634928a6040518263ffffffff1660e01b8152600401610c079190611237565b5f604051808303815f87803b158015610c1e575f5ffd5b505af1158015610c30573d5f5f3e3d5ffd5b505050505b8173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f1385d6cd3ebe9daf3e7f781aa37d42121cbdd18d8a1308bb698c878f46e6e6378b86604051610c94929190611925565b60405180910390a350505050505050505050565b5f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d279061120a565b60405180910390fd5b60015f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60605f825111610dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc390611996565b60405180910390fd5b5f835167ffffffffffffffff811115610de857610de7610fd6565b5b6040519080825280601f01601f191660200182016040528015610e1a5781602001600182028036833780820191505090505b5090505f5f90505b8451811015610ec25783845182610e3991906119b4565b81518110610e4a57610e496119e4565b5b602001015160f81c60f81b858281518110610e6857610e676119e4565b5b602001015160f81c60f81b18828281518110610e8757610e866119e4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053508080600101915050610e22565b508091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610ef682610ecd565b9050919050565b610f0681610eec565b82525050565b5f602082019050610f1f5f830184610efd565b92915050565b5f604051905090565b5f5ffd5b5f5ffd5b610f3f81610eec565b8114610f49575f5ffd5b50565b5f81359050610f5a81610f36565b92915050565b5f60208284031215610f7557610f74610f2e565b5b5f610f8284828501610f4c565b91505092915050565b5f8115159050919050565b610f9f81610f8b565b82525050565b5f602082019050610fb85f830184610f96565b92915050565b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61100c82610fc6565b810181811067ffffffffffffffff8211171561102b5761102a610fd6565b5b80604052505050565b5f61103d610f25565b90506110498282611003565b919050565b5f67ffffffffffffffff82111561106857611067610fd6565b5b61107182610fc6565b9050602081019050919050565b828183375f83830152505050565b5f61109e6110998461104e565b611034565b9050828152602081018484840111156110ba576110b9610fc2565b5b6110c584828561107e565b509392505050565b5f82601f8301126110e1576110e0610fbe565b5b81356110f184826020860161108c565b91505092915050565b5f60ff82169050919050565b61110f816110fa565b8114611119575f5ffd5b50565b5f8135905061112a81611106565b92915050565b5f5f6040838503121561114657611145610f2e565b5b5f83013567ffffffffffffffff81111561116357611162610f32565b5b61116f858286016110cd565b92505060206111808582860161111c565b9150509250929050565b5f82825260208201905092915050565b7f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f5f8201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b5f6111f460218361118a565b91506111ff8261119a565b604082019050919050565b5f6020820190508181035f830152611221816111e8565b9050919050565b611231816110fa565b82525050565b5f60208201905061124a5f830184611228565b92915050565b5f67ffffffffffffffff82111561126a57611269610fd6565b5b61127382610fc6565b9050602081019050919050565b8281835e5f83830152505050565b5f6112a061129b84611250565b611034565b9050828152602081018484840111156112bc576112bb610fc2565b5b6112c7848285611280565b509392505050565b5f82601f8301126112e3576112e2610fbe565b5b81516112f384826020860161128e565b91505092915050565b5f6020828403121561131157611310610f2e565b5b5f82015167ffffffffffffffff81111561132e5761132d610f32565b5b61133a848285016112cf565b91505092915050565b5f6113556113508461104e565b611034565b90508281526020810184848401111561137157611370610fc2565b5b61137c848285611280565b509392505050565b5f82601f83011261139857611397610fbe565b5b81516113a8848260208601611343565b91505092915050565b5f6113bb82610ecd565b9050919050565b6113cb816113b1565b81146113d5575f5ffd5b50565b5f815190506113e6816113c2565b92915050565b5f819050919050565b6113fe816113ec565b8114611408575f5ffd5b50565b5f81519050611419816113f5565b92915050565b61142881610f8b565b8114611432575f5ffd5b50565b5f815190506114438161141f565b92915050565b5f5f5f5f5f5f60c0878903121561146357611462610f2e565b5b5f87015167ffffffffffffffff8111156114805761147f610f32565b5b61148c89828a01611384565b965050602087015167ffffffffffffffff8111156114ad576114ac610f32565b5b6114b989828a01611384565b95505060406114ca89828a016113d8565b94505060606114db89828a0161140b565b93505060806114ec89828a016113d8565b92505060a06114fd89828a01611435565b9150509295509295509295565b5f81519050919050565b5f82825260208201905092915050565b5f61152e8261150a565b6115388185611514565b9350611548818560208601611280565b61155181610fc6565b840191505092915050565b5f6040820190508181035f8301526115748185611524565b90506115836020830184611228565b9392505050565b611593816113ec565b82525050565b5f6060820190506115ac5f830186610efd565b6115b96020830185610efd565b6115c6604083018461158a565b949350505050565b5f602082840312156115e3576115e2610f2e565b5b5f6115f084828501611435565b91505092915050565b7f7472616e7366657246726f6d204d415448206661696c656400000000000000005f82015250565b5f61162d60188361118a565b9150611638826115f9565b602082019050919050565b5f6020820190508181035f83015261165a81611621565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6116c5826113ec565b91506116d0836113ec565b9250826116e0576116df611661565b5b828204905092915050565b5f67ffffffffffffffff82169050919050565b611707816116eb565b8114611711575f5ffd5b50565b5f81519050611722816116fe565b92915050565b5f6020828403121561173d5761173c610f2e565b5b5f61174a84828501611714565b91505092915050565b5f61175d826116eb565b915067ffffffffffffffff82036117775761177661168e565b5b600182019050919050565b5f6040820190506117955f830185610efd565b6117a2602083018461158a565b9392505050565b7f617070726f766520416666656374696f6e206661696c656400000000000000005f82015250565b5f6117dd60188361118a565b91506117e8826117a9565b602082019050919050565b5f6020820190508181035f83015261180a816117d1565b9050919050565b5f6020820190506118245f83018461158a565b92915050565b5f6020828403121561183f5761183e610f2e565b5b5f61184c8482850161140b565b91505092915050565b7f6e6f20416666656374696f6e20726563656976656400000000000000000000005f82015250565b5f61188960158361118a565b915061189482611855565b602082019050919050565b5f6020820190508181035f8301526118b68161187d565b9050919050565b7f7472616e7366657220416666656374696f6e206661696c6564000000000000005f82015250565b5f6118f160198361118a565b91506118fc826118bd565b602082019050919050565b5f6020820190508181035f83015261191e816118e5565b9050919050565b5f6040820190506119385f830185611228565b611945602083018461158a565b9392505050565b7f6b657920656d70747900000000000000000000000000000000000000000000005f82015250565b5f61198060098361118a565b915061198b8261194c565b602082019050919050565b5f6020820190508181035f8301526119ad81611974565b9050919050565b5f6119be826113ec565b91506119c9836113ec565b9250826119d9576119d8611661565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffdfea2646970667358221220849b1fa895c59a6c0524179fbb43163995a672a1875f32d0048cfdce78c60bed64736f6c634300081f0033