BCD

Tezos Contract Explorer
Search Networks Deploy
  • Home
  • /
  • Mainnet
  • /
  • Etherlink Sequencer Committee Governance
operations (1)Storage Code Interact Tokens Metadata Fork Views Statistics Details
Latest
​x
851
1584
 
1
{ parameter (or (address %trigger_committee_upgrade)
2
                (or (string %vote)
3
                    (or
4
                      (pair %upvote_proposal (string %sequencer_pk)
5
                                             (bytes %pool_address))
6
                      (pair %new_proposal (string %sequencer_pk) (bytes %pool_address))))) ;
7
  storage (pair
8
            (pair %config (nat %started_at_level)
9
                          (pair (nat %period_length)
10
                                (pair (nat %adoption_period_sec)
11
                                      (pair (nat %upvoting_limit)
12
                                            (pair (nat %scale)
13
                                                  (pair (nat %proposal_quorum)
14
                                                        (pair (nat %promotion_quorum)
15
                                                              (pair
16
                                                                (nat %promotion_supermajority)
17
                                                                (address %delegation_contract)))))))))
18
            (pair
19
              (option %voting_context (pair (nat %period_index)
20
                                           (or %period
21
                                             (pair %proposal
22
                                               (big_map %upvoters_upvotes_count key_hash
23
                                                                                nat)
24
                                               (pair
25
                                                 (big_map %upvoters_proposals
26
                                                   (pair key_hash
27
                                                         (pair (string %sequencer_pk)
28
                                                               (bytes %pool_address)))
29
                                                   unit)
30
                                                 (pair
31
                                                   (big_map %proposals
32
                                                     (pair (string %sequencer_pk)
33
                                                           (bytes %pool_address))
34
                                                     (pair (set %proposers key_hash)
35
                                                           (nat %upvotes_voting_power)))
36
                                                   (pair
37
                                                     (option %max_upvotes_voting_power nat)
38
                                                     (pair
39
                                                       (option %winner_candidate (pair
40
                                                                                  (string %sequencer_pk)
41
                                                                                  (bytes %pool_address)))
42
                                                       (nat %total_voting_power))))))
43
                                             (pair %promotion
44
                                               (big_map %voters key_hash string)
45
                                               (pair (nat %yea_voting_power)
46
                                                     (pair (nat %nay_voting_power)
47
                                                           (pair
48
                                                             (nat %pass_voting_power)
49
                                                             (pair
50
                                                               (nat %total_voting_power)
51
                                                               (pair %winner_candidate
52
                                                                 (string %sequencer_pk)
53
                                                                 (bytes %pool_address))))))))))
54
              (pair
55
                (option %last_winner (pair
56
                                      (pair %payload (string %sequencer_pk)
57
                                                     (bytes %pool_address))
58
                                      (big_map %trigger_history address unit)))
59
                (big_map %metadata string bytes)))) ;
60
  code { PUSH string "NOT_PROPOSAL_PERIOD" ;
61
         PUSH string "NOT_PROMOTION_PERIOD" ;
62
         PUSH string "UPVOTING_LIMIT_EXCEEDED" ;
63
         PUSH string "PROPOSAL_ALREADY_UPVOTED" ;
64
         PUSH string "PROMOTION_ALREADY_VOTED" ;
65
         LAMBDA
66
           (pair nat nat)
67
           bytes
68
           { UNPAIR ;
69
             PUSH nat 56 ;
70
             DUP 2 ;
71
             COMPARE ;
72
             LT ;
73
             IF
74
               { ADD ; BYTES }
75
               { BYTES ;
76
                 DUP ;
77
                 SIZE ;
78
                 PUSH nat 9 ;
79
                 DUP 2 ;
80
                 COMPARE ;
81
                 LT ;
82
                 IF {} { PUSH string "INPUT_TOO_LONG_FOR_RLP" ; FAILWITH } ;
83
                 SWAP ;
84
                 PUSH nat 55 ;
85
                 DIG 3 ;
86
                 DIG 3 ;
87
                 ADD ;
88
                 ADD ;
89
                 BYTES ;
90
                 CONCAT } } ;
91
         LAMBDA
92
           unit
93
           unit
94
           { DROP ;
95
             PUSH string "TEZ_IN_TRANSACTION_DISALLOWED" ;
96
             PUSH mutez 0 ;
97
             AMOUNT ;
98
             COMPARE ;
99
             EQ ;
100
             IF { DROP ; UNIT } { FAILWITH } } ;
101
         LAMBDA
102
           nat
103
           unit
104
           { PUSH nat 0 ;
105
             SWAP ;
106
             COMPARE ;
107
             GT ;
108
             IF { UNIT } { PUSH string "NO_VOTING_POWER" ; FAILWITH } } ;
109
         LAMBDA
110
           (pair nat
111
                 (pair nat
112
                       (pair nat
113
                             (pair nat
114
                                   (pair nat (pair nat (pair nat (pair nat address))))))))
115
           nat
116
           { DUP ;
117
             CAR ;
118
             LEVEL ;
119
             SUB ;
120
             ISNAT ;
121
             IF_NONE
122
               { DROP ; PUSH string "CURRENT_LEVEL_LESS_THAN_START_LEVEL" ; FAILWITH }
123
               { SWAP ; GET 3 ; SWAP ; EDIV ; IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ; CAR } } ;
124
         LAMBDA
125
           address
126
           (list key_hash)
127
           { SELF_ADDRESS ;
128
             SOME ;
129
             SENDER ;
130
             PAIR ;
131
             VIEW "list_voters" (list key_hash) ;
132
             IF_NONE
133
               { PUSH string "ASSERTION_FAILURE_DELEGATION_CONTRACT_MISSING_OR_INCONSISTENT" ;
134
                 FAILWITH }
135
               { SENDER ;
136
                 DUP ;
137
                 PACK ;
138
                 PUSH bytes 0x00 ;
139
                 DUP 2 ;
140
                 PUSH nat 1 ;
141
                 PUSH nat 6 ;
142
                 SLICE ;
143
                 IF_NONE { PUSH string "SLICE" ; FAILWITH } {} ;
144
                 COMPARE ;
145
                 EQ ;
146
                 IF {} { PUSH string "NOT_IMPLICIT_ADDRESS" ; FAILWITH } ;
147
                 NIL bytes ;
148
                 DUP 2 ;
149
                 PUSH nat 21 ;
150
                 PUSH nat 7 ;
151
                 SLICE ;
152
                 IF_NONE { PUSH string "SLICE" ; FAILWITH } {} ;
153
                 CONS ;
154
                 PUSH bytes 0x00000015 ;
155
                 CONS ;
156
                 SWAP ;
157
                 PUSH nat 2 ;
158
                 PUSH nat 0 ;
159
                 SLICE ;
160
                 IF_NONE { PUSH string "SLICE" ; FAILWITH } {} ;
161
                 CONS ;
162
                 CONCAT ;
163
                 UNPACK key_hash ;
164
                 PUSH string "FAILED_TO_CAST_ADDRESS_TO_KEY_HASH" ;
165
                 SWAP ;
166
                 IF_NONE { FAILWITH } { SWAP ; DROP } ;
167
                 PUSH string "KEY_HASH_NOT_EQUAL_TO_SOURCE_ADDRESS" ;
168
                 DIG 2 ;
169
                 DUP 3 ;
170
                 IMPLICIT_ACCOUNT ;
171
                 ADDRESS ;
172
                 COMPARE ;
173
                 EQ ;
174
                 IF { DROP } { FAILWITH } ;
175
                 CONS } } ;
176
         DIG 10 ;
177
         UNPAIR ;
178
         IF_LEFT
179
           { DIG 2 ;
180
             DIG 4 ;
181
             DIG 7 ;
182
             DIG 8 ;
183
             DIG 9 ;
184
             DIG 10 ;
185
             DIG 11 ;
186
             DROP 7 ;
187
             UNIT ;
188
             DIG 4 ;
189
             SWAP ;
190
             EXEC ;
191
             DROP ;
192
             DUP 2 ;
193
             CAR ;
194
             DIG 3 ;
195
             SWAP ;
196
             EXEC ;
197
             DUP 3 ;
198
             GET 3 ;
199
             IF_NONE
200
               { NONE (pair nat (pair (or unit unit) (option (pair string bytes)))) ;
201
                 TOTAL_VOTING_POWER ;
202
                 NONE (pair string bytes) ;
203
                 NONE nat ;
204
                 EMPTY_BIG_MAP (pair string bytes) (pair (set key_hash) nat) ;
205
                 EMPTY_BIG_MAP (pair key_hash (pair string bytes)) unit ;
206
                 EMPTY_BIG_MAP key_hash nat ;
207
                 PAIR 6 ;
208
                 LEFT (pair (big_map key_hash string)
209
                            (pair nat
210
                                  (pair nat (pair nat (pair nat (pair string bytes)))))) ;
211
                 DIG 2 ;
212
                 PAIR }
213
               { DUP ;
214
                 CAR ;
215
                 DUP 3 ;
216
                 COMPARE ;
217
                 EQ ;
218
                 IF
219
                   { SWAP ;
220
                     DROP ;
221
                     NONE (pair nat (pair (or unit unit) (option (pair string bytes)))) ;
222
                     SWAP }
223
                   { DUP 4 ;
224
                     CAR ;
225
                     DUP 2 ;
226
                     CDR ;
227
                     IF_LEFT
228
                       { DUP 2 ;
229
                         GET 11 ;
230
                         DUP 2 ;
231
                         GET 10 ;
232
                         MUL ;
233
                         DIG 2 ;
234
                         GET 9 ;
235
                         DUP 3 ;
236
                         GET 7 ;
237
                         IF_NONE { PUSH nat 0 } {} ;
238
                         MUL ;
239
                         COMPARE ;
240
                         GE ;
241
                         IF { DUP ; GET 9 } { NONE (pair string bytes) } ;
242
                         IF_NONE
243
                           { GET 7 ;
244
                             IF_NONE { PUSH bool False } { DROP ; PUSH bool True } ;
245
                             IF
246
                               { NONE (pair string bytes) ;
247
                                 UNIT ;
248
                                 LEFT unit ;
249
                                 DIG 2 ;
250
                                 CAR ;
251
                                 DUG 2 ;
252
                                 PUSH nat 1 ;
253
                                 DIG 3 ;
254
                                 ADD ;
255
                                 PAIR 3 ;
256
                                 SOME }
257
                               { DROP ;
258
                                 NONE (pair nat
259
                                            (pair (or unit unit)
260
                                                  (option (pair string bytes)))) } ;
261
                             TOTAL_VOTING_POWER ;
262
                             NONE (pair string bytes) ;
263
                             NONE nat ;
264
                             EMPTY_BIG_MAP (pair string bytes)
265
                                            (pair (set key_hash) nat) ;
266
                             EMPTY_BIG_MAP (pair key_hash (pair string bytes)) unit ;
267
                             EMPTY_BIG_MAP key_hash nat ;
268
                             PAIR 6 ;
269
                             LEFT (pair (big_map key_hash string)
270
                                        (pair nat
271
                                              (pair nat
272
                                                    (pair nat
273
                                                          (pair nat (pair string bytes)))))) }
274
                           { SWAP ;
275
                             DROP ;
276
                             PUSH nat 1 ;
277
                             DIG 2 ;
278
                             CAR ;
279
                             ADD ;
280
                             DUP ;
281
                             DUP 4 ;
282
                             COMPARE ;
283
                             EQ ;
284
                             IF
285
                               { DROP ;
286
                                 NONE (pair nat
287
                                            (pair (or unit unit)
288
                                                  (option (pair string bytes)))) ;
289
                                 SWAP ;
290
                                 TOTAL_VOTING_POWER ;
291
                                 PUSH nat 0 ;
292
                                 PUSH nat 0 ;
293
                                 PUSH nat 0 ;
294
                                 EMPTY_BIG_MAP key_hash string ;
295
                                 PAIR 6 ;
296
                                 RIGHT (pair (big_map key_hash nat)
297
                                             (pair
298
                                               (big_map
299
                                                 (pair key_hash (pair string bytes))
300
                                                 unit)
301
                                               (pair
302
                                                 (big_map (pair string bytes)
303
                                                          (pair (set key_hash) nat))
304
                                                 (pair (option nat)
305
                                                       (pair
306
                                                         (option (pair string bytes))
307
                                                         nat))))) }
308
                               { SWAP ;
309
                                 DROP ;
310
                                 NONE (pair string bytes) ;
311
                                 UNIT ;
312
                                 RIGHT unit ;
313
                                 PUSH nat 1 ;
314
                                 DIG 3 ;
315
                                 ADD ;
316
                                 PAIR 3 ;
317
                                 SOME ;
318
                                 TOTAL_VOTING_POWER ;
319
                                 NONE (pair string bytes) ;
320
                                 NONE nat ;
321
                                 EMPTY_BIG_MAP (pair string bytes)
322
                                                (pair (set key_hash) nat) ;
323
                                 EMPTY_BIG_MAP (pair key_hash (pair string bytes)) unit ;
324
                                 EMPTY_BIG_MAP key_hash nat ;
325
                                 PAIR 6 ;
326
                                 LEFT (pair (big_map key_hash string)
327
                                            (pair nat
328
                                                  (pair nat
329
                                                        (pair nat
330
                                                              (pair nat
331
                                                                    (pair string bytes)))))) } } }
332
                       { UNPAIR 6 ;
333
                         DROP ;
334
                         DIG 3 ;
335
                         DUP 6 ;
336
                         GET 13 ;
337
                         MUL ;
338
                         DUP 6 ;
339
                         GET 9 ;
340
                         DIG 4 ;
341
                         DUP 5 ;
342
                         DUP 5 ;
343
                         ADD ;
344
                         ADD ;
345
                         MUL ;
346
                         COMPARE ;
347
                         GE ;
348
                         DIG 2 ;
349
                         DUP 3 ;
350
                         ADD ;
351
                         DUP ;
352
                         DUP 6 ;
353
                         GET 15 ;
354
                         MUL ;
355
                         DIG 5 ;
356
                         GET 9 ;
357
                         DIG 4 ;
358
                         MUL ;
359
                         COMPARE ;
360
                         GE ;
361
                         PUSH nat 0 ;
362
                         DIG 2 ;
363
                         COMPARE ;
364
                         GT ;
365
                         AND ;
366
                         AND ;
367
                         IF { SOME } { DROP ; NONE (pair string bytes) } ;
368
                         UNIT ;
369
                         RIGHT unit ;
370
                         DIG 2 ;
371
                         CAR ;
372
                         DUG 2 ;
373
                         PUSH nat 1 ;
374
                         DIG 3 ;
375
                         ADD ;
376
                         PAIR 3 ;
377
                         SOME ;
378
                         TOTAL_VOTING_POWER ;
379
                         NONE (pair string bytes) ;
380
                         NONE nat ;
381
                         EMPTY_BIG_MAP (pair string bytes) (pair (set key_hash) nat) ;
382
                         EMPTY_BIG_MAP (pair key_hash (pair string bytes)) unit ;
383
                         EMPTY_BIG_MAP key_hash nat ;
384
                         PAIR 6 ;
385
                         LEFT (pair (big_map key_hash string)
386
                                    (pair nat
387
                                          (pair nat
388
                                                (pair nat (pair nat (pair string bytes)))))) } ;
389
                     DIG 2 ;
390
                     PAIR } } ;
391
             DUP 2 ;
392
             DIG 2 ;
393
             IF_NONE
394
               { DUP 4 ; GET 5 }
395
               { GET 4 ;
396
                 IF_NONE
397
                   { DUP 4 ; GET 5 }
398
                   { EMPTY_BIG_MAP address unit ; SWAP ; PAIR ; SOME } } ;
399
             DIG 2 ;
400
             SWAP ;
401
             IF_NONE { PUSH string "LAST_WINNER_NOT_FOUND" ; FAILWITH } {} ;
402
             DUP ;
403
             CDR ;
404
             DUP 5 ;
405
             MEM ;
406
             NOT ;
407
             IF {} { PUSH string "UPGRADE_FOR_ADDRESS_ALREADY_TRIGGERED" ; FAILWITH } ;
408
             DUP 4 ;
409
             CONTRACT (or
410
                        (or (pair %d bytes (ticket (pair nat (option bytes))))
411
                            (bytes %a))
412
                        (bytes %u)) ;
413
             IF_NONE { PUSH string "ROLLUP_ENTRYPOINT_NOT_FOUND" ; FAILWITH } {} ;
414
             DUP 2 ;
415
             CAR ;
416
             DUP 7 ;
417
             CAR ;
418
             GET 5 ;
419
             INT ;
420
             NOW ;
421
             ADD ;
422
             DUP 2 ;
423
             CAR ;
424
             PACK ;
425
             DUP ;
426
             PUSH nat 4 ;
427
             PUSH nat 2 ;
428
             SLICE ;
429
             IF_NONE { PUSH string "SLICE" ; FAILWITH } {} ;
430
             NAT ;
431
             PUSH timestamp 0 ;
432
             DIG 3 ;
433
             SUB ;
434
             ISNAT ;
435
             PUSH string "NEGATIVE_TIMESTAMP" ;
436
             SWAP ;
437
             IF_NONE { FAILWITH } { SWAP ; DROP } ;
438
             BYTES ;
439
             PUSH bytes 0x ;
440
             PUSH int 1 ;
441
             PUSH int 1 ;
442
             DUP 4 ;
443
             SIZE ;
444
             SUB ;
445
             PUSH int 0 ;
446
             DUP 2 ;
447
             DUP 2 ;
448
             COMPARE ;
449
             LE ;
450
             LOOP { DUP ;
451
                    DUG 3 ;
452
                    DIP 3
453
                         { ISNAT ;
454
                           PUSH string "INDEX_NOT_NAT" ;
455
                           SWAP ;
456
                           IF_NONE { FAILWITH } { SWAP ; DROP } ;
457
                           SWAP ;
458
                           DUP 3 ;
459
                           PUSH nat 1 ;
460
                           DIG 3 ;
461
                           SLICE ;
462
                           IF_NONE { PUSH string "SLICE" ; FAILWITH } {} ;
463
                           CONCAT } ;
464
                    DUP 3 ;
465
                    ADD ;
466
                    DUP 2 ;
467
                    DUP 2 ;
468
                    COMPARE ;
469
                    LE } ;
470
             DROP 3 ;
471
             SWAP ;
472
             DROP ;
473
             DUP ;
474
             SIZE ;
475
             INT ;
476
             PUSH int 1 ;
477
             PUSH int 1 ;
478
             PUSH nat 8 ;
479
             SUB ;
480
             DIG 2 ;
481
             DUP 2 ;
482
             DUP 2 ;
483
             COMPARE ;
484
             LE ;
485
             LOOP { DUP ;
486
                    DUG 3 ;
487
                    DIP 3 { DROP ; PUSH bytes 0x00 ; SWAP ; CONCAT } ;
488
                    DUP 3 ;
489
                    ADD ;
490
                    DUP 2 ;
491
                    DUP 2 ;
492
                    COMPARE ;
493
                    LE } ;
494
             DROP 3 ;
495
             NIL bytes ;
496
             SWAP ;
497
             CONS ;
498
             DIG 3 ;
499
             CDR ;
500
             CONS ;
501
             DUG 2 ;
502
             PUSH nat 6 ;
503
             SLICE ;
504
             IF_NONE { PUSH string "SLICE" ; FAILWITH } {} ;
505
             CONS ;
506
             MAP { DUP ;
507
                   SIZE ;
508
                   PUSH bytes 0x80 ;
509
                   DUP 3 ;
510
                   COMPARE ;
511
                   LT ;
512
                   PUSH nat 1 ;
513
                   DUP 3 ;
514
                   COMPARE ;
515
                   EQ ;
516
                   AND ;
517
                   IF
518
                     { DROP ; PUSH bytes 0x }
519
                     { PUSH nat 128 ; SWAP ; PAIR ; DUP 9 ; SWAP ; EXEC } ;
520
                   CONCAT } ;
521
             CONCAT ;
522
             PUSH nat 192 ;
523
             DUP 2 ;
524
             SIZE ;
525
             PAIR ;
526
             DIG 8 ;
527
             SWAP ;
528
             EXEC ;
529
             CONCAT ;
530
             RIGHT (or (pair bytes (ticket (pair nat (option bytes)))) bytes) ;
531
             SWAP ;
532
             PUSH mutez 0 ;
533
             DIG 2 ;
534
             TRANSFER_TOKENS ;
535
             DIG 3 ;
536
             IF_NONE
537
               { NIL operation }
538
               { NIL operation ;
539
                 SWAP ;
540
                 EMIT %voting_finished (pair (nat %finished_at_period_index)
541
                                             (pair
542
                                               (or %finished_at_period_type
543
                                                 (unit %proposal)
544
                                                 (unit %promotion))
545
                                               (option %winner_proposal_payload (pair
546
                                                                                 (string %sequencer_pk)
547
                                                                                 (bytes %pool_address))))) ;
548
                 CONS } ;
549
             DIG 5 ;
550
             DIG 4 ;
551
             SOME ;
552
             UPDATE 3 ;
553
             DUP 4 ;
554
             DIG 4 ;
555
             CDR ;
556
             UNIT ;
557
             SOME ;
558
             DIG 6 ;
559
             UPDATE ;
560
             UPDATE 2 ;
561
             SOME ;
562
             UPDATE 5 ;
563
             SWAP ;
564
             DIG 2 ;
565
             CONS }
566
           { DIG 6 ;
567
             DROP ;
568
             IF_LEFT
569
               { DIG 7 ;
570
                 DIG 8 ;
571
                 DIG 10 ;
572
                 DROP 3 ;
573
                 UNIT ;
574
                 DIG 6 ;
575
                 SWAP ;
576
                 EXEC ;
577
                 DROP ;
578
                 DUP 2 ;
579
                 CAR ;
580
                 DIG 4 ;
581
                 SWAP ;
582
                 EXEC ;
583
                 DUP 3 ;
584
                 GET 3 ;
585
                 IF_NONE
586
                   { NONE (pair nat (pair (or unit unit) (option (pair string bytes)))) ;
587
                     TOTAL_VOTING_POWER ;
588
                     NONE (pair string bytes) ;
589
                     NONE nat ;
590
                     EMPTY_BIG_MAP (pair string bytes) (pair (set key_hash) nat) ;
591
                     EMPTY_BIG_MAP (pair key_hash (pair string bytes)) unit ;
592
                     EMPTY_BIG_MAP key_hash nat ;
593
                     PAIR 6 ;
594
                     LEFT (pair (big_map key_hash string)
595
                                (pair nat
596
                                      (pair nat
597
                                            (pair nat (pair nat (pair string bytes)))))) ;
598
                     DIG 2 ;
599
                     PAIR }
600
                   { DUP ;
601
                     CAR ;
602
                     DUP 3 ;
603
                     COMPARE ;
604
                     EQ ;
605
                     IF
606
                       { SWAP ;
607
                         DROP ;
608
                         NONE (pair nat
609
                                    (pair (or unit unit) (option (pair string bytes)))) ;
610
                         SWAP }
611
                       { DUP 4 ;
612
                         CAR ;
613
                         DUP 2 ;
614
                         CDR ;
615
                         IF_LEFT
616
                           { DUP 2 ;
617
                             GET 11 ;
618
                             DUP 2 ;
619
                             GET 10 ;
620
                             MUL ;
621
                             DIG 2 ;
622
                             GET 9 ;
623
                             DUP 3 ;
624
                             GET 7 ;
625
                             IF_NONE { PUSH nat 0 } {} ;
626
                             MUL ;
627
                             COMPARE ;
628
                             GE ;
629
                             IF { DUP ; GET 9 } { NONE (pair string bytes) } ;
630
                             IF_NONE
631
                               { GET 7 ;
632
                                 IF_NONE { PUSH bool False } { DROP ; PUSH bool True } ;
633
                                 IF
634
                                   { NONE (pair string bytes) ;
635
                                     UNIT ;
636
                                     LEFT unit ;
637
                                     DIG 2 ;
638
                                     CAR ;
639
                                     DUG 2 ;
640
                                     PUSH nat 1 ;
641
                                     DIG 3 ;
642
                                     ADD ;
643
                                     PAIR 3 ;
644
                                     SOME }
645
                                   { DROP ;
646
                                     NONE (pair nat
647
                                                (pair (or unit unit)
648
                                                      (option (pair string bytes)))) } ;
649
                                 TOTAL_VOTING_POWER ;
650
                                 NONE (pair string bytes) ;
651
                                 NONE nat ;
652
                                 EMPTY_BIG_MAP (pair string bytes)
653
                                                (pair (set key_hash) nat) ;
654
                                 EMPTY_BIG_MAP (pair key_hash (pair string bytes)) unit ;
655
                                 EMPTY_BIG_MAP key_hash nat ;
656
                                 PAIR 6 ;
657
                                 LEFT (pair (big_map key_hash string)
658
                                            (pair nat
659
                                                  (pair nat
660
                                                        (pair nat
661
                                                              (pair nat
662
                                                                    (pair string bytes)))))) }
663
                               { SWAP ;
664
                                 DROP ;
665
                                 PUSH nat 1 ;
666
                                 DIG 2 ;
667
                                 CAR ;
668
                                 ADD ;
669
                                 DUP ;
670
                                 DUP 4 ;
671
                                 COMPARE ;
672
                                 EQ ;
673
                                 IF
674
                                   { DROP ;
675
                                     NONE (pair nat
676
                                                (pair (or unit unit)
677
                                                      (option (pair string bytes)))) ;
678
                                     SWAP ;
679
                                     TOTAL_VOTING_POWER ;
680
                                     PUSH nat 0 ;
681
                                     PUSH nat 0 ;
682
                                     PUSH nat 0 ;
683
                                     EMPTY_BIG_MAP key_hash string ;
684
                                     PAIR 6 ;
685
                                     RIGHT (pair (big_map key_hash nat)
686
                                                 (pair
687
                                                   (big_map
688
                                                     (pair key_hash (pair string bytes))
689
                                                     unit)
690
                                                   (pair
691
                                                     (big_map (pair string bytes)
692
                                                              (pair (set key_hash) nat))
693
                                                     (pair (option nat)
694
                                                           (pair
695
                                                             (option (pair string bytes))
696
                                                             nat))))) }
697
                                   { SWAP ;
698
                                     DROP ;
699
                                     NONE (pair string bytes) ;
700
                                     UNIT ;
701
                                     RIGHT unit ;
702
                                     PUSH nat 1 ;
703
                                     DIG 3 ;
704
                                     ADD ;
705
                                     PAIR 3 ;
706
                                     SOME ;
707
                                     TOTAL_VOTING_POWER ;
708
                                     NONE (pair string bytes) ;
709
                                     NONE nat ;
710
                                     EMPTY_BIG_MAP (pair string bytes)
711
                                                    (pair (set key_hash) nat) ;
712
                                     EMPTY_BIG_MAP (pair key_hash (pair string bytes))
713
                                                    unit ;
714
                                     EMPTY_BIG_MAP key_hash nat ;
715
                                     PAIR 6 ;
716
                                     LEFT (pair (big_map key_hash string)
717
                                                (pair nat
718
                                                      (pair nat
719
                                                            (pair nat
720
                                                                  (pair nat
721
                                                                        (pair string
722
                                                                              bytes)))))) } } }
723
                           { UNPAIR 6 ;
724
                             DROP ;
725
                             DIG 3 ;
726
                             DUP 6 ;
727
                             GET 13 ;
728
                             MUL ;
729
                             DUP 6 ;
730
                             GET 9 ;
731
                             DIG 4 ;
732
                             DUP 5 ;
733
                             DUP 5 ;
734
                             ADD ;
735
                             ADD ;
736
                             MUL ;
737
                             COMPARE ;
738
                             GE ;
739
                             DIG 2 ;
740
                             DUP 3 ;
741
                             ADD ;
742
                             DUP ;
743
                             DUP 6 ;
744
                             GET 15 ;
745
                             MUL ;
746
                             DIG 5 ;
747
                             GET 9 ;
748
                             DIG 4 ;
749
                             MUL ;
750
                             COMPARE ;
751
                             GE ;
752
                             PUSH nat 0 ;
753
                             DIG 2 ;
754
                             COMPARE ;
755
                             GT ;
756
                             AND ;
757
                             AND ;
758
                             IF { SOME } { DROP ; NONE (pair string bytes) } ;
759
                             UNIT ;
760
                             RIGHT unit ;
761
                             DIG 2 ;
762
                             CAR ;
763
                             DUG 2 ;
764
                             PUSH nat 1 ;
765
                             DIG 3 ;
766
                             ADD ;
767
                             PAIR 3 ;
768
                             SOME ;
769
                             TOTAL_VOTING_POWER ;
770
                             NONE (pair string bytes) ;
771
                             NONE nat ;
772
                             EMPTY_BIG_MAP (pair string bytes)
773
                                            (pair (set key_hash) nat) ;
774
                             EMPTY_BIG_MAP (pair key_hash (pair string bytes)) unit ;
775
                             EMPTY_BIG_MAP key_hash nat ;
776
                             PAIR 6 ;
777
                             LEFT (pair (big_map key_hash string)
778
                                        (pair nat
779
                                              (pair nat
780
                                                    (pair nat
781
                                                          (pair nat (pair string bytes)))))) } ;
782
                         DIG 2 ;
783
                         PAIR } } ;
784
                 SWAP ;
785
                 DROP ;
786
                 DUP 3 ;
787
                 CAR ;
788
                 GET 16 ;
789
                 DIG 4 ;
790
                 SWAP ;
791
                 EXEC ;
792
                 DUP 2 ;
793
                 CDR ;
794
                 IF_LEFT { DROP ; DUP 7 ; FAILWITH } {} ;
795
                 PUSH nat 0 ;
796
                 EMPTY_MAP key_hash nat ;
797
                 PAIR ;
798
                 DIG 2 ;
799
                 ITER { SWAP ;
800
                        UNPAIR ;
801
                        DUP 3 ;
802
                        VOTING_POWER ;
803
                        DUP 5 ;
804
                        CAR ;
805
                        DUP 5 ;
806
                        MEM ;
807
                        NOT ;
808
                        NOT ;
809
                        PUSH nat 0 ;
810
                        DUP 3 ;
811
                        COMPARE ;
812
                        EQ ;
813
                        OR ;
814
                        IF
815
                          { DIG 3 ; DROP ; DIG 2 ; ADD ; SWAP }
816
                          { DIG 2 ; DUP 2 ; ADD ; DUG 2 ; SOME ; DIG 3 ; UPDATE } ;
817
                        PAIR } ;
818
                 SWAP ;
819
                 DROP ;
820
                 UNPAIR ;
821
                 SWAP ;
822
                 DIG 5 ;
823
                 SWAP ;
824
                 EXEC ;
825
                 DROP ;
826
                 PUSH nat 0 ;
827
                 DUP 2 ;
828
                 SIZE ;
829
                 COMPARE ;
830
                 GT ;
831
                 IF {} { DUP 5 ; FAILWITH } ;
832
                 DUP 2 ;
833
                 SWAP ;
834
                 ITER { UNPAIR ;
835
                        DIG 2 ;
836
                        CDR ;
837
                        IF_LEFT { DROP ; DUP 7 ; FAILWITH } {} ;
838
                        DUP ;
839
                        CAR ;
840
                        DUP 3 ;
841
                        MEM ;
842
                        NOT ;
843
                        IF {} { DUP 7 ; FAILWITH } ;
844
                        PUSH string "yea" ;
845
                        DUP 6 ;
846
                        COMPARE ;
847
                        EQ ;
848
                        IF
849
                          { DUP ; DIG 3 ; DUP 3 ; GET 3 ; ADD ; UPDATE 3 }
850
                          { PUSH string "nay" ;
851
                            DUP 6 ;
852
                            COMPARE ;
853
                            EQ ;
854
                            IF
855
                              { DUP ; DIG 3 ; DUP 3 ; GET 5 ; ADD ; UPDATE 5 }
856
                              { PUSH string "pass" ;
857
                                DUP 6 ;
858
                                COMPARE ;
859
                                EQ ;
860
                                IF
861
                                  { DUP ; DIG 3 ; DUP 3 ; GET 7 ; ADD ; UPDATE 7 }
862
                                  { DIG 2 ;
863
                                    DROP ;
864
                                    PUSH string "INCORRECT_VOTE_VALUE" ;
865
                                    FAILWITH } } } ;
866
                        SWAP ;
867
                        CAR ;
868
                        DUP 5 ;
869
                        SOME ;
870
                        DIG 3 ;
871
                        UPDATE ;
872
                        UPDATE 1 ;
873
                        RIGHT (pair (big_map key_hash nat)
874
                                    (pair
875
                                      (big_map (pair key_hash (pair string bytes)) unit)
876
                                      (pair
877
                                        (big_map (pair string bytes)
878
                                                 (pair (set key_hash) nat))
879
                                        (pair (option nat)
880
                                              (pair (option (pair string bytes)) nat))))) ;
881
                        DUP 2 ;
882
                        SWAP ;
883
                        UPDATE 2 } ;
884
                 SWAP ;
885
                 DIG 2 ;
886
                 DIG 4 ;
887
                 DIG 5 ;
888
                 DROP 4 ;
889
                 SOME ;
890
                 UPDATE 3 ;
891
                 NIL operation }
892
               { DIG 6 ;
893
                 DIG 9 ;
894
                 DROP 2 ;
895
                 IF_LEFT
896
                   { UNIT ;
897
                     DIG 6 ;
898
                     SWAP ;
899
                     EXEC ;
900
                     DROP ;
901
                     DUP 2 ;
902
                     CAR ;
903
                     DIG 4 ;
904
                     SWAP ;
905
                     EXEC ;
906
                     DUP 3 ;
907
                     GET 3 ;
908
                     IF_NONE
909
                       { NONE (pair nat
910
                                    (pair (or unit unit) (option (pair string bytes)))) ;
911
                         TOTAL_VOTING_POWER ;
912
                         NONE (pair string bytes) ;
913
                         NONE nat ;
914
                         EMPTY_BIG_MAP (pair string bytes) (pair (set key_hash) nat) ;
915
                         EMPTY_BIG_MAP (pair key_hash (pair string bytes)) unit ;
916
                         EMPTY_BIG_MAP key_hash nat ;
917
                         PAIR 6 ;
918
                         LEFT (pair (big_map key_hash string)
919
                                    (pair nat
920
                                          (pair nat
921
                                                (pair nat (pair nat (pair string bytes)))))) ;
922
                         DIG 2 ;
923
                         PAIR }
924
                       { DUP ;
925
                         CAR ;
926
                         DUP 3 ;
927
                         COMPARE ;
928
                         EQ ;
929
                         IF
930
                           { SWAP ;
931
                             DROP ;
932
                             NONE (pair nat
933
                                        (pair (or unit unit)
934
                                              (option (pair string bytes)))) ;
935
                             SWAP }
936
                           { DUP 4 ;
937
                             CAR ;
938
                             DUP 2 ;
939
                             CDR ;
940
                             IF_LEFT
941
                               { DUP 2 ;
942
                                 GET 11 ;
943
                                 DUP 2 ;
944
                                 GET 10 ;
945
                                 MUL ;
946
                                 DIG 2 ;
947
                                 GET 9 ;
948
                                 DUP 3 ;
949
                                 GET 7 ;
950
                                 IF_NONE { PUSH nat 0 } {} ;
951
                                 MUL ;
952
                                 COMPARE ;
953
                                 GE ;
954
                                 IF { DUP ; GET 9 } { NONE (pair string bytes) } ;
955
                                 IF_NONE
956
                                   { GET 7 ;
957
                                     IF_NONE
958
                                       { PUSH bool False }
959
                                       { DROP ; PUSH bool True } ;
960
                                     IF
961
                                       { NONE (pair string bytes) ;
962
                                         UNIT ;
963
                                         LEFT unit ;
964
                                         DIG 2 ;
965
                                         CAR ;
966
                                         DUG 2 ;
967
                                         PUSH nat 1 ;
968
                                         DIG 3 ;
969
                                         ADD ;
970
                                         PAIR 3 ;
971
                                         SOME }
972
                                       { DROP ;
973
                                         NONE (pair nat
974
                                                    (pair (or unit unit)
975
                                                          (option (pair string bytes)))) } ;
976
                                     TOTAL_VOTING_POWER ;
977
                                     NONE (pair string bytes) ;
978
                                     NONE nat ;
979
                                     EMPTY_BIG_MAP (pair string bytes)
980
                                                    (pair (set key_hash) nat) ;
981
                                     EMPTY_BIG_MAP (pair key_hash (pair string bytes))
982
                                                    unit ;
983
                                     EMPTY_BIG_MAP key_hash nat ;
984
                                     PAIR 6 ;
985
                                     LEFT (pair (big_map key_hash string)
986
                                                (pair nat
987
                                                      (pair nat
988
                                                            (pair nat
989
                                                                  (pair nat
990
                                                                        (pair string
991
                                                                              bytes)))))) }
992
                                   { SWAP ;
993
                                     DROP ;
994
                                     PUSH nat 1 ;
995
                                     DIG 2 ;
996
                                     CAR ;
997
                                     ADD ;
998
                                     DUP ;
999
                                     DUP 4 ;
1000
                                     COMPARE ;
1001
                                     EQ ;
1002
                                     IF
1003
                                       { DROP ;
1004
                                         NONE (pair nat
1005
                                                    (pair (or unit unit)
1006
                                                          (option (pair string bytes)))) ;
1007
                                         SWAP ;
1008
                                         TOTAL_VOTING_POWER ;
1009
                                         PUSH nat 0 ;
1010
                                         PUSH nat 0 ;
1011
                                         PUSH nat 0 ;
1012
                                         EMPTY_BIG_MAP key_hash string ;
1013
                                         PAIR 6 ;
1014
                                         RIGHT (pair (big_map key_hash nat)
1015
                                                     (pair
1016
                                                       (big_map
1017
                                                         (pair key_hash
1018
                                                               (pair string bytes))
1019
                                                         unit)
1020
                                                       (pair
1021
                                                         (big_map (pair string bytes)
1022
                                                                  (pair (set key_hash)
1023
                                                                        nat))
1024
                                                         (pair (option nat)
1025
                                                               (pair
1026
                                                                 (option (pair string
1027
                                                                              bytes))
1028
                                                                 nat))))) }
1029
                                       { SWAP ;
1030
                                         DROP ;
1031
                                         NONE (pair string bytes) ;
1032
                                         UNIT ;
1033
                                         RIGHT unit ;
1034
                                         PUSH nat 1 ;
1035
                                         DIG 3 ;
1036
                                         ADD ;
1037
                                         PAIR 3 ;
1038
                                         SOME ;
1039
                                         TOTAL_VOTING_POWER ;
1040
                                         NONE (pair string bytes) ;
1041
                                         NONE nat ;
1042
                                         EMPTY_BIG_MAP (pair string bytes)
1043
                                                        (pair (set key_hash) nat) ;
1044
                                         EMPTY_BIG_MAP
1045
                                           (pair key_hash (pair string bytes))
1046
                                           unit ;
1047
                                         EMPTY_BIG_MAP key_hash nat ;
1048
                                         PAIR 6 ;
1049
                                         LEFT (pair (big_map key_hash string)
1050
                                                    (pair nat
1051
                                                          (pair nat
1052
                                                                (pair nat
1053
                                                                      (pair nat
1054
                                                                            (pair string
1055
                                                                                  bytes)))))) } } }
1056
                               { UNPAIR 6 ;
1057
                                 DROP ;
1058
                                 DIG 3 ;
1059
                                 DUP 6 ;
1060
                                 GET 13 ;
1061
                                 MUL ;
1062
                                 DUP 6 ;
1063
                                 GET 9 ;
1064
                                 DIG 4 ;
1065
                                 DUP 5 ;
1066
                                 DUP 5 ;
1067
                                 ADD ;
1068
                                 ADD ;
1069
                                 MUL ;
1070
                                 COMPARE ;
1071
                                 GE ;
1072
                                 DIG 2 ;
1073
                                 DUP 3 ;
1074
                                 ADD ;
1075
                                 DUP ;
1076
                                 DUP 6 ;
1077
                                 GET 15 ;
1078
                                 MUL ;
1079
                                 DIG 5 ;
1080
                                 GET 9 ;
1081
                                 DIG 4 ;
1082
                                 MUL ;
1083
                                 COMPARE ;
1084
                                 GE ;
1085
                                 PUSH nat 0 ;
1086
                                 DIG 2 ;
1087
                                 COMPARE ;
1088
                                 GT ;
1089
                                 AND ;
1090
                                 AND ;
1091
                                 IF { SOME } { DROP ; NONE (pair string bytes) } ;
1092
                                 UNIT ;
1093
                                 RIGHT unit ;
1094
                                 DIG 2 ;
1095
                                 CAR ;
1096
                                 DUG 2 ;
1097
                                 PUSH nat 1 ;
1098
                                 DIG 3 ;
1099
                                 ADD ;
1100
                                 PAIR 3 ;
1101
                                 SOME ;
1102
                                 TOTAL_VOTING_POWER ;
1103
                                 NONE (pair string bytes) ;
1104
                                 NONE nat ;
1105
                                 EMPTY_BIG_MAP (pair string bytes)
1106
                                                (pair (set key_hash) nat) ;
1107
                                 EMPTY_BIG_MAP (pair key_hash (pair string bytes)) unit ;
1108
                                 EMPTY_BIG_MAP key_hash nat ;
1109
                                 PAIR 6 ;
1110
                                 LEFT (pair (big_map key_hash string)
1111
                                            (pair nat
1112
                                                  (pair nat
1113
                                                        (pair nat
1114
                                                              (pair nat
1115
                                                                    (pair string bytes)))))) } ;
1116
                             DIG 2 ;
1117
                             PAIR } } ;
1118
                     DUP 2 ;
1119
                     DIG 2 ;
1120
                     IF_NONE
1121
                       { DUP 4 ; GET 5 }
1122
                       { GET 4 ;
1123
                         IF_NONE
1124
                           { DUP 4 ; GET 5 }
1125
                           { EMPTY_BIG_MAP address unit ; SWAP ; PAIR ; SOME } } ;
1126
                     DIG 2 ;
1127
                     DUP ;
1128
                     CDR ;
1129
                     IF_LEFT {} { DROP ; DUP 10 ; FAILWITH } ;
1130
                     DUP 6 ;
1131
                     CAR ;
1132
                     GET 16 ;
1133
                     DIG 7 ;
1134
                     SWAP ;
1135
                     EXEC ;
1136
                     PUSH bool False ;
1137
                     PUSH nat 0 ;
1138
                     EMPTY_MAP key_hash nat ;
1139
                     PAIR 3 ;
1140
                     SWAP ;
1141
                     ITER { SWAP ;
1142
                            UNPAIR 3 ;
1143
                            DUP 4 ;
1144
                            VOTING_POWER ;
1145
                            DUP 11 ;
1146
                            CAR ;
1147
                            GET 7 ;
1148
                            DUP 7 ;
1149
                            CAR ;
1150
                            DUP 7 ;
1151
                            GET ;
1152
                            IF_NONE { PUSH nat 0 } {} ;
1153
                            COMPARE ;
1154
                            LT ;
1155
                            NOT ;
1156
                            PUSH nat 0 ;
1157
                            DUP 3 ;
1158
                            COMPARE ;
1159
                            EQ ;
1160
                            OR ;
1161
                            IF
1162
                              { DIG 4 ; DROP ; DIG 3 ; DIG 3 ; DIG 2 ; ADD ; DIG 2 }
1163
                              { DUP 6 ;
1164
                                GET 3 ;
1165
                                DUP 11 ;
1166
                                DUP 7 ;
1167
                                PAIR ;
1168
                                MEM ;
1169
                                IF
1170
                                  { DIG 3 ; DIG 4 ; DROP 2 ; PUSH bool True ; DIG 3 ; DIG 2 ; ADD ; DIG 2 }
1171
                                  { DIG 3 ; DIG 3 ; DUP 3 ; ADD ; DIG 3 ; DIG 3 ; SOME ; DIG 4 ; UPDATE } } ;
1172
                            PAIR 3 } ;
1173
                     SWAP ;
1174
                     DROP ;
1175
                     UNPAIR 3 ;
1176
                     SWAP ;
1177
                     DIG 8 ;
1178
                     SWAP ;
1179
                     EXEC ;
1180
                     DROP ;
1181
                     PUSH nat 0 ;
1182
                     DUP 2 ;
1183
                     SIZE ;
1184
                     COMPARE ;
1185
                     GT ;
1186
                     IF { SWAP ; DROP } { SWAP ; IF { DUP 7 } { DUP 8 } ; FAILWITH } ;
1187
                     DUP 2 ;
1188
                     SWAP ;
1189
                     ITER { UNPAIR ;
1190
                            DIG 2 ;
1191
                            CDR ;
1192
                            IF_LEFT {} { DROP ; DUP 10 ; FAILWITH } ;
1193
                            DUP ;
1194
                            CAR ;
1195
                            DUP 9 ;
1196
                            CAR ;
1197
                            GET 7 ;
1198
                            DUP 2 ;
1199
                            DUP 5 ;
1200
                            GET ;
1201
                            IF_NONE { PUSH nat 0 } {} ;
1202
                            COMPARE ;
1203
                            LT ;
1204
                            IF {} { DUP 11 ; FAILWITH } ;
1205
                            DUP 2 ;
1206
                            GET 5 ;
1207
                            DUP 9 ;
1208
                            GET ;
1209
                            IF_NONE { PUSH string "PROPOSAL_NOT_FOUND" ; FAILWITH } {} ;
1210
                            DUP 3 ;
1211
                            GET 3 ;
1212
                            DUP ;
1213
                            DUP 11 ;
1214
                            DUP 7 ;
1215
                            PAIR ;
1216
                            MEM ;
1217
                            NOT ;
1218
                            IF {} { DUP 12 ; FAILWITH } ;
1219
                            DIG 5 ;
1220
                            DUP 3 ;
1221
                            CDR ;
1222
                            ADD ;
1223
                            DUP 5 ;
1224
                            DUP 5 ;
1225
                            DUP 8 ;
1226
                            GET ;
1227
                            IF_NONE
1228
                              { DIG 4 ; PUSH nat 1 ; SOME ; DUP 8 ; UPDATE }
1229
                              { DIG 5 ; PUSH nat 1 ; DIG 2 ; ADD ; SOME ; DUP 8 ; UPDATE } ;
1230
                            UPDATE 1 ;
1231
                            DIG 2 ;
1232
                            UNIT ;
1233
                            SOME ;
1234
                            DUP 11 ;
1235
                            DIG 7 ;
1236
                            PAIR ;
1237
                            UPDATE ;
1238
                            UPDATE 3 ;
1239
                            DIG 3 ;
1240
                            GET 5 ;
1241
                            DIG 3 ;
1242
                            DUP 4 ;
1243
                            UPDATE 2 ;
1244
                            SOME ;
1245
                            DUP 8 ;
1246
                            UPDATE ;
1247
                            UPDATE 5 ;
1248
                            DUP ;
1249
                            GET 7 ;
1250
                            IF_NONE
1251
                              { SWAP ; SOME ; UPDATE 7 ; DUP 5 ; SOME ; UPDATE 9 }
1252
                              { DUP ;
1253
                                DUP 4 ;
1254
                                COMPARE ;
1255
                                GT ;
1256
                                IF
1257
                                  { DROP ; SWAP ; SOME ; UPDATE 7 ; DUP 5 ; SOME ; UPDATE 9 }
1258
                                  { DIG 2 ;
1259
                                    COMPARE ;
1260
                                    EQ ;
1261
                                    IF { NONE (pair string bytes) ; UPDATE 9 } {} } } ;
1262
                            LEFT (pair (big_map key_hash string)
1263
                                       (pair nat
1264
                                             (pair nat
1265
                                                   (pair nat
1266
                                                         (pair nat (pair string bytes)))))) ;
1267
                            DUP 2 ;
1268
                            SWAP ;
1269
                            UPDATE 2 } ;
1270
                     SWAP ;
1271
                     DIG 4 ;
1272
                     DIG 6 ;
1273
                     DIG 7 ;
1274
                     DIG 8 ;
1275
                     DROP 5 ;
1276
                     DIG 2 ;
1277
                     IF_NONE
1278
                       { NIL operation }
1279
                       { NIL operation ;
1280
                         SWAP ;
1281
                         EMIT %voting_finished (pair (nat %finished_at_period_index)
1282
                                                     (pair
1283
                                                       (or %finished_at_period_type
1284
                                                         (unit %proposal)
1285
                                                         (unit %promotion))
1286
                                                       (option %winner_proposal_payload (pair
1287
                                                                                         (string %sequencer_pk)
1288
                                                                                         (bytes %pool_address))))) ;
1289
                         CONS } ;
1290
                     DIG 3 ;
1291
                     DIG 2 ;
1292
                     SOME ;
1293
                     UPDATE 3 ;
1294
                     DIG 2 ;
1295
                     UPDATE 5 }
1296
                   { DIG 6 ;
1297
                     DROP ;
1298
                     DUP ;
1299
                     UNPAIR ;
1300
                     SIZE ;
1301
                     PUSH nat 55 ;
1302
                     DUP 2 ;
1303
                     COMPARE ;
1304
                     EQ ;
1305
                     PUSH nat 54 ;
1306
                     DIG 2 ;
1307
                     COMPARE ;
1308
                     EQ ;
1309
                     OR ;
1310
                     IF {} { PUSH string "INCORRECT_SEQUENCER_PK_LENGTH" ; FAILWITH } ;
1311
                     PUSH nat 20 ;
1312
                     SWAP ;
1313
                     SIZE ;
1314
                     COMPARE ;
1315
                     EQ ;
1316
                     IF {} { PUSH string "INCORRECT_POOL_ADDRESS_LENGTH" ; FAILWITH } ;
1317
                     UNIT ;
1318
                     DIG 6 ;
1319
                     SWAP ;
1320
                     EXEC ;
1321
                     DROP ;
1322
                     DUP 2 ;
1323
                     CAR ;
1324
                     DIG 4 ;
1325
                     SWAP ;
1326
                     EXEC ;
1327
                     DUP 3 ;
1328
                     GET 3 ;
1329
                     IF_NONE
1330
                       { NONE (pair nat
1331
                                    (pair (or unit unit) (option (pair string bytes)))) ;
1332
                         TOTAL_VOTING_POWER ;
1333
                         NONE (pair string bytes) ;
1334
                         NONE nat ;
1335
                         EMPTY_BIG_MAP (pair string bytes) (pair (set key_hash) nat) ;
1336
                         EMPTY_BIG_MAP (pair key_hash (pair string bytes)) unit ;
1337
                         EMPTY_BIG_MAP key_hash nat ;
1338
                         PAIR 6 ;
1339
                         LEFT (pair (big_map key_hash string)
1340
                                    (pair nat
1341
                                          (pair nat
1342
                                                (pair nat (pair nat (pair string bytes)))))) ;
1343
                         DIG 2 ;
1344
                         PAIR }
1345
                       { DUP ;
1346
                         CAR ;
1347
                         DUP 3 ;
1348
                         COMPARE ;
1349
                         EQ ;
1350
                         IF
1351
                           { SWAP ;
1352
                             DROP ;
1353
                             NONE (pair nat
1354
                                        (pair (or unit unit)
1355
                                              (option (pair string bytes)))) ;
1356
                             SWAP }
1357
                           { DUP 4 ;
1358
                             CAR ;
1359
                             DUP 2 ;
1360
                             CDR ;
1361
                             IF_LEFT
1362
                               { DUP 2 ;
1363
                                 GET 11 ;
1364
                                 DUP 2 ;
1365
                                 GET 10 ;
1366
                                 MUL ;
1367
                                 DIG 2 ;
1368
                                 GET 9 ;
1369
                                 DUP 3 ;
1370
                                 GET 7 ;
1371
                                 IF_NONE { PUSH nat 0 } {} ;
1372
                                 MUL ;
1373
                                 COMPARE ;
1374
                                 GE ;
1375
                                 IF { DUP ; GET 9 } { NONE (pair string bytes) } ;
1376
                                 IF_NONE
1377
                                   { GET 7 ;
1378
                                     IF_NONE
1379
                                       { PUSH bool False }
1380
                                       { DROP ; PUSH bool True } ;
1381
                                     IF
1382
                                       { NONE (pair string bytes) ;
1383
                                         UNIT ;
1384
                                         LEFT unit ;
1385
                                         DIG 2 ;
1386
                                         CAR ;
1387
                                         DUG 2 ;
1388
                                         PUSH nat 1 ;
1389
                                         DIG 3 ;
1390
                                         ADD ;
1391
                                         PAIR 3 ;
1392
                                         SOME }
1393
                                       { DROP ;
1394
                                         NONE (pair nat
1395
                                                    (pair (or unit unit)
1396
                                                          (option (pair string bytes)))) } ;
1397
                                     TOTAL_VOTING_POWER ;
1398
                                     NONE (pair string bytes) ;
1399
                                     NONE nat ;
1400
                                     EMPTY_BIG_MAP (pair string bytes)
1401
                                                    (pair (set key_hash) nat) ;
1402
                                     EMPTY_BIG_MAP (pair key_hash (pair string bytes))
1403
                                                    unit ;
1404
                                     EMPTY_BIG_MAP key_hash nat ;
1405
                                     PAIR 6 ;
1406
                                     LEFT (pair (big_map key_hash string)
1407
                                                (pair nat
1408
                                                      (pair nat
1409
                                                            (pair nat
1410
                                                                  (pair nat
1411
                                                                        (pair string
1412
                                                                              bytes)))))) }
1413
                                   { SWAP ;
1414
                                     DROP ;
1415
                                     PUSH nat 1 ;
1416
                                     DIG 2 ;
1417
                                     CAR ;
1418
                                     ADD ;
1419
                                     DUP ;
1420
                                     DUP 4 ;
1421
                                     COMPARE ;
1422
                                     EQ ;
1423
                                     IF
1424
                                       { DROP ;
1425
                                         NONE (pair nat
1426
                                                    (pair (or unit unit)
1427
                                                          (option (pair string bytes)))) ;
1428
                                         SWAP ;
1429
                                         TOTAL_VOTING_POWER ;
1430
                                         PUSH nat 0 ;
1431
                                         PUSH nat 0 ;
1432
                                         PUSH nat 0 ;
1433
                                         EMPTY_BIG_MAP key_hash string ;
1434
                                         PAIR 6 ;
1435
                                         RIGHT (pair (big_map key_hash nat)
1436
                                                     (pair
1437
                                                       (big_map
1438
                                                         (pair key_hash
1439
                                                               (pair string bytes))
1440
                                                         unit)
1441
                                                       (pair
1442
                                                         (big_map (pair string bytes)
1443
                                                                  (pair (set key_hash)
1444
                                                                        nat))
1445
                                                         (pair (option nat)
1446
                                                               (pair
1447
                                                                 (option (pair string
1448
                                                                              bytes))
1449
                                                                 nat))))) }
1450
                                       { SWAP ;
1451
                                         DROP ;
1452
                                         NONE (pair string bytes) ;
1453
                                         UNIT ;
1454
                                         RIGHT unit ;
1455
                                         PUSH nat 1 ;
1456
                                         DIG 3 ;
1457
                                         ADD ;
1458
                                         PAIR 3 ;
1459
                                         SOME ;
1460
                                         TOTAL_VOTING_POWER ;
1461
                                         NONE (pair string bytes) ;
1462
                                         NONE nat ;
1463
                                         EMPTY_BIG_MAP (pair string bytes)
1464
                                                        (pair (set key_hash) nat) ;
1465
                                         EMPTY_BIG_MAP
1466
                                           (pair key_hash (pair string bytes))
1467
                                           unit ;
1468
                                         EMPTY_BIG_MAP key_hash nat ;
1469
                                         PAIR 6 ;
1470
                                         LEFT (pair (big_map key_hash string)
1471
                                                    (pair nat
1472
                                                          (pair nat
1473
                                                                (pair nat
1474
                                                                      (pair nat
1475
                                                                            (pair string
1476
                                                                                  bytes)))))) } } }
1477
                               { UNPAIR 6 ;
1478
                                 DROP ;
1479
                                 DIG 3 ;
1480
                                 DUP 6 ;
1481
                                 GET 13 ;
1482
                                 MUL ;
1483
                                 DUP 6 ;
1484
                                 GET 9 ;
1485
                                 DIG 4 ;
1486
                                 DUP 5 ;
1487
                                 DUP 5 ;
1488
                                 ADD ;
1489
                                 ADD ;
1490
                                 MUL ;
1491
                                 COMPARE ;
1492
                                 GE ;
1493
                                 DIG 2 ;
1494
                                 DUP 3 ;
1495
                                 ADD ;
1496
                                 DUP ;
1497
                                 DUP 6 ;
1498
                                 GET 15 ;
1499
                                 MUL ;
1500
                                 DIG 5 ;
1501
                                 GET 9 ;
1502
                                 DIG 4 ;
1503
                                 MUL ;
1504
                                 COMPARE ;
1505
                                 GE ;
1506
                                 PUSH nat 0 ;
1507
                                 DIG 2 ;
1508
                                 COMPARE ;
1509
                                 GT ;
1510
                                 AND ;
1511
                                 AND ;
1512
                                 IF { SOME } { DROP ; NONE (pair string bytes) } ;
1513
                                 UNIT ;
1514
                                 RIGHT unit ;
1515
                                 DIG 2 ;
1516
                                 CAR ;
1517
                                 DUG 2 ;
1518
                                 PUSH nat 1 ;
1519
                                 DIG 3 ;
1520
                                 ADD ;
1521
                                 PAIR 3 ;
1522
                                 SOME ;
1523
                                 TOTAL_VOTING_POWER ;
1524
                                 NONE (pair string bytes) ;
1525
                                 NONE nat ;
1526
                                 EMPTY_BIG_MAP (pair string bytes)
1527
                                                (pair (set key_hash) nat) ;
1528
                                 EMPTY_BIG_MAP (pair key_hash (pair string bytes)) unit ;
1529
                                 EMPTY_BIG_MAP key_hash nat ;
1530
                                 PAIR 6 ;
1531
                                 LEFT (pair (big_map key_hash string)
1532
                                            (pair nat
1533
                                                  (pair nat
1534
                                                        (pair nat
1535
                                                              (pair nat
1536
                                                                    (pair string bytes)))))) } ;
1537
                             DIG 2 ;
1538
                             PAIR } } ;
1539
                     DUP 2 ;
1540
                     DIG 2 ;
1541
                     IF_NONE
1542
                       { DUP 4 ; GET 5 }
1543
                       { GET 4 ;
1544
                         IF_NONE
1545
                           { DUP 4 ; GET 5 }
1546
                           { EMPTY_BIG_MAP address unit ; SWAP ; PAIR ; SOME } } ;
1547
                     DIG 2 ;
1548
                     DUP ;
1549
                     CDR ;
1550
                     IF_LEFT { DIG 9 ; DROP } { DROP ; DIG 8 ; FAILWITH } ;
1551
                     DUP 6 ;
1552
                     CAR ;
1553
                     GET 16 ;
1554
                     DIG 7 ;
1555
                     SWAP ;
1556
                     EXEC ;
1557
                     PUSH nat 0 ;
1558
                     PUSH nat 0 ;
1559
                     EMPTY_SET key_hash ;
1560
                     PAIR 3 ;
1561
                     SWAP ;
1562
                     ITER { SWAP ;
1563
                            UNPAIR 3 ;
1564
                            DUP 4 ;
1565
                            VOTING_POWER ;
1566
                            DUP 11 ;
1567
                            CAR ;
1568
                            GET 7 ;
1569
                            DUP 7 ;
1570
                            CAR ;
1571
                            DUP 7 ;
1572
                            GET ;
1573
                            IF_NONE { PUSH nat 0 } {} ;
1574
                            COMPARE ;
1575
                            LT ;
1576
                            NOT ;
1577
                            PUSH nat 0 ;
1578
                            DUP 3 ;
1579
                            COMPARE ;
1580
                            EQ ;
1581
                            OR ;
1582
                            IF
1583
                              { DIG 4 ; DROP ; DIG 3 ; DIG 3 ; DIG 2 ; ADD ; DIG 2 }
1584
                              { DIG 3 ;
1585
                                DUP 2 ;
1586
                                ADD ;
1587
                                DIG 3 ;
1588
                                DIG 2 ;
1589
                                ADD ;
1590
                                DIG 2 ;
1591
                                PUSH bool True ;
1592
                                DIG 4 ;
1593
                                UPDATE } ;
1594
                            PAIR 3 } ;
1595
                     UNPAIR 3 ;
1596
                     SWAP ;
1597
                     DIG 9 ;
1598
                     SWAP ;
1599
                     EXEC ;
1600
                     DROP ;
1601
                     PUSH nat 0 ;
1602
                     DUP 2 ;
1603
                     SIZE ;
1604
                     COMPARE ;
1605
                     GT ;
1606
                     IF { DIG 8 ; DROP } { DIG 8 ; FAILWITH } ;
1607
                     DUP 3 ;
1608
                     GET 5 ;
1609
                     DUP 8 ;
1610
                     MEM ;
1611
                     NOT ;
1612
                     IF {} { PUSH string "PROPOSAL_ALREADY_CREATED" ; FAILWITH } ;
1613
                     DUP 3 ;
1614
                     GET 3 ;
1615
                     DUP 4 ;
1616
                     CAR ;
1617
                     PAIR ;
1618
                     DUP 2 ;
1619
                     ITER { SWAP ;
1620
                            UNPAIR ;
1621
                            SWAP ;
1622
                            UNIT ;
1623
                            SOME ;
1624
                            DUP 11 ;
1625
                            DUP 5 ;
1626
                            PAIR ;
1627
                            UPDATE ;
1628
                            DUP 2 ;
1629
                            DUP 4 ;
1630
                            GET ;
1631
                            IF_NONE
1632
                              { SWAP ; PUSH nat 1 ; SOME ; DIG 3 ; UPDATE }
1633
                              { DIG 2 ; PUSH nat 1 ; DIG 2 ; ADD ; SOME ; DIG 3 ; UPDATE } ;
1634
                            PAIR } ;
1635
                     UNPAIR ;
1636
                     DUP 5 ;
1637
                     SWAP ;
1638
                     UPDATE 1 ;
1639
                     SWAP ;
1640
                     UPDATE 3 ;
1641
                     DIG 3 ;
1642
                     GET 5 ;
1643
                     DUP 4 ;
1644
                     DIG 3 ;
1645
                     PAIR ;
1646
                     SOME ;
1647
                     DUP 8 ;
1648
                     UPDATE ;
1649
                     UPDATE 5 ;
1650
                     DUP ;
1651
                     GET 7 ;
1652
                     IF_NONE
1653
                       { SWAP ; SOME ; UPDATE 7 ; DIG 4 ; SOME ; UPDATE 9 }
1654
                       { DUP ;
1655
                         DUP 4 ;
1656
                         COMPARE ;
1657
                         GT ;
1658
                         IF
1659
                           { DROP ; SWAP ; SOME ; UPDATE 7 ; DIG 4 ; SOME ; UPDATE 9 }
1660
                           { DIG 6 ;
1661
                             DROP ;
1662
                             DIG 2 ;
1663
                             COMPARE ;
1664
                             EQ ;
1665
                             IF { NONE (pair string bytes) ; UPDATE 9 } {} } } ;
1666
                     LEFT (pair (big_map key_hash string)
1667
                                (pair nat
1668
                                      (pair nat
1669
                                            (pair nat (pair nat (pair string bytes)))))) ;
1670
                     DIG 3 ;
1671
                     IF_NONE
1672
                       { NIL operation }
1673
                       { NIL operation ;
1674
                         SWAP ;
1675
                         EMIT %voting_finished (pair (nat %finished_at_period_index)
1676
                                                     (pair
1677
                                                       (or %finished_at_period_type
1678
                                                         (unit %proposal)
1679
                                                         (unit %promotion))
1680
                                                       (option %winner_proposal_payload (pair
1681
                                                                                         (string %sequencer_pk)
1682
                                                                                         (bytes %pool_address))))) ;
1683
                         CONS } ;
1684
                     DIG 4 ;
1685
                     DIG 3 ;
1686
                     DIG 3 ;
1687
                     UPDATE 2 ;
1688
                     SOME ;
1689
                     UPDATE 3 ;
1690
                     DIG 2 ;
1691
                     UPDATE 5 } ;
1692
                 SWAP } } ;
1693
         PAIR } ;
1694
  view "get_voting_state" unit
1695
        (pair (nat %period_index)
1696
              (pair (or %period_type (unit %proposal) (unit %promotion))
1697
                    (pair (nat %remaining_blocks)
1698
                          (option %finished_voting (pair (nat %finished_at_period_index)
1699
                                                        (pair
1700
                                                          (or %finished_at_period_type
1701
                                                            (unit %proposal)
1702
                                                            (unit %promotion))
1703
                                                          (option %winner_proposal_payload (pair
1704
                                                                                            (string %sequencer_pk)
1705
                                                                                            (bytes %pool_address)))))))))
1706
        { PUSH string "CURRENT_LEVEL_LESS_THAN_START_LEVEL" ;
1707
          SWAP ;
1708
          CDR ;
1709
          DUP ;
1710
          CAR ;
1711
          DUP ;
1712
          CAR ;
1713
          LEVEL ;
1714
          SUB ;
1715
          ISNAT ;
1716
          IF_NONE
1717
            { DROP ; DUP 2 ; FAILWITH }
1718
            { SWAP ; GET 3 ; SWAP ; EDIV ; IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ; CAR } ;
1719
          DUP 2 ;
1720
          GET 3 ;
1721
          IF_NONE
1722
            { NONE (pair nat (pair (or unit unit) (option (pair string bytes)))) ;
1723
              TOTAL_VOTING_POWER ;
1724
              NONE (pair string bytes) ;
1725
              NONE nat ;
1726
              EMPTY_BIG_MAP (pair string bytes) (pair (set key_hash) nat) ;
1727
              EMPTY_BIG_MAP (pair key_hash (pair string bytes)) unit ;
1728
              EMPTY_BIG_MAP key_hash nat ;
1729
              PAIR 6 ;
1730
              LEFT (pair (big_map key_hash string)
1731
                         (pair nat (pair nat (pair nat (pair nat (pair string bytes)))))) ;
1732
              DIG 2 ;
1733
              PAIR }
1734
            { DUP ;
1735
              CAR ;
1736
              DUP 3 ;
1737
              COMPARE ;
1738
              EQ ;
1739
              IF
1740
                { SWAP ;
1741
                  DROP ;
1742
                  NONE (pair nat (pair (or unit unit) (option (pair string bytes)))) ;
1743
                  SWAP }
1744
                { DUP 3 ;
1745
                  CAR ;
1746
                  DUP 2 ;
1747
                  CDR ;
1748
                  IF_LEFT
1749
                    { DUP 2 ;
1750
                      GET 11 ;
1751
                      DUP 2 ;
1752
                      GET 10 ;
1753
                      MUL ;
1754
                      DIG 2 ;
1755
                      GET 9 ;
1756
                      DUP 3 ;
1757
                      GET 7 ;
1758
                      IF_NONE { PUSH nat 0 } {} ;
1759
                      MUL ;
1760
                      COMPARE ;
1761
                      GE ;
1762
                      IF { DUP ; GET 9 } { NONE (pair string bytes) } ;
1763
                      IF_NONE
1764
                        { GET 7 ;
1765
                          IF_NONE { PUSH bool False } { DROP ; PUSH bool True } ;
1766
                          IF
1767
                            { NONE (pair string bytes) ;
1768
                              UNIT ;
1769
                              LEFT unit ;
1770
                              DIG 2 ;
1771
                              CAR ;
1772
                              DUG 2 ;
1773
                              PUSH nat 1 ;
1774
                              DIG 3 ;
1775
                              ADD ;
1776
                              PAIR 3 ;
1777
                              SOME }
1778
                            { DROP ;
1779
                              NONE (pair nat
1780
                                         (pair (or unit unit)
1781
                                               (option (pair string bytes)))) } ;
1782
                          TOTAL_VOTING_POWER ;
1783
                          NONE (pair string bytes) ;
1784
                          NONE nat ;
1785
                          EMPTY_BIG_MAP (pair string bytes) (pair (set key_hash) nat) ;
1786
                          EMPTY_BIG_MAP (pair key_hash (pair string bytes)) unit ;
1787
                          EMPTY_BIG_MAP key_hash nat ;
1788
                          PAIR 6 ;
1789
                          LEFT (pair (big_map key_hash string)
1790
                                     (pair nat
1791
                                           (pair nat
1792
                                                 (pair nat
1793
                                                       (pair nat (pair string bytes)))))) }
1794
                        { SWAP ;
1795
                          DROP ;
1796
                          PUSH nat 1 ;
1797
                          DIG 2 ;
1798
                          CAR ;
1799
                          ADD ;
1800
                          DUP ;
1801
                          DUP 4 ;
1802
                          COMPARE ;
1803
                          EQ ;
1804
                          IF
1805
                            { DROP ;
1806
                              NONE (pair nat
1807
                                         (pair (or unit unit)
1808
                                               (option (pair string bytes)))) ;
1809
                              SWAP ;
1810
                              TOTAL_VOTING_POWER ;
1811
                              PUSH nat 0 ;
1812
                              PUSH nat 0 ;
1813
                              PUSH nat 0 ;
1814
                              EMPTY_BIG_MAP key_hash string ;
1815
                              PAIR 6 ;
1816
                              RIGHT (pair (big_map key_hash nat)
1817
                                          (pair
1818
                                            (big_map (pair key_hash (pair string bytes))
1819
                                                     unit)
1820
                                            (pair
1821
                                              (big_map (pair string bytes)
1822
                                                       (pair (set key_hash) nat))
1823
                                              (pair (option nat)
1824
                                                    (pair (option (pair string bytes))
1825
                                                          nat))))) }
1826
                            { SWAP ;
1827
                              DROP ;
1828
                              NONE (pair string bytes) ;
1829
                              UNIT ;
1830
                              RIGHT unit ;
1831
                              PUSH nat 1 ;
1832
                              DIG 3 ;
1833
                              ADD ;
1834
                              PAIR 3 ;
1835
                              SOME ;
1836
                              TOTAL_VOTING_POWER ;
1837
                              NONE (pair string bytes) ;
1838
                              NONE nat ;
1839
                              EMPTY_BIG_MAP (pair string bytes)
1840
                                             (pair (set key_hash) nat) ;
1841
                              EMPTY_BIG_MAP (pair key_hash (pair string bytes)) unit ;
1842
                              EMPTY_BIG_MAP key_hash nat ;
1843
                              PAIR 6 ;
1844
                              LEFT (pair (big_map key_hash string)
1845
                                         (pair nat
1846
                                               (pair nat
1847
                                                     (pair nat
1848
                                                           (pair nat (pair string bytes)))))) } } }
1849
                    { UNPAIR 6 ;
1850
                      DROP ;
1851
                      DIG 3 ;
1852
                      DUP 6 ;
1853
                      GET 13 ;
1854
                      MUL ;
1855
                      DUP 6 ;
1856
                      GET 9 ;
1857
                      DIG 4 ;
1858
                      DUP 5 ;
1859
                      DUP 5 ;
1860
                      ADD ;
1861
                      ADD ;
1862
                      MUL ;
1863
                      COMPARE ;
1864
                      GE ;
1865
                      DIG 2 ;
1866
                      DUP 3 ;
1867
                      ADD ;
1868
                      DUP ;
1869
                      DUP 6 ;
1870
                      GET 15 ;
1871
                      MUL ;
1872
                      DIG 5 ;
1873
                      GET 9 ;
1874
                      DIG 4 ;
1875
                      MUL ;
1876
                      COMPARE ;
1877
                      GE ;
1878
                      PUSH nat 0 ;
1879
                      DIG 2 ;
1880
                      COMPARE ;
1881
                      GT ;
1882
                      AND ;
1883
                      AND ;
1884
                      IF { SOME } { DROP ; NONE (pair string bytes) } ;
1885
                      UNIT ;
1886
                      RIGHT unit ;
1887
                      DIG 2 ;
1888
                      CAR ;
1889
                      DUG 2 ;
1890
                      PUSH nat 1 ;
1891
                      DIG 3 ;
1892
                      ADD ;
1893
                      PAIR 3 ;
1894
                      SOME ;
1895
                      TOTAL_VOTING_POWER ;
1896
                      NONE (pair string bytes) ;
1897
                      NONE nat ;
1898
                      EMPTY_BIG_MAP (pair string bytes) (pair (set key_hash) nat) ;
1899
                      EMPTY_BIG_MAP (pair key_hash (pair string bytes)) unit ;
1900
                      EMPTY_BIG_MAP key_hash nat ;
1901
                      PAIR 6 ;
1902
                      LEFT (pair (big_map key_hash string)
1903
                                 (pair nat
1904
                                       (pair nat
1905
                                             (pair nat (pair nat (pair string bytes)))))) } ;
1906
                  DIG 2 ;
1907
                  PAIR } } ;
1908
          DUP 2 ;
1909
          DIG 2 ;
1910
          IF_NONE
1911
            { DUP 3 ; GET 5 }
1912
            { GET 4 ;
1913
              IF_NONE
1914
                { DUP 3 ; GET 5 }
1915
                { EMPTY_BIG_MAP address unit ; SWAP ; PAIR ; SOME } } ;
1916
          DIG 2 ;
1917
          PAIR 3 ;
1918
          DUP ;
1919
          CAR ;
1920
          SWAP ;
1921
          GET 4 ;
1922
          DIG 2 ;
1923
          CAR ;
1924
          DUP ;
1925
          CAR ;
1926
          LEVEL ;
1927
          SUB ;
1928
          SWAP ;
1929
          GET 3 ;
1930
          SWAP ;
1931
          ISNAT ;
1932
          IF_NONE
1933
            { DROP ; DIG 2 ; FAILWITH }
1934
            { DIG 4 ;
1935
              DROP ;
1936
              DUP 2 ;
1937
              SWAP ;
1938
              EDIV ;
1939
              IF_NONE { PUSH string "MOD by 0" ; FAILWITH } {} ;
1940
              CDR ;
1941
              SWAP ;
1942
              SUB ;
1943
              ISNAT ;
1944
              IF_NONE { PUSH string "option is None" ; FAILWITH } {} } ;
1945
          DUP 3 ;
1946
          CDR ;
1947
          IF_LEFT { DROP ; UNIT ; LEFT unit } { DROP ; UNIT ; RIGHT unit } ;
1948
          DIG 3 ;
1949
          CAR ;
1950
          PAIR 4 } }