@reclaimprotocol/attestor-core 4.0.3 → 5.0.1-beta.1

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.
Files changed (249) hide show
  1. package/LICENSE +660 -660
  2. package/README.md +1 -2
  3. package/package.json +72 -60
  4. package/lib/avs/abis/avsDirectoryABI.d.ts +0 -60
  5. package/lib/avs/abis/avsDirectoryABI.js +0 -344
  6. package/lib/avs/abis/delegationABI.d.ts +0 -126
  7. package/lib/avs/abis/delegationABI.js +0 -5
  8. package/lib/avs/abis/registryABI.d.ts +0 -136
  9. package/lib/avs/abis/registryABI.js +0 -729
  10. package/lib/avs/client/create-claim-on-avs.d.ts +0 -12
  11. package/lib/avs/client/create-claim-on-avs.js +0 -147
  12. package/lib/avs/config.d.ts +0 -7
  13. package/lib/avs/config.js +0 -24
  14. package/lib/avs/contracts/ReclaimServiceManager.d.ts +0 -697
  15. package/lib/avs/contracts/ReclaimServiceManager.js +0 -3
  16. package/lib/avs/contracts/common.d.ts +0 -21
  17. package/lib/avs/contracts/common.js +0 -3
  18. package/lib/avs/contracts/factories/ReclaimServiceManager__factory.d.ts +0 -888
  19. package/lib/avs/contracts/factories/ReclaimServiceManager__factory.js +0 -1174
  20. package/lib/avs/contracts/factories/index.d.ts +0 -1
  21. package/lib/avs/contracts/factories/index.js +0 -9
  22. package/lib/avs/contracts/index.d.ts +0 -3
  23. package/lib/avs/contracts/index.js +0 -40
  24. package/lib/avs/tests/test.operator.d.ts +0 -11
  25. package/lib/avs/tests/test.operator.js +0 -313
  26. package/lib/avs/tests/utils.d.ts +0 -2
  27. package/lib/avs/tests/utils.js +0 -50
  28. package/lib/avs/types/index.d.ts +0 -55
  29. package/lib/avs/types/index.js +0 -3
  30. package/lib/avs/utils/contracts.d.ts +0 -21
  31. package/lib/avs/utils/contracts.js +0 -38
  32. package/lib/avs/utils/register.d.ts +0 -27
  33. package/lib/avs/utils/register.js +0 -82
  34. package/lib/avs/utils/tasks.d.ts +0 -22
  35. package/lib/avs/utils/tasks.js +0 -45
  36. package/lib/client/create-claim.d.ts +0 -5
  37. package/lib/client/create-claim.js +0 -424
  38. package/lib/client/index.d.ts +0 -3
  39. package/lib/client/index.js +0 -20
  40. package/lib/client/tunnels/make-rpc-tcp-tunnel.d.ts +0 -16
  41. package/lib/client/tunnels/make-rpc-tcp-tunnel.js +0 -60
  42. package/lib/client/tunnels/make-rpc-tls-tunnel.d.ts +0 -25
  43. package/lib/client/tunnels/make-rpc-tls-tunnel.js +0 -135
  44. package/lib/client/utils/attestor-pool.d.ts +0 -6
  45. package/lib/client/utils/attestor-pool.js +0 -28
  46. package/lib/client/utils/client-socket.d.ts +0 -11
  47. package/lib/client/utils/client-socket.js +0 -100
  48. package/lib/client/utils/message-handler.d.ts +0 -4
  49. package/lib/client/utils/message-handler.js +0 -94
  50. package/lib/config/index.d.ts +0 -28
  51. package/lib/config/index.js +0 -39
  52. package/lib/index.d.ts +0 -10
  53. package/lib/index.js +0 -50
  54. package/lib/mechain/abis/governanceABI.d.ts +0 -50
  55. package/lib/mechain/abis/governanceABI.js +0 -462
  56. package/lib/mechain/abis/taskABI.d.ts +0 -157
  57. package/lib/mechain/abis/taskABI.js +0 -513
  58. package/lib/mechain/client/create-claim-on-mechain.d.ts +0 -10
  59. package/lib/mechain/client/create-claim-on-mechain.js +0 -32
  60. package/lib/mechain/client/index.d.ts +0 -1
  61. package/lib/mechain/client/index.js +0 -18
  62. package/lib/mechain/constants/index.d.ts +0 -3
  63. package/lib/mechain/constants/index.js +0 -7
  64. package/lib/mechain/index.d.ts +0 -2
  65. package/lib/mechain/index.js +0 -19
  66. package/lib/mechain/types/index.d.ts +0 -23
  67. package/lib/mechain/types/index.js +0 -3
  68. package/lib/proto/api.d.ts +0 -508
  69. package/lib/proto/api.js +0 -3700
  70. package/lib/providers/http/index.d.ts +0 -3
  71. package/lib/providers/http/index.js +0 -613
  72. package/lib/providers/http/utils.d.ts +0 -74
  73. package/lib/providers/http/utils.js +0 -360
  74. package/lib/providers/index.d.ts +0 -4
  75. package/lib/providers/index.js +0 -11
  76. package/lib/scripts/check-avs-registration.d.ts +0 -1
  77. package/lib/scripts/check-avs-registration.js +0 -29
  78. package/lib/scripts/generate-provider-types.d.ts +0 -5
  79. package/lib/scripts/generate-provider-types.js +0 -82
  80. package/lib/scripts/generate-receipt.d.ts +0 -9
  81. package/lib/scripts/generate-receipt.js +0 -90
  82. package/lib/scripts/generate-toprf-keys.d.ts +0 -1
  83. package/lib/scripts/generate-toprf-keys.js +0 -23
  84. package/lib/scripts/register-avs-operator.d.ts +0 -1
  85. package/lib/scripts/register-avs-operator.js +0 -7
  86. package/lib/scripts/start-server.d.ts +0 -1
  87. package/lib/scripts/start-server.js +0 -13
  88. package/lib/scripts/update-avs-metadata.d.ts +0 -1
  89. package/lib/scripts/update-avs-metadata.js +0 -22
  90. package/lib/scripts/utils.d.ts +0 -1
  91. package/lib/scripts/utils.js +0 -11
  92. package/lib/scripts/verify-root-ca.d.ts +0 -1
  93. package/lib/scripts/verify-root-ca.js +0 -51
  94. package/lib/scripts/whitelist-operator.d.ts +0 -1
  95. package/lib/scripts/whitelist-operator.js +0 -18
  96. package/lib/server/create-server.d.ts +0 -7
  97. package/lib/server/create-server.js +0 -92
  98. package/lib/server/handlers/claimTunnel.d.ts +0 -2
  99. package/lib/server/handlers/claimTunnel.js +0 -78
  100. package/lib/server/handlers/completeClaimOnChain.d.ts +0 -2
  101. package/lib/server/handlers/completeClaimOnChain.js +0 -28
  102. package/lib/server/handlers/createClaimOnChain.d.ts +0 -2
  103. package/lib/server/handlers/createClaimOnChain.js +0 -31
  104. package/lib/server/handlers/createTaskOnMechain.d.ts +0 -2
  105. package/lib/server/handlers/createTaskOnMechain.js +0 -52
  106. package/lib/server/handlers/createTunnel.d.ts +0 -2
  107. package/lib/server/handlers/createTunnel.js +0 -101
  108. package/lib/server/handlers/disconnectTunnel.d.ts +0 -2
  109. package/lib/server/handlers/disconnectTunnel.js +0 -10
  110. package/lib/server/handlers/index.d.ts +0 -4
  111. package/lib/server/handlers/index.js +0 -22
  112. package/lib/server/handlers/init.d.ts +0 -2
  113. package/lib/server/handlers/init.js +0 -36
  114. package/lib/server/handlers/toprf.d.ts +0 -2
  115. package/lib/server/handlers/toprf.js +0 -21
  116. package/lib/server/index.d.ts +0 -4
  117. package/lib/server/index.js +0 -21
  118. package/lib/server/socket.d.ts +0 -13
  119. package/lib/server/socket.js +0 -114
  120. package/lib/server/tunnels/make-tcp-tunnel.d.ts +0 -20
  121. package/lib/server/tunnels/make-tcp-tunnel.js +0 -175
  122. package/lib/server/utils/apm.d.ts +0 -11
  123. package/lib/server/utils/apm.js +0 -43
  124. package/lib/server/utils/assert-valid-claim-request.d.ts +0 -30
  125. package/lib/server/utils/assert-valid-claim-request.js +0 -200
  126. package/lib/server/utils/config-env.d.ts +0 -1
  127. package/lib/server/utils/config-env.js +0 -7
  128. package/lib/server/utils/dns.d.ts +0 -1
  129. package/lib/server/utils/dns.js +0 -22
  130. package/lib/server/utils/generics.d.ts +0 -22
  131. package/lib/server/utils/generics.js +0 -59
  132. package/lib/server/utils/iso.d.ts +0 -1
  133. package/lib/server/utils/iso.js +0 -260
  134. package/lib/server/utils/keep-alive.d.ts +0 -7
  135. package/lib/server/utils/keep-alive.js +0 -42
  136. package/lib/server/utils/process-handshake.d.ts +0 -13
  137. package/lib/server/utils/process-handshake.js +0 -191
  138. package/lib/tests/describe-with-server.d.ts +0 -20
  139. package/lib/tests/describe-with-server.js +0 -64
  140. package/lib/tests/mock-provider-server.d.ts +0 -13
  141. package/lib/tests/mock-provider-server.js +0 -65
  142. package/lib/tests/mocks.d.ts +0 -4
  143. package/lib/tests/mocks.js +0 -23
  144. package/lib/tests/test.auth.d.ts +0 -1
  145. package/lib/tests/test.auth.js +0 -75
  146. package/lib/tests/test.bgp-listener.d.ts +0 -1
  147. package/lib/tests/test.bgp-listener.js +0 -169
  148. package/lib/tests/test.claim-creation.d.ts +0 -1
  149. package/lib/tests/test.claim-creation.js +0 -280
  150. package/lib/tests/test.http-parser.d.ts +0 -1
  151. package/lib/tests/test.http-parser.js +0 -120
  152. package/lib/tests/test.http-provider-utils.d.ts +0 -1
  153. package/lib/tests/test.http-provider-utils.js +0 -2416
  154. package/lib/tests/test.http-provider.d.ts +0 -1
  155. package/lib/tests/test.http-provider.js +0 -114
  156. package/lib/tests/test.rpc-communication.d.ts +0 -1
  157. package/lib/tests/test.rpc-communication.js +0 -64
  158. package/lib/tests/test.rpc-tunnel.d.ts +0 -1
  159. package/lib/tests/test.rpc-tunnel.js +0 -172
  160. package/lib/tests/test.signatures.d.ts +0 -1
  161. package/lib/tests/test.signatures.js +0 -24
  162. package/lib/tests/test.tcp-tunnel.d.ts +0 -1
  163. package/lib/tests/test.tcp-tunnel.js +0 -64
  164. package/lib/tests/test.zk.d.ts +0 -1
  165. package/lib/tests/test.zk.js +0 -337
  166. package/lib/tests/utils.d.ts +0 -18
  167. package/lib/tests/utils.js +0 -64
  168. package/lib/types/bgp.d.ts +0 -11
  169. package/lib/types/bgp.js +0 -3
  170. package/lib/types/claims.d.ts +0 -73
  171. package/lib/types/claims.js +0 -3
  172. package/lib/types/client.d.ts +0 -163
  173. package/lib/types/client.js +0 -3
  174. package/lib/types/general.d.ts +0 -51
  175. package/lib/types/general.js +0 -3
  176. package/lib/types/handlers.d.ts +0 -10
  177. package/lib/types/handlers.js +0 -3
  178. package/lib/types/index.d.ts +0 -10
  179. package/lib/types/index.js +0 -27
  180. package/lib/types/providers.d.ts +0 -150
  181. package/lib/types/providers.gen.d.ts +0 -429
  182. package/lib/types/providers.gen.js +0 -14
  183. package/lib/types/providers.js +0 -3
  184. package/lib/types/rpc.d.ts +0 -35
  185. package/lib/types/rpc.js +0 -3
  186. package/lib/types/signatures.d.ts +0 -28
  187. package/lib/types/signatures.js +0 -3
  188. package/lib/types/tunnel.d.ts +0 -18
  189. package/lib/types/tunnel.js +0 -3
  190. package/lib/types/zk.d.ts +0 -23
  191. package/lib/types/zk.js +0 -3
  192. package/lib/utils/atomic-operations.d.ts +0 -24
  193. package/lib/utils/atomic-operations.js +0 -65
  194. package/lib/utils/auth.d.ts +0 -7
  195. package/lib/utils/auth.js +0 -64
  196. package/lib/utils/b64-json.d.ts +0 -2
  197. package/lib/utils/b64-json.js +0 -23
  198. package/lib/utils/benchmark.d.ts +0 -1
  199. package/lib/utils/benchmark.js +0 -70
  200. package/lib/utils/bgp-listener.d.ts +0 -7
  201. package/lib/utils/bgp-listener.js +0 -126
  202. package/lib/utils/claims.d.ts +0 -33
  203. package/lib/utils/claims.js +0 -112
  204. package/lib/utils/connection-state-machine.d.ts +0 -43
  205. package/lib/utils/connection-state-machine.js +0 -129
  206. package/lib/utils/env.d.ts +0 -3
  207. package/lib/utils/env.js +0 -20
  208. package/lib/utils/error.d.ts +0 -27
  209. package/lib/utils/error.js +0 -43
  210. package/lib/utils/generics.d.ts +0 -112
  211. package/lib/utils/generics.js +0 -348
  212. package/lib/utils/http-parser.d.ts +0 -59
  213. package/lib/utils/http-parser.js +0 -252
  214. package/lib/utils/index.d.ts +0 -12
  215. package/lib/utils/index.js +0 -29
  216. package/lib/utils/logger.d.ts +0 -13
  217. package/lib/utils/logger.js +0 -100
  218. package/lib/utils/prepare-packets.d.ts +0 -16
  219. package/lib/utils/prepare-packets.js +0 -61
  220. package/lib/utils/redactions.d.ts +0 -54
  221. package/lib/utils/redactions.js +0 -148
  222. package/lib/utils/resource-monitor.d.ts +0 -61
  223. package/lib/utils/resource-monitor.js +0 -107
  224. package/lib/utils/retries.d.ts +0 -12
  225. package/lib/utils/retries.js +0 -28
  226. package/lib/utils/signatures/eth.d.ts +0 -2
  227. package/lib/utils/signatures/eth.js +0 -33
  228. package/lib/utils/signatures/index.d.ts +0 -5
  229. package/lib/utils/signatures/index.js +0 -11
  230. package/lib/utils/socket-base.d.ts +0 -22
  231. package/lib/utils/socket-base.js +0 -95
  232. package/lib/utils/tls.d.ts +0 -2
  233. package/lib/utils/tls.js +0 -32
  234. package/lib/utils/validation.d.ts +0 -2
  235. package/lib/utils/validation.js +0 -46
  236. package/lib/utils/ws.d.ts +0 -12
  237. package/lib/utils/ws.js +0 -38
  238. package/lib/utils/zk.d.ts +0 -55
  239. package/lib/utils/zk.js +0 -444
  240. package/lib/window-rpc/index.d.ts +0 -3
  241. package/lib/window-rpc/index.js +0 -20
  242. package/lib/window-rpc/setup-window-rpc.d.ts +0 -5
  243. package/lib/window-rpc/setup-window-rpc.js +0 -291
  244. package/lib/window-rpc/types.d.ts +0 -192
  245. package/lib/window-rpc/types.js +0 -3
  246. package/lib/window-rpc/utils.d.ts +0 -14
  247. package/lib/window-rpc/utils.js +0 -102
  248. package/lib/window-rpc/window-rpc-zk.d.ts +0 -15
  249. package/lib/window-rpc/window-rpc-zk.js +0 -85
