function safeSymbol(address token) internal returns(bytes32 symbol) {

        (bool success, bytes memory data) = token.call(abi.encodeWithSignature("symbol()"));

        if (!success) {
            (success, data) = token.call(abi.encodeWithSignature("Symbol()"));
        }

        if (!success) {
            (success, data) = token.call(abi.encodeWithSignature("SYMBOL()"));
        }

        if (!success) {
            return 0;
        }

        uint256 dataLength = data.length;
        assembly {
            symbol := mload(add(data, dataLength))
        }
    }