utilities

package
v0.11.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 24, 2026 License: MIT Imports: 32 Imported by: 0

Documentation

Index

Constants

View Source
const (
	DefaultMinerGo             = 0
	DefaultMinerScala          = 1
	DefaultSenderNotMiner      = 2
	DefaultRecipientNotMiner   = 3
	FirstRecipientNotMiner     = 4
	DAOAccount                 = 5
	XTNBuyBackAccount          = 6
	DefaultAccountForLoanFunds = 9
	MaxAmount                  = math.MaxInt64
	MinAmount                  = math.MinInt64
	MinIssueFeeWaves           = 100000000
	MinSetAssetScriptFeeWaves  = 100000000
	SetDAppScriptFeeWaves      = 100000000
	MinTxFeeWaves              = 100000
	MinTxFeeWavesSmartAsset    = 500000
	MinTxFeeWavesInvokeDApp    = 500000
	MaxDecimals                = 8
	TestChainID                = 'L'
	CommonSymbolSet            = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~!|#$%^&*()_+=\\\";:/?><|][{}"
	LettersAndDigits           = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
	SymbolSet                  = " ~!|#$%^&*()+=;:÷/?><|][{}\\\\\\\".-_@`µ⌂¡¢£¤¥¦§¨©ª¬®¯°±²³´µ¶·¸¹º»¼½¾¿×ø"
	RusLetters                 = "" /* 130-byte string literal not displayed */
	Umlauts                    = "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöùúûüýþÿ"
	EscapeSeq                  = "\\t\\b\\n\\f"
	DefaultInitialTimeout      = 5 * time.Millisecond
	DefaultWaitTimeout         = 15 * time.Second
	DefaultTimeInterval        = 5 * time.Second
	// TimeInMsPast and TimeInMsFuture are used for generating transaction timestamps outside the [±X ms] validity
	// window by adding predefined time intervals to the current timestamp. Validates system response to
	// timestamp-related errors.
	TimeInMsPast   = 7260000
	TimeInMsFuture = 54160000
	// DefaultSponsorshipActivationHeight sets the height at which Fee Sponsorship takes effect.
	// Although the feature itself is activated at height 1 by default, it takes 2 additional voting periods (2 blocks)
	// for it to become effective.
	DefaultSponsorshipActivationHeight = 3
)
View Source
const (
	FeatureStatusActivated = "ACTIVATED"
	FeatureStatusApproved  = "APPROVED"
	FeatureStatusUndefined = "UNDEFINED"
)

Variables

This section is empty.

Functions

func Abs added in v0.10.3

func Abs(x int64) int64

Abs returns the absolute value of x.

func AddNewAccount added in v0.10.3

func AddNewAccount(suite *f.BaseSuite, chainID proto.Scheme) (int, config.AccountInfo)

AddNewAccount function creates and adds new AccountInfo to suite accounts list. Returns index of new account in the list and AccountInfo.

func AddressByAliasCheck added in v0.10.3

func AddressByAliasCheck(t *testing.T, expected, actualGo, actualScala []byte, args ...any)

func ApplicationStatusCheck added in v0.11.0

func ApplicationStatusCheck(t *testing.T, expected, actualGo, actualScala string, args ...any)

func AssetDescriptionCheck added in v0.10.6

func AssetDescriptionCheck(t *testing.T, expected, actualGo, actualScala string, args ...any)

func AssetDiffBalanceCheck added in v0.10.5

func AssetDiffBalanceCheck(t *testing.T, expected, actualGo, actualScala int64, args ...any)

func AssetNameCheck added in v0.10.6

func AssetNameCheck(t *testing.T, expected, actualGo, actualScala string, args ...any)

func AssetScriptCheck added in v0.10.5

func AssetScriptCheck(t *testing.T, expected, actualGo, actualScala []byte, args ...any)

func AssetWithVersion added in v0.10.6

func AssetWithVersion(assetID crypto.Digest, v int) string

func Base16EncodeBytes added in v0.11.0

func Base16EncodeBytes(s string) []byte

Base16EncodeBytes gets string in utf8 and returns array of bytes of base16 string.

func Base58EncodeBytes added in v0.11.0

func Base58EncodeBytes(s string) []byte

