BCD

Tezos Contract Explorer
Search Networks Deploy
  • Home
  • /
  • Mainnet
  • /
  • Dexter USDtz/XTZ Old
Delegatable
operations (14.9K)Storage Code Interact Tokens Fork Statistics Details
Latest
​x
962
1606
 
1
parameter (or
2
            (or
3
              (or
4
                (pair %approve (address :spender)
5
                               (pair (nat :allowance) (nat :currentAllowance)))
6
                (pair %addLiquidity (pair (address :owner) (nat :minLqtMinted))
7
                                    (pair (nat :maxTokensDeposited)
8
                                          (timestamp :deadline))))
9
              (or
10
                (pair %removeLiquidity
11
                  (pair (address :owner) (pair (address :to) (nat :lqtBurned)))
12
                  (pair (mutez :minXtzWithdrawn)
13
                        (pair (nat :minTokensWithdrawn) (timestamp :deadline))))
14
                (or
15
                  (pair %xtzToToken (address :to)
16
                                    (pair (nat :minTokensBought) (timestamp :deadline)))
17
                  (pair %tokenToXtz (pair (address :owner) (address :to))
18
                                    (pair (nat :tokensSold)
19
                                          (pair (mutez :minXtzBought)
20
                                                (timestamp :deadline)))))))
21
            (or
22
              (or
23
                (pair %tokenToToken
24
                  (pair (address :outputDexterContract)
25
                        (pair (nat :minTokensBought) (address :owner)))
26
                  (pair (address :to) (pair (nat :tokensSold) (timestamp :deadline))))
27
                (or (key_hash %updateTokenPool) (nat %updateTokenPoolInternal)))
28
              (or (pair %setBaker (option key_hash) bool)
29
                  (or (address %setManager) (unit %default)))));
30
storage (pair
31
          (big_map %accounts (address :owner)
32
                             (pair (nat :balance)
33
                                   (map (address :spender) (nat :allowance))))
34
          (pair
35
            (pair (bool :selfIsUpdatingTokenPool)
36
                  (pair (bool :freezeBaker) (nat :lqtTotal)))
37
            (pair (pair (address :manager) (address :tokenAddress))
38
                  (pair (nat :tokenPool) (mutez :xtzPool)))));
