tigerbeetle-node 0.17.5 → 0.17.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Binary file
Binary file
Binary file
package/dist/test.js CHANGED
@@ -57,6 +57,50 @@ function test(name, fn) {
57
57
  test.skip = (name, fn) => {
58
58
  console.log(name + ': SKIPPED');
59
59
  };
60
+ test('Serialization: BigInt exceeds U128', async () => {
61
+ const transfer = {
62
+ id: 9999999999999999999999999999999999999999n,
63
+ debit_account_id: 0n,
64
+ credit_account_id: 0n,
65
+ amount: 0n,
66
+ user_data_128: 0n,
67
+ user_data_64: 0n,
68
+ user_data_32: 0,
69
+ pending_id: 0n,
70
+ timeout: 0,
71
+ ledger: 0,
72
+ code: 0,
73
+ flags: 0,
74
+ timestamp: 0n,
75
+ };
76
+ assert_1.default.rejects(async () => await client.createTransfers([transfer]), (err) => {
77
+ assert_1.default.ok(err instanceof Error);
78
+ assert_1.default.strictEqual(err.message, "id must fit in 128 bits");
79
+ return true;
80
+ });
81
+ });
82
+ test('Serialization: BigInt negative', async () => {
83
+ const transfer = {
84
+ id: -1n,
85
+ debit_account_id: 0n,
86
+ credit_account_id: 0n,
87
+ amount: 0n,
88
+ user_data_128: 0n,
89
+ user_data_64: 0n,
90
+ user_data_32: 0,
91
+ pending_id: 0n,
92
+ timeout: 0,
93
+ ledger: 0,
94
+ code: 0,
95
+ flags: 0,
96
+ timestamp: 0n,
97
+ };
98
+ assert_1.default.rejects(async () => await client.createTransfers([transfer]), (err) => {
99
+ assert_1.default.ok(err instanceof Error);
100
+ assert_1.default.strictEqual(err.message, "id must be positive");
101
+ return true;
102
+ });
103
+ });
60
104
  test('id() monotonically increasing', async () => {
61
105
  let idA = (0, _1.id)();
62
106
  for (let i = 0; i < 10000000; i++) {
package/dist/test.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":"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","sourcesContent":["import assert, { AssertionError } from 'assert'\nimport {\n createClient,\n Account,\n Transfer,\n TransferFlags,\n CreateAccountStatus,\n CreateTransferStatus,\n AccountFilter,\n AccountFilterFlags,\n AccountFlags,\n amount_max,\n id,\n QueryFilter,\n QueryFilterFlags,\n ErrorCodes,\n RequestError,\n} from '.'\n\nasync function sleep_ms(ms: number): Promise<void> {\n await new Promise(resolve => setTimeout(resolve, ms))\n}\n\nfunction range(n: number): number[] {\n return Array.from({ length: n }, (_, i) => i);\n}\n\nfunction random_index(array: Array<any>): number {\n return Math.floor(Math.random() * array.length);\n}\n\nconst REPLICA_ADDRESSES = [process.env.TB_ADDRESS || '3000'];\nconst client = createClient({\n cluster_id: 0n,\n replica_addresses: REPLICA_ADDRESSES\n})\n\n// Test data\nconst accountA: Account = {\n id: 17n,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: 0,\n timestamp: 0n // this will be set correctly by the TigerBeetle server\n}\nconst accountB: Account = {\n id: 19n,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 719,\n flags: 0,\n timestamp: 0n // this will be set correctly by the TigerBeetle server\n}\n\nconst BATCH_MAX = 8189;\n\nconst tests: Array<{ name: string, fn: () => Promise<void> }> = []\nfunction test(name: string, fn: () => Promise<void>) {\n tests.push({ name, fn })\n}\ntest.skip = (name: string, fn: () => Promise<void>) => {\n console.log(name + ': SKIPPED')\n}\n\ntest('id() monotonically increasing', async (): Promise<void> => {\n let idA = id();\n for (let i = 0; i < 10_000_000; i++) {\n // Ensure ID is monotonic between milliseconds if the loop executes too fast.\n if (i % 10_000 == 0) {\n await sleep_ms(1)\n }\n\n const idB = id();\n assert.ok(idB > idA, 'id() returned an id that did not monotonically increase');\n idA = idB;\n }\n})\n\ntest('range check `code` on Account to be u16', async (): Promise<void> => {\n const account = { ...accountA, id: 0n }\n\n account.code = 65535 + 1\n const codeError = await client.createAccounts([account]).catch(error => error)\n assert.strictEqual(codeError.message, 'code must be a u16.')\n\n const accounts = await client.lookupAccounts([account.id])\n assert.deepStrictEqual(accounts, [])\n})\n\ntest('can create accounts', async (): Promise<void> => {\n const account_results = await client.createAccounts([accountA])\n assert.deepStrictEqual(account_results.length, 1)\n assert.ok(account_results[0].timestamp > 0)\n assert.deepStrictEqual(account_results[0].status, CreateAccountStatus.created)\n})\n\ntest('can return error on account', async (): Promise<void> => {\n const account_results = await client.createAccounts([accountA, accountB])\n assert.deepStrictEqual(account_results.length, 2)\n assert.ok(account_results[0].timestamp > 0)\n assert.deepStrictEqual(account_results[0].status, CreateAccountStatus.exists)\n assert.ok(account_results[1].timestamp > 0)\n assert.deepStrictEqual(account_results[1].status, CreateAccountStatus.created)\n})\n\ntest('error if timestamp is not set to 0n on account', async (): Promise<void> => {\n const account = { ...accountA, timestamp: 2n, id: 3n }\n const account_results = await client.createAccounts([account])\n assert.deepStrictEqual(account_results.length, 1)\n assert.ok(account_results[0].timestamp > 0)\n assert.deepStrictEqual(account_results[0].status, CreateAccountStatus.timestamp_must_be_zero)\n})\n\ntest('batch max size', async (): Promise<void> => {\n const BATCH_SIZE = 10_000;\n const transfers: Transfer[] = [];\n for (let i=0; i<BATCH_SIZE;i++) {\n transfers.push({\n id: 0n,\n debit_account_id: 0n,\n credit_account_id: 0n,\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 0,\n code: 0,\n flags: 0,\n timestamp: 0n,\n });\n }\n assert.rejects(async() => await client.createTransfers(transfers), (err) => {\n assert.ok(err instanceof RequestError)\n assert.strictEqual(err.code, ErrorCodes.ERR_TOO_MUCH_DATA)\n return true\n })\n})\n\ntest('batch invalid size', async (): Promise<void> => {\n const transfers: Transfer[] = [];\n transfers.length = 0xffffffff;\n\n assert.rejects(async() => await client.createTransfers(transfers), (err) => {\n assert.ok(err instanceof RequestError)\n assert.strictEqual(err.code, ErrorCodes.ERR_TOO_MUCH_DATA)\n return true\n })\n})\n\ntest('can lookup accounts', async (): Promise<void> => {\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n\n assert.strictEqual(accounts.length, 2)\n const account1 = accounts[0]\n assert.strictEqual(account1.id, 17n)\n assert.strictEqual(account1.credits_posted, 0n)\n assert.strictEqual(account1.credits_pending, 0n)\n assert.strictEqual(account1.debits_posted, 0n)\n assert.strictEqual(account1.debits_pending, 0n)\n assert.strictEqual(account1.user_data_128, 0n)\n assert.strictEqual(account1.user_data_64, 0n)\n assert.strictEqual(account1.user_data_32, 0)\n assert.strictEqual(account1.code, 718)\n assert.strictEqual(account1.ledger, 1)\n assert.strictEqual(account1.flags, 0)\n assert.ok(account1.timestamp > 0n)\n\n const account2 = accounts[1]\n assert.strictEqual(account2.id, 19n)\n assert.strictEqual(account2.credits_posted, 0n)\n assert.strictEqual(account2.credits_pending, 0n)\n assert.strictEqual(account2.debits_posted, 0n)\n assert.strictEqual(account2.debits_pending, 0n)\n assert.strictEqual(account2.user_data_128, 0n)\n assert.strictEqual(account2.user_data_64, 0n)\n assert.strictEqual(account2.user_data_32, 0)\n assert.strictEqual(account2.code, 719)\n assert.strictEqual(account2.ledger, 1)\n assert.strictEqual(account2.flags, 0)\n assert.ok(account2.timestamp > 0n)\n})\n\ntest('can create a transfer', async (): Promise<void> => {\n const transfer: Transfer = {\n id: 1n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: 0,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const transfers_results = await client.createTransfers([transfer])\n assert.deepStrictEqual(transfers_results.length, 1)\n assert.ok(transfers_results[0].timestamp > 0)\n assert.deepStrictEqual(transfers_results[0].status, CreateTransferStatus.created)\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 100n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 100n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n})\n\ntest('can create a two-phase transfer', async (): Promise<void> => {\n let flags = 0\n flags |= TransferFlags.pending\n const transfer: Transfer = {\n id: 2n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 50n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 2e9,\n ledger: 1,\n code: 1,\n flags,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const transfers_results = await client.createTransfers([transfer])\n assert.deepStrictEqual(transfers_results.length, 1)\n assert.ok(transfers_results[0].timestamp > 0)\n assert.deepStrictEqual(transfers_results[0].status, CreateTransferStatus.created)\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 100n)\n assert.strictEqual(accounts[0].credits_pending, 50n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 100n)\n assert.strictEqual(accounts[1].debits_pending, 50n)\n\n // Lookup the transfer:\n const transfers = await client.lookupTransfers([transfer.id])\n assert.strictEqual(transfers.length, 1)\n assert.strictEqual(transfers[0].id, 2n)\n assert.strictEqual(transfers[0].debit_account_id, accountB.id)\n assert.strictEqual(transfers[0].credit_account_id, accountA.id)\n assert.strictEqual(transfers[0].amount, 50n)\n assert.strictEqual(transfers[0].user_data_128, 0n)\n assert.strictEqual(transfers[0].user_data_64, 0n)\n assert.strictEqual(transfers[0].user_data_32, 0)\n assert.strictEqual(transfers[0].timeout > 0, true)\n assert.strictEqual(transfers[0].code, 1)\n assert.strictEqual(transfers[0].flags, 2)\n assert.strictEqual(transfers[0].timestamp > 0, true)\n})\n\ntest('can post a two-phase transfer', async (): Promise<void> => {\n let flags = 0\n flags |= TransferFlags.post_pending_transfer\n\n const commit: Transfer = {\n id: 3n,\n debit_account_id: BigInt(0),\n credit_account_id: BigInt(0),\n amount: amount_max,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 2n,// must match the id of the pending transfer\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: flags,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const transfers_results = await client.createTransfers([commit])\n assert.deepStrictEqual(transfers_results.length, 1)\n assert.ok(transfers_results[0].timestamp > 0)\n assert.deepStrictEqual(transfers_results[0].status, CreateTransferStatus.created)\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n})\n\ntest('can reject a two-phase transfer', async (): Promise<void> => {\n // Create a two-phase transfer:\n const transfer: Transfer = {\n id: 4n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 50n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 1e9,\n ledger: 1,\n code: 1,\n flags: TransferFlags.pending,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n let transfers_results = await client.createTransfers([transfer])\n assert.deepStrictEqual(transfers_results.length, 1)\n assert.ok(transfers_results[0].timestamp > 0)\n assert.deepStrictEqual(transfers_results[0].status, CreateTransferStatus.created)\n\n // send in the reject\n const reject: Transfer = {\n id: 5n,\n debit_account_id: BigInt(0),\n credit_account_id: BigInt(0),\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 4n, // must match the id of the pending transfer\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.void_pending_transfer,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n transfers_results = await client.createTransfers([reject])\n assert.deepStrictEqual(transfers_results.length, 1)\n assert.ok(transfers_results[0].timestamp > 0)\n assert.deepStrictEqual(transfers_results[0].status, CreateTransferStatus.created)\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n})\n\ntest('can link transfers', async (): Promise<void> => {\n const transfer1: Transfer = {\n id: 6n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.linked, // points to transfer2\n timestamp: 0n, // will be set correctly by the TigerBeetle server\n }\n const transfer2: Transfer = {\n id: 6n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n // Does not have linked flag as it is the end of the chain.\n // This will also cause it to fail as this is now a duplicate with different flags\n flags: 0,\n timestamp: 0n, // will be set correctly by the TigerBeetle server\n }\n\n const transfers_results = await client.createTransfers([transfer1, transfer2])\n assert.deepStrictEqual(transfers_results.length, 2)\n assert.ok(transfers_results[0].timestamp > 0)\n assert.deepStrictEqual(transfers_results[0].status, CreateTransferStatus.linked_event_failed)\n assert.ok(transfers_results[1].timestamp > 0)\n assert.deepStrictEqual(transfers_results[1].status, CreateTransferStatus.exists_with_different_flags)\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n})\n\ntest('cannot void an expired transfer', async (): Promise<void> => {\n // Create a two-phase transfer:\n const transfer: Transfer = {\n id: 6n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 50n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 1,\n ledger: 1,\n code: 1,\n flags: TransferFlags.pending,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n let transfers_results = await client.createTransfers([transfer])\n assert.deepStrictEqual(transfers_results.length, 1)\n assert.ok(transfers_results[0].timestamp > 0)\n assert.deepStrictEqual(transfers_results[0].status, CreateTransferStatus.created)\n\n let accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 50n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 50n)\n\n // We need to wait 1s for the server to expire the transfer, however the\n // server can pulse the expiry operation anytime after the timeout,\n // so adding an extra delay to avoid flaky tests.\n const extra_wait_time = 500;\n await sleep_ms((transfer.timeout * 1000) + extra_wait_time);\n\n // Looking up the accounts again for the updated balance.\n accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n\n // send in the reject\n const reject: Transfer = {\n id: 7n,\n debit_account_id: BigInt(0),\n credit_account_id: BigInt(0),\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 6n, // must match the id of the pending transfer\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.void_pending_transfer,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n transfers_results = await client.createTransfers([reject])\n assert.deepStrictEqual(transfers_results.length, 1)\n assert.ok(transfers_results[0].timestamp > 0)\n assert.deepStrictEqual(transfers_results[0].status, CreateTransferStatus.pending_transfer_expired)\n})\n\ntest('can close accounts', async (): Promise<void> => {\n const closing_transfer: Transfer = {\n id: id(),\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.closing_debit | TransferFlags.closing_credit | TransferFlags.pending,\n timestamp: 0n, // will be set correctly by the TigerBeetle server\n }\n let transfers_results = await client.createTransfers([closing_transfer])\n assert.deepStrictEqual(transfers_results.length, 1)\n assert.ok(transfers_results[0].timestamp > 0)\n assert.deepStrictEqual(transfers_results[0].status, CreateTransferStatus.created)\n\n let accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.ok(accountA.flags != accounts[0].flags)\n assert.ok((accounts[0].flags & AccountFlags.closed) != 0)\n\n assert.ok(accountB.flags != accounts[1].flags)\n assert.ok((accounts[1].flags & AccountFlags.closed) != 0)\n\n const voiding_transfer: Transfer = {\n id: id(),\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.void_pending_transfer,\n pending_id: closing_transfer.id,\n timestamp: 0n, // will be set correctly by the TigerBeetle server\n }\n\n transfers_results = await client.createTransfers([voiding_transfer])\n assert.deepStrictEqual(transfers_results.length, 1)\n assert.ok(transfers_results[0].timestamp > 0)\n assert.deepStrictEqual(transfers_results[0].status, CreateTransferStatus.created)\n\n accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accountA.flags, accounts[0].flags)\n assert.ok((accounts[0].flags & AccountFlags.closed) == 0)\n\n assert.strictEqual(accountB.flags, accounts[1].flags)\n assert.ok((accounts[1].flags & AccountFlags.closed) == 0)\n})\n\ntest('can get account transfers', async (): Promise<void> => {\n const accountC: Account = {\n id: 21n,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: AccountFlags.history,\n timestamp: 0n\n }\n const account_results = await client.createAccounts([accountC])\n assert.deepStrictEqual(account_results.length, 1)\n assert.ok(account_results[0].timestamp > 0)\n assert.deepStrictEqual(account_results[0].status, CreateAccountStatus.created)\n\n const transfers_created : Transfer[] = [];\n // Create transfers where the new account is either the debit or credit account:\n for (let i=0; i<10;i++) {\n transfers_created.push({\n id: BigInt(i + 10000),\n debit_account_id: i % 2 == 0 ? accountC.id : accountA.id,\n credit_account_id: i % 2 == 0 ? accountB.id : accountC.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: 0,\n timestamp: 0n,\n });\n }\n\n const transfers_results = await client.createTransfers(transfers_created)\n assert.deepStrictEqual(transfers_results.length, transfers_created.length)\n for (const result of transfers_results) {\n assert.ok(result.timestamp > 0)\n assert.deepStrictEqual(result.status, CreateTransferStatus.created)\n }\n\n // Query all transfers for accountC:\n let filter: AccountFilter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n let transfers = await client.getAccountTransfers(filter)\n let account_balances = await client.getAccountBalances(filter)\n assert.strictEqual(transfers.length, transfers_created.length)\n assert.strictEqual(account_balances.length, transfers.length)\n\n let timestamp = 0n;\n let i = 0;\n for (const transfer of transfers) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query only the debit transfers for accountC, descending:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.debits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n timestamp = 1n << 64n;\n i = 0;\n for (const transfer of transfers) {\n assert.ok(transfer.timestamp < timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query only the credit transfers for accountC, descending:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n timestamp = 1n << 64n;\n i = 0;\n for (const transfer of transfers) {\n assert.ok(transfer.timestamp < timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query the first 5 transfers for accountC:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n timestamp = 0n;\n i = 0;\n for (const transfer of transfers) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query the next 5 transfers for accountC, with pagination:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: timestamp + 1n,\n timestamp_max: 0n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n i = 0;\n for (const transfer of transfers) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query again, no more transfers should be found:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: timestamp + 1n,\n timestamp_max: 0n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.deepStrictEqual(transfers, [])\n assert.strictEqual(account_balances.length, transfers.length)\n\n // Query the first 5 transfers for accountC ORDER BY DESC:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n timestamp = 1n << 64n;\n i = 0;\n for (const transfer of transfers) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query the next 5 transfers for accountC, with pagination:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: timestamp - 1n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n i = 0;\n for (const transfer of transfers) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query again, no more transfers should be found:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: timestamp - 1n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.deepStrictEqual(transfers, [])\n assert.strictEqual(account_balances.length, transfers.length)\n\n // Invalid account:\n filter = {\n account_id: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Invalid timestamp min:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: (1n << 64n) - 1n, // ulong max value\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Invalid timestamp max:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: (1n << 64n) - 1n, // ulong max value\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Invalid timestamp range:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: (1n << 64n) - 2n, // ulong max - 1\n timestamp_max: 1n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Zero limit:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 0,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // TooMuchData\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 10_000,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.rejects(async() => await client.getAccountTransfers(filter), (err) => {\n assert.ok(err instanceof RequestError)\n assert.strictEqual(err.code, ErrorCodes.ERR_TOO_MUCH_DATA)\n return true\n })\n assert.rejects(async() => await client.getAccountBalances(filter), (err) => {\n assert.ok(err instanceof RequestError)\n assert.strictEqual(err.code, ErrorCodes.ERR_TOO_MUCH_DATA)\n return true\n })\n\n // Empty flags:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.none,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Invalid flags:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: 0xFFFF,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n})\n\ntest('can query accounts', async (): Promise<void> => {\n {\n const accounts : Account[] = [];\n // Create transfers:\n for (let i=0; i<10;i++) {\n accounts.push({\n id: id(),\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: i % 2 == 0 ? 1000n : 2000n,\n user_data_64: i % 2 == 0 ? 100n : 200n,\n user_data_32: i % 2 == 0 ? 10 : 20,\n ledger: 1,\n code: 999,\n flags: AccountFlags.none,\n reserved: 0,\n timestamp: 0n,\n })\n }\n\n const account_results = await client.createAccounts(accounts)\n assert.deepStrictEqual(account_results.length, accounts.length)\n for (const result of account_results) {\n assert.ok(result.timestamp > 0)\n assert.deepStrictEqual(result.status, CreateAccountStatus.created)\n }\n }\n\n {\n // Querying accounts where:\n // `user_data_128=1000 AND user_data_64=100 AND user_data_32=10\n // AND code=999 AND ledger=1 ORDER BY timestamp ASC`.\n const filter: QueryFilter = {\n user_data_128: 1000n,\n user_data_64: 100n,\n user_data_32: 10,\n ledger: 1,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n const query: Account[] = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 5)\n\n let timestamp = 0n;\n for (const account of query) {\n assert.ok(timestamp < account.timestamp);\n timestamp = account.timestamp;\n\n assert.strictEqual(account.user_data_128, filter.user_data_128);\n assert.strictEqual(account.user_data_64, filter.user_data_64);\n assert.strictEqual(account.user_data_32, filter.user_data_32);\n assert.strictEqual(account.ledger, filter.ledger);\n assert.strictEqual(account.code, filter.code);\n }\n }\n\n {\n // Querying accounts where:\n // `user_data_128=2000 AND user_data_64=200 AND user_data_32=20\n // AND code=999 AND ledger=1 ORDER BY timestamp DESC`.\n const filter: QueryFilter = {\n user_data_128: 2000n,\n user_data_64: 200n,\n user_data_32: 20,\n ledger: 1,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.reversed,\n }\n const query: Account[] = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 5)\n\n let timestamp = 1n << 64n;\n for (const account of query) {\n assert.ok(timestamp > account.timestamp);\n timestamp = account.timestamp;\n\n assert.strictEqual(account.user_data_128, filter.user_data_128);\n assert.strictEqual(account.user_data_64, filter.user_data_64);\n assert.strictEqual(account.user_data_32, filter.user_data_32);\n assert.strictEqual(account.ledger, filter.ledger);\n assert.strictEqual(account.code, filter.code);\n }\n }\n\n {\n // Querying accounts where:\n // `code=999 ORDER BY timestamp ASC`\n const filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n const query: Account[] = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 10)\n\n let timestamp = 0n;\n for (const account of query) {\n assert.ok(timestamp < account.timestamp);\n timestamp = account.timestamp;\n\n assert.strictEqual(account.code, filter.code);\n }\n }\n\n {\n // Querying accounts where:\n // `code=999 ORDER BY timestamp DESC LIMIT 5`.\n const filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 5,\n flags: QueryFilterFlags.reversed,\n }\n\n // First 5 items:\n let query: Account[] = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 5)\n\n let timestamp = 1n << 64n;\n for (const account of query) {\n assert.ok(timestamp > account.timestamp);\n timestamp = account.timestamp;\n\n assert.strictEqual(account.code, filter.code);\n }\n\n // Next 5 items:\n filter.timestamp_max = timestamp - 1n\n query = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 5)\n\n for (const account of query) {\n assert.ok(timestamp > account.timestamp);\n timestamp = account.timestamp;\n\n assert.strictEqual(account.code, filter.code);\n }\n\n // No more results:\n filter.timestamp_max = timestamp - 1n\n query = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 0)\n }\n\n {\n // Not found:\n const filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 200n,\n user_data_32: 10,\n ledger: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n const query: Account[] = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 0)\n }\n})\n\ntest('can query transfers', async (): Promise<void> => {\n {\n const account: Account = {\n id: id(),\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: AccountFlags.none,\n timestamp: 0n\n }\n const account_results = await client.createAccounts([account])\n assert.deepStrictEqual(account_results.length, 1)\n assert.ok(account_results[0].timestamp > 0)\n assert.deepStrictEqual(account_results[0].status, CreateAccountStatus.created)\n\n const transfers_created : Transfer[] = [];\n // Create transfers:\n for (let i=0; i<10;i++) {\n transfers_created.push({\n id: id(),\n debit_account_id: i % 2 == 0 ? account.id : accountA.id,\n credit_account_id: i % 2 == 0 ? accountB.id : account.id,\n amount: 100n,\n user_data_128: i % 2 == 0 ? 1000n : 2000n,\n user_data_64: i % 2 == 0 ? 100n : 200n,\n user_data_32: i % 2 == 0 ? 10 : 20,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 999,\n flags: 0,\n timestamp: 0n,\n })\n }\n\n const transfers_results = await client.createTransfers(transfers_created)\n assert.deepStrictEqual(transfers_results.length, transfers_created.length)\n for (const result of transfers_results) {\n assert.ok(result.timestamp > 0)\n assert.deepStrictEqual(result.status, CreateTransferStatus.created)\n }\n }\n\n {\n // Querying transfers where:\n // `user_data_128=1000 AND user_data_64=100 AND user_data_32=10\n // AND code=999 AND ledger=1 ORDER BY timestamp ASC`.\n const filter: QueryFilter = {\n user_data_128: 1000n,\n user_data_64: 100n,\n user_data_32: 10,\n ledger: 1,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n const query: Transfer[] = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 5)\n\n let timestamp = 0n;\n for (const transfer of query) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.strictEqual(transfer.user_data_128, filter.user_data_128);\n assert.strictEqual(transfer.user_data_64, filter.user_data_64);\n assert.strictEqual(transfer.user_data_32, filter.user_data_32);\n assert.strictEqual(transfer.ledger, filter.ledger);\n assert.strictEqual(transfer.code, filter.code);\n }\n }\n\n {\n // Querying transfers where:\n // `user_data_128=2000 AND user_data_64=200 AND user_data_32=20\n // AND code=999 AND ledger=1 ORDER BY timestamp DESC`.\n const filter: QueryFilter = {\n user_data_128: 2000n,\n user_data_64: 200n,\n user_data_32: 20,\n ledger: 1,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.reversed,\n }\n const query: Transfer[] = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 5)\n\n let timestamp = 1n << 64n;\n for (const transfer of query) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.strictEqual(transfer.user_data_128, filter.user_data_128);\n assert.strictEqual(transfer.user_data_64, filter.user_data_64);\n assert.strictEqual(transfer.user_data_32, filter.user_data_32);\n assert.strictEqual(transfer.ledger, filter.ledger);\n assert.strictEqual(transfer.code, filter.code);\n }\n }\n\n {\n // Querying transfers where:\n // `code=999 ORDER BY timestamp ASC`\n const filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n const query: Transfer[] = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 10)\n\n let timestamp = 0n;\n for (const transfer of query) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.strictEqual(transfer.code, filter.code);\n }\n }\n\n {\n // Querying transfers where:\n // `code=999 ORDER BY timestamp DESC LIMIT 5`.\n const filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 5,\n flags: QueryFilterFlags.reversed,\n }\n\n // First 5 items:\n let query: Transfer[] = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 5)\n\n let timestamp = 1n << 64n;\n for (const transfer of query) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.strictEqual(transfer.code, filter.code);\n }\n\n // Next 5 items:\n filter.timestamp_max = timestamp - 1n\n query = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 5)\n\n for (const transfer of query) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.strictEqual(transfer.code, filter.code);\n }\n\n // No more results:\n filter.timestamp_max = timestamp - 1n\n query = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 0)\n }\n\n {\n // Not found:\n const filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 200n,\n user_data_32: 10,\n ledger: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n const query: Transfer[] = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 0)\n }\n})\n\ntest('query with invalid filter', async (): Promise<void> => {\n // Invalid timestamp min:\n var filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 0,\n timestamp_min: (1n << 64n) - 1n, // ulong max value\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n assert.deepStrictEqual((await client.queryAccounts(filter)), [])\n assert.deepStrictEqual((await client.queryTransfers(filter)), [])\n\n // Invalid timestamp max:\n filter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: (1n << 64n) - 1n, // ulong max value,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n assert.deepStrictEqual((await client.queryAccounts(filter)), [])\n assert.deepStrictEqual((await client.queryTransfers(filter)), [])\n\n // Invalid timestamp range:\n filter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 0,\n timestamp_min: (1n << 64n) - 2n, // ulong max - 1\n timestamp_max: 1n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n assert.deepStrictEqual((await client.queryAccounts(filter)), [])\n assert.deepStrictEqual((await client.queryTransfers(filter)), [])\n\n // Zero limit:\n filter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 0,\n flags: QueryFilterFlags.none,\n }\n assert.deepStrictEqual((await client.queryAccounts(filter)), [])\n assert.deepStrictEqual((await client.queryTransfers(filter)), [])\n\n // TooMuchData\n filter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 10_000,\n flags: QueryFilterFlags.none,\n }\n assert.rejects(async() => await client.queryAccounts(filter), (err) => {\n assert.ok(err instanceof RequestError)\n assert.strictEqual(err.code, ErrorCodes.ERR_TOO_MUCH_DATA)\n return true\n })\n assert.rejects(async() => await client.queryTransfers(filter), (err) => {\n assert.ok(err instanceof RequestError)\n assert.strictEqual(err.code, ErrorCodes.ERR_TOO_MUCH_DATA)\n return true\n })\n\n // Invalid flags:\n filter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 0,\n flags: 0xFFFF,\n }\n assert.deepStrictEqual((await client.queryAccounts(filter)), [])\n assert.deepStrictEqual((await client.queryTransfers(filter)), [])\n})\n\ntest('can import accounts and transfers', async (): Promise<void> => {\n const accountTmp: Account = {\n id: id(),\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: 0,\n timestamp: 0n // this will be set correctly by the TigerBeetle server\n }\n let account_results = await client.createAccounts([accountTmp])\n assert.deepStrictEqual(account_results.length, 1)\n assert.ok(account_results[0].timestamp > 0)\n assert.deepStrictEqual(account_results[0].status, CreateAccountStatus.created)\n\n let accountLookup = await client.lookupAccounts([accountTmp.id])\n assert.strictEqual(accountLookup.length, 1)\n const timestampMax = accountLookup[0].timestamp\n\n // Wait 10 ms so we can use the account's timestamp as the reference for past time\n // after the last object inserted.\n await sleep_ms(10);\n\n const accountA: Account = {\n id: id(),\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: AccountFlags.imported,\n timestamp: timestampMax + 1n // user-defined timestamp\n }\n const accountB: Account = {\n id: id(),\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: AccountFlags.imported,\n timestamp: timestampMax + 2n // user-defined timestamp\n }\n account_results = await client.createAccounts([accountA, accountB])\n assert.deepStrictEqual(account_results.length, 2)\n assert.ok(account_results[0].timestamp > 0)\n assert.deepStrictEqual(account_results[0].status, CreateAccountStatus.created)\n assert.ok(account_results[1].timestamp > 0)\n assert.deepStrictEqual(account_results[1].status, CreateAccountStatus.created)\n\n accountLookup = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accountLookup.length, 2)\n assert.strictEqual(accountLookup[0].timestamp, accountA.timestamp)\n assert.strictEqual(accountLookup[1].timestamp, accountB.timestamp)\n\n const transfer: Transfer = {\n id: id(),\n debit_account_id: accountA.id,\n credit_account_id: accountB.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.imported,\n timestamp: timestampMax + 3n, // user-defined timestamp.\n }\n\n const transfers_results = await client.createTransfers([transfer])\n assert.deepStrictEqual(transfers_results.length, 1)\n assert.ok(transfers_results[0].timestamp > 0)\n assert.deepStrictEqual(transfers_results[0].status, CreateTransferStatus.created)\n\n const transfers = await client.lookupTransfers([transfer.id])\n assert.strictEqual(transfers.length, 1)\n assert.strictEqual(transfers[0].timestamp, timestampMax + 3n)\n})\n\ntest('accept zero-length create_accounts', async (): Promise<void> => {\n const account_results = await client.createAccounts([])\n assert.deepStrictEqual(account_results.length, 0)\n})\n\ntest('accept zero-length create_transfers', async (): Promise<void> => {\n const transfers_results = await client.createTransfers([])\n assert.deepStrictEqual(transfers_results.length, 0)\n})\n\ntest('accept zero-length lookup_accounts', async (): Promise<void> => {\n const accounts = await client.lookupAccounts([])\n assert.deepStrictEqual(accounts, [])\n})\n\ntest('accept zero-length lookup_transfers', async (): Promise<void> => {\n const transfers = await client.lookupTransfers([])\n assert.deepStrictEqual(transfers, [])\n})\n\ntest(\"destroy client in-flight\", async (): Promise<void> => {\n const client_count = 5;\n const action_count = 50;\n\n const clients = range(client_count).map(() =>\n createClient({\n cluster_id: 0n,\n replica_addresses: REPLICA_ADDRESSES,\n })\n );\n\n const ids: Array<bigint> = [];\n const actions = range(action_count).map(() => async () => {\n await sleep_ms(Math.random() < 0.2 ? 0 : Math.random());\n const client = clients[random_index(clients)];\n if (Math.random() < 0.1) {\n client.destroy();\n return;\n }\n if (Math.random() < 0.7) {\n const id_new = id();\n ids.push(id_new);\n try {\n await client.createAccounts([{ ...accountA, id: id_new }]);\n } catch (err) {\n assert.ok(err instanceof RequestError);\n assert.strictEqual(err.code, ErrorCodes.ERR_CLIENT_CLOSED);\n }\n return;\n }\n try {\n const id_lookup = (Math.random() < 0.2 || ids.length == 0)\n ? BigInt(Math.floor(Math.random() * 10000))\n : ids[random_index(ids)];\n await client.lookupAccounts([id_lookup]);\n } catch (err) {\n assert.ok(err instanceof RequestError);\n assert.strictEqual(err.code, ErrorCodes.ERR_CLIENT_CLOSED);\n }\n });\n\n await Promise.all(actions.map((f) => f()));\n for (const client of clients) client.destroy();\n});\n\nasync function main () {\n const start = new Date().getTime()\n try {\n for (let i = 0; i < tests.length; i++) {\n await tests[i].fn().then(() => {\n console.log(tests[i].name + \": PASSED\")\n }).catch(error => {\n console.log(tests[i].name + \": FAILED\")\n throw error\n })\n }\n const end = new Date().getTime()\n console.log('Time taken (s):', (end - start)/1000)\n } finally {\n await client.destroy()\n }\n}\n\nmain().catch((error: AssertionError) => {\n console.log('operator:', error.operator)\n console.log('stack:', error.stack)\n process.exit(-1);\n})\n"]}
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":";;;;;AAAA,oDAA+C;AAC/C,wBAgBU;AAEV,KAAK,UAAU,QAAQ,CAAC,EAAU;IAChC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AACvD,CAAC;AAED,SAAS,KAAK,CAAC,CAAS;IACtB,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,YAAY,CAAC,KAAiB;IACrC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,iBAAiB,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,MAAM,CAAC,CAAC;AAC7D,MAAM,MAAM,GAAG,IAAA,eAAY,EAAC;IAC1B,UAAU,EAAE,EAAE;IACd,iBAAiB,EAAE,iBAAiB;CACrC,CAAC,CAAA;AAGF,MAAM,QAAQ,GAAY;IACxB,EAAE,EAAE,GAAG;IACP,cAAc,EAAE,EAAE;IAClB,aAAa,EAAE,EAAE;IACjB,eAAe,EAAE,EAAE;IACnB,cAAc,EAAE,EAAE;IAClB,aAAa,EAAE,EAAE;IACjB,YAAY,EAAE,EAAE;IAChB,YAAY,EAAE,CAAC;IACf,QAAQ,EAAE,CAAC;IACX,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,GAAG;IACT,KAAK,EAAE,CAAC;IACR,SAAS,EAAE,EAAE;CACd,CAAA;AACD,MAAM,QAAQ,GAAY;IACxB,EAAE,EAAE,GAAG;IACP,cAAc,EAAE,EAAE;IAClB,aAAa,EAAE,EAAE;IACjB,eAAe,EAAE,EAAE;IACnB,cAAc,EAAE,EAAE;IAClB,aAAa,EAAE,EAAE;IACjB,YAAY,EAAE,EAAE;IAChB,YAAY,EAAE,CAAC;IACf,QAAQ,EAAE,CAAC;IACX,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,GAAG;IACT,KAAK,EAAE,CAAC;IACR,SAAS,EAAE,EAAE;CACd,CAAA;AAED,MAAM,SAAS,GAAG,IAAI,CAAC;AAEvB,MAAM,KAAK,GAAqD,EAAE,CAAA;AAClE,SAAS,IAAI,CAAC,IAAY,EAAE,EAAuB;IACjD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;AAC1B,CAAC;AACD,IAAI,CAAC,IAAI,GAAG,CAAC,IAAY,EAAE,EAAuB,EAAE,EAAE;IACpD,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,WAAW,CAAC,CAAA;AACjC,CAAC,CAAA;AAED,IAAI,CAAC,oCAAoC,EAAE,KAAK,IAAmB,EAAE;IACnE,MAAM,QAAQ,GAAa;QACvB,EAAE,EAAE,yCAAyC;QAC7C,gBAAgB,EAAE,EAAE;QACpB,iBAAiB,EAAE,EAAE;QACrB,MAAM,EAAE,EAAE;QACV,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,EAAE;KAChB,CAAC;IAEF,gBAAM,CAAC,OAAO,CAAC,KAAK,IAAG,EAAE,CAAC,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;QAC1E,gBAAM,CAAC,EAAE,CAAC,GAAG,YAAY,KAAK,CAAC,CAAA;QAC/B,gBAAM,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAA;QAC1D,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,gCAAgC,EAAE,KAAK,IAAmB,EAAE;IAC/D,MAAM,QAAQ,GAAa;QACvB,EAAE,EAAE,CAAC,EAAE;QACP,gBAAgB,EAAE,EAAE;QACpB,iBAAiB,EAAE,EAAE;QACrB,MAAM,EAAE,EAAE;QACV,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,EAAE;KAChB,CAAC;IAEF,gBAAM,CAAC,OAAO,CAAC,KAAK,IAAG,EAAE,CAAC,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;QAC1E,gBAAM,CAAC,EAAE,CAAC,GAAG,YAAY,KAAK,CAAC,CAAA;QAC/B,gBAAM,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAA;QACtD,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAGF,IAAI,CAAC,+BAA+B,EAAE,KAAK,IAAmB,EAAE;IAC9D,IAAI,GAAG,GAAG,IAAA,KAAE,GAAE,CAAC;IACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QAEpC,IAAI,CAAC,GAAG,KAAM,IAAI,CAAC,EAAE,CAAC;YACpB,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAA;QACnB,CAAC;QAED,MAAM,GAAG,GAAG,IAAA,KAAE,GAAE,CAAC;QACjB,gBAAM,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,yDAAyD,CAAC,CAAC;QAChF,GAAG,GAAG,GAAG,CAAC;IACZ,CAAC;AACH,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,yCAAyC,EAAE,KAAK,IAAmB,EAAE;IACxE,MAAM,OAAO,GAAG,EAAE,GAAG,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,CAAA;IAEvC,OAAO,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,CAAA;IACxB,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;IAC9E,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAA;IAE5D,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;IAC1D,gBAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;AACtC,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,qBAAqB,EAAE,KAAK,IAAmB,EAAE;IACpD,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC/D,gBAAM,CAAC,eAAe,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACjD,gBAAM,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IAC3C,gBAAM,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,sBAAmB,CAAC,OAAO,CAAC,CAAA;AAChF,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,6BAA6B,EAAE,KAAK,IAAmB,EAAE;IAC5D,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAA;IACzE,gBAAM,CAAC,eAAe,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACjD,gBAAM,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IAC3C,gBAAM,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,sBAAmB,CAAC,MAAM,CAAC,CAAA;IAC7E,gBAAM,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IAC3C,gBAAM,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,sBAAmB,CAAC,OAAO,CAAC,CAAA;AAChF,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,gDAAgD,EAAE,KAAK,IAAmB,EAAE;IAC/E,MAAM,OAAO,GAAG,EAAE,GAAG,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAA;IACtD,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;IAC9D,gBAAM,CAAC,eAAe,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACjD,gBAAM,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IAC3C,gBAAM,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,sBAAmB,CAAC,sBAAsB,CAAC,CAAA;AAC/F,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,gBAAgB,EAAE,KAAK,IAAmB,EAAE;IAC/C,MAAM,UAAU,GAAG,KAAM,CAAC;IAC1B,MAAM,SAAS,GAAe,EAAE,CAAC;IACjC,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,UAAU,EAAC,CAAC,EAAE,EAAE,CAAC;QAC/B,SAAS,CAAC,IAAI,CAAC;YACb,EAAE,EAAE,EAAE;YACN,gBAAgB,EAAE,EAAE;YACpB,iBAAiB,EAAE,EAAE;YACrB,MAAM,EAAE,EAAE;YACV,aAAa,EAAE,EAAE;YACjB,YAAY,EAAE,EAAE;YAChB,YAAY,EAAE,CAAC;YACf,UAAU,EAAE,EAAE;YACd,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,CAAC;YACR,SAAS,EAAE,EAAE;SACd,CAAC,CAAC;IACL,CAAC;IACD,gBAAM,CAAC,OAAO,CAAC,KAAK,IAAG,EAAE,CAAC,MAAM,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;QACzE,gBAAM,CAAC,EAAE,CAAC,GAAG,YAAY,eAAY,CAAC,CAAA;QACtC,gBAAM,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAG,aAAU,CAAC,iBAAiB,CAAC,CAAA;QAC3D,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,oBAAoB,EAAE,KAAK,IAAmB,EAAE;IACnD,MAAM,SAAS,GAAe,EAAE,CAAC;IACjC,SAAS,CAAC,MAAM,GAAG,UAAU,CAAC;IAE9B,gBAAM,CAAC,OAAO,CAAC,KAAK,IAAG,EAAE,CAAC,MAAM,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;QACzE,gBAAM,CAAC,EAAE,CAAC,GAAG,YAAY,eAAY,CAAC,CAAA;QACtC,gBAAM,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAG,aAAU,CAAC,iBAAiB,CAAC,CAAA;QAC3D,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,qBAAqB,EAAE,KAAK,IAAmB,EAAE;IACpD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IAExE,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtC,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC5B,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;IACpC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAC/C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IAChD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IAC9C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAC/C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IAC9C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;IAC7C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAA;IAC5C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACtC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IACrC,gBAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,GAAG,EAAE,CAAC,CAAA;IAElC,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC5B,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;IACpC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAC/C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IAChD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IAC9C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAC/C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IAC9C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;IAC7C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAA;IAC5C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACtC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IACrC,gBAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,GAAG,EAAE,CAAC,CAAA;AACpC,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,uBAAuB,EAAE,KAAK,IAAmB,EAAE;IACtD,MAAM,QAAQ,GAAa;QACzB,EAAE,EAAE,EAAE;QACN,gBAAgB,EAAE,QAAQ,CAAC,EAAE;QAC7B,iBAAiB,EAAE,QAAQ,CAAC,EAAE;QAC9B,MAAM,EAAE,IAAI;QACZ,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,EAAE;KACd,CAAA;IAED,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;IAClE,gBAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACnD,gBAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IAC7C,gBAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,uBAAoB,CAAC,OAAO,CAAC,CAAA;IAEjF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IACxE,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;IACpD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IACjD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAElD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAClD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;AACpD,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,iCAAiC,EAAE,KAAK,IAAmB,EAAE;IAChE,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,KAAK,IAAI,gBAAa,CAAC,OAAO,CAAA;IAC9B,MAAM,QAAQ,GAAa;QACzB,EAAE,EAAE,EAAE;QACN,gBAAgB,EAAE,QAAQ,CAAC,EAAE;QAC7B,iBAAiB,EAAE,QAAQ,CAAC,EAAE;QAC9B,MAAM,EAAE,GAAG;QACX,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,GAAG;QACZ,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK;QACL,SAAS,EAAE,EAAE;KACd,CAAA;IAED,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;IAClE,gBAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACnD,gBAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IAC7C,gBAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,uBAAoB,CAAC,OAAO,CAAC,CAAA;IAEjF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IACxE,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;IACpD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,GAAG,CAAC,CAAA;IACpD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IACjD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAElD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAClD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,GAAG,CAAC,CAAA;IAGnD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IAC7D,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACvC,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;IACvC,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC9D,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC/D,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC5C,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IAClD,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;IACjD,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAA;IAChD,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,CAAA;IAClD,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IACxC,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IACzC,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC,CAAA;AACtD,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,+BAA+B,EAAE,KAAK,IAAmB,EAAE;IAC9D,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,KAAK,IAAI,gBAAa,CAAC,qBAAqB,CAAA;IAE5C,MAAM,MAAM,GAAa;QACvB,EAAE,EAAE,EAAE;QACN,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;QAC3B,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5B,MAAM,EAAE,aAAU;QAClB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,EAAE;KACd,CAAA;IAED,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;IAChE,gBAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACnD,gBAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IAC7C,gBAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,uBAAoB,CAAC,OAAO,CAAC,CAAA;IAEjF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IACxE,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;IACpD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IACjD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAElD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAClD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;AACpD,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,iCAAiC,EAAE,KAAK,IAAmB,EAAE;IAEhE,MAAM,QAAQ,GAAa;QACzB,EAAE,EAAE,EAAE;QACN,gBAAgB,EAAE,QAAQ,CAAC,EAAE;QAC7B,iBAAiB,EAAE,QAAQ,CAAC,EAAE;QAC9B,MAAM,EAAE,GAAG;QACX,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,GAAG;QACZ,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,gBAAa,CAAC,OAAO;QAC5B,SAAS,EAAE,EAAE;KACd,CAAA;IACD,IAAI,iBAAiB,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;IAChE,gBAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACnD,gBAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IAC7C,gBAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,uBAAoB,CAAC,OAAO,CAAC,CAAA;IAGjF,MAAM,MAAM,GAAa;QACvB,EAAE,EAAE,EAAE;QACN,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;QAC3B,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5B,MAAM,EAAE,EAAE;QACV,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,gBAAa,CAAC,qBAAqB;QAC1C,SAAS,EAAE,EAAE;KACd,CAAA;IAED,iBAAiB,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;IAC1D,gBAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACnD,gBAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IAC7C,gBAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,uBAAoB,CAAC,OAAO,CAAC,CAAA;IAEjF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IACxE,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;IACpD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IACjD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAElD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAClD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;AACpD,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,oBAAoB,EAAE,KAAK,IAAmB,EAAE;IACnD,MAAM,SAAS,GAAa;QAC1B,EAAE,EAAE,EAAE;QACN,gBAAgB,EAAE,QAAQ,CAAC,EAAE;QAC7B,iBAAiB,EAAE,QAAQ,CAAC,EAAE;QAC9B,MAAM,EAAE,IAAI;QACZ,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,gBAAa,CAAC,MAAM;QAC3B,SAAS,EAAE,EAAE;KACd,CAAA;IACD,MAAM,SAAS,GAAa;QAC1B,EAAE,EAAE,EAAE;QACN,gBAAgB,EAAE,QAAQ,CAAC,EAAE;QAC7B,iBAAiB,EAAE,QAAQ,CAAC,EAAE;QAC9B,MAAM,EAAE,IAAI;QACZ,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QAGP,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,EAAE;KACd,CAAA;IAED,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAA;IAC9E,gBAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACnD,gBAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IAC7C,gBAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,uBAAoB,CAAC,mBAAmB,CAAC,CAAA;IAC7F,gBAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IAC7C,gBAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,uBAAoB,CAAC,2BAA2B,CAAC,CAAA;IAErG,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IACxE,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;IACpD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IACjD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAElD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAClD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;AACpD,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,iCAAiC,EAAE,KAAK,IAAmB,EAAE;IAEhE,MAAM,QAAQ,GAAa;QACzB,EAAE,EAAE,EAAE;QACN,gBAAgB,EAAE,QAAQ,CAAC,EAAE;QAC7B,iBAAiB,EAAE,QAAQ,CAAC,EAAE;QAC9B,MAAM,EAAE,GAAG;QACX,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,gBAAa,CAAC,OAAO;QAC5B,SAAS,EAAE,EAAE;KACd,CAAA;IACD,IAAI,iBAAiB,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;IAChE,gBAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACnD,gBAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IAC7C,gBAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,uBAAoB,CAAC,OAAO,CAAC,CAAA;IAEjF,IAAI,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IACtE,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;IACpD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,GAAG,CAAC,CAAA;IACpD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IACjD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAElD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAClD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,GAAG,CAAC,CAAA;IAKnD,MAAM,eAAe,GAAG,GAAG,CAAC;IAC5B,MAAM,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC;IAG5D,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IAClE,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;IACpD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IACjD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAElD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAClD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAGlD,MAAM,MAAM,GAAa;QACvB,EAAE,EAAE,EAAE;QACN,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;QAC3B,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5B,MAAM,EAAE,EAAE;QACV,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,gBAAa,CAAC,qBAAqB;QAC1C,SAAS,EAAE,EAAE;KACd,CAAA;IAED,iBAAiB,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;IAC1D,gBAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACnD,gBAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IAC7C,gBAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,uBAAoB,CAAC,wBAAwB,CAAC,CAAA;AACpG,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,oBAAoB,EAAE,KAAK,IAAmB,EAAE;IACnD,MAAM,gBAAgB,GAAa;QACjC,EAAE,EAAE,IAAA,KAAE,GAAE;QACR,gBAAgB,EAAE,QAAQ,CAAC,EAAE;QAC7B,iBAAiB,EAAE,QAAQ,CAAC,EAAE;QAC9B,MAAM,EAAE,EAAE;QACV,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,gBAAa,CAAC,aAAa,GAAG,gBAAa,CAAC,cAAc,GAAG,gBAAa,CAAC,OAAO;QACzF,SAAS,EAAE,EAAE;KACd,CAAA;IACD,IAAI,iBAAiB,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAA;IACxE,gBAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACnD,gBAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IAC7C,gBAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,uBAAoB,CAAC,OAAO,CAAC,CAAA;IAEjF,IAAI,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IACtE,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtC,gBAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IAC9C,gBAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,eAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;IAEzD,gBAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IAC9C,gBAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,eAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;IAEzD,MAAM,gBAAgB,GAAa;QACjC,EAAE,EAAE,IAAA,KAAE,GAAE;QACR,gBAAgB,EAAE,QAAQ,CAAC,EAAE;QAC7B,iBAAiB,EAAE,QAAQ,CAAC,EAAE;QAC9B,MAAM,EAAE,EAAE;QACV,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,gBAAa,CAAC,qBAAqB;QAC1C,UAAU,EAAE,gBAAgB,CAAC,EAAE;QAC/B,SAAS,EAAE,EAAE;KACd,CAAA;IAED,iBAAiB,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAA;IACpE,gBAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACnD,gBAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IAC7C,gBAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,uBAAoB,CAAC,OAAO,CAAC,CAAA;IAEjF,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IAClE,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IACrD,gBAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,eAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;IAEzD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IACrD,gBAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,eAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;AAC3D,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,2BAA2B,EAAE,KAAK,IAAmB,EAAE;IAC1D,MAAM,QAAQ,GAAY;QACxB,EAAE,EAAE,GAAG;QACP,cAAc,EAAE,EAAE;QAClB,aAAa,EAAE,EAAE;QACjB,eAAe,EAAE,EAAE;QACnB,cAAc,EAAE,EAAE;QAClB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,GAAG;QACT,KAAK,EAAE,eAAY,CAAC,OAAO;QAC3B,SAAS,EAAE,EAAE;KACd,CAAA;IACD,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC/D,gBAAM,CAAC,eAAe,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACjD,gBAAM,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IAC3C,gBAAM,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,sBAAmB,CAAC,OAAO,CAAC,CAAA;IAE9E,MAAM,iBAAiB,GAAgB,EAAE,CAAC;IAE1C,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,EAAE,EAAC,CAAC,EAAE,EAAE,CAAC;QACvB,iBAAiB,CAAC,IAAI,CAAC;YACrB,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC;YACrB,gBAAgB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;YACxD,iBAAiB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;YACzD,MAAM,EAAE,IAAI;YACZ,aAAa,EAAE,EAAE;YACjB,YAAY,EAAE,EAAE;YAChB,YAAY,EAAE,CAAC;YACf,UAAU,EAAE,EAAE;YACd,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,CAAC;YACR,SAAS,EAAE,EAAE;SACd,CAAC,CAAC;IACL,CAAC;IAED,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAA;IACzE,gBAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAC1E,KAAK,MAAM,MAAM,IAAI,iBAAiB,EAAE,CAAC;QACvC,gBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;QAC/B,gBAAM,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,uBAAoB,CAAC,OAAO,CAAC,CAAA;IACrE,CAAC;IAGD,IAAI,MAAM,GAAkB;QAC1B,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM;KAC9D,CAAA;IACD,IAAI,SAAS,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACxD,IAAI,gBAAgB,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAC9D,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAC9D,gBAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAE7D,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC1C,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QAE/B,gBAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC/D,CAAC,EAAE,CAAC;IACN,CAAC;IAGD,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,qBAAkB,CAAC,MAAM,GAAI,qBAAkB,CAAC,QAAQ;KAChE,CAAA;IACD,SAAS,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACpD,gBAAgB,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAE1D,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAClE,gBAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAE7D,SAAS,GAAG,EAAE,IAAI,GAAG,CAAC;IACtB,CAAC,GAAG,CAAC,CAAC;IACN,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,gBAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;QAC1C,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QAE/B,gBAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC/D,CAAC,EAAE,CAAC;IACN,CAAC;IAGD,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAI,qBAAkB,CAAC,QAAQ;KACjE,CAAA;IACD,SAAS,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACpD,gBAAgB,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAE1D,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAClE,gBAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAE7D,SAAS,GAAG,EAAE,IAAI,GAAG,CAAC;IACtB,CAAC,GAAG,CAAC,CAAC;IACN,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,gBAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;QAC1C,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QAE/B,gBAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC/D,CAAC,EAAE,CAAC;IACN,CAAC;IAGD,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC;QACnC,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM;KAC9D,CAAA;IACD,SAAS,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACpD,gBAAgB,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAE1D,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAClE,gBAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAE7D,SAAS,GAAG,EAAE,CAAC;IACf,CAAC,GAAG,CAAC,CAAC;IACN,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC1C,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QAE/B,gBAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC/D,CAAC,EAAE,CAAC;IACN,CAAC;IAGD,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,SAAS,GAAG,EAAE;QAC7B,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC;QACnC,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM;KAC9D,CAAA;IACD,SAAS,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACpD,gBAAgB,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAE1D,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAClE,gBAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAE7D,CAAC,GAAG,CAAC,CAAC;IACN,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC1C,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QAE/B,gBAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC/D,CAAC,EAAE,CAAC;IACN,CAAC;IAGD,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,SAAS,GAAG,EAAE;QAC7B,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC;QACnC,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM;KAC9D,CAAA;IACD,SAAS,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACpD,gBAAgB,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAE1D,gBAAM,CAAC,eAAe,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;IACrC,gBAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAG7D,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC;QACnC,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM,GAAG,qBAAkB,CAAC,QAAQ;KAC5F,CAAA;IACD,SAAS,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACpD,gBAAgB,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAE1D,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAClE,gBAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAE7D,SAAS,GAAG,EAAE,IAAI,GAAG,CAAC;IACtB,CAAC,GAAG,CAAC,CAAC;IACN,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC1C,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QAE/B,gBAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC/D,CAAC,EAAE,CAAC;IACN,CAAC;IAGD,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,SAAS,GAAG,EAAE;QAC7B,KAAK,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC;QACnC,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM,GAAG,qBAAkB,CAAC,QAAQ;KAC5F,CAAA;IACD,SAAS,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACpD,gBAAgB,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAE1D,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAClE,gBAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAE7D,CAAC,GAAG,CAAC,CAAC;IACN,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC1C,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QAE/B,gBAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC/D,CAAC,EAAE,CAAC;IACN,CAAC;IAGD,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,SAAS,GAAG,EAAE;QAC7B,KAAK,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC;QACnC,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM,GAAG,qBAAkB,CAAC,QAAQ;KAC5F,CAAA;IACD,SAAS,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACpD,gBAAgB,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAE1D,gBAAM,CAAC,eAAe,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;IACrC,gBAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAG7D,MAAM,GAAG;QACP,UAAU,EAAE,EAAE;QACd,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM;KAC9D,CAAA;IACD,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACtE,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAGrE,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,EAAE;QAC/B,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM;KAC9D,CAAA;IACD,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACtE,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAGrE,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,EAAE;QAC/B,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM;KAC9D,CAAA;IACD,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACtE,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAGrE,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,EAAE;QAC/B,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM;KAC9D,CAAA;IACD,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACtE,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAGrE,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM;KAC9D,CAAA;IACD,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACtE,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAGrE,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,KAAM;QACb,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM;KAC9D,CAAA;IACD,gBAAM,CAAC,OAAO,CAAC,KAAK,IAAG,EAAE,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;QAC1E,gBAAM,CAAC,EAAE,CAAC,GAAG,YAAY,eAAY,CAAC,CAAA;QACtC,gBAAM,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAG,aAAU,CAAC,iBAAiB,CAAC,CAAA;QAC3D,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CAAA;IACF,gBAAM,CAAC,OAAO,CAAC,KAAK,IAAG,EAAE,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;QACzE,gBAAM,CAAC,EAAE,CAAC,GAAG,YAAY,eAAY,CAAC,CAAA;QACtC,gBAAM,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAG,aAAU,CAAC,iBAAiB,CAAC,CAAA;QAC3D,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CAAA;IAGF,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,qBAAkB,CAAC,IAAI;KAC/B,CAAA;IACD,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACtE,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAGrE,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,MAAM;KACd,CAAA;IACD,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IACtE,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AAEvE,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,oBAAoB,EAAE,KAAK,IAAmB,EAAE;IACnD,CAAC;QACC,MAAM,QAAQ,GAAe,EAAE,CAAC;QAEhC,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,EAAE,EAAC,CAAC,EAAE,EAAE,CAAC;YACvB,QAAQ,CAAC,IAAI,CAAC;gBACZ,EAAE,EAAE,IAAA,KAAE,GAAE;gBACR,cAAc,EAAE,EAAE;gBAClB,aAAa,EAAE,EAAE;gBACjB,eAAe,EAAE,EAAE;gBACnB,cAAc,EAAE,EAAE;gBAClB,aAAa,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;gBACzC,YAAY,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;gBACtC,YAAY,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;gBAClC,MAAM,EAAE,CAAC;gBACT,IAAI,EAAE,GAAG;gBACT,KAAK,EAAE,eAAY,CAAC,IAAI;gBACxB,QAAQ,EAAE,CAAC;gBACX,SAAS,EAAE,EAAE;aACd,CAAC,CAAA;QACJ,CAAC;QAED,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;QAC7D,gBAAM,CAAC,eAAe,CAAC,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;QAC/D,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;YACrC,gBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;YAC/B,gBAAM,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,sBAAmB,CAAC,OAAO,CAAC,CAAA;QACpE,CAAC;IACH,CAAC;IAED,CAAC;QAIC,MAAM,MAAM,GAAgB;YAC1B,aAAa,EAAE,KAAK;YACpB,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,EAAE;YAChB,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,EAAE;YACjB,aAAa,EAAE,EAAE;YACjB,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,mBAAgB,CAAC,IAAI;SAC7B,CAAA;QACD,MAAM,KAAK,GAAc,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QAC3D,gBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QAEnC,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;YAC5B,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;YACzC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YAE9B,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;YAChE,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YAC9D,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YAC9D,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAClD,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,CAAC;QAIC,MAAM,MAAM,GAAgB;YAC1B,aAAa,EAAE,KAAK;YACpB,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,EAAE;YAChB,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,EAAE;YACjB,aAAa,EAAE,EAAE;YACjB,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,mBAAgB,CAAC,QAAQ;SACjC,CAAA;QACD,MAAM,KAAK,GAAc,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QAC3D,gBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QAEnC,IAAI,SAAS,GAAG,EAAE,IAAI,GAAG,CAAC;QAC1B,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;YAC5B,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;YACzC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YAE9B,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;YAChE,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YAC9D,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YAC9D,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAClD,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,CAAC;QAGC,MAAM,MAAM,GAAgB;YAC1B,aAAa,EAAE,EAAE;YACjB,YAAY,EAAE,EAAE;YAChB,YAAY,EAAE,CAAC;YACf,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,EAAE;YACjB,aAAa,EAAE,EAAE;YACjB,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,mBAAgB,CAAC,IAAI;SAC7B,CAAA;QACD,MAAM,KAAK,GAAc,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QAC3D,gBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;QAEpC,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;YAC5B,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;YACzC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YAE9B,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,CAAC;QAGC,MAAM,MAAM,GAAgB;YAC1B,aAAa,EAAE,EAAE;YACjB,YAAY,EAAE,EAAE;YAChB,YAAY,EAAE,CAAC;YACf,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,EAAE;YACjB,aAAa,EAAE,EAAE;YACjB,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,mBAAgB,CAAC,QAAQ;SACjC,CAAA;QAGD,IAAI,KAAK,GAAc,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QACzD,gBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QAEnC,IAAI,SAAS,GAAG,EAAE,IAAI,GAAG,CAAC;QAC1B,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;YAC5B,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;YACzC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YAE9B,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC;QAGD,MAAM,CAAC,aAAa,GAAG,SAAS,GAAG,EAAE,CAAA;QACrC,KAAK,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QAC1C,gBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QAEnC,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;YAC5B,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;YACzC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YAE9B,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC;QAGD,MAAM,CAAC,aAAa,GAAG,SAAS,GAAG,EAAE,CAAA;QACrC,KAAK,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QAC1C,gBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACrC,CAAC;IAED,CAAC;QAEC,MAAM,MAAM,GAAgB;YAC1B,aAAa,EAAE,EAAE;YACjB,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,EAAE;YAChB,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,CAAC;YACP,aAAa,EAAE,EAAE;YACjB,aAAa,EAAE,EAAE;YACjB,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,mBAAgB,CAAC,IAAI;SAC7B,CAAA;QACD,MAAM,KAAK,GAAc,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QAC3D,gBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACrC,CAAC;AACH,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,qBAAqB,EAAE,KAAK,IAAmB,EAAE;IACpD,CAAC;QACC,MAAM,OAAO,GAAY;YACvB,EAAE,EAAE,IAAA,KAAE,GAAE;YACR,cAAc,EAAE,EAAE;YAClB,aAAa,EAAE,EAAE;YACjB,eAAe,EAAE,EAAE;YACnB,cAAc,EAAE,EAAE;YAClB,aAAa,EAAE,EAAE;YACjB,YAAY,EAAE,EAAE;YAChB,YAAY,EAAE,CAAC;YACf,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,GAAG;YACT,KAAK,EAAE,eAAY,CAAC,IAAI;YACxB,SAAS,EAAE,EAAE;SACd,CAAA;QACD,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;QAC9D,gBAAM,CAAC,eAAe,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QACjD,gBAAM,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;QAC3C,gBAAM,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,sBAAmB,CAAC,OAAO,CAAC,CAAA;QAE9E,MAAM,iBAAiB,GAAgB,EAAE,CAAC;QAE1C,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,EAAE,EAAC,CAAC,EAAE,EAAE,CAAC;YACvB,iBAAiB,CAAC,IAAI,CAAC;gBACrB,EAAE,EAAE,IAAA,KAAE,GAAE;gBACR,gBAAgB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;gBACvD,iBAAiB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;gBACxD,MAAM,EAAE,IAAI;gBACZ,aAAa,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;gBACzC,YAAY,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;gBACtC,YAAY,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;gBAClC,UAAU,EAAE,EAAE;gBACd,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,CAAC;gBACT,IAAI,EAAE,GAAG;gBACT,KAAK,EAAE,CAAC;gBACR,SAAS,EAAE,EAAE;aACd,CAAC,CAAA;QACJ,CAAC;QAED,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAA;QACzE,gBAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAA;QAC1E,KAAK,MAAM,MAAM,IAAI,iBAAiB,EAAE,CAAC;YACvC,gBAAM,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;YAC/B,gBAAM,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,uBAAoB,CAAC,OAAO,CAAC,CAAA;QACrE,CAAC;IACH,CAAC;IAED,CAAC;QAIC,MAAM,MAAM,GAAgB;YAC1B,aAAa,EAAE,KAAK;YACpB,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,EAAE;YAChB,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,EAAE;YACjB,aAAa,EAAE,EAAE;YACjB,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,mBAAgB,CAAC,IAAI;SAC7B,CAAA;QACD,MAAM,KAAK,GAAe,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;QAC7D,gBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QAEnC,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;YAC7B,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC1C,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;YAE/B,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;YACjE,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YAC/D,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YAC/D,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,CAAC;QAIC,MAAM,MAAM,GAAgB;YAC1B,aAAa,EAAE,KAAK;YACpB,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,EAAE;YAChB,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,EAAE;YACjB,aAAa,EAAE,EAAE;YACjB,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,mBAAgB,CAAC,QAAQ;SACjC,CAAA;QACD,MAAM,KAAK,GAAe,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;QAC7D,gBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QAEnC,IAAI,SAAS,GAAG,EAAE,IAAI,GAAG,CAAC;QAC1B,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;YAC7B,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC1C,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;YAE/B,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;YACjE,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YAC/D,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YAC/D,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,CAAC;QAGC,MAAM,MAAM,GAAgB;YAC1B,aAAa,EAAE,EAAE;YACjB,YAAY,EAAE,EAAE;YAChB,YAAY,EAAE,CAAC;YACf,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,EAAE;YACjB,aAAa,EAAE,EAAE;YACjB,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,mBAAgB,CAAC,IAAI;SAC7B,CAAA;QACD,MAAM,KAAK,GAAe,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;QAC7D,gBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;QAEpC,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;YAC7B,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC1C,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;YAE/B,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,CAAC;QAGC,MAAM,MAAM,GAAgB;YAC1B,aAAa,EAAE,EAAE;YACjB,YAAY,EAAE,EAAE;YAChB,YAAY,EAAE,CAAC;YACf,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,GAAG;YACT,aAAa,EAAE,EAAE;YACjB,aAAa,EAAE,EAAE;YACjB,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,mBAAgB,CAAC,QAAQ;SACjC,CAAA;QAGD,IAAI,KAAK,GAAe,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;QAC3D,gBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QAEnC,IAAI,SAAS,GAAG,EAAE,IAAI,GAAG,CAAC;QAC1B,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;YAC7B,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC1C,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;YAE/B,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC;QAGD,MAAM,CAAC,aAAa,GAAG,SAAS,GAAG,EAAE,CAAA;QACrC,KAAK,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;QAC3C,gBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QAEnC,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;YAC7B,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC1C,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;YAE/B,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC;QAGD,MAAM,CAAC,aAAa,GAAG,SAAS,GAAG,EAAE,CAAA;QACrC,KAAK,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;QAC3C,gBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACrC,CAAC;IAED,CAAC;QAEC,MAAM,MAAM,GAAgB;YAC1B,aAAa,EAAE,EAAE;YACjB,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,EAAE;YAChB,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,CAAC;YACP,aAAa,EAAE,EAAE;YACjB,aAAa,EAAE,EAAE;YACjB,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,mBAAgB,CAAC,IAAI;SAC7B,CAAA;QACD,MAAM,KAAK,GAAe,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;QAC7D,gBAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACrC,CAAC;AACH,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,2BAA2B,EAAE,KAAK,IAAmB,EAAE;IAE1D,IAAI,MAAM,GAAgB;QACxB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,EAAE;QAC/B,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,mBAAgB,CAAC,IAAI;KAC7B,CAAA;IACD,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAChE,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAGjE,MAAM,GAAG;QACP,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,EAAE;QAC/B,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,mBAAgB,CAAC,IAAI;KAC7B,CAAA;IACD,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAChE,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAGjE,MAAM,GAAG;QACP,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,EAAE;QAC/B,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,mBAAgB,CAAC,IAAI;KAC7B,CAAA;IACD,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAChE,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAGjE,MAAM,GAAG;QACP,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,mBAAgB,CAAC,IAAI;KAC7B,CAAA;IACD,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAChE,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAGjE,MAAM,GAAG;QACP,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,KAAM;QACb,KAAK,EAAE,mBAAgB,CAAC,IAAI;KAC7B,CAAA;IACD,gBAAM,CAAC,OAAO,CAAC,KAAK,IAAG,EAAE,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;QACpE,gBAAM,CAAC,EAAE,CAAC,GAAG,YAAY,eAAY,CAAC,CAAA;QACtC,gBAAM,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAG,aAAU,CAAC,iBAAiB,CAAC,CAAA;QAC3D,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CAAA;IACF,gBAAM,CAAC,OAAO,CAAC,KAAK,IAAG,EAAE,CAAC,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;QACrE,gBAAM,CAAC,EAAE,CAAC,GAAG,YAAY,eAAY,CAAC,CAAA;QACtC,gBAAM,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAG,aAAU,CAAC,iBAAiB,CAAC,CAAA;QAC3D,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CAAA;IAGF,MAAM,GAAG;QACP,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,MAAM;KACd,CAAA;IACD,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAChE,gBAAM,CAAC,eAAe,CAAC,CAAC,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AACnE,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,mCAAmC,EAAE,KAAK,IAAmB,EAAE;IAClE,MAAM,UAAU,GAAY;QAC1B,EAAE,EAAE,IAAA,KAAE,GAAE;QACR,cAAc,EAAE,EAAE;QAClB,aAAa,EAAE,EAAE;QACjB,eAAe,EAAE,EAAE;QACnB,cAAc,EAAE,EAAE;QAClB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,GAAG;QACT,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,EAAE;KACd,CAAA;IACD,IAAI,eAAe,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;IAC/D,gBAAM,CAAC,eAAe,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACjD,gBAAM,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IAC3C,gBAAM,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,sBAAmB,CAAC,OAAO,CAAC,CAAA;IAE9E,IAAI,aAAa,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAA;IAChE,gBAAM,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAC3C,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAI/C,MAAM,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEnB,MAAM,QAAQ,GAAY;QACxB,EAAE,EAAE,IAAA,KAAE,GAAE;QACR,cAAc,EAAE,EAAE;QAClB,aAAa,EAAE,EAAE;QACjB,eAAe,EAAE,EAAE;QACnB,cAAc,EAAE,EAAE;QAClB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,GAAG;QACT,KAAK,EAAE,eAAY,CAAC,QAAQ;QAC5B,SAAS,EAAE,YAAY,GAAG,EAAE;KAC7B,CAAA;IACD,MAAM,QAAQ,GAAY;QACxB,EAAE,EAAE,IAAA,KAAE,GAAE;QACR,cAAc,EAAE,EAAE;QAClB,aAAa,EAAE,EAAE;QACjB,eAAe,EAAE,EAAE;QACnB,cAAc,EAAE,EAAE;QAClB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,GAAG;QACT,KAAK,EAAE,eAAY,CAAC,QAAQ;QAC5B,SAAS,EAAE,YAAY,GAAG,EAAE;KAC7B,CAAA;IACD,eAAe,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAA;IACnE,gBAAM,CAAC,eAAe,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACjD,gBAAM,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IAC3C,gBAAM,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,sBAAmB,CAAC,OAAO,CAAC,CAAA;IAC9E,gBAAM,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IAC3C,gBAAM,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,sBAAmB,CAAC,OAAO,CAAC,CAAA;IAE9E,aAAa,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IACvE,gBAAM,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAC3C,gBAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAA;IAClE,gBAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAA;IAElE,MAAM,QAAQ,GAAa;QACzB,EAAE,EAAE,IAAA,KAAE,GAAE;QACR,gBAAgB,EAAE,QAAQ,CAAC,EAAE;QAC7B,iBAAiB,EAAE,QAAQ,CAAC,EAAE;QAC9B,MAAM,EAAE,IAAI;QACZ,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,gBAAa,CAAC,QAAQ;QAC7B,SAAS,EAAE,YAAY,GAAG,EAAE;KAC7B,CAAA;IAED,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;IAClE,gBAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACnD,gBAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;IAC7C,gBAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,uBAAoB,CAAC,OAAO,CAAC,CAAA;IAEjF,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IAC7D,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACvC,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,YAAY,GAAG,EAAE,CAAC,CAAA;AAC/D,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,oCAAoC,EAAE,KAAK,IAAmB,EAAE;IACnE,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAA;IACvD,gBAAM,CAAC,eAAe,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;AACnD,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,qCAAqC,EAAE,KAAK,IAAmB,EAAE;IACpE,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;IAC1D,gBAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;AACrD,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,oCAAoC,EAAE,KAAK,IAAmB,EAAE;IACnE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAA;IAChD,gBAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;AACtC,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,qCAAqC,EAAE,KAAK,IAAmB,EAAE;IACpE,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;IAClD,gBAAM,CAAC,eAAe,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;AACvC,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,0BAA0B,EAAE,KAAK,IAAmB,EAAE;IACzD,MAAM,YAAY,GAAG,CAAC,CAAC;IACvB,MAAM,YAAY,GAAG,EAAE,CAAC;IAExB,MAAM,OAAO,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAC3C,IAAA,eAAY,EAAC;QACX,UAAU,EAAE,EAAE;QACd,iBAAiB,EAAE,iBAAiB;KACrC,CAAC,CACH,CAAC;IAEF,MAAM,GAAG,GAAkB,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE;QACvD,MAAM,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9C,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC;YACxB,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,IAAA,KAAE,GAAE,CAAC;YACpB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACjB,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YAC7D,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,gBAAM,CAAC,EAAE,CAAC,GAAG,YAAY,eAAY,CAAC,CAAC;gBACvC,gBAAM,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,aAAU,CAAC,iBAAiB,CAAC,CAAC;YAC7D,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;gBACxD,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC;gBAC3C,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3B,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,gBAAM,CAAC,EAAE,CAAC,GAAG,YAAY,eAAY,CAAC,CAAC;YACvC,gBAAM,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,aAAU,CAAC,iBAAiB,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3C,KAAK,MAAM,MAAM,IAAI,OAAO;QAAE,MAAM,CAAC,OAAO,EAAE,CAAC;AACjD,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,IAAI;IACjB,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;IAClC,IAAI,CAAC;QACH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,UAAU,CAAC,CAAA;YACzC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,UAAU,CAAC,CAAA;gBACvC,MAAM,KAAK,CAAA;YACb,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;QAChC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,GAAC,IAAI,CAAC,CAAA;IACpD,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,OAAO,EAAE,CAAA;IACxB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAqB,EAAE,EAAE;IACrC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;IACxC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC,CAAC,CAAA","sourcesContent":["import assert, { AssertionError } from 'assert'\nimport {\n createClient,\n Account,\n Transfer,\n TransferFlags,\n CreateAccountStatus,\n CreateTransferStatus,\n AccountFilter,\n AccountFilterFlags,\n AccountFlags,\n amount_max,\n id,\n QueryFilter,\n QueryFilterFlags,\n ErrorCodes,\n RequestError,\n} from '.'\n\nasync function sleep_ms(ms: number): Promise<void> {\n await new Promise(resolve => setTimeout(resolve, ms))\n}\n\nfunction range(n: number): number[] {\n return Array.from({ length: n }, (_, i) => i);\n}\n\nfunction random_index(array: Array<any>): number {\n return Math.floor(Math.random() * array.length);\n}\n\nconst REPLICA_ADDRESSES = [process.env.TB_ADDRESS || '3000'];\nconst client = createClient({\n cluster_id: 0n,\n replica_addresses: REPLICA_ADDRESSES\n})\n\n// Test data\nconst accountA: Account = {\n id: 17n,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: 0,\n timestamp: 0n // this will be set correctly by the TigerBeetle server\n}\nconst accountB: Account = {\n id: 19n,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 719,\n flags: 0,\n timestamp: 0n // this will be set correctly by the TigerBeetle server\n}\n\nconst BATCH_MAX = 8189;\n\nconst tests: Array<{ name: string, fn: () => Promise<void> }> = []\nfunction test(name: string, fn: () => Promise<void>) {\n tests.push({ name, fn })\n}\ntest.skip = (name: string, fn: () => Promise<void>) => {\n console.log(name + ': SKIPPED')\n}\n\ntest('Serialization: BigInt exceeds U128', async (): Promise<void> => {\n const transfer: Transfer = {\n id: 9999999999999999999999999999999999999999n,\n debit_account_id: 0n,\n credit_account_id: 0n,\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 0,\n code: 0,\n flags: 0,\n timestamp: 0n,\n };\n\n assert.rejects(async() => await client.createTransfers([transfer]), (err) => {\n assert.ok(err instanceof Error)\n assert.strictEqual(err.message, \"id must fit in 128 bits\")\n return true\n })\n})\n\ntest('Serialization: BigInt negative', async (): Promise<void> => {\n const transfer: Transfer = {\n id: -1n,\n debit_account_id: 0n,\n credit_account_id: 0n,\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 0,\n code: 0,\n flags: 0,\n timestamp: 0n,\n };\n\n assert.rejects(async() => await client.createTransfers([transfer]), (err) => {\n assert.ok(err instanceof Error)\n assert.strictEqual(err.message, \"id must be positive\")\n return true\n })\n})\n\n\ntest('id() monotonically increasing', async (): Promise<void> => {\n let idA = id();\n for (let i = 0; i < 10_000_000; i++) {\n // Ensure ID is monotonic between milliseconds if the loop executes too fast.\n if (i % 10_000 == 0) {\n await sleep_ms(1)\n }\n\n const idB = id();\n assert.ok(idB > idA, 'id() returned an id that did not monotonically increase');\n idA = idB;\n }\n})\n\ntest('range check `code` on Account to be u16', async (): Promise<void> => {\n const account = { ...accountA, id: 0n }\n\n account.code = 65535 + 1\n const codeError = await client.createAccounts([account]).catch(error => error)\n assert.strictEqual(codeError.message, 'code must be a u16.')\n\n const accounts = await client.lookupAccounts([account.id])\n assert.deepStrictEqual(accounts, [])\n})\n\ntest('can create accounts', async (): Promise<void> => {\n const account_results = await client.createAccounts([accountA])\n assert.deepStrictEqual(account_results.length, 1)\n assert.ok(account_results[0].timestamp > 0)\n assert.deepStrictEqual(account_results[0].status, CreateAccountStatus.created)\n})\n\ntest('can return error on account', async (): Promise<void> => {\n const account_results = await client.createAccounts([accountA, accountB])\n assert.deepStrictEqual(account_results.length, 2)\n assert.ok(account_results[0].timestamp > 0)\n assert.deepStrictEqual(account_results[0].status, CreateAccountStatus.exists)\n assert.ok(account_results[1].timestamp > 0)\n assert.deepStrictEqual(account_results[1].status, CreateAccountStatus.created)\n})\n\ntest('error if timestamp is not set to 0n on account', async (): Promise<void> => {\n const account = { ...accountA, timestamp: 2n, id: 3n }\n const account_results = await client.createAccounts([account])\n assert.deepStrictEqual(account_results.length, 1)\n assert.ok(account_results[0].timestamp > 0)\n assert.deepStrictEqual(account_results[0].status, CreateAccountStatus.timestamp_must_be_zero)\n})\n\ntest('batch max size', async (): Promise<void> => {\n const BATCH_SIZE = 10_000;\n const transfers: Transfer[] = [];\n for (let i=0; i<BATCH_SIZE;i++) {\n transfers.push({\n id: 0n,\n debit_account_id: 0n,\n credit_account_id: 0n,\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 0,\n code: 0,\n flags: 0,\n timestamp: 0n,\n });\n }\n assert.rejects(async() => await client.createTransfers(transfers), (err) => {\n assert.ok(err instanceof RequestError)\n assert.strictEqual(err.code, ErrorCodes.ERR_TOO_MUCH_DATA)\n return true\n })\n})\n\ntest('batch invalid size', async (): Promise<void> => {\n const transfers: Transfer[] = [];\n transfers.length = 0xffffffff;\n\n assert.rejects(async() => await client.createTransfers(transfers), (err) => {\n assert.ok(err instanceof RequestError)\n assert.strictEqual(err.code, ErrorCodes.ERR_TOO_MUCH_DATA)\n return true\n })\n})\n\ntest('can lookup accounts', async (): Promise<void> => {\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n\n assert.strictEqual(accounts.length, 2)\n const account1 = accounts[0]\n assert.strictEqual(account1.id, 17n)\n assert.strictEqual(account1.credits_posted, 0n)\n assert.strictEqual(account1.credits_pending, 0n)\n assert.strictEqual(account1.debits_posted, 0n)\n assert.strictEqual(account1.debits_pending, 0n)\n assert.strictEqual(account1.user_data_128, 0n)\n assert.strictEqual(account1.user_data_64, 0n)\n assert.strictEqual(account1.user_data_32, 0)\n assert.strictEqual(account1.code, 718)\n assert.strictEqual(account1.ledger, 1)\n assert.strictEqual(account1.flags, 0)\n assert.ok(account1.timestamp > 0n)\n\n const account2 = accounts[1]\n assert.strictEqual(account2.id, 19n)\n assert.strictEqual(account2.credits_posted, 0n)\n assert.strictEqual(account2.credits_pending, 0n)\n assert.strictEqual(account2.debits_posted, 0n)\n assert.strictEqual(account2.debits_pending, 0n)\n assert.strictEqual(account2.user_data_128, 0n)\n assert.strictEqual(account2.user_data_64, 0n)\n assert.strictEqual(account2.user_data_32, 0)\n assert.strictEqual(account2.code, 719)\n assert.strictEqual(account2.ledger, 1)\n assert.strictEqual(account2.flags, 0)\n assert.ok(account2.timestamp > 0n)\n})\n\ntest('can create a transfer', async (): Promise<void> => {\n const transfer: Transfer = {\n id: 1n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: 0,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const transfers_results = await client.createTransfers([transfer])\n assert.deepStrictEqual(transfers_results.length, 1)\n assert.ok(transfers_results[0].timestamp > 0)\n assert.deepStrictEqual(transfers_results[0].status, CreateTransferStatus.created)\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 100n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 100n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n})\n\ntest('can create a two-phase transfer', async (): Promise<void> => {\n let flags = 0\n flags |= TransferFlags.pending\n const transfer: Transfer = {\n id: 2n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 50n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 2e9,\n ledger: 1,\n code: 1,\n flags,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const transfers_results = await client.createTransfers([transfer])\n assert.deepStrictEqual(transfers_results.length, 1)\n assert.ok(transfers_results[0].timestamp > 0)\n assert.deepStrictEqual(transfers_results[0].status, CreateTransferStatus.created)\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 100n)\n assert.strictEqual(accounts[0].credits_pending, 50n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 100n)\n assert.strictEqual(accounts[1].debits_pending, 50n)\n\n // Lookup the transfer:\n const transfers = await client.lookupTransfers([transfer.id])\n assert.strictEqual(transfers.length, 1)\n assert.strictEqual(transfers[0].id, 2n)\n assert.strictEqual(transfers[0].debit_account_id, accountB.id)\n assert.strictEqual(transfers[0].credit_account_id, accountA.id)\n assert.strictEqual(transfers[0].amount, 50n)\n assert.strictEqual(transfers[0].user_data_128, 0n)\n assert.strictEqual(transfers[0].user_data_64, 0n)\n assert.strictEqual(transfers[0].user_data_32, 0)\n assert.strictEqual(transfers[0].timeout > 0, true)\n assert.strictEqual(transfers[0].code, 1)\n assert.strictEqual(transfers[0].flags, 2)\n assert.strictEqual(transfers[0].timestamp > 0, true)\n})\n\ntest('can post a two-phase transfer', async (): Promise<void> => {\n let flags = 0\n flags |= TransferFlags.post_pending_transfer\n\n const commit: Transfer = {\n id: 3n,\n debit_account_id: BigInt(0),\n credit_account_id: BigInt(0),\n amount: amount_max,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 2n,// must match the id of the pending transfer\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: flags,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const transfers_results = await client.createTransfers([commit])\n assert.deepStrictEqual(transfers_results.length, 1)\n assert.ok(transfers_results[0].timestamp > 0)\n assert.deepStrictEqual(transfers_results[0].status, CreateTransferStatus.created)\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n})\n\ntest('can reject a two-phase transfer', async (): Promise<void> => {\n // Create a two-phase transfer:\n const transfer: Transfer = {\n id: 4n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 50n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 1e9,\n ledger: 1,\n code: 1,\n flags: TransferFlags.pending,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n let transfers_results = await client.createTransfers([transfer])\n assert.deepStrictEqual(transfers_results.length, 1)\n assert.ok(transfers_results[0].timestamp > 0)\n assert.deepStrictEqual(transfers_results[0].status, CreateTransferStatus.created)\n\n // send in the reject\n const reject: Transfer = {\n id: 5n,\n debit_account_id: BigInt(0),\n credit_account_id: BigInt(0),\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 4n, // must match the id of the pending transfer\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.void_pending_transfer,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n transfers_results = await client.createTransfers([reject])\n assert.deepStrictEqual(transfers_results.length, 1)\n assert.ok(transfers_results[0].timestamp > 0)\n assert.deepStrictEqual(transfers_results[0].status, CreateTransferStatus.created)\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n})\n\ntest('can link transfers', async (): Promise<void> => {\n const transfer1: Transfer = {\n id: 6n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.linked, // points to transfer2\n timestamp: 0n, // will be set correctly by the TigerBeetle server\n }\n const transfer2: Transfer = {\n id: 6n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n // Does not have linked flag as it is the end of the chain.\n // This will also cause it to fail as this is now a duplicate with different flags\n flags: 0,\n timestamp: 0n, // will be set correctly by the TigerBeetle server\n }\n\n const transfers_results = await client.createTransfers([transfer1, transfer2])\n assert.deepStrictEqual(transfers_results.length, 2)\n assert.ok(transfers_results[0].timestamp > 0)\n assert.deepStrictEqual(transfers_results[0].status, CreateTransferStatus.linked_event_failed)\n assert.ok(transfers_results[1].timestamp > 0)\n assert.deepStrictEqual(transfers_results[1].status, CreateTransferStatus.exists_with_different_flags)\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n})\n\ntest('cannot void an expired transfer', async (): Promise<void> => {\n // Create a two-phase transfer:\n const transfer: Transfer = {\n id: 6n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 50n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 1,\n ledger: 1,\n code: 1,\n flags: TransferFlags.pending,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n let transfers_results = await client.createTransfers([transfer])\n assert.deepStrictEqual(transfers_results.length, 1)\n assert.ok(transfers_results[0].timestamp > 0)\n assert.deepStrictEqual(transfers_results[0].status, CreateTransferStatus.created)\n\n let accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 50n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 50n)\n\n // We need to wait 1s for the server to expire the transfer, however the\n // server can pulse the expiry operation anytime after the timeout,\n // so adding an extra delay to avoid flaky tests.\n const extra_wait_time = 500;\n await sleep_ms((transfer.timeout * 1000) + extra_wait_time);\n\n // Looking up the accounts again for the updated balance.\n accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n\n // send in the reject\n const reject: Transfer = {\n id: 7n,\n debit_account_id: BigInt(0),\n credit_account_id: BigInt(0),\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 6n, // must match the id of the pending transfer\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.void_pending_transfer,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n transfers_results = await client.createTransfers([reject])\n assert.deepStrictEqual(transfers_results.length, 1)\n assert.ok(transfers_results[0].timestamp > 0)\n assert.deepStrictEqual(transfers_results[0].status, CreateTransferStatus.pending_transfer_expired)\n})\n\ntest('can close accounts', async (): Promise<void> => {\n const closing_transfer: Transfer = {\n id: id(),\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.closing_debit | TransferFlags.closing_credit | TransferFlags.pending,\n timestamp: 0n, // will be set correctly by the TigerBeetle server\n }\n let transfers_results = await client.createTransfers([closing_transfer])\n assert.deepStrictEqual(transfers_results.length, 1)\n assert.ok(transfers_results[0].timestamp > 0)\n assert.deepStrictEqual(transfers_results[0].status, CreateTransferStatus.created)\n\n let accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.ok(accountA.flags != accounts[0].flags)\n assert.ok((accounts[0].flags & AccountFlags.closed) != 0)\n\n assert.ok(accountB.flags != accounts[1].flags)\n assert.ok((accounts[1].flags & AccountFlags.closed) != 0)\n\n const voiding_transfer: Transfer = {\n id: id(),\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.void_pending_transfer,\n pending_id: closing_transfer.id,\n timestamp: 0n, // will be set correctly by the TigerBeetle server\n }\n\n transfers_results = await client.createTransfers([voiding_transfer])\n assert.deepStrictEqual(transfers_results.length, 1)\n assert.ok(transfers_results[0].timestamp > 0)\n assert.deepStrictEqual(transfers_results[0].status, CreateTransferStatus.created)\n\n accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accountA.flags, accounts[0].flags)\n assert.ok((accounts[0].flags & AccountFlags.closed) == 0)\n\n assert.strictEqual(accountB.flags, accounts[1].flags)\n assert.ok((accounts[1].flags & AccountFlags.closed) == 0)\n})\n\ntest('can get account transfers', async (): Promise<void> => {\n const accountC: Account = {\n id: 21n,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: AccountFlags.history,\n timestamp: 0n\n }\n const account_results = await client.createAccounts([accountC])\n assert.deepStrictEqual(account_results.length, 1)\n assert.ok(account_results[0].timestamp > 0)\n assert.deepStrictEqual(account_results[0].status, CreateAccountStatus.created)\n\n const transfers_created : Transfer[] = [];\n // Create transfers where the new account is either the debit or credit account:\n for (let i=0; i<10;i++) {\n transfers_created.push({\n id: BigInt(i + 10000),\n debit_account_id: i % 2 == 0 ? accountC.id : accountA.id,\n credit_account_id: i % 2 == 0 ? accountB.id : accountC.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: 0,\n timestamp: 0n,\n });\n }\n\n const transfers_results = await client.createTransfers(transfers_created)\n assert.deepStrictEqual(transfers_results.length, transfers_created.length)\n for (const result of transfers_results) {\n assert.ok(result.timestamp > 0)\n assert.deepStrictEqual(result.status, CreateTransferStatus.created)\n }\n\n // Query all transfers for accountC:\n let filter: AccountFilter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n let transfers = await client.getAccountTransfers(filter)\n let account_balances = await client.getAccountBalances(filter)\n assert.strictEqual(transfers.length, transfers_created.length)\n assert.strictEqual(account_balances.length, transfers.length)\n\n let timestamp = 0n;\n let i = 0;\n for (const transfer of transfers) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query only the debit transfers for accountC, descending:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.debits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n timestamp = 1n << 64n;\n i = 0;\n for (const transfer of transfers) {\n assert.ok(transfer.timestamp < timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query only the credit transfers for accountC, descending:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n timestamp = 1n << 64n;\n i = 0;\n for (const transfer of transfers) {\n assert.ok(transfer.timestamp < timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query the first 5 transfers for accountC:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n timestamp = 0n;\n i = 0;\n for (const transfer of transfers) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query the next 5 transfers for accountC, with pagination:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: timestamp + 1n,\n timestamp_max: 0n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n i = 0;\n for (const transfer of transfers) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query again, no more transfers should be found:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: timestamp + 1n,\n timestamp_max: 0n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.deepStrictEqual(transfers, [])\n assert.strictEqual(account_balances.length, transfers.length)\n\n // Query the first 5 transfers for accountC ORDER BY DESC:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n timestamp = 1n << 64n;\n i = 0;\n for (const transfer of transfers) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query the next 5 transfers for accountC, with pagination:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: timestamp - 1n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n i = 0;\n for (const transfer of transfers) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query again, no more transfers should be found:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: timestamp - 1n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.deepStrictEqual(transfers, [])\n assert.strictEqual(account_balances.length, transfers.length)\n\n // Invalid account:\n filter = {\n account_id: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Invalid timestamp min:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: (1n << 64n) - 1n, // ulong max value\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Invalid timestamp max:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: (1n << 64n) - 1n, // ulong max value\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Invalid timestamp range:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: (1n << 64n) - 2n, // ulong max - 1\n timestamp_max: 1n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Zero limit:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 0,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // TooMuchData\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 10_000,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.rejects(async() => await client.getAccountTransfers(filter), (err) => {\n assert.ok(err instanceof RequestError)\n assert.strictEqual(err.code, ErrorCodes.ERR_TOO_MUCH_DATA)\n return true\n })\n assert.rejects(async() => await client.getAccountBalances(filter), (err) => {\n assert.ok(err instanceof RequestError)\n assert.strictEqual(err.code, ErrorCodes.ERR_TOO_MUCH_DATA)\n return true\n })\n\n // Empty flags:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.none,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Invalid flags:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: 0xFFFF,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n})\n\ntest('can query accounts', async (): Promise<void> => {\n {\n const accounts : Account[] = [];\n // Create transfers:\n for (let i=0; i<10;i++) {\n accounts.push({\n id: id(),\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: i % 2 == 0 ? 1000n : 2000n,\n user_data_64: i % 2 == 0 ? 100n : 200n,\n user_data_32: i % 2 == 0 ? 10 : 20,\n ledger: 1,\n code: 999,\n flags: AccountFlags.none,\n reserved: 0,\n timestamp: 0n,\n })\n }\n\n const account_results = await client.createAccounts(accounts)\n assert.deepStrictEqual(account_results.length, accounts.length)\n for (const result of account_results) {\n assert.ok(result.timestamp > 0)\n assert.deepStrictEqual(result.status, CreateAccountStatus.created)\n }\n }\n\n {\n // Querying accounts where:\n // `user_data_128=1000 AND user_data_64=100 AND user_data_32=10\n // AND code=999 AND ledger=1 ORDER BY timestamp ASC`.\n const filter: QueryFilter = {\n user_data_128: 1000n,\n user_data_64: 100n,\n user_data_32: 10,\n ledger: 1,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n const query: Account[] = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 5)\n\n let timestamp = 0n;\n for (const account of query) {\n assert.ok(timestamp < account.timestamp);\n timestamp = account.timestamp;\n\n assert.strictEqual(account.user_data_128, filter.user_data_128);\n assert.strictEqual(account.user_data_64, filter.user_data_64);\n assert.strictEqual(account.user_data_32, filter.user_data_32);\n assert.strictEqual(account.ledger, filter.ledger);\n assert.strictEqual(account.code, filter.code);\n }\n }\n\n {\n // Querying accounts where:\n // `user_data_128=2000 AND user_data_64=200 AND user_data_32=20\n // AND code=999 AND ledger=1 ORDER BY timestamp DESC`.\n const filter: QueryFilter = {\n user_data_128: 2000n,\n user_data_64: 200n,\n user_data_32: 20,\n ledger: 1,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.reversed,\n }\n const query: Account[] = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 5)\n\n let timestamp = 1n << 64n;\n for (const account of query) {\n assert.ok(timestamp > account.timestamp);\n timestamp = account.timestamp;\n\n assert.strictEqual(account.user_data_128, filter.user_data_128);\n assert.strictEqual(account.user_data_64, filter.user_data_64);\n assert.strictEqual(account.user_data_32, filter.user_data_32);\n assert.strictEqual(account.ledger, filter.ledger);\n assert.strictEqual(account.code, filter.code);\n }\n }\n\n {\n // Querying accounts where:\n // `code=999 ORDER BY timestamp ASC`\n const filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n const query: Account[] = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 10)\n\n let timestamp = 0n;\n for (const account of query) {\n assert.ok(timestamp < account.timestamp);\n timestamp = account.timestamp;\n\n assert.strictEqual(account.code, filter.code);\n }\n }\n\n {\n // Querying accounts where:\n // `code=999 ORDER BY timestamp DESC LIMIT 5`.\n const filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 5,\n flags: QueryFilterFlags.reversed,\n }\n\n // First 5 items:\n let query: Account[] = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 5)\n\n let timestamp = 1n << 64n;\n for (const account of query) {\n assert.ok(timestamp > account.timestamp);\n timestamp = account.timestamp;\n\n assert.strictEqual(account.code, filter.code);\n }\n\n // Next 5 items:\n filter.timestamp_max = timestamp - 1n\n query = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 5)\n\n for (const account of query) {\n assert.ok(timestamp > account.timestamp);\n timestamp = account.timestamp;\n\n assert.strictEqual(account.code, filter.code);\n }\n\n // No more results:\n filter.timestamp_max = timestamp - 1n\n query = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 0)\n }\n\n {\n // Not found:\n const filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 200n,\n user_data_32: 10,\n ledger: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n const query: Account[] = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 0)\n }\n})\n\ntest('can query transfers', async (): Promise<void> => {\n {\n const account: Account = {\n id: id(),\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: AccountFlags.none,\n timestamp: 0n\n }\n const account_results = await client.createAccounts([account])\n assert.deepStrictEqual(account_results.length, 1)\n assert.ok(account_results[0].timestamp > 0)\n assert.deepStrictEqual(account_results[0].status, CreateAccountStatus.created)\n\n const transfers_created : Transfer[] = [];\n // Create transfers:\n for (let i=0; i<10;i++) {\n transfers_created.push({\n id: id(),\n debit_account_id: i % 2 == 0 ? account.id : accountA.id,\n credit_account_id: i % 2 == 0 ? accountB.id : account.id,\n amount: 100n,\n user_data_128: i % 2 == 0 ? 1000n : 2000n,\n user_data_64: i % 2 == 0 ? 100n : 200n,\n user_data_32: i % 2 == 0 ? 10 : 20,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 999,\n flags: 0,\n timestamp: 0n,\n })\n }\n\n const transfers_results = await client.createTransfers(transfers_created)\n assert.deepStrictEqual(transfers_results.length, transfers_created.length)\n for (const result of transfers_results) {\n assert.ok(result.timestamp > 0)\n assert.deepStrictEqual(result.status, CreateTransferStatus.created)\n }\n }\n\n {\n // Querying transfers where:\n // `user_data_128=1000 AND user_data_64=100 AND user_data_32=10\n // AND code=999 AND ledger=1 ORDER BY timestamp ASC`.\n const filter: QueryFilter = {\n user_data_128: 1000n,\n user_data_64: 100n,\n user_data_32: 10,\n ledger: 1,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n const query: Transfer[] = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 5)\n\n let timestamp = 0n;\n for (const transfer of query) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.strictEqual(transfer.user_data_128, filter.user_data_128);\n assert.strictEqual(transfer.user_data_64, filter.user_data_64);\n assert.strictEqual(transfer.user_data_32, filter.user_data_32);\n assert.strictEqual(transfer.ledger, filter.ledger);\n assert.strictEqual(transfer.code, filter.code);\n }\n }\n\n {\n // Querying transfers where:\n // `user_data_128=2000 AND user_data_64=200 AND user_data_32=20\n // AND code=999 AND ledger=1 ORDER BY timestamp DESC`.\n const filter: QueryFilter = {\n user_data_128: 2000n,\n user_data_64: 200n,\n user_data_32: 20,\n ledger: 1,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.reversed,\n }\n const query: Transfer[] = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 5)\n\n let timestamp = 1n << 64n;\n for (const transfer of query) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.strictEqual(transfer.user_data_128, filter.user_data_128);\n assert.strictEqual(transfer.user_data_64, filter.user_data_64);\n assert.strictEqual(transfer.user_data_32, filter.user_data_32);\n assert.strictEqual(transfer.ledger, filter.ledger);\n assert.strictEqual(transfer.code, filter.code);\n }\n }\n\n {\n // Querying transfers where:\n // `code=999 ORDER BY timestamp ASC`\n const filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n const query: Transfer[] = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 10)\n\n let timestamp = 0n;\n for (const transfer of query) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.strictEqual(transfer.code, filter.code);\n }\n }\n\n {\n // Querying transfers where:\n // `code=999 ORDER BY timestamp DESC LIMIT 5`.\n const filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 5,\n flags: QueryFilterFlags.reversed,\n }\n\n // First 5 items:\n let query: Transfer[] = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 5)\n\n let timestamp = 1n << 64n;\n for (const transfer of query) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.strictEqual(transfer.code, filter.code);\n }\n\n // Next 5 items:\n filter.timestamp_max = timestamp - 1n\n query = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 5)\n\n for (const transfer of query) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.strictEqual(transfer.code, filter.code);\n }\n\n // No more results:\n filter.timestamp_max = timestamp - 1n\n query = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 0)\n }\n\n {\n // Not found:\n const filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 200n,\n user_data_32: 10,\n ledger: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n const query: Transfer[] = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 0)\n }\n})\n\ntest('query with invalid filter', async (): Promise<void> => {\n // Invalid timestamp min:\n var filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 0,\n timestamp_min: (1n << 64n) - 1n, // ulong max value\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n assert.deepStrictEqual((await client.queryAccounts(filter)), [])\n assert.deepStrictEqual((await client.queryTransfers(filter)), [])\n\n // Invalid timestamp max:\n filter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: (1n << 64n) - 1n, // ulong max value,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n assert.deepStrictEqual((await client.queryAccounts(filter)), [])\n assert.deepStrictEqual((await client.queryTransfers(filter)), [])\n\n // Invalid timestamp range:\n filter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 0,\n timestamp_min: (1n << 64n) - 2n, // ulong max - 1\n timestamp_max: 1n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n assert.deepStrictEqual((await client.queryAccounts(filter)), [])\n assert.deepStrictEqual((await client.queryTransfers(filter)), [])\n\n // Zero limit:\n filter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 0,\n flags: QueryFilterFlags.none,\n }\n assert.deepStrictEqual((await client.queryAccounts(filter)), [])\n assert.deepStrictEqual((await client.queryTransfers(filter)), [])\n\n // TooMuchData\n filter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 10_000,\n flags: QueryFilterFlags.none,\n }\n assert.rejects(async() => await client.queryAccounts(filter), (err) => {\n assert.ok(err instanceof RequestError)\n assert.strictEqual(err.code, ErrorCodes.ERR_TOO_MUCH_DATA)\n return true\n })\n assert.rejects(async() => await client.queryTransfers(filter), (err) => {\n assert.ok(err instanceof RequestError)\n assert.strictEqual(err.code, ErrorCodes.ERR_TOO_MUCH_DATA)\n return true\n })\n\n // Invalid flags:\n filter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 0,\n flags: 0xFFFF,\n }\n assert.deepStrictEqual((await client.queryAccounts(filter)), [])\n assert.deepStrictEqual((await client.queryTransfers(filter)), [])\n})\n\ntest('can import accounts and transfers', async (): Promise<void> => {\n const accountTmp: Account = {\n id: id(),\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: 0,\n timestamp: 0n // this will be set correctly by the TigerBeetle server\n }\n let account_results = await client.createAccounts([accountTmp])\n assert.deepStrictEqual(account_results.length, 1)\n assert.ok(account_results[0].timestamp > 0)\n assert.deepStrictEqual(account_results[0].status, CreateAccountStatus.created)\n\n let accountLookup = await client.lookupAccounts([accountTmp.id])\n assert.strictEqual(accountLookup.length, 1)\n const timestampMax = accountLookup[0].timestamp\n\n // Wait 10 ms so we can use the account's timestamp as the reference for past time\n // after the last object inserted.\n await sleep_ms(10);\n\n const accountA: Account = {\n id: id(),\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: AccountFlags.imported,\n timestamp: timestampMax + 1n // user-defined timestamp\n }\n const accountB: Account = {\n id: id(),\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: AccountFlags.imported,\n timestamp: timestampMax + 2n // user-defined timestamp\n }\n account_results = await client.createAccounts([accountA, accountB])\n assert.deepStrictEqual(account_results.length, 2)\n assert.ok(account_results[0].timestamp > 0)\n assert.deepStrictEqual(account_results[0].status, CreateAccountStatus.created)\n assert.ok(account_results[1].timestamp > 0)\n assert.deepStrictEqual(account_results[1].status, CreateAccountStatus.created)\n\n accountLookup = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accountLookup.length, 2)\n assert.strictEqual(accountLookup[0].timestamp, accountA.timestamp)\n assert.strictEqual(accountLookup[1].timestamp, accountB.timestamp)\n\n const transfer: Transfer = {\n id: id(),\n debit_account_id: accountA.id,\n credit_account_id: accountB.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.imported,\n timestamp: timestampMax + 3n, // user-defined timestamp.\n }\n\n const transfers_results = await client.createTransfers([transfer])\n assert.deepStrictEqual(transfers_results.length, 1)\n assert.ok(transfers_results[0].timestamp > 0)\n assert.deepStrictEqual(transfers_results[0].status, CreateTransferStatus.created)\n\n const transfers = await client.lookupTransfers([transfer.id])\n assert.strictEqual(transfers.length, 1)\n assert.strictEqual(transfers[0].timestamp, timestampMax + 3n)\n})\n\ntest('accept zero-length create_accounts', async (): Promise<void> => {\n const account_results = await client.createAccounts([])\n assert.deepStrictEqual(account_results.length, 0)\n})\n\ntest('accept zero-length create_transfers', async (): Promise<void> => {\n const transfers_results = await client.createTransfers([])\n assert.deepStrictEqual(transfers_results.length, 0)\n})\n\ntest('accept zero-length lookup_accounts', async (): Promise<void> => {\n const accounts = await client.lookupAccounts([])\n assert.deepStrictEqual(accounts, [])\n})\n\ntest('accept zero-length lookup_transfers', async (): Promise<void> => {\n const transfers = await client.lookupTransfers([])\n assert.deepStrictEqual(transfers, [])\n})\n\ntest(\"destroy client in-flight\", async (): Promise<void> => {\n const client_count = 5;\n const action_count = 50;\n\n const clients = range(client_count).map(() =>\n createClient({\n cluster_id: 0n,\n replica_addresses: REPLICA_ADDRESSES,\n })\n );\n\n const ids: Array<bigint> = [];\n const actions = range(action_count).map(() => async () => {\n await sleep_ms(Math.random() < 0.2 ? 0 : Math.random());\n const client = clients[random_index(clients)];\n if (Math.random() < 0.1) {\n client.destroy();\n return;\n }\n if (Math.random() < 0.7) {\n const id_new = id();\n ids.push(id_new);\n try {\n await client.createAccounts([{ ...accountA, id: id_new }]);\n } catch (err) {\n assert.ok(err instanceof RequestError);\n assert.strictEqual(err.code, ErrorCodes.ERR_CLIENT_CLOSED);\n }\n return;\n }\n try {\n const id_lookup = (Math.random() < 0.2 || ids.length == 0)\n ? BigInt(Math.floor(Math.random() * 10000))\n : ids[random_index(ids)];\n await client.lookupAccounts([id_lookup]);\n } catch (err) {\n assert.ok(err instanceof RequestError);\n assert.strictEqual(err.code, ErrorCodes.ERR_CLIENT_CLOSED);\n }\n });\n\n await Promise.all(actions.map((f) => f()));\n for (const client of clients) client.destroy();\n});\n\nasync function main () {\n const start = new Date().getTime()\n try {\n for (let i = 0; i < tests.length; i++) {\n await tests[i].fn().then(() => {\n console.log(tests[i].name + \": PASSED\")\n }).catch(error => {\n console.log(tests[i].name + \": FAILED\")\n throw error\n })\n }\n const end = new Date().getTime()\n console.log('Time taken (s):', (end - start)/1000)\n } finally {\n await client.destroy()\n }\n}\n\nmain().catch((error: AssertionError) => {\n console.log('operator:', error.operator)\n console.log('stack:', error.stack)\n process.exit(-1);\n})\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tigerbeetle-node",
3
- "version": "0.17.5",
3
+ "version": "0.17.6",
4
4
  "description": "TigerBeetle Node.js client",
5
5
  "main": "dist/index.js",
6
6
  "typings": "dist/index.d.ts",
package/src/test.ts CHANGED
@@ -77,6 +77,55 @@ test.skip = (name: string, fn: () => Promise<void>) => {
77
77
  console.log(name + ': SKIPPED')
78
78
  }
79
79
 
80
+ test('Serialization: BigInt exceeds U128', async (): Promise<void> => {
81
+ const transfer: Transfer = {
82
+ id: 9999999999999999999999999999999999999999n,
83
+ debit_account_id: 0n,
84
+ credit_account_id: 0n,
85
+ amount: 0n,
86
+ user_data_128: 0n,
87
+ user_data_64: 0n,
88
+ user_data_32: 0,
89
+ pending_id: 0n,
90
+ timeout: 0,
91
+ ledger: 0,
92
+ code: 0,
93
+ flags: 0,
94
+ timestamp: 0n,
95
+ };
96
+
97
+ assert.rejects(async() => await client.createTransfers([transfer]), (err) => {
98
+ assert.ok(err instanceof Error)
99
+ assert.strictEqual(err.message, "id must fit in 128 bits")
100
+ return true
101
+ })
102
+ })
103
+
104
+ test('Serialization: BigInt negative', async (): Promise<void> => {
105
+ const transfer: Transfer = {
106
+ id: -1n,
107
+ debit_account_id: 0n,
108
+ credit_account_id: 0n,
109
+ amount: 0n,
110
+ user_data_128: 0n,
111
+ user_data_64: 0n,
112
+ user_data_32: 0,
113
+ pending_id: 0n,
114
+ timeout: 0,
115
+ ledger: 0,
116
+ code: 0,
117
+ flags: 0,
118
+ timestamp: 0n,
119
+ };
120
+
121
+ assert.rejects(async() => await client.createTransfers([transfer]), (err) => {
122
+ assert.ok(err instanceof Error)
123
+ assert.strictEqual(err.message, "id must be positive")
124
+ return true
125
+ })
126
+ })
127
+
128
+
80
129
  test('id() monotonically increasing', async (): Promise<void> => {
81
130
  let idA = id();
82
131
  for (let i = 0; i < 10_000_000; i++) {