func Base64EncodeBytes added in v0.11.0

func Base64EncodeBytes(s string) []byte

func BoolToBytes added in v0.11.0

func BoolToBytes(b bool) []byte

func DaoDiffBalanceInWavesCheck added in v0.11.0

func DaoDiffBalanceInWavesCheck(t *testing.T, expected int64, actualGo, actualScala int64,
	args ...any)

func DataEntriesAndKeysCheck added in v0.11.0

func DataEntriesAndKeysCheck(t *testing.T, expected []*waves.DataEntry, actualGo, actualScala []*waves.DataEntry)

func DataEntryAndKeyCheck added in v0.11.0

func DataEntryAndKeyCheck(
	t *testing.T,
	expected *waves.DataEntry,
	actualGo, actualScala *waves.DataEntry,
	args ...any,
)

func ErrorMessageCheck

func ErrorMessageCheck(t *testing.T, expectedErrGo, expectedErrScala string, actualErrGo,
	actualErrScala error, args ...any)

func ExtractTxID added in v0.10.3

func ExtractTxID(t *testing.T, tx proto.Transaction, scheme proto.Scheme) crypto.Digest

func FeatureShouldBeActivated added in v0.11.0

func FeatureShouldBeActivated(suite *f.BaseSuite, featureID settings.Feature, height uint64)

func GetAccount

func GetAccount(suite *f.BaseSuite, i int) config.AccountInfo

func GetAccountDataGo added in v0.11.0

func GetAccountDataGo(suite *f.BaseSuite, address proto.WavesAddress) []*waves.DataEntry

func GetAccountDataGoByKey added in v0.11.0

func GetAccountDataGoByKey(suite *f.BaseSuite, address proto.WavesAddress, key string) *waves.DataEntry

func GetAccountDataScala added in v0.11.0

func GetAccountDataScala(suite *f.BaseSuite, address proto.WavesAddress) []*waves.DataEntry

func GetAccountDataScalaByKey added in v0.11.0

func GetAccountDataScalaByKey(suite *f.BaseSuite, address proto.WavesAddress, key string) *waves.DataEntry

func GetActivationFeaturesStatusInfoGo added in v0.11.0

func GetActivationFeaturesStatusInfoGo(suite *f.BaseSuite, h uint64) *g.ActivationStatusResponse

func GetActivationFeaturesStatusInfoScala added in v0.11.0

func GetActivationFeaturesStatusInfoScala(suite *f.BaseSuite, h uint64) *g.ActivationStatusResponse

func GetActivationOfFeatures added in v0.11.0

func GetActivationOfFeatures(suite *f.BaseSuite, featureIDs ...settings.Feature)

func GetAddressByAliasGo added in v0.10.3

func GetAddressByAliasGo(suite *f.BaseSuite, alias string) []byte

func GetAddressByAliasScala added in v0.10.3

func GetAddressByAliasScala(suite *f.BaseSuite, alias string) []byte

func GetAddressFromRecipient added in v0.10.4

func GetAddressFromRecipient(suite *f.BaseSuite, recipient proto.Recipient) proto.WavesAddress

func GetAddressWithNewSchema added in v0.10.4

func GetAddressWithNewSchema(suite *f.BaseSuite, chainId proto.Scheme, address proto.WavesAddress) proto.WavesAddress

func GetAddressesByAlias added in v0.10.3

func GetAddressesByAlias(suite *f.BaseSuite, alias string) ([]byte, []byte)

func GetAliasFromString added in v0.11.0

func GetAliasFromString(suite *f.BaseSuite, alias string, chainID proto.Scheme) *proto.Alias

GetAliasFromString String representation of an Alias should have a following format: "alias:<scheme>:<alias>". Scheme should be represented with a one-byte ASCII symbol.

func GetApplicationStatusGo added in v0.11.0

func GetApplicationStatusGo(suite *f.BaseSuite, txID crypto.Digest) g.ApplicationStatus

func GetApplicationStatusScala added in v0.11.0

func GetApplicationStatusScala(suite *f.BaseSuite, txID crypto.Digest) g.ApplicationStatus

func GetAssetBalance

func GetAssetBalance(suite *f.BaseSuite, address proto.WavesAddress, assetID crypto.Digest) (int64, int64)