39
code { CAST (pair
40
              (or
41
                (or
42
                  (or (pair address (pair nat nat))
43
                      (pair (pair address nat) (pair nat timestamp)))
44
                  (or
45
                    (pair (pair address (pair address nat))
46
                          (pair mutez (pair nat timestamp)))
47
                    (or (pair address (pair nat timestamp))
48
                        (pair (pair address address) (pair nat (pair mutez timestamp))))))
49
                (or
50
                  (or
51
                    (pair (pair address (pair nat address))
52
                          (pair address (pair nat timestamp)))
53
                    (or key_hash nat))
54
                  (or (pair (option key_hash) bool) (or address unit))))
55
              (pair (big_map address (pair nat (map address nat)))
56
                    (pair (pair bool (pair bool nat))
57
                          (pair (pair address address) (pair nat mutez))))) ;
58
       DUP ;
59
       CAR ;
60
       DIP { CDR } ;
61
       IF_LEFT
62
         { IF_LEFT
63
             { IF_LEFT
64
                 { DIP { DUP ;
65
                         CDR ;
66
                         CAR ;
67
                         CAR ;
68
                         IF
69
                           { PUSH string "selfIsUpdatingToken must be false." ; FAILWITH }
70
                           {} } ;
71
                   PUSH mutez 0 ;
72
                   AMOUNT ;
73
                   COMPARE ;
74
                   EQ ;
75
                   IF {} { PUSH string "Amount must be zero." ; FAILWITH } ;
76
                   DIP { DUP } ;
77
                   SWAP ;
78
                   CAR ;
79
                   SENDER ;
80
                   GET ;
81
                   IF_NONE { EMPTY_MAP address nat ; PUSH nat 0 ; PAIR } {} ;
82
                   DUP ;
83
                   CDR ;
84
                   DIP 2 { DUP } ;
85
                   DIG 2 ;
86
                   CAR ;
87
                   GET ;
88
                   IF_NONE { PUSH nat 0 } {} ;
89
                   DIP 2 { DUP } ;
90
                   DIG 2 ;
91
                   CDR ;
92
                   CDR ;
93
                   COMPARE ;
94
                   EQ ;
95
                   IF
96
                     {}
97
                     { PUSH string "The current allowance parameter must equal the sender's current allowance for the owner." ;
98
                       FAILWITH } ;
99
                   DUP ;
100
                   CDR ;
101
                   DIG 2 ;
102
                   DUP ;
103
                   CAR ;
104
                   DIP { CDR ; CAR ; SOME } ;
105
                   UPDATE ;
106
                   DIP { DUP ; DIP { CAR } ; CDR } ;
107
                   SWAP ;
108
                   DROP ;
109
                   SWAP ;
110
                   PAIR ;
111
                   DIP { DUP ; CAR } ;
112
                   SOME ;
113
                   SENDER ;
114
                   UPDATE ;
115
                   DIP { DUP ; DIP { CDR } ; CAR } ;
116
                   SWAP ;
117
                   DROP ;
118
                   PAIR ;
119
                   NIL operation ;
120
                   PAIR }
121
                 { DIP { DUP ;
122
                         CDR ;
123
                         CAR ;
124
                         CAR ;
125
                         IF
126
                           { PUSH string "selfIsUpdatingToken must be false." ; FAILWITH }
127
                           {} } ;
128
                   DUP ;
129
                   CDR ;
130
                   CDR ;
131
                   NOW ;
132
                   COMPARE ;
133
                   LT ;
134
                   IF {} { PUSH string "NOW is greater than deadline." ; FAILWITH } ;
135
                   DUP ;
136
                   CDR ;
137
                   CAR ;
138
                   PUSH nat 0 ;
139
                   COMPARE ;
140
                   LT ;
141
                   IF
142
                     {}
143
                     { PUSH string "maxTokensDeposited must be greater than zero." ;
144
                       FAILWITH } ;
145
                   DUP ;
146
                   CAR ;
147
                   CDR ;
148
                   PUSH nat 0 ;
149
                   COMPARE ;
150
                   LT ;
151
                   IF
152
                     {}
153
                     { PUSH string "minLqtMinted must be greater than zero." ; FAILWITH } ;
154
                   PUSH mutez 0 ;
155
                   AMOUNT ;
156
                   COMPARE ;
157
                   GT ;
158
                   IF
159
                     {}
160
                     { PUSH string "Amount must be greater than zero." ; FAILWITH } ;
161
                   DIP { DUP } ;
162
                   SWAP ;
163
                   CDR ;
164
                   CAR ;
165
                   CDR ;
166
                   CDR ;
167
                   INT ;
168
                   EQ ;
169
                   IF
170
                     { AMOUNT ;
171
                       PUSH mutez 1000000 ;
172
                       COMPARE ;
173
                       LE ;
174
                       IF
175
                         {}
176
                         { PUSH string "The initial liquidity amount must be greater than or equal to 1 XTZ." ;
177
                           FAILWITH } ;
178
                       SWAP ;
179
                       AMOUNT ;
180
                       DIP { PUSH mutez 1 } ;
181
                       EDIV ;
182
                       IF_NONE { PUSH string "" ; FAILWITH } { CAR } ;
183
                       DUP ;
184
                       DIP { DIP { DUP ; CDR } ;
185
                             DIP { DUP ; DIP { CDR } ; CAR } ;
186
                             DIP { DUP ; DIP { CAR } ; CDR } ;
187
                             DIP { DUP ; DIP { CAR } ; CDR } ;
188
                             SWAP ;
189
                             DROP ;
190
                             SWAP ;
191
                             PAIR ;
192
                             SWAP ;
193
                             PAIR ;
194
                             PAIR ;
195
                             DIP { DUP ; DIP { CAR } ; CDR } ;
196
                             SWAP ;
197
                             DROP ;
198
                             SWAP ;
199
                             PAIR } ;
200
                       SWAP ;
201
                       DIP 2 { DUP } ;
202
                       DIG 2 ;
203
                       CAR ;
204
                       CAR ;
205
                       DIP { DUP ; CAR } ;
206
                       GET ;
207
                       IF_NONE { EMPTY_MAP address nat ; PUSH nat 0 ; PAIR } {} ;
208
                       DIG 2 ;
209
                       DIP { DUP ; DIP { CDR } ; CAR } ;
210
                       SWAP ;
211
                       DROP ;
212
                       PAIR ;
213
                       DIP { DUP ; CAR } ;
214
                       SOME ;
215
                       DIP 3 { DUP } ;
216
                       DIG 3 ;
217
                       CAR ;
218
                       CAR ;
219
                       UPDATE ;
220
                       DIP { DUP ; DIP { CDR } ; CAR } ;
221
                       SWAP ;
222
                       DROP ;
223
                       PAIR ;
224
                       DUP ;
225
                       CDR ;
226
                       CDR ;
227
                       CDR ;
228
                       CDR ;
229
                       AMOUNT ;
230
                       ADD ;
231
                       DIP { DUP ; CDR } ;
232
                       DIP { DUP ; DIP { CAR } ; CDR } ;
233
                       DIP { DUP ; DIP { CAR } ; CDR } ;
234
                       DIP { DUP ; DIP { CAR } ; CDR } ;
235
                       SWAP ;
236
                       DROP ;
237
                       SWAP ;
238
                       PAIR ;
239
                       SWAP ;
240
                       PAIR ;
241
                       SWAP ;
242
                       PAIR ;
243
                       DIP { DUP ; DIP { CAR } ; CDR } ;
244
                       SWAP ;
245
                       DROP ;
246
                       SWAP ;
247
                       PAIR ;
248
                       DUP ;
249
                       CDR ;
250
                       CDR ;
251
                       CDR ;
252
                       CAR ;
253
                       DIP 2 { DUP } ;
254
                       DIG 2 ;
255
                       CDR ;
256
                       CAR ;
257
                       ADD ;
258
                       DIP { DUP ; CDR } ;
259
                       DIP { DUP ; DIP { CAR } ; CDR } ;
260
                       DIP { DUP ; DIP { CAR } ; CDR } ;
261
                       DIP { DUP ; DIP { CDR } ; CAR } ;
262
                       SWAP ;
263
                       DROP ;
264
                       PAIR ;
265
                       SWAP ;
266
                       PAIR ;
267
                       SWAP ;
268
                       PAIR ;
269
                       DIP { DUP ; DIP { CAR } ; CDR } ;
270
                       SWAP ;
271
                       DROP ;
272
                       SWAP ;
273
                       PAIR ;
274
                       DIP { DUP ; CDR ; CAR ; DIP { CAR ; CAR } } ;
275
                       DUP ;
276
                       CDR ;
277
                       CDR ;
278
                       CAR ;
279
                       CDR ;
280
                       CONTRACT %transfer (pair address (pair address nat)) ;
281
                       IF_NONE { CDR ; FAILWITH } {} ;
282
                       PUSH mutez 0 ;
283
                       DIG 3 ;
284
                       SELF ;
285
                       ADDRESS ;
286
                       DIG 5 ;
287
                       DIP { PAIR } ;
288
                       PAIR ;
289
                       TRANSFER_TOKENS ;
290
                       DIP { NIL operation } ;
291
                       CONS ;
292
                       PAIR }
293
                     { DIP { DUP } ;
294
                       SWAP ;
295
                       CDR ;
296
                       CDR ;
297
                       CDR ;
298
                       CDR ;
299
                       DIP { PUSH mutez 1 } ;
300
                       EDIV ;
301
                       IF_NONE { PUSH string "" ; FAILWITH } { CAR } ;
302
                       AMOUNT ;
303
                       DIP { PUSH mutez 1 } ;
304
                       EDIV ;
305
                       IF_NONE { PUSH string "" ; FAILWITH } { CAR } ;
306
                       DUP ;
307
                       DIP 4 { DUP } ;
308
                       DIG 4 ;
309
                       CDR ;
310
                       CDR ;
311
                       CDR ;
312
                       CAR ;
313
                       MUL ;
314
                       DIP 2 { DUP } ;
315
                       DIG 2 ;
316
                       SWAP ;
317
                       EDIV ;
318
                       IF_NONE
319
                         { PUSH string "divByZero." ; FAILWITH }
320
                         { DUP ; CAR ; DIP { CDR } ; SWAP ; INT ; EQ ; IF {} { PUSH nat 1 ; ADD } } ;
321
                       DUP ;
322
                       PUSH nat 0 ;
323
                       COMPARE ;
324
                       LT ;
325
                       IF {} { PUSH string "tokensDeposited is zero." ; FAILWITH } ;
326
                       SWAP ;
327
                       DIP 4 { DUP } ;
328
                       DIG 4 ;
329
                       CDR ;
330
                       CAR ;
331
                       CDR ;
332
                       CDR ;
333
                       MUL ;
334
                       DIP { SWAP } ;
335
                       EDIV ;
336
                       IF_NONE { FAILWITH } { CAR } ;
337
                       DIP 2 { DUP } ;
338
                       DIG 2 ;
339
                       CAR ;
340
                       CDR ;
341
                       DIP { DUP } ;
342
                       COMPARE ;
343
                       LE ;
344
                       IF
345
                         {}
346
                         { PUSH string "lqtMinted must be greater than or equal to minLqtMinted." ;
347
                           FAILWITH } ;
348
                       DIP { DIP { DUP } ;
349
                             SWAP ;
350
                             CDR ;
351
                             CAR ;
352
                             DIP { DUP } ;
353
                             COMPARE ;
354
                             GE ;
355
                             IF
356
                               {}
357
                               { PUSH string "tokensDeposited is greater than maxTokensDeposited." ;
358
                                 FAILWITH } } ;
359
                       DIP 3 { DUP } ;
360
                       DIG 3 ;
361
                       DIP 3 { DUP } ;
362
                       DIG 3 ;
363
                       CAR ;
364
                       CAR ;
365
                       DIP { CAR } ;
366
                       GET ;
367
                       IF_NONE { EMPTY_MAP address nat ; PUSH nat 0 ; PAIR } {} ;
368
                       DUP ;
369
                       CAR ;
370
                       DIP 2 { DUP } ;
371
                       DIG 2 ;
372
                       ADD ;
373
                       DIP { DUP ; DIP { CDR } ; CAR } ;
374
                       SWAP ;
375
                       DROP ;
376
                       PAIR ;
377
                       SOME ;
378
                       DIP 3 { DUP } ;
379
                       DIG 3 ;
380
                       CAR ;
381
                       CAR ;
382
                       DIP { DIP { DIG 3 ; DUP ; CAR } } ;
383
                       UPDATE ;
384
                       DIP { DUP ; DIP { CDR } ; CAR } ;
385
                       SWAP ;
386
                       DROP ;
387
                       PAIR ;
388
                       DUP ;
389
                       CDR ;
390
                       CAR ;
391
                       CDR ;
392
                       CDR ;
393
                       DIG 2 ;
394
                       ADD ;
395
                       DIP { DUP ; CDR } ;
396
                       DIP { DUP ; DIP { CDR } ; CAR } ;
397
                       DIP { DUP ; DIP { CAR } ; CDR } ;
398
                       DIP { DUP ; DIP { CAR } ; CDR } ;
399
                       SWAP ;
400
                       DROP ;
401
                       SWAP ;
402
                       PAIR ;
403
                       SWAP ;
404
                       PAIR ;
405
                       PAIR ;
406
                       DIP { DUP ; DIP { CAR } ; CDR } ;
407
                       SWAP ;
408
                       DROP ;
409
                       SWAP ;
410
                       PAIR ;
411
                       DUP ;
412
                       CDR ;
413
                       CDR ;
414
                       CDR ;
415
                       CDR ;
416
                       AMOUNT ;
417
                       ADD ;
418
                       DIP { DUP ; CDR } ;
419
                       DIP { DUP ; DIP { CAR } ; CDR } ;
420
                       DIP { DUP ; DIP { CAR } ; CDR } ;
421
                       DIP { DUP ; DIP { CAR } ; CDR } ;
422
                       SWAP ;
423
                       DROP ;
424
                       SWAP ;
425
                       PAIR ;
426
                       SWAP ;
427
                       PAIR ;
428
                       SWAP ;
429
                       PAIR ;
430
                       DIP { DUP ; DIP { CAR } ; CDR } ;
431
                       SWAP ;
432
                       DROP ;
433
                       SWAP ;
434
                       PAIR ;
435
                       DUP ;
436
                       CDR ;
437
                       CDR ;
438
                       CDR ;
439
                       CAR ;
440
                       DIP 2 { DUP } ;
441
                       DIG 2 ;
442
                       ADD ;
443
                       DIP { DUP ; CDR } ;
444
                       DIP { DUP ; DIP { CAR } ; CDR } ;
445
                       DIP { DUP ; DIP { CAR } ; CDR } ;
446
                       DIP { DUP ; DIP { CDR } ; CAR } ;
447
                       SWAP ;
448
                       DROP ;
449
                       PAIR ;
450
                       SWAP ;
451
                       PAIR ;
452
                       SWAP ;
453
                       PAIR ;
454
                       DIP { DUP ; DIP { CAR } ; CDR } ;
455
                       SWAP ;
456
                       DROP ;
457
                       SWAP ;
458
                       PAIR ;
459
                       DIP { DIP { CAR ; CAR } } ;
460
                       DUP ;
461
                       CDR ;
462
                       CDR ;
463
                       CAR ;
464
                       CDR ;
465
                       CONTRACT %transfer (pair address (pair address nat)) ;
466
                       IF_NONE { CDR ; FAILWITH } {} ;
467
                       PUSH mutez 0 ;
468
                       DIG 3 ;
469
                       SELF ;
470
                       ADDRESS ;
471
                       DIG 5 ;
472
                       DIP { PAIR } ;
473
                       PAIR ;
474
                       TRANSFER_TOKENS ;
475
                       DIP { NIL operation } ;
476
                       CONS ;
477
                       PAIR } } }
478
             { IF_LEFT
479
                 { DIP { DUP ;
480
                         CDR ;
481
                         CAR ;
482
                         CAR ;
483
                         IF
484
                           { PUSH string "selfIsUpdatingToken must be false." ; FAILWITH }
485
                           {} } ;
486
                   DUP ;
487
                   CDR ;
488
                   CDR ;
489
                   CDR ;
490
                   NOW ;
491
                   COMPARE ;
492
                   LT ;
493
                   IF {} { PUSH string "NOW is greater than deadline." ; FAILWITH } ;
494
                   PUSH mutez 0 ;
495
                   AMOUNT ;
496
                   COMPARE ;
497
                   EQ ;
498
                   IF {} { PUSH string "Amount must be zero." ; FAILWITH } ;
499
                   DUP ;
500
                   CDR ;
501
                   CAR ;
502
                   PUSH mutez 0 ;
503
                   COMPARE ;
504
                   LT ;
505
                   IF
506
                     {}
507
                     { PUSH string "minXtzWithdrawn must be greater than zero." ;
508
                       FAILWITH } ;
509
                   DUP ;
510
                   CDR ;
511
                   CDR ;
512
                   CAR ;
513
                   PUSH nat 0 ;
514
                   COMPARE ;
515
                   LT ;
516
                   IF
517
                     {}
518
                     { PUSH string "minTokensWithdrawn must be greater than zero." ;
519
                       FAILWITH } ;
520
                   DUP ;
521
                   CAR ;
522
                   CDR ;
523
                   CDR ;
524
                   PUSH nat 0 ;
525
                   COMPARE ;
526
                   LT ;
527
                   IF
528
                     {}
529
                     { PUSH string "lqtBurned must be greater than zero." ; FAILWITH } ;
530
                   DUP ;
531
                   CAR ;
532
                   CAR ;
533
                   DIP { DIP { DUP } ; SWAP ; CAR } ;
534
                   GET ;
535
                   IF_NONE { PUSH string "owner has no liquidity." ; FAILWITH } {} ;
536
                   SWAP ;
537
                   DUP ;
538
                   CAR ;
539
                   CDR ;
540
                   CDR ;
541
                   DIP 2 { DUP } ;
542
                   DIG 2 ;
543
                   CAR ;
544
                   COMPARE ;
545
                   GE ;
546
                   IF
547
                     {}
548
                     { PUSH string "lqtBurned is greater than owner's balance." ;
549
                       FAILWITH } ;
550
                   DUP ;
551
                   CAR ;
552
                   CAR ;
553
                   SENDER ;
554
                   COMPARE ;
555
                   EQ ;
556
                   IF
557
                     { SWAP ; CAR }
558
                     { SWAP ;
559
                       DUP ;
560
                       CDR ;
561
                       SENDER ;
562
                       GET ;
563
                       IF_NONE
564
                         { PUSH string "sender has no approval balance." ; FAILWITH }
565
                         {} ;
566
                       DIP { SWAP ; DUP ; CAR ; CDR ; CDR ; DIP { PUSH int 0 } } ;
567
                       SUB ;
568
                       DUP ;
569
                       DIP { COMPARE ;
570
                             GE ;
571
                             IF
572
                               {}
573
                               { PUSH string "sender approval balance is less than LQT burned." ;
574
                                 FAILWITH } } ;
575
                       ABS ;
576
                       SOME ;
577
                       DIG 2 ;
578
                       DUP ;
579
                       CDR ;
580
                       DIG 2 ;
581
                       SENDER ;
582
                       UPDATE ;
583
                       DIP { DUP ; DIP { CAR } ; CDR } ;
584
                       SWAP ;
585
                       DROP ;
586
                       SWAP ;
587
                       PAIR ;
588
                       DUP ;
589
                       CAR ;
590
                       DIP { SOME ;
591
                             DUG 1 ;
592
                             DUP ;
593
                             CAR ;
594
                             CAR ;
595
                             SWAP ;
596
                             DIP { DIP { DIP { DUP ; CAR } } ;
597
                                   UPDATE ;
598
                                   DIP { DUP ; DIP { CDR } ; CAR } ;
599
                                   SWAP ;
600
                                   DROP ;
601
                                   PAIR } } } ;
602
                   DIP { DUP } ;
603
                   SWAP ;
604
                   CAR ;
605
                   CDR ;
606
                   CDR ;
607
                   DIP 3 { DUP } ;
608
                   DIG 3 ;
609
                   CDR ;
610
                   CDR ;
611
                   CDR ;
612
                   CDR ;
613
                   DIP { PUSH mutez 1 } ;
614
                   EDIV ;
615
                   IF_NONE { PUSH string "" ; FAILWITH } { CAR } ;
616
                   MUL ;
617
                   DIP { DIP 2 { DUP } ; DIG 2 ; CDR ; CAR ; CDR ; CDR } ;
618
                   EDIV ;
619
                   IF_NONE { PUSH string "divByZero." ; FAILWITH } { CAR } ;
620
                   PUSH mutez 1 ;
621
                   MUL ;
622
                   DUP ;
623
                   DIP 3 { DUP } ;
624
                   DIG 3 ;
625
                   CDR ;
626
                   CAR ;
627
                   COMPARE ;
628
                   LE ;
629
                   IF
630
                     {}
631
                     { PUSH string "xtzWithdrawn is less than minXtzWithdrawn." ;
632
                       FAILWITH } ;
633
                   DIP 2 { DUP } ;
634
                   DIG 2 ;
635
                   CAR ;
636
                   CDR ;
637
                   CDR ;
638
                   DIP { DIP 3 { DUP } ; DIG 3 ; DUP ; CDR ; CAR ; CDR ; CDR ; SWAP ; CDR ; CDR ; CDR ; CAR } ;
639
                   MUL ;
640
                   EDIV ;
641
                   IF_NONE { PUSH string "divByZero." ; FAILWITH } { CAR } ;
642
                   DUP ;
643
                   DIP 4 { DUP } ;
644
                   DIG 4 ;
645
                   CDR ;
646
                   CDR ;
647
                   CAR ;
648
                   COMPARE ;
649
                   LE ;
650
                   IF
651
                     {}
652
                     { PUSH string "tokensWithdrawn is less than minTokensWithdrawn." ;
653
                       FAILWITH } ;
654
                   DIP 3 { DUP } ;
655
                   DIG 3 ;
656
                   CAR ;
657
                   CDR ;
658
                   CDR ;
659
                   DIG 3 ;
660
                   SUB ;
661
                   DUP ;
662
                   PUSH int 0 ;
663
                   COMPARE ;
664
                   LE ;
665
                   IF { ABS } { PUSH string "" ; FAILWITH } ;
666
                   DIG 4 ;
667
                   DUP ;
668
                   DIP 5 { DUP } ;
669
                   DIG 5 ;
670
                   CAR ;
671
                   CAR ;
672
                   DIP { CAR } ;
673
                   GET ;
674
                   IF_NONE { EMPTY_MAP address nat ; PUSH nat 0 ; PAIR } {} ;
675
                   DIG 2 ;
676
                   DIP { DUP ; DIP { CDR } ; CAR } ;
677
                   SWAP ;
678
                   DROP ;
679
                   PAIR ;
680
                   DIP { DUP ; CAR } ;
681
                   SOME ;
682
                   DIP 5 { DUP } ;
683
                   DIG 5 ;
684
                   CAR ;
685
                   CAR ;
686
                   UPDATE ;
687
                   DIP { DUP ; DIP { CDR } ; CAR } ;
688
                   SWAP ;
689
                   DROP ;
690
                   PAIR ;
691
                   DUP ;
692
                   CDR ;
693
                   CAR ;
694
                   CDR ;
695
                   CDR ;
696
                   DIP 4 { DUP } ;
697
                   DIG 4 ;
698
                   CAR ;
699
                   CDR ;
700
                   CDR ;
701
                   SWAP ;
702
                   SUB ;
703
                   DUP ;
704
                   PUSH int 0 ;
705
                   COMPARE ;
706
                   LE ;
707
                   IF { ABS } { PUSH string "" ; FAILWITH } ;
708
                   DIP { DUP ; CDR } ;
709
                   DIP { DUP ; DIP { CDR } ; CAR } ;
710
                   DIP { DUP ; DIP { CAR } ; CDR } ;
711
                   DIP { DUP ; DIP { CAR } ; CDR } ;
712
                   SWAP ;
713
                   DROP ;
714
                   SWAP ;
715
                   PAIR ;
716
                   SWAP ;
717
                   PAIR ;
718
                   PAIR ;
719
                   DIP { DUP ; DIP { CAR } ; CDR } ;
720
                   SWAP ;
721
                   DROP ;
722
                   SWAP ;
723
                   PAIR ;
724
                   DUP ;
725
                   CDR ;
726
                   CDR ;
727
                   CDR ;
728
                   CAR ;
729
                   DIP 2 { DUP } ;
730
                   DIG 2 ;
731
                   SWAP ;
732
                   SUB ;
733
                   DUP ;
734
                   PUSH int 0 ;
735
                   COMPARE ;
736
                   LE ;
737
                   IF { ABS } { PUSH string "" ; FAILWITH } ;
738
                   DIP { DUP ; CDR } ;
739
                   DIP { DUP ; DIP { CAR } ; CDR } ;
740
                   DIP { DUP ; DIP { CAR } ; CDR } ;
741
                   DIP { DUP ; DIP { CDR } ; CAR } ;
742
                   SWAP ;
743
                   DROP ;
744
                   PAIR ;
745
                   SWAP ;
746
                   PAIR ;
747
                   SWAP ;
748
                   PAIR ;
749
                   DIP { DUP ; DIP { CAR } ; CDR } ;
750
                   SWAP ;
751
                   DROP ;
752
                   SWAP ;
753
                   PAIR ;
754
                   DUP ;
755
                   CDR ;
756
                   CDR ;
757
                   CDR ;
758
                   CDR ;
759
                   DIP 3 { DUP } ;
760
                   DIG 3 ;
761
                   SWAP ;
762
                   SUB_MUTEZ ;
763
                   IF_NONE { PUSH string "negative mutez!" ; FAILWITH } {} ;
764
                   DIP { DUP ; CDR } ;
765
                   DIP { DUP ; DIP { CAR } ; CDR } ;
766
                   DIP { DUP ; DIP { CAR } ; CDR } ;
767
                   DIP { DUP ; DIP { CAR } ; CDR } ;
768
                   SWAP ;
769
                   DROP ;
770
                   SWAP ;
771
                   PAIR ;
772
                   SWAP ;
773
                   PAIR ;
774
                   SWAP ;
775
                   PAIR ;
776
                   DIP { DUP ; DIP { CAR } ; CDR } ;
777
                   SWAP ;
778
                   DROP ;
779
                   SWAP ;
780
                   PAIR ;
781
                   DIP 3 { DUP } ;
782
                   DIG 3 ;
783
                   CAR ;
784
                   CDR ;
785
                   CAR ;
786
                   CONTRACT unit ;
787
                   IF_NONE { CDR ; FAILWITH } {} ;
788
                   DIG 3 ;
789
                   UNIT ;
790
                   TRANSFER_TOKENS ;
791
                   DIP { DIP { DIP { CAR ; CDR ; CAR } } ;
792
                         DUP ;
793
                         CDR ;
794
                         CDR ;
795
                         CAR ;
796
                         CDR ;
797
                         CONTRACT %transfer (pair address (pair address nat)) ;
798
                         IF_NONE { CDR ; FAILWITH } {} ;
799
                         PUSH mutez 0 ;
800
                         DIG 3 ;
801
                         DIG 4 ;
802
                         PAIR ;
803
                         SELF ;
804
                         ADDRESS ;
805
                         PAIR ;
806
                         TRANSFER_TOKENS } ;
807
                   NIL operation ;
808
                   SWAP ;
809
                   CONS ;
810
                   SWAP ;
811
                   CONS ;
812
                   PAIR }
813
                 { IF_LEFT
814
                     { DIP { DUP ;
815
                             CDR ;
816
                             CAR ;
817
                             CAR ;
818
                             IF
819
                               { PUSH string "selfIsUpdatingToken must be false." ;
820
                                 FAILWITH }
821
                               {} } ;
822
                       DUP ;
823
                       CDR ;
824
                       CDR ;
825
                       NOW ;
826
                       COMPARE ;
827
                       LT ;
828
                       IF
829
                         {}
830
                         { PUSH string "NOW is greater than deadline." ; FAILWITH } ;
831
                       PUSH mutez 0 ;
832
                       AMOUNT ;
833
                       COMPARE ;
834
                       GT ;
835
                       IF
836
                         {}
837
                         { PUSH string "Amount must be greater than zero." ; FAILWITH } ;
838
                       DUP ;
839
                       CDR ;
840
                       CAR ;
841
                       PUSH nat 0 ;
842
                       COMPARE ;
843
                       LT ;
844
                       IF
845
                         {}
846
                         { PUSH string "minTokensBought must be greater than zero." ;
847
                           FAILWITH } ;
848
                       DIP { DUP ;
849
                             CDR ;
850
                             CDR ;
851
                             CDR ;
852
                             CDR ;
853
                             PUSH mutez 0 ;
854
                             COMPARE ;
855
                             LT ;
856
                             IF
857
                               {}
858
                               { PUSH string "xtzPool must be greater than zero." ;
859
                                 FAILWITH } } ;
860
                       DIP { DUP ;
861
                             CDR ;
862
                             CDR ;
863
                             CDR ;
864
                             CAR ;
865
                             PUSH nat 0 ;
866
                             COMPARE ;
867
                             LT ;
868
                             IF
869
                               {}
870
                               { PUSH string "tokenPool must be greater than zero" ;
871
                                 FAILWITH } } ;
872
                       DIP { DUP } ;
873
                       SWAP ;
874
                       CDR ;
875
                       CDR ;
876
                       CDR ;
877
                       CDR ;
878
                       DIP { PUSH mutez 1 } ;
879
                       EDIV ;
880
                       IF_NONE { PUSH string "" ; FAILWITH } { CAR } ;
881
                       PUSH nat 1000 ;
882
                       MUL ;
883
                       AMOUNT ;
884
                       DIP { PUSH mutez 1 } ;
885
                       EDIV ;
886
                       IF_NONE { PUSH string "" ; FAILWITH } { CAR } ;
887
                       DUP ;
888
                       DIP { PUSH nat 997 ; MUL ; ADD } ;
889
                       PUSH nat 997 ;
890
                       MUL ;
891
                       DIP 3 { DUP } ;
892
                       DIG 3 ;
893
                       CDR ;
894
                       CDR ;
895
                       CDR ;
896
                       CAR ;
897
                       MUL ;
898
                       EDIV ;
899
                       IF_NONE { PUSH string "divByZero." ; FAILWITH } { CAR } ;
900
                       DUP ;
901
                       DIP { DIP { DUP ; CDR ; CAR } ;
902
                             COMPARE ;
903
                             GE ;
904
                             IF
905
                               {}
906
                               { PUSH string "tokensBought is less than minTokensBought." ;
907
                                 FAILWITH } } ;
908
                       DUP ;
909
                       DIP 3 { DUP } ;
910
                       DIG 3 ;
911
                       CDR ;
912
                       CDR ;
913
                       CDR ;
914
                       CAR ;
915
                       SUB ;
916
                       DUP ;
917
                       PUSH int 0 ;
918
                       COMPARE ;
919
                       LE ;
920
                       IF { ABS } { PUSH string "" ; FAILWITH } ;
921
                       DIP { DIG 2 } ;
922
                       DIP { DUP ; CDR } ;
923
                       DIP { DUP ; DIP { CAR } ; CDR } ;
924
                       DIP { DUP ; DIP { CAR } ; CDR } ;
925
                       DIP { DUP ; DIP { CDR } ; CAR } ;
926
                       SWAP ;
927
                       DROP ;
928
                       PAIR ;
929
                       SWAP ;
930
                       PAIR ;
931
                       SWAP ;
932
                       PAIR ;
933
                       DIP { DUP ; DIP { CAR } ; CDR } ;
934
                       SWAP ;
935
                       DROP ;
936
                       SWAP ;
937
                       PAIR ;
938
                       DUP ;
939
                       CDR ;
940
                       CDR ;
941
                       CDR ;
942
                       CDR ;
943
                       AMOUNT ;
944
                       ADD ;
945
                       DIP { DUP ; CDR } ;
946
                       DIP { DUP ; DIP { CAR } ; CDR } ;
947
                       DIP { DUP ; DIP { CAR } ; CDR } ;
948
                       DIP { DUP ; DIP { CAR } ; CDR } ;
949
                       SWAP ;
950
                       DROP ;
951
                       SWAP ;
952
                       PAIR ;
953
                       SWAP ;
954
                       PAIR ;
955
                       SWAP ;
956
                       PAIR ;
957
                       DIP { DUP ; DIP { CAR } ; CDR } ;
958
                       SWAP ;
959
                       DROP ;
960
                       SWAP ;
961
                       PAIR ;
962
                       DIP { DIP { CAR ; SELF ; ADDRESS } } ;
963
                       DUP ;
964
                       CDR ;
965
                       CDR ;
966
                       CAR ;
967
                       CDR ;
968
                       CONTRACT %transfer (pair address (pair address nat)) ;
969
                       IF_NONE { CDR ; FAILWITH } {} ;
970
                       PUSH mutez 0 ;
971
                       DIG 3 ;
972
                       DIG 5 ;
973
                       DIG 5 ;
974
                       DIP { PAIR } ;
975
                       PAIR ;
976
                       TRANSFER_TOKENS ;
977
                       DIP { NIL operation } ;
978
                       CONS ;
979
                       PAIR }
980
                     { DIP { DUP ;
981
                             CDR ;
982
                             CAR ;
983
                             CAR ;
984
                             IF
985
                               { PUSH string "selfIsUpdatingToken must be false." ;
986
                                 FAILWITH }
987
                               {} } ;
988
                       DUP ;
989
                       CDR ;
990
                       CDR ;
991
                       CDR ;
992
                       NOW ;
993
                       COMPARE ;
994
                       LT ;
995
                       IF
996
                         {}
997
                         { PUSH string "NOW is greater than deadline." ; FAILWITH } ;
998
                       PUSH mutez 0 ;
999
                       AMOUNT ;
1000
                       COMPARE ;
1001
                       EQ ;
1002
                       IF {} { PUSH string "Amount must be zero." ; FAILWITH } ;
1003
                       DIP { DUP ;
1004
                             CDR ;
1005
                             CDR ;
1006
                             CDR ;
1007
                             CDR ;
1008
                             PUSH mutez 0 ;
1009
                             COMPARE ;
1010
                             LT ;
1011
                             IF
1012
                               {}
1013
                               { PUSH string "xtzPool must be greater than zero." ;
1014
                                 FAILWITH } } ;
1015
                       DIP { DUP ;
1016
                             CDR ;
1017
                             CDR ;
1018
                             CDR ;
1019
                             CAR ;
1020
                             PUSH nat 0 ;
1021
                             COMPARE ;
1022
                             LT ;
1023
                             IF
1024
                               {}
1025
                               { PUSH string "tokenPool must be greater than zero" ;
1026
                                 FAILWITH } } ;
1027
                       DUP ;
1028
                       CDR ;
1029
                       CAR ;
1030
                       PUSH nat 0 ;
1031
                       COMPARE ;
1032
                       LT ;
1033
                       IF {} { PUSH string "tokensSold is zero" ; FAILWITH } ;
1034
                       DUP ;
1035
                       CDR ;
1036
                       CDR ;
1037
                       CAR ;
1038
                       PUSH mutez 0 ;
1039
                       COMPARE ;
1040
                       LT ;
1041
                       IF
1042
                         {}
1043
                         { PUSH string "minXtzBought must be greater than zero." ;
1044
                           FAILWITH } ;
1045
                       DUP ;
1046
                       CDR ;
1047
                       CAR ;
1048
                       PUSH nat 997 ;
1049
                       MUL ;
1050
                       DIP 2 { DUP } ;
1051
                       DIG 2 ;
1052
                       CDR ;
1053
                       CDR ;
1054
                       CDR ;
1055
                       CAR ;
1056
                       PUSH nat 1000 ;
1057
                       MUL ;
1058
                       ADD ;
1059
                       DIP { DUP } ;
1060
                       SWAP ;
1061
                       CDR ;
1062
                       CAR ;
1063
                       PUSH nat 997 ;
1064
                       MUL ;
1065
                       DIP 3 { DUP } ;
1066
                       DIG 3 ;
1067
                       CDR ;
1068
                       CDR ;
1069
                       CDR ;
1070
                       CDR ;
1071
                       DIP { PUSH mutez 1 } ;
1072
                       EDIV ;
1073
                       IF_NONE { PUSH string "" ; FAILWITH } { CAR } ;
1074
                       MUL ;
1075
                       EDIV ;
1076
                       IF_NONE { PUSH string "divByZero." ; FAILWITH } { CAR } ;
1077
                       PUSH mutez 1 ;
1078
                       MUL ;
1079
                       DUP ;
1080
                       DIP { DIP { DUP ; CDR ; CDR ; CAR } ;
1081
                             COMPARE ;
1082
                             GE ;
1083
                             IF
1084
                               {}
1085
                               { PUSH string "xtzBought is less than minXtzBought." ;
1086
                                 FAILWITH } } ;
1087
                       DIP { SWAP ;
1088
                             DUP ;
1089
                             CDR ;
1090
                             CDR ;
1091
                             CDR ;
1092
                             CAR ;
1093
                             DIP 2 { DUP } ;
1094
                             DIG 2 ;
1095
                             CDR ;
1096
                             CAR ;
1097
                             ADD ;
1098
                             DIP { DUP ; CDR } ;
1099
                             DIP { DUP ; DIP { CAR } ; CDR } ;
1100
                             DIP { DUP ; DIP { CAR } ; CDR } ;
1101
                             DIP { DUP ; DIP { CDR } ; CAR } ;
1102
                             SWAP ;
1103
                             DROP ;
1104
                             PAIR ;
1105
                             SWAP ;
1106
                             PAIR ;
1107
                             SWAP ;
1108
                             PAIR ;
1109
                             DIP { DUP ; DIP { CAR } ; CDR } ;
1110
                             SWAP ;
1111
                             DROP ;
1112
                             SWAP ;
1113
                             PAIR } ;
1114
                       DUP ;
1115
                       DIP { DIP { DUP ; CDR ; CDR ; CDR ; CDR } ;
1116
                             SWAP ;
1117
                             SUB_MUTEZ ;
1118
                             IF_NONE { PUSH string "negative mutez!" ; FAILWITH } {} ;
1119
                             DIP { DUP ; CDR } ;
1120
                             DIP { DUP ; DIP { CAR } ; CDR } ;
1121
                             DIP { DUP ; DIP { CAR } ; CDR } ;
1122
                             DIP { DUP ; DIP { CAR } ; CDR } ;
1123
                             SWAP ;
1124
                             DROP ;
1125
                             SWAP ;
1126
                             PAIR ;
1127
                             SWAP ;
1128
                             PAIR ;
1129
                             SWAP ;
1130
                             PAIR ;
1131
                             DIP { DUP ; DIP { CAR } ; CDR } ;
1132
                             SWAP ;
1133
                             DROP ;
1134
                             SWAP ;
1135
                             PAIR } ;
1136
                       DIP 2 { DUP } ;
1137
                       DIG 2 ;
1138
                       CAR ;
1139
                       CDR ;
1140
                       CONTRACT unit ;
1141
                       IF_NONE { FAILWITH } {} ;
1142
                       DIG 1 ;
1143
                       UNIT ;
1144
                       TRANSFER_TOKENS ;
1145
                       DIP { DIP { DUP ; CDR ; CAR ; DIP { CAR ; CAR } } ;
1146
                             DUP ;
1147
                             CDR ;
1148
                             CDR ;
1149
                             CAR ;
1150
                             CDR ;
1151
                             CONTRACT %transfer (pair address (pair address nat)) ;
1152
                             IF_NONE { CDR ; FAILWITH } {} ;
1153
                             PUSH mutez 0 ;
1154
                             DIG 3 ;
1155
                             SELF ;
1156
                             ADDRESS ;
1157
                             DIG 5 ;
1158
                             DIP { PAIR } ;
1159
                             PAIR ;
1160
                             TRANSFER_TOKENS } ;
1161
                       NIL operation ;
1162
                       DIG 2 ;
1163
                       CONS ;
1164
                       SWAP ;
1165
                       CONS ;
1166
                       PAIR } } } }
1167
         { IF_LEFT
1168
             { IF_LEFT
1169
                 { DIP { DUP ;
1170
                         CDR ;
1171
                         CAR ;
1172
                         CAR ;
1173
                         IF
1174
                           { PUSH string "selfIsUpdatingToken must be false." ; FAILWITH }
1175
                           {} } ;
1176
                   PUSH mutez 0 ;
1177
                   AMOUNT ;
1178
                   COMPARE ;
1179
                   EQ ;
1180
                   IF {} { PUSH string "Amount must be zero." ; FAILWITH } ;
1181
                   DUP ;
1182
                   CDR ;
1183
                   CDR ;
1184
                   CDR ;
1185
                   NOW ;
1186
                   COMPARE ;
1187
                   LT ;
1188
                   IF {} { PUSH string "NOW is greater than deadline." ; FAILWITH } ;
1189
                   DUP ;
1190
                   CDR ;
1191
                   CDR ;
1192
                   CAR ;
1193
                   PUSH nat 0 ;
1194
                   COMPARE ;
1195
                   LT ;
1196
                   IF {} { PUSH string "tokensSold is zero" ; FAILWITH } ;
1197
                   DUP ;
1198
                   CAR ;
1199
                   CDR ;
1200
                   CAR ;
1201
                   PUSH nat 0 ;
1202
                   COMPARE ;
1203
                   LT ;
1204
                   IF
1205
                     {}
1206
                     { PUSH string "minTokensBought must be greater than zero." ;
1207
                       FAILWITH } ;
1208
                   DIP { DUP ;
1209
                         CDR ;
1210
                         CDR ;
1211
                         CDR ;
1212
                         CDR ;
1213
                         PUSH mutez 0 ;
1214
                         COMPARE ;
1215
                         LT ;
1216
                         IF
1217
                           {}
1218
                           { PUSH string "xtzPool must be greater than zero." ; FAILWITH } } ;
1219
                   DIP { DUP ;
1220
                         CDR ;
1221
                         CDR ;
1222
                         CDR ;
1223
                         CAR ;
1224
                         PUSH nat 0 ;
1225
                         COMPARE ;
1226
                         LT ;
1227
                         IF
1228
                           {}
1229
                           { PUSH string "tokenPool must be greater than zero" ;
1230
                             FAILWITH } } ;
1231
                   DUP ;
1232
                   CDR ;
1233
                   CDR ;
1234
                   CAR ;
1235
                   PUSH nat 997 ;
1236
                   MUL ;
1237
                   DIP 2 { DUP } ;
1238
                   DIG 2 ;
1239
                   CDR ;
1240
                   CDR ;
1241
                   CDR ;
1242
                   CAR ;
1243
                   PUSH nat 1000 ;
1244
                   MUL ;
1245
                   ADD ;
1246
                   DIP { DUP } ;
1247
                   SWAP ;
1248
                   CDR ;
1249
                   CDR ;
1250
                   CAR ;
1251
                   PUSH nat 997 ;
1252
                   MUL ;
1253
                   DIP 3 { DUP } ;
1254
                   DIG 3 ;
1255
                   CDR ;
1256
                   CDR ;
1257
                   CDR ;
1258
                   CDR ;
1259
                   DIP { PUSH mutez 1 } ;
1260
                   EDIV ;
1261
                   IF_NONE { PUSH string "" ; FAILWITH } { CAR } ;
1262
                   MUL ;
1263
                   EDIV ;
1264
                   IF_NONE { PUSH string "divByZero." ; FAILWITH } { CAR } ;
1265
                   PUSH mutez 1 ;
1266
                   MUL ;
1267
                   DIP { DUP } ;
1268
                   SWAP ;
1269
                   CDR ;
1270
                   CDR ;
1271
                   CAR ;
1272
                   DIP 3 { DUP } ;
1273
                   DIG 3 ;
1274
                   CDR ;
1275
                   CDR ;
1276
                   CDR ;
1277
                   CAR ;
1278
                   ADD ;
1279
                   DIP { DIG 2 } ;
1280
                   DIP { DUP ; CDR } ;
1281
                   DIP { DUP ; DIP { CAR } ; CDR } ;
1282
                   DIP { DUP ; DIP { CAR } ; CDR } ;
1283
                   DIP { DUP ; DIP { CDR } ; CAR } ;
1284
                   SWAP ;
1285
                   DROP ;
1286
                   PAIR ;
1287
                   SWAP ;
1288
                   PAIR ;
1289
                   SWAP ;
1290
                   PAIR ;
1291
                   DIP { DUP ; DIP { CAR } ; CDR } ;
1292
                   SWAP ;
1293
                   DROP ;
1294
                   SWAP ;
1295
                   PAIR ;
1296
                   DUP ;
1297
                   CDR ;
1298
                   CDR ;
1299
                   CDR ;
1300
                   CDR ;
1301
                   DIP 2 { DUP } ;
1302
                   DIG 2 ;
1303
                   SWAP ;
1304
                   SUB_MUTEZ ;
1305
                   IF_NONE { PUSH string "negative mutez!" ; FAILWITH } {} ;
1306
                   DIP { DUP ; CDR } ;
1307
                   DIP { DUP ; DIP { CAR } ; CDR } ;
1308
                   DIP { DUP ; DIP { CAR } ; CDR } ;
1309
                   DIP { DUP ; DIP { CAR } ; CDR } ;
1310
                   SWAP ;
1311
                   DROP ;
1312
                   SWAP ;
1313
                   PAIR ;
1314
                   SWAP ;
1315
                   PAIR ;
1316
                   SWAP ;
1317
                   PAIR ;
1318
                   DIP { DUP ; DIP { CAR } ; CDR } ;
1319
                   SWAP ;
1320
                   DROP ;
1321
                   SWAP ;
1322
                   PAIR ;
1323
                   DIP 2 { DUP } ;
1324
                   DIG 2 ;
1325
                   CAR ;
1326
                   CAR ;
1327
                   CONTRACT %xtzToToken (pair address (pair nat timestamp)) ;
1328
                   IF_NONE { CDR ; FAILWITH } {} ;
1329
                   DIG 2 ;
1330
                   DIP 3 { DUP } ;
1331
                   DIG 3 ;
1332
                   DUP ;
1333
                   CDR ;
1334
                   CAR ;
1335
                   DIP { DUP ; CAR ; CDR ; CAR ; DIP { DUP ; CDR ; CDR ; CDR } ; PAIR } ;
1336
                   PAIR ;
1337
                   SWAP ;
1338
                   DROP ;
1339
                   TRANSFER_TOKENS ;
1340
                   SWAP ;
1341
                   DIP { SWAP ; DUP ; CDR ; CDR ; CAR ; DIP { CAR ; CDR ; CDR } } ;
1342
                   DUP ;
1343
                   CDR ;
1344
                   CDR ;
1345
                   CAR ;
1346
                   CDR ;
1347
                   CONTRACT %transfer (pair address (pair address nat)) ;
1348
                   IF_NONE { CDR ; FAILWITH } {} ;
1349
                   PUSH mutez 0 ;
1350
                   DIG 3 ;
1351
                   SELF ;
1352
                   ADDRESS ;
1353
                   DIG 5 ;
1354
                   DIP { PAIR } ;
1355
                   PAIR ;
1356
                   TRANSFER_TOKENS ;
1357
                   NIL operation ;
1358
                   SWAP ;
1359
                   CONS ;
1360
                   DIP { SWAP } ;
1361
                   SWAP ;
1362
                   CONS ;
1363
                   PAIR }
1364
                 { IF_LEFT
1365
                     { PUSH mutez 0 ;
1366
                       AMOUNT ;
1367
                       COMPARE ;
1368
                       EQ ;
1369
                       IF {} { PUSH string "Amount must be zero." ; FAILWITH } ;
1370
                       IMPLICIT_ACCOUNT ;
1371
                       ADDRESS ;
1372
                       SENDER ;
1373
                       COMPARE ;
1374
                       EQ ;
1375
                       IF {} { PUSH string "unsafeUpdateTokenPool" ; FAILWITH } ;
1376
                       DUP ;
1377
                       CDR ;
1378
                       CAR ;
1379
                       CAR ;
1380
                       IF
1381
                         { PUSH string "selfIsUpdatingToken must be false." ; FAILWITH }
1382
                         {} ;
1383
                       DUP ;
1384
                       CDR ;
1385
                       PUSH bool True ;
1386
                       DIP { DUP ; DIP { CDR } ; CAR } ;
1387
                       DIP { DUP ; DIP { CDR } ; CAR } ;
1388
                       SWAP ;
1389
                       DROP ;
1390
                       PAIR ;
1391
                       PAIR ;
1392
                       DIP { DUP ; DIP { CAR } ; CDR } ;
1393
                       SWAP ;
1394
                       DROP ;
1395
                       SWAP ;
1396
                       PAIR ;
1397
                       DUP ;
1398
                       CDR ;
1399
                       CDR ;
1400
                       CAR ;
1401
                       CDR ;
1402
                       CONTRACT %getBalance (pair address (contract nat)) ;
1403
                       IF_NONE { CDR ; FAILWITH } {} ;
1404
                       PUSH mutez 0 ;
1405
                       SELF %updateTokenPoolInternal ;
1406
                       SELF ;
1407
                       ADDRESS ;
1408
                       PAIR ;
1409
                       TRANSFER_TOKENS ;
1410
                       DIP { NIL operation } ;
1411
                       CONS ;
1412
                       PAIR }
1413
                     { PUSH mutez 0 ;
1414
                       AMOUNT ;
1415
                       COMPARE ;
1416
                       EQ ;
1417
                       IF {} { PUSH string "Amount must be zero." ; FAILWITH } ;
1418
                       DIP { DUP } ;
1419
                       SWAP ;
1420
                       CDR ;
1421
                       CAR ;
1422
                       CAR ;
1423
                       IF
1424
                         {}
1425
                         { PUSH string "Dexter did not initiate this operation." ;
1426
                           FAILWITH } ;
1427
                       DIP { DUP } ;
1428
                       SWAP ;
1429
                       CDR ;
1430
                       CDR ;
1431
                       CAR ;
1432
                       CDR ;
1433
                       SENDER ;
1434
                       COMPARE ;
1435
                       EQ ;
1436
                       IF
1437
                         {}
1438
                         { PUSH string "The sender is not the token contract associated with this contract." ;
1439
                           FAILWITH } ;
1440
                       DIP { DUP ; CDR } ;
1441
                       DIP { DUP ; DIP { CAR } ; CDR } ;
1442
                       DIP { DUP ; DIP { CAR } ; CDR } ;
1443
                       DIP { DUP ; DIP { CDR } ; CAR } ;
1444
                       SWAP ;
1445
                       DROP ;
1446
                       PAIR ;
1447
                       SWAP ;
1448
                       PAIR ;
1449
                       SWAP ;
1450
                       PAIR ;
1451
                       DIP { DUP ; DIP { CAR } ; CDR } ;
1452
                       SWAP ;
1453
                       DROP ;
1454
                       SWAP ;
1455
                       PAIR ;
1456
                       DUP ;
1457
                       CDR ;
1458
                       PUSH bool False ;
1459
                       DIP { DUP ; DIP { CDR } ; CAR } ;
1460
                       DIP { DUP ; DIP { CDR } ; CAR } ;
1461
                       SWAP ;
1462
                       DROP ;
1463
                       PAIR ;
1464
                       PAIR ;
1465
                       DIP { DUP ; DIP { CAR } ; CDR } ;
1466
                       SWAP ;
1467
                       DROP ;
1468
                       SWAP ;
1469
                       PAIR ;
1470
                       NIL operation ;
1471
                       PAIR } } }
1472
             { IF_LEFT
1473
                 { DIP { DUP ;
1474
                         CDR ;
1475
                         CAR ;
1476
                         CAR ;
1477
                         IF
1478
                           { PUSH string "selfIsUpdatingToken must be false." ; FAILWITH }
1479
                           {} } ;
1480
                   PUSH mutez 0 ;
1481
                   AMOUNT ;
1482
                   COMPARE ;
1483
                   EQ ;
1484
                   IF {} { PUSH string "Amount must be zero." ; FAILWITH } ;
1485
                   DIP { DUP } ;
1486
                   SWAP ;
1487
                   CDR ;
1488
                   CDR ;
1489
                   CAR ;
1490
                   CAR ;
1491
                   SENDER ;
1492
                   COMPARE ;
1493
                   EQ ;
1494
                   IF
1495
                     {}
1496
                     { PUSH string "sender is not the contract manager." ; FAILWITH } ;
1497
                   DIP { DUP } ;
1498
                   SWAP ;
1499
                   CDR ;
1500
                   CAR ;
1501
                   CDR ;
1502
                   CAR ;
1503
                   NOT ;
1504
                   IF
1505
                     {}
1506
                     { PUSH string "Cannot change the baker while freezeBaker is true." ;
1507
                       FAILWITH } ;
1508
                   DUP ;
1509
                   CAR ;
1510
                   DIP { CDR } ;
1511
                   SET_DELEGATE ;
1512
                   DIP { DIP { DUP ; CDR } ;
1513
                         DIP { DUP ; DIP { CDR } ; CAR } ;
1514
                         DIP { DUP ; DIP { CAR } ; CDR } ;
1515
                         DIP { DUP ; DIP { CDR } ; CAR } ;
1516
                         SWAP ;
1517
                         DROP ;
1518
                         PAIR ;
1519
                         SWAP ;
1520
                         PAIR ;
1521
                         PAIR ;
1522
                         DIP { DUP ; DIP { CAR } ; CDR } ;
1523
                         SWAP ;
1524
                         DROP ;
1525
                         SWAP ;
1526
                         PAIR ;
1527
                         NIL operation } ;
1528
                   CONS ;
1529
                   PAIR }
1530
                 { IF_LEFT
1531
                     { DIP { DUP ;
1532
                             CDR ;
1533
                             CAR ;
1534
                             CAR ;
1535
                             IF
1536
                               { PUSH string "selfIsUpdatingToken must be false." ;
1537
                                 FAILWITH }
1538
                               {} } ;
1539
                       PUSH mutez 0 ;
1540
                       AMOUNT ;
1541
                       COMPARE ;
1542
                       EQ ;
1543
                       IF {} { PUSH string "Amount must be zero." ; FAILWITH } ;
1544
                       DIP { DUP } ;
1545
                       SWAP ;
1546
                       CDR ;
1547
                       CDR ;
1548
                       CAR ;
1549
                       CAR ;
1550
                       SENDER ;
1551
                       COMPARE ;
1552
                       EQ ;
1553
                       IF
1554
                         {}
1555
                         { PUSH string "sender is not the contract manager." ; FAILWITH } ;
1556
                       DIP { DUP ; CDR } ;
1557
                       DIP { DUP ; DIP { CAR } ; CDR } ;
1558
                       DIP { DUP ; DIP { CDR } ; CAR } ;
1559
                       DIP { DUP ; DIP { CDR } ; CAR } ;
1560
                       SWAP ;
1561
                       DROP ;
1562
                       PAIR ;
1563
                       PAIR ;
1564
                       SWAP ;
1565
                       PAIR ;
1566
                       DIP { DUP ; DIP { CAR } ; CDR } ;
1567
                       SWAP ;
1568
                       DROP ;
1569
                       SWAP ;
1570
                       PAIR ;
1571
                       NIL operation ;
1572
                       PAIR }
1573
                     { DROP ;
1574
                       DUP ;
1575
                       CDR ;
1576
                       CAR ;
1577
                       CAR ;
1578
                       IF
1579
                         { PUSH string "selfIsUpdatingToken must be false." ; FAILWITH }
1580
                         {} ;
1581
                       DUP ;
1582
                       CDR ;
1583
                       CDR ;
1584
                       CDR ;
1585
                       CDR ;
1586
                       AMOUNT ;
1587
                       ADD ;
1588
                       DIP { DUP ; CDR } ;
1589
                       DIP { DUP ; DIP { CAR } ; CDR } ;
1590
                       DIP { DUP ; DIP { CAR } ; CDR } ;
1591
                       DIP { DUP ; DIP { CAR } ; CDR } ;
1592
                       SWAP ;
1593
                       DROP ;
1594
                       SWAP ;
1595
                       PAIR ;
1596
                       SWAP ;
1597
                       PAIR ;
1598
                       SWAP ;
1599
                       PAIR ;
1600
                       DIP { DUP ; DIP { CAR } ; CDR } ;
1601
                       SWAP ;
1602
                       DROP ;
1603
                       SWAP ;
1604
                       PAIR ;
1605
                       NIL operation ;
1606
                       PAIR } } } } }