BCD

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