@semaphore-protocol/utils 4.0.0-beta.16 → 4.0.0-beta.17

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.
@@ -0,0 +1,939 @@
1
+ /**
2
+ * @module @semaphore-protocol/utils
3
+ * @version 4.0.0-beta.17
4
+ * @file A library to provide utility functions to the other Semaphore packages.
5
+ * @copyright Ethereum Foundation 2024
6
+ * @license MIT
7
+ * @see [Github]{@link https://github.com/semaphore-protocol/semaphore/tree/main/packages/utils}
8
+ */
9
+ 'use strict';
10
+
11
+ Object.defineProperty(exports, '__esModule', { value: true });
12
+
13
+ var _format = "hh-sol-artifact-1";
14
+ var contractName = "Semaphore";
15
+ var sourceName = "contracts/Semaphore.sol";
16
+ var abi = [
17
+ {
18
+ inputs: [
19
+ {
20
+ internalType: "contract ISemaphoreVerifier",
21
+ name: "_verifier",
22
+ type: "address"
23
+ }
24
+ ],
25
+ stateMutability: "nonpayable",
26
+ type: "constructor"
27
+ },
28
+ {
29
+ inputs: [
30
+ ],
31
+ name: "LeafAlreadyExists",
32
+ type: "error"
33
+ },
34
+ {
35
+ inputs: [
36
+ ],
37
+ name: "LeafCannotBeZero",
38
+ type: "error"
39
+ },
40
+ {
41
+ inputs: [
42
+ ],
43
+ name: "LeafDoesNotExist",
44
+ type: "error"
45
+ },
46
+ {
47
+ inputs: [
48
+ ],
49
+ name: "LeafGreaterThanSnarkScalarField",
50
+ type: "error"
51
+ },
52
+ {
53
+ inputs: [
54
+ ],
55
+ name: "Semaphore__CallerIsNotTheGroupAdmin",
56
+ type: "error"
57
+ },
58
+ {
59
+ inputs: [
60
+ ],
61
+ name: "Semaphore__CallerIsNotThePendingGroupAdmin",
62
+ type: "error"
63
+ },
64
+ {
65
+ inputs: [
66
+ ],
67
+ name: "Semaphore__GroupDoesNotExist",
68
+ type: "error"
69
+ },
70
+ {
71
+ inputs: [
72
+ ],
73
+ name: "Semaphore__GroupHasNoMembers",
74
+ type: "error"
75
+ },
76
+ {
77
+ inputs: [
78
+ ],
79
+ name: "Semaphore__InvalidProof",
80
+ type: "error"
81
+ },
82
+ {
83
+ inputs: [
84
+ ],
85
+ name: "Semaphore__MerkleTreeDepthIsNotSupported",
86
+ type: "error"
87
+ },
88
+ {
89
+ inputs: [
90
+ ],
91
+ name: "Semaphore__MerkleTreeRootIsExpired",
92
+ type: "error"
93
+ },
94
+ {
95
+ inputs: [
96
+ ],
97
+ name: "Semaphore__MerkleTreeRootIsNotPartOfTheGroup",
98
+ type: "error"
99
+ },
100
+ {
101
+ inputs: [
102
+ ],
103
+ name: "Semaphore__YouAreUsingTheSameNullifierTwice",
104
+ type: "error"
105
+ },
106
+ {
107
+ inputs: [
108
+ ],
109
+ name: "WrongSiblingNodes",
110
+ type: "error"
111
+ },
112
+ {
113
+ anonymous: false,
114
+ inputs: [
115
+ {
116
+ indexed: true,
117
+ internalType: "uint256",
118
+ name: "groupId",
119
+ type: "uint256"
120
+ },
121
+ {
122
+ indexed: true,
123
+ internalType: "address",
124
+ name: "oldAdmin",
125
+ type: "address"
126
+ },
127
+ {
128
+ indexed: true,
129
+ internalType: "address",
130
+ name: "newAdmin",
131
+ type: "address"
132
+ }
133
+ ],
134
+ name: "GroupAdminPending",
135
+ type: "event"
136
+ },
137
+ {
138
+ anonymous: false,
139
+ inputs: [
140
+ {
141
+ indexed: true,
142
+ internalType: "uint256",
143
+ name: "groupId",
144
+ type: "uint256"
145
+ },
146
+ {
147
+ indexed: true,
148
+ internalType: "address",
149
+ name: "oldAdmin",
150
+ type: "address"
151
+ },
152
+ {
153
+ indexed: true,
154
+ internalType: "address",
155
+ name: "newAdmin",
156
+ type: "address"
157
+ }
158
+ ],
159
+ name: "GroupAdminUpdated",
160
+ type: "event"
161
+ },
162
+ {
163
+ anonymous: false,
164
+ inputs: [
165
+ {
166
+ indexed: true,
167
+ internalType: "uint256",
168
+ name: "groupId",
169
+ type: "uint256"
170
+ }
171
+ ],
172
+ name: "GroupCreated",
173
+ type: "event"
174
+ },
175
+ {
176
+ anonymous: false,
177
+ inputs: [
178
+ {
179
+ indexed: true,
180
+ internalType: "uint256",
181
+ name: "groupId",
182
+ type: "uint256"
183
+ },
184
+ {
185
+ indexed: false,
186
+ internalType: "uint256",
187
+ name: "oldMerkleTreeDuration",
188
+ type: "uint256"
189
+ },
190
+ {
191
+ indexed: false,
192
+ internalType: "uint256",
193
+ name: "newMerkleTreeDuration",
194
+ type: "uint256"
195
+ }
196
+ ],
197
+ name: "GroupMerkleTreeDurationUpdated",
198
+ type: "event"
199
+ },
200
+ {
201
+ anonymous: false,
202
+ inputs: [
203
+ {
204
+ indexed: true,
205
+ internalType: "uint256",
206
+ name: "groupId",
207
+ type: "uint256"
208
+ },
209
+ {
210
+ indexed: false,
211
+ internalType: "uint256",
212
+ name: "index",
213
+ type: "uint256"
214
+ },
215
+ {
216
+ indexed: false,
217
+ internalType: "uint256",
218
+ name: "identityCommitment",
219
+ type: "uint256"
220
+ },
221
+ {
222
+ indexed: false,
223
+ internalType: "uint256",
224
+ name: "merkleTreeRoot",
225
+ type: "uint256"
226
+ }
227
+ ],
228
+ name: "MemberAdded",
229
+ type: "event"
230
+ },
231
+ {
232
+ anonymous: false,
233
+ inputs: [
234
+ {
235
+ indexed: true,
236
+ internalType: "uint256",
237
+ name: "groupId",
238
+ type: "uint256"
239
+ },
240
+ {
241
+ indexed: false,
242
+ internalType: "uint256",
243
+ name: "index",
244
+ type: "uint256"
245
+ },
246
+ {
247
+ indexed: false,
248
+ internalType: "uint256",
249
+ name: "identityCommitment",
250
+ type: "uint256"
251
+ },
252
+ {
253
+ indexed: false,
254
+ internalType: "uint256",
255
+ name: "merkleTreeRoot",
256
+ type: "uint256"
257
+ }
258
+ ],
259
+ name: "MemberRemoved",
260
+ type: "event"
261
+ },
262
+ {
263
+ anonymous: false,
264
+ inputs: [
265
+ {
266
+ indexed: true,
267
+ internalType: "uint256",
268
+ name: "groupId",
269
+ type: "uint256"
270
+ },
271
+ {
272
+ indexed: false,
273
+ internalType: "uint256",
274
+ name: "index",
275
+ type: "uint256"
276
+ },
277
+ {
278
+ indexed: false,
279
+ internalType: "uint256",
280
+ name: "identityCommitment",
281
+ type: "uint256"
282
+ },
283
+ {
284
+ indexed: false,
285
+ internalType: "uint256",
286
+ name: "newIdentityCommitment",
287
+ type: "uint256"
288
+ },
289
+ {
290
+ indexed: false,
291
+ internalType: "uint256",
292
+ name: "merkleTreeRoot",
293
+ type: "uint256"
294
+ }
295
+ ],
296
+ name: "MemberUpdated",
297
+ type: "event"
298
+ },
299
+ {
300
+ anonymous: false,
301
+ inputs: [
302
+ {
303
+ indexed: true,
304
+ internalType: "uint256",
305
+ name: "groupId",
306
+ type: "uint256"
307
+ },
308
+ {
309
+ indexed: false,
310
+ internalType: "uint256",
311
+ name: "startIndex",
312
+ type: "uint256"
313
+ },
314
+ {
315
+ indexed: false,
316
+ internalType: "uint256[]",
317
+ name: "identityCommitments",
318
+ type: "uint256[]"
319
+ },
320
+ {
321
+ indexed: false,
322
+ internalType: "uint256",
323
+ name: "merkleTreeRoot",
324
+ type: "uint256"
325
+ }
326
+ ],
327
+ name: "MembersAdded",
328
+ type: "event"
329
+ },
330
+ {
331
+ anonymous: false,
332
+ inputs: [
333
+ {
334
+ indexed: true,
335
+ internalType: "uint256",
336
+ name: "groupId",
337
+ type: "uint256"
338
+ },
339
+ {
340
+ indexed: false,
341
+ internalType: "uint256",
342
+ name: "merkleTreeDepth",
343
+ type: "uint256"
344
+ },
345
+ {
346
+ indexed: true,
347
+ internalType: "uint256",
348
+ name: "merkleTreeRoot",
349
+ type: "uint256"
350
+ },
351
+ {
352
+ indexed: false,
353
+ internalType: "uint256",
354
+ name: "nullifier",
355
+ type: "uint256"
356
+ },
357
+ {
358
+ indexed: false,
359
+ internalType: "uint256",
360
+ name: "message",
361
+ type: "uint256"
362
+ },
363
+ {
364
+ indexed: true,
365
+ internalType: "uint256",
366
+ name: "scope",
367
+ type: "uint256"
368
+ },
369
+ {
370
+ indexed: false,
371
+ internalType: "uint256[8]",
372
+ name: "points",
373
+ type: "uint256[8]"
374
+ }
375
+ ],
376
+ name: "ProofValidated",
377
+ type: "event"
378
+ },
379
+ {
380
+ inputs: [
381
+ {
382
+ internalType: "uint256",
383
+ name: "groupId",
384
+ type: "uint256"
385
+ }
386
+ ],
387
+ name: "acceptGroupAdmin",
388
+ outputs: [
389
+ ],
390
+ stateMutability: "nonpayable",
391
+ type: "function"
392
+ },
393
+ {
394
+ inputs: [
395
+ {
396
+ internalType: "uint256",
397
+ name: "groupId",
398
+ type: "uint256"
399
+ },
400
+ {
401
+ internalType: "uint256",
402
+ name: "identityCommitment",
403
+ type: "uint256"
404
+ }
405
+ ],
406
+ name: "addMember",
407
+ outputs: [
408
+ ],
409
+ stateMutability: "nonpayable",
410
+ type: "function"
411
+ },
412
+ {
413
+ inputs: [
414
+ {
415
+ internalType: "uint256",
416
+ name: "groupId",
417
+ type: "uint256"
418
+ },
419
+ {
420
+ internalType: "uint256[]",
421
+ name: "identityCommitments",
422
+ type: "uint256[]"
423
+ }
424
+ ],
425
+ name: "addMembers",
426
+ outputs: [
427
+ ],
428
+ stateMutability: "nonpayable",
429
+ type: "function"
430
+ },
431
+ {
432
+ inputs: [
433
+ {
434
+ internalType: "address",
435
+ name: "admin",
436
+ type: "address"
437
+ },
438
+ {
439
+ internalType: "uint256",
440
+ name: "merkleTreeDuration",
441
+ type: "uint256"
442
+ }
443
+ ],
444
+ name: "createGroup",
445
+ outputs: [
446
+ {
447
+ internalType: "uint256",
448
+ name: "groupId",
449
+ type: "uint256"
450
+ }
451
+ ],
452
+ stateMutability: "nonpayable",
453
+ type: "function"
454
+ },
455
+ {
456
+ inputs: [
457
+ ],
458
+ name: "createGroup",
459
+ outputs: [
460
+ {
461
+ internalType: "uint256",
462
+ name: "groupId",
463
+ type: "uint256"
464
+ }
465
+ ],
466
+ stateMutability: "nonpayable",
467
+ type: "function"
468
+ },
469
+ {
470
+ inputs: [
471
+ {
472
+ internalType: "address",
473
+ name: "admin",
474
+ type: "address"
475
+ }
476
+ ],
477
+ name: "createGroup",
478
+ outputs: [
479
+ {
480
+ internalType: "uint256",
481
+ name: "groupId",
482
+ type: "uint256"
483
+ }
484
+ ],
485
+ stateMutability: "nonpayable",
486
+ type: "function"
487
+ },
488
+ {
489
+ inputs: [
490
+ {
491
+ internalType: "uint256",
492
+ name: "groupId",
493
+ type: "uint256"
494
+ }
495
+ ],
496
+ name: "getGroupAdmin",
497
+ outputs: [
498
+ {
499
+ internalType: "address",
500
+ name: "",
501
+ type: "address"
502
+ }
503
+ ],
504
+ stateMutability: "view",
505
+ type: "function"
506
+ },
507
+ {
508
+ inputs: [
509
+ {
510
+ internalType: "uint256",
511
+ name: "groupId",
512
+ type: "uint256"
513
+ }
514
+ ],
515
+ name: "getMerkleTreeDepth",
516
+ outputs: [
517
+ {
518
+ internalType: "uint256",
519
+ name: "",
520
+ type: "uint256"
521
+ }
522
+ ],
523
+ stateMutability: "view",
524
+ type: "function"
525
+ },
526
+ {
527
+ inputs: [
528
+ {
529
+ internalType: "uint256",
530
+ name: "groupId",
531
+ type: "uint256"
532
+ }
533
+ ],
534
+ name: "getMerkleTreeRoot",
535
+ outputs: [
536
+ {
537
+ internalType: "uint256",
538
+ name: "",
539
+ type: "uint256"
540
+ }
541
+ ],
542
+ stateMutability: "view",
543
+ type: "function"
544
+ },
545
+ {
546
+ inputs: [
547
+ {
548
+ internalType: "uint256",
549
+ name: "groupId",
550
+ type: "uint256"
551
+ }
552
+ ],
553
+ name: "getMerkleTreeSize",
554
+ outputs: [
555
+ {
556
+ internalType: "uint256",
557
+ name: "",
558
+ type: "uint256"
559
+ }
560
+ ],
561
+ stateMutability: "view",
562
+ type: "function"
563
+ },
564
+ {
565
+ inputs: [
566
+ ],
567
+ name: "groupCounter",
568
+ outputs: [
569
+ {
570
+ internalType: "uint256",
571
+ name: "",
572
+ type: "uint256"
573
+ }
574
+ ],
575
+ stateMutability: "view",
576
+ type: "function"
577
+ },
578
+ {
579
+ inputs: [
580
+ {
581
+ internalType: "uint256",
582
+ name: "",
583
+ type: "uint256"
584
+ }
585
+ ],
586
+ name: "groups",
587
+ outputs: [
588
+ {
589
+ internalType: "uint256",
590
+ name: "merkleTreeDuration",
591
+ type: "uint256"
592
+ }
593
+ ],
594
+ stateMutability: "view",
595
+ type: "function"
596
+ },
597
+ {
598
+ inputs: [
599
+ {
600
+ internalType: "uint256",
601
+ name: "groupId",
602
+ type: "uint256"
603
+ },
604
+ {
605
+ internalType: "uint256",
606
+ name: "identityCommitment",
607
+ type: "uint256"
608
+ }
609
+ ],
610
+ name: "hasMember",
611
+ outputs: [
612
+ {
613
+ internalType: "bool",
614
+ name: "",
615
+ type: "bool"
616
+ }
617
+ ],
618
+ stateMutability: "view",
619
+ type: "function"
620
+ },
621
+ {
622
+ inputs: [
623
+ {
624
+ internalType: "uint256",
625
+ name: "groupId",
626
+ type: "uint256"
627
+ },
628
+ {
629
+ internalType: "uint256",
630
+ name: "identityCommitment",
631
+ type: "uint256"
632
+ }
633
+ ],
634
+ name: "indexOf",
635
+ outputs: [
636
+ {
637
+ internalType: "uint256",
638
+ name: "",
639
+ type: "uint256"
640
+ }
641
+ ],
642
+ stateMutability: "view",
643
+ type: "function"
644
+ },
645
+ {
646
+ inputs: [
647
+ {
648
+ internalType: "uint256",
649
+ name: "groupId",
650
+ type: "uint256"
651
+ },
652
+ {
653
+ internalType: "uint256",
654
+ name: "identityCommitment",
655
+ type: "uint256"
656
+ },
657
+ {
658
+ internalType: "uint256[]",
659
+ name: "merkleProofSiblings",
660
+ type: "uint256[]"
661
+ }
662
+ ],
663
+ name: "removeMember",
664
+ outputs: [
665
+ ],
666
+ stateMutability: "nonpayable",
667
+ type: "function"
668
+ },
669
+ {
670
+ inputs: [
671
+ {
672
+ internalType: "uint256",
673
+ name: "groupId",
674
+ type: "uint256"
675
+ },
676
+ {
677
+ internalType: "address",
678
+ name: "newAdmin",
679
+ type: "address"
680
+ }
681
+ ],
682
+ name: "updateGroupAdmin",
683
+ outputs: [
684
+ ],
685
+ stateMutability: "nonpayable",
686
+ type: "function"
687
+ },
688
+ {
689
+ inputs: [
690
+ {
691
+ internalType: "uint256",
692
+ name: "groupId",
693
+ type: "uint256"
694
+ },
695
+ {
696
+ internalType: "uint256",
697
+ name: "newMerkleTreeDuration",
698
+ type: "uint256"
699
+ }
700
+ ],
701
+ name: "updateGroupMerkleTreeDuration",
702
+ outputs: [
703
+ ],
704
+ stateMutability: "nonpayable",
705
+ type: "function"
706
+ },
707
+ {
708
+ inputs: [
709
+ {
710
+ internalType: "uint256",
711
+ name: "groupId",
712
+ type: "uint256"
713
+ },
714
+ {
715
+ internalType: "uint256",
716
+ name: "identityCommitment",
717
+ type: "uint256"
718
+ },
719
+ {
720
+ internalType: "uint256",
721
+ name: "newIdentityCommitment",
722
+ type: "uint256"
723
+ },
724
+ {
725
+ internalType: "uint256[]",
726
+ name: "merkleProofSiblings",
727
+ type: "uint256[]"
728
+ }
729
+ ],
730
+ name: "updateMember",
731
+ outputs: [
732
+ ],
733
+ stateMutability: "nonpayable",
734
+ type: "function"
735
+ },
736
+ {
737
+ inputs: [
738
+ {
739
+ internalType: "uint256",
740
+ name: "groupId",
741
+ type: "uint256"
742
+ },
743
+ {
744
+ components: [
745
+ {
746
+ internalType: "uint256",
747
+ name: "merkleTreeDepth",
748
+ type: "uint256"
749
+ },
750
+ {
751
+ internalType: "uint256",
752
+ name: "merkleTreeRoot",
753
+ type: "uint256"
754
+ },
755
+ {
756
+ internalType: "uint256",
757
+ name: "nullifier",
758
+ type: "uint256"
759
+ },
760
+ {
761
+ internalType: "uint256",
762
+ name: "message",
763
+ type: "uint256"
764
+ },
765
+ {
766
+ internalType: "uint256",
767
+ name: "scope",
768
+ type: "uint256"
769
+ },
770
+ {
771
+ internalType: "uint256[8]",
772
+ name: "points",
773
+ type: "uint256[8]"
774
+ }
775
+ ],
776
+ internalType: "struct ISemaphore.SemaphoreProof",
777
+ name: "proof",
778
+ type: "tuple"
779
+ }
780
+ ],
781
+ name: "validateProof",
782
+ outputs: [
783
+ ],
784
+ stateMutability: "nonpayable",
785
+ type: "function"
786
+ },
787
+ {
788
+ inputs: [
789
+ ],
790
+ name: "verifier",
791
+ outputs: [
792
+ {
793
+ internalType: "contract ISemaphoreVerifier",
794
+ name: "",
795
+ type: "address"
796
+ }
797
+ ],
798
+ stateMutability: "view",
799
+ type: "function"
800
+ },
801
+ {
802
+ inputs: [
803
+ {
804
+ internalType: "uint256",
805
+ name: "groupId",
806
+ type: "uint256"
807
+ },
808
+ {
809
+ components: [
810
+ {
811
+ internalType: "uint256",
812
+ name: "merkleTreeDepth",
813
+ type: "uint256"
814
+ },
815
+ {
816
+ internalType: "uint256",
817
+ name: "merkleTreeRoot",
818
+ type: "uint256"
819
+ },
820
+ {
821
+ internalType: "uint256",
822
+ name: "nullifier",
823
+ type: "uint256"
824
+ },
825
+ {
826
+ internalType: "uint256",
827
+ name: "message",
828
+ type: "uint256"
829
+ },
830
+ {
831
+ internalType: "uint256",
832
+ name: "scope",
833
+ type: "uint256"
834
+ },
835
+ {
836
+ internalType: "uint256[8]",
837
+ name: "points",
838
+ type: "uint256[8]"
839
+ }
840
+ ],
841
+ internalType: "struct ISemaphore.SemaphoreProof",
842
+ name: "proof",
843
+ type: "tuple"
844
+ }
845
+ ],
846
+ name: "verifyProof",
847
+ outputs: [
848
+ {
849
+ internalType: "bool",
850
+ name: "",
851
+ type: "bool"
852
+ }
853
+ ],
854
+ stateMutability: "view",
855
+ type: "function"
856
+ }
857
+ ];
858
+ var bytecode = "0x608060405234801561001057600080fd5b5060405161201538038061201583398101604081905261002f91610054565b600380546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b611f82806100936000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80636389e107116100b8578063a9961c941161007c578063a9961c94146102b5578063d0d898dd146102de578063d24924fe146102f1578063da3cda52146102fa578063dabc4d511461030d578063fcf0b6ec1461032057600080fd5b80636389e1071461022c5780636cdd32fe1461024f5780637ee35a0c1461026257806390509d441461028257806396324bd41461029557600080fd5b80634178c4d5116100ff5780634178c4d5146101c8578063456f4188146101db578063568ee826146101fe578063575185ed146102115780635c3f3b601461021957600080fd5b8063042453711461013c57806306dd8485146101515780631783efc3146101775780632b7ac3f31461018a5780632c880363146101b5575b600080fd5b61014f61014a3660046119e2565b610333565b005b61016461015f366004611a2e565b610366565b6040519081526020015b60405180910390f35b61014f610185366004611a2e565b610387565b60035461019d906001600160a01b031681565b6040516001600160a01b03909116815260200161016e565b6101646101c3366004611a6c565b6103b8565b61014f6101d6366004611a96565b6103f0565b6101ee6101e9366004611af7565b610427565b604051901515815260200161016e565b61014f61020c366004611b31565b61068c565b61016461069a565b610164610227366004611b5d565b6106d1565b61016461023a366004611b78565b60009081526020819052604090206001015490565b61014f61025d366004611b91565b61070a565b610164610270366004611b78565b60009081526020819052604090205490565b6101ee610290366004611a2e565b61073f565b6101646102a3366004611b78565b60046020526000908152604090205481565b61019d6102c3366004611b78565b6000908152600160205260409020546001600160a01b031690565b61014f6102ec366004611af7565b610761565b61016460055481565b61014f610308366004611b78565b61084b565b61016461031b366004611b78565b610857565b61014f61032e366004611a2e565b61087b565b600061034084848461090b565b600094855260046020908152604080872092875260019092019052909320429055505050565b600082815260208190526040812061037e90836109a9565b90505b92915050565b600061039383836109f6565b6000938452600460209081526040808620928652600190920190529092204290555050565b60058054600091826103c983611bfa565b9190505590506103d98184610a98565b600081815260046020526040902091909155919050565b60006103ff8686868686610b22565b6000968752600460209081526040808920928952600190920190529095204290555050505050565b60008281526001602052604081205483906001600160a01b031661045e5760405163029f057960e01b815260040160405180910390fd5b60018335108061046f575060208335115b1561048d5760405163767b278960e11b815260040160405180910390fd5b600084815260208190526040812054908190036104bd5760405163c8b02e0160e01b815260040160405180910390fd5b60006104c886610857565b90508085602001351461054d576000868152600460208181526040808420898301358552600181018352908420548a855292909152549091829003610520576040516326994ac360e11b815260040160405180910390fd5b61052a8183611c13565b42111561054a576040516309581a9960e41b815260040160405180910390fd5b50505b60035460408051808201825260a0880135815260c088013560208083019190915282516080808201855260e08b01358286019081526101008c0135606080850191909152908352855180870187526101208d013581526101408d01358186015283850152855180870187526101608d013581526101808d01358186015286519283018752848d013583528c870135948301949094526001600160a01b039096169563a23f019995929392820190610606908d0135610be9565b81526020016106188c60800135610be9565b90526040516001600160e01b031960e087901b16815261064194939291908c3590600401611c88565b602060405180830381865afa15801561065e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106829190611d1b565b9695505050505050565b6106968282610c20565b5050565b60058054600091826106ab83611bfa565b9190505590506106bb8133610a98565b6000818152600460205260409020610e10905590565b60058054600091826106e283611bfa565b9190505590506106f28183610a98565b6000818152600460205260409020610e109055919050565b600061071885858585610cb4565b60009586526004602090815260408088209288526001909201905290942042905550505050565b600082815260208181526040808320848452600301909152812054151561037e565b600082815260046020908152604080832084820135845260020190915290205460ff16156107a25760405163041162bd60e31b815260040160405180910390fd5b6107ac8282610427565b6107c95760405163012a9af160e61b815260040160405180910390fd5b6000828152600460209081526040808320848201358085526002909101835292819020805460ff1916600117905551608084013592918401359185917f0c32e14cfe81a05d371c248d22de6b7ae849e981b76a1f8842e7b6da73fc405a9161083f918735919060608901359060a08a0190611d44565b60405180910390a45050565b61085481610d72565b50565b60008181526020818152604080832060018101548452600201909152812054610381565b60008281526001602052604090205482906001600160a01b031633146108b4576040516317737e4f60e31b815260040160405180910390fd5b60008381526004602090815260409182902080549085905582518181529182018590529185917f264b2a8f6763c084235fe832ba903482b2ef1a521336881fc75b987c2dfd29c5910160405180910390a250505050565b60008381526001602052604081205484906001600160a01b03163314610944576040516317737e4f60e31b815260040160405180910390fd5b6000858152602081905260409020805490610960908686610e17565b9250857f61e5e8054e3daf084a0c6c646c065e8bf5e7ca4d5567bda942309bd1652f349d828787876040516109989493929190611d6c565b60405180910390a250509392505050565b600081815260038301602052604081205481036109d957604051631c811d5b60e21b815260040160405180910390fd5b600082815260038401602052604090205461037e90600190611db2565b60008281526001602052604081205483906001600160a01b03163314610a2f576040516317737e4f60e31b815260040160405180910390fd5b6000848152602081905260409020805490610a4a9085611344565b604080518381526020810187905290810182905290935085907f19239b3f93cd10558aaf11423af70c77763bf54f52bcc75bfa74d4d13548cde99060600160405180910390a2505092915050565b60008281526001602052604080822080546001600160a01b0319166001600160a01b0385161790555183917ff0adfb94eab6daf835deb69c5738fe636150c3dfd08094a76f39b963dc8cb05a91a26040516001600160a01b0382169060009084907f0ba83579a0e79193ef649b9f5a8759d35af086ba62a3e207b52e4a8ae30d49e3908390a45050565b60008581526001602052604081205486906001600160a01b03163314610b5b576040516317737e4f60e31b815260040160405180910390fd5b6000878152602081905260408120610b7390886109a9565b6000898152602081905260409020909150610b91908888888861150d565b60408051838152602081018a90529081018890526060810182905290935088907fea3588e4a2a0c93d6a0e69dfeaf7496f43ccccf02ad9ce0a5b7627cbca4b61b19060800160405180910390a2505095945050505050565b6000600882604051602001610c0091815260200190565b60408051601f198184030181529190528051602090910120901c92915050565b60008281526001602052604090205482906001600160a01b03163314610c59576040516317737e4f60e31b815260040160405180910390fd5b60008381526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590519091339186917f1018365553cce55d9cb02ef73e18cc9311894f3fe1d1eafd235ac2d26cd8ba5891a4505050565b60008481526001602052604081205485906001600160a01b03163314610ced576040516317737e4f60e31b815260040160405180910390fd5b6000868152602081905260408120610d0590876109a9565b6000888152602081905260409020909150610d229087878761197d565b604080518381526020810189905290810182905290935087907f3108849c053c77b8073a11256dffb5ffd5b55e93e105a355e1c9061db890d8719060600160405180910390a25050949350505050565b6000818152600260205260409020546001600160a01b03163314610da9576040516334c4245d60e01b815260040160405180910390fd5b60008181526001602090815260408083208054336001600160a01b031980831682179093556002909452828520805490921690915590516001600160a01b0390911692839185917f0ba83579a0e79193ef649b9f5a8759d35af086ba62a3e207b52e4a8ae30d49e391a45050565b8254600090815b83811015610f4857600080516020611f2d833981519152858583818110610e4757610e47611c26565b9050602002013510610e6c576040516361c0541760e11b815260040160405180910390fd5b848482818110610e7e57610e7e611c26565b90506020020135600003610ea5576040516314b48df160e11b815260040160405180910390fd5b610eda86868684818110610ebb57610ebb611c26565b9050602002013560009081526003919091016020526040902054151590565b15610ef8576040516312c50cad60e11b815260040160405180910390fd5b80610f04836001611c13565b610f0e9190611c13565b866003016000878785818110610f2657610f26611c26565b6020908102929092013583525081019190915260400160002055600101610e1e565b50606084848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050506001880154919250505b610f918584611c13565b610f9c826002611ea9565b1015610fb257610fab81611bfa565b9050610f87565b60018701819055826000610fc68783611c13565b9050600182811c90600090610fdb8185611db2565b610fe7911c6001611c13565b905060005b858110156112d85760006110008484611db2565b905060008167ffffffffffffffff81111561101d5761101d611eb5565b604051908082528060200260200182016040528015611046578160200160208202803683370190505b50905060005b82811015611203576000886110618884611c13565b61106c906002611ecb565b101561108f578f60020160008681526020019081526020016000205490506110cb565b8a8961109b8985611c13565b6110a6906002611ecb565b6110b09190611db2565b815181106110c0576110c0611c26565b602002602001015190505b6000886110d88985611c13565b6110e3906002611ecb565b6110ee906001611c13565b101561113b578b8a6111008a86611c13565b61110b906002611ecb565b611116906001611c13565b6111209190611db2565b8151811061113057611130611c26565b602002602001015190505b600081156111d357604080518082018252848152602081018490529051632b0aac7f60e11b815273__$75f79a42d9bcbdbb69ad79ebd80f556f39$__9163561558fe9161118b9190600401611ee2565b602060405180830381865af41580156111a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cc9190611f13565b90506111d6565b50815b808585815181106111e9576111e9611c26565b60200260200101818152505083600101935050505061104c565b5085600116600103611254578860018a5161121e9190611db2565b8151811061122e5761122e611c26565b60200260200101518e60020160008581526020019081526020016000208190555061129f565b60018951111561129f578860028a5161126d9190611db2565b8151811061127d5761127d611c26565b60200260200101518e6002016000858152602001908152602001600020819055505b849650600185901c9450809850839550600180856112bd9190611db2565b6112c9911c6001611c13565b93508260010192505050610fec565b506112e38988611c13565b8b55855186906000906112f8576112f8611c26565b60200260200101518b6002016000878152602001908152602001600020819055508560008151811061132c5761132c611c26565b60200260200101519750505050505050509392505050565b6000600080516020611f2d8339815191528210611374576040516361c0541760e11b815260040160405180910390fd5b81600003611395576040516314b48df160e11b815260040160405180910390fd5b6000828152600384016020526040902054156113c4576040516312c50cad60e11b815260040160405180910390fd5b8254600180850154906113d8908390611c13565b6113e3826002611ea9565b10156113f5576113f281611bfa565b90505b600185018190558360005b828110156114d2578084901c6001166001036114b657604080518082018252600083815260028a0160209081529083902054825281018490529051632b0aac7f60e11b815273__$75f79a42d9bcbdbb69ad79ebd80f556f39$__9163561558fe9161146e9190600401611ee2565b602060405180830381865af415801561148b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114af9190611f13565b91506114ca565b600081815260028801602052604090208290555b600101611400565b506114dc83611bfa565b8087556000928352600287016020908152604080852084905596845260039097019096529390209390935550919050565b6000600080516020611f2d833981519152841061153d576040516361c0541760e11b815260040160405180910390fd5b600085815260038701602052604090205461156b57604051631c811d5b60e21b815260040160405180910390fd5b60008481526003870160205260409020541561159a576040516312c50cad60e11b815260040160405180910390fd5b60006115a687876109a9565b8754909150859087906000906115be90600190611db2565b60018b0154909150600090815b818110156118f4578087901c60011660010361177e57600080516020611f2d8339815191528a8a8581811061160257611602611c26565b9050602002013510611627576040516361c0541760e11b815260040160405180910390fd5b73__$75f79a42d9bcbdbb69ad79ebd80f556f39$__63561558fe60405180604001604052808d8d8881811061165e5761165e611c26565b905060200201358152602001898152506040518263ffffffff1660e01b815260040161168a9190611ee2565b602060405180830381865af41580156116a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116cb9190611f13565b955073__$75f79a42d9bcbdbb69ad79ebd80f556f39$__63561558fe60405180604001604052808d8d8881811061170457611704611c26565b905060200201358152602001888152506040518263ffffffff1660e01b81526004016117309190611ee2565b602060405180830381865af415801561174d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117719190611f13565b94508260010192506118ec565b86811c84821c146118d857600080516020611f2d8339815191528a8a858181106117aa576117aa611c26565b90506020020135106117cf576040516361c0541760e11b815260040160405180910390fd5b73__$75f79a42d9bcbdbb69ad79ebd80f556f39$__63561558fe60405180604001604052808981526020018d8d8881811061180c5761180c611c26565b905060200201358152506040518263ffffffff1660e01b81526004016118329190611ee2565b602060405180830381865af415801561184f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118739190611f13565b955073__$75f79a42d9bcbdbb69ad79ebd80f556f39$__63561558fe60405180604001604052808881526020018d8d888181106118b2576118b2611c26565b905060200201358152506040518263ffffffff1660e01b81526004016117309190611ee2565b600083815260028e01602052604090208690555b6001016115cb565b5060018c0154600090815260028d016020526040902054841461192a57604051631fd4986360e11b815260040160405180910390fd5b600081815260028d0160205260409020859055891561195c5760008b815260038d016020526040808220548c83529120555b505050600088815260038a0160205260408120555091505095945050505050565b600061198d85856000868661150d565b95945050505050565b60008083601f8401126119a857600080fd5b50813567ffffffffffffffff8111156119c057600080fd5b6020830191508360208260051b85010111156119db57600080fd5b9250929050565b6000806000604084860312156119f757600080fd5b83359250602084013567ffffffffffffffff811115611a1557600080fd5b611a2186828701611996565b9497909650939450505050565b60008060408385031215611a4157600080fd5b50508035926020909101359150565b80356001600160a01b0381168114611a6757600080fd5b919050565b60008060408385031215611a7f57600080fd5b611a8883611a50565b946020939093013593505050565b600080600080600060808688031215611aae57600080fd5b853594506020860135935060408601359250606086013567ffffffffffffffff811115611ada57600080fd5b611ae688828901611996565b969995985093965092949392505050565b6000808284036101c0811215611b0c57600080fd5b833592506101a0601f1982011215611b2357600080fd5b506020830190509250929050565b60008060408385031215611b4457600080fd5b82359150611b5460208401611a50565b90509250929050565b600060208284031215611b6f57600080fd5b61037e82611a50565b600060208284031215611b8a57600080fd5b5035919050565b60008060008060608587031215611ba757600080fd5b8435935060208501359250604085013567ffffffffffffffff811115611bcc57600080fd5b611bd887828801611996565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b600060018201611c0c57611c0c611be4565b5060010190565b8082018082111561038157610381611be4565b634e487b7160e01b600052603260045260246000fd5b8060005b6002811015611c5f578151845260209384019390910190600101611c40565b50505050565b8060005b6004811015611c5f578151845260209384019390910190600101611c69565b6101a08101611c978288611c3c565b6040808301876000805b6002808210611cb05750611cea565b835185845b83811015611cd3578251825260209283019290910190600101611cb5565b505050938501935060209290920191600101611ca1565b5050505050611cfc60c0830186611c3c565b611d0a610100830185611c65565b826101808301529695505050505050565b600060208284031215611d2d57600080fd5b81518015158114611d3d57600080fd5b9392505050565b8481526020810184905260408101839052610160810161010083606084013795945050505050565b848152606060208201819052810183905260006001600160fb1b03841115611d9357600080fd5b8360051b80866080850137604083019390935250016080019392505050565b8181038181111561038157610381611be4565b600181815b80851115611e00578160001904821115611de657611de6611be4565b80851615611df357918102915b93841c9390800290611dca565b509250929050565b600082611e1757506001610381565b81611e2457506000610381565b8160018114611e3a5760028114611e4457611e60565b6001915050610381565b60ff841115611e5557611e55611be4565b50506001821b610381565b5060208310610133831016604e8410600b8410161715611e83575081810a610381565b611e8d8383611dc5565b8060001904821115611ea157611ea1611be4565b029392505050565b600061037e8383611e08565b634e487b7160e01b600052604160045260246000fd5b808202811582820484141761038157610381611be4565b60408101818360005b6002811015611f0a578151835260209283019290910190600101611eeb565b50505092915050565b600060208284031215611f2557600080fd5b505191905056fe30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a2646970667358221220164ddea4e67fb9956ad9d73065c0b85ecf9b8062f67bcc5be446364b9475660664736f6c63430008170033";
859
+ var deployedBytecode = "0x608060405234801561001057600080fd5b50600436106101375760003560e01c80636389e107116100b8578063a9961c941161007c578063a9961c94146102b5578063d0d898dd146102de578063d24924fe146102f1578063da3cda52146102fa578063dabc4d511461030d578063fcf0b6ec1461032057600080fd5b80636389e1071461022c5780636cdd32fe1461024f5780637ee35a0c1461026257806390509d441461028257806396324bd41461029557600080fd5b80634178c4d5116100ff5780634178c4d5146101c8578063456f4188146101db578063568ee826146101fe578063575185ed146102115780635c3f3b601461021957600080fd5b8063042453711461013c57806306dd8485146101515780631783efc3146101775780632b7ac3f31461018a5780632c880363146101b5575b600080fd5b61014f61014a3660046119e2565b610333565b005b61016461015f366004611a2e565b610366565b6040519081526020015b60405180910390f35b61014f610185366004611a2e565b610387565b60035461019d906001600160a01b031681565b6040516001600160a01b03909116815260200161016e565b6101646101c3366004611a6c565b6103b8565b61014f6101d6366004611a96565b6103f0565b6101ee6101e9366004611af7565b610427565b604051901515815260200161016e565b61014f61020c366004611b31565b61068c565b61016461069a565b610164610227366004611b5d565b6106d1565b61016461023a366004611b78565b60009081526020819052604090206001015490565b61014f61025d366004611b91565b61070a565b610164610270366004611b78565b60009081526020819052604090205490565b6101ee610290366004611a2e565b61073f565b6101646102a3366004611b78565b60046020526000908152604090205481565b61019d6102c3366004611b78565b6000908152600160205260409020546001600160a01b031690565b61014f6102ec366004611af7565b610761565b61016460055481565b61014f610308366004611b78565b61084b565b61016461031b366004611b78565b610857565b61014f61032e366004611a2e565b61087b565b600061034084848461090b565b600094855260046020908152604080872092875260019092019052909320429055505050565b600082815260208190526040812061037e90836109a9565b90505b92915050565b600061039383836109f6565b6000938452600460209081526040808620928652600190920190529092204290555050565b60058054600091826103c983611bfa565b9190505590506103d98184610a98565b600081815260046020526040902091909155919050565b60006103ff8686868686610b22565b6000968752600460209081526040808920928952600190920190529095204290555050505050565b60008281526001602052604081205483906001600160a01b031661045e5760405163029f057960e01b815260040160405180910390fd5b60018335108061046f575060208335115b1561048d5760405163767b278960e11b815260040160405180910390fd5b600084815260208190526040812054908190036104bd5760405163c8b02e0160e01b815260040160405180910390fd5b60006104c886610857565b90508085602001351461054d576000868152600460208181526040808420898301358552600181018352908420548a855292909152549091829003610520576040516326994ac360e11b815260040160405180910390fd5b61052a8183611c13565b42111561054a576040516309581a9960e41b815260040160405180910390fd5b50505b60035460408051808201825260a0880135815260c088013560208083019190915282516080808201855260e08b01358286019081526101008c0135606080850191909152908352855180870187526101208d013581526101408d01358186015283850152855180870187526101608d013581526101808d01358186015286519283018752848d013583528c870135948301949094526001600160a01b039096169563a23f019995929392820190610606908d0135610be9565b81526020016106188c60800135610be9565b90526040516001600160e01b031960e087901b16815261064194939291908c3590600401611c88565b602060405180830381865afa15801561065e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106829190611d1b565b9695505050505050565b6106968282610c20565b5050565b60058054600091826106ab83611bfa565b9190505590506106bb8133610a98565b6000818152600460205260409020610e10905590565b60058054600091826106e283611bfa565b9190505590506106f28183610a98565b6000818152600460205260409020610e109055919050565b600061071885858585610cb4565b60009586526004602090815260408088209288526001909201905290942042905550505050565b600082815260208181526040808320848452600301909152812054151561037e565b600082815260046020908152604080832084820135845260020190915290205460ff16156107a25760405163041162bd60e31b815260040160405180910390fd5b6107ac8282610427565b6107c95760405163012a9af160e61b815260040160405180910390fd5b6000828152600460209081526040808320848201358085526002909101835292819020805460ff1916600117905551608084013592918401359185917f0c32e14cfe81a05d371c248d22de6b7ae849e981b76a1f8842e7b6da73fc405a9161083f918735919060608901359060a08a0190611d44565b60405180910390a45050565b61085481610d72565b50565b60008181526020818152604080832060018101548452600201909152812054610381565b60008281526001602052604090205482906001600160a01b031633146108b4576040516317737e4f60e31b815260040160405180910390fd5b60008381526004602090815260409182902080549085905582518181529182018590529185917f264b2a8f6763c084235fe832ba903482b2ef1a521336881fc75b987c2dfd29c5910160405180910390a250505050565b60008381526001602052604081205484906001600160a01b03163314610944576040516317737e4f60e31b815260040160405180910390fd5b6000858152602081905260409020805490610960908686610e17565b9250857f61e5e8054e3daf084a0c6c646c065e8bf5e7ca4d5567bda942309bd1652f349d828787876040516109989493929190611d6c565b60405180910390a250509392505050565b600081815260038301602052604081205481036109d957604051631c811d5b60e21b815260040160405180910390fd5b600082815260038401602052604090205461037e90600190611db2565b60008281526001602052604081205483906001600160a01b03163314610a2f576040516317737e4f60e31b815260040160405180910390fd5b6000848152602081905260409020805490610a4a9085611344565b604080518381526020810187905290810182905290935085907f19239b3f93cd10558aaf11423af70c77763bf54f52bcc75bfa74d4d13548cde99060600160405180910390a2505092915050565b60008281526001602052604080822080546001600160a01b0319166001600160a01b0385161790555183917ff0adfb94eab6daf835deb69c5738fe636150c3dfd08094a76f39b963dc8cb05a91a26040516001600160a01b0382169060009084907f0ba83579a0e79193ef649b9f5a8759d35af086ba62a3e207b52e4a8ae30d49e3908390a45050565b60008581526001602052604081205486906001600160a01b03163314610b5b576040516317737e4f60e31b815260040160405180910390fd5b6000878152602081905260408120610b7390886109a9565b6000898152602081905260409020909150610b91908888888861150d565b60408051838152602081018a90529081018890526060810182905290935088907fea3588e4a2a0c93d6a0e69dfeaf7496f43ccccf02ad9ce0a5b7627cbca4b61b19060800160405180910390a2505095945050505050565b6000600882604051602001610c0091815260200190565b60408051601f198184030181529190528051602090910120901c92915050565b60008281526001602052604090205482906001600160a01b03163314610c59576040516317737e4f60e31b815260040160405180910390fd5b60008381526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590519091339186917f1018365553cce55d9cb02ef73e18cc9311894f3fe1d1eafd235ac2d26cd8ba5891a4505050565b60008481526001602052604081205485906001600160a01b03163314610ced576040516317737e4f60e31b815260040160405180910390fd5b6000868152602081905260408120610d0590876109a9565b6000888152602081905260409020909150610d229087878761197d565b604080518381526020810189905290810182905290935087907f3108849c053c77b8073a11256dffb5ffd5b55e93e105a355e1c9061db890d8719060600160405180910390a25050949350505050565b6000818152600260205260409020546001600160a01b03163314610da9576040516334c4245d60e01b815260040160405180910390fd5b60008181526001602090815260408083208054336001600160a01b031980831682179093556002909452828520805490921690915590516001600160a01b0390911692839185917f0ba83579a0e79193ef649b9f5a8759d35af086ba62a3e207b52e4a8ae30d49e391a45050565b8254600090815b83811015610f4857600080516020611f2d833981519152858583818110610e4757610e47611c26565b9050602002013510610e6c576040516361c0541760e11b815260040160405180910390fd5b848482818110610e7e57610e7e611c26565b90506020020135600003610ea5576040516314b48df160e11b815260040160405180910390fd5b610eda86868684818110610ebb57610ebb611c26565b9050602002013560009081526003919091016020526040902054151590565b15610ef8576040516312c50cad60e11b815260040160405180910390fd5b80610f04836001611c13565b610f0e9190611c13565b866003016000878785818110610f2657610f26611c26565b6020908102929092013583525081019190915260400160002055600101610e1e565b50606084848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050506001880154919250505b610f918584611c13565b610f9c826002611ea9565b1015610fb257610fab81611bfa565b9050610f87565b60018701819055826000610fc68783611c13565b9050600182811c90600090610fdb8185611db2565b610fe7911c6001611c13565b905060005b858110156112d85760006110008484611db2565b905060008167ffffffffffffffff81111561101d5761101d611eb5565b604051908082528060200260200182016040528015611046578160200160208202803683370190505b50905060005b82811015611203576000886110618884611c13565b61106c906002611ecb565b101561108f578f60020160008681526020019081526020016000205490506110cb565b8a8961109b8985611c13565b6110a6906002611ecb565b6110b09190611db2565b815181106110c0576110c0611c26565b602002602001015190505b6000886110d88985611c13565b6110e3906002611ecb565b6110ee906001611c13565b101561113b578b8a6111008a86611c13565b61110b906002611ecb565b611116906001611c13565b6111209190611db2565b8151811061113057611130611c26565b602002602001015190505b600081156111d357604080518082018252848152602081018490529051632b0aac7f60e11b815273__$75f79a42d9bcbdbb69ad79ebd80f556f39$__9163561558fe9161118b9190600401611ee2565b602060405180830381865af41580156111a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111cc9190611f13565b90506111d6565b50815b808585815181106111e9576111e9611c26565b60200260200101818152505083600101935050505061104c565b5085600116600103611254578860018a5161121e9190611db2565b8151811061122e5761122e611c26565b60200260200101518e60020160008581526020019081526020016000208190555061129f565b60018951111561129f578860028a5161126d9190611db2565b8151811061127d5761127d611c26565b60200260200101518e6002016000858152602001908152602001600020819055505b849650600185901c9450809850839550600180856112bd9190611db2565b6112c9911c6001611c13565b93508260010192505050610fec565b506112e38988611c13565b8b55855186906000906112f8576112f8611c26565b60200260200101518b6002016000878152602001908152602001600020819055508560008151811061132c5761132c611c26565b60200260200101519750505050505050509392505050565b6000600080516020611f2d8339815191528210611374576040516361c0541760e11b815260040160405180910390fd5b81600003611395576040516314b48df160e11b815260040160405180910390fd5b6000828152600384016020526040902054156113c4576040516312c50cad60e11b815260040160405180910390fd5b8254600180850154906113d8908390611c13565b6113e3826002611ea9565b10156113f5576113f281611bfa565b90505b600185018190558360005b828110156114d2578084901c6001166001036114b657604080518082018252600083815260028a0160209081529083902054825281018490529051632b0aac7f60e11b815273__$75f79a42d9bcbdbb69ad79ebd80f556f39$__9163561558fe9161146e9190600401611ee2565b602060405180830381865af415801561148b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114af9190611f13565b91506114ca565b600081815260028801602052604090208290555b600101611400565b506114dc83611bfa565b8087556000928352600287016020908152604080852084905596845260039097019096529390209390935550919050565b6000600080516020611f2d833981519152841061153d576040516361c0541760e11b815260040160405180910390fd5b600085815260038701602052604090205461156b57604051631c811d5b60e21b815260040160405180910390fd5b60008481526003870160205260409020541561159a576040516312c50cad60e11b815260040160405180910390fd5b60006115a687876109a9565b8754909150859087906000906115be90600190611db2565b60018b0154909150600090815b818110156118f4578087901c60011660010361177e57600080516020611f2d8339815191528a8a8581811061160257611602611c26565b9050602002013510611627576040516361c0541760e11b815260040160405180910390fd5b73__$75f79a42d9bcbdbb69ad79ebd80f556f39$__63561558fe60405180604001604052808d8d8881811061165e5761165e611c26565b905060200201358152602001898152506040518263ffffffff1660e01b815260040161168a9190611ee2565b602060405180830381865af41580156116a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116cb9190611f13565b955073__$75f79a42d9bcbdbb69ad79ebd80f556f39$__63561558fe60405180604001604052808d8d8881811061170457611704611c26565b905060200201358152602001888152506040518263ffffffff1660e01b81526004016117309190611ee2565b602060405180830381865af415801561174d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117719190611f13565b94508260010192506118ec565b86811c84821c146118d857600080516020611f2d8339815191528a8a858181106117aa576117aa611c26565b90506020020135106117cf576040516361c0541760e11b815260040160405180910390fd5b73__$75f79a42d9bcbdbb69ad79ebd80f556f39$__63561558fe60405180604001604052808981526020018d8d8881811061180c5761180c611c26565b905060200201358152506040518263ffffffff1660e01b81526004016118329190611ee2565b602060405180830381865af415801561184f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118739190611f13565b955073__$75f79a42d9bcbdbb69ad79ebd80f556f39$__63561558fe60405180604001604052808881526020018d8d888181106118b2576118b2611c26565b905060200201358152506040518263ffffffff1660e01b81526004016117309190611ee2565b600083815260028e01602052604090208690555b6001016115cb565b5060018c0154600090815260028d016020526040902054841461192a57604051631fd4986360e11b815260040160405180910390fd5b600081815260028d0160205260409020859055891561195c5760008b815260038d016020526040808220548c83529120555b505050600088815260038a0160205260408120555091505095945050505050565b600061198d85856000868661150d565b95945050505050565b60008083601f8401126119a857600080fd5b50813567ffffffffffffffff8111156119c057600080fd5b6020830191508360208260051b85010111156119db57600080fd5b9250929050565b6000806000604084860312156119f757600080fd5b83359250602084013567ffffffffffffffff811115611a1557600080fd5b611a2186828701611996565b9497909650939450505050565b60008060408385031215611a4157600080fd5b50508035926020909101359150565b80356001600160a01b0381168114611a6757600080fd5b919050565b60008060408385031215611a7f57600080fd5b611a8883611a50565b946020939093013593505050565b600080600080600060808688031215611aae57600080fd5b853594506020860135935060408601359250606086013567ffffffffffffffff811115611ada57600080fd5b611ae688828901611996565b969995985093965092949392505050565b6000808284036101c0811215611b0c57600080fd5b833592506101a0601f1982011215611b2357600080fd5b506020830190509250929050565b60008060408385031215611b4457600080fd5b82359150611b5460208401611a50565b90509250929050565b600060208284031215611b6f57600080fd5b61037e82611a50565b600060208284031215611b8a57600080fd5b5035919050565b60008060008060608587031215611ba757600080fd5b8435935060208501359250604085013567ffffffffffffffff811115611bcc57600080fd5b611bd887828801611996565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b600060018201611c0c57611c0c611be4565b5060010190565b8082018082111561038157610381611be4565b634e487b7160e01b600052603260045260246000fd5b8060005b6002811015611c5f578151845260209384019390910190600101611c40565b50505050565b8060005b6004811015611c5f578151845260209384019390910190600101611c69565b6101a08101611c978288611c3c565b6040808301876000805b6002808210611cb05750611cea565b835185845b83811015611cd3578251825260209283019290910190600101611cb5565b505050938501935060209290920191600101611ca1565b5050505050611cfc60c0830186611c3c565b611d0a610100830185611c65565b826101808301529695505050505050565b600060208284031215611d2d57600080fd5b81518015158114611d3d57600080fd5b9392505050565b8481526020810184905260408101839052610160810161010083606084013795945050505050565b848152606060208201819052810183905260006001600160fb1b03841115611d9357600080fd5b8360051b80866080850137604083019390935250016080019392505050565b8181038181111561038157610381611be4565b600181815b80851115611e00578160001904821115611de657611de6611be4565b80851615611df357918102915b93841c9390800290611dca565b509250929050565b600082611e1757506001610381565b81611e2457506000610381565b8160018114611e3a5760028114611e4457611e60565b6001915050610381565b60ff841115611e5557611e55611be4565b50506001821b610381565b5060208310610133831016604e8410600b8410161715611e83575081810a610381565b611e8d8383611dc5565b8060001904821115611ea157611ea1611be4565b029392505050565b600061037e8383611e08565b634e487b7160e01b600052604160045260246000fd5b808202811582820484141761038157610381611be4565b60408101818360005b6002811015611f0a578151835260209283019290910190600101611eeb565b50505092915050565b600060208284031215611f2557600080fd5b505191905056fe30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a2646970667358221220164ddea4e67fb9956ad9d73065c0b85ecf9b8062f67bcc5be446364b9475660664736f6c63430008170033";
860
+ var linkReferences = {
861
+ "poseidon-solidity/PoseidonT3.sol": {
862
+ PoseidonT3: [
863
+ {
864
+ length: 20,
865
+ start: 4599
866
+ },
867
+ {
868
+ length: 20,
869
+ start: 5338
870
+ },
871
+ {
872
+ length: 20,
873
+ start: 5820
874
+ },
875
+ {
876
+ length: 20,
877
+ start: 5986
878
+ },
879
+ {
880
+ length: 20,
881
+ start: 6244
882
+ },
883
+ {
884
+ length: 20,
885
+ start: 6410
886
+ }
887
+ ]
888
+ }
889
+ };
890
+ var deployedLinkReferences = {
891
+ "poseidon-solidity/PoseidonT3.sol": {
892
+ PoseidonT3: [
893
+ {
894
+ length: 20,
895
+ start: 4452
896
+ },
897
+ {
898
+ length: 20,
899
+ start: 5191
900
+ },
901
+ {
902
+ length: 20,
903
+ start: 5673
904
+ },
905
+ {
906
+ length: 20,
907
+ start: 5839
908
+ },
909
+ {
910
+ length: 20,
911
+ start: 6097
912
+ },
913
+ {
914
+ length: 20,
915
+ start: 6263
916
+ }
917
+ ]
918
+ }
919
+ };
920
+ var _interface = {
921
+ _format: _format,
922
+ contractName: contractName,
923
+ sourceName: sourceName,
924
+ abi: abi,
925
+ bytecode: bytecode,
926
+ deployedBytecode: deployedBytecode,
927
+ linkReferences: linkReferences,
928
+ deployedLinkReferences: deployedLinkReferences
929
+ };
930
+
931
+ exports._format = _format;
932
+ exports.abi = abi;
933
+ exports.bytecode = bytecode;
934
+ exports.contractName = contractName;
935
+ exports.default = _interface;
936
+ exports.deployedBytecode = deployedBytecode;
937
+ exports.deployedLinkReferences = deployedLinkReferences;
938
+ exports.linkReferences = linkReferences;
939
+ exports.sourceName = sourceName;