BCD

Tezos Contract Explorer
Search Networks Deploy
  • Home
  • /
  • Mainnet
  • /
  • KT1ENJf...LAo2
operations (0)
Latest
​x
753
1616
 
1
{ parameter (or
2
              (or
3
                (or
4
                  (or (address %add_allowed_source)
5
                      (or
6
                        (pair %balance_of
7
                          (list %requests (pair (address %owner) (nat %token_id)))
8
                          (contract %callback (list (pair
9
                                                    (pair %request (address %owner)
10
                                                                   (nat %token_id))
11
                                                    (nat %balance)))))
12
                        (pair %commit (nat %amount)
13
                                      (pair (nat %cooldown_duration)
14
                                            (option %stake_id nat)))))
15
                  (or (nat %enter_cooldown)
16
                      (or (lambda %execute unit (list operation))
17
                          (pair %internal_commit (address %owner)
18
                                                 (pair %param (nat %amount)
19
                                                              (pair
20
                                                                (nat %cooldown_duration)
21
                                                                (option %stake_id nat)))))))
22
                (or
23
                  (or (pair %internal_enter_cooldown (address %owner) (nat %stake_id))
24
                      (or
25
                        (pair %internal_kickout (address %kicker)
26
                                                (pair (address %owner) (nat %stake_id)))
27
                        (pair %internal_recommit (address %owner) (nat %stake_id))))
28
                  (or
29
                    (or (unit %internal_update_parameters)
30
                        (pair %internal_withdraw (address %owner) (nat %stake_id)))
31
                    (or (nat %kickout) (address %propose_administrator)))))
32
              (or
33
                (or
34
                  (or (nat %recommit)
35
                      (or (address %remove_administrator)
36
                          (address %remove_allowed_source)))
37
                  (or (or (nat %remove_token_metadata) (unit %set_administrator))
38
                      (or
39
                        (list %set_token_balance (pair
40
                                                  (pair %request (address %owner)
41
                                                                 (nat %token_id))
42
                                                  (nat %balance)))
43
                        (pair %set_token_metadata (nat %token_id)
44
                                                  (map %token_info string bytes)))))
45
                (or
46
                  (or
47
                    (list %transfer (pair (address %from_)
48
                                         (list %txs (pair (address %to_)
49
                                                         (pair (nat %token_id)
50
                                                               (nat %amount))))))
51
                    (or
52
                      (pair %update_kicker_reward_ratio (nat %numerator)
53
                                                        (nat %denominator))
54
                      (nat %update_max_withdraw_delay)))
55
                  (or
56
                    (or
57
                      (list %update_operators (or
58
                                               (pair %add_operator (address %owner)
59
                                                                   (pair
60
                                                                     (address %operator)
61
                                                                     (nat %token_id)))
62
                                               (pair %remove_operator (address %owner)
63
                                                                      (pair
64
                                                                        (address %operator)
65
                                                                        (nat %token_id)))))
66
                      (unit %update_parameters))
67
                    (or
68
                      (pair %update_vote_scale_map (nat %epoch_length)
69
                                                   (map %voting_scale_map nat
70
                                                                          (pair
71
                                                                            (nat %numerator)
72
                                                                            (nat %denominator))))
73
                      (nat %withdraw)))))) ;
74
  storage (pair
75
            (pair
76
              (pair
77
                (pair (big_map %administrators address nat)
78
                      (big_map %allowed_sources address unit))
79
                (pair (nat %current_token_balance) (nat %epoch_length)))
80
              (pair
81
                (pair (pair %kicker_reward_ratio (nat %numerator) (nat %denominator))
82
                      (big_map %ledger nat address))
83
                (pair (nat %max_cooldown_duration)
84
                      (pair (nat %max_withdraw_delay) (big_map %metadata string bytes)))))
85
            (pair
86
              (pair
87
                (pair
88
                  (big_map %operators
89
                    (pair (address %owner) (pair (address %operator) (nat %token_id)))
90
                    unit)
91
                  (nat %previous_token_balance))
92
                (pair (nat %reward_factor)
93
                      (pair (nat %stake_id_counter)
94
                            (big_map %stakes nat
95
                                             (pair (nat %amount)
96
                                                   (pair (nat %reward_weight)
97
                                                         (pair
98
                                                           (nat %accumulated_rewards)
99
                                                           (pair
100
                                                             (nat %cooldown_duration)
101
                                                             (pair
102
                                                               (option %cooldown_start_timestamp timestamp)
103
                                                               (nat %reward_factor))))))))))
104
              (pair (pair (address %token_address) (nat %token_id))
105
                    (pair
106
                      (big_map %token_metadata nat
107
                                               (pair (nat %token_id)
108
                                                     (map %token_info string bytes)))
109
                      (pair (nat %total_reward_stake_weight)
110
                            (map %voting_scale_map nat
111
                                                   (pair (nat %numerator)
112
                                                         (nat %denominator)))))))) ;
113
  code { LAMBDA
114
           (pair
115
             (pair nat (pair nat (pair nat (pair nat (pair (option timestamp) nat)))))
116
             (pair
117
               (pair
118
                 (pair (pair (big_map address nat) (big_map address unit))
119
                       (pair nat nat))
120
                 (pair (pair (pair nat nat) (big_map nat address))
121
                       (pair nat (pair nat (big_map string bytes)))))
122
               (pair
123
                 (pair (pair (big_map (pair address (pair address nat)) unit) nat)
124
                       (pair nat
125
                             (pair nat
126
                                   (big_map nat
127
                                            (pair nat
128
                                                  (pair nat
129
                                                        (pair nat
130
                                                              (pair nat
131
                                                                    (pair
132
                                                                      (option timestamp)
133
                                                                      nat)))))))))
134
                 (pair (pair address nat)
135
                       (pair (big_map nat (pair nat (map string bytes)))
136
                             (pair nat (map nat (pair nat nat))))))))
137
           (pair nat
138
                 (pair
139
                   (pair
140
                     (pair (pair (big_map address nat) (big_map address unit))
141
                           (pair nat nat))
142
                     (pair (pair (pair nat nat) (big_map nat address))
143
                           (pair nat (pair nat (big_map string bytes)))))
144
                   (pair
145
                     (pair (pair (big_map (pair address (pair address nat)) unit) nat)
146
                           (pair nat
147
                                 (pair nat
148
                                       (big_map nat
149
                                                (pair nat
150
                                                      (pair nat
151
                                                            (pair nat
152
                                                                  (pair nat
153
                                                                        (pair
154
                                                                          (option timestamp)
155
                                                                          nat)))))))))
156
                     (pair (pair address nat)
157
                           (pair (big_map nat (pair nat (map string bytes)))
158
                                 (pair nat (map nat (pair nat nat))))))))
159
           { UNPAIR ;
160
             DUP ;
161
             GET 5 ;
162
             PUSH nat 1000000000000 ;
163
             DIG 2 ;
164
             DUP ;
165
             GET 3 ;
166
             SWAP ;
167
             GET 10 ;
168
             DUP 5 ;
169
             GET 3 ;
170
             GET 3 ;
171
             SUB ;
172
             ISNAT ;
173
             IF_NONE { PUSH int 239 ; FAILWITH } {} ;
174
             MUL ;
175
             EDIV ;
176
             IF_NONE { PUSH int 239 ; FAILWITH } { CAR } ;
177
             ADD ;
178
             PAIR } ;
179
         SWAP ;
180
         LAMBDA
181
           (pair unit
182
                 (pair (list operation)
183
                       (pair
184
                         (pair
185
                           (pair (pair (big_map address nat) (big_map address unit))
186
                                 (pair nat nat))
187
                           (pair (pair (pair nat nat) (big_map nat address))
188
                                 (pair nat (pair nat (big_map string bytes)))))
189
                         (pair
190
                           (pair
191
                             (pair (big_map (pair address (pair address nat)) unit) nat)
192
                             (pair nat
193
                                   (pair nat
194
                                         (big_map nat
195
                                                  (pair nat
196
                                                        (pair nat
197
                                                              (pair nat
198
                                                                    (pair nat
199
                                                                          (pair
200
                                                                            (option timestamp)
201
                                                                            nat)))))))))
202
                           (pair (pair address nat)
203
                                 (pair (big_map nat (pair nat (map string bytes)))
204
                                       (pair nat (map nat (pair nat nat)))))))))
205
           (pair unit
206
                 (pair (list operation)
207
                       (pair
208
                         (pair
209
                           (pair (pair (big_map address nat) (big_map address unit))
210
                                 (pair nat nat))
211
                           (pair (pair (pair nat nat) (big_map nat address))
212
                                 (pair nat (pair nat (big_map string bytes)))))
213
                         (pair
214
                           (pair
215
                             (pair (big_map (pair address (pair address nat)) unit) nat)
216
                             (pair nat
217
                                   (pair nat
218
                                         (big_map nat
219
                                                  (pair nat
220
                                                        (pair nat
221
                                                              (pair nat
222
                                                                    (pair nat
223
                                                                          (pair
224
                                                                            (option timestamp)
225
                                                                            nat)))))))))
226
                           (pair (pair address nat)
227
                                 (pair (big_map nat (pair nat (map string bytes)))
228
                                       (pair nat (map nat (pair nat nat)))))))))
229
           { CDR ;
230
             UNPAIR ;
231
             SWAP ;
232
             DUP ;
233
             DUG 2 ;
234
             GET 5 ;
235
             CAR ;
236
             CONTRACT %balance_of (pair
237
                                    (list %requests (pair (address %owner)
238
                                                         (nat %token_id)))
239
                                    (contract %callback (list (pair
240
                                                              (pair %request
241
                                                                (address %owner)
242
                                                                (nat %token_id))
243
                                                              (nat %balance))))) ;
244
             IF_NONE { PUSH int 112 ; FAILWITH } {} ;
245
             PUSH mutez 0 ;
246
             SELF_ADDRESS ;
247
             CONTRACT %set_token_balance (list (pair
248
                                                (pair %request (address %owner)
249
                                                               (nat %token_id))
250
                                                (nat %balance))) ;
251
             IF_NONE { PUSH int 115 ; FAILWITH } {} ;
252
             NIL (pair address nat) ;
253
             DUP 6 ;
254
             GET 5 ;
255
             CDR ;
256
             SELF_ADDRESS ;
257
             PAIR ;
258
             CONS ;
259
             PAIR ;
260
             TRANSFER_TOKENS ;
261
             CONS ;
262
             UNIT ;
263
             PAIR 3 } ;
264
         SWAP ;
265
         LAMBDA
266
           (pair unit
267
                 (pair
268
                   (pair
269
                     (pair (pair (big_map address nat) (big_map address unit))
270
                           (pair nat nat))
271
                     (pair (pair (pair nat nat) (big_map nat address))
272
                           (pair nat (pair nat (big_map string bytes)))))
273
                   (pair
274
                     (pair (pair (big_map (pair address (pair address nat)) unit) nat)
275
                           (pair nat
276
                                 (pair nat
277
                                       (big_map nat
278
                                                (pair nat
279
                                                      (pair nat
280
                                                            (pair nat
281
                                                                  (pair nat
282
                                                                        (pair
283
                                                                          (option timestamp)
284
                                                                          nat)))))))))
285
                     (pair (pair address nat)
286
                           (pair (big_map nat (pair nat (map string bytes)))
287
                                 (pair nat (map nat (pair nat nat))))))))
288
           (pair unit
289
                 (pair
290
                   (pair
291
                     (pair (pair (big_map address nat) (big_map address unit))
292
                           (pair nat nat))
293
                     (pair (pair (pair nat nat) (big_map nat address))
294
                           (pair nat (pair nat (big_map string bytes)))))
295
                   (pair
296
                     (pair (pair (big_map (pair address (pair address nat)) unit) nat)
297
                           (pair nat
298
                                 (pair nat
299
                                       (big_map nat
300
                                                (pair nat
301
                                                      (pair nat
302
                                                            (pair nat
303
                                                                  (pair nat
304
                                                                        (pair
305
                                                                          (option timestamp)
306
                                                                          nat)))))))))
307
                     (pair (pair address nat)
308
                           (pair (big_map nat (pair nat (map string bytes)))
309
                                 (pair nat (map nat (pair nat nat))))))))
310
           { CDR ;
311
             DUP ;
312
             GET 9 ;
313
             PUSH nat 0 ;
314
             COMPARE ;
315
             LT ;
316
             IF
317
               { DUP ;
318
                 UNPAIR ;
319
                 SWAP ;
320
                 UNPAIR ;
321
                 UNPAIR ;
322
                 SWAP ;
323
                 UNPAIR ;
324
                 DUP 6 ;
325
                 GET 9 ;
326
                 PUSH nat 1000000000000 ;
327
                 DIG 7 ;
328
                 DUP ;
329
                 GET 3 ;
330
                 CAR ;
331
                 CDR ;
332
                 SWAP ;
333
                 CAR ;
334
                 CAR ;
335
                 GET 3 ;
336
                 SUB ;
337
                 ISNAT ;
338
                 IF_NONE { PUSH string "NegativeReward" ; FAILWITH } {} ;
339
                 MUL ;
340
                 EDIV ;
341
                 IF_NONE { PUSH int 265 ; FAILWITH } { CAR } ;
342
                 ADD ;
343
                 PAIR ;
344
                 SWAP ;
345
                 PAIR ;
346
                 PAIR ;
347
                 SWAP ;
348
                 PAIR ;
349
                 DUP ;
350
                 UNPAIR ;
351
                 SWAP ;
352
                 UNPAIR ;
353
                 UNPAIR ;
354
                 CAR ;
355
                 DIG 4 ;
356
                 CAR ;
357
                 CAR ;
358
                 GET 3 ;
359
                 SWAP ;
360
                 PAIR ;
361
                 PAIR ;
362
                 PAIR ;
363
                 SWAP ;
364
                 PAIR }
365
               {} ;
366
             UNIT ;
367
             PAIR } ;
368
         SWAP ;
369
         LAMBDA
370
           unit
371
           unit
372
           { DROP ; SELF_ADDRESS ; SENDER ; COMPARE ; EQ ; IF {} { PUSH int 400 ; FAILWITH } ; UNIT } ;
373
         SWAP ;
374
         LAMBDA
375
           (pair unit
376
                 (pair
377
                   (pair
378
                     (pair (pair (big_map address nat) (big_map address unit))
379
                           (pair nat nat))
380
                     (pair (pair (pair nat nat) (big_map nat address))
381
                           (pair nat (pair nat (big_map string bytes)))))
382
                   (pair
383
                     (pair (pair (big_map (pair address (pair address nat)) unit) nat)
384
                           (pair nat
385
                                 (pair nat
386
                                       (big_map nat
387
                                                (pair nat
388
                                                      (pair nat
389
                                                            (pair nat
390
                                                                  (pair nat
391
                                                                        (pair
392
                                                                          (option timestamp)
393
                                                                          nat)))))))))
394
                     (pair (pair address nat)
395
                           (pair (big_map nat (pair nat (map string bytes)))
396
                                 (pair nat (map nat (pair nat nat))))))))
397
           (pair unit
398
                 (pair
399
                   (pair
400
                     (pair (pair (big_map address nat) (big_map address unit))
401
                           (pair nat nat))
402
                     (pair (pair (pair nat nat) (big_map nat address))
403
                           (pair nat (pair nat (big_map string bytes)))))
404
                   (pair
405
                     (pair (pair (big_map (pair address (pair address nat)) unit) nat)
406
                           (pair nat
407
                                 (pair nat
408
                                       (big_map nat
409
                                                (pair nat
410
                                                      (pair nat
411
                                                            (pair nat
412
                                                                  (pair nat
413
                                                                        (pair
414
                                                                          (option timestamp)
415
                                                                          nat)))))))))
416
                     (pair (pair address nat)
417
                           (pair (big_map nat (pair nat (map string bytes)))
418
                                 (pair nat (map nat (pair nat nat))))))))
419
           { CDR ;
420
             DUP ;
421
             CAR ;
422
             CAR ;
423
             CAR ;
424
             CAR ;
425
             PUSH nat 1 ;
426
             SWAP ;
427
             SENDER ;
428
             GET ;
429
             IF_NONE { PUSH int 21 ; FAILWITH } {} ;
430
             COMPARE ;
431
             EQ ;
432
             IF {} { PUSH int 401 ; FAILWITH } ;
433
             UNIT ;
434
             PAIR } ;
435
         SWAP ;
436
         LAMBDA
437
           (pair unit
438
                 (pair
439
                   (pair
440
                     (pair (pair (big_map address nat) (big_map address unit))
441
                           (pair nat nat))
442
                     (pair (pair (pair nat nat) (big_map nat address))
443
                           (pair nat (pair nat (big_map string bytes)))))
444
                   (pair
445
                     (pair (pair (big_map (pair address (pair address nat)) unit) nat)
446
                           (pair nat
447
                                 (pair nat
448
                                       (big_map nat
449
                                                (pair nat
450
                                                      (pair nat
451
                                                            (pair nat
452
                                                                  (pair nat
453
                                                                        (pair
454
                                                                          (option timestamp)
455
                                                                          nat)))))))))
456
                     (pair (pair address nat)
457
                           (pair (big_map nat (pair nat (map string bytes)))
458
                                 (pair nat (map nat (pair nat nat))))))))
459
           (pair unit
460
                 (pair
461
                   (pair
462
                     (pair (pair (big_map address nat) (big_map address unit))
463
                           (pair nat nat))
464
                     (pair (pair (pair nat nat) (big_map nat address))
465
                           (pair nat (pair nat (big_map string bytes)))))
466
                   (pair
467
                     (pair (pair (big_map (pair address (pair address nat)) unit) nat)
468
                           (pair nat
469
                                 (pair nat
470
                                       (big_map nat
471
                                                (pair nat
472
                                                      (pair nat
473
                                                            (pair nat
474
                                                                  (pair nat
475
                                                                        (pair
476
                                                                          (option timestamp)
477
                                                                          nat)))))))))
478
                     (pair (pair address nat)
479
                           (pair (big_map nat (pair nat (map string bytes)))
480
                                 (pair nat (map nat (pair nat nat))))))))
481
           { CDR ;
482
             DUP ;
483
             CAR ;
484
             CAR ;
485
             CAR ;
486
             CDR ;
487
             SENDER ;
488
             MEM ;
489
             IF {} { PUSH string "NotAllowedSource" ; FAILWITH } ;
490
             UNIT ;
491
             PAIR } ;
492
         SWAP ;
493
         UNPAIR ;
494
         IF_LEFT
495
           { IF_LEFT
496
               { IF_LEFT
497
                   { IF_LEFT
498
                       { DIG 2 ;
499
                         DROP ;
500
                         DIG 3 ;
501
                         DROP ;
502
                         DIG 3 ;
503
                         DROP ;
504
                         DIG 3 ;
505
                         DROP ;
506
                         DIG 3 ;
507
                         DROP ;
508
                         AMOUNT ;
509
                         PUSH mutez 0 ;
510
                         COMPARE ;
511
                         EQ ;
512
                         IF {} { AMOUNT ; FAILWITH } ;
513
                         DIG 2 ;
514
                         UNIT ;
515
                         SWAP ;
516
                         DIG 3 ;
517
                         DIG 2 ;
518
                         PAIR ;
519
                         EXEC ;
520
                         CDR ;
521
                         UNPAIR ;
522
                         UNPAIR ;
523
                         UNPAIR ;
524
                         UNPAIR ;
525
                         SWAP ;
526
                         PUSH (option unit) (Some Unit) ;
527
                         DIG 6 ;
528
                         UPDATE ;
529
                         SWAP ;
530
                         PAIR ;
531
                         PAIR ;
532
                         PAIR ;
533
                         PAIR ;
534
                         NIL operation }
535
                       { DIG 3 ;
536
                         DROP ;
537
                         DIG 3 ;
538
                         DROP ;
539
                         DIG 3 ;
540
                         DROP ;
541
                         DIG 3 ;
542
                         DROP ;
543
                         DIG 3 ;
544
                         DROP ;
545
                         IF_LEFT
546
                           { AMOUNT ;
547
                             PUSH mutez 0 ;
548
                             COMPARE ;
549
                             EQ ;
550
                             IF {} { AMOUNT ; FAILWITH } ;
551
                             NIL (pair (pair address nat) nat) ;
552
                             SWAP ;
553
                             DUP ;
554
                             DUG 2 ;
555
                             CAR ;
556
                             ITER { DUP 4 ;
557
                                    CAR ;
558
                                    GET 3 ;
559
                                    CDR ;
560
                                    SWAP ;
561
                                    DUP ;
562
                                    DUG 2 ;
563
                                    CDR ;
564
                                    MEM ;
565
                                    IF
566
                                      {}
567
                                      { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ;
568
                                    DUP ;
569
                                    CAR ;
570
                                    DUP 5 ;
571
                                    CAR ;
572
                                    GET 3 ;
573
                                    CDR ;
574
                                    DUP 3 ;
575
                                    CDR ;
576
                                    GET ;
577
                                    IF_NONE { PUSH int 684 ; FAILWITH } {} ;
578
                                    COMPARE ;
579
                                    EQ ;
580
                                    IF
581
                                      { SWAP ; PUSH nat 1 ; DIG 2 ; PAIR ; CONS }
582
                                      { SWAP ; PUSH nat 0 ; DIG 2 ; PAIR ; CONS } } ;
583
                             DIG 3 ;
584
                             DROP ;
585
                             NIL operation ;
586
                             DIG 2 ;
587
                             CDR ;
588
                             PUSH mutez 0 ;
589
                             DIG 3 ;
590
                             TRANSFER_TOKENS ;
591
                             CONS }
592
                           { DIG 2 ;
593
                             DROP ;
594
                             AMOUNT ;
595
                             PUSH mutez 0 ;
596
                             COMPARE ;
597
                             EQ ;
598
                             IF {} { AMOUNT ; FAILWITH } ;
599
                             SWAP ;
600
                             DUP ;
601
                             DUG 2 ;
602
                             CAR ;
603
                             GET 5 ;
604
                             SWAP ;
605
                             DUP ;
606
                             DUG 2 ;
607
                             GET 3 ;
608
                             COMPARE ;
609
                             LE ;
610
                             IF
611
                               {}
612
                               { PUSH string "InvalidCooldownDuration" ; FAILWITH } ;
613
                             DUP ;
614
                             GET 4 ;
615
                             IF_NONE
616
                               { DUP ;
617
                                 CAR ;
618
                                 PUSH nat 100000000000 ;
619
                                 SWAP ;
620
                                 COMPARE ;
621
                                 GE ;
622
                                 IF
623
                                   {}
624
                                   { PUSH string "InsufficientStakedAmount" ; FAILWITH } }
625
                               { DROP ;
626
                                 DUP ;
627
                                 GET 4 ;
628
                                 IF_NONE { PUSH int 326 ; FAILWITH } {} ;
629
                                 DUP 3 ;
630
                                 GET 3 ;
631
                                 GET 6 ;
632
                                 SWAP ;
633
                                 DUP ;
634
                                 DUG 2 ;
635
                                 MEM ;
636
                                 IF {} { PUSH string "InvalidStakeId" ; FAILWITH } ;
637
                                 SENDER ;
638
                                 DUP 4 ;
639
                                 CAR ;
640
                                 GET 3 ;
641
                                 CDR ;
642
                                 DUP 3 ;
643
                                 GET ;
644
                                 IF_NONE { PUSH int 328 ; FAILWITH } {} ;
645
                                 COMPARE ;
646
                                 EQ ;
647
                                 IF {} { PUSH string "NotOwner" ; FAILWITH } ;
648
                                 SWAP ;
649
                                 DUP ;
650
                                 DUG 2 ;
651
                                 GET 3 ;
652
                                 DUP 4 ;
653
                                 GET 3 ;
654
                                 GET 6 ;
655
                                 DUP 3 ;
656
                                 GET ;
657
                                 IF_NONE { PUSH int 330 ; FAILWITH } {} ;
658
                                 GET 7 ;
659
                                 COMPARE ;
660
                                 LE ;
661
                                 IF
662
                                   {}
663
                                   { PUSH string "InvalidCooldownDuration" ; FAILWITH } ;
664
                                 NONE timestamp ;
665
                                 DUP 4 ;
666
                                 GET 3 ;
667
                                 GET 6 ;
668
                                 DIG 2 ;
669
                                 GET ;
670
                                 IF_NONE { PUSH int 334 ; FAILWITH } {} ;
671
                                 GET 9 ;
672
                                 COMPARE ;
673
                                 EQ ;
674
                                 IF {} { PUSH string "InvalidState" ; FAILWITH } } ;
675
                             NIL operation ;
676
                             SELF %update_parameters ;
677
                             PUSH mutez 0 ;
678
                             UNIT ;
679
                             TRANSFER_TOKENS ;
680
                             CONS ;
681
                             SELF %internal_commit ;
682
                             PUSH mutez 0 ;
683
                             DIG 3 ;
684
                             SENDER ;
685
                             PAIR ;
686
                             TRANSFER_TOKENS ;
687
                             CONS } } }
688
                   { IF_LEFT
689
                       { DIG 2 ;
690
                         DROP ;
691
                         DIG 2 ;
692
                         DROP ;
693
                         DIG 2 ;
694
                         DROP ;
695
                         DIG 2 ;
696
                         DROP ;
697
                         DIG 2 ;
698
                         DROP ;
699
                         DIG 2 ;
700
                         DROP ;
701
                         AMOUNT ;
702
                         PUSH mutez 0 ;
703
                         COMPARE ;
704
                         EQ ;
705
                         IF {} { AMOUNT ; FAILWITH } ;
706
                         SWAP ;
707
                         DUP ;
708
                         DUG 2 ;
709
                         GET 3 ;
710
                         GET 6 ;
711
                         SWAP ;
712
                         DUP ;
713
                         DUG 2 ;
714
                         MEM ;
715
                         IF {} { PUSH string "InvalidStakeId" ; FAILWITH } ;
716
                         SENDER ;
717
                         DUP 3 ;
718
                         CAR ;
719
                         GET 3 ;
720
                         CDR ;
721
                         DUP 3 ;
722
                         GET ;
723
                         IF_NONE { PUSH int 408 ; FAILWITH } {} ;
724
                         COMPARE ;
725
                         EQ ;
726
                         IF {} { PUSH string "NotOwner" ; FAILWITH } ;
727
                         NONE timestamp ;
728
                         DUP 3 ;
729
                         GET 3 ;
730
                         GET 6 ;
731
                         DUP 3 ;
732
                         GET ;
733
                         IF_NONE { PUSH int 410 ; FAILWITH } {} ;
734
                         GET 9 ;
735
                         COMPARE ;
736
                         EQ ;
737
                         IF {} { PUSH string "InvalidState" ; FAILWITH } ;
738
                         NIL operation ;
739
                         SELF %update_parameters ;
740
                         PUSH mutez 0 ;
741
                         UNIT ;
742
                         TRANSFER_TOKENS ;
743
                         CONS ;
744
                         SELF %internal_enter_cooldown ;
745
                         PUSH mutez 0 ;
746
                         DIG 3 ;
747
                         SENDER ;
748
                         PAIR ;
749
                         TRANSFER_TOKENS ;
750
                         CONS }
751
                       { IF_LEFT
752
                           { DIG 2 ;
753
                             DROP ;
754
                             DIG 3 ;
755
                             DROP ;
756
                             DIG 3 ;
757
                             DROP ;
758
                             DIG 3 ;
759
                             DROP ;
760
                             DIG 3 ;
761
                             DROP ;
762
                             AMOUNT ;
763
                             PUSH mutez 0 ;
764
                             COMPARE ;
765
                             EQ ;
766
                             IF {} { AMOUNT ; FAILWITH } ;
767
                             DIG 2 ;
768
                             UNIT ;
769
                             SWAP ;
770
                             DIG 3 ;
771
                             DIG 2 ;
772
                             PAIR ;
773
                             EXEC ;
774
                             CDR ;
775
                             SWAP ;
776
                             NIL operation ;
777
                             SWAP ;
778
                             UNIT ;
779
                             EXEC ;
780
                             NIL operation ;
781
                             SWAP ;
782
                             ITER { CONS } ;
783
                             ITER { CONS } }
784
                           { AMOUNT ;
785
                             PUSH mutez 0 ;
786
                             COMPARE ;
787
                             EQ ;
788
                             IF {} { AMOUNT ; FAILWITH } ;
789
                             DUP 5 ;
790
                             UNIT ;
791
                             EXEC ;
792
                             PUSH nat 0 ;
793
                             DUP 3 ;
794
                             GET 3 ;
795
                             COMPARE ;
796
                             GT ;
797
                             IF
798
                               { NIL operation ;
799
                                 DUP 4 ;
800
                                 GET 5 ;
801
                                 CAR ;
802
                                 CONTRACT %transfer (list (pair (address %from_)
803
                                                               (list %txs (pair
804
                                                                           (address %to_)
805
                                                                           (pair
806
                                                                             (nat %token_id)
807
                                                                             (nat %amount)))))) ;
808
                                 IF_NONE { PUSH int 36 ; FAILWITH } {} ;
809
                                 PUSH mutez 0 ;
810
                                 NIL (pair address (list (pair address (pair nat nat)))) ;
811
                                 NIL (pair address (pair nat nat)) ;
812
                                 DUP 7 ;
813
                                 GET 3 ;
814
                                 DUP 9 ;
815
                                 GET 5 ;
816
                                 CDR ;
817
                                 SELF_ADDRESS ;
818
                                 PAIR 3 ;
819
                                 CONS ;
820
                                 DUP 7 ;
821
                                 CAR ;
822
                                 PAIR ;
823
                                 CONS ;
824
                                 TRANSFER_TOKENS ;
825
                                 CONS }
826
                               { NIL operation } ;
827
                             DIG 3 ;
828
                             UNPAIR ;
829
                             SWAP ;
830
                             UNPAIR ;
831
                             UNPAIR ;
832
                             UNPAIR ;
833
                             SWAP ;
834
                             DUP 8 ;
835
                             GET 3 ;
836
                             ADD ;
837
                             SWAP ;
838
                             PAIR ;
839
                             PAIR ;
840
                             PAIR ;
841
                             SWAP ;
842
                             PAIR ;
843
                             DUG 3 ;
844
                             DUP 3 ;
845
                             GET 6 ;
846
                             IF_NONE
847
                               { DUP 4 ;
848
                                 GET 3 ;
849
                                 GET 5 ;
850
                                 DUP 5 ;
851
                                 CAR ;
852
                                 GET 5 ;
853
                                 DIG 4 ;
854
                                 DUP ;
855
                                 GET 5 ;
856
                                 SWAP ;
857
                                 DUP ;
858
                                 DUG 6 ;
859
                                 GET 3 ;
860
                                 MUL ;
861
                                 EDIV ;
862
                                 IF_NONE { PUSH int 927 ; FAILWITH } { CAR } ;
863
                                 DUP 6 ;
864
                                 GET 3 ;
865
                                 GET 3 ;
866
                                 NONE timestamp ;
867
                                 DUP 7 ;
868
                                 GET 5 ;
869
                                 PUSH nat 0 ;
870
                                 DUP 5 ;
871
                                 DUP 10 ;
872
                                 GET 3 ;
873
                                 PAIR 6 ;
874
                                 SWAP ;
875
                                 DROP ;
876
                                 DIG 3 ;
877
                                 DROP ;
878
                                 DIG 5 ;
879
                                 DROP ;
880
                                 DIG 5 ;
881
                                 DROP ;
882
                                 DIG 5 ;
883
                                 DROP ;
884
                                 DIG 5 ;
885
                                 DROP ;
886
                                 DIG 5 ;
887
                                 DROP ;
888
                                 DIG 5 ;
889
                                 DROP ;
890
                                 DIG 4 ;
891
                                 UNPAIR ;
892
                                 SWAP ;
893
                                 UNPAIR ;
894
                                 UNPAIR ;
895
                                 SWAP ;
896
                                 UNPAIR ;
897
                                 SWAP ;
898
                                 UNPAIR ;
899
                                 PUSH nat 1 ;
900
                                 ADD ;
901
                                 PAIR ;
902
                                 SWAP ;
903
                                 PAIR ;
904
                                 SWAP ;
905
                                 PAIR ;
906
                                 PAIR ;
907
                                 SWAP ;
908
                                 PAIR ;
909
                                 DUP ;
910
                                 GET 9 ;
911
                                 DUP 3 ;
912
                                 GET 3 ;
913
                                 ADD ;
914
                                 UPDATE 9 ;
915
                                 UNPAIR ;
916
                                 UNPAIR ;
917
                                 SWAP ;
918
                                 UNPAIR ;
919
                                 UNPAIR ;
920
                                 SWAP ;
921
                                 DIG 8 ;
922
                                 CAR ;
923
                                 SOME ;
924
                                 DUP 8 ;
925
                                 UPDATE ;
926
                                 SWAP ;
927
                                 PAIR ;
928
                                 PAIR ;
929
                                 SWAP ;
930
                                 PAIR ;
931
                                 SWAP ;
932
                                 UNPAIR ;
933
                                 UNPAIR ;
934
                                 SWAP ;
935
                                 UNPAIR ;
936
                                 SWAP ;
937
                                 UNPAIR ;
938
                                 SWAP ;
939
                                 DIG 6 ;
940
                                 SOME ;
941
                                 DUP 8 ;
942
                                 UPDATE ;
943
                                 SWAP ;
944
                                 PAIR ;
945
                                 SWAP ;
946
                                 PAIR ;
947
                                 SWAP ;
948
                                 PAIR ;
949
                                 PAIR ;
950
                                 SWAP ;
951
                                 PAIR ;
952
                                 DUP ;
953
                                 GET 7 ;
954
                                 PUSH (map string bytes) { Elt "" 0x00 } ;
955
                                 DUP 4 ;
956
                                 PAIR ;
957
                                 SOME ;
958
                                 DIG 3 ;
959
                                 UPDATE ;
960
                                 UPDATE 7 ;
961
                                 SWAP }
962
                               { DROP ;
963
                                 SWAP ;
964
                                 DROP ;
965
                                 DIG 3 ;
966
                                 DROP ;
967
                                 DIG 3 ;
968
                                 DROP ;
969
                                 DIG 3 ;
970
                                 DROP ;
971
                                 DIG 3 ;
972
                                 DROP ;
973
                                 DIG 3 ;
974
                                 DROP ;
975
                                 SWAP ;
976
                                 DUP ;
977
                                 DUG 2 ;
978
                                 GET 6 ;
979
                                 IF_NONE { PUSH int 948 ; FAILWITH } {} ;
980
                                 DUP 4 ;
981
                                 GET 3 ;
982
                                 GET 6 ;
983
                                 SWAP ;
984
                                 DUP ;
985
                                 DUG 2 ;
986
                                 GET ;
987
                                 IF_NONE { PUSH int 949 ; FAILWITH } {} ;
988
                                 DIG 5 ;
989
                                 SWAP ;
990
                                 DUP ;
991
                                 DUG 2 ;
992
                                 SWAP ;
993
                                 DIG 6 ;
994
                                 DIG 2 ;
995
                                 PAIR ;
996
                                 EXEC ;
997
                                 UNPAIR ;
998
                                 SWAP ;
999
                                 DUG 5 ;
1000
                                 UPDATE 5 ;
1001
                                 DUP 5 ;
1002
                                 GET 3 ;
1003
                                 GET 3 ;
1004
                                 UPDATE 10 ;
1005
                                 DUP 5 ;
1006
                                 SWAP ;
1007
                                 DUP ;
1008
                                 DUG 2 ;
1009
                                 GET 3 ;
1010
                                 DIG 6 ;
1011
                                 GET 9 ;
1012
                                 SUB ;
1013
                                 ISNAT ;
1014
                                 IF_NONE { PUSH int 956 ; FAILWITH } {} ;
1015
                                 UPDATE 9 ;
1016
                                 DUG 4 ;
1017
                                 DUP ;
1018
                                 CAR ;
1019
                                 DUP 5 ;
1020
                                 GET 3 ;
1021
                                 ADD ;
1022
                                 UPDATE 1 ;
1023
                                 DUP 5 ;
1024
                                 CAR ;
1025
                                 GET 5 ;
1026
                                 DUP 5 ;
1027
                                 GET 5 ;
1028
                                 DUP 3 ;
1029
                                 CAR ;
1030
                                 MUL ;
1031
                                 EDIV ;
1032
                                 IF_NONE { PUSH int 963 ; FAILWITH } { CAR } ;
1033
                                 UPDATE 3 ;
1034
                                 DIG 3 ;
1035
                                 GET 5 ;
1036
                                 UPDATE 7 ;
1037
                                 DIG 3 ;
1038
                                 DUP ;
1039
                                 GET 9 ;
1040
                                 DUP 3 ;
1041
                                 GET 3 ;
1042
                                 ADD ;
1043
                                 UPDATE 9 ;
1044
                                 UNPAIR ;
1045
                                 SWAP ;
1046
                                 UNPAIR ;
1047
                                 UNPAIR ;
1048
                                 SWAP ;
1049
                                 UNPAIR ;
1050
                                 SWAP ;
1051
                                 UNPAIR ;
1052
                                 SWAP ;
1053
                                 DIG 6 ;
1054
                                 SOME ;
1055
                                 DIG 7 ;
1056
                                 UPDATE ;
1057
                                 SWAP ;
1058
                                 PAIR ;
1059
                                 SWAP ;
1060
                                 PAIR ;
1061
                                 SWAP ;
1062
                                 PAIR ;
1063
                                 PAIR ;
1064
                                 SWAP ;
1065
                                 PAIR ;
1066
                                 SWAP } } } } }
1067
               { IF_LEFT
1068
                   { IF_LEFT
1069
                       { DIG 2 ;
1070
                         DROP ;
1071
                         DIG 2 ;
1072
                         DROP ;
1073
                         DIG 3 ;
1074
                         DROP ;
1075
                         DIG 3 ;
1076
                         DROP ;
1077
                         AMOUNT ;
1078
                         PUSH mutez 0 ;
1079
                         COMPARE ;
1080
                         EQ ;
1081
                         IF {} { AMOUNT ; FAILWITH } ;
1082
                         DIG 2 ;
1083
                         UNIT ;
1084
                         EXEC ;
1085
                         DROP ;
1086
                         SWAP ;
1087
                         DUP ;
1088
                         DUG 2 ;
1089
                         GET 3 ;
1090
                         GET 6 ;
1091
                         SWAP ;
1092
                         DUP ;
1093
                         DUG 2 ;
1094
                         CDR ;
1095
                         GET ;
1096
                         IF_NONE { PUSH int 1038 ; FAILWITH } {} ;
1097
                         DUP ;
1098
                         DIG 4 ;
1099
                         DIG 4 ;
1100
                         DIG 2 ;
1101
                         PAIR ;
1102
                         EXEC ;
1103
                         UNPAIR ;
1104
                         SWAP ;
1105
                         DUG 3 ;
1106
                         UPDATE 5 ;
1107
                         DUP 3 ;
1108
                         GET 3 ;
1109
                         GET 3 ;
1110
                         UPDATE 10 ;
1111
                         DUP 3 ;
1112
                         SWAP ;
1113
                         DUP ;
1114
                         DUG 2 ;
1115
                         GET 3 ;
1116
                         DIG 4 ;
1117
                         GET 9 ;
1118
                         SUB ;
1119
                         ISNAT ;
1120
                         IF_NONE { PUSH int 1043 ; FAILWITH } {} ;
1121
                         UPDATE 9 ;
1122
                         DUG 2 ;
1123
                         DUP ;
1124
                         GET 3 ;
1125
                         PUSH nat 2 ;
1126
                         SWAP ;
1127
                         EDIV ;
1128
                         IF_NONE { PUSH int 1047 ; FAILWITH } { CAR } ;
1129
                         UPDATE 3 ;
1130
                         NOW ;
1131
                         SOME ;
1132
                         UPDATE 9 ;
1133
                         DIG 2 ;
1134
                         DUP ;
1135
                         GET 9 ;
1136
                         DUP 3 ;
1137
                         GET 3 ;
1138
                         ADD ;
1139
                         UPDATE 9 ;
1140
                         UNPAIR ;
1141
                         SWAP ;
1142
                         UNPAIR ;
1143
                         UNPAIR ;
1144
                         SWAP ;
1145
                         UNPAIR ;
1146
                         SWAP ;
1147
                         UNPAIR ;
1148
                         SWAP ;
1149
                         DIG 6 ;
1150
                         SOME ;
1151
                         DIG 7 ;
1152
                         CDR ;
1153
                         UPDATE ;
1154
                         SWAP ;
1155
                         PAIR ;
1156
                         SWAP ;
1157
                         PAIR ;
1158
                         SWAP ;
1159
                         PAIR ;
1160
                         PAIR ;
1161
                         SWAP ;
1162
                         PAIR ;
1163
                         NIL operation }
1164
                       { IF_LEFT
1165
                           { AMOUNT ;
1166
                             PUSH mutez 0 ;
1167
                             COMPARE ;
1168
                             EQ ;
1169
                             IF {} { AMOUNT ; FAILWITH } ;
1170
                             DUP 5 ;
1171
                             UNIT ;
1172
                             EXEC ;
1173
                             DROP ;
1174
                             SWAP ;
1175
                             DUP ;
1176
                             DUG 2 ;
1177
                             GET 3 ;
1178
                             GET 6 ;
1179
                             SWAP ;
1180
                             DUP ;
1181
                             DUG 2 ;
1182
                             GET 4 ;
1183
                             GET ;
1184
                             IF_NONE { PUSH int 1139 ; FAILWITH } {} ;
1185
                             DUP 9 ;
1186
                             SWAP ;
1187
                             DUP ;
1188
                             DUG 2 ;
1189
                             SWAP ;
1190
                             DIG 4 ;
1191
                             DIG 2 ;
1192
                             PAIR ;
1193
                             EXEC ;
1194
                             UNPAIR ;
1195
                             DUG 9 ;
1196
                             DUG 9 ;
1197
                             DUG 9 ;
1198
                             DUG 9 ;
1199
                             DIG 7 ;
1200
                             DIG 9 ;
1201
                             DIG 9 ;
1202
                             DIG 9 ;
1203
                             UPDATE 5 ;
1204
                             DIG 2 ;
1205
                             DUP ;
1206
                             CAR ;
1207
                             GET 3 ;
1208
                             CAR ;
1209
                             CDR ;
1210
                             SWAP ;
1211
                             DUP ;
1212
                             DUG 4 ;
1213
                             CAR ;
1214
                             GET 3 ;
1215
                             CAR ;
1216
                             CAR ;
1217
                             DUP 3 ;
1218
                             GET 5 ;
1219
                             MUL ;
1220
                             EDIV ;
1221
                             IF_NONE { PUSH int 1144 ; FAILWITH } { CAR } ;
1222
                             DUP ;
1223
                             DUP 3 ;
1224
                             GET 5 ;
1225
                             SUB ;
1226
                             ISNAT ;
1227
                             IF_NONE { PUSH int 1150 ; FAILWITH } {} ;
1228
                             DUP 3 ;
1229
                             CAR ;
1230
                             ADD ;
1231
                             DUP 5 ;
1232
                             DIG 3 ;
1233
                             GET 3 ;
1234
                             DIG 5 ;
1235
                             GET 9 ;
1236
                             SUB ;
1237
                             ISNAT ;
1238
                             IF_NONE { PUSH int 1154 ; FAILWITH } {} ;
1239
                             UPDATE 9 ;
1240
                             DUP ;
1241
                             DUG 4 ;
1242
                             UNPAIR ;
1243
                             SWAP ;
1244
                             UNPAIR ;
1245
                             UNPAIR ;
1246
                             CAR ;
1247
                             DUP 6 ;
1248
                             DUP 6 ;
1249
                             ADD ;
1250
                             DIG 8 ;
1251
                             GET 3 ;
1252
                             CAR ;
1253
                             CDR ;
1254
                             SUB ;
1255
                             ISNAT ;
1256
                             IF_NONE { PUSH int 1157 ; FAILWITH } {} ;
1257
                             SWAP ;
1258
                             PAIR ;
1259
                             PAIR ;
1260
                             PAIR ;
1261
                             SWAP ;
1262
                             PAIR ;
1263
                             DUG 3 ;
1264
                             PUSH nat 0 ;
1265
                             DUP 3 ;
1266
                             COMPARE ;
1267
                             GT ;
1268
                             IF
1269
                               { NIL operation ;
1270
                                 DUP 5 ;
1271
                                 GET 5 ;
1272
                                 CAR ;
1273
                                 CONTRACT %transfer (list (pair (address %from_)
1274
                                                               (list %txs (pair
1275
                                                                           (address %to_)
1276
                                                                           (pair
1277
                                                                             (nat %token_id)
1278
                                                                             (nat %amount)))))) ;
1279
                                 IF_NONE { PUSH int 36 ; FAILWITH } {} ;
1280
                                 PUSH mutez 0 ;
1281
                                 NIL (pair address (list (pair address (pair nat nat)))) ;
1282
                                 NIL (pair address (pair nat nat)) ;
1283
                                 DIG 6 ;
1284
                                 DUP 9 ;
1285
                                 GET 5 ;
1286
                                 CDR ;
1287
                                 DUP 9 ;
1288
                                 CAR ;
1289
                                 PAIR 3 ;
1290
                                 CONS ;
1291
                                 SELF_ADDRESS ;
1292
                                 PAIR ;
1293
                                 CONS ;
1294
                                 TRANSFER_TOKENS ;
1295
                                 CONS }
1296
                               { SWAP ; DROP ; NIL operation } ;
1297
                             PUSH nat 0 ;
1298
                             DUP 3 ;
1299
                             COMPARE ;
1300
                             GT ;
1301
                             IF
1302
                               { DIG 4 ;
1303
                                 DROP ;
1304
                                 DIG 4 ;
1305
                                 DROP ;
1306
                                 DIG 4 ;
1307
                                 DROP ;
1308
                                 DIG 4 ;
1309
                                 DROP ;
1310
                                 DIG 4 ;
1311
                                 DROP ;
1312
                                 DIG 4 ;
1313
                                 DROP ;
1314
                                 DUP 4 ;
1315
                                 GET 5 ;
1316
                                 CAR ;
1317
                                 CONTRACT %transfer (list (pair (address %from_)
1318
                                                               (list %txs (pair
1319
                                                                           (address %to_)
1320
                                                                           (pair
1321
                                                                             (nat %token_id)
1322
                                                                             (nat %amount)))))) ;
1323
                                 IF_NONE { PUSH int 36 ; FAILWITH } {} ;
1324
                                 PUSH mutez 0 ;
1325
                                 NIL (pair address (list (pair address (pair nat nat)))) ;
1326
                                 NIL (pair address (pair nat nat)) ;
1327
                                 DIG 5 ;
1328
                                 DUP 8 ;
1329
                                 GET 5 ;
1330
                                 CDR ;
1331
                                 DUP 8 ;
1332
                                 GET 3 ;
1333
                                 PAIR 3 ;
1334
                                 CONS ;
1335
                                 SELF_ADDRESS ;
1336
                                 PAIR ;
1337
                                 CONS ;
1338
                                 TRANSFER_TOKENS ;
1339
                                 CONS }
1340
                               { SWAP ;
1341
                                 DROP ;
1342
                                 DIG 3 ;
1343
                                 DROP ;
1344
                                 DIG 3 ;
1345
                                 DROP ;
1346
                                 DIG 3 ;
1347
                                 DROP ;
1348
                                 DIG 3 ;
1349
                                 DROP ;
1350
                                 DIG 3 ;
1351
                                 DROP ;
1352
                                 DIG 3 ;
1353
                                 DROP } ;
1354
                             DIG 2 ;
1355
                             UNPAIR ;
1356
                             SWAP ;
1357
                             UNPAIR ;
1358
                             UNPAIR ;
1359
                             SWAP ;
1360
                             UNPAIR ;
1361
                             SWAP ;
1362
                             UNPAIR ;
1363
                             SWAP ;
1364
                             NONE (pair nat
1365
                                        (pair nat
1366
                                              (pair nat
1367
                                                    (pair nat
1368
                                                          (pair (option timestamp) nat))))) ;
1369
                             DUP 9 ;
1370
                             GET 4 ;
1371
                             UPDATE ;
1372
                             SWAP ;
1373
                             PAIR ;
1374
                             SWAP ;
1375
                             PAIR ;
1376
                             SWAP ;
1377
                             PAIR ;
1378
                             PAIR ;
1379
                             SWAP ;
1380
                             UNPAIR ;
1381
                             SWAP ;
1382
                             UNPAIR ;
1383
                             UNPAIR ;
1384
                             SWAP ;
1385
                             NONE address ;
1386
                             DUP 8 ;
1387
                             GET 4 ;
1388
                             UPDATE ;
1389
                             SWAP ;
1390
                             PAIR ;
1391
                             PAIR ;
1392
                             SWAP ;
1393
                             PAIR ;
1394
                             PAIR ;
1395
                             DUP ;
1396
                             GET 7 ;
1397
                             NONE (pair nat (map string bytes)) ;
1398
                             DIG 4 ;
1399
                             GET 4 ;
1400
                             UPDATE ;
1401
                             UPDATE 7 ;
1402
                             SWAP }
1403
                           { DIG 2 ;
1404
                             DROP ;
1405
                             DIG 2 ;
1406
                             DROP ;
1407
                             DIG 3 ;
1408
                             DROP ;
1409
                             DIG 3 ;
1410
                             DROP ;
1411
                             AMOUNT ;
1412
                             PUSH mutez 0 ;
1413
                             COMPARE ;
1414
                             EQ ;
1415
                             IF {} { AMOUNT ; FAILWITH } ;
1416
                             DIG 2 ;
1417
                             UNIT ;
1418
                             EXEC ;
1419
                             DROP ;
1420
                             SWAP ;
1421
                             DUP ;
1422
                             DUG 2 ;
1423
                             GET 3 ;
1424
                             GET 6 ;
1425
                             SWAP ;
1426
                             DUP ;
1427
                             DUG 2 ;
1428
                             CDR ;
1429
                             GET ;
1430
                             IF_NONE { PUSH int 995 ; FAILWITH } {} ;
1431
                             DUP ;
1432
                             DIG 4 ;
1433
                             DIG 4 ;
1434
                             DIG 2 ;
1435
                             PAIR ;
1436
                             EXEC ;
1437
                             UNPAIR ;
1438
                             SWAP ;
1439
                             DUG 3 ;
1440
                             UPDATE 5 ;
1441
                             DUP 3 ;
1442
                             GET 3 ;
1443
                             GET 3 ;
1444
                             UPDATE 10 ;
1445
                             DUP 3 ;
1446
                             SWAP ;
1447
                             DUP ;
1448
                             DUG 2 ;
1449
                             GET 3 ;
1450
                             DIG 4 ;
1451
                             GET 9 ;
1452
                             SUB ;
1453
                             ISNAT ;
1454
                             IF_NONE { PUSH int 1000 ; FAILWITH } {} ;
1455
                             UPDATE 9 ;
1456
                             DUG 2 ;
1457
                             DUP ;
1458
                             DUP 4 ;
1459
                             CAR ;
1460
                             GET 5 ;
1461
                             DIG 2 ;
1462
                             DUP ;
1463
                             GET 7 ;
1464
                             SWAP ;
1465
                             CAR ;
1466
                             MUL ;
1467
                             EDIV ;
1468
                             IF_NONE { PUSH int 1005 ; FAILWITH } { CAR } ;
1469
                             UPDATE 3 ;
1470
                             NONE timestamp ;
1471
                             UPDATE 9 ;
1472
                             DIG 2 ;
1473
                             DUP ;
1474
                             GET 9 ;
1475
                             DUP 3 ;
1476
                             GET 3 ;
1477
                             ADD ;
1478
                             UPDATE 9 ;
1479
                             UNPAIR ;
1480
                             SWAP ;
1481
                             UNPAIR ;
1482
                             UNPAIR ;
1483
                             SWAP ;
1484
                             UNPAIR ;
1485
                             SWAP ;
1486
                             UNPAIR ;
1487
                             SWAP ;
1488
                             DIG 6 ;
1489
                             SOME ;
1490
                             DIG 7 ;
1491
                             CDR ;
1492
                             UPDATE ;
1493
                             SWAP ;
1494
                             PAIR ;
1495
                             SWAP ;
1496
                             PAIR ;
1497
                             SWAP ;
1498
                             PAIR ;
1499
                             PAIR ;
1500
                             SWAP ;
1501
                             PAIR ;
1502
                             NIL operation } } }
1503
                   { IF_LEFT
1504
                       { IF_LEFT
1505
                           { DROP ;
1506
                             SWAP ;
1507
                             DROP ;
1508
                             SWAP ;
1509
                             DROP ;
1510
                             DIG 3 ;
1511
                             DROP ;
1512
                             DIG 3 ;
1513
                             DROP ;
1514
                             AMOUNT ;
1515
                             PUSH mutez 0 ;
1516
                             COMPARE ;
1517
                             EQ ;
1518
                             IF {} { AMOUNT ; FAILWITH } ;
1519
                             SWAP ;
1520
                             UNIT ;
1521
                             EXEC ;
1522
                             DROP ;
1523
                             SWAP ;
1524
                             UNIT ;
1525
                             SWAP ;
1526
                             DUG 2 ;
1527
                             PAIR ;
1528
                             EXEC ;
1529
                             CDR ;
1530
                             NIL operation }
1531
                           { AMOUNT ;
1532
                             PUSH mutez 0 ;
1533
                             COMPARE ;
1534
                             EQ ;
1535
                             IF {} { AMOUNT ; FAILWITH } ;
1536
                             DUP 5 ;
1537
                             UNIT ;
1538
                             EXEC ;
1539
                             DUP 3 ;
1540
                             GET 3 ;
1541
                             GET 6 ;
1542
                             DUP 3 ;
1543
                             CDR ;
1544
                             GET ;
1545
                             IF_NONE { PUSH int 1085 ; FAILWITH } {} ;
1546
                             DUP 10 ;
1547
                             SWAP ;
1548
                             DUP ;
1549
                             DUG 2 ;
1550
                             SWAP ;
1551
                             DIG 5 ;
1552
                             DIG 2 ;
1553
                             PAIR ;
1554
                             EXEC ;
1555
                             UNPAIR ;
1556
                             DUG 10 ;
1557
                             DUG 10 ;
1558
                             DUG 10 ;
1559
                             DUG 10 ;
1560
                             DUG 10 ;
1561
                             DIG 7 ;
1562
                             DIG 10 ;
1563
                             DIG 10 ;
1564
                             DIG 10 ;
1565
                             DIG 10 ;
1566
                             DUP ;
1567
                             DUG 2 ;
1568
                             UPDATE 5 ;
1569
                             DUP ;
1570
                             GET 5 ;
1571
                             SWAP ;
1572
                             DUP ;
1573
                             DUG 3 ;
1574
                             CAR ;
1575
                             ADD ;
1576
                             DUP 6 ;
1577
                             DUP 4 ;
1578
                             GET 3 ;
1579
                             DIG 7 ;
1580
                             GET 9 ;
1581
                             SUB ;
1582
                             ISNAT ;
1583
                             IF_NONE { PUSH int 1089 ; FAILWITH } {} ;
1584
                             UPDATE 9 ;
1585
                             DUP ;
1586
                             DUG 6 ;
1587
                             UNPAIR ;
1588
                             SWAP ;
1589
                             UNPAIR ;
1590
                             UNPAIR ;
1591
                             CAR ;
1592
                             DUP 5 ;
1593
                             DIG 10 ;
1594
                             GET 3 ;
1595
                             CAR ;
1596
                             CDR ;
1597
                             SUB ;
1598
                             ISNAT ;
1599
                             IF_NONE { PUSH int 1092 ; FAILWITH } {} ;
1600
                             SWAP ;
1601
                             PAIR ;
1602
                             PAIR ;
1603
                             PAIR ;
1604
                             SWAP ;
1605
                             PAIR ;
1606
                             DUG 5 ;
1607
                             DUP ;
1608
                             PUSH nat 0 ;
1609
                             COMPARE ;
1610
                             LT ;
1611
                             IF
1612
                               { SWAP ;
1613
                                 DROP ;
1614
                                 SWAP ;
1615
                                 DROP ;
1616
                                 SWAP ;
1617
                                 DROP ;
1618
                                 DIG 3 ;
1619
                                 DROP ;
1620
                                 DIG 3 ;
1621
                                 DROP ;
1622
                                 DIG 3 ;
1623
                                 DROP ;
1624
                                 DIG 3 ;
1625
                                 DROP ;
1626
                                 DIG 3 ;
1627
                                 DROP ;
1628
                                 DIG 3 ;
1629
                                 DROP ;
1630
                                 NIL operation ;
1631
                                 DUP 4 ;
1632
                                 GET 5 ;
1633
                                 CAR ;
1634
                                 CONTRACT %transfer (list (pair (address %from_)
1635
                                                               (list %txs (pair
1636
                                                                           (address %to_)
1637
                                                                           (pair
1638
                                                                             (nat %token_id)
1639
                                                                             (nat %amount)))))) ;
1640
                                 IF_NONE { PUSH int 36 ; FAILWITH } {} ;
1641
                                 PUSH mutez 0 ;
1642
                                 NIL (pair address (list (pair address (pair nat nat)))) ;
1643
                                 NIL (pair address (pair nat nat)) ;
1644
                                 DIG 5 ;
1645
                                 DUP 8 ;
1646
                                 GET 5 ;
1647
                                 CDR ;
1648
                                 DUP 8 ;
1649
                                 CAR ;
1650
                                 PAIR 3 ;
1651
                                 CONS ;
1652
                                 SELF_ADDRESS ;
1653
                                 PAIR ;
1654
                                 CONS ;
1655
                                 TRANSFER_TOKENS ;
1656
                                 CONS }
1657
                               { DROP 4 ;
1658
                                 DIG 2 ;
1659
                                 DROP ;
1660
                                 DIG 2 ;
1661
                                 DROP ;
1662
                                 DIG 2 ;
1663
                                 DROP ;
1664
                                 DIG 2 ;
1665
                                 DROP ;
1666
                                 DIG 2 ;
1667
                                 DROP ;
1668
                                 DIG 2 ;
1669
                                 DROP ;
1670
                                 NIL operation } ;
1671
                             DIG 2 ;
1672
                             UNPAIR ;
1673
                             SWAP ;
1674
                             UNPAIR ;
1675
                             UNPAIR ;
1676
                             SWAP ;
1677
                             UNPAIR ;
1678
                             SWAP ;
1679
                             UNPAIR ;
1680
                             SWAP ;
1681
                             NONE (pair nat
1682
                                        (pair nat
1683
                                              (pair nat
1684
                                                    (pair nat
1685
                                                          (pair (option timestamp) nat))))) ;
1686
                             DUP 9 ;
1687
                             CDR ;
1688
                             UPDATE ;
1689
                             SWAP ;
1690
                             PAIR ;
1691
                             SWAP ;
1692
                             PAIR ;
1693
                             SWAP ;
1694
                             PAIR ;
1695
                             PAIR ;
1696
                             SWAP ;
1697
                             UNPAIR ;
1698
                             SWAP ;
1699
                             UNPAIR ;
1700
                             UNPAIR ;
1701
                             SWAP ;
1702
                             NONE address ;
1703
                             DUP 8 ;
1704
                             CDR ;
1705
                             UPDATE ;
1706
                             SWAP ;
1707
                             PAIR ;
1708
                             PAIR ;
1709
                             SWAP ;
1710
                             PAIR ;
1711
                             PAIR ;
1712
                             DUP ;
1713
                             GET 7 ;
1714
                             NONE (pair nat (map string bytes)) ;
1715
                             DIG 4 ;
1716
                             CDR ;
1717
                             UPDATE ;
1718
                             UPDATE 7 ;
1719
                             SWAP } }
1720
                       { IF_LEFT
1721
                           { DIG 2 ;
1722
                             DROP ;
1723
                             DIG 2 ;
1724
                             DROP ;
1725
                             DIG 2 ;
1726
                             DROP ;
1727
                             DIG 2 ;
1728
                             DROP ;
1729
                             DIG 2 ;
1730
                             DROP ;
1731
                             DIG 2 ;
1732
                             DROP ;
1733
                             AMOUNT ;
1734
                             PUSH mutez 0 ;
1735
                             COMPARE ;
1736
                             EQ ;
1737
                             IF {} { AMOUNT ; FAILWITH } ;
1738
                             SWAP ;
1739
                             DUP ;
1740
                             DUG 2 ;
1741
                             GET 3 ;
1742
                             GET 6 ;
1743
                             SWAP ;
1744
                             DUP ;
1745
                             DUG 2 ;
1746
                             MEM ;
1747
                             IF {} { PUSH string "InvalidStakeId" ; FAILWITH } ;
1748
                             SWAP ;
1749
                             DUP ;
1750
                             DUG 2 ;
1751
                             GET 3 ;
1752
                             GET 6 ;
1753
                             SWAP ;
1754
                             DUP ;
1755
                             DUG 2 ;
1756
                             GET ;
1757
                             IF_NONE { PUSH int 498 ; FAILWITH } {} ;
1758
                             DUP ;
1759
                             GET 9 ;
1760
                             IF_NONE
1761
                               { PUSH string "InvalidState" ; FAILWITH }
1762
                               { DROP } ;
1763
                             DUP 3 ;
1764
                             CAR ;
1765
                             GET 7 ;
1766
                             SWAP ;
1767
                             DUP ;
1768
                             DUG 2 ;
1769
                             GET 7 ;
1770
                             ADD ;
1771
                             INT ;
1772
                             SWAP ;
1773
                             GET 9 ;
1774
                             IF_NONE { PUSH int 502 ; FAILWITH } {} ;
1775
                             ADD ;
1776
                             NOW ;
1777
                             COMPARE ;
1778
                             GT ;
1779
                             IF {} { PUSH string "NotAllowed" ; FAILWITH } ;
1780
                             NIL operation ;
1781
                             SELF %update_parameters ;
1782
                             PUSH mutez 0 ;
1783
                             UNIT ;
1784
                             TRANSFER_TOKENS ;
1785
                             CONS ;
1786
                             SELF %internal_kickout ;
1787
                             PUSH mutez 0 ;
1788
                             DUP 4 ;
1789
                             DUP 6 ;
1790
                             CAR ;
1791
                             GET 3 ;
1792
                             CDR ;
1793
                             DIG 5 ;
1794
                             GET ;
1795
                             IF_NONE { PUSH int 510 ; FAILWITH } {} ;
1796
                             SENDER ;
1797
                             PAIR 3 ;
1798
                             TRANSFER_TOKENS ;
1799
                             CONS }
1800
                           { DIG 2 ;
1801
                             DROP ;
1802
                             DIG 3 ;
1803
                             DROP ;
1804
                             DIG 3 ;
1805
                             DROP ;
1806
                             DIG 3 ;
1807
                             DROP ;
1808
                             DIG 3 ;
1809
                             DROP ;
1810
                             AMOUNT ;
1811
                             PUSH mutez 0 ;
1812
                             COMPARE ;
1813
                             EQ ;
1814
                             IF {} { AMOUNT ; FAILWITH } ;
1815
                             DIG 2 ;
1816
                             UNIT ;
1817
                             SWAP ;
1818
                             DIG 3 ;
1819
                             DIG 2 ;
1820
                             PAIR ;
1821
                             EXEC ;
1822
                             CDR ;
1823
                             UNPAIR ;
1824
                             UNPAIR ;
1825
                             UNPAIR ;
1826
                             UNPAIR ;
1827
                             PUSH (option nat) (Some 0) ;
1828
                             DIG 6 ;
1829
                             UPDATE ;
1830
                             PAIR ;
1831
                             PAIR ;
1832
                             PAIR ;
1833
                             PAIR ;
1834
                             NIL operation } } } } }
1835
           { IF_LEFT
1836
               { IF_LEFT
1837
                   { IF_LEFT
1838
                       { DIG 2 ;
1839
                         DROP ;
1840
                         DIG 2 ;
1841
                         DROP ;
1842
                         DIG 2 ;
1843
                         DROP ;
1844
                         DIG 2 ;
1845
                         DROP ;
1846
                         DIG 2 ;
1847
                         DROP ;
1848
                         DIG 2 ;
1849
                         DROP ;
1850
                         AMOUNT ;
1851
                         PUSH mutez 0 ;
1852
                         COMPARE ;
1853
                         EQ ;
1854
                         IF {} { AMOUNT ; FAILWITH } ;
1855
                         SWAP ;
1856
                         DUP ;
1857
                         DUG 2 ;
1858
                         CAR ;
1859
                         GET 3 ;
1860
                         CDR ;
1861
                         SWAP ;
1862
                         DUP ;
1863
                         DUG 2 ;
1864
                         MEM ;
1865
                         IF {} { PUSH string "InvalidStakeId" ; FAILWITH } ;
1866
                         SENDER ;
1867
                         DUP 3 ;
1868
                         CAR ;
1869
                         GET 3 ;
1870
                         CDR ;
1871
                         DUP 3 ;
1872
                         GET ;
1873
                         IF_NONE { PUSH int 369 ; FAILWITH } {} ;
1874
                         COMPARE ;
1875
                         EQ ;
1876
                         IF {} { PUSH string "NotOwner" ; FAILWITH } ;
1877
                         SWAP ;
1878
                         DUP ;
1879
                         DUG 2 ;
1880
                         GET 3 ;
1881
                         GET 6 ;
1882
                         SWAP ;
1883
                         DUP ;
1884
                         DUG 2 ;
1885
                         GET ;
1886
                         IF_NONE { PUSH int 371 ; FAILWITH } {} ;
1887
                         GET 9 ;
1888
                         IF_NONE { PUSH string "InvalidState" ; FAILWITH } { DROP } ;
1889
                         NIL operation ;
1890
                         SELF %update_parameters ;
1891
                         PUSH mutez 0 ;
1892
                         UNIT ;
1893
                         TRANSFER_TOKENS ;
1894
                         CONS ;
1895
                         SELF %internal_recommit ;
1896
                         PUSH mutez 0 ;
1897
                         DIG 3 ;
1898
                         SENDER ;
1899
                         PAIR ;
1900
                         TRANSFER_TOKENS ;
1901
                         CONS }
1902
                       { IF_LEFT
1903
                           { DIG 2 ;
1904
                             DROP ;
1905
                             DIG 3 ;
1906
                             DROP ;
1907
                             DIG 3 ;
1908
                             DROP ;
1909
                             DIG 3 ;
1910
                             DROP ;
1911
                             DIG 3 ;
1912
                             DROP ;
1913
                             AMOUNT ;
1914
                             PUSH mutez 0 ;
1915
                             COMPARE ;
1916
                             EQ ;
1917
                             IF {} { AMOUNT ; FAILWITH } ;
1918
                             DIG 2 ;
1919
                             UNIT ;
1920
                             SWAP ;
1921
                             DIG 3 ;
1922
                             DIG 2 ;
1923
                             PAIR ;
1924
                             EXEC ;
1925
                             CDR ;
1926
                             UNPAIR ;
1927
                             UNPAIR ;
1928
                             UNPAIR ;
1929
                             UNPAIR ;
1930
                             NONE nat ;
1931
                             DIG 6 ;
1932
                             UPDATE ;
1933
                             PAIR ;
1934
                             PAIR ;
1935
                             PAIR ;
1936
                             PAIR }
1937
                           { DIG 2 ;
1938
                             DROP ;
1939
                             DIG 3 ;
1940
                             DROP ;
1941
                             DIG 3 ;
1942
                             DROP ;
1943
                             DIG 3 ;
1944
                             DROP ;
1945
                             DIG 3 ;
1946
                             DROP ;
1947
                             AMOUNT ;
1948
                             PUSH mutez 0 ;
1949
                             COMPARE ;
1950
                             EQ ;
1951
                             IF {} { AMOUNT ; FAILWITH } ;
1952
                             DIG 2 ;
1953
                             UNIT ;
1954
                             SWAP ;
1955
                             DIG 3 ;
1956
                             DIG 2 ;
1957
                             PAIR ;
1958
                             EXEC ;
1959
                             CDR ;
1960
                             UNPAIR ;
1961
                             UNPAIR ;
1962
                             UNPAIR ;
1963
                             UNPAIR ;
1964
                             SWAP ;
1965
                             NONE unit ;
1966
                             DIG 6 ;
1967
                             UPDATE ;
1968
                             SWAP ;
1969
                             PAIR ;
1970
                             PAIR ;
1971
                             PAIR ;
1972
                             PAIR } ;
1973
                         NIL operation } }
1974
                   { IF_LEFT
1975
                       { IF_LEFT
1976
                           { DIG 3 ;
1977
                             DROP ;
1978
                             DIG 3 ;
1979
                             DROP ;
1980
                             DIG 3 ;
1981
                             DROP ;
1982
                             DIG 3 ;
1983
                             DROP ;
1984
                             DIG 3 ;
1985
                             DROP ;
1986
                             AMOUNT ;
1987
                             PUSH mutez 0 ;
1988
                             COMPARE ;
1989
                             EQ ;
1990
                             IF {} { AMOUNT ; FAILWITH } ;
1991
                             DIG 2 ;
1992
                             UNIT ;
1993
                             SWAP ;
1994
                             DIG 3 ;
1995
                             DIG 2 ;
1996
                             PAIR ;
1997
                             EXEC ;
1998
                             CDR ;
1999
                             DUP ;
2000
                             DUG 2 ;
2001
                             CAR ;
2002
                             GET 3 ;
2003
                             CDR ;
2004
                             SWAP ;
2005
                             DUP ;
2006
                             DUG 2 ;
2007
                             MEM ;
2008
                             IF { PUSH string "TokenStillInUse" ; FAILWITH } {} ;
2009
                             SWAP ;
2010
                             DUP ;
2011
                             GET 7 ;
2012
                             NONE (pair nat (map string bytes)) ;
2013
                             DIG 3 ;
2014
                             UPDATE ;
2015
                             UPDATE 7 }
2016
                           { DROP ;
2017
                             SWAP ;
2018
                             DROP ;
2019
                             SWAP ;
2020
                             DROP ;
2021
                             SWAP ;
2022
                             DROP ;
2023
                             SWAP ;
2024
                             DROP ;
2025
                             SWAP ;
2026
                             DROP ;
2027
                             SWAP ;
2028
                             DROP ;
2029
                             AMOUNT ;
2030
                             PUSH mutez 0 ;
2031
                             COMPARE ;
2032
                             EQ ;
2033
                             IF {} { AMOUNT ; FAILWITH } ;
2034
                             DUP ;
2035
                             CAR ;
2036
                             CAR ;
2037
                             CAR ;
2038
                             CAR ;
2039
                             PUSH nat 0 ;
2040
                             SWAP ;
2041
                             SENDER ;
2042
                             GET ;
2043
                             IF_NONE { PUSH int 46 ; FAILWITH } {} ;
2044
                             COMPARE ;
2045
                             EQ ;
2046
                             IF {} { PUSH int 405 ; FAILWITH } ;
2047
                             UNPAIR ;
2048
                             UNPAIR ;
2049
                             UNPAIR ;
2050
                             UNPAIR ;
2051
                             PUSH (option nat) (Some 1) ;
2052
                             SENDER ;
2053
                             UPDATE ;
2054
                             PAIR ;
2055
                             PAIR ;
2056
                             PAIR ;
2057
                             PAIR } }
2058
                       { IF_LEFT
2059
                           { AMOUNT ;
2060
                             PUSH mutez 0 ;
2061
                             COMPARE ;
2062
                             EQ ;
2063
                             IF {} { AMOUNT ; FAILWITH } ;
2064
                             SWAP ;
2065
                             DUP ;
2066
                             DUG 2 ;
2067
                             GET 5 ;
2068
                             CAR ;
2069
                             SENDER ;
2070
                             COMPARE ;
2071
                             EQ ;
2072
                             IF {} { PUSH int 504 ; FAILWITH } ;
2073
                             DUP ;
2074
                             IF_CONS
2075
                               { SWAP ;
2076
                                 DROP ;
2077
                                 SWAP ;
2078
                                 DROP ;
2079
                                 DIG 2 ;
2080
                                 DROP ;
2081
                                 DIG 2 ;
2082
                                 DROP ;
2083
                                 DIG 2 ;
2084
                                 DROP ;
2085
                                 DIG 2 ;
2086
                                 DROP ;
2087
                                 DIG 2 ;
2088
                                 DROP ;
2089
                                 DIG 2 ;
2090
                                 DROP ;
2091
                                 DUP ;
2092
                                 CAR ;
2093
                                 CAR ;
2094
                                 SELF_ADDRESS ;
2095
                                 COMPARE ;
2096
                                 EQ ;
2097
                                 IF {} { PUSH int 503 ; FAILWITH } ;
2098
                                 SWAP ;
2099
                                 UNPAIR ;
2100
                                 UNPAIR ;
2101
                                 UNPAIR ;
2102
                                 SWAP ;
2103
                                 CDR ;
2104
                                 DIG 4 ;
2105
                                 CDR ;
2106
                                 PAIR ;
2107
                                 SWAP ;
2108
                                 PAIR ;
2109
                                 PAIR ;
2110
                                 PAIR }
2111
                               { DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP } }
2112
                           { DIG 3 ;
2113
                             DROP ;
2114
                             DIG 3 ;
2115
                             DROP ;
2116
                             DIG 3 ;
2117
                             DROP ;
2118
                             DIG 3 ;
2119
                             DROP ;
2120
                             DIG 3 ;
2121
                             DROP ;
2122
                             AMOUNT ;
2123
                             PUSH mutez 0 ;
2124
                             COMPARE ;
2125
                             EQ ;
2126
                             IF {} { AMOUNT ; FAILWITH } ;
2127
                             DIG 2 ;
2128
                             UNIT ;
2129
                             SWAP ;
2130
                             DIG 3 ;
2131
                             DIG 2 ;
2132
                             PAIR ;
2133
                             EXEC ;
2134
                             CDR ;
2135
                             DUP ;
2136
                             DUG 2 ;
2137
                             CAR ;
2138
                             GET 3 ;
2139
                             CDR ;
2140
                             SWAP ;
2141
                             DUP ;
2142
                             DUG 2 ;
2143
                             CAR ;
2144
                             MEM ;
2145
                             IF {} { PUSH string "InexistentToken" ; FAILWITH } ;
2146
                             SWAP ;
2147
                             DUP ;
2148
                             GET 7 ;
2149
                             DIG 2 ;
2150
                             DUP ;
2151
                             SOME ;
2152
                             SWAP ;
2153
                             CAR ;
2154
                             UPDATE ;
2155
                             UPDATE 7 } } ;
2156
                     NIL operation } }
2157
               { IF_LEFT
2158
                   { IF_LEFT
2159
                       { AMOUNT ;
2160
                         PUSH mutez 0 ;
2161
                         COMPARE ;
2162
                         EQ ;
2163
                         IF {} { AMOUNT ; FAILWITH } ;
2164
                         DUP ;
2165
                         ITER { DUP ;
2166
                                CDR ;
2167
                                ITER { DUP 4 ;
2168
                                       CAR ;
2169
                                       GET 3 ;
2170
                                       CDR ;
2171
                                       SWAP ;
2172
                                       DUP ;
2173
                                       DUG 2 ;
2174
                                       GET 3 ;
2175
                                       MEM ;
2176
                                       IF
2177
                                         {}
2178
                                         { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ;
2179
                                       SWAP ;
2180
                                       DUP ;
2181
                                       DUG 2 ;
2182
                                       CAR ;
2183
                                       DUP 5 ;
2184
                                       CAR ;
2185
                                       GET 3 ;
2186
                                       CDR ;
2187
                                       DUP 3 ;
2188
                                       GET 3 ;
2189
                                       GET ;
2190
                                       IF_NONE { PUSH int 599 ; FAILWITH } {} ;
2191
                                       COMPARE ;
2192
                                       EQ ;
2193
                                       IF
2194
                                         {}
2195
                                         { PUSH string "FA2_NOT_OWNER" ; FAILWITH } ;
2196
                                       SWAP ;
2197
                                       DUP ;
2198
                                       DUG 2 ;
2199
                                       CAR ;
2200
                                       SENDER ;
2201
                                       COMPARE ;
2202
                                       EQ ;
2203
                                       IF
2204
                                         { PUSH bool True }
2205
                                         { DUP 4 ;
2206
                                           GET 3 ;
2207
                                           CAR ;
2208
                                           CAR ;
2209
                                           SWAP ;
2210
                                           DUP ;
2211
                                           DUG 2 ;
2212
                                           GET 3 ;
2213
                                           SENDER ;
2214
                                           DUP 5 ;
2215
                                           CAR ;
2216
                                           PAIR 3 ;
2217
                                           MEM } ;
2218
                                       IF
2219
                                         {}
2220
                                         { PUSH string "FA2_NOT_OPERATOR" ; FAILWITH } ;
2221
                                       DUP ;
2222
                                       GET 4 ;
2223
                                       PUSH nat 1 ;
2224
                                       COMPARE ;
2225
                                       EQ ;
2226
                                       IF
2227
                                         { DIG 3 ;
2228
                                           UNPAIR ;
2229
                                           UNPAIR ;
2230
                                           SWAP ;
2231
                                           UNPAIR ;
2232
                                           UNPAIR ;
2233
                                           SWAP ;
2234
                                           DUP 6 ;
2235
                                           CAR ;
2236
                                           SOME ;
2237
                                           DIG 6 ;
2238
                                           GET 3 ;
2239
                                           UPDATE ;
2240
                                           SWAP ;
2241
                                           PAIR ;
2242
                                           PAIR ;
2243
                                           SWAP ;
2244
                                           PAIR ;
2245
                                           PAIR ;
2246
                                           DUG 2 }
2247
                                         { DROP } } ;
2248
                                DROP } ;
2249
                         DROP ;
2250
                         SWAP ;
2251
                         DROP ;
2252
                         SWAP ;
2253
                         DROP ;
2254
                         SWAP ;
2255
                         DROP ;
2256
                         SWAP ;
2257
                         DROP ;
2258
                         SWAP ;
2259
                         DROP ;
2260
                         SWAP ;
2261
                         DROP }
2262
                       { IF_LEFT
2263
                           { DIG 2 ;
2264
                             DROP ;
2265
                             DIG 3 ;
2266
                             DROP ;
2267
                             DIG 3 ;
2268
                             DROP ;
2269
                             DIG 3 ;
2270
                             DROP ;
2271
                             DIG 3 ;
2272
                             DROP ;
2273
                             AMOUNT ;
2274
                             PUSH mutez 0 ;
2275
                             COMPARE ;
2276
                             EQ ;
2277
                             IF {} { AMOUNT ; FAILWITH } ;
2278
                             DIG 2 ;
2279
                             UNIT ;
2280
                             SWAP ;
2281
                             DIG 3 ;
2282
                             DIG 2 ;
2283
                             PAIR ;
2284
                             EXEC ;
2285
                             CDR ;
2286
                             UNPAIR ;
2287
                             UNPAIR ;
2288
                             SWAP ;
2289
                             UNPAIR ;
2290
                             CDR ;
2291
                             DIG 4 ;
2292
                             PAIR ;
2293
                             PAIR ;
2294
                             SWAP ;
2295
                             PAIR ;
2296
                             PAIR }
2297
                           { DIG 2 ;
2298
                             DROP ;
2299
                             DIG 3 ;
2300
                             DROP ;
2301
                             DIG 3 ;
2302
                             DROP ;
2303
                             DIG 3 ;
2304
                             DROP ;
2305
                             DIG 3 ;
2306
                             DROP ;
2307
                             AMOUNT ;
2308
                             PUSH mutez 0 ;
2309
                             COMPARE ;
2310
                             EQ ;
2311
                             IF {} { AMOUNT ; FAILWITH } ;
2312
                             DIG 2 ;
2313
                             UNIT ;
2314
                             SWAP ;
2315
                             DIG 3 ;
2316
                             DIG 2 ;
2317
                             PAIR ;
2318
                             EXEC ;
2319
                             CDR ;
2320
                             UNPAIR ;
2321
                             UNPAIR ;
2322
                             SWAP ;
2323
                             UNPAIR ;
2324
                             SWAP ;
2325
                             UNPAIR ;
2326
                             SWAP ;
2327
                             CDR ;
2328
                             DIG 5 ;
2329
                             PAIR ;
2330
                             SWAP ;
2331
                             PAIR ;
2332
                             SWAP ;
2333
                             PAIR ;
2334
                             SWAP ;
2335
                             PAIR ;
2336
                             PAIR } } ;
2337
                     NIL operation }
2338
                   { IF_LEFT
2339
                       { IF_LEFT
2340
                           { AMOUNT ;
2341
                             PUSH mutez 0 ;
2342
                             COMPARE ;
2343
                             EQ ;
2344
                             IF {} { AMOUNT ; FAILWITH } ;
2345
                             DUP ;
2346
                             ITER { IF_LEFT
2347
                                      { DUP ;
2348
                                        CAR ;
2349
                                        SENDER ;
2350
                                        COMPARE ;
2351
                                        EQ ;
2352
                                        IF
2353
                                          {}
2354
                                          { PUSH string "FA2_NOT_OWNER" ; FAILWITH } ;
2355
                                        DUP 3 ;
2356
                                        CAR ;
2357
                                        GET 3 ;
2358
                                        CDR ;
2359
                                        SWAP ;
2360
                                        DUP ;
2361
                                        DUG 2 ;
2362
                                        GET 4 ;
2363
                                        MEM ;
2364
                                        IF
2365
                                          {}
2366
                                          { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ;
2367
                                        DIG 2 ;
2368
                                        UNPAIR ;
2369
                                        SWAP ;
2370
                                        UNPAIR ;
2371
                                        UNPAIR ;
2372
                                        UNPAIR ;
2373
                                        PUSH (option unit) (Some Unit) ;
2374
                                        DIG 6 ;
2375
                                        DUP ;
2376
                                        GET 4 ;
2377
                                        SWAP ;
2378
                                        DUP ;
2379
                                        GET 3 ;
2380
                                        SWAP ;
2381
                                        CAR ;
2382
                                        PAIR 3 ;
2383
                                        UPDATE ;
2384
                                        PAIR ;
2385
                                        PAIR ;
2386
                                        PAIR ;
2387
                                        SWAP ;
2388
                                        PAIR ;
2389
                                        SWAP }
2390
                                      { DUP ;
2391
                                        CAR ;
2392
                                        SENDER ;
2393
                                        COMPARE ;
2394
                                        EQ ;
2395
                                        IF
2396
                                          {}
2397
                                          { PUSH string "FA2_NOT_OWNER" ; FAILWITH } ;
2398
                                        DUP 3 ;
2399
                                        CAR ;
2400
                                        GET 3 ;
2401
                                        CDR ;
2402
                                        SWAP ;
2403
                                        DUP ;
2404
                                        DUG 2 ;
2405
                                        GET 4 ;
2406
                                        MEM ;
2407
                                        IF
2408
                                          {}
2409
                                          { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ;
2410
                                        DIG 2 ;
2411
                                        UNPAIR ;
2412
                                        SWAP ;
2413
                                        UNPAIR ;
2414
                                        UNPAIR ;
2415
                                        UNPAIR ;
2416
                                        NONE unit ;
2417
                                        DIG 6 ;
2418
                                        DUP ;
2419
                                        GET 4 ;
2420
                                        SWAP ;
2421
                                        DUP ;
2422
                                        GET 3 ;
2423
                                        SWAP ;
2424
                                        CAR ;
2425
                                        PAIR 3 ;
2426
                                        UPDATE ;
2427
                                        PAIR ;
2428
                                        PAIR ;
2429
                                        PAIR ;
2430
                                        SWAP ;
2431
                                        PAIR ;
2432
                                        SWAP } } ;
2433
                             DROP ;
2434
                             SWAP ;
2435
                             DROP ;
2436
                             SWAP ;
2437
                             DROP ;
2438
                             SWAP ;
2439
                             DROP ;
2440
                             SWAP ;
2441
                             DROP ;
2442
                             SWAP ;
2443
                             DROP ;
2444
                             SWAP ;
2445
                             DROP ;
2446
                             NIL operation }
2447
                           { DROP ;
2448
                             SWAP ;
2449
                             DROP ;
2450
                             SWAP ;
2451
                             DROP ;
2452
                             SWAP ;
2453
                             DROP ;
2454
                             SWAP ;
2455
                             DROP ;
2456
                             DIG 2 ;
2457
                             DROP ;
2458
                             AMOUNT ;
2459
                             PUSH mutez 0 ;
2460
                             COMPARE ;
2461
                             EQ ;
2462
                             IF {} { AMOUNT ; FAILWITH } ;
2463
                             NIL operation ;
2464
                             DIG 2 ;
2465
                             UNIT ;
2466
                             SWAP ;
2467
                             DUG 3 ;
2468
                             PAIR 3 ;
2469
                             EXEC ;
2470
                             CDR ;
2471
                             UNPAIR ;
2472
                             SELF %internal_update_parameters ;
2473
                             PUSH mutez 0 ;
2474
                             UNIT ;
2475
                             TRANSFER_TOKENS ;
2476
                             CONS } }
2477
                       { IF_LEFT
2478
                           { AMOUNT ;
2479
                             PUSH mutez 0 ;
2480
                             COMPARE ;
2481
                             EQ ;
2482
                             IF {} { AMOUNT ; FAILWITH } ;
2483
                             DUP 4 ;
2484
                             UNIT ;
2485
                             SWAP ;
2486
                             DIG 3 ;
2487
                             DIG 2 ;
2488
                             PAIR ;
2489
                             EXEC ;
2490
                             UNPAIR ;
2491
                             DUG 8 ;
2492
                             DUG 8 ;
2493
                             DUG 8 ;
2494
                             DIG 7 ;
2495
                             DIG 8 ;
2496
                             DIG 8 ;
2497
                             PUSH nat 0 ;
2498
                             DUP 3 ;
2499
                             CAR ;
2500
                             DUP 5 ;
2501
                             CAR ;
2502
                             GET 5 ;
2503
                             EDIV ;
2504
                             IF_NONE { PUSH int 849 ; FAILWITH } { CDR } ;
2505
                             COMPARE ;
2506
                             EQ ;
2507
                             IF {} { PUSH string "IncorrectEpochLength" ; FAILWITH } ;
2508
                             SWAP ;
2509
                             DUP ;
2510
                             DUG 2 ;
2511
                             CAR ;
2512
                             DUP 4 ;
2513
                             CAR ;
2514
                             GET 5 ;
2515
                             EDIV ;
2516
                             IF_NONE { PUSH int 850 ; FAILWITH } { CAR } ;
2517
                             DUP ;
2518
                             PUSH nat 1 ;
2519
                             ADD ;
2520
                             DUP 4 ;
2521
                             CDR ;
2522
                             SIZE ;
2523
                             COMPARE ;
2524
                             EQ ;
2525
                             IF {} { PUSH string "IncompleteVotingMap" ; FAILWITH } ;
2526
                             DUP ;
2527
                             PUSH nat 1 ;
2528
                             ADD ;
2529
                             PUSH nat 0 ;
2530
                             DUP ;
2531
                             DUP 3 ;
2532
                             COMPARE ;
2533
                             GT ;
2534
                             LOOP { DUP 5 ;
2535
                                    CDR ;
2536
                                    SWAP ;
2537
                                    DUP ;
2538
                                    DUG 2 ;
2539
                                    MEM ;
2540
                                    IF
2541
                                      {}
2542
                                      { PUSH string "InvalidVotingMap" ; FAILWITH } ;
2543
                                    PUSH nat 1 ;
2544
                                    ADD ;
2545
                                    DUP ;
2546
                                    DUP 3 ;
2547
                                    COMPARE ;
2548
                                    GT } ;
2549
                             DROP 4 ;
2550
                             DIG 2 ;
2551
                             DROP ;
2552
                             DIG 2 ;
2553
                             DROP ;
2554
                             DIG 2 ;
2555
                             DROP ;
2556
                             DIG 2 ;
2557
                             DROP ;
2558
                             DIG 2 ;
2559
                             DROP ;
2560
                             DIG 2 ;
2561
                             DROP ;
2562
                             SWAP ;
2563
                             UNPAIR ;
2564
                             UNPAIR ;
2565
                             UNPAIR ;
2566
                             SWAP ;
2567
                             CAR ;
2568
                             DUP 5 ;
2569
                             CAR ;
2570
                             SWAP ;
2571
                             PAIR ;
2572
                             SWAP ;
2573
                             PAIR ;
2574
                             PAIR ;
2575
                             PAIR ;
2576
                             SWAP ;
2577
                             CDR ;
2578
                             UPDATE 10 ;
2579
                             NIL operation }
2580
                           { DIG 2 ;
2581
                             DROP ;
2582
                             DIG 2 ;
2583
                             DROP ;
2584
                             DIG 2 ;
2585
                             DROP ;
2586
                             DIG 2 ;
2587
                             DROP ;
2588
                             DIG 2 ;
2589
                             DROP ;
2590
                             DIG 2 ;
2591
                             DROP ;
2592
                             AMOUNT ;
2593
                             PUSH mutez 0 ;
2594
                             COMPARE ;
2595
                             EQ ;
2596
                             IF {} { AMOUNT ; FAILWITH } ;
2597
                             SWAP ;
2598
                             DUP ;
2599
                             DUG 2 ;
2600
                             GET 3 ;
2601
                             GET 6 ;
2602
                             SWAP ;
2603
                             DUP ;
2604
                             DUG 2 ;
2605
                             MEM ;
2606
                             IF {} { PUSH string "InvalidStakeId" ; FAILWITH } ;
2607
                             SWAP ;
2608
                             DUP ;
2609
                             DUG 2 ;
2610
                             GET 3 ;
2611
                             GET 6 ;
2612
                             SWAP ;
2613
                             DUP ;
2614
                             DUG 2 ;
2615
                             GET ;
2616
                             IF_NONE { PUSH int 451 ; FAILWITH } {} ;
2617
                             SENDER ;
2618
                             DUP 4 ;
2619
                             CAR ;
2620
                             GET 3 ;
2621
                             CDR ;
2622
                             DUP 4 ;
2623
                             GET ;
2624
                             IF_NONE { PUSH int 452 ; FAILWITH } {} ;
2625
                             COMPARE ;
2626
                             EQ ;
2627
                             IF {} { PUSH string "NotOwner" ; FAILWITH } ;
2628
                             DUP ;
2629
                             GET 9 ;
2630
                             IF_NONE
2631
                               { PUSH string "InvalidState" ; FAILWITH }
2632
                               { DROP } ;
2633
                             DUP ;
2634
                             GET 7 ;
2635
                             INT ;
2636
                             SWAP ;
2637
                             GET 9 ;
2638
                             IF_NONE { PUSH int 456 ; FAILWITH } {} ;
2639
                             ADD ;
2640
                             NOW ;
2641
                             COMPARE ;
2642
                             GE ;
2643
                             IF {} { PUSH string "NotAllowed" ; FAILWITH } ;
2644
                             NIL operation ;
2645
                             SELF %update_parameters ;
2646
                             PUSH mutez 0 ;
2647
                             UNIT ;
2648
                             TRANSFER_TOKENS ;
2649
                             CONS ;
2650
                             SELF %internal_withdraw ;
2651
                             PUSH mutez 0 ;
2652
                             DIG 3 ;
2653
                             SENDER ;
2654
                             PAIR ;
2655
                             TRANSFER_TOKENS ;
2656
                             CONS } } } } } ;
2657
         NIL operation ;
2658
         SWAP ;
2659
         ITER { CONS } ;
2660
         PAIR } ;
2661
  view "get_accumulated_rewards" nat nat
2662
        { UNPAIR ;
2663
          SWAP ;
2664
          DUP ;
2665
          DUG 2 ;
2666
          GET 3 ;
2667
          GET 6 ;
2668
          SWAP ;
2669
          DUP ;
2670
          DUG 2 ;
2671
          MEM ;
2672
          IF
2673
            { SWAP ;
2674
              DUP ;
2675
              DUG 2 ;
2676
              GET 3 ;
2677
              GET 6 ;
2678
              SWAP ;
2679
              GET ;
2680
              IF_NONE { PUSH int 1226 ; FAILWITH } {} ;
2681
              PUSH nat 1000000000000 ;
2682
              SWAP ;
2683
              DUP ;
2684
              GET 3 ;
2685
              SWAP ;
2686
              DUP ;
2687
              DUG 3 ;
2688
              GET 10 ;
2689
              DIG 4 ;
2690
              GET 3 ;
2691
              GET 3 ;
2692
              SUB ;
2693
              ISNAT ;
2694
              IF_NONE { PUSH int 1229 ; FAILWITH } {} ;
2695
              MUL ;
2696
              EDIV ;
2697
              IF_NONE { PUSH int 1229 ; FAILWITH } { CAR } ;
2698
              SWAP ;
2699
              GET 5 ;
2700
              ADD }
2701
            { DROP 2 ; PUSH nat 0 } } ;
2702
  view "get_admin_status" address int
2703
        { UNPAIR ;
2704
          SWAP ;
2705
          DUP ;
2706
          DUG 2 ;
2707
          CAR ;
2708
          CAR ;
2709
          CAR ;
2710
          CAR ;
2711
          SWAP ;
2712
          DUP ;
2713
          DUG 2 ;
2714
          MEM ;
2715
          IF
2716
            { SWAP ; CAR ; CAR ; CAR ; CAR ; SWAP ; GET ; IF_NONE { PUSH int 1266 ; FAILWITH } {} ; INT }
2717
            { DROP 2 ; PUSH int -1 } } ;
2718
  view "get_stake_owner" nat (option address)
2719
        { UNPAIR ;
2720
          SWAP ;
2721
          DUP ;
2722
          DUG 2 ;
2723
          CAR ;
2724
          GET 3 ;
2725
          CDR ;
2726
          SWAP ;
2727
          DUP ;
2728
          DUG 2 ;
2729
          MEM ;
2730
          IF
2731
            { SWAP ; CAR ; GET 3 ; CDR ; SWAP ; GET ; IF_NONE { PUSH int 1306 ; FAILWITH } {} ; SOME }
2732
            { DROP 2 ; NONE address } } ;
2733
  view "get_total_reward_stake_weight" unit nat { CDR ; GET 9 } ;
2734
  view "get_voting_details" nat
2735
        (option (pair (nat %token_amount) (pair (nat %vote_weight) (address %owner))))
2736
        { UNPAIR ;
2737
          SWAP ;
2738
          DUP ;
2739
          DUG 2 ;
2740
          GET 3 ;
2741
          GET 6 ;
2742
          SWAP ;
2743
          DUP ;
2744
          DUG 2 ;
2745
          MEM ;
2746
          IF
2747
            { SWAP ;
2748
              DUP ;
2749
              DUG 2 ;
2750
              GET 3 ;
2751
              GET 6 ;
2752
              SWAP ;
2753
              DUP ;
2754
              DUG 2 ;
2755
              GET ;
2756
              IF_NONE { PUSH int 1347 ; FAILWITH } {} ;
2757
              DUP ;
2758
              DUP ;
2759
              GET 5 ;
2760
              PUSH nat 1000000000000 ;
2761
              DIG 3 ;
2762
              DUP ;
2763
              GET 3 ;
2764
              SWAP ;
2765
              GET 10 ;
2766
              DUP 7 ;
2767
              GET 3 ;
2768
              GET 3 ;
2769
              SUB ;
2770
              ISNAT ;
2771
              IF_NONE { PUSH int 1349 ; FAILWITH } {} ;
2772
              MUL ;
2773
              EDIV ;
2774
              IF_NONE { PUSH int 1349 ; FAILWITH } { CAR } ;
2775
              ADD ;
2776
              UPDATE 5 ;
2777
              DIG 2 ;
2778
              DUP ;
2779
              GET 10 ;
2780
              SWAP ;
2781
              DUP ;
2782
              DUG 4 ;
2783
              CAR ;
2784
              CAR ;
2785
              GET 4 ;
2786
              DUP 3 ;
2787
              GET 7 ;
2788
              EDIV ;
2789
              IF_NONE { PUSH int 1353 ; FAILWITH } { CAR } ;
2790
              GET ;
2791
              IF_NONE { PUSH int 1353 ; FAILWITH } {} ;
2792
              UNPAIR ;
2793
              DIG 2 ;
2794
              DUP ;
2795
              GET 5 ;
2796
              SWAP ;
2797
              DUP ;
2798
              DUG 4 ;
2799
              CAR ;
2800
              ADD ;
2801
              MUL ;
2802
              EDIV ;
2803
              IF_NONE { PUSH int 1356 ; FAILWITH } { CAR } ;
2804
              DIG 3 ;
2805
              CAR ;
2806
              GET 3 ;
2807
              CDR ;
2808
              DIG 3 ;
2809
              GET ;
2810
              IF_NONE { PUSH int 1358 ; FAILWITH } {} ;
2811
              SWAP ;
2812
              DIG 2 ;
2813
              CAR ;
2814
              PAIR 3 ;
2815
              SOME }
2816
            { DROP 2 ; NONE (pair nat (pair nat address)) } } ;
2817
  view "is_operator" (pair (address %owner) (pair (address %operator) (nat %token_id)))
2818
        bool
2819
        { UNPAIR ; SWAP ; GET 3 ; CAR ; CAR ; SWAP ; MEM } ;
2820
  view "view_stake_info" nat
2821
        (pair (nat %amount)
2822
              (pair (nat %reward_weight)
2823
                    (pair (nat %accumulated_rewards)
2824
                          (pair (nat %cooldown_duration)
2825
                                (pair (option %cooldown_start_timestamp timestamp)
2826
                                      (nat %reward_factor))))))
2827
        { UNPAIR ;
2828
          SWAP ;
2829
          DUP ;
2830
          DUG 2 ;
2831
          GET 3 ;
2832
          GET 6 ;
2833
          SWAP ;
2834
          DUP ;
2835
          DUG 2 ;
2836
          MEM ;
2837
          IF
2838
            { SWAP ; GET 3 ; GET 6 ; SWAP ; GET ; IF_NONE { PUSH int 1203 ; FAILWITH } {} }
2839
            { PUSH nat 0 ; NONE timestamp ; PUSH nat 0 ; DUP ; DUP ; DUP ; PAIR 6 ; SWAP ; DROP ; SWAP ; DROP } } }