func GetAssetBalanceGo

func GetAssetBalanceGo(suite *f.BaseSuite, address proto.WavesAddress, assetID crypto.Digest) int64

func GetAssetBalanceScala

func GetAssetBalanceScala(suite *f.BaseSuite, address proto.WavesAddress, assetID crypto.Digest) int64

func GetAssetByID added in v0.11.0

func GetAssetByID(assetID *crypto.Digest) proto.OptionalAsset

func GetAssetInfo added in v0.10.5

func GetAssetInfo(suite *f.BaseSuite, assetID crypto.Digest) *client.AssetsDetail

func GetAssetInfoGrpcGo added in v0.10.5

func GetAssetInfoGrpcGo(suite *f.BaseSuite, assetID crypto.Digest) *g.AssetInfoResponse

func GetAssetInfoGrpcScala added in v0.10.5

func GetAssetInfoGrpcScala(suite *f.BaseSuite, assetID crypto.Digest) *g.AssetInfoResponse

func GetAvailableBalanceInWaves

func GetAvailableBalanceInWaves(suite *f.BaseSuite, address proto.WavesAddress) (int64, int64)

func GetAvailableBalanceInWavesGo

func GetAvailableBalanceInWavesGo(suite *f.BaseSuite, address proto.WavesAddress) int64

func GetAvailableBalanceInWavesScala

func GetAvailableBalanceInWavesScala(suite *f.BaseSuite, address proto.WavesAddress) int64

func GetBlockGo added in v0.11.0

func GetBlockGo(suite *f.BaseSuite, height uint64) *waves.Block

func GetBlockScala added in v0.11.0

func GetBlockScala(suite *f.BaseSuite, height uint64) *waves.Block

func GetBoostBlockRewardPeriodCfg added in v0.11.0

func GetBoostBlockRewardPeriodCfg(suite *f.BaseSuite) uint64

GetBoostBlockRewardPeriodCfg returns boost block reward period.

func GetCurrentReward added in v0.11.0

func GetCurrentReward(suite *f.BaseSuite, height uint64) uint64

func GetCurrentRewardGo added in v0.11.0

func GetCurrentRewardGo(suite *f.BaseSuite, height uint64) uint64

func GetCurrentRewardScala added in v0.11.0

func GetCurrentRewardScala(suite *f.BaseSuite, height uint64) uint64

func GetCurrentTimestampInMs

func GetCurrentTimestampInMs() uint64

func GetDesiredReward added in v0.11.0

func GetDesiredReward(suite *f.BaseSuite, height uint64) int64

func GetDesiredRewardGo added in v0.11.0

func GetDesiredRewardGo(suite *f.BaseSuite, height uint64) int64

func GetDesiredRewardScala added in v0.11.0

func GetDesiredRewardScala(suite *f.BaseSuite, height uint64) int64

func GetFeatureActivationHeight added in v0.11.0

func GetFeatureActivationHeight(suite *f.BaseSuite, featureID settings.Feature, height uint64) proto.Height

func GetFeatureActivationHeightGo added in v0.11.0

func GetFeatureActivationHeightGo(suite *f.BaseSuite, featureID settings.Feature, height uint64) proto.Height

func GetFeatureActivationHeightScala added in v0.11.0

func GetFeatureActivationHeightScala(suite *f.BaseSuite, featureID settings.Feature, height uint64) proto.Height

func GetFeatureBlockchainStatus added in v0.11.0

func GetFeatureBlockchainStatus(suite *f.BaseSuite, featureID settings.Feature, height uint64) (string, error)

func GetFeatureBlockchainStatusGo added in v0.11.0

func GetFeatureBlockchainStatusGo(suite *f.BaseSuite, featureID settings.Feature, h uint64) string

func GetFeatureBlockchainStatusScala added in v0.11.0

func GetFeatureBlockchainStatusScala(suite *f.BaseSuite, featureID settings.Feature, h uint64) string

func GetHeight added in v0.10.6

func GetHeight(suite *f.BaseSuite) uint64

func GetHeightGo added in v0.10.6

func GetHeightGo(suite *f.BaseSuite) uint64

func GetHeightScala added in v0.10.6

