BCD

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