BCD

Tezos Contract Explorer
Search Networks Deploy
  • Home
  • /
  • Mainnet
  • /
  • uXTZ/XTZ FlatYouves legacy 2
Delegatable
operations (8.15K)Storage Code Interact Tokens Fork Views Statistics Details
Latest
​x
735
1315
 
1
{ parameter (or
2
              (or
3
                (or
4
                  (or
5
                    (or (unit %acceptAdminProposal)
6
                        (pair %addLiquidity (address %owner)
7
                                            (pair (nat %minLqtMinted)
8
                                                  (pair (nat %maxTokensDeposited)
9
                                                        (timestamp %deadline)))))
10
                    (or
11
                      (pair %addLiquidityInternal
12
                        (pair (address %owner)
13
                              (pair (nat %minLqtMinted)
14
                                    (pair (nat %maxTokensDeposited)
15
                                          (timestamp %deadline))))
16
                        address)
17
                      (pair %cashToToken (address %to)
18
                                         (pair (nat %minTokensBought)
19
                                               (timestamp %deadline)))))
20
                  (or
21
                    (or
22
                      (pair %cashToTokenInternal
23
                        (pair (address %to)
24
                              (pair (nat %minTokensBought) (timestamp %deadline)))
25
                        address)
26
                      (pair %changeFee (nat %numerator) (nat %denominator)))
27
                    (or (unit %default) (contract %fetchLqtTokenPriceInCash nat))))
28
                (or
29
                  (or
30
                    (or (contract %fetchLqtTokenPriceInToken nat)
31
                        (pair %fetchLqtTokenPriceInternal (contract nat)
32
                                                          (or (unit %cash) (unit %token))))
33
                    (or (address %proposeNewAdmin)
34
                        (pair %removeLiquidity (address %to)
35
                                               (pair (nat %lqtBurned)
36
                                                     (pair (nat %minCashWithdrawn)
37
                                                           (pair
38
                                                             (nat %minTokensWithdrawn)
39
                                                             (timestamp %deadline)))))))
40
                  (or
41
                    (or
42
                      (pair %removeLiquidityInternal
43
                        (pair (address %to)
44
                              (pair (nat %lqtBurned)
45
                                    (pair (nat %minCashWithdrawn)
46
                                          (pair (nat %minTokensWithdrawn)
47
                                                (timestamp %deadline)))))
48
                        address)
49
                      (option %setDelegate key_hash))
50
                    (or (address %setLqtAddress) (address %setRewardRecipient)))))
51
              (or
52
                (or
53
                  (pair %tokenToCash (address %to)
54
                                     (pair (nat %tokensSold)
55
                                           (pair (nat %minCashBought)
56
                                                 (timestamp %deadline))))
57
                  (pair %tokenToCashInternal
58
                    (pair (address %to)
59
                          (pair (nat %tokensSold)
60
                                (pair (nat %minCashBought) (timestamp %deadline))))
61
                    address))
62
                (or (unit %updatePools)
63
                    (list %updateTokenPoolInternal (pair (pair address nat) nat))))) ;
64
  storage (pair (address %tokenAddress)
65
                (pair (nat %tokenId)
66
                      (pair (nat %tokenPool)
67
                            (pair (nat %tokenMultiplier)
68
                                  (pair (nat %cashPool)
69
                                        (pair (nat %cashMultiplier)
70
                                              (pair (address %admin)
71
                                                    (pair (address %proposedAdmin)
72
                                                          (pair (nat %lqtTotal)
73
                                                                (pair
74
                                                                  (address %lqtAddress)
75
                                                                  (pair
76
                                                                    (address %rewardRecipient)
77
                                                                    (pair
78
                                                                      (nat %pendingPoolUpdates)
79
                                                                      (pair
80
                                                                        (pair %feeRatio
81
                                                                          (nat %numerator)
82
                                                                          (nat %denominator))
83
                                                                        (address %targetPriceOracle)))))))))))))) ;
84
  code { LAMBDA
85
           (pair nat nat)
86
           (pair nat nat)
87
           { UNPAIR ;
88
             DUP 2 ;
89
             DUP 2 ;
90
             ADD ;
91
             DUG 2 ;
92
             SUB ;
93
             DUP 2 ;
94
             DUP 3 ;
95
             MUL ;
96
             DUP ;
97
             MUL ;
98
             DUP ;
99
             MUL ;
100
             DIG 2 ;
101
             DUP 2 ;
102
             EDIV ;
103
             IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
104
             CAR ;
105
             DUP 3 ;
106
             DUP 4 ;
107
             MUL ;
108
             DUP ;
109
             MUL ;
110
             DUP ;
111
             MUL ;
112
             PUSH int 0 ;
113
             DUP 5 ;
114
             COMPARE ;
115
             EQ ;
116
             IF
117
               { DIG 3 ; DROP ; PUSH int 0 }
118
               { DIG 3 ; DUP 2 ; EDIV ; IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ; CAR } ;
119
             SWAP ;
120
             DIG 3 ;
121
             SUB ;
122
             ISNAT ;
123
             IF_NONE { PUSH nat 2 ; FAILWITH } {} ;
124
             DUG 2 ;
125
             ADD ;
126
             ISNAT ;
127
             IF_NONE { PUSH nat 2 ; FAILWITH } {} ;
128
             PUSH nat 8 ;
129
             MUL ;
130
             SWAP ;
131
             PAIR } ;
132
         LAMBDA
133
           (pair (lambda (pair nat nat) (pair nat nat))
134
                 (pair (pair (pair nat nat) (pair int nat)) (pair nat nat)))
135
           nat
136
           { UNPAIR ;
137
             SWAP ;
138
             LEFT nat ;
139
             LOOP_LEFT { PUSH int 0 ;
140
                         DUP 2 ;
141
                         CAR ;
142
                         CDR ;
143
                         CAR ;
144
                         COMPARE ;
145
                         EQ ;
146
                         IF
147
                           { CAR ;
148
                             CAR ;
149
                             CDR ;
150
                             RIGHT (pair (pair (pair nat nat) (pair int nat))
151
                                         (pair nat nat)) }
152
                           { DUP ;
153
                             CAR ;
154
                             CAR ;
155
                             CDR ;
156
                             DUP 2 ;
157
                             CDR ;
158
                             CDR ;
159
                             SUB ;
160
                             ISNAT ;
161
                             IF_NONE { PUSH nat 2 ; FAILWITH } {} ;
162
                             DUP 2 ;
163
                             CAR ;
164
                             CAR ;
165
                             CAR ;
166
                             DUP 3 ;
167
                             CDR ;
168
                             CAR ;
169
                             ADD ;
170
                             PAIR ;
171
                             DUP 3 ;
172
                             SWAP ;
173
                             EXEC ;
174
                             UNPAIR ;
175
                             DUP 3 ;
176
                             CAR ;
177
                             CDR ;
178
                             CDR ;
179
                             SWAP ;
180
                             SUB ;
181
                             ISNAT ;
182
                             IF_NONE
183
                               { DROP ; PUSH nat 2 ; FAILWITH }
184
                               { EDIV ;
185
                                 IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
186
                                 CAR ;
187
                                 DUP 2 ;
188
                                 CAR ;
189
                                 CAR ;
190
                                 CDR ;
191
                                 ADD } ;
192
                             DUP 2 ;
193
                             CDR ;
194
                             DUP 3 ;
195
                             CAR ;
196
                             CDR ;
197
                             DIG 2 ;
198
                             DUP 4 ;
199
                             CAR ;
200
                             CAR ;
201
                             CAR ;
202
                             PAIR ;
203
                             PAIR ;
204
                             PAIR ;
205
                             DUP ;
206
                             CDR ;
207
                             DUP 2 ;
208
                             CAR ;
209
                             CDR ;
210
                             CDR ;
211
                             PUSH int 1 ;
212
                             DIG 4 ;
213
                             CAR ;
214
                             CDR ;
215
                             CAR ;
216
                             SUB ;
217
                             PAIR ;
218
                             DIG 2 ;
219
                             CAR ;
220
                             CAR ;
221
                             PAIR ;
222
                             PAIR ;
223
                             LEFT nat } } ;
224
             SWAP ;
225
             DROP } ;
226
         DUP 2 ;
227
         APPLY ;
228
         DIG 2 ;
229
         UNPAIR ;
230
         IF_LEFT
231
           { IF_LEFT
232
               { IF_LEFT
233
                   { DIG 2 ;
234
                     DIG 3 ;
235
                     DROP 2 ;
236
                     IF_LEFT
237
                       { IF_LEFT
238
                           { DROP ;
239
                             DUP ;
240
                             GET 15 ;
241
                             SENDER ;
242
                             COMPARE ;
243
                             NEQ ;
244
                             IF
245
                               { DROP ; PUSH nat 27 ; FAILWITH }
246
                               { DUP ; GET 15 ; UPDATE 13 ; NIL operation ; PAIR } }
247
                           { SELF %updatePools ;
248
                             SELF %addLiquidityInternal ;
249
                             SWAP ;
250
                             PUSH mutez 0 ;
251
                             UNIT ;
252
                             TRANSFER_TOKENS ;
253
                             SENDER ;
254
                             DIG 3 ;
255
                             PAIR ;
256
                             AMOUNT ;
257
                             DIG 3 ;
258
                             SWAP ;
259
                             DIG 2 ;
260
                             TRANSFER_TOKENS ;
261
                             DIG 2 ;
262
                             NIL operation ;
263
                             DIG 2 ;
264
                             CONS ;
265
                             DIG 2 ;
266
                             CONS ;
267
                             PAIR } }
268
                       { IF_LEFT
269
                           { UNPAIR ;
270
                             UNPAIR 4 ;
271
                             AMOUNT ;
272
                             PUSH mutez 1 ;
273
                             SWAP ;
274
                             EDIV ;
275
                             IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
276
                             CAR ;
277
                             PUSH nat 0 ;
278
                             DUP 8 ;
279
                             GET 23 ;
280
                             COMPARE ;
281
                             GT ;
282
                             IF
283
                               { DROP 7 ; PUSH nat 6 ; FAILWITH }
284
                               { DIG 4 ;
285
                                 NOW ;
286
                                 COMPARE ;
287
                                 GE ;
288
                                 IF
289
                                   { DROP 6 ; PUSH nat 3 ; FAILWITH }
290
                                   { SELF_ADDRESS ;
291
                                     SENDER ;
292
                                     COMPARE ;
293
                                     NEQ ;
294
                                     IF
295
                                       { DROP 6 ; PUSH nat 36 ; FAILWITH }
296
                                       { DUP ;
297
                                         DUP 7 ;
298
                                         GET 9 ;
299
                                         SUB ;
300
                                         ISNAT ;
301
                                         IF_NONE { PUSH nat 2 ; FAILWITH } {} ;
302
                                         DUP ;
303
                                         DUP 8 ;
304
                                         GET 17 ;
305
                                         DUP 4 ;
306
                                         MUL ;
307
                                         EDIV ;
308
                                         IF_NONE
309
                                           { PUSH string "DIV by 0" ; FAILWITH }
310
                                           {} ;
311
                                         CAR ;
312
                                         SWAP ;
313
                                         DUP 8 ;
314
                                         GET 5 ;
315
                                         DIG 3 ;
316
                                         MUL ;
317
                                         SWAP ;
318
                                         INT ;
319
                                         SWAP ;
320
                                         NEG ;
321
                                         EDIV ;
322
                                         IF_NONE
323
                                           { PUSH string "DIV by 0" ; FAILWITH }
324
                                           {} ;
325
                                         CAR ;
326
                                         ABS ;
327
                                         DIG 4 ;
328
                                         DUP 2 ;
329
                                         COMPARE ;
330
                                         GT ;
331
                                         IF
332
                                           { DROP 6 ; PUSH nat 4 ; FAILWITH }
333
                                           { DIG 3 ;
334
                                             DUP 3 ;
335
                                             COMPARE ;
336
                                             LT ;
337
                                             IF
338
                                               { DROP 5 ; PUSH nat 5 ; FAILWITH }
339
                                               { DUP 5 ;
340
                                                 DUP 3 ;
341
                                                 DUP 7 ;
342
                                                 GET 17 ;
343
                                                 ADD ;
344
                                                 UPDATE 17 ;
345
                                                 DUP 2 ;
346
                                                 DIG 6 ;
347
                                                 GET 5 ;
348
                                                 ADD ;
349
                                                 UPDATE 5 ;
350
                                                 SWAP ;
351
                                                 SELF_ADDRESS ;
352
                                                 DIG 5 ;
353
                                                 DUP 4 ;
354
                                                 DUP ;
355
                                                 CAR ;
356
                                                 CONTRACT %transfer (list (pair address
357
                                                                               (list (pair
358
                                                                                      address
359
                                                                                      (pair
360
                                                                                        nat
361
                                                                                        nat))))) ;
362
                                                 IF_NONE { PUSH nat 0 ; FAILWITH } {} ;
363
                                                 PUSH mutez 0 ;
364
                                                 NIL (pair address
365
                                                           (list (pair address
366
                                                                      (pair nat nat)))) ;
367
                                                 NIL (pair address (pair nat nat)) ;
368
                                                 DIG 7 ;
369
                                                 DIG 5 ;
370
                                                 GET 3 ;
371
                                                 PAIR ;
372
                                                 DIG 6 ;
373
                                                 PAIR ;
374
                                                 CONS ;
375
                                                 DIG 4 ;
376
                                                 PAIR ;
377
                                                 CONS ;
378
                                                 TRANSFER_TOKENS ;
379
                                                 DIG 2 ;
380
                                                 INT ;
381
                                                 DIG 3 ;
382
                                                 DUP 4 ;
383
                                                 GET 19 ;
384
                                                 CONTRACT %mintOrBurn (pair
385
                                                                        (int %quantity)
386
                                                                        (address %target)) ;
387
                                                 IF_NONE { PUSH nat 12 ; FAILWITH } {} ;
388
                                                 PUSH mutez 0 ;
389
                                                 DIG 2 ;
390
                                                 DIG 3 ;
391
                                                 PAIR ;
392
                                                 TRANSFER_TOKENS ;
393
                                                 DIG 2 ;
394
                                                 NIL operation ;
395
                                                 DIG 2 ;
396
                                                 CONS ;
397
                                                 DIG 2 ;
398
                                                 CONS ;
399
                                                 PAIR } } } } } }
400
                           { SELF %updatePools ;
401
                             SELF %cashToTokenInternal ;
402
                             SWAP ;
403
                             PUSH mutez 0 ;
404
                             UNIT ;
405
                             TRANSFER_TOKENS ;
406
                             SENDER ;
407
                             DIG 3 ;
408
                             PAIR ;
409
                             AMOUNT ;
410
                             DIG 3 ;
411
                             SWAP ;
412
                             DIG 2 ;
413
                             TRANSFER_TOKENS ;
414
                             DIG 2 ;
415
                             NIL operation ;
416
                             DIG 2 ;
417
                             CONS ;
418
                             DIG 2 ;
419
                             CONS ;
420
                             PAIR } } }
421
                   { IF_LEFT
422
                       { IF_LEFT
423
                           { CAR ;
424
                             UNPAIR 3 ;
425
                             AMOUNT ;
426
                             PUSH mutez 1 ;
427
                             SWAP ;
428
                             EDIV ;
429
                             IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
430
                             CAR ;
431
                             PUSH nat 0 ;
432
                             DUP 6 ;
433
                             GET 23 ;
434
                             COMPARE ;
435
                             GT ;
436
                             IF
437
                               { DROP 7 ; PUSH nat 6 ; FAILWITH }
438
                               { DIG 3 ;
439
                                 NOW ;
440
                                 COMPARE ;
441
                                 GE ;
442
                                 IF
443
                                   { DROP 6 ; PUSH nat 3 ; FAILWITH }
444
                                   { SELF_ADDRESS ;
445
                                     SENDER ;
446
                                     COMPARE ;
447
                                     NEQ ;
448
                                     IF
449
                                       { DROP 6 ; PUSH nat 36 ; FAILWITH }
450
                                       { DUP ;
451
                                         DUP 5 ;
452
                                         GET 9 ;
453
                                         SUB ;
454
                                         ISNAT ;
455
                                         IF_NONE { PUSH nat 2 ; FAILWITH } {} ;
456
                                         DUP 5 ;
457
                                         GET 26 ;
458
                                         UNIT ;
459
                                         VIEW "get_token_price_in_cash" nat ;
460
                                         IF_NONE { PUSH nat 37 ; FAILWITH } {} ;
461
                                         PUSH nat 1000000 ;
462
                                         DUP 7 ;
463
                                         GET 11 ;
464
                                         MUL ;
465
                                         SWAP ;
466
                                         DUP 7 ;
467
                                         GET 7 ;
468
                                         MUL ;
469
                                         DUP 2 ;
470
                                         DIG 3 ;
471
                                         MUL ;
472
                                         DUP 2 ;
473
                                         DUP 8 ;
474
                                         GET 5 ;
475
                                         MUL ;
476
                                         DUP ;
477
                                         DUP 3 ;
478
                                         PAIR ;
479
                                         DIG 10 ;
480
                                         SWAP ;
481
                                         EXEC ;
482
                                         CAR ;
483
                                         DIG 3 ;
484
                                         DIG 2 ;
485
                                         DIG 3 ;
486
                                         PAIR ;
487
                                         DIG 2 ;
488
                                         PUSH int 5 ;
489
                                         PAIR ;
490
                                         PUSH nat 0 ;
491
                                         DIG 4 ;
492
                                         DIG 5 ;
493
                                         MUL ;
494
                                         PAIR ;
495
                                         PAIR ;
496
                                         PAIR ;
497
                                         DIG 5 ;
498
                                         SWAP ;
499
                                         EXEC ;
500
                                         EDIV ;
501
                                         IF_NONE
502
                                           { PUSH string "DIV by 0" ; FAILWITH }
503
                                           {} ;
504
                                         CAR ;
505
                                         DUP 4 ;
506
                                         GET 25 ;
507
                                         CDR ;
508
                                         DUP 2 ;
509
                                         DUP 6 ;
510
                                         GET 25 ;
511
                                         CAR ;
512
                                         MUL ;
513
                                         EDIV ;
514
                                         IF_NONE
515
                                           { PUSH string "DIV by 0" ; FAILWITH }
516
                                           {} ;
517
                                         CAR ;
518
                                         DIG 3 ;
519
                                         DUP 2 ;
520
                                         COMPARE ;
521
                                         LT ;
522
                                         IF { DROP ; PUSH nat 18 ; FAILWITH } {} ;
523
                                         PUSH int 2 ;
524
                                         DUP 2 ;
525
                                         DIG 3 ;
526
                                         SUB ;
527
                                         EDIV ;
528
                                         IF_NONE
529
                                           { PUSH string "DIV by 0" ; FAILWITH }
530
                                           {} ;
531
                                         CAR ;
532
                                         ISNAT ;
533
                                         IF_NONE { PUSH nat 19 ; FAILWITH } {} ;
534
                                         DUP ;
535
                                         DUP 3 ;
536
                                         ADD ;
537
                                         DUP 5 ;
538
                                         GET 5 ;
539
                                         SUB ;
540
                                         ISNAT ;
541
                                         IF_NONE { PUSH nat 19 ; FAILWITH } {} ;
542
                                         DIG 4 ;
543
                                         SWAP ;
544
                                         UPDATE 5 ;
545
                                         DIG 2 ;
546
                                         DIG 3 ;
547
                                         SELF_ADDRESS ;
548
                                         DUP 4 ;
549
                                         DUP ;
550
                                         CAR ;
551
                                         CONTRACT %transfer (list (pair address
552
                                                                       (list (pair
553
                                                                              address
554
                                                                              (pair nat
555
                                                                                    nat))))) ;
556
                                         IF_NONE { PUSH nat 0 ; FAILWITH } {} ;
557
                                         PUSH mutez 0 ;
558
                                         NIL (pair address
559
                                                   (list (pair address (pair nat nat)))) ;
560
                                         NIL (pair address (pair nat nat)) ;
561
                                         DIG 7 ;
562
                                         DIG 5 ;
563
                                         GET 3 ;
564
                                         PAIR ;
565
                                         DIG 6 ;
566
                                         PAIR ;
567
                                         CONS ;
568
                                         DIG 4 ;
569
                                         PAIR ;
570
                                         CONS ;
571
                                         TRANSFER_TOKENS ;
572
                                         DIG 2 ;
573
                                         DUP 3 ;
574
                                         GET 21 ;
575
                                         SELF_ADDRESS ;
576
                                         DUP 5 ;
577
                                         DUP ;
578
                                         CAR ;
579
                                         CONTRACT %transfer (list (pair address
580
                                                                       (list (pair
581
                                                                              address
582
                                                                              (pair nat
583
                                                                                    nat))))) ;
584
                                         IF_NONE { PUSH nat 0 ; FAILWITH } {} ;
585
                                         PUSH mutez 0 ;
586
                                         NIL (pair address
587
                                                   (list (pair address (pair nat nat)))) ;
588
                                         NIL (pair address (pair nat nat)) ;
589
                                         DIG 7 ;
590
                                         DIG 5 ;
591
                                         GET 3 ;
592
                                         PAIR ;
593
                                         DIG 6 ;
594
                                         PAIR ;
595
                                         CONS ;
596
                                         DIG 4 ;
597
                                         PAIR ;
598
                                         CONS ;
599
                                         TRANSFER_TOKENS ;
600
                                         DIG 2 ;
601
                                         NIL operation ;
602
                                         DIG 2 ;
603
                                         CONS ;
604
                                         DIG 2 ;
605
                                         CONS ;
606
                                         PAIR } } } }
607
                           { DIG 2 ;
608
                             DIG 3 ;
609
                             DROP 2 ;
610
                             DUP 2 ;
611
                             GET 13 ;
612
                             SENDER ;
613
                             COMPARE ;
614
                             NEQ ;
615
                             IF
616
                               { DROP 2 ; PUSH nat 26 ; FAILWITH }
617
                               { UPDATE 25 ; NIL operation ; PAIR } } }
618
                       { DIG 2 ;
619
                         DIG 3 ;
620
                         DROP 2 ;
621
                         IF_LEFT
622
                           { DROP ; NIL operation ; PAIR }
623
                           { PUSH mutez 0 ;
624
                             AMOUNT ;
625
                             COMPARE ;
626
                             GT ;
627
                             IF
628
                               { DROP 2 ; PUSH nat 10 ; FAILWITH }
629
                               { SELF %updatePools ;
630
                                 SELF %fetchLqtTokenPriceInternal ;
631
                                 SWAP ;
632
                                 PUSH mutez 0 ;
633
                                 UNIT ;
634
                                 TRANSFER_TOKENS ;
635
                                 SWAP ;
636
                                 PUSH mutez 0 ;
637
                                 UNIT ;
638
                                 LEFT unit ;
639
                                 DIG 4 ;
640
                                 PAIR ;
641
                                 TRANSFER_TOKENS ;
642
                                 DIG 2 ;
643
                                 NIL operation ;
644
                                 DIG 2 ;
645
                                 CONS ;
646
                                 DIG 2 ;
647
                                 CONS ;
648
                                 PAIR } } } } }
649
               { DIG 2 ;
650
                 DIG 3 ;
651
                 DROP 2 ;
652
                 IF_LEFT
653
                   { IF_LEFT
654
                       { IF_LEFT
655
                           { PUSH mutez 0 ;
656
                             AMOUNT ;
657
                             COMPARE ;
658
                             GT ;
659
                             IF
660
                               { DROP 2 ; PUSH nat 10 ; FAILWITH }
661
                               { SELF %updatePools ;
662
                                 SELF %fetchLqtTokenPriceInternal ;
663
                                 SWAP ;
664
                                 PUSH mutez 0 ;
665
                                 UNIT ;
666
                                 TRANSFER_TOKENS ;
667
                                 SWAP ;
668
                                 PUSH mutez 0 ;
669
                                 UNIT ;
670
                                 RIGHT unit ;
671
                                 DIG 4 ;
672
                                 PAIR ;
673
                                 TRANSFER_TOKENS ;
674
                                 DIG 2 ;
675
                                 NIL operation ;
676
                                 DIG 2 ;
677
                                 CONS ;
678
                                 DIG 2 ;
679
                                 CONS ;
680
                                 PAIR } }
681
                           { UNPAIR ;
682
                             SELF_ADDRESS ;
683
                             SENDER ;
684
                             COMPARE ;
685
                             NEQ ;
686
                             IF
687
                               { DROP 3 ; PUSH nat 36 ; FAILWITH }
688
                               { SWAP ;
689
                                 IF_LEFT
690
                                   { DROP ;
691
                                     DUP 2 ;
692
                                     GET 26 ;
693
                                     UNIT ;
694
                                     VIEW "get_token_price_in_cash" nat ;
695
                                     IF_NONE { PUSH nat 37 ; FAILWITH } {} ;
696
                                     DUP 3 ;
697
                                     GET 7 ;
698
                                     DUP 4 ;
699
                                     GET 5 ;
700
                                     MUL ;
701
                                     MUL ;
702
                                     PUSH nat 1000000 ;
703
                                     DUP 4 ;
704
                                     GET 11 ;
705
                                     DUP 5 ;
706
                                     GET 9 ;
707
                                     MUL ;
708
                                     MUL ;
709
                                     DUP 4 ;
710
                                     GET 17 ;
711
                                     SWAP ;
712
                                     DIG 2 ;
713
                                     ADD ;
714
                                     SWAP ;
715
                                     INT ;
716
                                     SWAP ;
717
                                     NEG ;
718
                                     EDIV ;
719
                                     IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
720
                                     CAR }
721
                                   { DROP ;
722
                                     DUP 2 ;
723
                                     GET 26 ;
724
                                     UNIT ;
725
                                     VIEW "get_cash_price_in_token" nat ;
726
                                     IF_NONE { PUSH nat 37 ; FAILWITH } {} ;
727
                                     PUSH nat 1000000 ;
728
                                     DUP 4 ;
729
                                     GET 7 ;
730
                                     DUP 5 ;
731
                                     GET 5 ;
732
                                     MUL ;
733
                                     MUL ;
734
                                     SWAP ;
735
                                     DUP 4 ;
736
                                     GET 11 ;
737
                                     DUP 5 ;
738
                                     GET 9 ;
739
                                     MUL ;
740
                                     MUL ;
741
                                     DUP 4 ;
742
                                     GET 17 ;
743
                                     SWAP ;
744
                                     DIG 2 ;
745
                                     ADD ;
746
                                     SWAP ;
747
                                     INT ;
748
                                     SWAP ;
749
                                     NEG ;
750
                                     EDIV ;
751
                                     IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
752
                                     CAR } ;
753
                                 ABS ;
754
                                 SWAP ;
755
                                 PUSH mutez 0 ;
756
                                 DIG 2 ;
757
                                 TRANSFER_TOKENS ;
758
                                 SWAP ;
759
                                 NIL operation ;
760
                                 DIG 2 ;
761
                                 CONS ;
762
                                 PAIR } } }
763
                       { IF_LEFT
764
                           { DUP 2 ;
765
                             GET 13 ;
766
                             SENDER ;
767
                             COMPARE ;
768
                             NEQ ;
769
                             IF
770
                               { DROP 2 ; PUSH nat 26 ; FAILWITH }
771
                               { UPDATE 15 ; NIL operation ; PAIR } }
772
                           { PUSH mutez 0 ;
773
                             AMOUNT ;
774
                             COMPARE ;
775
                             GT ;
776
                             IF
777
                               { DROP 2 ; PUSH nat 10 ; FAILWITH }
778
                               { SELF %updatePools ;
779
                                 SELF %removeLiquidityInternal ;
780
                                 SWAP ;
781
                                 PUSH mutez 0 ;
782
                                 UNIT ;
783
                                 TRANSFER_TOKENS ;
784
                                 SENDER ;
785
                                 DIG 3 ;
786
                                 PAIR ;
787
                                 DIG 2 ;
788
                                 PUSH mutez 0 ;
789
                                 DIG 2 ;
790
                                 TRANSFER_TOKENS ;
791
                                 DIG 2 ;
792
                                 NIL operation ;
793
                                 DIG 2 ;
794
                                 CONS ;
795
                                 DIG 2 ;
796
                                 CONS ;
797
                                 PAIR } } } }
798
                   { IF_LEFT
799
                       { IF_LEFT
800
                           { UNPAIR ;
801
                             UNPAIR 5 ;
802
                             PUSH nat 0 ;
803
                             DUP 8 ;
804
                             GET 23 ;
805
                             COMPARE ;
806
                             GT ;
807
                             IF
808
                               { DROP 7 ; PUSH nat 6 ; FAILWITH }
809
                               { DIG 4 ;
810
                                 NOW ;
811
                                 COMPARE ;
812
                                 GE ;
813
                                 IF
814
                                   { DROP 6 ; PUSH nat 3 ; FAILWITH }
815
                                   { SELF_ADDRESS ;
816
                                     SENDER ;
817
                                     COMPARE ;
818
                                     NEQ ;
819
                                     IF
820
                                       { DROP 6 ; PUSH nat 36 ; FAILWITH }
821
                                       { DUP 6 ;
822
                                         GET 17 ;
823
                                         DUP 7 ;
824
                                         GET 9 ;
825
                                         DUP 4 ;
826
                                         MUL ;
827
                                         EDIV ;
828
                                         IF_NONE
829
                                           { PUSH string "DIV by 0" ; FAILWITH }
830
                                           {} ;
831
                                         CAR ;
832
                                         DUP 7 ;
833
                                         GET 17 ;
834
                                         DUP 8 ;
835
                                         GET 5 ;
836
                                         DUP 5 ;
837
                                         MUL ;
838
                                         EDIV ;
839
                                         IF_NONE
840
                                           { PUSH string "DIV by 0" ; FAILWITH }
841
                                           {} ;
842
                                         CAR ;
843
                                         DIG 4 ;
844
                                         DUP 3 ;
845
                                         COMPARE ;
846
                                         LT ;
847
                                         IF
848
                                           { DROP 7 ; PUSH nat 11 ; FAILWITH }
849
                                           { DIG 4 ;
850
                                             DUP 2 ;
851
                                             COMPARE ;
852
                                             LT ;
853
                                             IF
854
                                               { DROP 6 ; PUSH nat 13 ; FAILWITH }
855
                                               { DUP 4 ;
856
                                                 DUP 7 ;
857
                                                 GET 17 ;
858
                                                 SUB ;
859
                                                 ISNAT ;
860
                                                 IF_NONE { PUSH nat 14 ; FAILWITH } {} ;
861
                                                 DUP 2 ;
862
                                                 DUP 8 ;
863
                                                 GET 5 ;
864
                                                 SUB ;
865
                                                 ISNAT ;
866
                                                 IF_NONE { PUSH nat 15 ; FAILWITH } {} ;
867
                                                 DUP 4 ;
868
                                                 DUP 9 ;
869
                                                 GET 9 ;
870
                                                 SUB ;
871
                                                 ISNAT ;
872
                                                 IF_NONE { PUSH nat 16 ; FAILWITH } {} ;
873
                                                 DIG 6 ;
874
                                                 PUSH int 0 ;
875
                                                 SUB ;
876
                                                 DIG 7 ;
877
                                                 DUP 9 ;
878
                                                 GET 19 ;
879
                                                 CONTRACT %mintOrBurn (pair
880
                                                                        (int %quantity)
881
                                                                        (address %target)) ;
882
                                                 IF_NONE { PUSH nat 12 ; FAILWITH } {} ;
883
                                                 PUSH mutez 0 ;
884
                                                 DIG 2 ;
885
                                                 DIG 3 ;
886
                                                 PAIR ;
887
                                                 TRANSFER_TOKENS ;
888
                                                 DIG 4 ;
889
                                                 DUP 7 ;
890
                                                 SELF_ADDRESS ;
891
                                                 DUP 10 ;
892
                                                 DUP ;
893
                                                 CAR ;
894
                                                 CONTRACT %transfer (list (pair address
895
                                                                               (list (pair
896
                                                                                      address
897
                                                                                      (pair
898
                                                                                        nat
899
                                                                                        nat))))) ;
900
                                                 IF_NONE { PUSH nat 0 ; FAILWITH } {} ;
901
                                                 PUSH mutez 0 ;
902
                                                 NIL (pair address
903
                                                           (list (pair address
904
                                                                      (pair nat nat)))) ;
905
                                                 NIL (pair address (pair nat nat)) ;
906
                                                 DIG 7 ;
907
                                                 DIG 5 ;
908
                                                 GET 3 ;
909
                                                 PAIR ;
910
                                                 DIG 6 ;
911
                                                 PAIR ;
912
                                                 CONS ;
913
                                                 DIG 4 ;
914
                                                 PAIR ;
915
                                                 CONS ;
916
                                                 TRANSFER_TOKENS ;
917
                                                 PUSH mutez 1 ;
918
                                                 DIG 6 ;
919
                                                 MUL ;
920
                                                 DIG 6 ;
921
                                                 CONTRACT unit ;
922
                                                 IF_NONE { PUSH nat 35 ; FAILWITH } {} ;
923
                                                 SWAP ;
924
                                                 UNIT ;
925
                                                 TRANSFER_TOKENS ;
926
                                                 DIG 6 ;
927
                                                 DIG 4 ;
928
                                                 UPDATE 9 ;
929
                                                 DIG 5 ;
930
                                                 UPDATE 17 ;
931
                                                 DIG 4 ;
932
                                                 UPDATE 5 ;
933
                                                 NIL operation ;
934
                                                 DIG 2 ;
935
                                                 CONS ;
936
                                                 DIG 2 ;
937
                                                 CONS ;
938
                                                 DIG 2 ;
939
                                                 CONS ;
940
                                                 PAIR } } } } } }
941
                           { DUP 2 ;
942
                             GET 13 ;
943
                             SENDER ;
944
                             COMPARE ;
945
                             NEQ ;
946
                             IF
947
                               { DROP 2 ; PUSH nat 26 ; FAILWITH }
948
                               { SWAP ; NIL operation ; DIG 2 ; SET_DELEGATE ; CONS ; PAIR } } }
949
                       { IF_LEFT
950
                           { PUSH address "tz1Ke2h7sDdakHJQh8WX4Z372du1KChsksyU" ;
951
                             DUP 3 ;
952
                             GET 19 ;
953
                             COMPARE ;
954
                             NEQ ;
955
                             IF
956
                               { DROP 2 ; PUSH nat 24 ; FAILWITH }
957
                               { UPDATE 19 ; NIL operation ; PAIR } }
958
                           { DUP 2 ;
959
                             GET 13 ;
960
                             SENDER ;
961
                             COMPARE ;
962
                             NEQ ;
963
                             IF
964
                               { DROP 2 ; PUSH nat 26 ; FAILWITH }
965
                               { UPDATE 21 ; NIL operation ; PAIR } } } } } }
966
           { IF_LEFT
967
               { IF_LEFT
968
                   { DIG 2 ;
969
                     DIG 3 ;
970
                     DROP 2 ;
971
                     PUSH mutez 0 ;
972
                     AMOUNT ;
973
                     COMPARE ;
974
                     GT ;
975
                     IF
976
                       { DROP 2 ; PUSH nat 10 ; FAILWITH }
977
                       { SELF %updatePools ;
978
                         SELF %tokenToCashInternal ;
979
                         SWAP ;
980
                         PUSH mutez 0 ;
981
                         UNIT ;
982
                         TRANSFER_TOKENS ;
983
                         SENDER ;
984
                         DIG 3 ;
985
                         PAIR ;
986
                         DIG 2 ;
987
                         PUSH mutez 0 ;
988
                         DIG 2 ;
989
                         TRANSFER_TOKENS ;
990
                         DIG 2 ;
991
                         NIL operation ;
992
                         DIG 2 ;
993
                         CONS ;
994
                         DIG 2 ;
995
                         CONS ;
996
                         PAIR } }
997
                   { UNPAIR ;
998
                     UNPAIR 4 ;
999
                     PUSH nat 0 ;
1000
                     DUP 7 ;
1001
                     GET 23 ;
1002
                     COMPARE ;
1003
                     GT ;
1004
                     IF
1005
                       { DROP 8 ; PUSH nat 6 ; FAILWITH }
1006
                       { DIG 3 ;
1007
                         NOW ;
1008
                         COMPARE ;
1009
                         GE ;
1010
                         IF
1011
                           { DROP 7 ; PUSH nat 3 ; FAILWITH }
1012
                           { SELF_ADDRESS ;
1013
                             SENDER ;
1014
                             COMPARE ;
1015
                             NEQ ;
1016
                             IF
1017
                               { DROP 7 ; PUSH nat 36 ; FAILWITH }
1018
                               { DUP 5 ;
1019
                                 GET 26 ;
1020
                                 UNIT ;
1021
                                 VIEW "get_token_price_in_cash" nat ;
1022
                                 IF_NONE { PUSH nat 37 ; FAILWITH } {} ;
1023
                                 PUSH nat 1000000 ;
1024
                                 DUP 7 ;
1025
                                 GET 11 ;
1026
                                 MUL ;
1027
                                 SWAP ;
1028
                                 DUP 7 ;
1029
                                 GET 7 ;
1030
                                 MUL ;
1031
                                 DUP ;
1032
                                 DUP 8 ;
1033
                                 GET 5 ;
1034
                                 MUL ;
1035
                                 DUP 3 ;
1036
                                 DUP 9 ;
1037
                                 GET 9 ;
1038
                                 MUL ;
1039
                                 DUP ;
1040
                                 DUP 3 ;
1041
                                 PAIR ;
1042
                                 DIG 11 ;
1043
                                 SWAP ;
1044
                                 EXEC ;
1045
                                 CAR ;
1046
                                 DIG 4 ;
1047
                                 DIG 2 ;
1048
                                 DIG 3 ;
1049
                                 PAIR ;
1050
                                 DIG 2 ;
1051
                                 PUSH int 5 ;
1052
                                 PAIR ;
1053
                                 PUSH nat 0 ;
1054
                                 DIG 4 ;
1055
                                 DUP 7 ;
1056
                                 MUL ;
1057
                                 PAIR ;
1058
                                 PAIR ;
1059
                                 PAIR ;
1060
                                 DIG 7 ;
1061
                                 SWAP ;
1062
                                 EXEC ;
1063
                                 EDIV ;
1064
                                 IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
1065
                                 CAR ;
1066
                                 DUP 6 ;
1067
                                 GET 25 ;
1068
                                 CDR ;
1069
                                 DUP 2 ;
1070
                                 DUP 8 ;
1071
                                 GET 25 ;
1072
                                 CAR ;
1073
                                 MUL ;
1074
                                 EDIV ;
1075
                                 IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
1076
                                 CAR ;
1077
                                 DIG 4 ;
1078
                                 DUP 2 ;
1079
                                 COMPARE ;
1080
                                 LT ;
1081
                                 IF { DROP ; PUSH nat 8 ; FAILWITH } {} ;
1082
                                 PUSH int 2 ;
1083
                                 DUP 2 ;
1084
                                 DIG 3 ;
1085
                                 SUB ;
1086
                                 EDIV ;
1087
                                 IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
1088
                                 CAR ;
1089
                                 ISNAT ;
1090
                                 IF_NONE { PUSH nat 1 ; FAILWITH } {} ;
1091
                                 PUSH mutez 1 ;
1092
                                 DUP 3 ;
1093
                                 MUL ;
1094
                                 PUSH mutez 1 ;
1095
                                 DUP 3 ;
1096
                                 MUL ;
1097
                                 DUP 6 ;
1098
                                 SELF_ADDRESS ;
1099
                                 DIG 8 ;
1100
                                 DUP 10 ;
1101
                                 DUP ;
1102
                                 CAR ;
1103
                                 CONTRACT %transfer (list (pair address
1104
                                                               (list (pair address
1105
                                                                          (pair nat nat))))) ;
1106
                                 IF_NONE { PUSH nat 0 ; FAILWITH } {} ;
1107
                                 PUSH mutez 0 ;
1108
                                 NIL (pair address (list (pair address (pair nat nat)))) ;
1109
                                 NIL (pair address (pair nat nat)) ;
1110
                                 DIG 7 ;
1111
                                 DIG 5 ;
1112
                                 GET 3 ;
1113
                                 PAIR ;
1114
                                 DIG 6 ;
1115
                                 PAIR ;
1116
                                 CONS ;
1117
                                 DIG 4 ;
1118
                                 PAIR ;
1119
                                 CONS ;
1120
                                 TRANSFER_TOKENS ;
1121
                                 DIG 5 ;
1122
                                 CONTRACT unit ;
1123
                                 IF_NONE { PUSH nat 35 ; FAILWITH } {} ;
1124
                                 DIG 3 ;
1125
                                 UNIT ;
1126
                                 TRANSFER_TOKENS ;
1127
                                 DIG 3 ;
1128
                                 DIG 4 ;
1129
                                 ADD ;
1130
                                 DUP 6 ;
1131
                                 GET 9 ;
1132
                                 SUB ;
1133
                                 ISNAT ;
1134
                                 IF_NONE { PUSH nat 1 ; FAILWITH } {} ;
1135
                                 DUP 6 ;
1136
                                 DIG 5 ;
1137
                                 DIG 6 ;
1138
                                 GET 5 ;
1139
                                 ADD ;
1140
                                 UPDATE 5 ;
1141
                                 SWAP ;
1142
                                 UPDATE 9 ;
1143
                                 PUSH mutez 0 ;
1144
                                 DUP 5 ;
1145
                                 COMPARE ;
1146
                                 GT ;
1147
                                 IF
1148
                                   { DUP ;
1149
                                     GET 21 ;
1150
                                     CONTRACT unit ;
1151
                                     IF_NONE { PUSH nat 35 ; FAILWITH } {} ;
1152
                                     DIG 4 ;
1153
                                     UNIT ;
1154
                                     TRANSFER_TOKENS ;
1155
                                     SWAP ;
1156
                                     NIL operation ;
1157
                                     DIG 2 ;
1158
                                     CONS }
1159
                                   { DIG 3 ; DROP ; NIL operation } ;
1160
                                 DIG 2 ;
1161
                                 CONS ;
1162
                                 DIG 2 ;
1163
                                 CONS ;
1164
                                 PAIR } } } } }
1165
               { DIG 2 ;
1166
                 DIG 3 ;
1167
                 DROP 2 ;
1168
                 IF_LEFT
1169
                   { DROP ;
1170
                     SELF_ADDRESS ;
1171
                     SENDER ;
1172
                     COMPARE ;
1173
                     NEQ ;
1174
                     SOURCE ;
1175
                     SENDER ;
1176
                     COMPARE ;
1177
                     NEQ ;
1178
                     AND ;
1179
                     IF
1180
                       { DROP ; PUSH nat 25 ; FAILWITH }
1181
                       { PUSH mutez 0 ;
1182
                         AMOUNT ;
1183
                         COMPARE ;
1184
                         GT ;
1185
                         IF
1186
                           { DROP ; PUSH nat 10 ; FAILWITH }
1187
                           { SELF %updateTokenPoolInternal ;
1188
                             DUP 2 ;
1189
                             CAR ;
1190
                             CONTRACT %balance_of (pair (list (pair address nat))
1191
                                                        (contract (list (pair
1192
                                                                        (pair address
1193
                                                                              nat)
1194
                                                                        nat)))) ;
1195
                             IF_NONE { PUSH nat 28 ; FAILWITH } {} ;
1196
                             PUSH mutez 0 ;
1197
                             DIG 2 ;
1198
                             NIL (pair address nat) ;
1199
                             DUP 5 ;
1200
                             GET 3 ;
1201
                             SELF_ADDRESS ;
1202
                             PAIR ;
1203
                             CONS ;
1204
                             PAIR ;
1205
                             TRANSFER_TOKENS ;
1206
                             SWAP ;
1207
                             BALANCE ;
1208
                             PUSH mutez 1 ;
1209
                             SWAP ;
1210
                             EDIV ;
1211
                             IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
1212
                             CAR ;
1213
                             UPDATE 9 ;
1214
                             PUSH nat 1 ;
1215
                             UPDATE 23 ;
1216
                             NIL operation ;
1217
                             DIG 2 ;
1218
                             CONS ;
1219
                             PAIR } } }
1220
                   { DUP 2 ;
1221
                     CAR ;
1222
                     SENDER ;
1223
                     COMPARE ;
1224
                     NEQ ;
1225
                     PUSH nat 0 ;
1226
                     DUP 4 ;
1227
                     GET 23 ;
1228
                     COMPARE ;
1229
                     EQ ;
1230
                     OR ;
1231
                     IF
1232
                       { DROP 2 ; PUSH nat 29 ; FAILWITH }
1233
                       { IF_CONS { SWAP ; DROP ; CDR } { PUSH nat 30 ; FAILWITH } ;
1234
                         PUSH nat 1 ;
1235
                         DUP 3 ;
1236
                         GET 23 ;
1237
                         SUB ;
1238
                         ISNAT ;
1239
                         IF_NONE { PUSH nat 38 ; FAILWITH } {} ;
1240
                         DUG 2 ;
1241
                         UPDATE 5 ;
1242
                         SWAP ;
1243
                         UPDATE 23 ;
1244
                         NIL operation ;
1245
                         PAIR } } } } } ;
1246
  view "tokensPool" unit nat { CDR ; GET 5 } ;
1247
  view "cashPool" unit nat { CDR ; GET 9 } ;
1248
  view "liquidityTotal" unit nat { CDR ; GET 17 } ;
1249
  view "lazyLqtPriceInCash" unit nat
1250
        { CDR ;
1251
          DUP ;
1252
          GET 26 ;
1253
          UNIT ;
1254
          VIEW "get_token_price_in_cash" nat ;
1255
          IF_NONE { PUSH nat 37 ; FAILWITH } {} ;
1256
          DUP 2 ;
1257
          GET 7 ;
1258
          DUP 3 ;
1259
          GET 5 ;
1260
          MUL ;
1261
          MUL ;
1262
          PUSH nat 1000000 ;
1263
          DUP 3 ;
1264
          GET 11 ;
1265
          DUP 4 ;
1266
          GET 9 ;
1267
          MUL ;
1268
          MUL ;
1269
          DIG 2 ;
1270
          GET 17 ;
1271
          SWAP ;
1272
          DIG 2 ;
1273
          ADD ;
1274
          SWAP ;
1275
          INT ;
1276
          SWAP ;
1277
          NEG ;
1278
          EDIV ;
1279
          IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
1280
          CAR ;
1281
          ABS } ;
1282
  view "lazyLqtPriceInToken" unit nat
1283
        { CDR ;
1284
          DUP ;
1285
          GET 26 ;
1286
          UNIT ;
1287
          VIEW "get_cash_price_in_token" nat ;
1288
          IF_NONE { PUSH nat 37 ; FAILWITH } {} ;
1289
          PUSH nat 1000000 ;
1290
          DUP 3 ;
1291
          GET 7 ;
1292
          DUP 4 ;
1293
          GET 5 ;
1294
          MUL ;
1295
          MUL ;
1296
          SWAP ;
1297
          DUP 3 ;
1298
          GET 11 ;
1299
          DUP 4 ;
1300
          GET 9 ;
1301
          MUL ;
1302
          MUL ;
1303
          DIG 2 ;
1304
          GET 17 ;
1305
          SWAP ;
1306
          DIG 2 ;
1307
          ADD ;
1308
          SWAP ;
1309
          INT ;
1310
          SWAP ;
1311
          NEG ;
1312
          EDIV ;
1313
          IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
1314
          CAR ;
1315
          ABS } }