@bitgo-beta/sdk-coin-flrp 1.0.1-beta.3 → 1.0.1-beta.300
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.
- package/dist/src/flrp.d.ts +75 -61
- package/dist/src/flrp.d.ts.map +1 -1
- package/dist/src/flrp.js +276 -134
- package/dist/src/index.d.ts +0 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -2
- package/dist/src/lib/ExportInCTxBuilder.d.ts +51 -0
- package/dist/src/lib/ExportInCTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/ExportInCTxBuilder.js +188 -0
- package/dist/src/lib/ExportInPTxBuilder.d.ts +47 -0
- package/dist/src/lib/ExportInPTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/ExportInPTxBuilder.js +273 -0
- package/dist/src/lib/ImportInCTxBuilder.d.ts +48 -0
- package/dist/src/lib/ImportInCTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/ImportInCTxBuilder.js +215 -0
- package/dist/src/lib/ImportInPTxBuilder.d.ts +33 -0
- package/dist/src/lib/ImportInPTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/ImportInPTxBuilder.js +180 -0
- package/dist/src/lib/atomicInCTransactionBuilder.d.ts +18 -16
- package/dist/src/lib/atomicInCTransactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/atomicInCTransactionBuilder.js +38 -36
- package/dist/src/lib/atomicTransactionBuilder.d.ts +49 -34
- package/dist/src/lib/atomicTransactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/atomicTransactionBuilder.js +159 -33
- package/dist/src/lib/iface.d.ts +50 -22
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +13 -14
- package/dist/src/lib/index.d.ts +7 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +16 -2
- package/dist/src/lib/keyPair.d.ts +5 -5
- package/dist/src/lib/keyPair.d.ts.map +1 -1
- package/dist/src/lib/keyPair.js +15 -9
- package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts +43 -0
- package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/permissionlessValidatorTxBuilder.js +132 -0
- package/dist/src/lib/transaction.d.ts +51 -0
- package/dist/src/lib/transaction.d.ts.map +1 -0
- package/dist/src/lib/transaction.js +373 -0
- package/dist/src/lib/transactionBuilder.d.ts +107 -0
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder.js +210 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts +57 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilderFactory.js +148 -0
- package/dist/src/lib/utils.d.ts +78 -102
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +220 -246
- package/dist/test/resources/account.d.ts +51 -0
- package/dist/test/resources/account.d.ts.map +1 -0
- package/dist/test/resources/account.js +54 -0
- package/dist/test/resources/transactionData/exportInC.d.ts +20 -0
- package/dist/test/resources/transactionData/exportInC.d.ts.map +1 -0
- package/dist/test/resources/transactionData/exportInC.js +34 -0
- package/dist/test/resources/transactionData/exportInP.d.ts +69 -0
- package/dist/test/resources/transactionData/exportInP.d.ts.map +1 -0
- package/dist/test/resources/transactionData/exportInP.js +140 -0
- package/dist/test/resources/transactionData/importInC.d.ts +27 -0
- package/dist/test/resources/transactionData/importInC.d.ts.map +1 -0
- package/dist/test/resources/transactionData/importInC.js +44 -0
- package/dist/test/resources/transactionData/importInP.d.ts +35 -0
- package/dist/test/resources/transactionData/importInP.d.ts.map +1 -0
- package/dist/test/resources/transactionData/importInP.js +58 -0
- package/dist/test/unit/flrp.js +490 -20
- package/dist/test/unit/lib/exportInCTxBuilder.d.ts +2 -0
- package/dist/test/unit/lib/exportInCTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/exportInCTxBuilder.js +166 -0
- package/dist/test/unit/lib/exportInPTxBuilder.d.ts +2 -0
- package/dist/test/unit/lib/exportInPTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/exportInPTxBuilder.js +121 -0
- package/dist/test/unit/lib/importInCTxBuilder.d.ts +2 -0
- package/dist/test/unit/lib/importInCTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/importInCTxBuilder.js +47 -0
- package/dist/test/unit/lib/importInPTxBuilder.d.ts +2 -0
- package/dist/test/unit/lib/importInPTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/importInPTxBuilder.js +73 -0
- package/dist/test/unit/lib/keyPair.d.ts +2 -0
- package/dist/test/unit/lib/keyPair.d.ts.map +1 -0
- package/dist/test/unit/lib/keyPair.js +158 -0
- package/dist/test/unit/lib/signFlowTestSuit.d.ts +20 -0
- package/dist/test/unit/lib/signFlowTestSuit.d.ts.map +1 -0
- package/dist/test/unit/lib/signFlowTestSuit.js +89 -0
- package/dist/test/unit/lib/utils.d.ts +2 -0
- package/dist/test/unit/lib/utils.d.ts.map +1 -0
- package/dist/test/unit/lib/utils.js +453 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +16 -11
- package/.eslintignore +0 -5
- package/.eslintrc.json +0 -7
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -0
- package/dist/src/iface.d.ts +0 -25
- package/dist/src/iface.d.ts.map +0 -1
- package/dist/src/iface.js +0 -3
- package/dist/src/lib/constants.d.ts +0 -11
- package/dist/src/lib/constants.d.ts.map +0 -1
- package/dist/src/lib/constants.js +0 -17
- package/dist/src/lib/errors.d.ts +0 -8
- package/dist/src/lib/errors.d.ts.map +0 -1
- package/dist/src/lib/errors.js +0 -19
- package/dist/src/lib/exportInCTxBuilder.d.ts +0 -77
- package/dist/src/lib/exportInCTxBuilder.d.ts.map +0 -1
- package/dist/src/lib/exportInCTxBuilder.js +0 -164
- package/dist/src/lib/exportInPTxBuilder.d.ts +0 -30
- package/dist/src/lib/exportInPTxBuilder.d.ts.map +0 -1
- package/dist/src/lib/exportInPTxBuilder.js +0 -56
- package/dist/test/unit/smoke.d.ts +0 -2
- package/dist/test/unit/smoke.d.ts.map +0 -1
- package/dist/test/unit/smoke.js +0 -9
package/dist/src/lib/utils.d.ts
CHANGED
|
@@ -1,157 +1,133 @@
|
|
|
1
|
-
import { TransferableOutput } from '@flarenetwork/flarejs';
|
|
1
|
+
import { Signature, TransferableOutput, Id } from '@flarenetwork/flarejs';
|
|
2
2
|
import { BaseUtils, Entry } from '@bitgo-beta/sdk-core';
|
|
3
3
|
import { FlareNetwork } from '@bitgo-beta/statics';
|
|
4
|
-
import {
|
|
4
|
+
import { Buffer } from 'buffer';
|
|
5
|
+
import { Output } from './iface';
|
|
5
6
|
export declare class Utils implements BaseUtils {
|
|
7
|
+
isValidTransactionId(txId: string): boolean;
|
|
8
|
+
isValidSignature(signature: string): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Check if addresses in wallet match UTXO output addresses
|
|
11
|
+
*/
|
|
6
12
|
includeIn(walletAddresses: string[], otxoOutputAddresses: string[]): boolean;
|
|
7
13
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* @
|
|
11
|
-
* @returns {boolean} - the validation result
|
|
14
|
+
* Validates a Flare address or array of addresses
|
|
15
|
+
* @param {string | string[]} address - address(es) to validate
|
|
16
|
+
* @returns {boolean} - validation result
|
|
12
17
|
*/
|
|
13
|
-
/** @inheritdoc */
|
|
14
18
|
isValidAddress(address: string | string[]): boolean;
|
|
15
19
|
private isValidAddressRegex;
|
|
16
20
|
/**
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* @
|
|
20
|
-
* @returns {boolean} - the validation result
|
|
21
|
+
* Validates a block ID
|
|
22
|
+
* @param {string} hash - block ID to validate
|
|
23
|
+
* @returns {boolean} - validation result
|
|
21
24
|
*/
|
|
22
|
-
/** @inheritdoc */
|
|
23
25
|
isValidBlockId(hash: string): boolean;
|
|
24
26
|
/**
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* @param {string} pub - the public key to be validated
|
|
29
|
-
* @returns {boolean} - the validation result
|
|
27
|
+
* Validates a public key
|
|
28
|
+
* @param {string} pub - public key to validate
|
|
29
|
+
* @returns {boolean} - validation result
|
|
30
30
|
*/
|
|
31
31
|
isValidPublicKey(pub: string): boolean;
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
* The protocol key format is described in the @stacks/transactions npm package, in the
|
|
38
|
-
* createStacksPrivateKey function:
|
|
39
|
-
* https://github.com/blockstack/stacks.js/blob/master/packages/transactions/src/keys.ts#L125
|
|
40
|
-
*
|
|
41
|
-
* @param {string} prv - the private key (or extended private key) to be validated
|
|
42
|
-
* @returns {boolean} - the validation result
|
|
32
|
+
/**
|
|
33
|
+
* Validates a private key
|
|
34
|
+
* @param {string} prv - private key to validate
|
|
35
|
+
* @returns {boolean} - validation result
|
|
43
36
|
*/
|
|
44
37
|
isValidPrivateKey(prv: string): boolean;
|
|
45
38
|
/**
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
* @param {string} maybe - the string to be validated
|
|
49
|
-
* @returns {boolean} - the validation result
|
|
39
|
+
* Checks if a string contains only hex characters
|
|
50
40
|
*/
|
|
51
|
-
allHexChars(
|
|
52
|
-
/** @inheritdoc */
|
|
53
|
-
isValidSignature(signature: string): boolean;
|
|
54
|
-
/** @inheritdoc */
|
|
55
|
-
isValidTransactionId(txId: string): boolean;
|
|
41
|
+
allHexChars(str: string): boolean;
|
|
56
42
|
/**
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
* @param message
|
|
60
|
-
* @param prv
|
|
61
|
-
* @return signature
|
|
43
|
+
* Creates a signature using the Flare network parameters
|
|
44
|
+
* Returns a 65-byte signature (64 bytes signature + 1 byte recovery parameter)
|
|
62
45
|
*/
|
|
63
46
|
createSignature(network: FlareNetwork, message: Buffer, prv: Buffer): Buffer;
|
|
64
47
|
/**
|
|
65
|
-
*
|
|
66
|
-
* @param network
|
|
67
|
-
* @param message
|
|
68
|
-
* @param signature
|
|
69
|
-
* @param publicKey - public key instead of private key for verification
|
|
70
|
-
* @return true if it's verify successful
|
|
48
|
+
* Verifies a signature
|
|
71
49
|
*/
|
|
72
50
|
verifySignature(network: FlareNetwork, message: Buffer, signature: Buffer, publicKey: Buffer): boolean;
|
|
73
51
|
/**
|
|
74
|
-
*
|
|
75
|
-
* @param network
|
|
76
|
-
* @param message
|
|
77
|
-
* @param signature
|
|
78
|
-
* @return recovered public key
|
|
52
|
+
* Creates a new signature object
|
|
79
53
|
*/
|
|
80
|
-
|
|
81
|
-
sha256(buf: Uint8Array): Buffer;
|
|
54
|
+
createNewSig(sigHex: string): Signature;
|
|
82
55
|
/**
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
* @param
|
|
56
|
+
* Creates an empty signature with embedded address for signature slot identification.
|
|
57
|
+
* The address is embedded at position 90 (after the first 45 zero bytes).
|
|
58
|
+
* This allows the signing logic to determine which slot belongs to which address.
|
|
59
|
+
* @param addressHex The 20-byte address in hex format (40 chars, without 0x prefix)
|
|
87
60
|
*/
|
|
88
|
-
|
|
61
|
+
createEmptySigWithAddress(addressHex: string): Signature;
|
|
89
62
|
/**
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
* @param {DeprecatedTx} tx
|
|
93
|
-
* @param {string} blockchainId
|
|
94
|
-
* @returns true if tx is for blockchainId
|
|
63
|
+
* Extracts the embedded address from an empty signature.
|
|
64
|
+
* Returns the address hex string (40 chars) or empty string if not found.
|
|
95
65
|
*/
|
|
96
|
-
|
|
66
|
+
getAddressFromEmptySig(sig: string): string;
|
|
97
67
|
/**
|
|
98
|
-
*
|
|
99
|
-
* Output could be EVM or PVM output.
|
|
100
|
-
* @param {DeprecatedOutput} output
|
|
101
|
-
* @returns {boolean} output has transferable output structure
|
|
68
|
+
* Computes SHA256 hash
|
|
102
69
|
*/
|
|
103
|
-
|
|
70
|
+
sha256(buf: Uint8Array): Buffer;
|
|
104
71
|
/**
|
|
105
|
-
*
|
|
106
|
-
* Output could be EVM or PVM output.
|
|
107
|
-
* @param {Output} output
|
|
108
|
-
* @returns {boolean} output is TransferableOutput
|
|
72
|
+
* Validates raw transaction format
|
|
109
73
|
*/
|
|
110
|
-
|
|
74
|
+
validateRawTransaction(rawTransaction: string): void;
|
|
111
75
|
/**
|
|
112
|
-
*
|
|
113
|
-
* @param network required to stringify addresses
|
|
114
|
-
* @return mapper function
|
|
76
|
+
* Checks if output is TransferableOutput type
|
|
115
77
|
*/
|
|
116
|
-
|
|
78
|
+
isTransferableOutput(output: Output): output is TransferableOutput;
|
|
117
79
|
/**
|
|
118
|
-
*
|
|
119
|
-
* @param network required to stringify addresses
|
|
120
|
-
* @return mapper function
|
|
80
|
+
* Maps outputs to entry format
|
|
121
81
|
*/
|
|
122
82
|
mapOutputToEntry(network: FlareNetwork): (Output: any) => Entry;
|
|
123
83
|
/**
|
|
124
|
-
*
|
|
125
|
-
* @param hex string
|
|
126
|
-
* @returns hex without 0x
|
|
84
|
+
* Removes 0x prefix from hex string
|
|
127
85
|
*/
|
|
128
86
|
removeHexPrefix(hex: string): string;
|
|
129
87
|
/**
|
|
130
|
-
*
|
|
131
|
-
* @param {string} outputidx number
|
|
132
|
-
* @return {Buffer} buffer of size 4 with that number value
|
|
88
|
+
* Converts output index to buffer
|
|
133
89
|
*/
|
|
134
90
|
outputidxNumberToBuffer(outputidx: string): Buffer;
|
|
135
91
|
/**
|
|
136
|
-
*
|
|
137
|
-
* @param {Buffer} outputidx
|
|
138
|
-
* @return {string} outputidx number
|
|
92
|
+
* Converts output index buffer to number string
|
|
139
93
|
*/
|
|
140
94
|
outputidxBufferToNumber(outputidx: Buffer): string;
|
|
141
95
|
/**
|
|
142
|
-
*
|
|
143
|
-
|
|
144
|
-
|
|
96
|
+
* Helper method to convert address components to string
|
|
97
|
+
*/
|
|
98
|
+
addressToString: (hrp: string, prefix: string, address: Buffer) => string;
|
|
99
|
+
/**
|
|
100
|
+
* Decodes a base58 string with checksum to a Buffer
|
|
101
|
+
*/
|
|
102
|
+
cb58Decode(str: string): Buffer;
|
|
103
|
+
/**
|
|
104
|
+
* Validates a checksum on a Buffer and returns true if valid, false if not
|
|
105
|
+
*/
|
|
106
|
+
private validateChecksum;
|
|
107
|
+
/**
|
|
108
|
+
* Encodes a Buffer as a base58 string with checksum
|
|
145
109
|
*/
|
|
146
|
-
|
|
110
|
+
cb58Encode(bytes: Buffer): string;
|
|
147
111
|
/**
|
|
148
|
-
*
|
|
149
|
-
* @param {string} hrp - Human readable part
|
|
150
|
-
* @param {string} chainid - Chain identifier
|
|
151
|
-
* @param {Buffer} addressBuffer - Address buffer
|
|
152
|
-
* @returns {string} Address string
|
|
112
|
+
* Adds a checksum to a Buffer and returns the concatenated result
|
|
153
113
|
*/
|
|
154
|
-
|
|
114
|
+
private addChecksum;
|
|
115
|
+
/**
|
|
116
|
+
* Parse an address string into a Buffer
|
|
117
|
+
* @param address - The address to parse
|
|
118
|
+
* @returns Buffer containing the parsed address
|
|
119
|
+
*/
|
|
120
|
+
parseAddress: (address: string) => Buffer;
|
|
121
|
+
stringToAddress: (address: string, hrp?: string) => Buffer;
|
|
122
|
+
flareIdString(value: string): Id;
|
|
123
|
+
/**
|
|
124
|
+
* FlareJS wrapper to recover signature
|
|
125
|
+
* @param network
|
|
126
|
+
* @param message
|
|
127
|
+
* @param signature
|
|
128
|
+
* @return recovered public key
|
|
129
|
+
*/
|
|
130
|
+
recoverySignature(network: FlareNetwork, message: Buffer, signature: Buffer): Buffer;
|
|
155
131
|
}
|
|
156
132
|
declare const utils: Utils;
|
|
157
133
|
export default utils;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAA+B,EAAE,EAAE,MAAM,uBAAuB,CAAC;AACvG,OAAO,EACL,SAAS,EACT,KAAK,EAKN,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,OAAO,EAAqB,MAAM,EAAE,MAAM,SAAS,CAAC;AAIpD,qBAAa,KAAM,YAAW,SAAS;IACrC,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAG3C,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAG5C;;OAEG;IACI,SAAS,CAAC,eAAe,EAAE,MAAM,EAAE,EAAE,mBAAmB,EAAE,MAAM,EAAE,GAAG,OAAO;IAInF;;;;OAIG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO;IAYnD,OAAO,CAAC,mBAAmB;IAI3B;;;;OAIG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IASrC;;;;OAIG;IACH,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IA6BtC;;;;OAIG;IACH,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAOvC;;OAEG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIjC;;;OAGG;IACH,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IA4B5E;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAStG;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS;IAKvC;;;;;OAKG;IACH,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS;IAQxD;;;OAGG;IACH,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAS3C;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM;IAI/B;;OAEG;IACH,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IASpD;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,kBAAkB;IAIlE;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,CAAC,MAAM,KAAA,KAAK,KAAK;IAmB1D;;OAEG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIpC;;OAEG;IACH,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAIlD;;OAEG;IACH,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAIlD;;OAEG;IACI,eAAe,QAAS,MAAM,UAAU,MAAM,WAAW,MAAM,KAAG,MAAM,CAK7E;IAEF;;OAEG;IACI,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAQtC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IASxB;;OAEG;IACI,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAKxC;;OAEG;IACH,OAAO,CAAC,WAAW;IAOnB;;;;OAIG;IACI,YAAY,YAAa,MAAM,KAAG,MAAM,CAE7C;IAEK,eAAe,YAAa,MAAM,QAAQ,MAAM,KAAG,MAAM,CA4B9D;IAEF,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,EAAE;IAIhC;;;;;;OAMG;IACH,iBAAiB,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;CAwBrF;AAED,QAAA,MAAM,KAAK,OAAc,CAAC;AAC1B,eAAe,KAAK,CAAC"}
|