@silencelaboratories/walletprovider-sdk 0.1.0 → 0.3.0

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/README.md CHANGED
@@ -10,8 +10,8 @@ In order to run it execute the following:
10
10
  1. Build the library
11
11
 
12
12
  ```
13
- bun install
14
- bun run build
13
+ npm install
14
+ npm run build
15
15
  ```
16
16
 
17
17
  2. Run the demo
@@ -49,37 +49,44 @@ For description of classes, interfaces, types, please refer to [documentation](.
49
49
  ## Authentication
50
50
 
51
51
 
52
- Users authenticate using an EOA wallet during **key generation** and register an ephemeral signing key pair and associates it with their identity.
52
+ Users authenticate using **EOA wallet** or **Passkey** during **key generation** and register an ephemeral signing key pair and associates it with their identity.
53
53
 
54
54
  Frontend can later use the ephemeral signing key pair to authorize **signing requests** for duration of the session without the need for repeated user interaction, providing a seamless and secure authentication mechanism.
55
55
 
56
- We use [EOAAuth](./docs/walletprovider-sdk.eoaauth.md) to authenticate the user **during keygen**. The `EOAAuth` object is created with the user's wallet address, ephemeral public key, and lifetime of the key in seconds.
56
+ Key generation:
57
+ - [EOAAuth](./docs/walletprovider-sdk.eoaauth.md) to authenticate the user **during keygen**. The `EOAAuth` object is created with the user's wallet address.
58
+
59
+ - [PasskeyAuth](./docs/walletprovider-sdk.passkeyauth.md) to authenticate the user **during keygen**. The `PasskeyAuth` object is created with the [PasskeyUser](./docs/walletprovider-sdk.passkeyuser.md), [RelyingPartyConfig](./docs/walletprovider-sdk.relyingpartyconfig.md).
60
+
61
+ - The ephemeral public key and lifetime of the key in seconds will be associated with both `EOAAuth` and `PasskeyAuth` objects.
57
62
 
58
- We then use [EphAuth](./docs/walletprovider-sdk.ephauth.md) to authenticate the user **during signing**. The `EphAuth` object is created with the user's wallet address and ephemeral keypair.
63
+ Signature generation:
64
+ - [EphAuth](./docs/walletprovider-sdk.ephauth.md) to authenticate the user **during signing**. The `EphAuth` object is created with the ephemeral keypair.
59
65
 
60
66
  ## Keygen
61
67
 
62
68
 
63
69
  The full working example is in the [demo](https://github.com/silence-laboratories/walletprovider-sdk/blob/a75d7a009fb4d3629d353d53f8c27c34190c9035/demo/src/routes/%2Bpage.svelte#L89).
64
- The core object to use is the [NetworkSigner](./docs/walletprovider-sdk.networksigner.md).
70
+ The core object to use is the [NetworkSigner](./docs/walletprovider-sdk.networksigner.md). It allows to generate keys and do signatures.
65
71
 
66
- It allows to generate keys and do signatures. In order to create, you need two other components. The [WalletProviderServiceClient](./docs/walletprovider-sdk.walletproviderserviceclient.md) that connects to the Backend part of the SDK, and the authentication module. Currently we provide EOA authentication via [EOAAuth](./docs/walletprovider-sdk.eoaauth.md).
72
+ In order to create your keys, you need two other components. The [WalletProviderServiceClient](./docs/walletprovider-sdk.walletproviderserviceclient.md) that connects to the Backend part of the SDK, and the **authentication module**.
67
73
 
68
-
69
- Let's create the `NetworkSigner`
74
+ ### Authenticate with EOA wallet
75
+ We provide EOA authentication via [EOAAuth](./docs/walletprovider-sdk.eoaauth.md) module. Let's create the `NetworkSigner` with associated `EOAAuth` object.
70
76
 
71
77
  ```ts
72
78
  // Generate ephemeral secret key esk
73
- const sk = ed.utils.randomPrivateKey();
74
- ephSK = sk;
79
+ const sk = generateEphPrivateKey();
75
80
  // Derive public part epk from esk
76
- ephPK = await ed.getPublicKeyAsync(sk);
77
-
81
+ const ephPK = getEphPublicKey(sk);
82
+ // Arbitrary ID to identify the ephemeral key
83
+ const ephId = uuidv4();
78
84
  // Create a client that connects to the backend service
79
85
  const wpClient = await createWalletProviderService(clusterConfig);
80
86
 
81
87
  // Create EOA authenticator, signature will include epk
82
88
  const eoaAuth = new EOAAuth(
89
+ ephId,
83
90
  accountsFromBrowserWallet[0],
84
91
  new BrowserWallet(),
85
92
  ephPK,
@@ -91,7 +98,7 @@ const eoaAuth = new EOAAuth(
91
98
  const sdk = new NetworkSigner(wpClient, threshold, partiesNumber, eoaAuth);
92
99
  ```
93
100
 
94
- Now you can generate a key, using the [authenticateAndCreateKey](./docs/walletprovider-sdk.networksigner.authenticateandcreatekey.md) method. The method accepts optional permissions. No permissions means _allow all operations_.
101
+ Now you can generate a key, using the [generateKey](./docs/walletprovider-sdk.networksigner.authenticateandcreatekey.md) method. The method accepts optional permissions. No permissions means _allow all operations_.
95
102
 
96
103
  ```ts
97
104
  const permissions = {
@@ -110,12 +117,60 @@ const permissions = {
110
117
  };
111
118
 
112
119
  // Generate a new key
113
- let resp: KeygenResponse = await sdk.authenticateAndCreateKey(JSON.stringify(permissions));
120
+ let resp: KeygenResponse = await sdk.generateKey(JSON.stringify(permissions));
121
+ ```
122
+
123
+ Calling this method will cause to the Browser Wallet window to pop up, requesting the User to sign the request.
124
+
125
+ The returned [KeygenResponse](./docs/walletprovider-sdk.keygenresponse.md) contains `keyId` and `publicKey`. The `publicKey` is the public part of the key generated by Silent Network. Use the `keyId` in subsequent calls to sign.
126
+
127
+ The `esk` key can be later used by the frontend in subsequent signgen requests for authenticating.
128
+
129
+ ### Authenticate with Passkey
130
+ We provide Passkey authentication via [PasskeyAuth](./docs/walletprovider-sdk.passkeyauth.md) module. Let's create the `NetworkSigner` with associated `PasskeyAuth` object.
131
+
132
+ ```ts
133
+ // Generate ephemeral secret key esk
134
+ const sk = generateEphPrivateKey();
135
+ // Derive public part epk from esk
136
+ const ephPK = getEphPublicKey(sk);
137
+ // Arbitrary ID to identify the ephemeral key
138
+ const ephId = uuidv4();
139
+ // Create a client that connects to the backend service
140
+ const wpClient = await createWalletProviderService(clusterConfig);
141
+ // Here we configure the relying party for local development
142
+ const rpConfig: RelyingPartyConfig = {
143
+ rpId: 'localhost',
144
+ rpName: 'http://localhost:5173',
145
+ };
146
+ // Information about the owner of the passkey
147
+ const passkeyUser: PasskeyUser = {
148
+ id: userId,
149
+ displayName: 'Alice',
150
+ name: 'alice@gmail.com ' + userId, // For development purposes
151
+ };
152
+
153
+ // Get passkey credential id from your storage
154
+ const credentialId = getPasskeyCredentialId();
155
+ // Create EOA authenticator, signature will include epk
156
+ const passkeyAuth = new PasskeyAuth(
157
+ rpConfig,
158
+ passkeyUser,
159
+ ephId,
160
+ ephPK,
161
+ // Lifetime of one hour
162
+ 60 * 60,
163
+ // If credentialId is null, we will do passkey register, otherwise, we will do passkey auth/login
164
+ credentialId,
165
+ );
166
+
167
+ // Create a new signer instance
168
+ const sdk = new NetworkSigner(wpClient, threshold, partiesNumber, passkeyAuth);
114
169
  ```
115
170
 
116
- Calling this method will cause to the Browser Wallet window to pop up, requesting the User to sign the request. After execution [KeygenResponse](./docs/walletprovider-sdk.keygenresponse.md) is returned.
171
+ Now you can generate a key like in the EOA example by calling the [generateKey](./docs/walletprovider-sdk.networksigner.authenticateandcreatekey.md) method.
117
172
 
118
- The [KeygenResponse](./docs/walletprovider-sdk.keygenresponse.md) contains `keyId` and `publicKey`. The `publicKey` is the public part of the key generated by Silent Network. Use the `keyId` in subsequent calls to sign.
173
+ Calling this method will prompt the browser to request Passkey User Verification. Once user verification is done, the [KeygenResponse](./docs/walletprovider-sdk.keygenresponse.md) is returned.
119
174
 
120
175
  The `esk` key can be later used by the frontend in subsequent signgen requests for authenticating.
121
176
 
@@ -125,81 +180,67 @@ The full signing example is [here](https://github.com/silence-laboratories/walle
125
180
 
126
181
  Let's create NetworkSigner for signing. Note the `EphAuth` is used to avoid user interaction when generating the signatures.
127
182
  ```ts
128
- const authModule = new EphAuth(accountsFromBrowserWallet[0], ephSK!);
183
+ const authModule = new EphAuth(ephId, ephSK);
129
184
  // Create a new signer instance
130
185
  const sdk = new NetworkSigner(wpClient, threshold, partiesNumber, authModule);
131
186
  ```
132
187
 
133
188
 
134
- Use the [NetworkSigner.authenticateAndSign](./docs/walletprovider-sdk.networksigner.authenticateandsign.md) method in order to generate a signature.
189
+ Use the [NetworkSigner.signMessage](./docs/walletprovider-sdk.networksigner.authenticateandsign.md) method in order to generate a signature.
135
190
 
136
191
  ```ts
137
192
  let signMessage = JSON.stringify({
138
- userOperation: {
139
- sender: '0x8d4cb2540d993fe34c646299f1ab4af3012ff34c',
140
- nonce: '0x7',
141
- initCode: '',
142
- callData: '0000189a...',
143
- callGasLimit: '123130',
144
- verificationGasLimit: '153427',
145
- preVerificationGas: '66768',
146
- maxFeePerGas: '',
147
- maxPriorityFeePerGas: '',
148
- paymasterAndData: '',
149
- },
150
- entryPointVersion: 'v0.6.0',
151
- entryPointAddress: '0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789',
152
- chainId: 80002,
153
- });
154
-
155
- let resp = await sdk.authenticateAndSign(selectedKeyId, signMessage);
193
+ message: JSON.stringify({
194
+ userOperation: {
195
+ sender: '0x8d4cb2540d993fe34c646299f1ab4af3012ff34c',
196
+ nonce: '0x7',
197
+ initCode: '0x',
198
+ callData: '0000189...',
199
+ callGasLimit: '0x18473',
200
+ verificationGasLimit: '0x18473',
201
+ preVerificationGas: '66768',
202
+ maxFeePerGas: '',
203
+ maxPriorityFeePerGas: '',
204
+ paymasterAndData: '0x',
205
+ },
206
+ entryPointVersion: 'v0.6.0',
207
+ entryPointAddress: '0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789',
208
+ chainId: 80002,
209
+ }),
210
+ requestType: 'accountAbstractionTx',
211
+ });
212
+
213
+ let resp = await sdk.signMessage(selectedKeyId, signMessage);
156
214
  ```
157
215
 
158
216
  The [SignResponse](./docs/walletprovider-sdk.signresponse.md) contains the signature `sign` and the recovery ID `recid`.
159
217
 
160
- # Developing the library
161
-
162
- Audience of this section are library developers.
163
-
164
- ## Bun runtime is required
165
-
166
- Install bun from https://bun.sh
167
218
 
168
219
  ## Install dependencies
169
220
 
170
221
  ```bash
171
- bun install
222
+ npm install
172
223
  ```
173
224
 
174
225
  ## Build
175
226
 
176
227
  ```bash
177
- bun run build
228
+ npm run build
178
229
  ```
179
230
 
180
231
  The output will be in the `dist` folder.
181
232
 
182
- ## Test
183
-
184
- Create `*.test.ts` files and run tests with:
185
-
186
- ```bash
187
- bun run test
188
- # or watch test
189
- bun run test:watch
190
- ```
191
-
192
233
  ## End to end tests
193
234
  Please refer to [README.md](./e2e-tests/README.md) for instructions how to execute them.
194
235
 
195
236
  ## Format the code
196
237
 
197
238
  ```bash
198
- bun run format
239
+ npm run format
199
240
  ```
200
241
 
201
242
  ## Generate the documentation
202
243
 
203
244
  ```bash
204
- bun run docs
205
- ```
245
+ npm run docs
246
+ ```
@@ -1,14 +1,10 @@
1
1
  /** Externally Owned Account (EOA) atuhentication. Uses secret key stored on a wallet to sign requests.
2
2
  * The requests are presented to the user in a readable form by using TypedData (EIP712).
3
3
  */
4
- import { KeygenSetupOpts, SignSetupOpts } from './networkSigner.ts';
5
- import { type UserAuthentication } from './authentication.ts';
4
+ import { KeygenSetupOpts } from './networkSigner';
5
+ import { type UserAuthentication } from './authentication';
6
6
  import { type TypedDataDomain } from 'viem';
7
- export type EphClaim = {
8
- eoa: string;
9
- ephPK: string;
10
- expiry: number;
11
- };
7
+ import { EphClaim } from './ephemeralAuthentication';
12
8
  export type FieldDefinition = {
13
9
  name: string;
14
10
  type: string;
@@ -50,23 +46,12 @@ export interface IBrowserWallet {
50
46
  signTypedData<T>(from: string, request: TypedData<T>): Promise<unknown>;
51
47
  }
52
48
  /** Present the request to the User using wallet UI, and ask for sign.
53
- * The signature is the authorization for the operation
49
+ * The signature is the authorization for keygen operation
54
50
  */
55
- export declare function authenticateUsingEOA({ setup, user_id, challenge, browserWallet, ephPK, lifetime, }: {
51
+ export declare function authenticateUsingEOA({ setup, eoa, challenge, browserWallet, ephClaim, }: {
56
52
  setup: KeygenSetupOpts;
57
- user_id: string;
53
+ eoa: string;
58
54
  challenge: string;
59
55
  browserWallet: IBrowserWallet;
60
- ephPK: Uint8Array;
61
- lifetime: number;
62
- }): Promise<UserAuthentication>;
63
- /** Present the request to the User using wallet UI, and ask for sign.
64
- * The signature is the authorization for the operation
65
- */
66
- export declare function authenticateUsingEphKey({ setup, user_id, challenge, ephSK, ephPK, }: {
67
- setup: SignSetupOpts;
68
- user_id: string;
69
- challenge: string;
70
- ephSK: Uint8Array;
71
- ephPK: Uint8Array;
56
+ ephClaim: EphClaim;
72
57
  }): Promise<UserAuthentication>;
@@ -1,17 +1,13 @@
1
- import { KeygenSetupOpts, SignSetupOpts } from './networkSigner';
1
+ import { AddEphemeralKeyOpts, KeygenSetupOpts, SignSetupOpts } from './networkSigner';
2
2
  import { IBrowserWallet } from './EOAauthentication';
3
+ import { PasskeyUser, RelyingPartyConfig } from './passkeyAuthentication';
4
+ import { EphClaim } from './ephemeralAuthentication';
3
5
  /** Type of the request authentication
4
6
  * @alpha
5
7
  */
6
- export declare enum AuthMethod {
7
- /** Authentication using Externally Owned Account */
8
- EOA = 0,
9
- /** No authentication */
10
- NONE = 1
11
- }
12
8
  export type UserCredentials = {
13
9
  id: string;
14
- method: string;
10
+ method: 'eoa' | 'ephemeral' | 'passkey';
15
11
  credentials: string;
16
12
  };
17
13
  export type UserAuthentication = {
@@ -20,50 +16,98 @@ export type UserAuthentication = {
20
16
  };
21
17
  export interface AuthModule {
22
18
  authenticate({ setup, challenge, }: {
23
- setup: KeygenSetupOpts | SignSetupOpts;
19
+ setup: KeygenSetupOpts | SignSetupOpts | AddEphemeralKeyOpts;
24
20
  challenge: string;
25
21
  }): Promise<UserAuthentication>;
26
22
  }
27
- /** The `AuthModule` implementing Externally Owned Account authentication.
23
+ export interface DkgAuthModule extends AuthModule {
24
+ get ephClaim(): EphClaim;
25
+ }
26
+ /** The `EOAAuth` implementing Externally Owned Account authentication.
28
27
  * @alpha
29
28
  */
30
- export declare class EOAAuth implements AuthModule {
31
- /** User ID, typically the ETH address that is used to do authentication */
32
- userId: string;
29
+ export declare class EOAAuth implements DkgAuthModule {
33
30
  /** An interface to the wallet, like MetaMask, that is used to sign the requests */
34
- browserWallet: IBrowserWallet;
35
- /** Public key of the ephemeral key */
36
- ephPK: Uint8Array;
37
- /** Lifetime of the ephemeral key */
38
- lifetime: number;
39
- constructor(userId: string, browserWallet: IBrowserWallet, ephPK: Uint8Array, lifetime?: number);
31
+ private browserWallet;
32
+ /** the ETH address that is used to do EOA authentication */
33
+ private eoa;
34
+ /** Ephemeral key claim */
35
+ ephClaim: EphClaim;
36
+ /**
37
+ *
38
+ * @param ephId - Ephemeral key ID
39
+ * @param eoa - Ethereum address
40
+ * @param browserWallet - Interface to the wallet provider, like MetaMask, that is used to sign the requests
41
+ * @param ephPK - Ephemeral public key
42
+ * @param lifetime - Lifetime of the ephemeral key. Default is 1 hour
43
+ */
44
+ constructor(ephId: string, eoa: string, browserWallet: IBrowserWallet, ephPK: Uint8Array, lifetime: number);
45
+ private validateInputs;
40
46
  /**
41
47
  * Prepares a message to present on the Browser Wallet window and requests to sign it.
42
- * @param setup - either Keygen or Sign setup options
48
+ * @param setup - Keygen setup options
43
49
  * @param challenge - the challenge received from the backend
44
50
  *
45
51
  * @public
46
52
  */
47
- authenticate({ setup, challenge, }: {
48
- setup: KeygenSetupOpts | SignSetupOpts;
53
+ authenticate({ setup, challenge }: {
54
+ setup: KeygenSetupOpts;
49
55
  challenge: string;
50
56
  }): Promise<UserAuthentication>;
51
57
  }
52
- /** An Ephmeral key used to locally sign the signature requests to network.
58
+ /** The `EphAuth` module is only used for signing requests to the network.
59
+ * @alpha
60
+ * An Ephmeral key used to locally sign the signature requests to network.
53
61
  * This eph key is registered during keygen. The key is used to sign the requests without
54
62
  * asking the user to sign the request each time.
55
- * The auth module is only used for signing requests to the network.
56
63
  * */
57
64
  export declare class EphAuth implements AuthModule {
58
- /** User ID, typically the ETH address that is used to do authentication */
59
- userId: string;
60
65
  /** Secret key of the ephemeral keypair */
61
- ephSK: Uint8Array;
62
- /** Public key of the ephemeral keypair */
63
- ephPK: Uint8Array;
64
- constructor(userId: string, ephSK: Uint8Array);
66
+ private ephSK;
67
+ /** Ephemeral key claim */
68
+ private ephClaim;
69
+ /**
70
+ *
71
+ * @param ephId - Ephemeral key ID
72
+ * @param ephSK - Ephemeral secret key
73
+ */
74
+ constructor(ephId: string, ephSK: Uint8Array);
75
+ /**
76
+ * Prepares a message to present on the Browser Wallet window and requests to sign it.
77
+ * @param setup - Signgen setup options
78
+ * @param challenge - the challenge received from the backend
79
+ *
80
+ * @public
81
+ */
82
+ authenticate({ setup, challenge }: {
83
+ setup: SignSetupOpts;
84
+ challenge: string;
85
+ }): Promise<UserAuthentication>;
86
+ }
87
+ /** The `AuthModule` implementing Passkey authentication.
88
+ * @alpha
89
+ */
90
+ export declare class PasskeyAuth implements DkgAuthModule {
91
+ /** Replying party object. Read more: https://developer.mozilla.org/en-US/docs/Web/API/PublicKeyCredentialCreationOptions#rp */
92
+ private rpConfig;
93
+ /** ID of the acceptable credential by user. App proves that user has passkey credential by passing the value of this field */
94
+ private allowCredentialId;
95
+ /** Passkey user information, only requires while registering. Read more: https://developer.mozilla.org/en-US/docs/Web/API/PublicKeyCredentialCreationOptions#user */
96
+ private user;
97
+ /** Ephemeral key claim */
98
+ ephClaim: EphClaim;
99
+ /**
100
+ *
101
+ * @param rpConfig - Passkey relying party configuration. Read more: https://developer.mozilla.org/en-US/docs/Web/API/PublicKeyCredentialCreationOptions#rp
102
+ * @param user - Passkey user information, only requires while registering. Read more: https://developer.mozilla.org/en-US/docs/Web/API/PublicKeyCredentialCreationOptions#user
103
+ * @param allowCredentialId - ID of the acceptable credential by user. App proves that user has passkey credential by passing the value of this field
104
+ * @param ephId - Ephemeral key ID
105
+ * @param ephPK - Ephemeral public key
106
+ * @param lifetime - Lifetime of the ephemeral key. Default is 1 hour
107
+ */
108
+ constructor(rpConfig: RelyingPartyConfig, user: PasskeyUser | null, allowCredentialId: string | null, ephId: string, ephPK: Uint8Array, lifetime: number);
65
109
  authenticate({ setup, challenge, }: {
66
- setup: KeygenSetupOpts | SignSetupOpts;
110
+ setup: KeygenSetupOpts | AddEphemeralKeyOpts;
67
111
  challenge: string;
68
112
  }): Promise<UserAuthentication>;
69
113
  }
@@ -1,4 +1,3 @@
1
- export declare const decodeHex: (s: string) => Uint8Array;
2
- export declare const encodeHex: (a: Uint8Array) => string;
3
1
  export declare const decodeBase64: (b64: string) => Uint8Array;
4
2
  export declare const encodeBase64: (b: Uint8Array) => string;
3
+ export declare const arrayBufferToBase64Url: (a: ArrayBuffer) => string;
@@ -0,0 +1,21 @@
1
+ import { UserAuthentication } from './authentication';
2
+ import { SignSetupOpts } from './networkSigner';
3
+ export declare class EphClaim {
4
+ ephId: string;
5
+ ephPK: string;
6
+ expiry: number;
7
+ constructor(ephId: string, ephPK: Uint8Array, lifetime?: number);
8
+ private validateInputs;
9
+ toJSON(): string;
10
+ }
11
+ /** Locally sign the signature requests to network without asking the user, the ephSK is registered during keygen.
12
+ * The signature is the authorization for signgen operation
13
+ */
14
+ export declare function authenticateUsingEphKey({ setup, challenge, ephSK, ephClaim, }: {
15
+ setup: SignSetupOpts;
16
+ challenge: string;
17
+ ephSK: Uint8Array;
18
+ ephClaim: EphClaim;
19
+ }): Promise<UserAuthentication>;
20
+ export declare function generateEphPrivateKey(): Uint8Array;
21
+ export declare function getEphPublicKey(ephSK: Uint8Array): Uint8Array;
@@ -0,0 +1 @@
1
+ "use strict";var S=Object.defineProperty;var Q=Object.getOwnPropertyDescriptor;var G=Object.getOwnPropertyNames;var z=Object.prototype.hasOwnProperty;var Y=(n,e,t)=>e in n?S(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var X=(n,e)=>{for(var t in e)S(n,t,{get:e[t],enumerable:!0})},Z=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of G(e))!z.call(n,i)&&i!==t&&S(n,i,{get:()=>e[i],enumerable:!(r=Q(e,i))||r.enumerable});return n};var j=n=>Z(S({},"__esModule",{value:!0}),n);var s=(n,e,t)=>Y(n,typeof e!="symbol"?e+"":e,t);var se={};X(se,{EOAAuth:()=>I,EphAuth:()=>E,NetworkSigner:()=>C,PasskeyAuth:()=>K,WalletProviderServiceClient:()=>A,computeAddress:()=>V,generateEphPrivateKey:()=>q,getEphPublicKey:()=>B});module.exports=j(se);var U=require("js-base64");var R=n=>btoa(String.fromCodePoint.apply(null,Array.from(n))),c=n=>U.Base64.fromUint8Array(new Uint8Array(n),!0);var h=(n,e)=>{u(typeof e!="string",`${n} must be string`),u((e==null?void 0:e.trim().length)===0,`${n} cannot be empty`)},w=n=>{u(!(n instanceof Uint8Array),"key must be an Uint8Array"),u(n.length!==32,"ed25519: key length must be 32 bytes")},u=(n,e)=>{if(n)throw new Error(e)};var A=class{constructor(e){s(this,"walletProviderId");s(this,"walletProviderUrl");s(this,"passkeyCredentialId");this.walletProviderId=e.walletProviderId,this.walletProviderUrl=e.walletProviderUrl}getWalletId(){return this.walletProviderId}async startKeygen({setup:e,authModule:t}){return this.connect(e,t).then(r=>{var p,l;let i=r.split(":");u(i.length!==2,"Invalid keygen response from network");let a=(p=i[0])==null?void 0:p.split("=")[1];return{publicKey:(l=i[1])==null?void 0:l.split("=")[1],keyId:a,passkeyCredentialId:this.passkeyCredentialId}})}async startSigngen({setup:e,authModule:t}){return this.connect(e,t).then(r=>{var p,l;let i=r.split(":");u(i.length!==2,"Invalid signgen response from network");let a=(p=i[0])==null?void 0:p.split("=")[1],o=(l=i[1])==null?void 0:l.split("=")[1];if(a===void 0||o===void 0)throw new Error("Invalid signgen response from network");return{sign:a,recid:parseInt(o)}})}async addEphemeralKey({setup:e,authModule:t}){return this.connect(e,t).then(r=>({status:r}))}connect(e,t){return new Promise((r,i)=>{let a=0,o=e.queryPath;o==="signgen"&&(e.message=R(new TextEncoder().encode(e.message)));let p=new WebSocket(`${this.walletProviderUrl}/${o}`);p.addEventListener("open",l=>{switch(console.debug(`Connection opened in state ${a} with event ${JSON.stringify(l,void 0," ")}`),a){case 0:a=1,p.send(JSON.stringify(e));break;case 1:case 2:a=3,i("Incorrect protocol state");break;case 3:break}}),p.addEventListener("message",async l=>{switch(console.debug(`Connection message in state ${a} with event ${JSON.stringify(l,void 0," ")}`),a){case 0:a=3,i("Incorrect protocol state");break;case 1:{a=2;try{let d=await t.authenticate({setup:e,challenge:l.data});d.credentials.method==="passkey"&&(this.passkeyCredentialId=d.credentials.id),p.send(JSON.stringify(d))}catch(d){i(d)}break}case 2:a=3,p.close(),r(l.data);break;case 3:break}}),p.addEventListener("error",l=>{console.debug(`Connection error in state ${a} with event ${JSON.stringify(l,void 0," ")}`),a!=3&&(a=3,i("Incorrect protocol state"))}),p.addEventListener("close",l=>{console.debug(`Connection closed in state ${a} with event ${JSON.stringify(l,void 0," ")}`),a!=3&&(a=3,i("Incorrect protocol state"))})})}};var ee=1,T=2,te=3,M=[{name:"tag",type:"uint16"},{name:"value",type:"string"}],g=class{constructor({t:e,n:t,key_label:r,permissions:i}){s(this,"t");s(this,"n");s(this,"key_label");s(this,"metadata");this.t=e,this.n=t,r&&(this.key_label=r),this.metadata=[],i&&this.metadata.push({tag:ee,value:i})}set ephClaim(e){this.metadata.push({tag:T,value:e.toJSON()})}get queryPath(){return"keygen"}get requestSchema(){return{Request:[{name:"setup",type:"KeygenSetupOpts"},{name:"challenge",type:"string"}],KeygenSetupOpts:[{name:"t",type:"uint32"},{name:"n",type:"uint32"},{name:"metadata",type:"TaggedValue[]"}],TaggedValue:M}}},b=class{constructor({t:e,key_id:t,message:r}){s(this,"t");s(this,"key_id");s(this,"message");this.t=e,this.key_id=t,this.message=r}get queryPath(){return"signgen"}},f=class{constructor({n:e,key_id:t}){s(this,"n");s(this,"key_id");s(this,"metadata");this.n=e,this.key_id=t,this.metadata=[],this.metadata.push({tag:te,value:t})}set ephClaim(e){this.metadata.push({tag:T,value:e.toJSON()})}get queryPath(){return"addEphemeralKey"}get requestSchema(){return{Request:[{name:"setup",type:"AddEphemeralKeyOpts"},{name:"challenge",type:"string"}],AddEphemeralKeyOpts:[{name:"n",type:"uint32"},{name:"metadata",type:"TaggedValue[]"}],TaggedValue:M}}},C=class{constructor(e,t,r,i){s(this,"authModule");s(this,"threshold");s(this,"totalNodes");s(this,"wp_client");u(t<2,`Threshold = ${t} must be at least 2`),u(r<t,`Total nodes = ${r} must be greater or equal to threshold = ${t}`),this.threshold=t,this.totalNodes=r,this.authModule=i,this.wp_client=e}async generateKey(e){let t=new g({t:this.threshold,n:this.totalNodes,permissions:e,key_label:void 0});return this.setEphClaimOf(t),await this.wp_client.startKeygen({setup:t,authModule:this.authModule})}async signMessage(e,t){h("keyId",e),h("message",t);let r=new b({t:this.threshold,key_id:e,message:t});return await this.wp_client.startSigngen({setup:r,authModule:this.authModule})}async addEphemeralKey(e){h("keyId",e);let t=new f({n:this.totalNodes,key_id:e});return this.setEphClaimOf(t),await this.wp_client.addEphemeralKey({setup:t,authModule:this.authModule})}setEphClaimOf(e){e.ephClaim=this.authModule.ephClaim}};var ne={name:"SilentShard authentication",version:"0.1.0"},re=[{name:"name",type:"string"},{name:"version",type:"string"}];function ie(n,e,t){let r;return n instanceof g?r=new g({t:n.t,n:n.n,key_label:n.key_label,permissions:void 0}):r=new f({n:n.n,key_id:n.key_id}),r.ephClaim=t,{types:{EIP712Domain:re,...n.requestSchema},domain:ne,primaryType:"Request",message:{setup:r,challenge:e}}}async function N({setup:n,eoa:e,challenge:t,browserWallet:r,ephClaim:i}){let a=ie(n,t,i),o=await r.signTypedData(e,a);return{credentials:{credentials:i.toJSON(),method:"eoa",id:e},signature:o}}var W=require("@noble/curves/ed25519");var O=require("js-base64"),k=require("viem");async function D({user:n,challenge:e,rpConfig:t,ephClaim:r}){let i=(0,k.hexToBytes)(`0x${e}`,{size:32}),a={publicKey:{authenticatorSelection:{residentKey:"preferred",userVerification:"required"},challenge:i,excludeCredentials:[],pubKeyCredParams:[{type:"public-key",alg:-7},{type:"public-key",alg:-257}],rp:{name:t.rpName,id:t.rpId},user:{...n,id:O.Base64.toUint8Array(n.id)}}},o=await navigator.credentials.create(a);if(o===null)throw new Error("No credential returned");let p=c(o.response.attestationObject),d={rawCredential:JSON.stringify({authenticatorAttachment:o.authenticatorAttachment,id:o.id,rawId:c(o.rawId),response:{attestationObject:p,clientDataJSON:c(o.response.clientDataJSON)},type:o.type}),origin:t.rpName,rpId:t.rpId};return{credentials:{credentials:r.toJSON(),method:"passkey",id:o.id},signature:JSON.stringify(d)}}async function J({challenge:n,allowCredentialId:e,rpConfig:t,ephClaim:r}){let i=(0,k.hexToBytes)(`0x${n}`,{size:32}),a=e?[{type:"public-key",id:O.Base64.toUint8Array(e)}]:[],o={publicKey:{userVerification:"required",challenge:i,allowCredentials:a}},p=await navigator.credentials.get(o);if(p===null)throw new Error("Failed to get navigator credentials");let l=p.response,d=l.userHandle;if(d===null)throw new Error("User handle cannot be null");let H=c(l.signature),L={rawCredential:JSON.stringify({authenticatorAttachment:p.authenticatorAttachment,id:p.id,rawId:c(p.rawId),response:{authenticatorData:c(l.authenticatorData),clientDataJSON:c(l.clientDataJSON),signature:H,userHandle:c(d)},type:p.type}),origin:t.rpName,rpId:t.rpId};return{credentials:{credentials:r.toJSON(),method:"passkey",id:p.id},signature:JSON.stringify(L)}}var x=require("viem"),P=require("@noble/curves/ed25519");var m=class{constructor(e,t,r=3600){s(this,"ephId");s(this,"ephPK");s(this,"expiry");this.validateInputs(e,t,r),this.ephId=e,this.ephPK=(0,x.toHex)(t),this.expiry=Math.floor(Date.now()/1e3)+r}validateInputs(e,t,r){h("ephId",e),w(t),u(Number.isInteger(r)===!1,"lifetime must be an integer");let i=r>0&&r<=365*24*60*60;u(!i,"lifetime must be greater than 0 and less than or equal to 365 days")}toJSON(){return JSON.stringify({ephId:this.ephId,ephPK:this.ephPK,expiry:this.expiry})}};async function _({setup:n,challenge:e,ephSK:t,ephClaim:r}){let i={setup:n,challenge:e},a=new TextEncoder,o=(0,x.toHex)(P.ed25519.sign(a.encode(JSON.stringify(i)),t));return{credentials:{credentials:r.toJSON(),method:"ephemeral",id:r.ephId},signature:o}}function q(){return P.ed25519.utils.randomPrivateKey()}function B(n){return P.ed25519.getPublicKey(n)}var $=require("viem");var I=class{constructor(e,t,r,i,a){s(this,"browserWallet");s(this,"eoa");s(this,"ephClaim");this.validateInputs(t,r),this.ephClaim=new m(e,i,a),this.browserWallet=r,this.eoa=t}validateInputs(e,t){u(!(0,$.isAddress)(e),"invalid Ethereum address format"),u(!((t==null?void 0:t.signTypedData)instanceof Function),"invalid browserWallet")}async authenticate({setup:e,challenge:t}){return await N({setup:e,eoa:this.eoa,challenge:t,browserWallet:this.browserWallet,ephClaim:this.ephClaim})}},E=class{constructor(e,t){s(this,"ephSK");s(this,"ephClaim");w(t),this.ephSK=t;let r=W.ed25519.getPublicKey(this.ephSK);this.ephClaim=new m(e,r)}async authenticate({setup:e,challenge:t}){return await _({setup:e,challenge:t,ephSK:this.ephSK,ephClaim:this.ephClaim})}},K=class{constructor(e,t,r,i,a,o){s(this,"rpConfig");s(this,"allowCredentialId");s(this,"user");s(this,"ephClaim");this.ephClaim=new m(i,a,o),this.rpConfig=e,this.user=t,this.allowCredentialId=r}async authenticate({setup:e,challenge:t}){let r=e.queryPath==="addEphemeralKey";if(this.allowCredentialId||r)return await J({allowCredentialId:this.allowCredentialId,challenge:t,rpConfig:this.rpConfig,ephClaim:this.ephClaim});if(this.user)return await D({user:this.user,challenge:t,rpConfig:this.rpConfig,ephClaim:this.ephClaim});throw new Error("Invalid arguments for passkey authentication")}};var v=require("viem/accounts"),F=require("@noble/curves/secp256k1");var y=require("viem");function V(n){if(n.startsWith("0x")&&(n=n.slice(2)),n.startsWith("04"))return(0,v.publicKeyToAddress)(`0x${n} `);if(n.startsWith("02")||n.startsWith("03")){let e=F.secp256k1.ProjectivePoint.fromHex(n).toHex(!1);return(0,v.publicKeyToAddress)(`0x${e}`)}else throw new Error("Invalid public key")}0&&(module.exports={EOAAuth,EphAuth,NetworkSigner,PasskeyAuth,WalletProviderServiceClient,computeAddress,generateEphPrivateKey,getEphPublicKey});
package/dist/index.d.ts CHANGED
@@ -1,6 +1,9 @@
1
- export { NetworkSigner, SignResponse, KeygenResponse } from './networkSigner.ts';
2
- export { AuthMethod, EOAAuth, EphAuth } from './authentication.ts';
3
- export type { IBrowserWallet, TypedData } from './EOAauthentication.ts';
4
- export type { ClientConfig, IWalletProviderServiceClient } from './walletProviderServiceClientInterface.ts';
5
- export { WalletProviderServiceClient } from './walletProviderServiceClient.ts';
6
- export { computeAddress } from './viemSigner.ts';
1
+ export type { SignResponse, KeygenResponse, AddEphemeralKeyResponse } from './networkSigner';
2
+ export type { IBrowserWallet, TypedData } from './EOAauthentication';
3
+ export type { ClientConfig, IWalletProviderServiceClient } from './walletProviderServiceClientInterface';
4
+ export type { PasskeyUser, RelyingPartyConfig } from './passkeyAuthentication';
5
+ export { WalletProviderServiceClient } from './walletProviderServiceClient';
6
+ export { NetworkSigner } from './networkSigner';
7
+ export { EOAAuth, EphAuth, PasskeyAuth } from './authentication';
8
+ export { computeAddress } from './viemSigner';
9
+ export { generateEphPrivateKey, getEphPublicKey } from './ephemeralAuthentication';
@@ -0,0 +1 @@
1
+ var $=Object.defineProperty,F=Object.defineProperties;var V=Object.getOwnPropertyDescriptors;var O=Object.getOwnPropertySymbols;var H=Object.prototype.hasOwnProperty,L=Object.prototype.propertyIsEnumerable;var w=(n,e,t)=>e in n?$(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,y=(n,e)=>{for(var t in e||(e={}))H.call(e,t)&&w(n,t,e[t]);if(O)for(var t of O(e))L.call(e,t)&&w(n,t,e[t]);return n},A=(n,e)=>F(n,V(e));var s=(n,e,t)=>w(n,typeof e!="symbol"?e+"":e,t);import{Base64 as Q}from"js-base64";var k=n=>btoa(String.fromCodePoint.apply(null,Array.from(n))),c=n=>Q.fromUint8Array(new Uint8Array(n),!0);var h=(n,e)=>{u(typeof e!="string","".concat(n," must be string")),u((e==null?void 0:e.trim().length)===0,"".concat(n," cannot be empty"))},S=n=>{u(!(n instanceof Uint8Array),"key must be an Uint8Array"),u(n.length!==32,"ed25519: key length must be 32 bytes")},u=(n,e)=>{if(n)throw new Error(e)};var C=class{constructor(e){s(this,"walletProviderId");s(this,"walletProviderUrl");s(this,"passkeyCredentialId");this.walletProviderId=e.walletProviderId,this.walletProviderUrl=e.walletProviderUrl}getWalletId(){return this.walletProviderId}async startKeygen({setup:e,authModule:t}){return this.connect(e,t).then(r=>{var p,l;let i=r.split(":");u(i.length!==2,"Invalid keygen response from network");let a=(p=i[0])==null?void 0:p.split("=")[1];return{publicKey:(l=i[1])==null?void 0:l.split("=")[1],keyId:a,passkeyCredentialId:this.passkeyCredentialId}})}async startSigngen({setup:e,authModule:t}){return this.connect(e,t).then(r=>{var p,l;let i=r.split(":");u(i.length!==2,"Invalid signgen response from network");let a=(p=i[0])==null?void 0:p.split("=")[1],o=(l=i[1])==null?void 0:l.split("=")[1];if(a===void 0||o===void 0)throw new Error("Invalid signgen response from network");return{sign:a,recid:parseInt(o)}})}async addEphemeralKey({setup:e,authModule:t}){return this.connect(e,t).then(r=>({status:r}))}connect(e,t){return new Promise((r,i)=>{let a=0,o=e.queryPath;o==="signgen"&&(e.message=k(new TextEncoder().encode(e.message)));let p=new WebSocket("".concat(this.walletProviderUrl,"/").concat(o));p.addEventListener("open",l=>{switch(console.debug("Connection opened in state ".concat(a," with event ").concat(JSON.stringify(l,void 0," "))),a){case 0:a=1,p.send(JSON.stringify(e));break;case 1:case 2:a=3,i("Incorrect protocol state");break;case 3:break}}),p.addEventListener("message",async l=>{switch(console.debug("Connection message in state ".concat(a," with event ").concat(JSON.stringify(l,void 0," "))),a){case 0:a=3,i("Incorrect protocol state");break;case 1:{a=2;try{let d=await t.authenticate({setup:e,challenge:l.data});d.credentials.method==="passkey"&&(this.passkeyCredentialId=d.credentials.id),p.send(JSON.stringify(d))}catch(d){i(d)}break}case 2:a=3,p.close(),r(l.data);break;case 3:break}}),p.addEventListener("error",l=>{console.debug("Connection error in state ".concat(a," with event ").concat(JSON.stringify(l,void 0," "))),a!=3&&(a=3,i("Incorrect protocol state"))}),p.addEventListener("close",l=>{console.debug("Connection closed in state ".concat(a," with event ").concat(JSON.stringify(l,void 0," "))),a!=3&&(a=3,i("Incorrect protocol state"))})})}};var G=1,x=2,z=3,U=[{name:"tag",type:"uint16"},{name:"value",type:"string"}],g=class{constructor({t:e,n:t,key_label:r,permissions:i}){s(this,"t");s(this,"n");s(this,"key_label");s(this,"metadata");this.t=e,this.n=t,r&&(this.key_label=r),this.metadata=[],i&&this.metadata.push({tag:G,value:i})}set ephClaim(e){this.metadata.push({tag:x,value:e.toJSON()})}get queryPath(){return"keygen"}get requestSchema(){return{Request:[{name:"setup",type:"KeygenSetupOpts"},{name:"challenge",type:"string"}],KeygenSetupOpts:[{name:"t",type:"uint32"},{name:"n",type:"uint32"},{name:"metadata",type:"TaggedValue[]"}],TaggedValue:U}}},P=class{constructor({t:e,key_id:t,message:r}){s(this,"t");s(this,"key_id");s(this,"message");this.t=e,this.key_id=t,this.message=r}get queryPath(){return"signgen"}},f=class{constructor({n:e,key_id:t}){s(this,"n");s(this,"key_id");s(this,"metadata");this.n=e,this.key_id=t,this.metadata=[],this.metadata.push({tag:z,value:t})}set ephClaim(e){this.metadata.push({tag:x,value:e.toJSON()})}get queryPath(){return"addEphemeralKey"}get requestSchema(){return{Request:[{name:"setup",type:"AddEphemeralKeyOpts"},{name:"challenge",type:"string"}],AddEphemeralKeyOpts:[{name:"n",type:"uint32"},{name:"metadata",type:"TaggedValue[]"}],TaggedValue:U}}},I=class{constructor(e,t,r,i){s(this,"authModule");s(this,"threshold");s(this,"totalNodes");s(this,"wp_client");u(t<2,"Threshold = ".concat(t," must be at least 2")),u(r<t,"Total nodes = ".concat(r," must be greater or equal to threshold = ").concat(t)),this.threshold=t,this.totalNodes=r,this.authModule=i,this.wp_client=e}async generateKey(e){let t=new g({t:this.threshold,n:this.totalNodes,permissions:e,key_label:void 0});return this.setEphClaimOf(t),await this.wp_client.startKeygen({setup:t,authModule:this.authModule})}async signMessage(e,t){h("keyId",e),h("message",t);let r=new P({t:this.threshold,key_id:e,message:t});return await this.wp_client.startSigngen({setup:r,authModule:this.authModule})}async addEphemeralKey(e){h("keyId",e);let t=new f({n:this.totalNodes,key_id:e});return this.setEphClaimOf(t),await this.wp_client.addEphemeralKey({setup:t,authModule:this.authModule})}setEphClaimOf(e){e.ephClaim=this.authModule.ephClaim}};var Y={name:"SilentShard authentication",version:"0.1.0"},X=[{name:"name",type:"string"},{name:"version",type:"string"}];function Z(n,e,t){let r;return n instanceof g?r=new g({t:n.t,n:n.n,key_label:n.key_label,permissions:void 0}):r=new f({n:n.n,key_id:n.key_id}),r.ephClaim=t,{types:y({EIP712Domain:X},n.requestSchema),domain:Y,primaryType:"Request",message:{setup:r,challenge:e}}}async function R({setup:n,eoa:e,challenge:t,browserWallet:r,ephClaim:i}){let a=Z(n,t,i),o=await r.signTypedData(e,a);return{credentials:{credentials:i.toJSON(),method:"eoa",id:e},signature:o}}import{ed25519 as te}from"@noble/curves/ed25519";import{Base64 as T}from"js-base64";import{hexToBytes as M}from"viem";async function N({user:n,challenge:e,rpConfig:t,ephClaim:r}){let i=M("0x".concat(e),{size:32}),a={publicKey:{authenticatorSelection:{residentKey:"preferred",userVerification:"required"},challenge:i,excludeCredentials:[],pubKeyCredParams:[{type:"public-key",alg:-7},{type:"public-key",alg:-257}],rp:{name:t.rpName,id:t.rpId},user:A(y({},n),{id:T.toUint8Array(n.id)})}},o=await navigator.credentials.create(a);if(o===null)throw new Error("No credential returned");let p=c(o.response.attestationObject),d={rawCredential:JSON.stringify({authenticatorAttachment:o.authenticatorAttachment,id:o.id,rawId:c(o.rawId),response:{attestationObject:p,clientDataJSON:c(o.response.clientDataJSON)},type:o.type}),origin:t.rpName,rpId:t.rpId};return{credentials:{credentials:r.toJSON(),method:"passkey",id:o.id},signature:JSON.stringify(d)}}async function D({challenge:n,allowCredentialId:e,rpConfig:t,ephClaim:r}){let i=M("0x".concat(n),{size:32}),a=e?[{type:"public-key",id:T.toUint8Array(e)}]:[],o={publicKey:{userVerification:"required",challenge:i,allowCredentials:a}},p=await navigator.credentials.get(o);if(p===null)throw new Error("Failed to get navigator credentials");let l=p.response,d=l.userHandle;if(d===null)throw new Error("User handle cannot be null");let B=c(l.signature),W={rawCredential:JSON.stringify({authenticatorAttachment:p.authenticatorAttachment,id:p.id,rawId:c(p.rawId),response:{authenticatorData:c(l.authenticatorData),clientDataJSON:c(l.clientDataJSON),signature:B,userHandle:c(d)},type:p.type}),origin:t.rpName,rpId:t.rpId};return{credentials:{credentials:r.toJSON(),method:"passkey",id:p.id},signature:JSON.stringify(W)}}import{toHex as J}from"viem";import{ed25519 as E}from"@noble/curves/ed25519";var m=class{constructor(e,t,r=3600){s(this,"ephId");s(this,"ephPK");s(this,"expiry");this.validateInputs(e,t,r),this.ephId=e,this.ephPK=J(t),this.expiry=Math.floor(Date.now()/1e3)+r}validateInputs(e,t,r){h("ephId",e),S(t),u(Number.isInteger(r)===!1,"lifetime must be an integer");let i=r>0&&r<=365*24*60*60;u(!i,"lifetime must be greater than 0 and less than or equal to 365 days")}toJSON(){return JSON.stringify({ephId:this.ephId,ephPK:this.ephPK,expiry:this.expiry})}};async function _({setup:n,challenge:e,ephSK:t,ephClaim:r}){let i={setup:n,challenge:e},a=new TextEncoder,o=J(E.sign(a.encode(JSON.stringify(i)),t));return{credentials:{credentials:r.toJSON(),method:"ephemeral",id:r.ephId},signature:o}}function j(){return E.utils.randomPrivateKey()}function ee(n){return E.getPublicKey(n)}import{isAddress as ne}from"viem";var K=class{constructor(e,t,r,i,a){s(this,"browserWallet");s(this,"eoa");s(this,"ephClaim");this.validateInputs(t,r),this.ephClaim=new m(e,i,a),this.browserWallet=r,this.eoa=t}validateInputs(e,t){u(!ne(e),"invalid Ethereum address format"),u(!((t==null?void 0:t.signTypedData)instanceof Function),"invalid browserWallet")}async authenticate({setup:e,challenge:t}){return await R({setup:e,eoa:this.eoa,challenge:t,browserWallet:this.browserWallet,ephClaim:this.ephClaim})}},v=class{constructor(e,t){s(this,"ephSK");s(this,"ephClaim");S(t),this.ephSK=t;let r=te.getPublicKey(this.ephSK);this.ephClaim=new m(e,r)}async authenticate({setup:e,challenge:t}){return await _({setup:e,challenge:t,ephSK:this.ephSK,ephClaim:this.ephClaim})}},b=class{constructor(e,t,r,i,a,o){s(this,"rpConfig");s(this,"allowCredentialId");s(this,"user");s(this,"ephClaim");this.ephClaim=new m(i,a,o),this.rpConfig=e,this.user=t,this.allowCredentialId=r}async authenticate({setup:e,challenge:t}){let r=e.queryPath==="addEphemeralKey";if(this.allowCredentialId||r)return await D({allowCredentialId:this.allowCredentialId,challenge:t,rpConfig:this.rpConfig,ephClaim:this.ephClaim});if(this.user)return await N({user:this.user,challenge:t,rpConfig:this.rpConfig,ephClaim:this.ephClaim});throw new Error("Invalid arguments for passkey authentication")}};import{publicKeyToAddress as q,toAccount as Ve}from"viem/accounts";import{secp256k1 as re}from"@noble/curves/secp256k1";import{hashMessage as ze,hashTypedData as Ye,keccak256 as Xe,serializeSignature as Ze,serializeTransaction as je,toHex as tt}from"viem";function ie(n){if(n.startsWith("0x")&&(n=n.slice(2)),n.startsWith("04"))return q("0x".concat(n," "));if(n.startsWith("02")||n.startsWith("03")){let e=re.ProjectivePoint.fromHex(n).toHex(!1);return q("0x".concat(e))}else throw new Error("Invalid public key")}export{K as EOAAuth,v as EphAuth,I as NetworkSigner,b as PasskeyAuth,C as WalletProviderServiceClient,ie as computeAddress,j as generateEphPrivateKey,ee as getEphPublicKey};
@@ -1,5 +1,6 @@
1
- import { AuthModule, UserAuthentication } from './authentication.ts';
2
- import { type IWalletProviderServiceClient } from './walletProviderServiceClientInterface.ts';
1
+ import { AuthModule, UserAuthentication } from './authentication';
2
+ import { GetQueryPath, QueryPath, type IWalletProviderServiceClient } from './walletProviderServiceClientInterface';
3
+ import { EphClaim } from './ephemeralAuthentication';
3
4
  /**
4
5
  * Response from the network for keygen requests
5
6
  * @alpha
@@ -19,6 +20,12 @@ export interface KeygenResponse {
19
20
  * where Y is set to 0x02 if Y-coord is even, or 0x03 if Y-coord is odd
20
21
  */
21
22
  publicKey: string;
23
+ /**
24
+ * Optional credential id used for passkey authentication.
25
+ *
26
+ * Returned by Authenticator.
27
+ */
28
+ passkeyCredentialId?: string;
22
29
  }
23
30
  /**
24
31
  * Response from the network for sign request
@@ -34,8 +41,15 @@ export interface SignResponse {
34
41
  */
35
42
  recid: number;
36
43
  }
44
+ /**
45
+ * Response from the network for adding ephemeral key request
46
+ * @alpha
47
+ */
48
+ export interface AddEphemeralKeyResponse {
49
+ status: string;
50
+ }
37
51
  /** Key parameters used during generation */
38
- export declare class KeygenSetupOpts {
52
+ export declare class KeygenSetupOpts implements GetQueryPath {
39
53
  /** Threshold, number of parties that needs to participate in a protocol in order to produce valid signature */
40
54
  t: number;
41
55
  /** Total number of nodes that participate in Key generation, must be greater or equal than `t` */
@@ -45,29 +59,75 @@ export declare class KeygenSetupOpts {
45
59
  /** Metadata for a key. Currently they store the permissions, can be set in a constructor of this class.
46
60
  If permissions are not set, all operations are allowed.
47
61
  */
48
- metadata: {
49
- tag: number;
50
- value: string;
51
- }[];
52
- constructor({ t, n, key_label, permissions, ephPK, }: {
62
+ private metadata;
63
+ constructor({ t, n, key_label, permissions, }: {
53
64
  t: number;
54
65
  n: number;
55
- key_label?: string;
56
- permissions?: string;
57
- ephPK?: string;
66
+ key_label: string | undefined;
67
+ permissions: string | undefined;
58
68
  });
69
+ set ephClaim(ephClaim: EphClaim);
70
+ get queryPath(): QueryPath;
71
+ get requestSchema(): {
72
+ Request: {
73
+ name: string;
74
+ type: string;
75
+ }[];
76
+ KeygenSetupOpts: {
77
+ name: string;
78
+ type: string;
79
+ }[];
80
+ TaggedValue: {
81
+ name: string;
82
+ type: string;
83
+ }[];
84
+ };
59
85
  }
60
86
  /** Parameters used in Signature execution */
61
- export type SignSetupOpts = {
62
- /** Nymber of nodes that will participate in the signature execution */
87
+ export declare class SignSetupOpts implements GetQueryPath {
88
+ /** Number of nodes that will participate in the signature execution */
63
89
  t: number;
64
90
  /** Select the key using it's ID */
65
91
  key_id: string;
66
92
  /** The message to sign */
67
93
  message: string;
68
- };
69
- /** Verifies if passed `params` object is of type SignSetupOpts */
70
- export declare function isSignSetupOpts(params: KeygenSetupOpts | SignSetupOpts): params is SignSetupOpts;
94
+ constructor({ t, key_id, message }: {
95
+ t: number;
96
+ key_id: string;
97
+ message: string;
98
+ });
99
+ get queryPath(): QueryPath;
100
+ }
101
+ export declare class AddEphemeralKeyOpts implements GetQueryPath {
102
+ /** Total number of nodes that participate in Adding Ephemeral Key */
103
+ n: number;
104
+ /** Select the key using it's ID */
105
+ key_id: string;
106
+ /** Metadata for a key. Currently they store the permissions, can be set in a constructor of this class.
107
+ If permissions are not set, all operations are allowed.
108
+ */
109
+ private metadata;
110
+ constructor({ n, key_id }: {
111
+ n: number;
112
+ key_id: string;
113
+ });
114
+ set ephClaim(ephClaim: EphClaim);
115
+ get queryPath(): QueryPath;
116
+ get requestSchema(): {
117
+ Request: {
118
+ name: string;
119
+ type: string;
120
+ }[];
121
+ AddEphemeralKeyOpts: {
122
+ name: string;
123
+ type: string;
124
+ }[];
125
+ TaggedValue: {
126
+ name: string;
127
+ type: string;
128
+ }[];
129
+ };
130
+ }
71
131
  /** The `user_authentication` contains signature over the `setup` parameter. */
72
132
  export type UserAuthenticatedRequest<T> = {
73
133
  setup: T;
@@ -94,23 +154,29 @@ export declare class NetworkSigner {
94
154
  * @param authModule - Authentication module, used to get confirmation from the User before request execution
95
155
  */
96
156
  constructor(wpClient: IWalletProviderServiceClient, threshold: number, totalNodes: number, authModule: AuthModule);
97
- /** API to generate a distributed key that's generated by Silent Network.
98
- * Uses `authModule` to get authentication of the request from the User
99
- * @param ephKey - ephemeral key used to authenticate the user during the session.
157
+ /** Generate a distributed key that's generated by Silent Network.
158
+ * Uses `authModule` to authenticate the User with the Silent Network.
100
159
  * @param permissions - optional permissions that will be stored in the key metadata.
101
160
  * The permissions are validated during sign requests.
102
161
  * @returns {@link KeygenResponse} containing `keyId` and the `pubKey` public part of the key
103
162
  * @public
104
- * @alpha
105
163
  */
106
- authenticateAndCreateKey(ephKey: Uint8Array, permissions?: string): Promise<KeygenResponse>;
107
- /** Generate a signature. Uses `authModule` to authenticate the sign request by the User.
164
+ generateKey(permissions?: string): Promise<KeygenResponse>;
165
+ /** Generate a signature by the distributed key of Silent Network.
166
+ * Uses `authModule` to authenticate the sign request by the User.
108
167
  * The network chooses `t` nodes to execute the protocol.
109
- * @param keyId - the key id returned from `authenticateAndCreateKey`
168
+ * @param keyId - the key id returned from `keygen`
110
169
  * @param message - the message to sign by the MPC network
111
170
  * @returns {@link SignResponse}
112
171
  * @public
113
- * @alpha
114
172
  */
115
- authenticateAndSign(keyId: string, message: string): Promise<SignResponse>;
173
+ signMessage(keyId: string, message: string): Promise<SignResponse>;
174
+ /** Add new ephemeral key to an exist distributed key on the network.
175
+ * Uses `authModule` to authenticate the request by the User.
176
+ * @param keyId - the key id returned from `keygen`
177
+ * @returns {@link AddEphemeralKeyResponse}
178
+ * @public
179
+ */
180
+ addEphemeralKey(keyId: string): Promise<AddEphemeralKeyResponse>;
181
+ private setEphClaimOf;
116
182
  }
@@ -0,0 +1,29 @@
1
+ import { UserAuthentication } from './authentication';
2
+ import { EphClaim } from './ephemeralAuthentication';
3
+ /** Information about the user currently registering. Read more: https://w3c.github.io/webauthn/#dom-publickeycredentialcreationoptions-user
4
+ * @alpha
5
+ * */
6
+ export type PasskeyUser = {
7
+ id: string;
8
+ name: string;
9
+ displayName: string;
10
+ };
11
+ /** The RP responsible for registering and authenticating the user. Read more: https://w3c.github.io/webauthn/#dom-publickeycredentialcreationoptions-rp
12
+ * @alpha
13
+ * */
14
+ export type RelyingPartyConfig = {
15
+ rpName: string;
16
+ rpId: string;
17
+ };
18
+ export declare function passkeyRegister({ user, challenge, rpConfig, ephClaim, }: {
19
+ user: PasskeyUser;
20
+ challenge: string;
21
+ rpConfig: RelyingPartyConfig;
22
+ ephClaim: EphClaim;
23
+ }): Promise<UserAuthentication>;
24
+ export declare function passkeyLogin({ challenge, allowCredentialId, rpConfig, ephClaim, }: {
25
+ challenge: string;
26
+ allowCredentialId: string | null;
27
+ rpConfig: RelyingPartyConfig;
28
+ ephClaim: EphClaim;
29
+ }): Promise<UserAuthentication>;
@@ -0,0 +1 @@
1
+ {"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.es2021.d.ts","../node_modules/typescript/lib/lib.es2022.d.ts","../node_modules/typescript/lib/lib.es2023.d.ts","../node_modules/typescript/lib/lib.esnext.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2016.intl.d.ts","../node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.es2021.promise.d.ts","../node_modules/typescript/lib/lib.es2021.string.d.ts","../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../node_modules/typescript/lib/lib.es2021.intl.d.ts","../node_modules/typescript/lib/lib.es2022.array.d.ts","../node_modules/typescript/lib/lib.es2022.error.d.ts","../node_modules/typescript/lib/lib.es2022.intl.d.ts","../node_modules/typescript/lib/lib.es2022.object.d.ts","../node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2022.string.d.ts","../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../node_modules/typescript/lib/lib.es2023.array.d.ts","../node_modules/typescript/lib/lib.es2023.collection.d.ts","../node_modules/typescript/lib/lib.es2023.intl.d.ts","../node_modules/typescript/lib/lib.esnext.array.d.ts","../node_modules/typescript/lib/lib.esnext.collection.d.ts","../node_modules/typescript/lib/lib.esnext.intl.d.ts","../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../node_modules/typescript/lib/lib.esnext.string.d.ts","../node_modules/typescript/lib/lib.esnext.promise.d.ts","../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../node_modules/typescript/lib/lib.esnext.object.d.ts","../node_modules/typescript/lib/lib.esnext.regexp.d.ts","../node_modules/typescript/lib/lib.esnext.iterator.d.ts","../node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../node_modules/@noble/curves/abstract/modular.d.ts","../node_modules/@noble/curves/abstract/curve.d.ts","../node_modules/@noble/curves/abstract/utils.d.ts","../node_modules/@noble/curves/abstract/edwards.d.ts","../node_modules/@noble/curves/abstract/hash-to-curve.d.ts","../node_modules/@noble/curves/abstract/montgomery.d.ts","../node_modules/@noble/curves/ed25519.d.ts","../node_modules/js-base64/base64.d.ts","../src/encoding.ts","../node_modules/abitype/dist/types/register.d.ts","../node_modules/abitype/dist/types/types.d.ts","../node_modules/abitype/dist/types/abi.d.ts","../node_modules/abitype/dist/types/errors.d.ts","../node_modules/abitype/dist/types/narrow.d.ts","../node_modules/abitype/dist/types/utils.d.ts","../node_modules/abitype/dist/types/human-readable/types/signatures.d.ts","../node_modules/abitype/dist/types/human-readable/formatAbiParameter.d.ts","../node_modules/abitype/dist/types/human-readable/formatAbiParameters.d.ts","../node_modules/abitype/dist/types/human-readable/formatAbiItem.d.ts","../node_modules/abitype/dist/types/human-readable/formatAbi.d.ts","../node_modules/abitype/dist/types/human-readable/types/utils.d.ts","../node_modules/abitype/dist/types/human-readable/types/structs.d.ts","../node_modules/abitype/dist/types/human-readable/parseAbi.d.ts","../node_modules/abitype/dist/types/human-readable/parseAbiItem.d.ts","../node_modules/abitype/dist/types/human-readable/parseAbiParameter.d.ts","../node_modules/abitype/dist/types/human-readable/parseAbiParameters.d.ts","../node_modules/abitype/dist/types/human-readable/errors/abiItem.d.ts","../node_modules/abitype/dist/types/human-readable/errors/abiParameter.d.ts","../node_modules/abitype/dist/types/human-readable/errors/signature.d.ts","../node_modules/abitype/dist/types/human-readable/errors/splitParameters.d.ts","../node_modules/abitype/dist/types/human-readable/errors/struct.d.ts","../node_modules/abitype/dist/types/exports/index.d.ts","../node_modules/webauthn-p256/_types/types.d.ts","../node_modules/webauthn-p256/_types/credential.d.ts","../node_modules/webauthn-p256/_types/publicKey.d.ts","../node_modules/webauthn-p256/_types/sign.d.ts","../node_modules/webauthn-p256/_types/utils.d.ts","../node_modules/webauthn-p256/_types/verify.d.ts","../node_modules/webauthn-p256/_types/index.d.ts","../node_modules/viem/_types/errors/utils.d.ts","../node_modules/viem/_types/accounts/utils/parseAccount.d.ts","../node_modules/viem/_types/types/utils.d.ts","../node_modules/@scure/bip32/lib/index.d.ts","../node_modules/viem/_types/types/account.d.ts","../node_modules/viem/_types/types/misc.d.ts","../node_modules/viem/_types/account-abstraction/types/entryPointVersion.d.ts","../node_modules/viem/_types/experimental/eip7702/types/authorization.d.ts","../node_modules/viem/_types/types/eip4844.d.ts","../node_modules/viem/_types/types/fee.d.ts","../node_modules/viem/_types/types/kzg.d.ts","../node_modules/viem/_types/types/log.d.ts","../node_modules/viem/_types/types/transaction.d.ts","../node_modules/viem/_types/types/contract.d.ts","../node_modules/viem/_types/types/multicall.d.ts","../node_modules/viem/_types/account-abstraction/types/userOperation.d.ts","../node_modules/viem/_types/account-abstraction/types/rpc.d.ts","../node_modules/viem/_types/types/withdrawal.d.ts","../node_modules/viem/_types/types/block.d.ts","../node_modules/viem/_types/experimental/eip7702/types/rpc.d.ts","../node_modules/viem/_types/types/proof.d.ts","../node_modules/viem/_types/types/rpc.d.ts","../node_modules/viem/_types/types/eip1193.d.ts","../node_modules/viem/_types/clients/transports/createTransport.d.ts","../node_modules/viem/_types/errors/base.d.ts","../node_modules/viem/_types/errors/fee.d.ts","../node_modules/viem/_types/utils/signature/recoverAddress.d.ts","../node_modules/viem/_types/utils/data/concat.d.ts","../node_modules/viem/_types/utils/data/isHex.d.ts","../node_modules/viem/_types/errors/data.d.ts","../node_modules/viem/_types/utils/data/pad.d.ts","../node_modules/viem/_types/errors/encoding.d.ts","../node_modules/viem/_types/utils/data/size.d.ts","../node_modules/viem/_types/utils/data/trim.d.ts","../node_modules/viem/_types/utils/encoding/fromHex.d.ts","../node_modules/viem/_types/utils/encoding/toHex.d.ts","../node_modules/viem/_types/utils/encoding/toBytes.d.ts","../node_modules/viem/_types/errors/cursor.d.ts","../node_modules/viem/_types/utils/cursor.d.ts","../node_modules/viem/_types/utils/encoding/toRlp.d.ts","../node_modules/viem/_types/utils/hash/keccak256.d.ts","../node_modules/viem/_types/experimental/eip7702/utils/hashAuthorization.d.ts","../node_modules/viem/_types/experimental/eip7702/utils/recoverAuthorizationAddress.d.ts","../node_modules/viem/_types/types/stateOverride.d.ts","../node_modules/viem/_types/errors/request.d.ts","../node_modules/viem/_types/errors/rpc.d.ts","../node_modules/viem/_types/utils/promise/createBatchScheduler.d.ts","../node_modules/viem/_types/utils/promise/withRetry.d.ts","../node_modules/viem/_types/utils/rpc/socket.d.ts","../node_modules/viem/_types/utils/buildRequest.d.ts","../node_modules/viem/_types/errors/estimateGas.d.ts","../node_modules/viem/_types/errors/transaction.d.ts","../node_modules/viem/_types/utils/transaction/getTransactionType.d.ts","../node_modules/viem/_types/utils/blob/blobsToCommitments.d.ts","../node_modules/viem/_types/utils/blob/blobsToProofs.d.ts","../node_modules/viem/_types/utils/hash/sha256.d.ts","../node_modules/viem/_types/utils/blob/commitmentToVersionedHash.d.ts","../node_modules/viem/_types/utils/blob/commitmentsToVersionedHashes.d.ts","../node_modules/viem/_types/errors/blob.d.ts","../node_modules/viem/_types/utils/blob/toBlobs.d.ts","../node_modules/viem/_types/utils/blob/toBlobSidecars.d.ts","../node_modules/viem/_types/experimental/eip7702/utils/serializeAuthorizationList.d.ts","../node_modules/viem/_types/errors/address.d.ts","../node_modules/viem/_types/errors/chain.d.ts","../node_modules/viem/_types/errors/node.d.ts","../node_modules/viem/_types/utils/lru.d.ts","../node_modules/viem/_types/utils/address/isAddress.d.ts","../node_modules/viem/_types/utils/transaction/assertTransaction.d.ts","../node_modules/viem/_types/utils/transaction/serializeAccessList.d.ts","../node_modules/viem/_types/utils/transaction/serializeTransaction.d.ts","../node_modules/viem/_types/accounts/utils/sign.d.ts","../node_modules/viem/_types/accounts/utils/signTransaction.d.ts","../node_modules/viem/_types/errors/account.d.ts","../node_modules/viem/_types/utils/chain/assertCurrentChain.d.ts","../node_modules/viem/_types/utils/errors/getTransactionError.d.ts","../node_modules/viem/_types/utils/formatters/formatter.d.ts","../node_modules/viem/_types/utils/formatters/transactionRequest.d.ts","../node_modules/viem/_types/utils/transaction/assertRequest.d.ts","../node_modules/viem/_types/actions/public/getChainId.d.ts","../node_modules/viem/_types/actions/wallet/sendRawTransaction.d.ts","../node_modules/viem/_types/actions/wallet/sendTransaction.d.ts","../node_modules/viem/_types/utils/errors/getNodeError.d.ts","../node_modules/viem/_types/utils/errors/getEstimateGasError.d.ts","../node_modules/viem/_types/actions/public/estimateGas.d.ts","../node_modules/viem/_types/errors/block.d.ts","../node_modules/viem/_types/utils/formatters/transaction.d.ts","../node_modules/viem/_types/utils/formatters/block.d.ts","../node_modules/viem/_types/actions/public/getBlock.d.ts","../node_modules/viem/_types/actions/public/getTransactionCount.d.ts","../node_modules/viem/_types/utils/nonceManager.d.ts","../node_modules/viem/_types/actions/wallet/prepareTransactionRequest.d.ts","../node_modules/viem/_types/actions/public/getGasPrice.d.ts","../node_modules/viem/_types/actions/public/estimateMaxPriorityFeePerGas.d.ts","../node_modules/viem/_types/actions/public/estimateFeesPerGas.d.ts","../node_modules/viem/_types/types/chain.d.ts","../node_modules/viem/_types/errors/abi.d.ts","../node_modules/viem/_types/utils/data/slice.d.ts","../node_modules/viem/_types/utils/hash/hashSignature.d.ts","../node_modules/viem/_types/utils/hash/normalizeSignature.d.ts","../node_modules/viem/_types/utils/hash/toSignature.d.ts","../node_modules/viem/_types/utils/hash/toSignatureHash.d.ts","../node_modules/viem/_types/utils/hash/toFunctionSelector.d.ts","../node_modules/viem/_types/utils/address/getAddress.d.ts","../node_modules/viem/_types/utils/encoding/fromBytes.d.ts","../node_modules/viem/_types/utils/abi/decodeAbiParameters.d.ts","../node_modules/viem/_types/utils/abi/formatAbiItem.d.ts","../node_modules/viem/_types/utils/abi/decodeErrorResult.d.ts","../node_modules/viem/_types/errors/contract.d.ts","../node_modules/viem/_types/utils/abi/getAbiItem.d.ts","../node_modules/viem/_types/utils/abi/decodeFunctionResult.d.ts","../node_modules/viem/_types/utils/abi/encodeAbiParameters.d.ts","../node_modules/viem/_types/utils/abi/encodeDeployData.d.ts","../node_modules/viem/_types/utils/abi/encodeFunctionData.d.ts","../node_modules/viem/_types/utils/chain/getChainContractAddress.d.ts","../node_modules/viem/_types/utils/errors/getCallError.d.ts","../node_modules/viem/_types/errors/stateOverride.d.ts","../node_modules/viem/_types/utils/stateOverride.d.ts","../node_modules/viem/_types/actions/public/call.d.ts","../node_modules/viem/_types/errors/ccip.d.ts","../node_modules/viem/_types/utils/ccip.d.ts","../node_modules/viem/_types/utils/ens/encodedLabelToLabelhash.d.ts","../node_modules/viem/_types/utils/ens/namehash.d.ts","../node_modules/viem/_types/utils/ens/encodeLabelhash.d.ts","../node_modules/viem/_types/utils/ens/labelhash.d.ts","../node_modules/viem/_types/utils/ens/packetToBytes.d.ts","../node_modules/viem/_types/utils/errors/getContractError.d.ts","../node_modules/viem/_types/actions/public/readContract.d.ts","../node_modules/viem/_types/actions/ens/getEnsAddress.d.ts","../node_modules/viem/_types/types/ens.d.ts","../node_modules/viem/_types/errors/ens.d.ts","../node_modules/viem/_types/utils/ens/avatar/utils.d.ts","../node_modules/viem/_types/utils/ens/avatar/parseAvatarRecord.d.ts","../node_modules/viem/_types/actions/ens/getEnsText.d.ts","../node_modules/viem/_types/actions/ens/getEnsAvatar.d.ts","../node_modules/viem/_types/actions/ens/getEnsName.d.ts","../node_modules/viem/_types/actions/ens/getEnsResolver.d.ts","../node_modules/viem/_types/types/filter.d.ts","../node_modules/viem/_types/actions/public/createBlockFilter.d.ts","../node_modules/viem/_types/errors/log.d.ts","../node_modules/viem/_types/utils/hash/toEventSelector.d.ts","../node_modules/viem/_types/utils/abi/encodeEventTopics.d.ts","../node_modules/viem/_types/actions/public/createContractEventFilter.d.ts","../node_modules/viem/_types/actions/public/createEventFilter.d.ts","../node_modules/viem/_types/actions/public/createPendingTransactionFilter.d.ts","../node_modules/viem/_types/actions/public/estimateContractGas.d.ts","../node_modules/viem/_types/actions/public/getBalance.d.ts","../node_modules/viem/_types/actions/public/getBlobBaseFee.d.ts","../node_modules/viem/_types/utils/promise/withCache.d.ts","../node_modules/viem/_types/actions/public/getBlockNumber.d.ts","../node_modules/viem/_types/actions/public/getBlockTransactionCount.d.ts","../node_modules/viem/_types/actions/public/getCode.d.ts","../node_modules/viem/_types/utils/abi/decodeEventLog.d.ts","../node_modules/viem/_types/utils/formatters/log.d.ts","../node_modules/viem/_types/actions/public/getLogs.d.ts","../node_modules/viem/_types/actions/public/getContractEvents.d.ts","../node_modules/viem/_types/errors/eip712.d.ts","../node_modules/viem/_types/actions/public/getEip712Domain.d.ts","../node_modules/viem/_types/utils/formatters/feeHistory.d.ts","../node_modules/viem/_types/actions/public/getFeeHistory.d.ts","../node_modules/viem/_types/actions/public/getFilterChanges.d.ts","../node_modules/viem/_types/actions/public/getFilterLogs.d.ts","../node_modules/viem/_types/utils/formatters/proof.d.ts","../node_modules/viem/_types/actions/public/getProof.d.ts","../node_modules/viem/_types/actions/public/getStorageAt.d.ts","../node_modules/viem/_types/actions/public/getTransaction.d.ts","../node_modules/viem/_types/utils/formatters/transactionReceipt.d.ts","../node_modules/viem/_types/actions/public/getTransactionConfirmations.d.ts","../node_modules/viem/_types/actions/public/getTransactionReceipt.d.ts","../node_modules/viem/_types/actions/public/multicall.d.ts","../node_modules/viem/_types/actions/wallet/writeContract.d.ts","../node_modules/viem/_types/actions/public/simulateContract.d.ts","../node_modules/viem/_types/actions/public/uninstallFilter.d.ts","../node_modules/viem/_types/utils/signature/hashMessage.d.ts","../node_modules/viem/_types/actions/public/verifyHash.d.ts","../node_modules/viem/_types/actions/public/verifyMessage.d.ts","../node_modules/viem/_types/types/typedData.d.ts","../node_modules/viem/_types/utils/typedData.d.ts","../node_modules/viem/_types/utils/signature/hashTypedData.d.ts","../node_modules/viem/_types/actions/public/verifyTypedData.d.ts","../node_modules/viem/_types/utils/observe.d.ts","../node_modules/viem/_types/clients/transports/fallback.d.ts","../node_modules/viem/_types/types/transport.d.ts","../node_modules/viem/_types/utils/poll.d.ts","../node_modules/viem/_types/actions/public/watchBlockNumber.d.ts","../node_modules/viem/_types/actions/public/waitForTransactionReceipt.d.ts","../node_modules/viem/_types/utils/stringify.d.ts","../node_modules/viem/_types/actions/public/watchBlocks.d.ts","../node_modules/viem/_types/actions/public/watchContractEvent.d.ts","../node_modules/viem/_types/actions/public/watchEvent.d.ts","../node_modules/viem/_types/actions/public/watchPendingTransactions.d.ts","../node_modules/viem/_types/utils/siwe/types.d.ts","../node_modules/viem/_types/utils/siwe/validateSiweMessage.d.ts","../node_modules/viem/_types/actions/siwe/verifySiweMessage.d.ts","../node_modules/viem/_types/clients/decorators/public.d.ts","../node_modules/viem/_types/actions/wallet/addChain.d.ts","../node_modules/viem/_types/actions/wallet/deployContract.d.ts","../node_modules/viem/_types/actions/wallet/getAddresses.d.ts","../node_modules/viem/_types/actions/wallet/getPermissions.d.ts","../node_modules/viem/_types/actions/wallet/requestAddresses.d.ts","../node_modules/viem/_types/actions/wallet/requestPermissions.d.ts","../node_modules/viem/_types/accounts/utils/signMessage.d.ts","../node_modules/viem/_types/actions/wallet/signMessage.d.ts","../node_modules/viem/_types/actions/wallet/signTransaction.d.ts","../node_modules/viem/_types/accounts/utils/signTypedData.d.ts","../node_modules/viem/_types/actions/wallet/signTypedData.d.ts","../node_modules/viem/_types/actions/wallet/switchChain.d.ts","../node_modules/viem/_types/actions/wallet/watchAsset.d.ts","../node_modules/viem/_types/clients/decorators/wallet.d.ts","../node_modules/viem/_types/clients/createClient.d.ts","../node_modules/viem/_types/account-abstraction/accounts/types.d.ts","../node_modules/viem/_types/accounts/utils/signAuthorization.d.ts","../node_modules/viem/_types/accounts/types.d.ts","../node_modules/viem/_types/actions/getContract.d.ts","../node_modules/viem/_types/actions/test/dumpState.d.ts","../node_modules/viem/_types/actions/test/getAutomine.d.ts","../node_modules/viem/_types/actions/test/getTxpoolContent.d.ts","../node_modules/viem/_types/actions/test/getTxpoolStatus.d.ts","../node_modules/viem/_types/actions/test/impersonateAccount.d.ts","../node_modules/viem/_types/actions/test/increaseTime.d.ts","../node_modules/viem/_types/actions/test/inspectTxpool.d.ts","../node_modules/viem/_types/actions/test/loadState.d.ts","../node_modules/viem/_types/actions/test/mine.d.ts","../node_modules/viem/_types/actions/test/reset.d.ts","../node_modules/viem/_types/actions/test/revert.d.ts","../node_modules/viem/_types/actions/test/sendUnsignedTransaction.d.ts","../node_modules/viem/_types/actions/test/setBalance.d.ts","../node_modules/viem/_types/actions/test/setBlockGasLimit.d.ts","../node_modules/viem/_types/actions/test/setBlockTimestampInterval.d.ts","../node_modules/viem/_types/actions/test/setCode.d.ts","../node_modules/viem/_types/actions/test/setCoinbase.d.ts","../node_modules/viem/_types/actions/test/setIntervalMining.d.ts","../node_modules/viem/_types/actions/test/setMinGasPrice.d.ts","../node_modules/viem/_types/actions/test/setNextBlockBaseFeePerGas.d.ts","../node_modules/viem/_types/actions/test/setNextBlockTimestamp.d.ts","../node_modules/viem/_types/actions/test/setNonce.d.ts","../node_modules/viem/_types/actions/test/setStorageAt.d.ts","../node_modules/viem/_types/actions/test/stopImpersonatingAccount.d.ts","../node_modules/viem/_types/clients/decorators/test.d.ts","../node_modules/viem/_types/clients/createTestClient.d.ts","../node_modules/viem/_types/actions/test/dropTransaction.d.ts","../node_modules/viem/_types/actions/test/snapshot.d.ts","../node_modules/viem/_types/actions/test/removeBlockTimestampInterval.d.ts","../node_modules/viem/_types/actions/test/setAutomine.d.ts","../node_modules/viem/_types/actions/test/setLoggingEnabled.d.ts","../node_modules/viem/_types/actions/test/setRpcUrl.d.ts","../node_modules/viem/_types/clients/transports/custom.d.ts","../node_modules/viem/_types/errors/transport.d.ts","../node_modules/viem/_types/utils/promise/withTimeout.d.ts","../node_modules/viem/_types/utils/rpc/http.d.ts","../node_modules/viem/_types/clients/transports/http.d.ts","../node_modules/viem/_types/clients/createPublicClient.d.ts","../node_modules/viem/_types/clients/createWalletClient.d.ts","../node_modules/viem/_types/utils/rpc/webSocket.d.ts","../node_modules/viem/_types/clients/transports/webSocket.d.ts","../node_modules/viem/_types/constants/abis.d.ts","../node_modules/viem/_types/constants/address.d.ts","../node_modules/viem/_types/constants/contracts.d.ts","../node_modules/viem/_types/constants/unit.d.ts","../node_modules/viem/_types/constants/number.d.ts","../node_modules/viem/_types/constants/bytes.d.ts","../node_modules/viem/_types/constants/strings.d.ts","../node_modules/viem/_types/errors/unit.d.ts","../node_modules/viem/_types/errors/typedData.d.ts","../node_modules/viem/_types/utils/abi/decodeDeployData.d.ts","../node_modules/viem/_types/utils/abi/decodeFunctionData.d.ts","../node_modules/viem/_types/utils/abi/encodeErrorResult.d.ts","../node_modules/viem/_types/utils/abi/prepareEncodeFunctionData.d.ts","../node_modules/viem/_types/utils/abi/encodeFunctionResult.d.ts","../node_modules/viem/_types/utils/abi/parseEventLogs.d.ts","../node_modules/viem/_types/utils/data/isBytes.d.ts","../node_modules/viem/_types/utils/address/getContractAddress.d.ts","../node_modules/viem/_types/utils/transaction/getSerializedTransactionType.d.ts","../node_modules/viem/_types/utils/signature/compactSignatureToSignature.d.ts","../node_modules/viem/_types/utils/signature/parseCompactSignature.d.ts","../node_modules/viem/_types/utils/signature/parseSignature.d.ts","../node_modules/viem/_types/utils/signature/recoverMessageAddress.d.ts","../node_modules/viem/_types/utils/signature/recoverPublicKey.d.ts","../node_modules/viem/_types/utils/signature/serializeSignature.d.ts","../node_modules/viem/_types/utils/signature/recoverTransactionAddress.d.ts","../node_modules/viem/_types/utils/signature/recoverTypedDataAddress.d.ts","../node_modules/viem/_types/utils/signature/signatureToCompactSignature.d.ts","../node_modules/viem/_types/utils/signature/serializeCompactSignature.d.ts","../node_modules/viem/_types/utils/address/isAddressEqual.d.ts","../node_modules/viem/_types/utils/signature/verifyHash.d.ts","../node_modules/viem/_types/utils/signature/verifyMessage.d.ts","../node_modules/viem/_types/utils/signature/verifyTypedData.d.ts","../node_modules/viem/_types/utils/signature/isErc6492Signature.d.ts","../node_modules/viem/_types/utils/signature/parseErc6492Signature.d.ts","../node_modules/viem/_types/utils/signature/serializeErc6492Signature.d.ts","../node_modules/viem/_types/utils/blob/sidecarsToVersionedHashes.d.ts","../node_modules/viem/_types/utils/blob/fromBlobs.d.ts","../node_modules/viem/_types/utils/kzg/defineKzg.d.ts","../node_modules/viem/_types/utils/kzg/setupKzg.d.ts","../node_modules/viem/_types/utils/chain/defineChain.d.ts","../node_modules/viem/_types/utils/chain/extractChain.d.ts","../node_modules/viem/_types/utils/abi/encodePacked.d.ts","../node_modules/viem/_types/utils/unit/formatUnits.d.ts","../node_modules/viem/_types/utils/unit/formatEther.d.ts","../node_modules/viem/_types/utils/unit/formatGwei.d.ts","../node_modules/viem/_types/utils/encoding/fromRlp.d.ts","../node_modules/viem/_types/utils/hash/toEventSignature.d.ts","../node_modules/viem/_types/utils/hash/toFunctionSignature.d.ts","../node_modules/viem/_types/utils/hash/toEventHash.d.ts","../node_modules/viem/_types/utils/hash/toFunctionHash.d.ts","../node_modules/viem/_types/utils/signature/toPrefixedMessage.d.ts","../node_modules/viem/_types/utils/hash/isHash.d.ts","../node_modules/viem/_types/utils/hash/ripemd160.d.ts","../node_modules/viem/_types/utils/unit/parseUnits.d.ts","../node_modules/viem/_types/utils/unit/parseEther.d.ts","../node_modules/viem/_types/utils/unit/parseGwei.d.ts","../node_modules/viem/_types/utils/transaction/parseTransaction.d.ts","../node_modules/viem/_types/index.d.ts","../src/validator.ts","../src/ephemeralAuthentication.ts","../src/passkeyAuthentication.ts","../src/authentication.ts","../src/walletProviderServiceClientInterface.ts","../src/networkSigner.ts","../src/EOAauthentication.ts","../src/walletProviderServiceClient.ts","../node_modules/@scure/bip39/wordlists/czech.d.ts","../node_modules/@scure/bip39/wordlists/english.d.ts","../node_modules/@scure/bip39/wordlists/french.d.ts","../node_modules/@scure/bip39/wordlists/italian.d.ts","../node_modules/@scure/bip39/wordlists/japanese.d.ts","../node_modules/@scure/bip39/wordlists/korean.d.ts","../node_modules/@scure/bip39/wordlists/portuguese.d.ts","../node_modules/@scure/bip39/wordlists/simplified-chinese.d.ts","../node_modules/@scure/bip39/wordlists/spanish.d.ts","../node_modules/@scure/bip39/wordlists/traditional-chinese.d.ts","../node_modules/viem/_types/accounts/wordlists.d.ts","../node_modules/viem/_types/accounts/generateMnemonic.d.ts","../node_modules/viem/_types/accounts/generatePrivateKey.d.ts","../node_modules/viem/_types/accounts/toAccount.d.ts","../node_modules/viem/_types/accounts/utils/publicKeyToAddress.d.ts","../node_modules/viem/_types/accounts/privateKeyToAccount.d.ts","../node_modules/viem/_types/accounts/hdKeyToAccount.d.ts","../node_modules/viem/_types/accounts/mnemonicToAccount.d.ts","../node_modules/viem/_types/accounts/utils/privateKeyToAddress.d.ts","../node_modules/viem/_types/accounts/index.d.ts","../node_modules/@noble/curves/abstract/weierstrass.d.ts","../node_modules/@noble/curves/secp256k1.d.ts","../src/viemSigner.ts","../src/index.ts","../node_modules/@types/argparse/index.d.ts","../node_modules/@types/estree/index.d.ts","../node_modules/@types/json-schema/index.d.ts","../node_modules/@types/eslint/use-at-your-own-risk.d.ts","../node_modules/@types/eslint/index.d.ts","../node_modules/@types/eslint-plugin-security/index.d.ts","../node_modules/@types/triple-beam/index.d.ts"],"fileIdsList":[[74],[74,75,76],[75,76,77,78,79],[74,76,78,453],[461],[458,459,460],[83,84],[84],[83,85,86,87,88,90,91,92,93,96,97,98,99,100,101,102,103,104],[86],[85,86,89],[85,86],[85,92],[85,89,91],[84,85,89],[84,85,90],[84,85,89,94,95],[84,85,87,89,94,95],[84,85],[84,85,89,94],[83,84,85,89,95],[83,84,85],[105,112,115,118,119,128,202,288,321],[322],[118,119,128],[105,115,118,119,124,125,126,127],[113],[113,118,148],[113,117,148,324,448],[105,114,116,183,184,202,313,316,323,324,390,443,444,445,446,447,448,449,450,451],[113,324,449],[113,118,148,183,184,202,313,316,324,446,447],[105,113,175,179,324],[105,115,117,118,120,125,165,182,202,288,322,323],[105,113,324],[105,113,118,148,447],[105,113,118,153,215],[113,115,118,120,154,183],[113,118,183,285],[113,118,125,153,165,182,183],[105,113,118,183,288,290],[433,434,435,436,437,438,439,440,441,442],[105,113,115,136,146,148,207,222,225,226,234,237,239,321],[113,115,136,207,241,244,245,321],[105,113,115,136,148,207,226,237,239,321],[105,115,136,148,207,222,225,226,234,237,239,321],[105,113,115,126,136,207,239,254,257,267,282,283,300,321,324],[105,113,114,115,118,131,136,148,156,159,162,189,190,207,220,222,224,225,226,227,229,321,324],[113,136,162,207,249,321],[105,113,126,131,136,148,162,207,249,253,321],[105,113,115,126,131,136,148,162,207,249,253,321],[105,114,115,126,136,196,207,225,238,321,324],[113,117,122,131,136,138,203,204,205,207,321],[105,114,115,131,136,148,155,156,162,189,190,195,207,321,324],[113,117,131,136,138,147,162,200,203,204,207,321],[105,113,131,136,148,162,207,321],[113,136,162,207,321,324],[113,115,118,131,136,148,162,197,199,207,321,324],[113,136,162,207,260,321],[113,118,131,136,147,148,162,207,321],[113,136,147,162,207,321,324],[105,113,118,131,136,148,162,207,321],[105,113,118,124,126,131,136,207,221,266,321],[105,113,115,118,136,239,268,321],[122,131,136,148,162,207,270,321],[105,113,118,124,131,136,162,207,249,264,265,321],[105,113,124,131,136,162,207,249,264,265,321],[105,113,118,124,126,131,136,148,162,207,253,264,265,321],[105,113,118,131,133,136,148,162,207,274,321],[113,115,118,131,136,148,162,198,207,321],[113,118,136,207,261,277,278,321],[105,113,131,136,147,148,162,207,321,324],[113,118,136,162,164,207,278,321,424],[105,113,126,127,136,207,222,225,226,230,238,239,321],[105,115,126,136,207,222,225,230,238,321],[105,113,114,115,117,118,125,126,136,207,222,225,230,238,282,321],[105,113,115,118,136,141,144,148,207,224,230,321],[105,113,115,118,136,207,285,286,321],[105,113,118,136,207,286,288,290,321],[113,118,125,136,160,200,207,277,280,292,296,321],[113,136,207,261,294,295,321],[113,131,136,200,207,294,295,298,321],[105,113,124,126,131,136,207,292,294,298,321],[113,118,136,207,292,294,298,321],[113,115,118,136,207,285,286,304,321],[113,117,118,136,162,207,351],[113,117,136,162,207,351],[105,113,117,134,136,162,207,351],[105,113,117,136,162,207,351],[113,117,134,136,162,207,351],[113,117,118,136,162,189,207,351],[105,113,117,118,136,162,207,351],[113,136,148,162,207,321,324],[105,113,115,118,126,136,193,207,321,324],[105,113,136,162,207,215,321,324],[113,135,136,162,207,321,324],[105,114,115,117,123,125,136,165,185,189,190,196,200,201,202,206,207,321,324],[105,113,136,162,207,321,324],[113,115,135,136,162,207,321,324],[113,118,125,136,162,207,321],[105,113,114,115,117,118,123,136,155,162,184,185,186,187,189,190,191,192,203,207,321,324],[113,114,117,118,136,148,162,207,313,321,324],[113,114,115,117,123,125,136,148,162,165,184,186,189,190,191,207,321,324],[105,113,114,117,118,136,141,162,185,207,288,289,298,316,321,324],[105,113,114,115,117,118,126,136,185,189,193,207,225,238,283,321,324],[105,113,114,115,117,135,136,207,232,306,320,324],[105,113,115,117,135,136,207,306,321],[105,113,115,117,135,136,207,321,324,350],[105,113,115,117,135,136,207,320,321,324],[105,117,122,126,131,136,191,192,196,200,201,203,204,205,206,207,230,239,240,245,246,247,248,249,250,254,255,256,257,258,259,261,262,263,266,267,269,271,272,273,275,276,277,279,280,281,283,284,287,291,296,297,299,300,301,302,305,321],[117,134,136,207,321,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,351,352],[105,126,136,191,192,193,203,207,282,307,308,309,310,311,312,314,315,317,318,319,321,324],[113,135,207,321],[113,136],[113,136,207],[113,136,359,361],[113,118,134,136,161,359,365],[105,118,137],[137],[118,137],[137,207],[105,118,137,207,219,230],[105,137],[137,196,207,324],[115,137],[137,156],[118,125,131,137,193,207,324],[105],[105,115,118],[105,118],[113,118,120,140,148,149,152,153],[105,113,115,118,120,139,154],[113,120],[105,115,117,118,121,122,123,124,125,126,127,129,130,131,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,152,153,156,157,158,160,163,164,165,166,167,168,169,170,172,173,175,176,177,179,180,181,182,186,189,190,191,192,193,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,216,217,219,220,221,222,223,224,225,226,228,230,232,234,236,238,239,240,241,242,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,261,262,263,264,265,266,267,269,271,272,273,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,293,294,296,297,298,299,300,301,302,306,307,308,309,310,311,312,314,315,317,318,319,320,321,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,362,363,364,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423],[105,115,116,324],[105,118,125,130],[105,115,117,122,125,136,182,199,203,206,321],[105,115,118,125],[105,115,118,129,131,134],[118],[115],[105,115,118,126,131,135],[105,115,118,125,324],[105,118,126],[105,115,126],[105,115,118,122,124,125,131,132,133],[105,115,118,120,121,122,123,124],[115,136,293],[105,115],[105,113,118,145,146,148,149,151,208,209,215,216],[105,113,118,126,208,217],[105,113,115,118,126,208,214,217,218],[105,113,115,118,126,208,217,218,252],[105,113,115,118,126,208,209,214,217,218],[105,113,115,118,126,208,217,221],[105,113,118,140,143,145,148,175,179,208,209],[105,113,115,118,126,140,208,223],[105,113,115,118,126,140,214,218,221,223],[105,113,115,118,126,149,153,208,218,221,223,251,252],[105,113,115,118,126,140,208,214,218,221,223],[105,113,115,118,126,208,221,223],[105,113,118,140,143,148,175,179,208],[105,113,126,208],[105,113,115,118,126,141,179,208,214],[105,113,124,126,134,264],[105,113,115,118,126,140,208,214,218,221],[105,113,149,153,179],[105,113,118,140,143,149,152,153,209,215,382],[105,113,178],[105,113,175],[113,118,123,148,149],[113,118,148,168],[113,118,169],[113,118,148,149,151],[113,118,121,169],[113,115,118,121,123,166,167,172],[113,118,145,148,149,151,171],[113,135,157,158,159,160,161],[105,113,118,136,157,207,230,231,321],[113,176,207],[115,207],[113,207],[176,207],[113,118,150],[113,118],[113,118,142],[113,118,141],[113,118,141,142,145],[113,118,146,147,148],[113,118,144,145,146,149],[113,118,137,144,148,149,151,152],[113,118,141,143,147,148],[113,118,143,144,147],[113,136,207,241,243,321],[105,113,136,207,239,241,242,321],[113,148,149,153,233],[113,140,148,149,153,233],[113,118,149,235,236],[113,194,207,220,230],[105,113,220],[113,163,194,196,207,324],[115,137,177,193],[113,164,193,194,207,324],[113,115,118,131,134,188,198,207],[113,122,134],[113,115],[113,115,124,134],[113,115,133,134],[113,115,125,131,134,188,207],[113,115,125,134,188,207],[113,149,153],[113,118,141,145],[113,118,141,148,149],[213],[113,213],[212],[105,113,209,213],[105,113,211],[105,113,210,212],[113,123],[113,404],[105,115,321],[113,115,134,157,360],[113,134,159],[161],[113,118,148,149],[113,118,153],[105,113,118,148,153,223,288,289],[113,118,209],[105,113,115,118,217,399],[105,113,118],[105,113,118,139,285],[113,118,141,147],[105,113,118,125,139,153,182,390],[105,113,118,139,288,290],[113,118,147],[113,118,147,148],[113,118,140,148],[105,113,118,139,215,395],[105,113,118,215,388,395],[105,113,118,215,288,392,395],[105,115,303],[134,142,148,156,175,228],[113,114,115,164,175,177,193,207],[113,125,137,171,175,176,177,179],[113,115,125,147,164,209,424],[113,115,125,164,424],[113,115,118,125,141,143,147,152,164,175,179,180,384,412],[113,118,125,152,164,175,179],[113,115,118,125,140,148,152,164,165,166,167,170,173,174,180,181],[105,113,118,145,148,179,288,290],[409],[113,420],[106],[106,107,108,109,110,111],[424,426,428,430],[80,424,425,426,427,430,431],[81],[80,424,425,428,430],[426,427,428,429,430,431,432,455],[425,426,428,429],[81,82,424,426,428],[82,424,430,452,454],[82,425,428,429,430],[428,430]],"fileInfos":[{"version":"44e584d4f6444f58791784f1d530875970993129442a847597db702a073ca68c","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"5514e54f17d6d74ecefedc73c504eadffdeda79c7ea205cf9febead32d45c4bc","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"abee51ebffafd50c07d76be5848a34abfe4d791b5745ef1e5648718722fab924","impliedFormat":1},{"version":"9e8ca8ed051c2697578c023d9c29d6df689a083561feba5c14aedee895853999","affectsGlobalScope":true,"impliedFormat":1},{"version":"6920e1448680767498a0b77c6a00a8e77d14d62c3da8967b171f1ddffa3c18e4","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"45d8ccb3dfd57355eb29749919142d4321a0aa4df6acdfc54e30433d7176600a","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1a94697425a99354df73d9c8291e2ecd4dddd370aed4023c2d6dee6cccb32666","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3f9fc0ec0b96a9e642f11eda09c0be83a61c7b336977f8b9fdb1e9788e925fe","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"479553e3779be7d4f68e9f40cdb82d038e5ef7592010100410723ceced22a0f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3d7b04b45033f57351c8434f60b6be1ea71a2dfec2d0a0c3c83badbb0e3e693","affectsGlobalScope":true,"impliedFormat":1},{"version":"956d27abdea9652e8368ce029bb1e0b9174e9678a273529f426df4b3d90abd60","affectsGlobalScope":true,"impliedFormat":1},{"version":"4fa6ed14e98aa80b91f61b9805c653ee82af3502dc21c9da5268d3857772ca05","affectsGlobalScope":true,"impliedFormat":1},{"version":"e6633e05da3ff36e6da2ec170d0d03ccf33de50ca4dc6f5aeecb572cedd162fb","affectsGlobalScope":true,"impliedFormat":1},{"version":"15c1c3d7b2e46e0025417ed6d5f03f419e57e6751f87925ca19dc88297053fe6","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"caccc56c72713969e1cfe5c3d44e5bab151544d9d2b373d7dbe5a1e4166652be","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"9d540251809289a05349b70ab5f4b7b99f922af66ab3c39ba56a475dcf95d5ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"0b11f3ca66aa33124202c80b70cd203219c3d4460cfc165e0707aa9ec710fc53","affectsGlobalScope":true,"impliedFormat":1},{"version":"6a3f5a0129cc80cf439ab71164334d649b47059a4f5afca90282362407d0c87f","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"61d6a2092f48af66dbfb220e31eea8b10bc02b6932d6e529005fd2d7b3281290","affectsGlobalScope":true,"impliedFormat":1},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"987339ae38c9341b0d90da7350e543c0d561d04b540f29a6912d387ffee30123","impliedFormat":1},{"version":"518e0fd89eddb50289b99dbed7d7ca0951deb4c68f320d66a211ae70c3cd4e19","impliedFormat":1},{"version":"d6add5a006175d8e4ac5067baa29854010ae2be9eec488f3b09f62e48fdcbc73","impliedFormat":1},{"version":"fd883585af80279b31ab2da3b0e4a3039e1f2f000b41bae5b68f53bdfa0381ed","impliedFormat":1},{"version":"44bebcbc4a93fea28f3564a7763dd12f0f3bdec624eb8a63e97afd007d1ff4bd","impliedFormat":1},{"version":"58ff317d61b47e8fc6688bd50e6770311691202553f119d1e1d79b64d864e200","impliedFormat":1},{"version":"2bcba968352e7a0ab44a841f38846bc1137b4f2dd389e174962d2ecfe17f1f83","impliedFormat":1},{"version":"b05f67fbf31701e85c3f299bd3ddf2a83d277eb616dcc1aad0f3c25c3fbf0da2","impliedFormat":1},{"version":"739fd063492c94c26fe75a05459e94826fe71f76147b315cf386992b6c011522","signature":"7adb4f9ddd5454d7afcc4dd35e1e3125e308ad1ecca686eaae081036393b4d64","impliedFormat":1},{"version":"b166e33cf8226ac8781899da244397e77e5b6528271339ce26ece0c2c7242d7f","impliedFormat":1},{"version":"a623d5cf7925e72dbf4602862499564389c7c3dc0ce049733cc0ec756a846667","impliedFormat":1},{"version":"9c1724d9b0cb3d7141dc25a44b0d18cf0b3b20a42e971c6898d4195ec6d4b8dd","impliedFormat":1},{"version":"63634c0855e639ea7f609613d799bbb0dc774ec9f3242bc272c5567dc5ccd485","impliedFormat":1},{"version":"592f06c425ab27b4bafec624ef5b153cbdde9ac58f7113100a2da1c4309d1309","impliedFormat":1},{"version":"19c8ab51b4b07c529d95cd4d5c8d100a68dca247ec83a5097d35106fd8a7acca","impliedFormat":1},{"version":"bec1d0ac62cee9b4d1ea8b64c4798c59c1726668b76d06b68a206e0cb0ac76a6","impliedFormat":1},{"version":"fb4f06b2af9ee4b2d2be8c964b0a8f6dd260be9048488ffcf04eb5c0fcb8bf61","impliedFormat":1},{"version":"f185055f36d76e2df5eeb87ae1148a25a125be2bff2095e1bd39c1c7ce85a640","impliedFormat":1},{"version":"948a56ec8bfbbf20ad2496f49f451cfeb878cfcd6156032c0769b603f3ed8f18","impliedFormat":1},{"version":"979fdebc12d30becce6a15e68d99bc8a2a470a8dcf0898ac9e2d241a7e531940","impliedFormat":1},{"version":"1824ad7d4259910646279d667e517334c0aa24d5c810e8ea6da756fc2e02372f","impliedFormat":1},{"version":"989e9060e220ff86025044ba3c867a83512a655b7cf6253b2bd682192debf390","impliedFormat":1},{"version":"8b1feb568c859feb59236e9723b7a86e2ff8f9a8f2012366ffd1798164dc2798","impliedFormat":1},{"version":"8fab988b0129e674afc0bc0e95329b4052cf027f5d5b5b3e6e92d055b5ba88ef","impliedFormat":1},{"version":"4fe56d524ab24c225668803c1792945053e648b4e8fa4e50fa35594495b56732","impliedFormat":1},{"version":"2652931b8f7dca9a57f21aeb25b5d46851dcf17e4d5ed54b9b57d5d26e647680","impliedFormat":1},{"version":"d364c8df7d52199f5d011b4ded96f36dd114b984f5ee2e50ffe7d30ac1ab4bba","impliedFormat":1},{"version":"408f9eb3c7a3533bf5f07e0cde110a5ee0702864795ee6727792520fe60320b6","impliedFormat":1},{"version":"ba79eb15c36ff23e352ef608ceb7f9f0f278b15ad42512c05eedbe78f228e0e4","impliedFormat":1},{"version":"4cd233c6af471432253a67ae4f3b43c85e58a71418d98c3e162a1dac975c68f6","impliedFormat":1},{"version":"aa77c7d8ddc961e8192bcaa92da140e1205f8aee78bfadead5f52b8844d7d05c","impliedFormat":1},{"version":"37e37d3a525a207efab5458069fd9a27a174d2dc3af729702c81729ca03a349f","impliedFormat":1},{"version":"592be78d9e29c468162ae5c0caacab93517a84b9e119fa43839d37c8a22c96d1","impliedFormat":99},{"version":"9fb7f17cc5582417ed2484bfc9f493ed8e9a7493e023f07d5486860c8acb5f6f","impliedFormat":99},{"version":"6ba794b0e290825b3869e05c4ce9e0efdc9d68eb34d8434d61b2aa798a224c4e","impliedFormat":99},{"version":"b979e09ceeae224e71344ca6258d8ebc93ffc28262678b21f3f872b6f613ae29","impliedFormat":99},{"version":"976cc1f58ff3f255fdb41bdaf18430246a1024f38741fc0d048edb30ad7f5099","impliedFormat":99},{"version":"4a82d200fce0dd902da81b36928ae5c3a366770bea8b52f39936f7f11432f879","impliedFormat":99},{"version":"46c1ab579dd5d88d2a6435859aa8439d27f3f249848a4a8ab650f77135ace7b6","impliedFormat":99},{"version":"a2e86477a12540ef9e439245b959b2d8b96d674d5215d154ff22ad26141f4cfb","impliedFormat":1},{"version":"29150e44771dac0aeb711badc04e08fccd01b46efc560bd6e01b96d746a3f26c","impliedFormat":1},{"version":"e09f096004d70d6e98f5e5fee165849b3944f706861cdeffce5339dfd8426db5","impliedFormat":1},{"version":"1ddd1ca692a6c656ade0a85c9a722b3679b3d0bf113b699908e0325cf3537dbe","impliedFormat":1},{"version":"8588b5e62eff0072477ec7fb47245882d41db7d1b8051089ea331d671af2cf0e","impliedFormat":1},{"version":"48c022acf7a664fc81a3296858f08e2f70fdd57404f2ccc88bb951dc94311939","impliedFormat":1},{"version":"7fbc4600e6ef98e81e3c44329fd0cf7c53eda75cf666b17a6e4666e93e1b0159","impliedFormat":1},{"version":"0a7c25930355abdf0926057044de0c8f910a3196af6126282dd2186898a7d13f","impliedFormat":1},{"version":"007dfb1f314277f6e211fec9c5f62fd182e3bb76f1fe1f165228a259ae0b91b8","impliedFormat":1},{"version":"a6aa3bd9c165acb07db158897587581d7b081ce4271579b720a94f95c8c487d5","impliedFormat":1},{"version":"904714e49891cc1e136cf104f4bc9adfc846be9bd28ac55e101145a0d8103b30","impliedFormat":1},{"version":"9b8ba907ff8c52756b1a0aeac192a22591ac9431ac688cddad8111c8fd5124a3","impliedFormat":1},{"version":"c8b56ebca7f7c08fb96a65b2dfcbc8a6efb10b9b9ff060eca55042428e25e570","impliedFormat":1},{"version":"3fede259ef5c9dd9a97e662da9f6774dbc82f390d29563319b658ebd7f958135","impliedFormat":1},{"version":"d74e6cdb7ac0a4d675d598a09c8deed53dcb11a4e32e344ad6a831663bfb60dd","impliedFormat":1},{"version":"269605a13c650dc3326bc1fa1c65fc05fd8507256c83710974d20e704b55c914","impliedFormat":1},{"version":"ed94531f5270503b60d1938fd4929ce0b719e402862c49fe624eb660f75cc901","impliedFormat":1},{"version":"b9c9c9352d6606fe440735ccad134563017fc5aff8dcd418c58f778437339f06","impliedFormat":1},{"version":"a77c74ba29ae0c5b355aa140686b95239f1e579e51cec743af252fe59a245563","impliedFormat":1},{"version":"fe6fc233bd0daead47deecc6903a5571edaa4a9539c7157c4580d26dcc37a48b","impliedFormat":1},{"version":"d09f6a6dab49823b554255030c4ee8d49a2a993bd02f2cff2e444b2627dffc5a","impliedFormat":1},{"version":"35c6081d0c246583d33f452afa7877652db95b9b9393520b2fc3753795a1bb8c","impliedFormat":1},{"version":"5f5186291de127ff03bc059587fc5d23ccc3e1cb0cd277d5ad5da2e0d6085887","impliedFormat":1},{"version":"1065c8e64bf4876e3f9caa626f4f71fe64b755edfd23db5ceca6accd9c313f1c","impliedFormat":1},{"version":"0717c1a24cd66da2d50833ba78f89d994d1ebe494e0105ac67caa1e1a32a298d","impliedFormat":1},{"version":"cf4bdd9324f9116bf29daf9add3fefe4e609be0dc3bdba1759cf1a6654047726","impliedFormat":1},{"version":"0b59bc43ab08b3bb00a8a4978683c872fe4c6c3206bc68316ff7a3cbe70d75b0","impliedFormat":1},{"version":"d3763a4abd763d825a766d636661ee3ec52fa8477eb63c243b8dcd033ba23789","impliedFormat":1},{"version":"f4377e81d50af3f689cc5dd2005be3b79dfbbcb3f5a0301c843e8daf1cc9ddda","impliedFormat":1},{"version":"ac1e8ae42e98e9a296d467169321f4cf8802643302f619b025117c4ed5a2d200","impliedFormat":1},{"version":"6641f18545bf0ce6aaa467607f6a19a2896c4a6965deffd9c8f586f00950f494","impliedFormat":1},{"version":"27c66f434db3a00fb5b286c88582f2da3a85a2108cdfafe9bf63fa6df206aa2a","impliedFormat":1},{"version":"e2ef2006aa0a9b806063cb510989bafad85e71f21cd7e25783b8876203594dc7","impliedFormat":1},{"version":"5683b6c327ab05195ba14856985488b486117687e3f1b94991e787b25fd6cbb0","impliedFormat":1},{"version":"32d08e56282b632a4ff2aabf97d8e2ca72c872e99453de231684f0347a46c41c","impliedFormat":1},{"version":"f26ba893d9cda649365c19c9929d53ba069d829caa98dea1ad3c90374704cf54","impliedFormat":1},{"version":"0f9bfdd25e2e13e6adf81d98a2909fe1a7ade6cdcd380bc7c9a259effaf3c295","impliedFormat":1},{"version":"4179d52fc45e3c72cab28cedf19d10a915522d5f3f83979e61213137bfc794e9","impliedFormat":1},{"version":"665222ab0b8547fa189b3b4bef8598ca271e552339f871fcd4d7e86f979b8145","impliedFormat":1},{"version":"2748451f1cb5d1594fec48577685ef0cdefea02fea292873b9ab74aa47ff57ad","impliedFormat":1},{"version":"cece3e0e89f3e9a526ce76bf9bf3aab41bf83a58d625558a671f9058b5e822e6","impliedFormat":1},{"version":"11854416213ad2da216b2c09af4a4b16129e051a25ed8f3148ac5e62814341bd","impliedFormat":1},{"version":"5f03bcd31cb6649a36edd547407ab86887ec3c41347c03f52179bc58017fda13","impliedFormat":1},{"version":"48ff4dab14889a41f5b0b94aacb853b96f8778888167625a42ba7a45250a15b7","impliedFormat":1},{"version":"92c35a5a8200e9d5a30c9e36eb7db062b3ca1e03309bd0ec3416714695cc6dca","impliedFormat":1},{"version":"657e5c36539693988464477fb47f7aedfa8a487fd95606671156d52adab81101","impliedFormat":1},{"version":"e3e20ed4715775989c0ee8c2be8e657503503ba75c03defe13b99dc317baf3e7","impliedFormat":1},{"version":"c2f1b0272966ba4ec45818b50813210e3abaa993664e26db5617df45672e49aa","impliedFormat":1},{"version":"6faca0f0e857cab15c7ec26f36dc28b73730b184ce942a25654bbcf4ece22f59","impliedFormat":1},{"version":"40273b09b5738abd52321b86f426893ef84f9da766f2206207c4d9bd6c5b7f35","impliedFormat":1},{"version":"4ab90837f0df1a6c8039689ea77d7d28a06eb1bbf2bc129c271e8a6c01a0f391","impliedFormat":1},{"version":"2c6fcafbedc3bf7e030fbda5acc875e0f2f98b253477105ef5cf0f674409b525","impliedFormat":1},{"version":"171f9f3da4589275b3ca1472e2ee0f32f4b16d5e2c41f79db8bb209433f30d67","impliedFormat":1},{"version":"0d7db9b74a017be10aa36509dd2ae4499260381aabc6772feef677fa16f3a1f4","impliedFormat":1},{"version":"e59ef219cec3c3faab54d5cb12222a04d3e095c84abf94088920c1584832ce43","impliedFormat":1},{"version":"786c15fcfa8b821410e278a740f9dc81c44546259d1cc0143646876a0c030cc0","impliedFormat":1},{"version":"99ea681335aa97ba7618ac3db69a2e2da87da7faf8a39f822030ec4db96ca023","impliedFormat":1},{"version":"d7169a2b449d5b8e309edd84624649d04b746be48fe93b2e69bb7a85653b1e97","impliedFormat":1},{"version":"c462479720ea1932e5adc0bd4808be8ee2c83488be1012bf48f4bbb532b63758","impliedFormat":1},{"version":"d72479ce8210c21451cadef350179fbf3729c0e29005aca2d7e0c6ad031a4afa","impliedFormat":1},{"version":"d0e0354d3d4ac41cb7a67c10ca59652f8cba9eeb0929fcc878e492691f73d02a","impliedFormat":1},{"version":"9e8cbec0dabed8a1d03ab57736738a202df26cfbe180db391347df78a0509fa4","impliedFormat":1},{"version":"fbe06770551602ccc8e240a24793a8268b1bce44de38c26a7710f7bf1702f9b5","impliedFormat":1},{"version":"e4859560e5d635efa084427db27d6e31780eb570c2a567e95ed12f3828199710","impliedFormat":1},{"version":"6f29c691b977d5fdebefbc109c896fa863e95ae4464d959cc1506f45ad01da8e","impliedFormat":1},{"version":"ddf805d002fbf463fe2e40e78a4c7d1773a62f18716ce452cc02ba185c6c9c0e","impliedFormat":1},{"version":"d7aeffb82f803488ad4f918929a3a980e387c64c395ea793f6167c9704d4502a","impliedFormat":1},{"version":"2ede90710bab4dcdef47b532a8b3a1d63b7c366b058e95c705e9d9634f29f445","impliedFormat":1},{"version":"887a73b0167b36d4aed6d2549b19c4bcc6f2f50248b20d4d10ee2a10ef0516e8","impliedFormat":1},{"version":"d5e5bec490256e96a14ee3ee62df234b39130673a78c7cc23cbbd62daa5bb09a","impliedFormat":1},{"version":"e1654470227365a820804931d846c6a63a7f51f89bca85d7e22612f43a6d2add","impliedFormat":1},{"version":"62c9a85d5dc9da38e54f1d802b7b62b82170f3a4571e3c992f1db09f60dce051","impliedFormat":1},{"version":"56e14052acc507ace03e94e8ec6cc22c84a65db751f11ca20349a4ea396f72ab","impliedFormat":1},{"version":"1c7dde9d6e45e71504fd8ba6a9c29db164e7a8040bc1782c2a80a3098d0a86c8","impliedFormat":1},{"version":"916e966405a9923eef3123175b1d31188945917edc14027ebe5df1c1f4ba0c70","impliedFormat":1},{"version":"d742f86f826cd1d46f45cc6c106cf34077b10239da02393fc2b6a6490bb4059a","impliedFormat":1},{"version":"e9ce8ab614cd43c203bdeedd6fb230c64d62dc240c7384d962fe39bdb0ed16d2","impliedFormat":1},{"version":"639e7fd024205c3c4af58bb193c1d7790618fcb8b70e9b15068c647ab729ee3a","impliedFormat":1},{"version":"2c26bbcb3898665e821d93f28d9c4b7d712ca23743d8a7a9d89e2aec794bdf40","impliedFormat":1},{"version":"c0e0fc040511ce5af4e546fabe949945c67507cf1f1bc7211448f2e6832bf0bc","impliedFormat":1},{"version":"63847d7133093860ab00f9de7dc1a316449acfdea95e48a01f8d4019ff875e8b","impliedFormat":1},{"version":"e6f70e3c94d2b1d7c5112ad6df2dd7c2ae5dc81bc89510bbdd4478614cf80594","impliedFormat":1},{"version":"146e5c86d78b4a7ff6dcaf9835b3a6a639dd414d21a30c69df5183bca5596d15","impliedFormat":1},{"version":"713472b1fbf211215a59f78d2b351a77b06d441d7bb7e69c45fe49f8d4784333","impliedFormat":1},{"version":"2e24d2d878e6b0e745d3814ccb2186520c6ffc6b3ee3facc329741c100ff42ae","impliedFormat":1},{"version":"b1dcb886b03955cb52ada9b74a8706b2038a3b028e1bd4b41343d6dec6cc9160","impliedFormat":1},{"version":"00b9f288c0a241fb4316737af41e0ff0e64be1c03c90640bc3a9f1449742ca9b","impliedFormat":1},{"version":"d9f5c7419d04f5b0682db3d10bd3cfb084ddf728f945bc735836ea7139ab3bea","impliedFormat":1},{"version":"7f70f7d51c3232d6e7546bc8f9d6b91df3a9e001de4c755771dd052d9fbc9a07","impliedFormat":1},{"version":"175cdf7e9b2d7178e5b73a4f3dea1f02abe320f6585ee8a6c16991c92e4220e8","impliedFormat":1},{"version":"ef6b222405d44c0dcdea4b8ab7d3aa2ac0258995520c3ad2efa0fe161137807d","impliedFormat":1},{"version":"c6c694fe37d60819f29e998c03d875609d07a2f3d2a280d096474823384bff70","impliedFormat":1},{"version":"1a176b3032ec0fab791c658844c3c1d3df8fbe985b194858c8b31d736781942a","impliedFormat":1},{"version":"82e5bb555d1f1b9344b367e2761eeca6609ff1bc69908d779660e0ddb1c192c3","impliedFormat":1},{"version":"37bd33bdc57f46ff75b573c30c162cf2d1b5e160c230225d349ab01501e3a9b2","impliedFormat":1},{"version":"ea87e08b2a990ff767bcdc40e99eff30028d98af8d401f14b08974223c58c06a","impliedFormat":1},{"version":"389a2c2135dd3de1844b996d661ef3a5ffb978356994841fca0f0a99b1728e28","impliedFormat":1},{"version":"a582c8844a6809984a681db3997068d5d8144bee3f889c5240c559c5502c165a","impliedFormat":1},{"version":"e0494aecf0482850786831665c0f976125882c17084022efc6f8a51443b3a7f4","impliedFormat":1},{"version":"ede7ecc62da0236596749292448b282d9c5e846c95e107d6e87720204b792250","impliedFormat":1},{"version":"557981373fbd676739d62fb4aa7b601a639bfb39f7b563ab2c9a2350aa5d7298","impliedFormat":1},{"version":"078045f76bc547eeae562dde79c81e2565be6fecbdbbc4bfbd03fd16cfcad523","impliedFormat":1},{"version":"04783d0830346173973d5283d10b91fd7d6c1c0aaacd93a95455ddedaac4fc0d","impliedFormat":1},{"version":"6185cad87bf4da80c49a2f7a06af8e3e47eab0bfb31a9bf49520989b1b86056d","impliedFormat":1},{"version":"c002bfb107918122bba26d8d0736f293b22866dadc501f9ce27def3230233be5","impliedFormat":1},{"version":"131906682a56016d19849546fc5f9e0076b4e35bc2c5af362d79a50998215d4d","impliedFormat":1},{"version":"ee0c30ecd200ed26166dc9f9ca3f502e5584d61912f894563c7db45292b5833b","impliedFormat":1},{"version":"64248331a3a1c684ca70489fb8a94e48c5ca8bf86a5fb99179341edda11370ad","impliedFormat":1},{"version":"fa2d827d435777dbfc4a41a70d836b6a401bea8f77903cc22f939425f9da0b8b","impliedFormat":1},{"version":"8a59602dc83ec951feaf5cb7125393d3ebe38914c921e07ca0383a63857435d8","impliedFormat":1},{"version":"0654c77e8427f5125066d551e5f7c273735a92f4e7a2be6f12daf46ffa92ec3c","impliedFormat":1},{"version":"6f2a826f77810913e18a6a5ac87e5783f600961d4d7bc20315db13f69e2280de","impliedFormat":1},{"version":"14e3d141c66a44d32beff51678ba0abd236e18c520b12678a73936e78955cae2","impliedFormat":1},{"version":"bcc4218ae8d2f99608412f5917a663c7c764da0dd63be12d01ec49bf0148fe70","impliedFormat":1},{"version":"4136928c1cc5825cd17ecce5ae4a1671cf0047679e452d4886cfb33e74fed5c7","impliedFormat":1},{"version":"21f4388f6d904f8b0d17565fb331eb25d0f2af0704ed7d6247af4cc9631f7c67","impliedFormat":1},{"version":"546b944e81166843668e7b7a1153ccd1e565834ffc29e1df38aa6d26de9e1c81","impliedFormat":1},{"version":"47babc7ab6a3990895b389d6651d1841a17d7c7a9a57f86c0d72fe8d9230230f","impliedFormat":1},{"version":"f8d0e96fe8f2cbb5e617eec5f198ab78e13ba2c66176ad202b287aa3cc667e23","impliedFormat":1},{"version":"1375b2b59bde71a963ff2cb306eceea05060ded0b7cbcdaf1206e4e8245e605a","impliedFormat":1},{"version":"f5dcef5516ecd8836256359ed4b9c6bb8c73fcce697d1c343b11ee8e7fd15a8a","impliedFormat":1},{"version":"e55a68bbc963c9520f0492892d642fa145d34a351d483cd144a11e3346c18cfb","impliedFormat":1},{"version":"da14f80dc904a20fe5a98009f117d8f977ad6d50fdab685e75d6b38322ea56cb","impliedFormat":1},{"version":"ca90e5e191954b9b8c43ed5d5bc787107c071315c4acaae515e7d918e8814e15","impliedFormat":1},{"version":"8ef0c5c7cba59cbccd0ac5e17ec42dc4a8250cd267f9cdb08a4dcb1a099068ad","impliedFormat":1},{"version":"63ed74c721b55f614bef2b233b03c7e56377b0e38ea16f1dc3fc57a06ce2ca8e","impliedFormat":1},{"version":"57b3caa3ba40034d9b19cfc8f24259745b58d7f50d091b5b7dfd6f4e820e5399","impliedFormat":1},{"version":"b30336ed279a38bc62e5678bf19efaf6f414bfbca31e4550932d59d810d654d5","impliedFormat":1},{"version":"1f142b1a6a8b7b29da43a88c8a5f6bbad28f7cf1b67457596ab6d71bed584e8a","impliedFormat":1},{"version":"a203895f2d4b51c8799af4a17e6d72657c6dfdc4a08ab338970e257e5e083d85","impliedFormat":1},{"version":"c67a3535fe218dac271adc4d9c91cabbcf99d09081dc3fe3567e3a354bf632e2","impliedFormat":1},{"version":"7670372101b08f0d0a2a8cf4d107d969df407a74cba20e9f3991b50d9d3c590c","impliedFormat":1},{"version":"324c0b50e53b8b0dd54dc0f50f0154e3e6fb17608df73de0803b5e9a532cf2e2","impliedFormat":1},{"version":"fe831d90ec6b5e04075ae831936f1e2049cce2473ad1aecf3d5ee37d66ea84cc","impliedFormat":1},{"version":"93b5102a702eb62880ae6fb3be2eb6910694ccf77a2e9063eb5d94bd0b2b32b2","impliedFormat":1},{"version":"0cb25d82f88175135d0827f552720abae64eb9863cba71e0b6ea6e76cf0da3d2","impliedFormat":1},{"version":"d0622e1a5d9ee2b4b8a1a6db2c0f02fc34f4f865d7ece6ec86800074210d2f4d","impliedFormat":1},{"version":"5300e082fe9398613c3b5a4975df67318951c46b4a033d159bbe082793ca2c3a","impliedFormat":1},{"version":"be05176f0f7347f4a9faed9a400c182f107b7499d79f4c6e67ec3d830ed6cde9","impliedFormat":1},{"version":"498b8e59b7659c0ce11ce3323bd0d23c923e21c7290e5bd96ce0f3ca639fb4fe","impliedFormat":1},{"version":"740bf9b794f8fcecb6c3761598372f16a7835dddb4c163a21ae0c7f472dc6bd3","impliedFormat":1},{"version":"12816e95a6bc1b4a98195c0e6747b33cfd178f0424579a3eb21b49911283f79a","impliedFormat":1},{"version":"ccc9e8f887951895386cafcff62aff2617397584ce48ca891646b901272b9d12","impliedFormat":1},{"version":"bffc26bac30d45f1e5fea885f17cafb6a943bcc21fd1122c71b9fe466ece8fdf","impliedFormat":1},{"version":"3f2a3b143fafe71c581c13fc479dba5b0b7ff34993f87b9085d87575b53fc993","impliedFormat":1},{"version":"81580d0db97bc8f13bcf79cc7a97e9606cca948df6f0b26e3084d5db0a41089e","impliedFormat":1},{"version":"fd4ddb3d82b68edf2f7dd1b10ca66c5b108007c46067d0dfac4167a4492577cb","impliedFormat":1},{"version":"8c5414d8170f8fca7d8cdf74dba186370e35cc895c3e25f10ce42fff3ef9b49d","impliedFormat":1},{"version":"2caa4ad00b1f3ca5b07ff3d84beab2d9a4a8d841b677aa1546b78054a890a902","impliedFormat":1},{"version":"c96415ec4a5ff2202c8f5db2b8163a605100b6b47435c5b31d8280e06233958e","impliedFormat":1},{"version":"93b1c61409fbf44c4e666937c0cacb36d006b9901a53a2750e520f6ba9b1fcc2","impliedFormat":1},{"version":"981af6a24b8e1531dd933ff6df096a7a50dfd79f24c5e5be1134b684465a807d","impliedFormat":1},{"version":"d3b51ab522194f5ffd145f57fc2b2017e35d11593a8a5468fd3da7767dba0d57","impliedFormat":1},{"version":"47bf53f3991735879e5f41d8cfab687cc424cb775a0022b1d0fd55c78ff415ea","impliedFormat":1},{"version":"7c682517ded1d1e4ce341feb36a731499ed7241ee93de83aa2010d4f7add0555","impliedFormat":1},{"version":"f68e3a3eba1a531a71c8cb53bedafae2c25c376c147e3bc6ec96613a5de9dc84","impliedFormat":1},{"version":"d34648e4d5c8ccbcb2f5ccb5fa039e3be364ec95b0ef3a3750891e204c4bc3cf","impliedFormat":1},{"version":"367ef08f1d0de5ec4d4786cb8a1b8a17abf395bb0c5f8d151ec10fb66a2ce50e","impliedFormat":1},{"version":"ede4a9299b475e71baffcfd20b9b5056f77b8da69e7c824692fa7601be181ce7","impliedFormat":1},{"version":"c92c476c4463a4a96da5ed77010afd4bfa94944e298359bbff940cdde33c5f16","impliedFormat":1},{"version":"a484890e7212977036ce5965e7ca7b49e53436a66906a29093f91d4e02260fdf","impliedFormat":1},{"version":"4ea2003d86a9c68928ef069ce548c3e6ae35cbcb34184a71f1c566dde2160cf8","impliedFormat":1},{"version":"f727d3e75bfc036625d6920c725a3e4cbc564eef78f47d6b68c6351bb480d799","impliedFormat":1},{"version":"a87fcc9011e8a5e244d6e9af4902c315670aa852fa75dc82ae7cb62f98233a1a","impliedFormat":1},{"version":"120b21a1468deb4be0874bb633c86a1ac4df8919947d22b4762a773d9682a668","impliedFormat":1},{"version":"90afaa269677aeb839cc0e7479e0c3152248e4c8b440954b66a0e13fff08d64b","impliedFormat":1},{"version":"458858857e06dc9112fe9faadfc3d8b3e2828f9070cf8f0dfb7150b6252f021a","impliedFormat":1},{"version":"fb1d37cbc97a4d199bdf61878f4fc9f9ed2141df5f63c6a09d42fa810be09fee","impliedFormat":1},{"version":"2b881659708008e1c27269e1eb8dc476af0c2ab2f1fbf50f6e5f8cb6758d8b1f","impliedFormat":1},{"version":"4734f28362c42ec30a21ac4b8e2ae9a6cac54313cf0190e5e3c44da88bc11298","impliedFormat":1},{"version":"d57b6b6e55782dd990869f766f3dd0b63f030fd3a424a06ed5e1f62bc37bb90b","impliedFormat":1},{"version":"8f8c6a79e620f8a63952de19f38927f7da119cd0a5408d7289532f68b8017d98","impliedFormat":1},{"version":"bdf518ed49e9ad6926ecaee24a183828a23a061a1dfac8788cfc09da02a0bf91","impliedFormat":1},{"version":"c83ae875a44933a76a37949bc96569a414f5fd74f4089edcb4caad0db6bd7e6c","impliedFormat":1},{"version":"69870c54caf722bc568fd348b5e813500e964d820c7482bdb82d94d5aa6f19ed","impliedFormat":1},{"version":"504ffacc3312189dad74385206715390bd98e424aff384f67b21331bd16cf7e3","impliedFormat":1},{"version":"1870eb1fe1a14d19041559a003bb79753347b6da6d87703548b6b20faef30e6e","impliedFormat":1},{"version":"ed93611af4d148d789edfc67fd414195505a89691438ee261fa65d55bd66da0c","impliedFormat":1},{"version":"58ed0a6574485bcf18d4d775084258ed49f7b92ac9f8735488d19ab14bc6db88","impliedFormat":1},{"version":"02aeaa95c9b6125f8b6e5bcc16fc6df7d8f2bf945801defb73e1c13e1fe57c51","impliedFormat":1},{"version":"e6a214b21397bc966e36b92e7ba2986f33d2f68c9c194935937b0455f3b71c29","impliedFormat":1},{"version":"fe995eb8b806358aebf1e963824ea181b2fa9cc52e2dc4022eec67730b742753","impliedFormat":1},{"version":"52db5fc6d8fa0809b2110d96434a06ad26776677e825a10f93fe133497f6c93b","impliedFormat":1},{"version":"7a604944e45b35dc79983b128a7087816a6e9ca6d9c5d02d4a31e88dd50b9c39","impliedFormat":1},{"version":"05685c6f88402fe3db6d60e4c05176e7027b3acfecfd08ef6ca3e5f4bbfd1c1b","impliedFormat":1},{"version":"204ef1918267feb2040caad874caebd9bbf4f018367517750eeae16d880b0698","impliedFormat":1},{"version":"336748521fda8616bfd62560b7d5f37e6158531bbe16f2252b76827c2c6cd9ff","impliedFormat":1},{"version":"c4117a326ced8cc18ed60273de14f4c5e78a53cf2c59092f6278a8afca8d9ced","impliedFormat":1},{"version":"34787d4cfe21491065b9e8c3038a66c78747dc97b171b1201ff3913f2181e5c8","impliedFormat":1},{"version":"fe4c08b22b011d68b3625c665cc302f77bb8aed4b35853a53e3efaf082bc8e83","impliedFormat":1},{"version":"743e3303fed6823026dba4b34833ee6b59779678fd7daf64e1e9049114016b1a","impliedFormat":1},{"version":"7caae0b58bdfbedfbdd1a2f5b41779a08cbf62d62f7be63cd70cc71fb97165a0","impliedFormat":1},{"version":"b611b2a0b82dc6e520bc8c6698c0bf4481aba89c4923450f0753c062e4754c7e","impliedFormat":1},{"version":"e61edd9cf6dd20c0bec59e9d85151fd928c9fcb170273a7924ff5eaeade6c8bf","impliedFormat":1},{"version":"dcbc3cecf73f68c9d63280f3c9747bc6140b1eb9d8b5e5f04de58ea67c564a70","impliedFormat":1},{"version":"b1ae559a876cc54bbf319cccb4de11341916f78d58b2a9a5fc605d9f73b5111e","impliedFormat":1},{"version":"7b86682a3abdade9ceed5cfb5503097496223b93fc257de6795c4736efa841c1","impliedFormat":1},{"version":"07afa56980800740ec44e0b2e08d37d31c3ba1bcff58417ab7c26478bc37e4ac","impliedFormat":1},{"version":"02b6175908b56ca273252e8f734cde6cbc88c298384f4b397e63e41240184dc9","impliedFormat":1},{"version":"59fdde76b9d1518ee3a6711b14dc0b7582b7f9cf702c0cb8acc0bda3aef9e1bd","impliedFormat":1},{"version":"0a20f875729ca5de76aa486ba9cbb1913e349ae2d7d1c2e1ad3b45e142ca815d","impliedFormat":1},{"version":"477b09f880a9f9364b68fe02e237f3779fbffb0761bfbc3f77fa895ca49c44ce","impliedFormat":1},{"version":"d85a0edc67a11fa750331746b55fd5af4b41f1bd11e550ff7090abc9e9f83ebc","impliedFormat":1},{"version":"666732d3b18e0ae093bc48e5cd08380a7fcc64c06b7d8d0b4899567c5de7f5cb","impliedFormat":1},{"version":"be789dbab62f36a20dcb50cf0e67d0ef6b3e3cac17bc0aa9bb30bbe51756ea63","impliedFormat":1},{"version":"202596f2a7cba63ba07d482e8af95b70ee54da4c177643afdeed07bf28c5997a","impliedFormat":1},{"version":"d1658de6ff4ccce2e9cfd8b11722a6279bd3524644d0b65e3e8fc6b69b5ca49a","impliedFormat":1},{"version":"26e9c5b617defeb1de0fedecd7267aa16ad5cab23d726451fabd534ca246eed2","impliedFormat":1},{"version":"4091c43b763549c33d662afe79d75c078622bef954d4a473eca6aef8c251c169","impliedFormat":1},{"version":"7b2d3172fd95b696a31b40ccc3df7c44445dd70a80a3bbb2467da27c78717b48","impliedFormat":1},{"version":"402c1b5455a8fa4f474bf64354f72af7c01e4ad9b1685e3063216b95167a3fdc","impliedFormat":1},{"version":"df38d6066bcf7ef916b9e971e9c92d3f54c12a21235fa5694062bb57f6a028c2","impliedFormat":1},{"version":"5990d3194dafd93fc7a9e51032d11a57756c31fdcd88fac3b9be08af303972c5","impliedFormat":1},{"version":"987562ea1c31f04677cd3b46cbd4cdc6363f6178dbfd4db2a0788fe22947b8a5","impliedFormat":1},{"version":"0de5e8597a103c005b774f8892352a5f123a5e272924fe967b7d82305113bc4d","impliedFormat":1},{"version":"16185bd9e115626e25bca46fb8238f9ef3706c22b62ce940ae66c4e4cfde0df9","impliedFormat":1},{"version":"5711b07fe1b6426486276dd67efdee7ec4e70bcfdcaf39c6626594bbd7d51c34","impliedFormat":1},{"version":"7f81c91c6febbd59728630098f6f2b1e4afeba6af9128645634520d5681096a1","impliedFormat":1},{"version":"269296ab0ca6cc30fad3ccb911b1ff589d4a2c6ea7077c26c7ea5fe650103d6e","impliedFormat":1},{"version":"a49ef7664e1afe51062e193f0008ed621d8a3af547d994123ca44dbbb68c75a2","impliedFormat":1},{"version":"165ee417439a725fbd0a04278830c1056354556188d6000e5dc8ecd12cd3cb10","impliedFormat":1},{"version":"9539893a03d2cf718e8c38adf1a845ec0183ab455c8b257c64cd6727f57b0e1c","impliedFormat":1},{"version":"5e0f0b5968cb81b81847619fb6643f364d0eeb630e575fd0029d22c1171b3a37","impliedFormat":1},{"version":"45fb63c6d3a608b091c3baaaafe97de027a061e2f10813aa97d003b654417ed9","impliedFormat":1},{"version":"9a1bce80c36643bbc3e66c7db014c849b81a1d2d3ebfa69000f03e64545566a0","impliedFormat":1},{"version":"f438823b9ca13c413beaee87829111be171b305995bcf71d67ddd941de6dd999","impliedFormat":1},{"version":"623e7ec6876645a7e93a1a67506f3852b8e5e79ba3cb4c9a90ff8a24d3377a12","impliedFormat":1},{"version":"0ddba574bf51b1e47c502caa07ff96528b0c49878c2521ceb322a94557a824ee","impliedFormat":1},{"version":"3111b876a50a391cac841049c1683d20bf7d83eb05d5ff10b0a49689ca0dc49c","impliedFormat":1},{"version":"de84187571b3fb57d7d47f3199fe75845d024fa2c4aeb0a8bca8a281e37e9b62","impliedFormat":1},{"version":"4e302b950595396f49e539c733b44c52b77a9d3b85cc7c6fd24fcc7df1e30031","impliedFormat":1},{"version":"668eb6f044ef3e07635b3da9b29413de381299f80fdeb90e3ba5bea910d9d588","impliedFormat":1},{"version":"f75b6da37adf4f4fcb1b3e6e30099d345bfcfcc2024dc304bf6eaf40ed477c5a","impliedFormat":1},{"version":"39701d3533318e98924f5e5a4fb0ea5b49527853ae63e78e26190955c1ba4d62","impliedFormat":1},{"version":"30cb04bc8d380ecb7053659c2b42b48f87ffd05af3abe9f7b4783e07777a8d96","impliedFormat":1},{"version":"96847849b0b8472d06b023c7f6fd630cb5cb3e6129bf16c6ce58a931084c1d04","impliedFormat":1},{"version":"f15bb0a6bb20f0a494969d93f68c02a8e8076717fe7dcda6db06ab9e31041c22","impliedFormat":1},{"version":"84e3928255909a8e580fca688a15fbedef5c190e5d1a8da1dcd99afb6a40e617","impliedFormat":1},{"version":"58b8d98c9e39b0a1bab10c9a19a61d9fcac111aba5a6ff47e86525c079ddcbbb","impliedFormat":1},{"version":"a69abca4388cc76962773b4c869d5d34781cf0be92853d7bec53eac7a2f75c60","impliedFormat":1},{"version":"471b5d5986eff907c7f4b7047b54c15648495f94e219a27fd8cc91f35fa0e970","impliedFormat":1},{"version":"75cc2a2e33c7d3fe1574d9c93712950b5556dd4af48a1d1e5a657c66ff2eedf9","impliedFormat":1},{"version":"05c44f2a752cfbef15a81e90bc63eb96efcd3d07dd9b378df5a150a06775a2fb","impliedFormat":1},{"version":"9699ff431424e42dfeeb6417ea7b4d1ed66fc6bfc530748dfedebd2683fcc1b6","impliedFormat":1},{"version":"496197b06b51aeae8323da87d042ed2224e654994a3d9b5e3350df9c9576dc50","impliedFormat":1},{"version":"9d744f7d5a08aa240bceb2755dc8c6ee681cad5e818009162e69ae915bba6b77","impliedFormat":1},{"version":"86b7e0f835e2d550541c27e03abf5270a42f5876e1e915568289142b317a0ffd","impliedFormat":1},{"version":"ac6990a9034baddaf28cb15200bd2f0a46efb118d08f4d341abc16669ad577a1","impliedFormat":1},{"version":"29faa0f1ab122161019ca07b328664d62b5b1ec742606fa5b34851603a49a77c","impliedFormat":1},{"version":"0e07fb22607b2eda1883d4521080a5a29ef90714c1ae598e53eae0b94bf1bd10","impliedFormat":1},{"version":"52cb5d5beedcff01d5b851653cfdbe9a8e8e953a8462a357e71d93eee3ed760b","impliedFormat":1},{"version":"ba6d810e67aef7d6ed15cdd8223d5a207a111077c88d99ce7af5fe959a079803","impliedFormat":1},{"version":"3e02766c76edcd0486eeecad81ca4982a532a80293d71a8d94973e89feb5be2b","impliedFormat":1},{"version":"34e45896ae4bd8f3b44772aae2989adf64febd060810a9e08fc72b07778e58bd","impliedFormat":1},{"version":"e9d1e246d3a0510d5ca97f6c154d00bed351359b868294905efe98052ec6bcda","impliedFormat":1},{"version":"5668bff27e260e0a51ee72b7e0f6e69bba542b8a69f553c30d86e124adf479dd","impliedFormat":1},{"version":"1b4262a15a86e72e78d7fdbb6a6d20e8794f7fa4aa7c54f0b18ac7270e4fab08","impliedFormat":1},{"version":"9334b283bedfcd488ccb33b3e942905c86fa163e919653a5379eb8f28a2d5f7d","impliedFormat":1},{"version":"f3f62eb4cf38d86cc7f56d0879b49656a21f2eef4fd0acef3936889327d7f256","impliedFormat":1},{"version":"e32c5cb1819686336a2101f31b91c2e8e06f8f8311abd1195c203b81b62247b0","impliedFormat":1},{"version":"683734687779547527b05fdcef60947f6fc51758185d788531e9ac7bde84fd6f","impliedFormat":1},{"version":"c418f31663f9aa18537f6443172821265c078de18427ff136a24c536e76b7fc4","impliedFormat":1},{"version":"d3db93b436babc8fcab37cacce55115c25b7898e5e2053bca400ff5348b1ad9e","impliedFormat":1},{"version":"1df375435c44c94f1bce343de4ff81b8c82e644d6b33a801bc6cf4beceb76b71","impliedFormat":1},{"version":"fed5b5c20508c5f84a929161f452dbf769cc2d2ee1371b94ddc2feb418a0cf70","impliedFormat":1},{"version":"76755db046290dad61362d95c03b440a0feaf507edfb5744304c7f98c81faccc","impliedFormat":1},{"version":"e16841ad044e21c48c6065627566a2ac216e067cc34b9ad3b47312d208d9a262","impliedFormat":1},{"version":"7150b4a18287da2e25c68a12bd0cff78f6141a2425a27431a10cd4a91cb9626b","impliedFormat":1},{"version":"214a581fbe6902059a64de2bd75c56b6030c6388c29de93c4296380a99c04e4a","impliedFormat":1},{"version":"78b758d401e53f5319bc143ebdc7714ebe0f1e94fc3906d5e93816e5736bf299","impliedFormat":1},{"version":"ce50872ae30242ed1ce2ddb9d9226c85f17098e901bc456cfc365887ab553127","impliedFormat":1},{"version":"cae86d70eabc661dff2f46f34018ff4840228f01709c8399a9c012711dfe5292","impliedFormat":1},{"version":"77b463688f41048f449fa30b45393b81fd6dfe3eb71f7734c1a6d580373b6a12","impliedFormat":1},{"version":"b6ccce9156aa85ca2e836bc572d4697800739ab008b0a6ae9bfa0361b8baa04c","impliedFormat":1},{"version":"07dcca6e9f155b79d087216735842ab1f7c020ce41f095507afdffecbac06a03","impliedFormat":1},{"version":"1fab3bc9db401033ed6ef6dca9114b3a0a875b475b6c1b2ce52efddf3c4fa130","impliedFormat":1},{"version":"269b37626ed3fc5d6aff2b3103bfecdb86ab69e5fe28933b63a17ac83a547ede","impliedFormat":1},{"version":"1ef3cc7b03643e330cf9bcaeb42257a19f573bfafdaf51e2e45e52c19e20c3ff","impliedFormat":1},{"version":"e05f14953944c6b7f9c8a51c5739cad11e7ea4e441fd5659cbc3a5ebdc28bcfb","impliedFormat":1},{"version":"98fe9a0d3adc98c4aadc97a5bcb8c9589525e16e82e6714333e0315d1ff40a12","impliedFormat":1},{"version":"941c51312144ba38e2d86c081d212bc1f22f64eeb1dc342a1c7aeaaece7a7770","impliedFormat":1},{"version":"8d204669e89ac66eb2fa93e17daf42dc9fa33b3d865158327819df72f4fa3f1f","impliedFormat":1},{"version":"4f66c595621f6dd5c693d12c122def1c9eac9c48ace86deeb7c1a0fe54d63c61","impliedFormat":1},{"version":"6b26f80f079695a24ca28f6b19bb074ddb70cd79bc837ae8437e54ac8727aa14","impliedFormat":1},{"version":"1686e8b2a3bca066aafbb9bea2ac249e7205af7e6b878955741c66b3a4eaba63","impliedFormat":1},{"version":"f974c4abba2e7ae62cc358c6c1589df489406ef517a48355cbcc5f09cf11d8a8","impliedFormat":1},{"version":"949ab063079fbbcbf8a96c093b9cc465f83fd2ce49f4558492d6f95065cb201d","impliedFormat":1},{"version":"2d1c8bc1708e58c9aa73d71f89dc69d45fd00ed42841d022bbffa467c88464f4","impliedFormat":1},{"version":"55c3e286e757f731c3b80c1e6d4a567bcc6d5d512438016240e7da573a554dc3","impliedFormat":1},{"version":"33cb723eea3ced280f163fa717045e233b801081a64509d4d59b47620fde9ef5","impliedFormat":1},{"version":"8c357660e14e4ae047c44211f7d024d48eacf3d5ad6ac805095a436a4d3e268c","impliedFormat":1},{"version":"e67731d353b0f48ec4c7b1cee2358e2b7b6ea56c86775f2f3c07029b73b8bf06","impliedFormat":1},{"version":"e2eccdc38e22cc3882939c7fca91570a8379112c03f6206986e0bd78afeed21c","impliedFormat":1},{"version":"58a60f1ff614a331f5de62b4a629b5f41066430f7b72f65ec27f0cf841403c9e","impliedFormat":1},{"version":"bade739298ee5cd485966b3f2812cd94ed23be0bd8991624bde84db9e41e4240","impliedFormat":1},{"version":"4289204445b85c740954797654b504406befd2168731ec18efffb3ea22674a5c","impliedFormat":1},{"version":"e8ac4073fe7b469e55e1fc7b1540363d5a99b507839135fc97cfe5f2d0e36595","impliedFormat":1},{"version":"0f45169be3f2e0eb418bb1d5d480aa8fca7375af0b6e51dfccc3afbf77d9ef12","impliedFormat":1},{"version":"25699fd6154aa1d8ad42dd7739ebe65e15277c0f44d15ce6826cc43bde4ea5bf","impliedFormat":1},{"version":"d4fabc6a3e3110ed60c84e9ec6712265afe268601f3462198b57aa4359745c33","impliedFormat":1},{"version":"802353808bbaf39f8ce455fc7c459d39f13a2fefcf6f18a78c9ea0c61be089eb","impliedFormat":1},{"version":"a057b62631a72f836a8faa37332f03324b9610bf1bd7781fd6f93be063cd10f5","impliedFormat":1},{"version":"76c5f9421476e8762a83f970028b5b7e9ac13fade254d40c04c188f87be8fd7b","impliedFormat":1},{"version":"6378e4cad97066c62bf7bdd7fb6e2310f6a43cdf7aba950a2d37b4b0772c0554","impliedFormat":1},{"version":"3b6fddf2afbdf36f7bb869ccdeaffac8d53759e527e3425a6b8df4dca616d1fd","impliedFormat":1},{"version":"e88588861f78985ee212de6a72e45b445e5e04286b4ce1eb1d28d72bb781e269","impliedFormat":1},{"version":"22b9f52673fc11b687471594d6080d4319999e4d98903679a4ba94d24b056426","impliedFormat":1},{"version":"3d594041401ac69433c4a2ee492d356db4706adddd4f8201e7e5f542e58173b2","impliedFormat":1},{"version":"806aa43416ea1f5265e1cf94168fd4902348762aa8114dc53c131cff9f87b5ec","impliedFormat":1},{"version":"f27757e22127417f5daddd0ad4be81d5a743c95576d8c957ce39ef02a6cc1ec0","impliedFormat":1},{"version":"383679ac9fe44ffb52057dc5ad7ee2e4a90a3f4abbe9a1cf186d9a2cee617965","impliedFormat":1},{"version":"95a55bb419a26b07ed2a30f5e29524fab09f325c8a42fa59e83fdc75b9e0a8a1","impliedFormat":1},{"version":"c603261cc9c84d60d180847c874203b916a56e17935d113c0fa417448ca5841a","signature":"d5484487f05e22df348f0aeace0bb6f8cc8e4d80b94c45b663ee7ef591691f54","impliedFormat":1},{"version":"5432f2a8809fd2afc466a4c5172bf7e4a98a3fd4a200a3e1170678c35d3fc437","signature":"18441b8e2275c0d2baf8e0fc30d82d2ea5e3f29e3e7f778e8f7900b89c9c44da","impliedFormat":1},{"version":"cbe45accc75f5f25d7e01fbf641cad65da3059aa882a787dfef71d4984c22040","signature":"9acee195019b6d28b71fa42de5d99d8b0a92f63547c945429d157836eec584d4","impliedFormat":1},{"version":"1f9940f664dc6b2225362e84ff43478a1d28af2d2368a629e946ec469903aeb0","signature":"8f61adf9ef64cd9fed4530ea56c6fb311715f62cb4b93e4d86afbac2becb8d71","impliedFormat":1},{"version":"8e451cf211409c09dc354c8b99888735142fd160ccc252156aa6b4a2cd18c058","signature":"a115f768d9165403a59a6668b6869a4f1859e2246177f9d866b6b8be866551ce","impliedFormat":1},{"version":"ba5bfacf839638196a322a3cf458ac71362f820b6b924a36e6c6154d36225413","signature":"19d968cca65ab78df411463effc1e2c9a1841a8779d48d3305f389efc1ef5dea","impliedFormat":1},{"version":"32bf1da909cc2d03da57355e80487d61023b28c6a16263208121f2bb430fa7c8","signature":"4de4f42fea791c490066d8d704b10a04ed3c6465007d80cca1cb90b2ea9f02b2","impliedFormat":1},{"version":"a0e57bd97ce7c561ee71fbc990bf4ef70830f0fa47f35f2de0ac663bbf013514","signature":"23424f11d81d11b2be0a3121ee1820b938b808d48b08e09f1ceeb568bfff587b","impliedFormat":1},{"version":"6a1197b37f8f406bfb74528ca1fb90659c6d1a251d472b1c65affb5c6a6ba5f8","impliedFormat":1},{"version":"6a1197b37f8f406bfb74528ca1fb90659c6d1a251d472b1c65affb5c6a6ba5f8","impliedFormat":1},{"version":"6a1197b37f8f406bfb74528ca1fb90659c6d1a251d472b1c65affb5c6a6ba5f8","impliedFormat":1},{"version":"6a1197b37f8f406bfb74528ca1fb90659c6d1a251d472b1c65affb5c6a6ba5f8","impliedFormat":1},{"version":"6a1197b37f8f406bfb74528ca1fb90659c6d1a251d472b1c65affb5c6a6ba5f8","impliedFormat":1},{"version":"6a1197b37f8f406bfb74528ca1fb90659c6d1a251d472b1c65affb5c6a6ba5f8","impliedFormat":1},{"version":"6a1197b37f8f406bfb74528ca1fb90659c6d1a251d472b1c65affb5c6a6ba5f8","impliedFormat":1},{"version":"6a1197b37f8f406bfb74528ca1fb90659c6d1a251d472b1c65affb5c6a6ba5f8","impliedFormat":1},{"version":"6a1197b37f8f406bfb74528ca1fb90659c6d1a251d472b1c65affb5c6a6ba5f8","impliedFormat":1},{"version":"6a1197b37f8f406bfb74528ca1fb90659c6d1a251d472b1c65affb5c6a6ba5f8","impliedFormat":1},{"version":"516c53364c6b242591c65afc8b0f0f0cee74ac8a04f52470a539fcb33da2e318","impliedFormat":1},{"version":"045fe6d9e971df69d53ed8f1551e60c4849b0529e407e5960b31096418fa8346","impliedFormat":1},{"version":"0974c0312c1fe25e56e8030b1830ce8bc071a973714ac6f2409894addc346fcd","impliedFormat":1},{"version":"d10db4f48a9957fba79c406fbc79af87d979d34a1bbf5e12ca4a53cef0f16cca","impliedFormat":1},{"version":"3493d3ac411c6977f391ab438a9940c3a8e06dc04b7e2d84e0571a30aa224314","impliedFormat":1},{"version":"2907069986d89f01c9151da8a01161545a283405369bf009dbad2e661c556703","impliedFormat":1},{"version":"0feee6a4ec2ca4ce1072d0bf3a9839094b5a651decd598b2fa79bcdee647fb16","impliedFormat":1},{"version":"5bac046f252b55e3b05035d5329e2ef15a944fe429d81ac7fe36a4cd8bb8ae7f","impliedFormat":1},{"version":"4e1949bcfbde9ae075bff5b15ce1d3a401624840cefdbabdd6516004b93b821d","impliedFormat":1},{"version":"c84036d7bec11b3300648aca39ea471bc970927c5b19339c0fe1d65863b42886","impliedFormat":1},{"version":"6d33d3edd8f95c1551880530aa7165c7a43576e1c25680ed51ef573072889f0a","impliedFormat":1},{"version":"e7bd54c49435fc3668d6124ec6c400da823e088d7791ea4edf9483d170e5402d","impliedFormat":1},{"version":"b7d3c28a10bfefcf5dc2390b1684dfa0792ba845c83a4077e2b8927c598d0cd0","signature":"ee6a6afa2c88293a7b920309fb113ee4bb642ee65966ccffcebc7a48bea07a7e","impliedFormat":1},{"version":"9f7d5e154a06af18e5741273a02448f7352099d34306f6902ecd0ab4a18f4db4","signature":"a4ee07710fcabe36bac2b1cb71a05622faa85716eba08f0e7ce1c8eebdce3ead","impliedFormat":1},{"version":"dc3b172ee27054dbcedcf5007b78c256021db936f6313a9ce9a3ecbb503fd646","impliedFormat":1},{"version":"785b9d575b49124ce01b46f5b9402157c7611e6532effa562ac6aebec0074dfc","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"a4a39b5714adfcadd3bbea6698ca2e942606d833bde62ad5fb6ec55f5e438ff8","impliedFormat":1},{"version":"bbc1d029093135d7d9bfa4b38cbf8761db505026cc458b5e9c8b74f4000e5e75","impliedFormat":1},{"version":"26844826cb93d1cb95aa49dbaf3515600c53fd139a82c6e0acdbc4bd2c84953f","impliedFormat":1},{"version":"908217c4f2244ec402b73533ebfcc46d6dcd34fc1c807ff403d7f98702abb3bc","impliedFormat":1}],"root":[82,[425,432],455,456],"options":{"allowUnreachableCode":false,"allowUnusedLabels":false,"alwaysStrict":true,"declaration":true,"declarationDir":"./","declarationMap":false,"emitDeclarationOnly":true,"esModuleInterop":true,"exactOptionalPropertyTypes":true,"module":100,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noImplicitReturns":true,"noImplicitThis":true,"noPropertyAccessFromIndexSignature":true,"noUncheckedIndexedAccess":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","skipLibCheck":true,"strict":true,"strictBindCallApply":true,"strictFunctionTypes":true,"strictNullChecks":true,"strictPropertyInitialization":true,"useUnknownInCatchVariables":true},"referencedMap":[[75,1],[77,2],[78,2],[453,2],[80,3],[454,4],[462,5],[461,6],[460,5],[85,7],[86,8],[105,9],[100,10],[101,11],[102,12],[103,10],[104,10],[93,13],[92,14],[90,15],[91,16],[96,17],[97,18],[98,18],[99,18],[89,19],[95,20],[94,21],[88,22],[322,23],[119,24],[129,25],[128,26],[444,27],[445,28],[449,29],[452,30],[450,31],[448,32],[446,33],[324,34],[114,35],[451,36],[447,37],[183,28],[323,38],[313,39],[184,40],[316,41],[443,42],[240,43],[246,44],[247,45],[248,45],[245,46],[325,47],[230,48],[250,49],[254,50],[255,51],[256,49],[257,52],[206,53],[196,54],[205,55],[258,56],[259,57],[200,58],[261,59],[262,60],[191,61],[263,62],[267,63],[269,64],[271,65],[272,66],[273,67],[204,57],[266,68],[275,69],[276,62],[277,70],[279,71],[201,72],[280,73],[281,74],[239,75],[283,76],[284,49],[286,77],[287,78],[291,79],[297,80],[296,81],[299,82],[300,83],[301,83],[302,84],[305,85],[352,86],[326,86],[327,87],[328,88],[329,87],[330,89],[331,87],[332,89],[333,86],[334,87],[354,87],[335,87],[336,90],[337,91],[355,87],[338,89],[339,87],[340,87],[341,92],[342,89],[343,87],[356,87],[344,87],[345,87],[346,87],[347,89],[357,87],[348,92],[353,87],[349,89],[307,93],[308,94],[309,95],[310,96],[203,97],[311,98],[312,99],[192,100],[193,101],[314,102],[315,103],[317,104],[318,93],[319,96],[282,105],[321,106],[363,107],[351,108],[364,109],[306,110],[350,111],[320,112],[136,113],[358,114],[293,115],[362,116],[366,117],[208,118],[185,119],[175,119],[171,120],[197,120],[231,118],[176,121],[220,122],[150,119],[142,119],[268,123],[144,120],[242,119],[163,124],[138,119],[251,119],[177,119],[157,119],[158,125],[228,126],[164,127],[359,119],[375,119],[374,119],[113,128],[120,129],[132,130],[154,131],[155,132],[174,133],[424,134],[117,135],[131,136],[207,137],[126,138],[135,139],[121,140],[122,141],[249,142],[123,143],[124,144],[118,141],[127,145],[133,130],[134,146],[156,129],[125,147],[294,148],[288,149],[130,140],[217,150],[376,151],[219,152],[264,153],[377,154],[222,155],[223,156],[224,157],[378,158],[253,159],[225,160],[380,161],[408,162],[218,163],[221,164],[381,165],[379,166],[215,167],[383,168],[179,169],[395,170],[166,171],[167,171],[169,172],[170,173],[403,174],[402,175],[173,176],[172,177],[162,178],[232,179],[186,180],[406,181],[407,182],[226,183],[151,184],[140,185],[382,185],[141,185],[143,186],[145,187],[209,188],[146,185],[216,189],[147,190],[412,191],[149,192],[148,193],[152,174],[244,194],[243,195],[235,185],[233,187],[236,196],[234,197],[237,198],[227,199],[238,200],[195,201],[194,202],[187,203],[199,204],[270,205],[188,206],[265,207],[274,208],[198,209],[278,210],[189,210],[210,211],[418,212],[153,213],[211,27],[419,213],[168,213],[415,214],[252,215],[413,216],[416,214],[214,217],[414,216],[212,218],[213,219],[404,220],[405,221],[202,222],[292,206],[295,27],[159,27],[260,27],[160,27],[360,27],[361,223],[161,224],[365,225],[385,226],[285,227],[290,228],[399,229],[386,28],[400,230],[387,28],[139,231],[388,232],[389,233],[391,234],[392,235],[394,236],[401,231],[390,237],[393,226],[417,238],[396,239],[397,240],[398,241],[303,128],[304,242],[229,243],[298,27],[190,244],[180,245],[384,246],[165,247],[423,248],[181,249],[182,250],[289,251],[410,252],[411,252],[409,27],[421,253],[422,253],[420,27],[107,254],[112,255],[108,254],[109,254],[110,254],[111,254],[431,256],[428,257],[82,258],[426,259],[456,260],[430,261],[427,262],[455,263],[432,264],[429,265]],"version":"5.6.3"}
@@ -0,0 +1,3 @@
1
+ export declare const throwIfInvalidString: (key: string, value: string) => void;
2
+ export declare const throwIfInvalidEphKey: (ephKey: Uint8Array) => void;
3
+ export declare const throwIf: (condition: boolean, message: string) => void;
@@ -1,5 +1,6 @@
1
- import * as viem from 'viem';
1
+ import { LocalAccount } from 'viem/accounts';
2
2
  import { NetworkSigner } from './networkSigner';
3
+ import { Address } from 'viem';
3
4
  /**
4
5
  * Create a new viem custom account for signing transactions using
5
6
  * the MPC network.
@@ -8,6 +9,8 @@ import { NetworkSigner } from './networkSigner';
8
9
  * @param publicKey Associated public key of the selected Key ID.
9
10
  * @param threshold The threshold.
10
11
  */
11
- export declare function createViemAccount(networkSigner: NetworkSigner, keyId: string, publicKey: string): viem.LocalAccount;
12
- /** Computes ETH address from ECDSA `publicKey` returned by Silent Network */
13
- export declare function computeAddress(publicKey: string): viem.Address;
12
+ export declare function createViemAccount(networkSigner: NetworkSigner, keyId: string, publicKey: string): LocalAccount;
13
+ /** Computes ETH address from ECDSA `publicKey` returned by Silent Network
14
+ * @public
15
+ */
16
+ export declare function computeAddress(publicKey: string): Address;
@@ -1,5 +1,6 @@
1
- import { type KeygenSetupOpts, type KeygenResponse, type SignSetupOpts, type SignResponse } from './networkSigner';
2
- import { type ClientConfig, IWalletProviderServiceClient, type Signer } from './walletProviderServiceClientInterface';
1
+ import { AuthModule } from './authentication';
2
+ import { type KeygenSetupOpts, type KeygenResponse, type SignSetupOpts, type SignResponse, AddEphemeralKeyOpts, AddEphemeralKeyResponse } from './networkSigner';
3
+ import { type ClientConfig, IWalletProviderServiceClient } from './walletProviderServiceClientInterface';
3
4
  /**
4
5
  * The Websocket client to the Wallet Provider backend service.
5
6
  * All requests are relayed by this entity to the MPC network.
@@ -8,19 +9,24 @@ import { type ClientConfig, IWalletProviderServiceClient, type Signer } from './
8
9
  export declare class WalletProviderServiceClient implements IWalletProviderServiceClient {
9
10
  walletProviderId: string;
10
11
  walletProviderUrl: string;
12
+ passkeyCredentialId?: string;
11
13
  /**
12
14
  * Create new client that connects to the backend service
13
15
  * @param config - config containing information about backend service
14
16
  */
15
17
  constructor(config: ClientConfig);
16
18
  getWalletId(): string;
17
- startKeygen({ setup, signer }: {
19
+ startKeygen({ setup, authModule, }: {
18
20
  setup: KeygenSetupOpts;
19
- signer: Signer;
21
+ authModule: AuthModule;
20
22
  }): Promise<KeygenResponse>;
21
- startSigngen({ setup, signer }: {
23
+ startSigngen({ setup, authModule }: {
22
24
  setup: SignSetupOpts;
23
- signer: Signer;
25
+ authModule: AuthModule;
24
26
  }): Promise<SignResponse>;
25
- connect(params: KeygenSetupOpts | SignSetupOpts, signer: Signer): Promise<string>;
27
+ addEphemeralKey({ setup, authModule, }: {
28
+ setup: AddEphemeralKeyOpts;
29
+ authModule: AuthModule;
30
+ }): Promise<AddEphemeralKeyResponse>;
31
+ connect(setupOpts: KeygenSetupOpts | SignSetupOpts | AddEphemeralKeyOpts, authModule: AuthModule): Promise<string>;
26
32
  }
@@ -1,5 +1,5 @@
1
- import { UserAuthentication } from './authentication';
2
- import { KeygenResponse, KeygenSetupOpts, SignResponse, SignSetupOpts } from './networkSigner';
1
+ import { AuthModule, UserAuthentication } from './authentication';
2
+ import { AddEphemeralKeyOpts, KeygenResponse, KeygenSetupOpts, SignResponse, SignSetupOpts, AddEphemeralKeyResponse } from './networkSigner';
3
3
  /**
4
4
  * The config used to create Wallet Provider Service backend client.
5
5
  * Please refer to {@link https://shipyard.rs/silencelaboratories/crates/wallet-provider-service | example backend service}
@@ -24,12 +24,20 @@ export type Signer = (challenge: string) => Promise<UserAuthentication>;
24
24
  */
25
25
  export interface IWalletProviderServiceClient {
26
26
  getWalletId(): string;
27
- startKeygen({ setup, signer }: {
27
+ startKeygen({ setup, authModule }: {
28
28
  setup: KeygenSetupOpts;
29
- signer: Signer;
29
+ authModule: AuthModule;
30
30
  }): Promise<KeygenResponse>;
31
- startSigngen({ setup, signer }: {
31
+ startSigngen({ setup, authModule }: {
32
32
  setup: SignSetupOpts;
33
- signer: Signer;
33
+ authModule: AuthModule;
34
34
  }): Promise<SignResponse>;
35
+ addEphemeralKey({ setup, authModule, }: {
36
+ setup: AddEphemeralKeyOpts;
37
+ authModule: AuthModule;
38
+ }): Promise<AddEphemeralKeyResponse>;
39
+ }
40
+ export type QueryPath = 'signgen' | 'keygen' | 'addEphemeralKey';
41
+ export interface GetQueryPath {
42
+ get queryPath(): QueryPath;
35
43
  }
package/package.json CHANGED
@@ -1,9 +1,18 @@
1
1
  {
2
2
  "name": "@silencelaboratories/walletprovider-sdk",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
+ "author": "Silence Laboratories",
4
5
  "description": "Frontend SDK for Wallet Providers",
5
- "main": "dist/index.js",
6
- "types": "dist/index.d.ts",
6
+ "main": "./dist/index.cjs.js",
7
+ "module": "./dist/index.esm.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "require": "./dist/index.cjs.js",
13
+ "import": "./dist/index.esm.js"
14
+ }
15
+ },
7
16
  "files": [
8
17
  "dist"
9
18
  ],
@@ -12,27 +21,31 @@
12
21
  "formatcheck": "prettier --check --cache .",
13
22
  "lint": "eslint --cache ./src/**/*.ts",
14
23
  "typecheck": "tsc -p . --noEmit",
15
- "build": "bun run scripts/build.mjs && bun run build:declaration",
16
- "build:e2e": "bun run scripts/build.e2e.mjs && bun run build:declaration",
24
+ "build": "node build.js && npm run build:declaration",
17
25
  "build:declaration": "tsc -p . --emitDeclarationOnly",
18
- "test": "bun test",
19
- "test:watch": "bun test --watch",
20
- "docs": "bun run build:declaration && api-extractor run --local --verbose && api-documenter markdown -i ./temp -o ./docs"
26
+ "clean": "rimraf dist",
27
+ "prepack": "npm run clean && npm run build && npm run build:declaration",
28
+ "docs": "npm run build:declaration && api-extractor run --local --verbose && api-documenter markdown -i ./temp -o ./docs"
21
29
  },
22
- "type": "module",
23
30
  "devDependencies": {
24
31
  "@eslint/js": "^9.3.0",
25
32
  "@microsoft/api-documenter": "^7.25.2",
26
33
  "@microsoft/api-extractor": "^7.46.2",
27
- "@types/bun": "^1.1.2",
34
+ "@types/eslint-plugin-security": "^3.0.0",
35
+ "esbuild": "0.24.0",
36
+ "esbuild-node-externals": "^1.15.0",
28
37
  "eslint": "^8.x",
38
+ "eslint-plugin-security": "^3.0.1",
29
39
  "globals": "^15.3.0",
40
+ "npm-dts": "^1.3.13",
30
41
  "prettier": "^3.2.5",
31
- "typescript": "^5.4.5",
42
+ "rimraf": "^6.0.1",
43
+ "typescript": "5.6.3",
32
44
  "typescript-eslint": "^7.11.0"
33
45
  },
34
46
  "dependencies": {
35
- "@noble/curves": "^1.4.2",
36
- "viem": "^2.11.1"
47
+ "@noble/curves": "^1.6.0",
48
+ "js-base64": "^3.7.7",
49
+ "viem": "2.21.32"
37
50
  }
38
51
  }
package/dist/index.js DELETED
@@ -1 +0,0 @@
1
- import{toHex as R} from"viem";function Y(x){return x.message!==void 0}var j=1,E=2;class H{t;n;key_label;metadata;constructor({t:x,n:F,key_label:B,permissions:J,ephPK:U}){if(this.t=x,this.n=F,this.key_label=B,this.metadata=[],J)this.metadata.push({tag:j,value:J});if(U)this.metadata.push({tag:E,value:U})}}class V{authModule;threshold;totalNodes;wp_client;constructor(x,F,B,J){if(F===0)throw new Error("Threshold cannot be 0");this.threshold=F,this.totalNodes=B,this.authModule=J,this.wp_client=x}async authenticateAndCreateKey(x,F){try{const B=new H({t:this.threshold,n:this.totalNodes,permissions:F,ephPK:R(x)});console.log("Generated Payload:",B);const J=(X)=>this.authModule.authenticate({setup:B,challenge:X}),U=await this.wp_client.startKeygen({setup:B,signer:J});return console.log("Keygen response:",U),U}catch(B){throw console.error(B),B}}async authenticateAndSign(x,F){const B={t:this.threshold,key_id:x,message:F},J=(X)=>this.authModule.authenticate({setup:B,challenge:X}),U=await this.wp_client.startSigngen({setup:B,signer:J});return console.log("Sign response:",U),U}}import{toHex as z} from"viem";import{ed25519 as f} from"@noble/curves/ed25519";var k=function(x,F,B){console.log("EPHKEY",B);const J=new H({t:x.t,n:x.n,key_label:x.key_label,permissions:void 0,ephPK:z(B)});return console.log("SETUP_NO_PERM",J),{types:{EIP712Domain:_,...w},domain:I,primaryType:"Request",message:{setup:J,challenge:F}}};async function D({setup:x,user_id:F,challenge:B,browserWallet:J,ephPK:U,lifetime:X}){if(Y(x))throw new Error("EOA auth cannot be used for Sign requests, please use EphAuth instead");const Z=k(x,B,U);console.log("typed request:"),console.log(JSON.stringify(Z,void 0,4));const Q=await J.signTypedData(F,Z);console.log("User signed a request",Q);const $={eoa:F,ephPK:z(U),expiry:Math.floor(Date.now()/1000)+X};return{credentials:{credentials:JSON.stringify($),method:"eoa",id:F},signature:Q}}async function N({setup:x,user_id:F,challenge:B,ephSK:J,ephPK:U}){const X={setup:x,challenge:B},Z=new TextEncoder,Q=z(f.sign(Z.encode(JSON.stringify(X)),J));console.log("AUTH SIGNATURE by eph key",Q),console.log("User signed a request",Q);const $={eoa:F,ephPK:z(U),expiry:0};return{credentials:{credentials:JSON.stringify($),method:"ephemeral",id:F},signature:Q}}var M=[{name:"tag",type:"uint16"},{name:"value",type:"string"}],w={Request:[{name:"setup",type:"KeygenSetupOpts"},{name:"challenge",type:"string"}],KeygenSetupOpts:[{name:"t",type:"uint32"},{name:"n",type:"uint32"},{name:"metadata",type:"TaggedValue[]"}],TaggedValue:M},I={name:"SilentShard authentication",version:"0.1.0"},_=[{name:"name",type:"string"},{name:"version",type:"string"}];import{ed25519 as v} from"@noble/curves/ed25519";var q;(function(B){B[B["EOA"]=0]="EOA";B[B["NONE"]=1]="NONE"})(q||(q={}));class W{userId;browserWallet;ephPK;lifetime;constructor(x,F,B,J=3600){this.userId=x,this.browserWallet=F,this.ephPK=B,this.lifetime=J}async authenticate({setup:x,challenge:F}){return await D({setup:x,user_id:this.userId,challenge:F,browserWallet:this.browserWallet,ephPK:this.ephPK,lifetime:this.lifetime})}}class C{userId;ephSK;ephPK;constructor(x,F){this.userId=x,this.ephSK=F,this.ephPK=v.getPublicKey(this.ephSK)}async authenticate({setup:x,challenge:F}){return await N({setup:x,user_id:this.userId,challenge:F,ephSK:this.ephSK,ephPK:this.ephPK})}}var T=(x)=>btoa(String.fromCodePoint.apply(null,Array.from(x)));var L;(function(U){U[U["initiated"]=0]="initiated";U[U["waitingForSign"]=1]="waitingForSign";U[U["waitingForResult"]=2]="waitingForResult";U[U["finished"]=3]="finished"})(L||(L={}));class O{walletProviderId;walletProviderUrl;constructor(x){this.walletProviderId=x.walletProviderId,this.walletProviderUrl=x.walletProviderUrl}getWalletId(){return this.walletProviderId}async startKeygen({setup:x,signer:F}){return this.connect(x,F).then((B)=>{const J=B.split(":"),U=J[1].split("=")[1],X=J[0].split("=")[1];return{publicKey:U,keyId:X}})}async startSigngen({setup:x,signer:F}){return this.connect(x,F).then((B)=>{const J=B.split(":"),U=J[0].split("=")[1],X=J[1].split("=")[1];return{sign:U,recid:parseInt(X)}})}connect(x,F){return new Promise((B,J)=>{let U=L.initiated,X;if(Y(x))X="signgen",x.message=T((new TextEncoder()).encode(x.message));else X="keygen";const Z=new WebSocket(`${this.walletProviderUrl}/${X}`);Z.addEventListener("open",(Q)=>{switch(console.log(`Connection opened in state ${U} with event ${JSON.stringify(Q,void 0,"\t")}`),U){case L.initiated:U=L.waitingForSign,console.log(`Sending setup: ${JSON.stringify(x)}`),Z.send(JSON.stringify(x));break;case L.waitingForSign:case L.waitingForResult:U=L.finished,J("Incorrect protocol state");break;case L.finished:break}}),Z.addEventListener("message",async(Q)=>{switch(console.log(`Connection message in state ${U} with event ${JSON.stringify(Q,void 0,"\t")}`),U){case L.initiated:U=L.finished,J("Incorrect protocol state");break;case L.waitingForSign:{U=L.waitingForResult;const $=await F(Q.data);console.log(`Sending signature: ${JSON.stringify($)}`),Z.send(JSON.stringify($));break}case L.waitingForResult:U=L.finished,Z.close(),B(Q.data);break;case L.finished:break}}),Z.addEventListener("error",(Q)=>{if(console.log(`Connection error in state ${U} with event ${JSON.stringify(Q,void 0,"\t")}`),U!=L.finished)U=L.finished,J("Incorrect protocol state")}),Z.addEventListener("close",(Q)=>{if(console.log(`Connection closed in state ${U} with event ${JSON.stringify(Q,void 0,"\t")}`),U!=L.finished)U=L.finished,J("Incorrect protocol state")})})}}import*as G from"viem";import{publicKeyToAddress as A,toAccount as t} from"viem/accounts";import{secp256k1 as b} from"@noble/curves/secp256k1";function m(x){if(x.startsWith("0x"))x=x.slice(2);if(x.startsWith("04"))return A(`0x${x} `);else if(x.startsWith("02")||x.startsWith("03")){const F=b.ProjectivePoint.fromHex(x).toHex(!1);return A(`0x${F}`)}else throw new Error("Invalid public key")}export{m as computeAddress,O as WalletProviderServiceClient,V as NetworkSigner,C as EphAuth,W as EOAAuth,q as AuthMethod};