package/lib/utils/ws.js DELETED
@@ -1,38 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.makeWebSocket = makeWebSocket;
4
- exports.promisifySend = promisifySend;
5
- const config_1 = require("../config");
6
- const env_1 = require("../utils/env");
7
- /**
8
- * Default WebSocket implementation, uses `ws` package
9
- * for Node.js and the native WebSocket for the browser & other
10
- * environments.
11
- */
12
- function makeWebSocket(url) {
13
- if ((0, env_1.detectEnvironment)() === 'node') {
14
- const ws = require('ws');
15
- return promisifySend(new ws.WebSocket(url, { maxPayload: config_1.MAX_PAYLOAD_SIZE }));
16
- }
17
- return new WebSocket(url);
18
- }
19
- /**
20
- * Adds the "sendPromise" fn to the given WebSocket instance,
21
- * if not already present.
22
- */
23
- function promisifySend(ws) {
24
- if (ws.sendPromise) {
25
- return ws;
26
- }
27
- ws.sendPromise = (data) => (new Promise((resolve, reject) => {
28
- ws.send(data, err => {
29
- if (err) {
30
- reject(err);
31
- return;
32
- }
33
- resolve();
34
- });
35
- }));
36
- return ws;
37
- }
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvd3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFTQSxzQ0FTQztBQU1ELHNDQW1CQztBQTNDRCx1Q0FBNkM7QUFDN0MsdUNBQWlEO0FBR2pEOzs7O0dBSUc7QUFDSCxTQUFnQixhQUFhLENBQUMsR0FBVztJQUN4QyxJQUFHLElBQUEsdUJBQWlCLEdBQUUsS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUNuQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUF3QixDQUFBO1FBQy9DLE9BQU8sYUFBYSxDQUNuQixJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEVBQUUsVUFBVSxFQUFFLHlCQUFnQixFQUFFLENBQUMsQ0FDdkQsQ0FBQTtJQUNGLENBQUM7SUFFRCxPQUFPLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQzFCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixhQUFhLENBQUMsRUFBZTtJQUM1QyxJQUFHLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixPQUFPLEVBQUUsQ0FBQTtJQUNWLENBQUM7SUFFRCxFQUFFLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUMxQixJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUMvQixFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRTtZQUNuQixJQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUNSLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtnQkFDWCxPQUFNO1lBQ1AsQ0FBQztZQUVELE9BQU8sRUFBRSxDQUFBO1FBQ1YsQ0FBQyxDQUFDLENBQUE7SUFDSCxDQUFDLENBQUMsQ0FDRixDQUFBO0lBRUQsT0FBTyxFQUFFLENBQUE7QUFDVixDQUFDIn0=
package/lib/utils/zk.d.ts DELETED
@@ -1,55 +0,0 @@
1
- import { CipherSuite } from '@reclaimprotocol/tls';
2
- import { EncryptionAlgorithm, OPRFOperator, PrivateInput, PublicInput, ZKEngine, ZKOperator } from '@reclaimprotocol/zk-symmetric-crypto';
3
- import { MessageReveal_MessageRevealZk as ZKReveal, MessageReveal_ZKProof as ZKProof, ZKProofEngine } from '../proto/api';
4
- import { CompleteTLSPacket, Logger, OPRFOperators, PrepareZKProofsBaseOpts, TOPRFProofParams, ZKOperators, ZKRevealInfo } from '../types';
5
- type PrepareZKProofsOpts = {
6
- logger?: Logger;
7
- cipherSuite: CipherSuite;
8
- } & PrepareZKProofsBaseOpts;
9
- type ZKVerifyOpts = {
10
- cipherSuite: CipherSuite;
11
- ciphertext: Uint8Array;
12
- zkReveal: ZKReveal;
13
- logger?: Logger;
14
- /** get ZK operator for specified algorithm */
15
- zkOperators?: ZKOperators;
16
- oprfOperators?: OPRFOperators;
17
- zkEngine?: ZKEngine;
18
- iv: Uint8Array;
19
- recordNumber: number;
20
- };
21
- type ZKProofToGenerate = {
22
- startIdx: number;
23
- redactedPlaintext: Uint8Array;
24
- privateInput: PrivateInput;
25
- publicInput: PublicInput;
26
- toprf?: TOPRFProofParams;
27
- };
28
- type ZKPacketToProve = {
29
- onGeneratedProofs(proofs: ZKProof[]): void;
30
- algorithm: EncryptionAlgorithm;
31
- proofsToGenerate: ZKProofToGenerate[];
32
- iv: Uint8Array;
33
- };
34
- export declare function makeZkProofGenerator({ zkOperators, oprfOperators, logger, zkProofConcurrency, cipherSuite, zkEngine }: PrepareZKProofsOpts): Promise<{
35
- /**
36
- * Adds the given packet to the list of packets to
37
- * generate ZK proofs for.
38
- *
39
- * Call `generateProofs()` to finally generate the proofs
40
- */
41
- addPacketToProve(packet: CompleteTLSPacket, { redactedPlaintext, toprfs }: ZKRevealInfo, onGeneratedProofs: ZKPacketToProve["onGeneratedProofs"]): Promise<void>;
42
- getTotalChunksToProve(): number;
43
- generateProofs(onChunkDone?: () => void): Promise<void>;
44
- }>;
45
- /**
46
- * Verify the given ZK proof
47
- */
48
- export declare function verifyZkPacket({ cipherSuite, ciphertext, zkReveal, zkOperators, oprfOperators, logger, zkEngine, iv, recordNumber }: ZKVerifyOpts): Promise<{
49
- redactedPlaintext: Uint8Array<ArrayBuffer>;
50
- }>;
51
- export declare function makeDefaultZkOperator(algorithm: EncryptionAlgorithm, zkEngine: ZKEngine, logger: Logger): ZKOperator;
52
- export declare function makeDefaultOPRFOperator(algorithm: EncryptionAlgorithm, zkEngine: ZKEngine, logger: Logger): OPRFOperator;
53
- export declare function getEngineString(engine: ZKProofEngine): "snarkjs" | "gnark";
54
- export declare function getEngineProto(engine: ZKEngine): ZKProofEngine.ZK_ENGINE_SNARKJS | ZKProofEngine.ZK_ENGINE_GNARK;
55
- export {};
package/lib/utils/zk.js DELETED
@@ -1,444 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.makeZkProofGenerator = makeZkProofGenerator;
4
- exports.verifyZkPacket = verifyZkPacket;
5
- exports.makeDefaultZkOperator = makeDefaultZkOperator;
6
- exports.makeDefaultOPRFOperator = makeDefaultOPRFOperator;
7
- exports.getEngineString = getEngineString;
8
- exports.getEngineProto = getEngineProto;
9
- const tls_1 = require("@reclaimprotocol/tls");
10
- const zk_symmetric_crypto_1 = require("@reclaimprotocol/zk-symmetric-crypto");
11
- const config_1 = require("../config");
12
- const api_1 = require("../proto/api");
13
- const env_1 = require("../utils/env");
14
- const error_1 = require("../utils/error");
15
- const generics_1 = require("../utils/generics");
16
- const logger_1 = require("../utils/logger");
17
- const redactions_1 = require("../utils/redactions");
18
- const ZK_CONCURRENCY = +((0, env_1.getEnvVariable)('ZK_CONCURRENCY')
19
- || config_1.DEFAULT_ZK_CONCURRENCY);
20
- async function makeZkProofGenerator({ zkOperators, oprfOperators, logger = logger_1.logger, zkProofConcurrency = ZK_CONCURRENCY, cipherSuite, zkEngine = 'snarkjs' }) {
21
- const { default: PQueue } = await import('p-queue');
22
- const zkQueue = new PQueue({
23
- concurrency: zkProofConcurrency,
24
- autoStart: true,
25
- });
26
- const packetsToProve = [];
27
- logger = (logger || logger_1.logger).child({ module: 'zk', zkEngine: zkEngine });
28
- let zkProofsToGen = 0;
29
- return {
30
- /**
31
- * Adds the given packet to the list of packets to
32
- * generate ZK proofs for.
33
- *
34
- * Call `generateProofs()` to finally generate the proofs
35
- */
36
- async addPacketToProve(packet, { redactedPlaintext, toprfs }, onGeneratedProofs) {
37
- if (packet.type === 'plaintext') {
38
- throw new Error('Cannot generate proof for plaintext');
39
- }
40
- const alg = (0, generics_1.getZkAlgorithmForCipherSuite)(cipherSuite);
41
- const chunkSizeBytes = getChunkSizeBytes(alg);
42
- const key = await tls_1.crypto.exportKey(packet.encKey);
43
- const iv = packet.iv;
44
- const ciphertext = (0, generics_1.getPureCiphertext)(packet.ciphertext, cipherSuite);
45
- const packetToProve = {
46
- onGeneratedProofs,
47
- algorithm: alg,
48
- proofsToGenerate: [],
49
- iv: packet.fixedIv,
50
- };
51
- const slicesDone = [];
52
- // first we'll handle all TOPRF blocks
53
- // we do these first, because they can span multiple chunks
54
- // & we need to be able to span the right chunks
55
- for (const toprf of toprfs || []) {
56
- const fromIndex = getIdealOffsetForToprfBlock(alg, toprf);
57
- const toIndex = Math.min(fromIndex + chunkSizeBytes, ciphertext.length);
58
- // ensure this OPRF block doesn't overlap with any other OPRF block
59
- const slice = { fromIndex, toIndex };
60
- assertNoOverlapOprf(slice);
61
- addProofsToGenerate(slice, {
62
- ...toprf,
63
- dataLocation: {
64
- ...toprf.dataLocation,
65
- fromIndex: toprf.dataLocation.fromIndex - fromIndex
66
- }
67
- });
68
- }
69
- // now we'll go through the rest of the ciphertext, and add proofs
70
- // for the sections that haven't been covered by the TOPRF blocks
71
- const slicesCp = sortSlices(slicesDone.slice());
72
- let fromIndex = 0;
73
- for (const done of slicesCp) {
74
- if (done.fromIndex > fromIndex) {
75
- addProofsToGenerate({
76
- fromIndex,
77
- toIndex: done.fromIndex
78
- });
79
- }
80
- fromIndex = done.toIndex;
81
- }
82
- if (fromIndex < ciphertext.length) {
83
- addProofsToGenerate({
84
- fromIndex,
85
- toIndex: ciphertext.length
86
- });
87
- }
88
- // generate proofs in order of start index
89
- packetToProve.proofsToGenerate
90
- .sort((a, b) => a.startIdx - b.startIdx);
91
- packetsToProve.push(packetToProve);
92
- function assertNoOverlapOprf(slice) {
93
- for (const done of slicesDone) {
94
- if (
95
- // 1d box overlap
96
- slice.fromIndex < done.toIndex
97
- && slice.toIndex > done.fromIndex) {
98
- throw new error_1.AttestorError('ERROR_BAD_REQUEST', 'Single chunk has multiple OPRFs');
99
- }
100
- }
101
- }
102
- function addProofsToGenerate({ fromIndex, toIndex }, toprf) {
103
- for (let i = fromIndex; i < toIndex; i += chunkSizeBytes) {
104
- const slice = {
105
- fromIndex: i,
106
- toIndex: Math.min(i + chunkSizeBytes, toIndex)
107
- };
108
- slicesDone.push(slice);
109
- const proofParams = getProofGenerationParamsForSlice({
110
- key,
111
- iv,
112
- ciphertext,
113
- redactedPlaintext,
114
- slice,
115
- toprf,
116
- });
117
- if (!proofParams) {
118
- continue;
119
- }
120
- packetToProve.proofsToGenerate.push(proofParams);
121
- zkProofsToGen += 1;
122
- }
123
- }
124
- },
125
- getTotalChunksToProve() {
126
- return zkProofsToGen;
127
- },
128
- async generateProofs(onChunkDone) {
129
- var _a;
130
- if (!packetsToProve.length) {
131
- return;
132
- }
133
- const start = Date.now();
134
- const tasks = [];
135
- for (const { onGeneratedProofs, algorithm, proofsToGenerate } of packetsToProve) {
136
- const proofs = [];
137
- let proofsLeft = proofsToGenerate.length;
138
- for (const proofToGen of proofsToGenerate) {
139
- tasks.push(zkQueue.add(async () => {
140
- const proof = await generateProofForChunk(algorithm, proofToGen);
141
- onChunkDone === null || onChunkDone === void 0 ? void 0 : onChunkDone();
142
- proofs.push(proof);
143
- proofsLeft -= 1;
144
- if (proofsLeft === 0) {
145
- onGeneratedProofs(proofs);
146
- }
147
- }, { throwOnTimeout: true }));
148
- }
149
- }
150
- await Promise.all(tasks);
151
- logger === null || logger === void 0 ? void 0 : logger.info({ durationMs: Date.now() - start, zkProofsToGen }, 'generated ZK proofs');
152
- // reset the packets to prove
153
- packetsToProve.splice(0, packetsToProve.length);
154
- zkProofsToGen = 0;
155
- // release ZK resources to free up memory
156
- const alg = (0, generics_1.getZkAlgorithmForCipherSuite)(cipherSuite);
157
- const zkOperator = await getZkOperatorForAlgorithm(alg);
158
- (_a = zkOperator.release) === null || _a === void 0 ? void 0 : _a.call(zkOperator);
159
- },
160
- };
161
- async function generateProofForChunk(algorithm, { startIdx, redactedPlaintext, privateInput, publicInput, toprf, }) {
162
- const operator = toprf
163
- ? getOprfOperatorForAlgorithm(algorithm)
164
- : getZkOperatorForAlgorithm(algorithm);
165
- const proof = await (0, zk_symmetric_crypto_1.generateProof)({
166
- algorithm,
167
- privateInput,
168
- publicInput,
169
- operator,
170
- logger,
171
- ...(toprf
172
- ? {
173
- toprf: {
174
- pos: toprf.dataLocation.fromIndex,
175
- len: toprf.dataLocation.length,
176
- output: toprf.nullifier,
177
- responses: toprf.responses,
178
- domainSeparator: config_1.TOPRF_DOMAIN_SEPARATOR
179
- },
180
- mask: toprf.mask,
181
- }
182
- : {})
183
- });
184
- logger === null || logger === void 0 ? void 0 : logger.debug({ startIdx }, 'generated proof for chunk');
185
- return {
186
- // backwards compatibility
187
- proofJson: '',
188
- proofData: typeof proof.proofData === 'string'
189
- ? (0, tls_1.strToUint8Array)(proof.proofData)
190
- : proof.proofData,
191
- toprf,
192
- decryptedRedactedCiphertext: proof.plaintext,
193
- redactedPlaintext,
194
- startIdx
195
- };
196
- }
197
- function getZkOperatorForAlgorithm(algorithm) {
198
- return (zkOperators === null || zkOperators === void 0 ? void 0 : zkOperators[algorithm])
199
- || makeDefaultZkOperator(algorithm, zkEngine, logger);
200
- }
201
- function getOprfOperatorForAlgorithm(algorithm) {
202
- return (oprfOperators === null || oprfOperators === void 0 ? void 0 : oprfOperators[algorithm])
203
- || makeDefaultOPRFOperator(algorithm, zkEngine, logger);
204
- }
205
- }
206
- /**
207
- * Verify the given ZK proof
208
- */
209
- async function verifyZkPacket({ cipherSuite, ciphertext, zkReveal, zkOperators, oprfOperators, logger = logger_1.logger, zkEngine = 'snarkjs', iv, recordNumber }) {
210
- if (!zkReveal) {
211
- throw new Error('No ZK reveal');
212
- }
213
- const { proofs } = zkReveal;
214
- const algorithm = (0, generics_1.getZkAlgorithmForCipherSuite)(cipherSuite);
215
- const recordIV = (0, generics_1.getRecordIV)(ciphertext, cipherSuite);
216
- ciphertext = (0, generics_1.getPureCiphertext)(ciphertext, cipherSuite);
217
- /**
218
- * to verify if the user has given us the correct redacted plaintext,
219
- * and isn't providing plaintext that they haven't proven they have
220
- * we start with a fully redacted plaintext, and then replace the
221
- * redacted parts with the plaintext that the user has provided
222
- * in the proofs
223
- */
224
- const realRedactedPlaintext = new Uint8Array(ciphertext.length).fill(redactions_1.REDACTION_CHAR_CODE);
225
- await Promise.all(proofs.map(async (proof, i) => {
226
- try {
227
- await verifyProofPacket(proof);
228
- }
229
- catch (e) {
230
- e.message += ` (chunk ${i}, startIdx ${proof.startIdx})`;
231
- throw e;
232
- }
233
- }));
234
- return { redactedPlaintext: realRedactedPlaintext };
235
- async function verifyProofPacket({ proofData, proofJson, decryptedRedactedCiphertext, redactedPlaintext, startIdx, toprf, }) {
236
- var _a, _b, _c;
237
- // get the ciphertext chunk we received from the server
238
- // the ZK library, will verify that the decrypted redacted
239
- // ciphertext matches the ciphertext received from the server
240
- const ciphertextChunk = ciphertext.slice(startIdx, startIdx + redactedPlaintext.length);
241
- // redact ciphertext if plaintext is redacted
242
- // to prepare for decryption in ZK circuit
243
- // the ZK circuit will take in the redacted ciphertext,
244
- // which shall produce the redacted plaintext
245
- for (let i = 0; i < ciphertextChunk.length; i++) {
246
- if (redactedPlaintext[i] === redactions_1.REDACTION_CHAR_CODE) {
247
- ciphertextChunk[i] = redactions_1.REDACTION_CHAR_CODE;
248
- }
249
- }
250
- // redact OPRF indices -- because they'll incorrectly
251
- // be marked as incongruent
252
- let comparePlaintext = redactedPlaintext;
253
- if (toprf) {
254
- comparePlaintext = new Uint8Array(redactedPlaintext);
255
- for (let i = 0; i < toprf.dataLocation.length; i++) {
256
- comparePlaintext[i + toprf.dataLocation.fromIndex] = redactions_1.REDACTION_CHAR_CODE;
257
- }
258
- // the transcript will contain only the stringified
259
- // nullifier. So here, we'll compare the provable
260
- // binary nullifier with the stringified nullifier
261
- // that the user has provided
262
- const nulliferStr = (0, redactions_1.binaryHashToStr)(toprf.nullifier, toprf.dataLocation.length);
263
- const txtHash = redactedPlaintext.slice((_a = toprf.dataLocation) === null || _a === void 0 ? void 0 : _a.fromIndex, ((_b = toprf.dataLocation) === null || _b === void 0 ? void 0 : _b.fromIndex)
264
- + ((_c = toprf.dataLocation) === null || _c === void 0 ? void 0 : _c.length));
265
- if ((0, generics_1.uint8ArrayToStr)(txtHash) !== nulliferStr
266
- .slice(0, txtHash.length)) {
267
- throw new Error('OPRF nullifier not congruent');
268
- }
269
- }
270
- if (!(0, redactions_1.isRedactionCongruent)(comparePlaintext, decryptedRedactedCiphertext)) {
271
- throw new Error('redacted ciphertext not congruent');
272
- }
273
- let nonce = (0, tls_1.concatenateUint8Arrays)([iv, recordIV]);
274
- if (!recordIV.length) {
275
- nonce = (0, tls_1.generateIV)(nonce, recordNumber);
276
- }
277
- await (0, zk_symmetric_crypto_1.verifyProof)({
278
- proof: {
279
- algorithm,
280
- proofData: proofData.length
281
- ? proofData
282
- : (0, tls_1.strToUint8Array)(proofJson),
283
- plaintext: decryptedRedactedCiphertext,
284
- },
285
- publicInput: {
286
- ciphertext: ciphertextChunk,
287
- iv: nonce,
288
- offsetBytes: startIdx
289
- },
290
- logger,
291
- ...(toprf
292
- ? {
293
- operator: getOprfOperator(),
294
- toprf: {
295
- pos: toprf.dataLocation.fromIndex,
296
- len: toprf.dataLocation.length,
297
- domainSeparator: config_1.TOPRF_DOMAIN_SEPARATOR,
298
- output: toprf.nullifier,
299
- responses: toprf.responses,
300
- }
301
- }
302
- : { operator: getZkOperator() })
303
- });
304
- logger === null || logger === void 0 ? void 0 : logger.debug({ startIdx, endIdx: startIdx + redactedPlaintext.length }, 'verified proof');
305
- realRedactedPlaintext.set(redactedPlaintext, startIdx);
306
- }
307
- function getZkOperator() {
308
- return (zkOperators === null || zkOperators === void 0 ? void 0 : zkOperators[algorithm])
309
- || makeDefaultZkOperator(algorithm, zkEngine, logger);
310
- }
311
- function getOprfOperator() {
312
- return (oprfOperators === null || oprfOperators === void 0 ? void 0 : oprfOperators[algorithm])
313
- || makeDefaultOPRFOperator(algorithm, zkEngine, logger);
314
- }
315
- }
316
- // the chunk size of the ZK circuit in bytes
317
- // this will be >= the block size
318
- function getChunkSizeBytes(alg) {
319
- const { chunkSize, bitsPerWord } = zk_symmetric_crypto_1.CONFIG[alg];
320
- return chunkSize * bitsPerWord / 8;
321
- }
322
- const zkEngines = {};
323
- const oprfEngines = {};
324
- const operatorMakers = {
325
- 'snarkjs': zk_symmetric_crypto_1.makeSnarkJsZKOperator,
326
- 'gnark': zk_symmetric_crypto_1.makeGnarkZkOperator,
327
- };
328
- const OPRF_OPERATOR_MAKERS = {
329
- 'gnark': zk_symmetric_crypto_1.makeGnarkOPRFOperator
330
- };
331
- function makeDefaultZkOperator(algorithm, zkEngine, logger) {
332
- let zkOperators = zkEngines[zkEngine];
333
- if (!zkOperators) {
334
- zkEngines[zkEngine] = {};
335
- zkOperators = zkEngines[zkEngine];
336
- }
337
- if (!zkOperators[algorithm]) {
338
- const isNode = (0, env_1.detectEnvironment)() === 'node';
339
- const opType = isNode ? 'local' : 'remote';
340
- logger === null || logger === void 0 ? void 0 : logger.info({ type: opType, algorithm }, 'fetching zk operator');
341
- const fetcher = opType === 'local'
342
- ? (0, zk_symmetric_crypto_1.makeLocalFileFetch)()
343
- : (0, zk_symmetric_crypto_1.makeRemoteFileFetch)({
344
- baseUrl: config_1.DEFAULT_REMOTE_FILE_FETCH_BASE_URL,
345
- });
346
- const maker = operatorMakers[zkEngine];
347
- if (!maker) {
348
- throw new Error(`No ZK operator maker for ${zkEngine}`);
349
- }
350
- zkOperators[algorithm] = maker({ algorithm, fetcher });
351
- }
352
- return zkOperators[algorithm];
353
- }
354
- function makeDefaultOPRFOperator(algorithm, zkEngine, logger) {
355
- let operators = oprfEngines[zkEngine];
356
- if (!operators) {
357
- oprfEngines[zkEngine] = {};
358
- operators = oprfEngines[zkEngine];
359
- }
360
- if (!operators[algorithm]) {
361
- const isNode = (0, env_1.detectEnvironment)() === 'node';
362
- const type = isNode ? 'local' : 'remote';
363
- logger === null || logger === void 0 ? void 0 : logger.info({ type, algorithm }, 'fetching oprf operator');
364
- const fetcher = type === 'local'
365
- ? (0, zk_symmetric_crypto_1.makeLocalFileFetch)()
366
- : (0, zk_symmetric_crypto_1.makeRemoteFileFetch)({
367
- baseUrl: config_1.DEFAULT_REMOTE_FILE_FETCH_BASE_URL,
368
- });
369
- const maker = OPRF_OPERATOR_MAKERS[zkEngine];
370
- if (!maker) {
371
- throw new Error(`No OPRF operator maker for ${zkEngine}`);
372
- }
373
- operators[algorithm] = maker({ algorithm, fetcher });
374
- }
375
- return operators[algorithm];
376
- }
377
- function getEngineString(engine) {
378
- if (engine === api_1.ZKProofEngine.ZK_ENGINE_GNARK) {
379
- return 'gnark';
380
- }
381
- if (engine === api_1.ZKProofEngine.ZK_ENGINE_SNARKJS) {
382
- return 'snarkjs';
383
- }
384
- throw new Error(`Unknown ZK engine: ${engine}`);
385
- }
386
- function getEngineProto(engine) {
387
- if (engine === 'gnark') {
388
- return api_1.ZKProofEngine.ZK_ENGINE_GNARK;
389
- }
390
- if (engine === 'snarkjs') {
391
- return api_1.ZKProofEngine.ZK_ENGINE_SNARKJS;
392
- }
393
- throw new Error(`Unknown ZK engine: ${engine}`);
394
- }
395
- function getProofGenerationParamsForSlice({ key, iv, ciphertext, redactedPlaintext, slice: { fromIndex, toIndex }, toprf, }) {
396
- const ciphertextChunk = ciphertext.slice(fromIndex, toIndex);
397
- const plaintextChunk = redactedPlaintext.slice(fromIndex, toIndex);
398
- if ((0, redactions_1.isFullyRedacted)(plaintextChunk)) {
399
- return;
400
- }
401
- // redact ciphertext if plaintext is redacted
402
- // to prepare for decryption in ZK circuit
403
- // the ZK circuit will take in the redacted ciphertext,
404
- // which shall produce the redacted plaintext
405
- for (let i = 0; i < ciphertextChunk.length; i++) {
406
- if (plaintextChunk[i] === redactions_1.REDACTION_CHAR_CODE) {
407
- ciphertextChunk[i] = redactions_1.REDACTION_CHAR_CODE;
408
- }
409
- }
410
- return {
411
- startIdx: fromIndex,
412
- redactedPlaintext: plaintextChunk,
413
- privateInput: { key },
414
- publicInput: { ciphertext: ciphertextChunk, iv, offsetBytes: fromIndex },
415
- toprf
416
- };
417
- }
418
- /**
419
- * Get the ideal location to generate a ZK proof for a TOPRF block.
420
- * Ideally it should be put into a slice that's a divisor of the chunk size,
421
- * as that'll minimize the number of proofs that need to be generated.
422
- * @returns the offset in bytes
423
- */
424
- function getIdealOffsetForToprfBlock(alg, { dataLocation }) {
425
- const chunkSizeBytes = getChunkSizeBytes(alg);
426
- const offsetChunks = Math.floor(dataLocation.fromIndex / chunkSizeBytes) * chunkSizeBytes;
427
- const endOffsetChunks = Math.floor((dataLocation.fromIndex + dataLocation.length) / chunkSizeBytes);
428
- // happy case -- the OPRF block fits into a single chunk, that's a
429
- // divisor of the chunk size
430
- if (endOffsetChunks === offsetChunks) {
431
- return offsetChunks * chunkSizeBytes;
432
- }
433
- const blockSizeBytes = (0, zk_symmetric_crypto_1.getBlockSizeBytes)(alg);
434
- const offsetBytes = Math.floor(dataLocation.fromIndex / blockSizeBytes) * blockSizeBytes;
435
- if ((dataLocation.fromIndex + dataLocation.length) - offsetBytes
436
- > chunkSizeBytes) {
437
- throw new error_1.AttestorError('ERROR_BAD_REQUEST', 'OPRF data cannot fit into a single chunk');
438
- }
439
- return offsetBytes;
440
- }
441
- function sortSlices(slices) {
442
- return slices.sort((a, b) => a.fromIndex - b.fromIndex);
443
- }
444
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvemsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUErRUEsb0RBZ1FDO0FBS0Qsd0NBc0tDO0FBMEJELHNEQThCQztBQUVELDBEQThCQztBQUVELDBDQVVDO0FBR0Qsd0NBVUM7QUEzbUJELDhDQUErRztBQUMvRyw4RUFleUQ7QUFDekQsdUNBQStHO0FBQy9HLHVDQUEwSDtBQUUxSCx1Q0FBaUU7QUFDakUsMkNBQStDO0FBQy9DLGlEQUFrSDtBQUNsSCw2Q0FBbUQ7QUFDbkQscURBQWtIO0FBa0RsSCxNQUFNLGNBQWMsR0FBRyxDQUFDLENBQ3ZCLElBQUEsb0JBQWMsRUFBQyxnQkFBZ0IsQ0FBQztPQUM3QiwrQkFBc0IsQ0FDekIsQ0FBQTtBQUVNLEtBQUssVUFBVSxvQkFBb0IsQ0FDekMsRUFDQyxXQUFXLEVBQ1gsYUFBYSxFQUNiLE1BQU0sR0FBRyxlQUFNLEVBQ2Ysa0JBQWtCLEdBQUcsY0FBYyxFQUNuQyxXQUFXLEVBQ1gsUUFBUSxHQUFHLFNBQVMsRUFDQztJQUd0QixNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ25ELE1BQU0sT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDO1FBQzFCLFdBQVcsRUFBRSxrQkFBa0I7UUFDL0IsU0FBUyxFQUFFLElBQUk7S0FDZixDQUFDLENBQUE7SUFFRixNQUFNLGNBQWMsR0FBc0IsRUFBRSxDQUFBO0lBRTVDLE1BQU0sR0FBRyxDQUFDLE1BQU0sSUFBSSxlQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBQ3ZFLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQTtJQUVyQixPQUFPO1FBQ047Ozs7O1dBS0c7UUFDSCxLQUFLLENBQUMsZ0JBQWdCLENBQ3JCLE1BQXlCLEVBQ3pCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFnQixFQUMzQyxpQkFBdUQ7WUFFdkQsSUFBRyxNQUFNLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDO2dCQUNoQyxNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUE7WUFDdkQsQ0FBQztZQUVELE1BQU0sR0FBRyxHQUFHLElBQUEsdUNBQTRCLEVBQUMsV0FBVyxDQUFDLENBQUE7WUFDckQsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUE7WUFFN0MsTUFBTSxHQUFHLEdBQUcsTUFBTSxZQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUNqRCxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFBO1lBQ3BCLE1BQU0sVUFBVSxHQUFHLElBQUEsNEJBQWlCLEVBQ25DLE1BQU0sQ0FBQyxVQUFVLEVBQ2pCLFdBQVcsQ0FDWCxDQUFBO1lBQ0QsTUFBTSxhQUFhLEdBQW9CO2dCQUN0QyxpQkFBaUI7Z0JBQ2pCLFNBQVMsRUFBRSxHQUFHO2dCQUNkLGdCQUFnQixFQUFFLEVBQUU7Z0JBQ3BCLEVBQUUsRUFBRSxNQUFNLENBQUMsT0FBTzthQUNsQixDQUFBO1lBQ0QsTUFBTSxVQUFVLEdBQWlCLEVBQUUsQ0FBQTtZQUNuQyxzQ0FBc0M7WUFDdEMsMkRBQTJEO1lBQzNELGdEQUFnRDtZQUNoRCxLQUFJLE1BQU0sS0FBSyxJQUFJLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQztnQkFDakMsTUFBTSxTQUFTLEdBQUcsMkJBQTJCLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFBO2dCQUN6RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxjQUFjLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFBO2dCQUV2RSxtRUFBbUU7Z0JBQ25FLE1BQU0sS0FBSyxHQUFlLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFBO2dCQUNoRCxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFFMUIsbUJBQW1CLENBQ2xCLEtBQUssRUFDTDtvQkFDQyxHQUFHLEtBQUs7b0JBQ1IsWUFBWSxFQUFFO3dCQUNiLEdBQUcsS0FBSyxDQUFDLFlBQWE7d0JBQ3RCLFNBQVMsRUFBRSxLQUFLLENBQUMsWUFBYSxDQUFDLFNBQVMsR0FBRyxTQUFTO3FCQUNwRDtpQkFDRCxDQUNELENBQUE7WUFDRixDQUFDO1lBRUQsa0VBQWtFO1lBQ2xFLGlFQUFpRTtZQUNqRSxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUE7WUFDL0MsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFBO1lBQ2pCLEtBQUksTUFBTSxJQUFJLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQzVCLElBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLEVBQUUsQ0FBQztvQkFDL0IsbUJBQW1CLENBQUM7d0JBQ25CLFNBQVM7d0JBQ1QsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTO3FCQUN2QixDQUFDLENBQUE7Z0JBQ0gsQ0FBQztnQkFFRCxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQTtZQUN6QixDQUFDO1lBRUQsSUFBRyxTQUFTLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNsQyxtQkFBbUIsQ0FBQztvQkFDbkIsU0FBUztvQkFDVCxPQUFPLEVBQUUsVUFBVSxDQUFDLE1BQU07aUJBQzFCLENBQUMsQ0FBQTtZQUNILENBQUM7WUFFRCwwQ0FBMEM7WUFDMUMsYUFBYSxDQUFDLGdCQUFnQjtpQkFDNUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDekMsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQTtZQUVsQyxTQUFTLG1CQUFtQixDQUFDLEtBQWlCO2dCQUM3QyxLQUFJLE1BQU0sSUFBSSxJQUFJLFVBQVUsRUFBRSxDQUFDO29CQUM5QjtvQkFDQyxpQkFBaUI7b0JBQ2pCLEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU87MkJBQzFCLEtBQUssQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFDakMsQ0FBQzt3QkFDRixNQUFNLElBQUkscUJBQWEsQ0FDdEIsbUJBQW1CLEVBQ25CLGlDQUFpQyxDQUNqQyxDQUFBO29CQUNGLENBQUM7Z0JBQ0YsQ0FBQztZQUNGLENBQUM7WUFFRCxTQUFTLG1CQUFtQixDQUMzQixFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQWMsRUFDbEMsS0FBd0I7Z0JBRXhCLEtBQUksSUFBSSxDQUFDLEdBQUcsU0FBUyxFQUFDLENBQUMsR0FBRyxPQUFPLEVBQUMsQ0FBQyxJQUFJLGNBQWMsRUFBRSxDQUFDO29CQUN2RCxNQUFNLEtBQUssR0FBZTt3QkFDekIsU0FBUyxFQUFFLENBQUM7d0JBQ1osT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLGNBQWMsRUFBRSxPQUFPLENBQUM7cUJBQzlDLENBQUE7b0JBRUQsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtvQkFDdEIsTUFBTSxXQUFXLEdBQUcsZ0NBQWdDLENBQ25EO3dCQUNDLEdBQUc7d0JBQ0gsRUFBRTt3QkFDRixVQUFVO3dCQUNWLGlCQUFpQjt3QkFDakIsS0FBSzt3QkFDTCxLQUFLO3FCQUNMLENBQ0QsQ0FBQTtvQkFFRCxJQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7d0JBQ2pCLFNBQVE7b0JBQ1QsQ0FBQztvQkFFRCxhQUFhLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO29CQUNoRCxhQUFhLElBQUksQ0FBQyxDQUFBO2dCQUNuQixDQUFDO1lBQ0YsQ0FBQztRQUNGLENBQUM7UUFDRCxxQkFBcUI7WUFDcEIsT0FBTyxhQUFhLENBQUE7UUFDckIsQ0FBQztRQUNELEtBQUssQ0FBQyxjQUFjLENBQUMsV0FBd0I7O1lBQzVDLElBQUcsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQzNCLE9BQU07WUFDUCxDQUFDO1lBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFBO1lBQ3hCLE1BQU0sS0FBSyxHQUFvQixFQUFFLENBQUE7WUFDakMsS0FBSSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQ2hGLE1BQU0sTUFBTSxHQUFjLEVBQUUsQ0FBQTtnQkFFNUIsSUFBSSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFBO2dCQUN4QyxLQUFJLE1BQU0sVUFBVSxJQUFJLGdCQUFnQixFQUFFLENBQUM7b0JBQzFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUcsRUFBRTt3QkFDaEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUE7d0JBRWhFLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsRUFBSSxDQUFBO3dCQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7d0JBRWxCLFVBQVUsSUFBSSxDQUFDLENBQUE7d0JBQ2YsSUFBRyxVQUFVLEtBQUssQ0FBQyxFQUFFLENBQUM7NEJBQ3JCLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFBO3dCQUMxQixDQUFDO29CQUNGLENBQUMsRUFBRSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUE7Z0JBQzlCLENBQUM7WUFDRixDQUFDO1lBRUQsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBRXhCLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxJQUFJLENBQ1gsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxhQUFhLEVBQUUsRUFDakQscUJBQXFCLENBQ3JCLENBQUE7WUFFRCw2QkFBNkI7WUFDN0IsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQy9DLGFBQWEsR0FBRyxDQUFDLENBQUE7WUFFakIseUNBQXlDO1lBQ3pDLE1BQU0sR0FBRyxHQUFHLElBQUEsdUNBQTRCLEVBQUMsV0FBVyxDQUFDLENBQUE7WUFDckQsTUFBTSxVQUFVLEdBQUcsTUFBTSx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUN2RCxNQUFBLFVBQVUsQ0FBQyxPQUFPLDBEQUFJLENBQUE7UUFDdkIsQ0FBQztLQUNELENBQUE7SUFFRCxLQUFLLFVBQVUscUJBQXFCLENBQ25DLFNBQThCLEVBQzlCLEVBQ0MsUUFBUSxFQUFFLGlCQUFpQixFQUMzQixZQUFZLEVBQUUsV0FBVyxFQUN6QixLQUFLLEdBQ2M7UUFFcEIsTUFBTSxRQUFRLEdBQUcsS0FBSztZQUNyQixDQUFDLENBQUMsMkJBQTJCLENBQUMsU0FBUyxDQUFDO1lBQ3hDLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUN2QyxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUEsbUNBQWEsRUFDaEM7WUFDQyxTQUFTO1lBQ1QsWUFBWTtZQUNaLFdBQVc7WUFDWCxRQUFRO1lBQ1IsTUFBTTtZQUNOLEdBQUcsQ0FDRixLQUFLO2dCQUNKLENBQUMsQ0FBQztvQkFDRCxLQUFLLEVBQUU7d0JBQ04sR0FBRyxFQUFFLEtBQUssQ0FBQyxZQUFhLENBQUMsU0FBUzt3QkFDbEMsR0FBRyxFQUFFLEtBQUssQ0FBQyxZQUFhLENBQUMsTUFBTTt3QkFDL0IsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTO3dCQUN2QixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7d0JBQzFCLGVBQWUsRUFBRSwrQkFBc0I7cUJBQ3ZDO29CQUNELElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtpQkFDaEI7Z0JBQ0QsQ0FBQyxDQUFDLEVBQUUsQ0FDTDtTQUNELENBQ0QsQ0FBQTtRQUVELE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxLQUFLLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSwyQkFBMkIsQ0FBQyxDQUFBO1FBRXhELE9BQU87WUFDTiwwQkFBMEI7WUFDMUIsU0FBUyxFQUFFLEVBQUU7WUFDYixTQUFTLEVBQUUsT0FBTyxLQUFLLENBQUMsU0FBUyxLQUFLLFFBQVE7Z0JBQzdDLENBQUMsQ0FBQyxJQUFBLHFCQUFlLEVBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztnQkFDbEMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTO1lBQ2xCLEtBQUs7WUFDTCwyQkFBMkIsRUFBRSxLQUFLLENBQUMsU0FBUztZQUM1QyxpQkFBaUI7WUFDakIsUUFBUTtTQUNSLENBQUE7SUFDRixDQUFDO0lBRUQsU0FBUyx5QkFBeUIsQ0FBQyxTQUE4QjtRQUNoRSxPQUFPLENBQUEsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFHLFNBQVMsQ0FBQztlQUMzQixxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQ3ZELENBQUM7SUFFRCxTQUFTLDJCQUEyQixDQUFDLFNBQThCO1FBQ2xFLE9BQU8sQ0FBQSxhQUFhLGFBQWIsYUFBYSx1QkFBYixhQUFhLENBQUcsU0FBUyxDQUFDO2VBQzdCLHVCQUF1QixDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDekQsQ0FBQztBQUNGLENBQUM7QUFFRDs7R0FFRztBQUNJLEtBQUssVUFBVSxjQUFjLENBQ25DLEVBQ0MsV0FBVyxFQUNYLFVBQVUsRUFDVixRQUFRLEVBQ1IsV0FBVyxFQUNYLGFBQWEsRUFDYixNQUFNLEdBQUcsZUFBTSxFQUNmLFFBQVEsR0FBRyxTQUFTLEVBQ3BCLEVBQUUsRUFDRixZQUFZLEVBQ0U7SUFFZixJQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ2hDLENBQUM7SUFFRCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFBO0lBQzNCLE1BQU0sU0FBUyxHQUFHLElBQUEsdUNBQTRCLEVBQUMsV0FBVyxDQUFDLENBQUE7SUFFM0QsTUFBTSxRQUFRLEdBQUcsSUFBQSxzQkFBVyxFQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUNyRCxVQUFVLEdBQUcsSUFBQSw0QkFBaUIsRUFBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUE7SUFDdkQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLFVBQVUsQ0FDM0MsVUFBVSxDQUFDLE1BQU0sQ0FDakIsQ0FBQyxJQUFJLENBQUMsZ0NBQW1CLENBQUMsQ0FBQTtJQUUzQixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2hCLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUM1QixJQUFJLENBQUM7WUFDSixNQUFNLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQy9CLENBQUM7UUFBQyxPQUFNLENBQUMsRUFBRSxDQUFDO1lBQ1gsQ0FBQyxDQUFDLE9BQU8sSUFBSSxXQUFXLENBQUMsY0FBYyxLQUFLLENBQUMsUUFBUSxHQUFHLENBQUE7WUFDeEQsTUFBTSxDQUFDLENBQUE7UUFDUixDQUFDO0lBQ0YsQ0FBQyxDQUFDLENBQ0YsQ0FBQTtJQUVELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxDQUFBO0lBRW5ELEtBQUssVUFBVSxpQkFBaUIsQ0FDL0IsRUFDQyxTQUFTLEVBQ1QsU0FBUyxFQUNULDJCQUEyQixFQUMzQixpQkFBaUIsRUFDakIsUUFBUSxFQUNSLEtBQUssR0FDSTs7UUFFVix1REFBdUQ7UUFDdkQsMERBQTBEO1FBQzFELDZEQUE2RDtRQUM3RCxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUN2QyxRQUFRLEVBQ1IsUUFBUSxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FDbkMsQ0FBQTtRQUNELDZDQUE2QztRQUM3QywwQ0FBMEM7UUFDMUMsdURBQXVEO1FBQ3ZELDZDQUE2QztRQUM3QyxLQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzlDLElBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEtBQUssZ0NBQW1CLEVBQUUsQ0FBQztnQkFDakQsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLGdDQUFtQixDQUFBO1lBQ3pDLENBQUM7UUFDRixDQUFDO1FBRUQscURBQXFEO1FBQ3JELDJCQUEyQjtRQUMzQixJQUFJLGdCQUFnQixHQUFHLGlCQUFpQixDQUFBO1FBQ3hDLElBQUcsS0FBSyxFQUFFLENBQUM7WUFDVixnQkFBZ0IsR0FBRyxJQUFJLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO1lBQ3BELEtBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsWUFBYSxDQUFDLE1BQU0sRUFBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNsRCxnQkFBZ0IsQ0FDZixDQUFDLEdBQUcsS0FBSyxDQUFDLFlBQWEsQ0FBQyxTQUFTLENBQ2pDLEdBQUcsZ0NBQW1CLENBQUE7WUFDeEIsQ0FBQztZQUVELG1EQUFtRDtZQUNuRCxpREFBaUQ7WUFDakQsa0RBQWtEO1lBQ2xELDZCQUE2QjtZQUM3QixNQUFNLFdBQVcsR0FBRyxJQUFBLDRCQUFlLEVBQ2xDLEtBQUssQ0FBQyxTQUFTLEVBQ2YsS0FBSyxDQUFDLFlBQWEsQ0FBQyxNQUFNLENBQzFCLENBQUE7WUFDRCxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQ3RDLE1BQUEsS0FBSyxDQUFDLFlBQVksMENBQUUsU0FBUyxFQUM3QixDQUFBLE1BQUEsS0FBSyxDQUFDLFlBQVksMENBQUUsU0FBVTttQkFDM0IsTUFBQSxLQUFLLENBQUMsWUFBWSwwQ0FBRSxNQUFPLENBQUEsQ0FDOUIsQ0FBQTtZQUNELElBQ0MsSUFBQSwwQkFBZSxFQUFDLE9BQU8sQ0FBQyxLQUFLLFdBQVc7aUJBQ3RDLEtBQUssQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUN6QixDQUFDO2dCQUNGLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQTtZQUNoRCxDQUFDO1FBQ0YsQ0FBQztRQUVELElBQUcsQ0FBQyxJQUFBLGlDQUFvQixFQUN2QixnQkFBZ0IsRUFDaEIsMkJBQTJCLENBQzNCLEVBQUUsQ0FBQztZQUNILE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQTtRQUNyRCxDQUFDO1FBRUQsSUFBSSxLQUFLLEdBQUcsSUFBQSw0QkFBc0IsRUFBQyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFBO1FBQ2xELElBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDckIsS0FBSyxHQUFHLElBQUEsZ0JBQVUsRUFBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUE7UUFDeEMsQ0FBQztRQUVELE1BQU0sSUFBQSxpQ0FBVyxFQUNoQjtZQUNDLEtBQUssRUFBRTtnQkFDTixTQUFTO2dCQUNULFNBQVMsRUFBRSxTQUFTLENBQUMsTUFBTTtvQkFDMUIsQ0FBQyxDQUFDLFNBQVM7b0JBQ1gsQ0FBQyxDQUFDLElBQUEscUJBQWUsRUFBQyxTQUFTLENBQUM7Z0JBQzdCLFNBQVMsRUFBRSwyQkFBMkI7YUFDdEM7WUFDRCxXQUFXLEVBQUU7Z0JBQ1osVUFBVSxFQUFFLGVBQWU7Z0JBQzNCLEVBQUUsRUFBRSxLQUFLO2dCQUNULFdBQVcsRUFBRSxRQUFRO2FBQ3JCO1lBQ0QsTUFBTTtZQUNOLEdBQUcsQ0FDRixLQUFLO2dCQUNKLENBQUMsQ0FBQztvQkFDRCxRQUFRLEVBQUUsZUFBZSxFQUFFO29CQUMzQixLQUFLLEVBQUU7d0JBQ04sR0FBRyxFQUFFLEtBQUssQ0FBQyxZQUFhLENBQUMsU0FBUzt3QkFDbEMsR0FBRyxFQUFFLEtBQUssQ0FBQyxZQUFhLENBQUMsTUFBTTt3QkFDL0IsZUFBZSxFQUFFLCtCQUFzQjt3QkFDdkMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTO3dCQUN2QixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7cUJBQzFCO2lCQUNEO2dCQUNELENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsRUFBRSxDQUNoQztTQUNELENBQ0QsQ0FBQTtRQUVELE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxLQUFLLENBQ1osRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsRUFDekQsZ0JBQWdCLENBQ2hCLENBQUE7UUFFRCxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDdkQsQ0FBQztJQUVELFNBQVMsYUFBYTtRQUNyQixPQUFPLENBQUEsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFHLFNBQVMsQ0FBQztlQUMzQixxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQ3ZELENBQUM7SUFFRCxTQUFTLGVBQWU7UUFDdkIsT0FBTyxDQUFBLGFBQWEsYUFBYixhQUFhLHVCQUFiLGFBQWEsQ0FBRyxTQUFTLENBQUM7ZUFDN0IsdUJBQXVCLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUN6RCxDQUFDO0FBQ0YsQ0FBQztBQUVELDRDQUE0QztBQUM1QyxpQ0FBaUM7QUFDakMsU0FBUyxpQkFBaUIsQ0FBQyxHQUF3QjtJQUNsRCxNQUFNLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxHQUFHLDRCQUFTLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDakQsT0FBTyxTQUFTLEdBQUcsV0FBVyxHQUFHLENBQUMsQ0FBQTtBQUNuQyxDQUFDO0FBRUQsTUFBTSxTQUFTLEdBRVgsRUFBRSxDQUFBO0FBRU4sTUFBTSxXQUFXLEdBRWIsRUFBRSxDQUFBO0FBRU4sTUFBTSxjQUFjLEdBQXVFO0lBQzFGLFNBQVMsRUFBRSwyQ0FBcUI7SUFDaEMsT0FBTyxFQUFFLHlDQUFtQjtDQUM1QixDQUFBO0FBRUQsTUFBTSxvQkFBb0IsR0FBK0M7SUFDeEUsT0FBTyxFQUFFLDJDQUFxQjtDQUM5QixDQUFBO0FBRUQsU0FBZ0IscUJBQXFCLENBQ3BDLFNBQThCLEVBQzlCLFFBQWtCLEVBQ2xCLE1BQWM7SUFFZCxJQUFJLFdBQVcsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDckMsSUFBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pCLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUE7UUFDeEIsV0FBVyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQsSUFBRyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQzVCLE1BQU0sTUFBTSxHQUFHLElBQUEsdUJBQWlCLEdBQUUsS0FBSyxNQUFNLENBQUE7UUFDN0MsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQTtRQUMxQyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsRUFBRSxzQkFBc0IsQ0FBQyxDQUFBO1FBRWpFLE1BQU0sT0FBTyxHQUFHLE1BQU0sS0FBSyxPQUFPO1lBQ2pDLENBQUMsQ0FBQyxJQUFBLHdDQUFrQixHQUFFO1lBQ3RCLENBQUMsQ0FBQyxJQUFBLHlDQUFtQixFQUFDO2dCQUNyQixPQUFPLEVBQUUsMkNBQWtDO2FBQzNDLENBQUMsQ0FBQTtRQUNILE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUN0QyxJQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixRQUFRLEVBQUUsQ0FBQyxDQUFBO1FBQ3hELENBQUM7UUFFRCxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFDdkQsQ0FBQztJQUVELE9BQU8sV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0FBQzlCLENBQUM7QUFFRCxTQUFnQix1QkFBdUIsQ0FDdEMsU0FBOEIsRUFDOUIsUUFBa0IsRUFDbEIsTUFBYztJQUVkLElBQUksU0FBUyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNyQyxJQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDZixXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFBO1FBQzFCLFNBQVMsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVELElBQUcsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUMxQixNQUFNLE1BQU0sR0FBRyxJQUFBLHVCQUFpQixHQUFFLEtBQUssTUFBTSxDQUFBO1FBQzdDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUE7UUFDeEMsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBRSx3QkFBd0IsQ0FBQyxDQUFBO1FBRTNELE1BQU0sT0FBTyxHQUFHLElBQUksS0FBSyxPQUFPO1lBQy9CLENBQUMsQ0FBQyxJQUFBLHdDQUFrQixHQUFFO1lBQ3RCLENBQUMsQ0FBQyxJQUFBLHlDQUFtQixFQUFDO2dCQUNyQixPQUFPLEVBQUUsMkNBQWtDO2FBQzNDLENBQUMsQ0FBQTtRQUNILE1BQU0sS0FBSyxHQUFHLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQzVDLElBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLFFBQVEsRUFBRSxDQUFDLENBQUE7UUFDMUQsQ0FBQztRQUVELFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtJQUNyRCxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUE7QUFDNUIsQ0FBQztBQUVELFNBQWdCLGVBQWUsQ0FBQyxNQUFxQjtJQUNwRCxJQUFHLE1BQU0sS0FBSyxtQkFBYSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzdDLE9BQU8sT0FBTyxDQUFBO0lBQ2YsQ0FBQztJQUVELElBQUcsTUFBTSxLQUFLLG1CQUFhLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMvQyxPQUFPLFNBQVMsQ0FBQTtJQUNqQixDQUFDO0lBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsTUFBTSxFQUFFLENBQUMsQ0FBQTtBQUNoRCxDQUFDO0FBR0QsU0FBZ0IsY0FBYyxDQUFDLE1BQWdCO0lBQzlDLElBQUcsTUFBTSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sbUJBQWEsQ0FBQyxlQUFlLENBQUE7SUFDckMsQ0FBQztJQUVELElBQUcsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sbUJBQWEsQ0FBQyxpQkFBaUIsQ0FBQTtJQUN2QyxDQUFDO0lBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsTUFBTSxFQUFFLENBQUMsQ0FBQTtBQUNoRCxDQUFDO0FBRUQsU0FBUyxnQ0FBZ0MsQ0FDeEMsRUFDQyxHQUFHLEVBQ0gsRUFBRSxFQUNGLFVBQVUsRUFDVixpQkFBaUIsRUFDakIsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxFQUM3QixLQUFLLEdBQ3FCO0lBRTNCLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQzVELE1BQU0sY0FBYyxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDbEUsSUFBRyxJQUFBLDRCQUFlLEVBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztRQUNwQyxPQUFNO0lBQ1AsQ0FBQztJQUVELDZDQUE2QztJQUM3QywwQ0FBMEM7SUFDMUMsdURBQXVEO0lBQ3ZELDZDQUE2QztJQUM3QyxLQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzlDLElBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLGdDQUFtQixFQUFFLENBQUM7WUFDOUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLGdDQUFtQixDQUFBO1FBQ3pDLENBQUM7SUFDRixDQUFDO0lBRUQsT0FBTztRQUNOLFFBQVEsRUFBRSxTQUFTO1FBQ25CLGlCQUFpQixFQUFFLGNBQWM7UUFDakMsWUFBWSxFQUFFLEVBQUUsR0FBRyxFQUFFO1FBQ3JCLFdBQVcsRUFBRSxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUU7UUFDeEUsS0FBSztLQUNMLENBQUE7QUFDRixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLDJCQUEyQixDQUNuQyxHQUF3QixFQUN4QixFQUFFLFlBQVksRUFBb0I7SUFFbEMsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDN0MsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FDOUIsWUFBYSxDQUFDLFNBQVMsR0FBRyxjQUFjLENBQ3hDLEdBQUcsY0FBYyxDQUFBO0lBQ2xCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQ2pDLENBQUMsWUFBYSxDQUFDLFNBQVMsR0FBRyxZQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsY0FBYyxDQUNqRSxDQUFBO0lBRUQsa0VBQWtFO0lBQ2xFLDRCQUE0QjtJQUM1QixJQUFHLGVBQWUsS0FBSyxZQUFZLEVBQUUsQ0FBQztRQUNyQyxPQUFPLFlBQVksR0FBRyxjQUFjLENBQUE7SUFDckMsQ0FBQztJQUVELE1BQU0sY0FBYyxHQUFHLElBQUEsdUNBQWlCLEVBQUMsR0FBRyxDQUFDLENBQUE7SUFDN0MsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FDN0IsWUFBYSxDQUFDLFNBQVMsR0FBRyxjQUFjLENBQ3hDLEdBQUcsY0FBYyxDQUFBO0lBQ2xCLElBQ0MsQ0FBQyxZQUFhLENBQUMsU0FBUyxHQUFHLFlBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxXQUFXO1VBQzNELGNBQWMsRUFDaEIsQ0FBQztRQUNGLE1BQU0sSUFBSSxxQkFBYSxDQUN0QixtQkFBbUIsRUFDbkIsMENBQTBDLENBQzFDLENBQUE7SUFDRixDQUFDO0lBRUQsT0FBTyxXQUFXLENBQUE7QUFDbkIsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLE1BQW9CO0lBQ3ZDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0FBQ3hELENBQUMifQ==
@@ -1,3 +0,0 @@
1
- export * from './types';
2
- export * from './setup-window-rpc';
3
- export * from './utils';
@@ -1,20 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./types"), exports);
18
- __exportStar(require("./setup-window-rpc"), exports);
19
- __exportStar(require("./utils"), exports);
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2luZG93LXJwYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMENBQXVCO0FBQ3ZCLHFEQUFrQztBQUNsQywwQ0FBdUIifQ==
@@ -1,5 +0,0 @@
1
- /**
2
- * Sets up the current window to listen for RPC requests
3
- * from React Native or other windows
4
- */
5
- export declare function setupWindowRpc(): void;