func GetHeightScala(suite *f.BaseSuite) uint64

func GetRewardTermAfter20Cfg added in v0.11.0

func GetRewardTermAfter20Cfg(suite *f.BaseSuite) uint64

GetRewardTermAfter20Cfg returns term after feature 20 activation (term-after-capped-reward-feature), =1/2 term.

func GetRewardTermAtHeightGo added in v0.11.0

func GetRewardTermAtHeightGo(suite *f.BaseSuite, height uint64) uint64

func GetRewardTermAtHeightScala added in v0.11.0

func GetRewardTermAtHeightScala(suite *f.BaseSuite, height uint64) uint64

func GetRewardTermCfg added in v0.11.0

func GetRewardTermCfg(suite *f.BaseSuite) uint64

GetRewardTermCfg is max period of voting (term).

func GetRewards added in v0.11.0

func GetRewards(suite *f.BaseSuite) (*client.RewardInfo, *client.RewardInfo)

func GetRewardsAtHeight added in v0.11.0

func GetRewardsAtHeight(suite *f.BaseSuite, height uint64) (*client.RewardInfo, *client.RewardInfo)

func GetRewardsAtHeightGo added in v0.11.0

func GetRewardsAtHeightGo(suite *f.BaseSuite, height uint64) *client.RewardInfo

GetRewardsAtHeightGo get response from /blockchain/rewards/{height}.

func GetRewardsAtHeightScala added in v0.11.0

func GetRewardsAtHeightScala(suite *f.BaseSuite, height uint64) *client.RewardInfo

func GetRewardsGo added in v0.11.0

func GetRewardsGo(suite *f.BaseSuite) *client.RewardInfo

GetRewardsGo get response from /blockchain/rewards.

func GetRewardsScala added in v0.11.0

func GetRewardsScala(suite *f.BaseSuite) *client.RewardInfo

func GetRollbackToHeight added in v0.11.0

func GetRollbackToHeight(suite *f.BaseSuite, height uint64, returnTxToUtx bool) (*proto.BlockID, *proto.BlockID)

func GetRollbackToHeightGo added in v0.11.0

func GetRollbackToHeightGo(suite *f.BaseSuite, height uint64, returnTxToUtx bool) *proto.BlockID

func GetRollbackToHeightScala added in v0.11.0

func GetRollbackToHeightScala(suite *f.BaseSuite, height uint64, returnTxToUtx bool) *proto.BlockID

func GetScriptBytes added in v0.10.5

func GetScriptBytes(suite *f.BaseSuite, scriptStr string) []byte

func GetTestcaseNameWithVersion added in v0.10.4

func GetTestcaseNameWithVersion(name string, v byte) string

func GetTransactionInfoAfterWaitingGo added in v0.11.0

func GetTransactionInfoAfterWaitingGo(suite *f.BaseSuite, id crypto.Digest, errWtGo error)

func GetTransactionInfoAfterWaitingScala added in v0.11.0

func GetTransactionInfoAfterWaitingScala(suite *f.BaseSuite, id crypto.Digest, errWtScala error)

func GetTransactionJsonOrErrMsg added in v0.10.3

func GetTransactionJsonOrErrMsg(tx proto.Transaction) string

func GetTransactionsStatusesGo added in v0.11.0

func GetTransactionsStatusesGo(suite *f.BaseSuite, txIDs []crypto.Digest) []*g.TransactionStatus

func GetTransactionsStatusesScala added in v0.11.0

func GetTransactionsStatusesScala(suite *f.BaseSuite, txIDs []crypto.Digest) []*g.TransactionStatus

func GetTxIdsInBlockchain

func GetTxIdsInBlockchain(suite *f.BaseSuite, ids map[string]*crypto.Digest) map[string]string

func GetWaitingBlocks added in v0.11.0

func GetWaitingBlocks(suite *f.BaseSuite, height uint64, featureID settings.Feature) uint64

func GetXtnBuybackPeriodCfg added in v0.11.0

func GetXtnBuybackPeriodCfg(suite *f.BaseSuite) uint64

func IntToBytes added in v0.11.0

func IntToBytes(t *testing.T, i int64) []byte

func MarshalTxAndGetTxMsg added in v0.10.3

