diff --git a/src/components/token/NftHolderTable.vue b/src/components/token/NftHolderTable.vue
index 1c53dcc13..3aa5bf249 100644
--- a/src/components/token/NftHolderTable.vue
+++ b/src/components/token/NftHolderTable.vue
@@ -41,7 +41,6 @@
:striped="true"
:mobile-breakpoint="ORUGA_MOBILE_BREAKPOINT"
- style="cursor: pointer"
aria-current-label="Current page"
aria-next-label="Next page"
aria-page-label="Page"
@@ -142,3 +141,9 @@ export default defineComponent({
});
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/transaction/NftTransactionTableController.ts b/src/components/transaction/NftTransactionTableController.ts
index 1c8c01d8a..76d6b50b2 100644
--- a/src/components/transaction/NftTransactionTableController.ts
+++ b/src/components/transaction/NftTransactionTableController.ts
@@ -89,10 +89,15 @@ export class NftTransactionTableController extends TableController<
const params = {} as {
limit: number
order: string
+ timestamp: string | undefined
}
params.limit = limit
params.order = order
+ if (consensusTimestamp !== null) {
+ params.timestamp = operator + ":" + consensusTimestamp
+ }
+
const r = await axios.get(
`api/v1/tokens/${this.tokenId.value}/nfts/${this.serialNumber.value}/transactions`,
{params: params},
diff --git a/src/utils/RouteManager.ts b/src/utils/RouteManager.ts
index 3903c2be0..2aafda40c 100644
--- a/src/utils/RouteManager.ts
+++ b/src/utils/RouteManager.ts
@@ -18,15 +18,15 @@
*
*/
-import {NavigationFailure, RouteLocationNormalizedLoaded, RouteLocationRaw, Router} from "vue-router"
-import {Transaction} from "@/schemas/HederaSchemas"
-import {NetworkRegistry, networkRegistry} from "@/schemas/NetworkRegistry"
-import {computed, ref, watch, WatchStopHandle} from "vue"
-import router from "@/router"
-import {AppStorage} from "@/AppStorage"
-import {nameServiceSetNetwork} from '@/utils/NameService'
-import axios from "axios"
-import {CacheUtils} from "@/utils/cache/CacheUtils"
+import {NavigationFailure, RouteLocationNormalizedLoaded, RouteLocationRaw, Router} from "vue-router";
+import {Transaction} from "@/schemas/HederaSchemas";
+import {NetworkRegistry, networkRegistry} from "@/schemas/NetworkRegistry";
+import {computed, ref, watch, WatchStopHandle} from "vue";
+import router from "@/router";
+import {AppStorage} from "@/AppStorage";
+import {nameServiceSetNetwork} from '@/utils/NameService';
+import axios from "axios";
+import {CacheUtils} from "@/utils/cache/CacheUtils";
export class RouteManager {
@@ -44,7 +44,7 @@ export class RouteManager {
axios.defaults.baseURL = this.currentNetworkEntry.value.url
this.updateSelectedNetworkSilently()
this.switchThemes()
- }, {immediate: true})
+ }, { immediate: true})
watch(this.currentNetwork, () => {
RouteManager.resetSingletons()
})
@@ -58,7 +58,7 @@ export class RouteManager {
public readonly currentNetworkEntry = computed(() => {
- let networkName: string | null
+ let networkName: string|null
const networkParam = this.router.currentRoute.value?.params?.network
if (Array.isArray(networkParam)) {
networkName = networkParam.length >= 1 ? networkParam[0] : null
@@ -72,7 +72,7 @@ export class RouteManager {
public selectedNetwork = ref(networkRegistry.getDefaultEntry().name)
- public selectedNetworkWatchHandle: WatchStopHandle | undefined
+ public selectedNetworkWatchHandle: WatchStopHandle|undefined
public updateSelectedNetworkSilently(): void {
if (this.selectedNetworkWatchHandle) {
@@ -82,7 +82,7 @@ export class RouteManager {
this.selectedNetworkWatchHandle = watch(this.selectedNetwork, (selection) => {
router.push({
name: "MainDashboard",
- params: {network: selection}
+ params: { network: selection }
})
})
}
@@ -99,32 +99,32 @@ export class RouteManager {
public readonly isStakingRoute = computed(() => this.testStakingRoute())
public readonly isBlocksRoute = computed(() => this.testBlocksRoute())
- public testDashboardRoute(route: string | null = null): boolean {
+ public testDashboardRoute(route: string|null = null): boolean {
const r = route ?? this.currentRoute.value
return r === 'MainDashboard'
}
- public testTransactionRoute(route: string | null = null): boolean {
+ public testTransactionRoute(route: string|null = null): boolean {
const r = route ?? this.currentRoute.value
return r === 'Transactions' || r === 'TransactionsById' || r === 'TransactionDetails'
}
- public testTokenRoute(route: string | null = null): boolean {
+ public testTokenRoute(route: string|null = null): boolean {
const r = route ?? this.currentRoute.value
return r === 'Tokens' || r === 'TokenDetails'
}
- public testTopicRoute(route: string | null = null): boolean {
+ public testTopicRoute(route: string|null = null): boolean {
const r = route ?? this.currentRoute.value
return r === 'Topics' || r === 'TopicDetails'
}
- public testContractRoute(route: string | null = null): boolean {
+ public testContractRoute(route: string|null = null): boolean {
const r = route ?? this.currentRoute.value
return r === 'Contracts' || r === 'ContractDetails'
}
- public testAccountRoute(route: string | null = null): boolean {
+ public testAccountRoute(route: string|null = null): boolean {
const r = route ?? this.currentRoute.value
return r === 'Accounts'
|| r === 'AccountDetails'
@@ -133,17 +133,17 @@ export class RouteManager {
|| r === 'AdminKeyDetails'
}
- public testNodeRoute(route: string | null = null): boolean {
+ public testNodeRoute(route: string|null = null): boolean {
const r = route ?? this.currentRoute.value
return r === 'Nodes' || r === 'NodeDetails'
}
- public testStakingRoute(route: string | null = null): boolean {
+ public testStakingRoute(route: string|null = null): boolean {
const r = route ?? this.currentRoute.value
return r === 'Staking'
}
- public testBlocksRoute(route: string | null = null): boolean {
+ public testBlocksRoute(route: string|null = null): boolean {
const r = route ?? this.currentRoute.value
return r === 'Blocks' || r === 'BlockDetails'
}
@@ -155,8 +155,8 @@ export class RouteManager {
public routeToTransaction(t: Transaction, newTab = false): Promise {
let result: Promise
if (newTab) {
- const routeData = this.router.resolve(this.makeRouteToTransaction(t.consensus_timestamp))
- window.open(routeData.href, '_blank')
+ const routeData = this.router.resolve(this.makeRouteToTransaction(t.consensus_timestamp));
+ window.open(routeData.href, '_blank');
result = Promise.resolve()
} else {
result = this.router.push(this.makeRouteToTransaction(t.consensus_timestamp))
@@ -164,11 +164,11 @@ export class RouteManager {
return result
}
- public routeToTransactionByTs(consensusTimestamp: string | undefined, newTab = false): Promise {
+ public routeToTransactionByTs(consensusTimestamp: string|undefined, newTab = false): Promise {
let result: Promise
if (newTab) {
- const routeData = this.router.resolve(this.makeRouteToTransaction(consensusTimestamp))
- window.open(routeData.href, '_blank')
+ const routeData = this.router.resolve(this.makeRouteToTransaction(consensusTimestamp));
+ window.open(routeData.href, '_blank');
result = Promise.resolve()
} else {
result = this.router.push(this.makeRouteToTransaction(consensusTimestamp))
@@ -180,10 +180,10 @@ export class RouteManager {
return this.makeRouteToTransaction(transaction.consensus_timestamp)
}
- public makeRouteToTransaction(transactionLoc: string | undefined): RouteLocationRaw {
+ public makeRouteToTransaction(transactionLoc: string|undefined): RouteLocationRaw {
return {
name: 'TransactionDetails',
- params: {transactionLoc: transactionLoc, network: this.currentNetwork.value}
+ params: { transactionLoc: transactionLoc, network: this.currentNetwork.value }
}
}
@@ -196,7 +196,7 @@ export class RouteManager {
}
public makeRouteToTransactionsById(transactionId: string): RouteLocationRaw {
- return {name: 'TransactionsById', params: {transactionId: transactionId, network: this.currentNetwork.value}}
+ return {name: 'TransactionsById', params: { transactionId: transactionId, network: this.currentNetwork.value }}
}
//
@@ -212,15 +212,15 @@ export class RouteManager {
}
public routeToAccount(accountId: string, newTab = false): Promise {
- let result: Promise
- if (newTab) {
- const routeData = this.router.resolve(this.makeRouteToAccount(accountId))
- window.open(routeData.href, '_blank')
- result = Promise.resolve()
- } else {
- result = this.router.push(this.makeRouteToAccount(accountId))
- }
- return result
+ let result: Promise
+ if (newTab) {
+ const routeData = this.router.resolve(this.makeRouteToAccount(accountId));
+ window.open(routeData.href, '_blank');
+ result = Promise.resolve()
+ } else {
+ result = this.router.push(this.makeRouteToAccount(accountId))
+ }
+ return result
}
//
@@ -252,14 +252,14 @@ export class RouteManager {
//
public makeRouteToToken(tokenId: string): RouteLocationRaw {
- return {name: 'TokenDetails', params: {tokenId: tokenId, network: this.currentNetwork.value}}
+ return { name: 'TokenDetails', params: { tokenId: tokenId, network: this.currentNetwork.value }}
}
public routeToToken(tokenId: string, newTab = false): Promise {
let result: Promise
if (newTab) {
- const routeData = this.router.resolve(this.makeRouteToToken(tokenId))
- window.open(routeData.href, '_blank')
+ const routeData = this.router.resolve(this.makeRouteToToken(tokenId));
+ window.open(routeData.href, '_blank');
result = Promise.resolve()
} else {
result = this.router.push(this.makeRouteToToken(tokenId))
@@ -291,14 +291,14 @@ export class RouteManager {
//
public makeRouteToContract(contractId: string): RouteLocationRaw {
- return {name: 'ContractDetails', params: {contractId: contractId, network: this.currentNetwork.value}}
+ return {name: 'ContractDetails', params: { contractId: contractId, network: this.currentNetwork.value }}
}
public routeToContract(contractId: string, newTab = false): Promise {
let result: Promise
if (newTab) {
- const routeData = this.router.resolve(this.makeRouteToContract(contractId))
- window.open(routeData.href, '_blank')
+ const routeData = this.router.resolve(this.makeRouteToContract(contractId));
+ window.open(routeData.href, '_blank');
result = Promise.resolve()
} else {
result = this.router.push(this.makeRouteToContract(contractId))
@@ -317,8 +317,8 @@ export class RouteManager {
public routeToTopic(topicId: string, newTab = false): Promise {
let result: Promise
if (newTab) {
- const routeData = this.router.resolve(this.makeRouteToTopic(topicId))
- window.open(routeData.href, '_blank')
+ const routeData = this.router.resolve(this.makeRouteToTopic(topicId));
+ window.open(routeData.href, '_blank');
result = Promise.resolve()
} else {
result = this.router.push(this.makeRouteToTopic(topicId))
@@ -330,15 +330,15 @@ export class RouteManager {
// Block
//
- public makeRouteToBlock(blockHon: string | number): RouteLocationRaw {
+ public makeRouteToBlock(blockHon: string|number): RouteLocationRaw {
return {name: 'BlockDetails', params: {blockHon: blockHon, network: this.currentNetwork.value}}
}
- public routeToBlock(blockHon: string | number, newTab = false): Promise {
+ public routeToBlock(blockHon: string|number, newTab = false): Promise {
let result: Promise
if (newTab) {
- const routeData = this.router.resolve(this.makeRouteToBlock(blockHon))
- window.open(routeData.href, '_blank')
+ const routeData = this.router.resolve(this.makeRouteToBlock(blockHon));
+ window.open(routeData.href, '_blank');
result = Promise.resolve()
} else {
result = this.router.push(this.makeRouteToBlock(blockHon))
@@ -357,8 +357,8 @@ export class RouteManager {
public routeToNode(nodeId: number, newTab = false): Promise {
let result: Promise
if (newTab) {
- const routeData = this.router.resolve(this.makeRouteToNode(nodeId))
- window.open(routeData.href, '_blank')
+ const routeData = this.router.resolve(this.makeRouteToNode(nodeId));
+ window.open(routeData.href, '_blank');
result = Promise.resolve()
} else {
result = this.router.push(this.makeRouteToNode(nodeId))
@@ -373,8 +373,8 @@ export class RouteManager {
public makeRouteToNoSearchResult(searchedId: string, errorCount: number): RouteLocationRaw {
return {
name: 'NoSearchResult',
- params: {searchedId: searchedId, network: this.currentNetwork.value},
- query: {errorCount: errorCount}
+ params: { searchedId: searchedId, network: this.currentNetwork.value },
+ query: { errorCount: errorCount }
}
}
@@ -387,7 +387,7 @@ export class RouteManager {
//
public makeRouteToMainDashboard(): RouteLocationRaw {
- return {name: 'MainDashboard', params: {network: this.currentNetwork.value}}
+ return {name: 'MainDashboard', params: { network: this.currentNetwork.value } }
}
public routeToMainDashboard(): Promise {
@@ -395,43 +395,43 @@ export class RouteManager {
}
public makeRouteToTransactions(): RouteLocationRaw {
- return {name: 'Transactions', params: {network: this.currentNetwork.value}}
+ return {name: 'Transactions', params: { network: this.currentNetwork.value } }
}
public makeRouteToTokens(): RouteLocationRaw {
- return {name: 'Tokens', params: {network: this.currentNetwork.value}}
+ return {name: 'Tokens', params: { network: this.currentNetwork.value } }
}
public makeRouteToTopics(): RouteLocationRaw {
- return {name: 'Topics', params: {network: this.currentNetwork.value}}
+ return {name: 'Topics', params: { network: this.currentNetwork.value } }
}
public makeRouteToContracts(): RouteLocationRaw {
- return {name: 'Contracts', params: {network: this.currentNetwork.value}}
+ return {name: 'Contracts', params: { network: this.currentNetwork.value } }
}
public makeRouteToAccounts(): RouteLocationRaw {
- return {name: 'Accounts', params: {network: this.currentNetwork.value}}
+ return {name: 'Accounts', params: { network: this.currentNetwork.value } }
}
public makeRouteToNodes(): RouteLocationRaw {
- return {name: 'Nodes', params: {network: this.currentNetwork.value}}
+ return {name: 'Nodes', params: { network: this.currentNetwork.value } }
}
public makeRouteToStaking(): RouteLocationRaw {
- return {name: 'Staking', params: {network: this.currentNetwork.value}}
+ return {name: 'Staking', params: { network: this.currentNetwork.value } }
}
public makeRouteToBlocks(): RouteLocationRaw {
- return {name: 'Blocks', params: {network: this.currentNetwork.value}}
+ return {name: 'Blocks', params: { network: this.currentNetwork.value } }
}
public makeRouteToMobileSearch(): RouteLocationRaw {
- return {name: 'MobileSearch', params: {network: this.currentNetwork.value}}
+ return {name: 'MobileSearch', params: { network: this.currentNetwork.value } }
}
public makeRouteToPageNotFound(): RouteLocationRaw {
- return {name: 'PageNotFound', params: {network: this.currentNetwork.value}}
+ return {name: 'PageNotFound', params: { network: this.currentNetwork.value } }
}
public makeRouteToMobileMenu(name: unknown): RouteLocationRaw {
@@ -473,8 +473,8 @@ export class RouteManager {
}
}
-export function fetchStringQueryParam(paramName: string, route: RouteLocationNormalizedLoaded): string | null {
- let result: string | null
+export function fetchStringQueryParam(paramName: string, route: RouteLocationNormalizedLoaded): string|null {
+ let result: string|null
const v = route.query[paramName]
if (typeof v == "string") {
result = v
@@ -484,8 +484,8 @@ export function fetchStringQueryParam(paramName: string, route: RouteLocationNor
return result
}
-export function fetchNumberQueryParam(paramName: string, route: RouteLocationNormalizedLoaded): number | null {
- let result: number | null
+export function fetchNumberQueryParam(paramName: string, route: RouteLocationNormalizedLoaded): number|null {
+ let result: number|null
const v = route.query[paramName]
if (typeof v == "string") {
const i = parseInt(v)
diff --git a/src/utils/TransactionTools.ts b/src/utils/TransactionTools.ts
index 347289e68..567682c78 100644
--- a/src/utils/TransactionTools.ts
+++ b/src/utils/TransactionTools.ts
@@ -18,13 +18,8 @@
*
*/
-import {
- StakingRewardTransfer,
- Transaction,
- TransactionType,
- Transfer,
-} from "@/schemas/HederaSchemas"
-import {TransactionID} from "@/utils/TransactionID"
+import {StakingRewardTransfer, Transaction, TransactionType, Transfer} from "@/schemas/HederaSchemas";
+import {TransactionID} from "@/utils/TransactionID";
export function makeSummaryLabel(row: Transaction): string {
let result: string
@@ -32,7 +27,7 @@ export function makeSummaryLabel(row: Transaction): string {
switch (row.name) {
case TransactionType.CRYPTOTRANSFER:
- netAmount = computeNetAmount(row.transfers, row.charged_tx_fee)
+ netAmount = computeNetAmount(row.transfers, row.charged_tx_fee);
result = makeTransferLabel(row, netAmount)
break
case TransactionType.CONSENSUSCREATETOPIC:
@@ -155,44 +150,45 @@ export function showPositiveNetAmount(row: Transaction): boolean {
export function makeTypeLabel(type: TransactionType | undefined): string {
let result: string
switch (type) {
+
case TransactionType.CONSENSUSCREATETOPIC:
- result = "HCS Create Topic"
- break
+ result = "HCS Create Topic";
+ break;
case TransactionType.CONSENSUSUPDATETOPIC:
- result = "HCS Update Topic"
- break
+ result = "HCS Update Topic";
+ break;
case TransactionType.CONSENSUSDELETETOPIC:
- result = "HCS Delete Topic"
- break
+ result = "HCS Delete Topic";
+ break;
case TransactionType.CONSENSUSSUBMITMESSAGE:
result = "HCS Submit Message"
- break
+ break;
case TransactionType.CONTRACTCALL:
result = "Contract Call"
- break
+ break;
case TransactionType.CONTRACTDELETEINSTANCE:
result = "Contract Delete"
- break
+ break;
case TransactionType.CONTRACTCREATEINSTANCE:
result = "Contract Create"
- break
+ break;
case TransactionType.CONTRACTUPDATEINSTANCE:
result = "Contract Update"
- break
+ break;
case TransactionType.CRYPTOADDLIVEHASH:
result = "Crypto Add Live Hash"
- break
+ break;
case TransactionType.CRYPTOCREATEACCOUNT:
result = "Crypto Create Account"
- break
+ break;
case TransactionType.CRYPTODELETE:
result = "Crypto Delete Account"
- break
+ break;
case TransactionType.CRYPTOUPDATEACCOUNT:
result = "Crypto Update Account"
- break
+ break;
case TransactionType.CRYPTODELETELIVEHASH:
result = "Crypto Delete Live Hash"
break
@@ -207,100 +203,100 @@ export function makeTypeLabel(type: TransactionType | undefined): string {
break
case TransactionType.FILECREATE:
- result = "File Create"
- break
+ result = "File Create";
+ break;
case TransactionType.FILEDELETE:
- result = "File Delete"
- break
+ result = "File Delete";
+ break;
case TransactionType.FILEAPPEND:
- result = "File Append"
- break
+ result = "File Append";
+ break;
case TransactionType.FILEUPDATE:
- result = "File Update"
- break
+ result = "File Update";
+ break;
case TransactionType.FREEZE:
- result = "Freeze"
- break
+ result = "Freeze";
+ break;
case TransactionType.SCHEDULECREATE:
- result = "Schedule Create"
- break
+ result = "Schedule Create";
+ break;
case TransactionType.SCHEDULEDELETE:
- result = "Schedule Delete"
- break
+ result = "Schedule Delete";
+ break;
case TransactionType.SCHEDULESIGN:
- result = "Schedule Sign"
- break
+ result = "Schedule Sign";
+ break;
case TransactionType.SYSTEMDELETE:
- result = "System Delete"
- break
+ result = "System Delete";
+ break;
case TransactionType.SYSTEMUNDELETE:
- result = "System Undelete"
- break
+ result = "System Undelete";
+ break;
case TransactionType.TOKENBURN:
- result = "Token Burn"
- break
+ result = "Token Burn";
+ break;
case TransactionType.TOKENCREATION:
- result = "Token Create"
- break
+ result = "Token Create";
+ break;
case TransactionType.TOKENDELETION:
- result = "Token Delete"
- break
+ result = "Token Delete";
+ break;
case TransactionType.TOKENUPDATE:
- result = "Token Update"
- break
+ result = "Token Update";
+ break;
case TransactionType.TOKENASSOCIATE:
- result = "Token Associate"
- break
+ result = "Token Associate";
+ break;
case TransactionType.TOKENDISSOCIATE:
- result = "Token Dissociate"
- break
+ result = "Token Dissociate";
+ break;
case TransactionType.TOKENFEESCHEDULEUPDATE:
- result = "Token Fee Schedule Update"
- break
+ result = "Token Fee Schedule Update";
+ break;
case TransactionType.TOKENFREEZE:
- result = "Token Freeze"
- break
+ result = "Token Freeze";
+ break;
case TransactionType.TOKENGRANTKYC:
- result = "Token KYC Grant"
- break
+ result = "Token KYC Grant";
+ break;
case TransactionType.TOKENMINT:
- result = "Token Mint"
- break
+ result = "Token Mint";
+ break;
case TransactionType.TOKENPAUSE:
- result = "Token Pause"
- break
+ result = "Token Pause";
+ break;
case TransactionType.TOKENREVOKEKYC:
- result = "Token KYC Revoke"
- break
+ result = "Token KYC Revoke";
+ break;
case TransactionType.TOKENUNFREEZE:
- result = "Token Unfreeze"
- break
+ result = "Token Unfreeze";
+ break;
case TransactionType.TOKENUNPAUSE:
- result = "Token Unpause"
- break
+ result = "Token Unpause";
+ break;
case TransactionType.TOKENWIPE:
- result = "Token Wipe"
- break
+ result = "Token Wipe";
+ break;
case TransactionType.UNCHECKEDSUBMIT:
- result = "Unchecked Submit"
- break
+ result = "Unchecked Submit";
+ break;
case TransactionType.ETHEREUMTRANSACTION:
- result = "Ethereum Transaction"
- break
+ result = "Ethereum Transaction";
+ break;
case TransactionType.NODESTAKEUPDATE:
- result = "Node Stake Update"
- break
+ result = "Node Stake Update";
+ break;
case TransactionType.UTILPRNG:
- result = "Pseudorandom Number Generate"
- break
+ result = "Pseudorandom Number Generate";
+ break;
default:
result = type ?? "?"
@@ -312,7 +308,7 @@ export function makeTypeLabel(type: TransactionType | undefined): string {
export function makeOperatorAccountLabel(transaction: Transaction): string {
let result: string | null
- const transactionId = transaction.transaction_id
+ const transactionId = transaction.transaction_id;
if (transactionId != null) {
result = TransactionID.makePayerID(transactionId) ?? "?"
} else {
@@ -337,10 +333,7 @@ function formatMemo(memo64: string): string {
return result
}
-export function computeNetAmount(
- transfers: Transfer[] | undefined,
- transactionFee: number | undefined,
-): number {
+export function computeNetAmount(transfers: Transfer[] | undefined, transactionFee: number | undefined): number {
let result = 0
if (transfers !== undefined) {
for (const t of transfers) {
@@ -353,10 +346,7 @@ export function computeNetAmount(
return result
}
-export function makeNetOfRewards(
- transfers: Transfer[] | undefined,
- rewards: StakingRewardTransfer[] | undefined,
-): Transfer[] {
+export function makeNetOfRewards(transfers: Transfer[] | undefined, rewards: StakingRewardTransfer[] | undefined): Transfer[] {
let result = Array()
let totalRewardAmount = 0
@@ -384,7 +374,7 @@ export function makeNetOfRewards(
result.push({
amount: netAmount,
account: t.account,
- is_approval: t.is_approval,
+ is_approval: t.is_approval
})
}
} else {
diff --git a/src/utils/table/TableController.ts b/src/utils/table/TableController.ts
index 3bb2416d4..72282121c 100644
--- a/src/utils/table/TableController.ts
+++ b/src/utils/table/TableController.ts
@@ -238,7 +238,7 @@ export abstract class TableController {
// Private
//
- private autoRefreshRef: Ref = ref(false)
+ private readonly autoRefreshRef: Ref = ref(false)
private readonly mountedRef: Ref = ref(false)