function highCompose(uint256 token1, uint256 token2, uint256 token3) 
        external
        payable
        whenNotPaused
    {
        require(msg.value >= 0.005 ether);
        require(tokenContract.ownerOf(token1) == msg.sender);
        require(tokenContract.ownerOf(token2) == msg.sender);
        require(tokenContract.ownerOf(token3) == msg.sender);
        require(!equipContract.isEquipedAny3(msg.sender, token1, token2, token3));

        uint16 protoId;
        uint16 quality;
        uint16 pos; 
        uint16[13] memory fashionData = tokenContract.getFashion(token1);
        protoId = fashionData[0];
        quality = fashionData[1];
        pos = fashionData[2];
    

        fashionData = tokenContract.getFashion(token2);
        require(quality == fashionData[1]);
        require(pos == fashionData[2]);

        fashionData = tokenContract.getFashion(token3);
        require(quality == fashionData[1]);
        require(pos == fashionData[2]);

        uint256 seed = _rand();
        uint16[13] memory attrs = _getFashionParam(seed, protoId, quality + 1, pos);

        tokenContract.destroyFashion(token1, 1);
        tokenContract.destroyFashion(token2, 1);
        tokenContract.destroyFashion(token3, 1);

        uint256 newTokenId = tokenContract.createFashion(msg.sender, attrs, 4);
        _transferHelper(0.005 ether);

        if (msg.value > 0.005 ether) {
            msg.sender.transfer(msg.value - 0.005 ether);
        }

        emit ComposeSuccess(msg.sender, newTokenId, attrs[0], attrs[1], attrs[2]);
    }