func MarshalTxAndGetTxMsg(t *testing.T, scheme proto.Scheme, tx proto.Transaction) proto.Message

func MinersSumDiffBalanceInWavesCheck added in v0.11.0

func MinersSumDiffBalanceInWavesCheck(t *testing.T, expected int64, actualGo, actualScala int64,
	args ...any)

func MustGetAccountByAddress added in v0.10.5

func MustGetAccountByAddress(suite *f.BaseSuite, address proto.WavesAddress) config.AccountInfo

func NextCheckParameterCheck added in v0.11.0

func NextCheckParameterCheck(t *testing.T, expected uint64, actualGo, actualScala uint64, args ...any)

func RandDigest added in v0.10.3

func RandDigest(t *testing.T, n int, symbolSet string) crypto.Digest

func RandStringBytes

func RandStringBytes(n int, symbolSet string) string

func ReadAndCompileRideScript added in v0.11.0

func ReadAndCompileRideScript(scriptDir, fileName string) ([]byte, error)

func ReadScript added in v0.10.5

func ReadScript(scriptDir, fileName string) ([]byte, error)

func SafeInt64ToUint64 added in v0.11.0

func SafeInt64ToUint64(x int64) uint64

func SetFromToAccounts added in v0.10.4

func SetFromToAccounts(accountNumbers ...int) (int, int, error)

func StatusCodesCheck

func StatusCodesCheck(t *testing.T, goCode, scalaCode int, b ConsideredTransaction, args ...any)

func TermCheck added in v0.11.0

func TermCheck(t *testing.T, expected uint64, actualGo, actualScala uint64, args ...any)

func TxInfoCheck added in v0.10.4

func TxInfoCheck(t *testing.T, errGo, errScala error, args ...any)

func VotingIntervalStartCheck added in v0.11.0

func VotingIntervalStartCheck(t *testing.T, expected uint64, actualGo, actualScala uint64, args ...any)

func WaitForFeatureActivation added in v0.11.0

func WaitForFeatureActivation(suite *f.BaseSuite, featureID settings.Feature, height uint64) proto.Height

func WaitForHeight added in v0.10.6

func WaitForHeight(suite *f.BaseSuite, height uint64, opts ...config.WaitOption) uint64

func WaitForNewHeight added in v0.11.0

func WaitForNewHeight(suite *f.BaseSuite) uint64

func WavesDiffBalanceCheck

func WavesDiffBalanceCheck(t *testing.T, expected, actualGo, actualScala int64, args ...any)

func XtnBuyBackDiffBalanceInWavesCheck added in v0.11.0

func XtnBuyBackDiffBalanceInWavesCheck(t *testing.T, expected int64, actualGo, actualScala int64,
	args ...any)

Types

type AccountDiffBalances added in v0.10.4

type AccountDiffBalances struct {
	DiffBalanceWaves BalanceInWaves
	DiffBalanceAsset BalanceInAsset
}

type AccountDiffBalancesSponsorshipSender added in v0.10.5

type AccountDiffBalancesSponsorshipSender struct {
	DiffBalanceWaves    BalanceInWaves
	DiffBalanceAsset    BalanceInAsset
	DiffBalanceFeeAsset BalanceInAsset
}

type AccountsDiffBalancesTxWithSponsorship added in v0.10.5

type AccountsDiffBalancesTxWithSponsorship struct {
	DiffBalancesSender    AccountDiffBalancesSponsorshipSender
	DiffBalancesRecipient AccountDiffBalances
	DiffBalancesSponsor   AccountDiffBalances
}

func NewDiffBalancesTxWithSponsorship added in v0.10.5

func NewDiffBalancesTxWithSponsorship(diffBalanceWavesGoSender, diffBalanceWavesScalaSender, diffBalanceAssetGoSender,
	diffBalanceAssetScalaSender, diffBalanceFeeAssetGoSender, diffBalanceFeeAssetScalaSender,
	diffBalanceWavesGoRecipient, diffBalanceWavesScalaRecipient, diffBalanceAssetGoRecipient,
	diffBalanceAssetScalaRecipient, diffBalanceWavesGoSponsor, diffBalanceWavesScalaSponsor, diffBalanceAssetGoSponsor,
	diffBalanceAssetScalaSponsor int64) AccountsDiffBalancesTxWithSponsorship

type AssetInfo added in v0.11.0

type AssetInfo struct {
	AssetInfoGo    *g.AssetInfoResponse
	AssetInfoScala *g.AssetInfoResponse
}

func GetAssetInfoGrpc added in v0.10.5

func GetAssetInfoGrpc(suite *f.BaseSuite, assetID crypto.Digest) AssetInfo

type AvailableVersions added in v0.10.5

type AvailableVersions struct {
	Binary   []byte
	Protobuf []byte
	Sum      []byte
}

func GetAvailableVersions added in v0.10.5

func GetAvailableVersions(t *testing.T, txType proto.TransactionType, minVersion, maxVersion byte) AvailableVersions

func NewAvailableVersions added in v0.10.5

func NewAvailableVersions(binary []byte, protobuf []byte) AvailableVersions

type BalanceInAsset added in v0.10.3

type BalanceInAsset struct {
	BalanceInAssetGo    int64
	BalanceInAssetScala int64
}

func GetActualDiffBalanceInAssets added in v0.10.3

func GetActualDiffBalanceInAssets(suite *f.BaseSuite, address proto.WavesAddress, assetID crypto.Digest,
	initBalanceGo, initBalanceScala int64) BalanceInAsset

func NewBalanceInAsset added in v0.10.3

func NewBalanceInAsset(balanceGo, balanceScala int64) BalanceInAsset

type BalanceInWaves added in v0.10.3

type BalanceInWaves struct {
	BalanceInWavesGo    int64
	BalanceInWavesScala int64
}

func GetActualDiffBalanceInWaves added in v0.10.3

func GetActualDiffBalanceInWaves(suite *f.BaseSuite, address proto.WavesAddress,
	initBalanceGo, initBalanceScala int64) BalanceInWaves

func NewBalanceInWaves added in v0.10.3

func NewBalanceInWaves(balanceGo, balanceScala int64) BalanceInWaves

type BroadcastingError added in v0.10.3

type BroadcastingError struct {
	ErrorBrdCstGo    error
	ErrorBrdCstScala error
}

type ConsideredTransaction added in v0.10.3

type ConsideredTransaction struct {
	TxID      crypto.Digest
	WtErr     WaitingError
	Resp      Response
	BrdCstErr BroadcastingError
}

func BroadcastAndWaitTransaction

func BroadcastAndWaitTransaction(suite *f.BaseSuite, tx proto.Transaction,
	scheme proto.Scheme, waitForTx bool) ConsideredTransaction

func NewConsideredTransaction added in v0.10.3

func NewConsideredTransaction(txId crypto.Digest, respGo, respScala *client.Response,
	errWtGo, errWtScala, errBrdCstGo, errBrdCstScala error) ConsideredTransaction

func SendAndWaitTransaction

func SendAndWaitTransaction(suite *f.BaseSuite, tx proto.Transaction, scheme proto.Scheme,
	waitForTx bool) ConsideredTransaction

type Response added in v0.10.3

type Response struct {
	ResponseGo    *client.Response
	ResponseScala *client.Response
}

type RewardDiffBalancesInWaves added in v0.11.0

type RewardDiffBalancesInWaves struct {
	MinersSumDiffBalance  BalanceInWaves
	DAODiffBalance        BalanceInWaves
	XTNBuyBackDiffBalance BalanceInWaves
}

func NewRewardDiffBalances added in v0.11.0

func NewRewardDiffBalances(diffBalanceGoMiners, diffBalanceScalaMiners, diffBalanceGoDao, diffBalanceScalaDao,
	diffBalanceGoXtn, diffBalanceScalaXtn int64) RewardDiffBalancesInWaves

type RewardTerm added in v0.11.0

type RewardTerm struct {
	TermGo    uint64
	TermScala uint64
}

func GetRewardTermAtHeight added in v0.11.0

func GetRewardTermAtHeight(suite *f.BaseSuite, height uint64) RewardTerm

func NewRewardTerm added in v0.11.0

func NewRewardTerm(termGo, termScala uint64) RewardTerm

type WaitingError added in v0.10.3

type WaitingError struct {
	ErrWtGo    error
	ErrWtScala error
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL