BCD

Tezos Contract Explorer
Search Networks Deploy
  • Home
  • /
  • Mainnet
  • /
  • Kord.Fi legacy tzBTC deposit
FA1FA1.2
operations (26K)Storage Code Interact Tokens Fork Statistics Details
Latest
​x
903
1755
 
1
parameter (or
2
            (or
3
              (or
4
                (or
5
                  (or (pair %approve (address %spender) (nat %value))
6
                      (unit %calculateLbPrice))
7
                  (or (unit %default) (nat %depositLending)))
8
                (or
9
                  (or (unit %disableOnchainLiquidation)
10
                      (pair %flashloan (contract %callback unit) (nat %requested_shares)))
11
                  (or (unit %flashloanFinalize)
12
                      (or (nat %flashloanReturn)
13
                          (pair %getAdministrator unit (contract address))))))
14
              (or
15
                (or
16
                  (or
17
                    (pair %getAllowance (pair (address %owner) (address %spender))
18
                                        (contract nat))
19
                    (pair %getBalance address (contract nat)))
20
                  (or (pair %getTotalSupply unit (contract nat))
21
                      (or
22
                        (pair %investLB (mutez %amount2tzBTC)
23
                                        (pair (nat %mintzBTCTokensBought)
24
                                              (pair (nat %tzBTC2xtz)
25
                                                    (pair (mutez %minXtzBought)
26
                                                          (pair (mutez %amount2Lqt)
27
                                                                (nat %minLqtMinted))))))
28
                        (pair %investLBFinalize (address %address)
29
                                                (pair (nat %initial_lb_shares)
30
                                                      (pair (nat %initial_tzBTC_shares)
31
                                                            (nat %tzBTC2xtz)))))))
32
                (or
33
                  (or (pair %liquidateLB (address %address) (nat %payment_shares))
34
                      (pair %liquidateLBFinalize (address %address)
35
                                                 (pair (address %sender)
36
                                                       (nat %payment_shares))))
37
                  (or (address %liquidateOnchainLB)
38
                      (or
39
                        (pair %liquidateOnchainLBFinalize (address %address)
40
                                                          (nat %initial_tzBTC_shares))
41
                        (pair %redeemLB (nat %lqtBurned)
42
                                        (pair (nat %minTokensWithdrawn)
43
                                              (mutez %xtz_to_token_amount))))))))
44
            (or
45
              (or
46
                (or
47
                  (or
48
                    (pair %redeemLBFinalize (address %address)
49
                                            (pair (nat %lqtBurned)
50
                                                  (nat %initial_tzBTC_shares)))
51
                    (nat %redeemLending))
52
                  (or (unit %sellXtz)
53
                      (or (address %sendBalance) (address %setAdministrator))))
54
                (or
55
                  (or (address %setDexContract)
56
                      (pair %setFlashloanParams (nat %flashloan_admin_commission)
57
                                                (pair
58
                                                  (nat %flashloan_deposit_commission)
59
                                                  (bool %flashloan_available))))
60
                  (or (bool %setIsWorkingStatus)
61
                      (or (nat %setLbPriceChangeRate)
62
                          (pair %setLeverageParams (nat %max_leverage)
63
                                                   (pair
64
                                                     (nat %onchain_liquidation_percent)
65
                                                     (pair
66
                                                       (nat %onchain_liquidation_comm)
67
                                                       (pair (nat %liquidation_percent)
68
                                                             (pair
69
                                                               (nat %liquidation_price_percent)
70
                                                               (pair
71
                                                                 (nat %liquidation_comm)
72
                                                                 (address %oracle_address)))))))))))
73
              (or
74
                (or
75
                  (or
76
                    (pair %setRateParams (nat %rate_1)
77
                                         (pair (nat %rate_diff)
78
                                               (pair (nat %threshold_percent_1)
79
                                                     (nat %threshold_percent_2))))
80
                    (nat %setUpfrontCommission))
81
                  (or (pair %transfer (address %from) (pair (address %to) (nat %value)))
82
                      (or (unit %updateIndexes) (nat %updateLBCallback))))
83
                (or (or (nat %updateLqtTotalCallback) (nat %updateTzBTCCallback))
84
                    (or (nat %updateTzbtcPoolCallback)
85
                        (or (pair %update_metadata (string %key) (bytes %value))
86
                            (unit %withdrawCommission)))))));
87
storage (pair
88
          (pair
89
            (pair
90
              (pair (pair (address %administrator) (nat %deposit_index))
91
                    (pair (address %dex_contract_address) (address %fa_lb_address)))
92
              (pair (pair (address %fa_tzBTC_address) (nat %flashloan_admin_commission))
93
                    (pair (bool %flashloan_available)
94
                          (pair (nat %flashloan_deposit_commission)
95
                                (nat %flashloan_shares)))))
96
            (pair
97
              (pair (pair (nat %gross_credit_index) (nat %index_delta))
98
                    (pair (timestamp %index_update_dttm) (bool %is_working)))
99
              (pair (pair (nat %lb_price) (nat %lb_price_change_rate))
100
                    (pair (nat %lb_shares)
101
                          (pair
102
                            (big_map %ledger address
103
                                             (pair (map %approvals address nat)
104
                                                   (nat %balance)))
105
                            (nat %liquidation_comm))))))
106
          (pair
107
            (pair
108
              (pair (pair (nat %liquidation_percent) (nat %liquidation_price_percent))
109
                    (pair (address %liquidity_baking_address)
110
                          (big_map %liquidity_book address
111
                                                   (pair (nat %gross_credit)
112
                                                         (pair (nat %lb_shares)
113
                                                               (nat %net_credit))))))
114
              (pair
115
                (pair
116
                  (pair %local_params
117
                    (pair (bool %fa_lb_callback_status) (bool %fa_tzBTC_callback_status))
118
                    (pair (nat %lqt_total) (nat %tzbtc_pool)))
119
                  (nat %max_leverage))
120
                (pair (big_map %metadata string bytes)
121
                      (pair (nat %net_credit_index)
122
                            (bool %onchain_liquidation_available)))))
123
            (pair
124
              (pair
125
                (pair (nat %onchain_liquidation_comm) (nat %onchain_liquidation_percent))
126
                (pair (address %oracle_address)
127
                      (pair
128
                        (pair %rate_params (pair (nat %rate_1) (nat %rate_diff))
129
                                           (pair (nat %threshold_percent_1)
130
                                                 (nat %threshold_percent_2)))
131
                        (big_map %token_metadata nat
132
                                                 (pair (nat %token_id)
133
                                                       (map %token_info string bytes))))))
134
              (pair (pair (nat %totalSupply) (nat %total_gross_credit))
135
                    (pair (nat %total_net_credit)
136
                          (pair (nat %tzBTC_shares) (nat %upfront_commission)))))));
137
code { LAMBDA
138
         (pair unit
139
               (pair
140
                 (pair
141
                   (pair (pair (pair address nat) (pair address address))
142
                         (pair (pair address nat) (pair bool (pair nat nat))))
143
                   (pair (pair (pair nat nat) (pair timestamp bool))
144
                         (pair (pair nat nat)
145
                               (pair nat
146
                                     (pair
147
                                       (big_map address (pair (map address nat) nat))
148
                                       nat)))))
149
                 (pair
150
                   (pair
151
                     (pair (pair nat nat)
152
                           (pair address (big_map address (pair nat (pair nat nat)))))
153
                     (pair (pair (pair (pair bool bool) (pair nat nat)) nat)
154
                           (pair (big_map string bytes) (pair nat bool))))
155
                   (pair
156
                     (pair (pair nat nat)
157
                           (pair address
158
                                 (pair (pair (pair nat nat) (pair nat nat))
159
                                       (big_map nat (pair nat (map string bytes))))))
160
                     (pair (pair nat nat) (pair nat (pair nat nat)))))))
161
         (pair unit
162
               (pair
163
                 (pair
164
                   (pair (pair (pair address nat) (pair address address))
165
                         (pair (pair address nat) (pair bool (pair nat nat))))
166
                   (pair (pair (pair nat nat) (pair timestamp bool))
167
                         (pair (pair nat nat)
168
                               (pair nat
169
                                     (pair
170
                                       (big_map address (pair (map address nat) nat))
171
                                       nat)))))
172
                 (pair
173
                   (pair
174
                     (pair (pair nat nat)
175
                           (pair address (big_map address (pair nat (pair nat nat)))))
176
                     (pair (pair (pair (pair bool bool) (pair nat nat)) nat)
177
                           (pair (big_map string bytes) (pair nat bool))))
178
                   (pair
179
                     (pair (pair nat nat)
180
                           (pair address
181
                                 (pair (pair (pair nat nat) (pair nat nat))
182
                                       (big_map nat (pair nat (map string bytes))))))
183
                     (pair (pair nat nat) (pair nat (pair nat nat)))))))
184
         { CDR ;
185
           DUP ;
186
           GET 3 ;
187
           GET 7 ;
188
           SWAP ;
189
           DUP ;
190
           DUG 2 ;
191
           GET 9 ;
192
           MUL ;
193
           SWAP ;
194
           DUP ;
195
           CAR ;
196
           CAR ;
197
           CAR ;
198
           CAR ;
199
           CDR ;
200
           SWAP ;
201
           DUP ;
202
           DUG 3 ;
203
           GET 7 ;
204
           CAR ;
205
           MUL ;
206
           COMPARE ;
207
           GE ;
208
           IF
209
             {}
210
             { PUSH string "total deposit and net credit inequation error" ; FAILWITH } ;
211
           UNIT ;
212
           PAIR } ;
213
       SWAP ;
214
       LAMBDA
215
         (pair (pair mutez nat)
216
               (pair (list operation)
217
                     (pair
218
                       (pair
219
                         (pair (pair (pair address nat) (pair address address))
220
                               (pair (pair address nat) (pair bool (pair nat nat))))
221
                         (pair (pair (pair nat nat) (pair timestamp bool))
222
                               (pair (pair nat nat)
223
                                     (pair nat
224
                                           (pair
225
                                             (big_map address
226
                                                      (pair (map address nat) nat))
227
                                             nat)))))
228
                       (pair
229
                         (pair
230
                           (pair (pair nat nat)
231
                                 (pair address
232
                                       (big_map address (pair nat (pair nat nat)))))
233
                           (pair (pair (pair (pair bool bool) (pair nat nat)) nat)
234
                                 (pair (big_map string bytes) (pair nat bool))))
235
                         (pair
236
                           (pair (pair nat nat)
237
                                 (pair address
238
                                       (pair (pair (pair nat nat) (pair nat nat))
239
                                             (big_map nat (pair nat (map string bytes))))))
240
                           (pair (pair nat nat) (pair nat (pair nat nat))))))))
241
         (pair unit
242
               (pair (list operation)
243
                     (pair
244
                       (pair
245
                         (pair (pair (pair address nat) (pair address address))
246
                               (pair (pair address nat) (pair bool (pair nat nat))))
247
                         (pair (pair (pair nat nat) (pair timestamp bool))
248
                               (pair (pair nat nat)
249
                                     (pair nat
250
                                           (pair
251
                                             (big_map address
252
                                                      (pair (map address nat) nat))
253
                                             nat)))))
254
                       (pair
255
                         (pair
256
                           (pair (pair nat nat)
257
                                 (pair address
258
                                       (big_map address (pair nat (pair nat nat)))))
259
                           (pair (pair (pair (pair bool bool) (pair nat nat)) nat)
260
                                 (pair (big_map string bytes) (pair nat bool))))
261
                         (pair
262
                           (pair (pair nat nat)
263
                                 (pair address
264
                                       (pair (pair (pair nat nat) (pair nat nat))
265
                                             (big_map nat (pair nat (map string bytes))))))
266
                           (pair (pair nat nat) (pair nat (pair nat nat))))))))
267
         { UNPAIR 3 ;
268
           SWAP ;
269
           DUP 3 ;
270
           CAR ;
271
           CAR ;
272
           GET 3 ;
273
           CAR ;
274
           CONTRACT %approve (pair (address %spender) (nat %value)) ;
275
           IF_NONE { PUSH string "cant call approve for tzBTC shares" ; FAILWITH } {} ;
276
           PUSH mutez 0 ;
277
           DUP 4 ;
278
           CDR ;
279
           DUP 6 ;
280
           CAR ;
281
           CAR ;
282
           CAR ;
283
           GET 3 ;
284
           PAIR ;
285
           TRANSFER_TOKENS ;
286
           CONS ;
287
           DUP ;
288
           DUP 4 ;
289
           CAR ;
290
           CAR ;
291
           CAR ;
292
           GET 3 ;
293
           CONTRACT %tokenToXtz (pair (address %to)
294
                                      (pair (nat %tokensSold)
295
                                            (pair (mutez %minXtzBought)
296
                                                  (timestamp %deadline)))) ;
297
           IF_NONE { PUSH string "cant call tokenToXtz" ; FAILWITH } {} ;
298
           PUSH mutez 0 ;
299
           PUSH int 1 ;
300
           NOW ;
301
           ADD ;
302
           DIG 5 ;
303
           DUP ;
304
           CAR ;
305
           SWAP ;
306
           DUP ;
307
           DUG 7 ;
308
           CDR ;
309
           SELF_ADDRESS ;
310
           PAIR 4 ;
311
           DIG 4 ;
312
           DROP ;
313
           DIG 4 ;
314
           DROP ;
315
           TRANSFER_TOKENS ;
316
           CONS ;
317
           SWAP ;
318
           DUP ;
319
           DUG 2 ;
320
           CAR ;
321
           CAR ;
322
           GET 3 ;
323
           CAR ;
324
           CONTRACT %approve (pair (address %spender) (nat %value)) ;
325
           IF_NONE { PUSH string "cant call approve for tzBTC shares" ; FAILWITH } {} ;
326
           PUSH mutez 0 ;
327
           PUSH nat 0 ;
328
           DUP 5 ;
329
           CAR ;
330
           CAR ;
331
           CAR ;
332
           GET 3 ;
333
           PAIR ;
334
           TRANSFER_TOKENS ;
335
           CONS ;
336
           UNIT ;
337
           PAIR 3 } ;
338
       SWAP ;
339
       LAMBDA
340
         (pair unit
341
               (pair (list operation)
342
                     (pair
343
                       (pair
344
                         (pair (pair (pair address nat) (pair address address))
345
                               (pair (pair address nat) (pair bool (pair nat nat))))
346
                         (pair (pair (pair nat nat) (pair timestamp bool))
347
                               (pair (pair nat nat)
348
                                     (pair nat
349
                                           (pair
350
                                             (big_map address
351
                                                      (pair (map address nat) nat))
352
                                             nat)))))
353
                       (pair
354
                         (pair
355
                           (pair (pair nat nat)
356
                                 (pair address
357
                                       (big_map address (pair nat (pair nat nat)))))
358
                           (pair (pair (pair (pair bool bool) (pair nat nat)) nat)
359
                                 (pair (big_map string bytes) (pair nat bool))))
360
                         (pair
361
                           (pair (pair nat nat)
362
                                 (pair address
363
                                       (pair (pair (pair nat nat) (pair nat nat))
364
                                             (big_map nat (pair nat (map string bytes))))))
365
                           (pair (pair nat nat) (pair nat (pair nat nat))))))))
366
         (pair unit
367
               (pair (list operation)
368
                     (pair
369
                       (pair
370
                         (pair (pair (pair address nat) (pair address address))
371
                               (pair (pair address nat) (pair bool (pair nat nat))))
372
                         (pair (pair (pair nat nat) (pair timestamp bool))
373
                               (pair (pair nat nat)
374
                                     (pair nat
375
                                           (pair
376
                                             (big_map address
377
                                                      (pair (map address nat) nat))
378
                                             nat)))))
379
                       (pair
380
                         (pair
381
                           (pair (pair nat nat)
382
                                 (pair address
383
                                       (big_map address (pair nat (pair nat nat)))))
384
                           (pair (pair (pair (pair bool bool) (pair nat nat)) nat)
385
                                 (pair (big_map string bytes) (pair nat bool))))
386
                         (pair
387
                           (pair (pair nat nat)
388
                                 (pair address
389
                                       (pair (pair (pair nat nat) (pair nat nat))
390
                                             (big_map nat (pair nat (map string bytes))))))
391
                           (pair (pair nat nat) (pair nat (pair nat nat))))))))
392
         { UNPAIR 3 ;
393
           SWAP ;
394
           DUP 3 ;
395
           CAR ;
396
           GET 3 ;
397
           GET 3 ;
398
           NOW ;
399
           SUB ;
400
           ISNAT ;
401
           IF_NONE { PUSH int 589 ; FAILWITH } {} ;
402
           PUSH nat 0 ;
403
           PUSH nat 0 ;
404
           DUP 6 ;
405
           GET 7 ;
406
           CAR ;
407
           COMPARE ;
408
           GT ;
409
           IF
410
             { DROP ;
411
               DIG 3 ;
412
               DUP ;
413
               CAR ;
414
               CAR ;
415
               CAR ;
416
               CAR ;
417
               CDR ;
418
               SWAP ;
419
               DUP ;
420
               DUG 5 ;
421
               GET 7 ;
422
               CAR ;
423
               MUL ;
424
               PUSH nat 1000000000000 ;
425
               DIG 5 ;
426
               DUP ;
427
               GET 3 ;
428
               GET 7 ;
429
               SWAP ;
430
               DUP ;
431
               DUG 7 ;
432
               GET 9 ;
433
               MUL ;
434
               MUL ;
435
               EDIV ;
436
               IF_NONE { PUSH int 594 ; FAILWITH } { CAR } }
437
             {} ;
438
           PUSH nat 0 ;
439
           PUSH nat 0 ;
440
           DUP 7 ;
441
           GET 7 ;
442
           CAR ;
443
           COMPARE ;
444
           GT ;
445
           IF
446
             { DROP ;
447
               DIG 4 ;
448
               DUP ;
449
               CAR ;
450
               CAR ;
451
               CAR ;
452
               CAR ;
453
               CDR ;
454
               SWAP ;
455
               DUP ;
456
               DUG 6 ;
457
               GET 7 ;
458
               CAR ;
459
               MUL ;
460
               PUSH nat 1000000000000 ;
461
               DIG 6 ;
462
               DUP ;
463
               CAR ;
464
               GET 3 ;
465
               CAR ;
466
               CAR ;
467
               SWAP ;
468
               DUP ;
469
               DUG 8 ;
470
               GET 7 ;
471
               CDR ;
472
               MUL ;
473
               MUL ;
474
               EDIV ;
475
               IF_NONE { PUSH int 548 ; FAILWITH } { CAR } }
476
             {} ;
477
           PUSH nat 10000000000 ;
478
           DUP 7 ;
479
           GET 5 ;
480
           GET 5 ;
481
           GET 3 ;
482
           MUL ;
483
           PUSH nat 10000000000 ;
484
           DUP 8 ;
485
           GET 5 ;
486
           GET 5 ;
487
           GET 4 ;
488
           MUL ;
489
           SWAP ;
490
           DUP ;
491
           DUG 2 ;
492
           DUP 4 ;
493
           COMPARE ;
494
           LT ;
495
           IF
496
             { SWAP ;
497
               DUP ;
498
               DUG 2 ;
499
               DUP 4 ;
500
               DUP 10 ;
501
               GET 5 ;
502
               GET 5 ;
503
               CAR ;
504
               CAR ;
505
               MUL ;
506
               EDIV ;
507
               IF_NONE { PUSH int 561 ; FAILWITH } { CAR } ;
508
               DUG 2 }
509
             { DUP ;
510
               DUP 4 ;
511
               COMPARE ;
512
               LT ;
513
               IF
514
                 { DUP 8 ; GET 5 ; GET 5 ; CAR ; CAR ; DUG 2 }
515
                 { PUSH nat 1000000000000 ;
516
                   DUP 4 ;
517
                   COMPARE ;
518
                   LT ;
519
                   IF
520
                     { DUP ;
521
                       PUSH nat 1000000000000 ;
522
                       SUB ;
523
                       ISNAT ;
524
                       IF_NONE { PUSH int 575 ; FAILWITH } {} ;
525
                       SWAP ;
526
                       DUP ;
527
                       DUG 2 ;
528
                       DUP 5 ;
529
                       SUB ;
530
                       ISNAT ;
531
                       IF_NONE { PUSH int 573 ; FAILWITH } {} ;
532
                       DUP 10 ;
533
                       GET 5 ;
534
                       GET 5 ;
535
                       CAR ;
536
                       CDR ;
537
                       MUL ;
538
                       EDIV ;
539
                       IF_NONE { PUSH int 573 ; FAILWITH } { CAR } ;
540
                       DUP 9 ;
541
                       GET 5 ;
542
                       GET 5 ;
543
                       CAR ;
544
                       CAR ;
545
                       ADD ;
546
                       DUG 2 }
547
                     { DIG 7 ; DUP ; GET 5 ; GET 5 ; CAR ; CDR ; SWAP ; DUP ; DUG 9 ; GET 5 ; GET 5 ; CAR ; CAR ; ADD ; DUG 2 } } } ;
548
           DUP 9 ;
549
           UNPAIR ;
550
           UNPAIR ;
551
           SWAP ;
552
           UNPAIR ;
553
           UNPAIR ;
554
           CDR ;
555
           PUSH nat 1000000000000 ;
556
           DUP 12 ;
557
           DUP 10 ;
558
           MUL ;
559
           PUSH nat 1000000000000 ;
560
           ADD ;
561
           DIG 15 ;
562
           CAR ;
563
           GET 3 ;
564
           CAR ;
565
           CAR ;
566
           MUL ;
567
           NEG ;
568
           EDIV ;
569
           IF_NONE { PUSH int 39 ; FAILWITH } {} ;
570
           CAR ;
571
           ABS ;
572
           PAIR ;
573
           PAIR ;
574
           PAIR ;
575
           SWAP ;
576
           PAIR ;
577
           PAIR ;
578
           DUG 8 ;
579
           PUSH nat 0 ;
580
           DUP 10 ;
581
           CAR ;
582
           GET 3 ;
583
           GET 4 ;
584
           IF
585
             { DROP 3 ;
586
               SWAP ;
587
               DROP ;
588
               DIG 4 ;
589
               DROP ;
590
               PUSH nat 10 ;
591
               PUSH nat 9 ;
592
               DIG 2 ;
593
               MUL ;
594
               EDIV ;
595
               IF_NONE { PUSH int 604 ; FAILWITH } { CAR } }
596
             { SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; DIG 4 ; DROP } ;
597
           DUP 5 ;
598
           UNPAIR ;
599
           SWAP ;
600
           UNPAIR ;
601
           UNPAIR ;
602
           SWAP ;
603
           UNPAIR ;
604
           SWAP ;
605
           UNPAIR ;
606
           SWAP ;
607
           CDR ;
608
           PUSH nat 1000000000000 ;
609
           DUP 10 ;
610
           DUP 9 ;
611
           MUL ;
612
           PUSH nat 1000000000000 ;
613
           ADD ;
614
           DIG 12 ;
615
           GET 3 ;
616
           GET 7 ;
617
           MUL ;
618
           NEG ;
619
           EDIV ;
620
           IF_NONE { PUSH int 39 ; FAILWITH } {} ;
621
           CAR ;
622
           ABS ;
623
           PAIR ;
624
           SWAP ;
625
           PAIR ;
626
           SWAP ;
627
           PAIR ;
628
           SWAP ;
629
           PAIR ;
630
           PAIR ;
631
           SWAP ;
632
           PAIR ;
633
           DUG 4 ;
634
           PUSH nat 1000000000000 ;
635
           DUG 2 ;
636
           MUL ;
637
           EDIV ;
638
           IF_NONE { PUSH int 607 ; FAILWITH } { CAR } ;
639
           DUP 4 ;
640
           UNPAIR ;
641
           UNPAIR ;
642
           UNPAIR ;
643
           UNPAIR ;
644
           CAR ;
645
           PUSH nat 1000000000000 ;
646
           DIG 7 ;
647
           DIG 7 ;
648
           MUL ;
649
           PUSH nat 1000000000000 ;
650
           ADD ;
651
           DIG 8 ;
652
           CAR ;
653
           CAR ;
654
           CAR ;
655
           CAR ;
656
           CDR ;
657
           MUL ;
658
           EDIV ;
659
           IF_NONE { PUSH int 608 ; FAILWITH } { CAR } ;
660
           SWAP ;
661
           PAIR ;
662
           PAIR ;
663
           PAIR ;
664
           PAIR ;
665
           PAIR ;
666
           SWAP ;
667
           UNIT ;
668
           PAIR 3 } ;
669
       SWAP ;
670
       UNPAIR ;
671
       IF_LEFT
672
         { IF_LEFT
673
             { IF_LEFT
674
                 { IF_LEFT
675
                     { DIG 2 ;
676
                       DROP ;
677
                       DIG 2 ;
678
                       DROP ;
679
                       DIG 2 ;
680
                       DROP ;
681
                       IF_LEFT
682
                         { SWAP ;
683
                           DUP ;
684
                           DUG 2 ;
685
                           CAR ;
686
                           GET 9 ;
687
                           SENDER ;
688
                           MEM ;
689
                           IF
690
                             {}
691
                             { SWAP ;
692
                               UNPAIR ;
693
                               UNPAIR ;
694
                               SWAP ;
695
                               UNPAIR ;
696
                               SWAP ;
697
                               UNPAIR ;
698
                               SWAP ;
699
                               UNPAIR ;
700
                               SWAP ;
701
                               UNPAIR ;
702
                               PUSH (option (pair (map address nat) nat)) (Some (Pair {} 0)) ;
703
                               SENDER ;
704
                               UPDATE ;
705
                               PAIR ;
706
                               SWAP ;
707
                               PAIR ;
708
                               SWAP ;
709
                               PAIR ;
710
                               SWAP ;
711
                               PAIR ;
712
                               SWAP ;
713
                               PAIR ;
714
                               PAIR ;
715
                               SWAP } ;
716
                           PUSH nat 0 ;
717
                           DUP 3 ;
718
                           CAR ;
719
                           GET 9 ;
720
                           SENDER ;
721
                           GET ;
722
                           IF_NONE { PUSH int 95 ; FAILWITH } {} ;
723
                           CAR ;
724
                           DUP 3 ;
725
                           CAR ;
726
                           GET ;
727
                           IF_NONE { PUSH nat 0 } {} ;
728
                           COMPARE ;
729
                           EQ ;
730
                           IF
731
                             { PUSH bool True }
732
                             { DUP ; CDR ; PUSH nat 0 ; COMPARE ; EQ } ;
733
                           IF {} { PUSH string "UnsafeAllowanceChange" ; FAILWITH } ;
734
                           SWAP ;
735
                           UNPAIR ;
736
                           UNPAIR ;
737
                           SWAP ;
738
                           UNPAIR ;
739
                           SWAP ;
740
                           UNPAIR ;
741
                           SWAP ;
742
                           UNPAIR ;
743
                           SWAP ;
744
                           UNPAIR ;
745
                           DUP ;
746
                           SENDER ;
747
                           DUP ;
748
                           DUG 2 ;
749
                           GET ;
750
                           IF_NONE { PUSH int 97 ; FAILWITH } {} ;
751
                           DUP ;
752
                           CAR ;
753
                           DUP 11 ;
754
                           CDR ;
755
                           SOME ;
756
                           DIG 11 ;
757
                           CAR ;
758
                           UPDATE ;
759
                           UPDATE 1 ;
760
                           SOME ;
761
                           SWAP ;
762
                           UPDATE ;
763
                           PAIR ;
764
                           SWAP ;
765
                           PAIR ;
766
                           SWAP ;
767
                           PAIR ;
768
                           SWAP ;
769
                           PAIR ;
770
                           SWAP ;
771
                           PAIR ;
772
                           PAIR }
773
                         { DROP ;
774
                           SENDER ;
775
                           SELF_ADDRESS ;
776
                           COMPARE ;
777
                           EQ ;
778
                           IF {} { PUSH string "Forbidden." ; FAILWITH } ;
779
                           DUP ;
780
                           GET 3 ;
781
                           GET 3 ;
782
                           CAR ;
783
                           GET 3 ;
784
                           PUSH nat 0 ;
785
                           COMPARE ;
786
                           LT ;
787
                           IF
788
                             { DUP ;
789
                               GET 3 ;
790
                               GET 3 ;
791
                               CAR ;
792
                               GET 3 ;
793
                               PUSH nat 1000000000000 ;
794
                               DUP 3 ;
795
                               GET 3 ;
796
                               GET 3 ;
797
                               CAR ;
798
                               GET 4 ;
799
                               MUL ;
800
                               EDIV ;
801
                               IF_NONE { PUSH int 627 ; FAILWITH } { CAR } ;
802
                               SWAP ;
803
                               DUP ;
804
                               DUG 2 ;
805
                               CAR ;
806
                               GET 5 ;
807
                               CAR ;
808
                               SWAP ;
809
                               DUP ;
810
                               DUG 2 ;
811
                               COMPARE ;
812
                               GT ;
813
                               IF
814
                                 { SWAP ;
815
                                   DUP ;
816
                                   DUG 2 ;
817
                                   UNPAIR ;
818
                                   UNPAIR ;
819
                                   SWAP ;
820
                                   UNPAIR ;
821
                                   SWAP ;
822
                                   UNPAIR ;
823
                                   CDR ;
824
                                   PUSH nat 1000000000000 ;
825
                                   DUP 8 ;
826
                                   CAR ;
827
                                   GET 3 ;
828
                                   GET 3 ;
829
                                   NOW ;
830
                                   SUB ;
831
                                   ISNAT ;
832
                                   IF_NONE { PUSH int 631 ; FAILWITH } {} ;
833
                                   DUP 9 ;
834
                                   CAR ;
835
                                   GET 5 ;
836
                                   CDR ;
837
                                   MUL ;
838
                                   PUSH nat 1000000000000 ;
839
                                   ADD ;
840
                                   DIG 8 ;
841
                                   CAR ;
842
                                   GET 5 ;
843
                                   CAR ;
844
                                   MUL ;
845
                                   EDIV ;
846
                                   IF_NONE { PUSH int 631 ; FAILWITH } { CAR } ;
847
                                   DIG 6 ;
848
                                   DUP ;
849
                                   DUP 3 ;
850
                                   COMPARE ;
851
                                   LE ;
852
                                   IF { DROP } { SWAP ; DROP } ;
853
                                   PAIR ;
854
                                   PAIR ;
855
                                   SWAP ;
856
                                   PAIR ;
857
                                   SWAP ;
858
                                   PAIR ;
859
                                   PAIR }
860
                                 { SWAP ;
861
                                   DUP ;
862
                                   DUG 2 ;
863
                                   UNPAIR ;
864
                                   UNPAIR ;
865
                                   SWAP ;
866
                                   UNPAIR ;
867
                                   SWAP ;
868
                                   UNPAIR ;
869
                                   CDR ;
870
                                   PUSH nat 1000000000000 ;
871
                                   DUP 8 ;
872
                                   CAR ;
873
                                   GET 3 ;
874
                                   GET 3 ;
875
                                   NOW ;
876
                                   SUB ;
877
                                   ISNAT ;
878
                                   IF_NONE { PUSH int 637 ; FAILWITH } {} ;
879
                                   DUP 9 ;
880
                                   CAR ;
881
                                   GET 5 ;
882
                                   CDR ;
883
                                   MUL ;
884
                                   PUSH nat 1000000000000 ;
885
                                   SUB ;
886
                                   PUSH int 1 ;
887
                                   DUP ;
888
                                   DUP 3 ;
889
                                   COMPARE ;
890
                                   LE ;
891
                                   IF { SWAP ; DROP } { DROP } ;
892
                                   ISNAT ;
893
                                   IF_NONE { PUSH int 636 ; FAILWITH } {} ;
894
                                   DIG 8 ;
895
                                   CAR ;
896
                                   GET 5 ;
897
                                   CAR ;
898
                                   MUL ;
899
                                   EDIV ;
900
                                   IF_NONE { PUSH int 636 ; FAILWITH } { CAR } ;
901
                                   DIG 6 ;
902
                                   DUP ;
903
                                   DUP 3 ;
904
                                   COMPARE ;
905
                                   LE ;
906
                                   IF { SWAP ; DROP } { DROP } ;
907
                                   PAIR ;
908
                                   PAIR ;
909
                                   SWAP ;
910
                                   PAIR ;
911
                                   SWAP ;
912
                                   PAIR ;
913
                                   PAIR } }
914
                             {} ;
915
                           UNPAIR ;
916
                           UNPAIR ;
917
                           SWAP ;
918
                           UNPAIR ;
919
                           UNPAIR ;
920
                           SWAP ;
921
                           CDR ;
922
                           NOW ;
923
                           PAIR ;
924
                           SWAP ;
925
                           PAIR ;
926
                           PAIR ;
927
                           SWAP ;
928
                           PAIR ;
929
                           PAIR } ;
930
                       NIL operation }
931
                     { IF_LEFT
932
                         { DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; NIL operation }
933
                         { NOW ;
934
                           DUP 3 ;
935
                           CAR ;
936
                           GET 3 ;
937
                           GET 3 ;
938
                           COMPARE ;
939
                           NEQ ;
940
                           IF
941
                             { DIG 3 ;
942
                               DROP ;
943
                               DIG 3 ;
944
                               DROP ;
945
                               NIL operation ;
946
                               DIG 3 ;
947
                               UNIT ;
948
                               SWAP ;
949
                               DIG 4 ;
950
                               DIG 3 ;
951
                               DIG 3 ;
952
                               PAIR 3 ;
953
                               EXEC ;
954
                               CDR ;
955
                               UNPAIR ;
956
                               SWAP ;
957
                               DUP ;
958
                               DUG 3 ;
959
                               CAR ;
960
                               CAR ;
961
                               CAR ;
962
                               GET 4 ;
963
                               CONTRACT %getTotalSupply (pair (unit %request)
964
                                                              (contract %callback nat)) ;
965
                               IF_NONE
966
                                 { PUSH string "cant call getTotalSupply of lb token" ;
967
                                   FAILWITH }
968
                                 {} ;
969
                               PUSH mutez 0 ;
970
                               SELF %updateLqtTotalCallback ;
971
                               UNIT ;
972
                               PAIR ;
973
                               TRANSFER_TOKENS ;
974
                               CONS ;
975
                               DUP 3 ;
976
                               CAR ;
977
                               CAR ;
978
                               GET 3 ;
979
                               CAR ;
980
                               CONTRACT %getBalance (pair (address %owner)
981
                                                          (contract %callback nat)) ;
982
                               IF_NONE
983
                                 { PUSH string "cant call getBalance for tzBTC" ;
984
                                   FAILWITH }
985
                                 {} ;
986
                               PUSH mutez 0 ;
987
                               SELF %updateTzbtcPoolCallback ;
988
                               DUP 6 ;
989
                               GET 3 ;
990
                               CAR ;
991
                               GET 3 ;
992
                               PAIR ;
993
                               TRANSFER_TOKENS ;
994
                               CONS ;
995
                               SELF %calculateLbPrice ;
996
                               PUSH mutez 0 ;
997
                               UNIT ;
998
                               TRANSFER_TOKENS ;
999
                               CONS }
1000
                             { DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; NIL operation } ;
1001
                           DUP 3 ;
1002
                           CAR ;
1003
                           GET 9 ;
1004
                           SENDER ;
1005
                           MEM ;
1006
                           IF
1007
                             {}
1008
                             { DIG 2 ;
1009
                               UNPAIR ;
1010
                               UNPAIR ;
1011
                               SWAP ;
1012
                               UNPAIR ;
1013
                               SWAP ;
1014
                               UNPAIR ;
1015
                               SWAP ;
1016
                               UNPAIR ;
1017
                               SWAP ;
1018
                               UNPAIR ;
1019
                               PUSH (option (pair (map address nat) nat)) (Some (Pair {} 0)) ;
1020
                               SENDER ;
1021
                               UPDATE ;
1022
                               PAIR ;
1023
                               SWAP ;
1024
                               PAIR ;
1025
                               SWAP ;
1026
                               PAIR ;
1027
                               SWAP ;
1028
                               PAIR ;
1029
                               SWAP ;
1030
                               PAIR ;
1031
                               PAIR ;
1032
                               DUG 2 } ;
1033
                           DUP 3 ;
1034
                           CAR ;
1035
                           CAR ;
1036
                           CAR ;
1037
                           CAR ;
1038
                           CDR ;
1039
                           PUSH nat 1000000000000 ;
1040
                           DUP ;
1041
                           DUP 5 ;
1042
                           MUL ;
1043
                           MUL ;
1044
                           EDIV ;
1045
                           IF_NONE { PUSH int 662 ; FAILWITH } { CAR } ;
1046
                           DIG 3 ;
1047
                           UNPAIR ;
1048
                           UNPAIR ;
1049
                           SWAP ;
1050
                           UNPAIR ;
1051
                           SWAP ;
1052
                           UNPAIR ;
1053
                           SWAP ;
1054
                           UNPAIR ;
1055
                           SWAP ;
1056
                           UNPAIR ;
1057
                           DUP ;
1058
                           SENDER ;
1059
                           DUP ;
1060
                           DUG 2 ;
1061
                           GET ;
1062
                           IF_NONE { PUSH int 663 ; FAILWITH } {} ;
1063
                           DUP ;
1064
                           CDR ;
1065
                           DUP 11 ;
1066
                           ADD ;
1067
                           UPDATE 2 ;
1068
                           SOME ;
1069
                           SWAP ;
1070
                           UPDATE ;
1071
                           PAIR ;
1072
                           SWAP ;
1073
                           PAIR ;
1074
                           SWAP ;
1075
                           PAIR ;
1076
                           SWAP ;
1077
                           PAIR ;
1078
                           SWAP ;
1079
                           PAIR ;
1080
                           SWAP ;
1081
                           UNPAIR ;
1082
                           SWAP ;
1083
                           UNPAIR ;
1084
                           SWAP ;
1085
                           UNPAIR ;
1086
                           UNPAIR ;
1087
                           DIG 6 ;
1088
                           ADD ;
1089
                           PAIR ;
1090
                           PAIR ;
1091
                           SWAP ;
1092
                           PAIR ;
1093
                           SWAP ;
1094
                           PAIR ;
1095
                           SWAP ;
1096
                           PAIR ;
1097
                           DUP ;
1098
                           DUG 3 ;
1099
                           CAR ;
1100
                           CAR ;
1101
                           GET 3 ;
1102
                           CAR ;
1103
                           CONTRACT %transfer (pair (address %from)
1104
                                                    (pair (address %to) (nat %value))) ;
1105
                           IF_NONE
1106
                             { PUSH string "cant call transfer for tzBTC shares" ;
1107
                               FAILWITH }
1108
                             {} ;
1109
                           PUSH mutez 0 ;
1110
                           DUP 4 ;
1111
                           SELF_ADDRESS ;
1112
                           SENDER ;
1113
                           PAIR 3 ;
1114
                           TRANSFER_TOKENS ;
1115
                           CONS ;
1116
                           DIG 2 ;
1117
                           DUP ;
1118
                           GET 11 ;
1119
                           DIG 3 ;
1120
                           ADD ;
1121
                           UPDATE 11 ;
1122
                           SWAP } } }
1123
                 { IF_LEFT
1124
                     { IF_LEFT
1125
                         { DROP ;
1126
                           SWAP ;
1127
                           DROP ;
1128
                           SWAP ;
1129
                           DROP ;
1130
                           SWAP ;
1131
                           DROP ;
1132
                           DUP ;
1133
                           CAR ;
1134
                           CAR ;
1135
                           CAR ;
1136
                           CAR ;
1137
                           CAR ;
1138
                           SENDER ;
1139
                           COMPARE ;
1140
                           EQ ;
1141
                           IF {} { PUSH string "Forbidden." ; FAILWITH } ;
1142
                           UNPAIR ;
1143
                           SWAP ;
1144
                           UNPAIR ;
1145
                           UNPAIR ;
1146
                           SWAP ;
1147
                           UNPAIR ;
1148
                           SWAP ;
1149
                           UNPAIR ;
1150
                           SWAP ;
1151
                           CAR ;
1152
                           PUSH bool False ;
1153
                           SWAP ;
1154
                           PAIR ;
1155
                           SWAP ;
1156
                           PAIR ;
1157
                           SWAP ;
1158
                           PAIR ;
1159
                           SWAP ;
1160
                           PAIR ;
1161
                           PAIR ;
1162
                           SWAP ;
1163
                           PAIR ;
1164
                           NIL operation }
1165
                         { SWAP ;
1166
                           DUP ;
1167
                           DUG 2 ;
1168
                           CAR ;
1169
                           CAR ;
1170
                           GET 5 ;
1171
                           IF
1172
                             {}
1173
                             { PUSH string "flashloan is not available" ; FAILWITH } ;
1174
                           DUP ;
1175
                           CDR ;
1176
                           PUSH nat 0 ;
1177
                           COMPARE ;
1178
                           LT ;
1179
                           IF {} { PUSH string "zero requested shares" ; FAILWITH } ;
1180
                           NOW ;
1181
                           DUP 3 ;
1182
                           CAR ;
1183
                           GET 3 ;
1184
                           GET 3 ;
1185
                           COMPARE ;
1186
                           NEQ ;
1187
                           IF
1188
                             { DIG 3 ;
1189
                               DROP ;
1190
                               DIG 3 ;
1191
                               DROP ;
1192
                               NIL operation ;
1193
                               DIG 3 ;
1194
                               UNIT ;
1195
                               SWAP ;
1196
                               DIG 4 ;
1197
                               DIG 3 ;
1198
                               DIG 3 ;
1199
                               PAIR 3 ;
1200
                               EXEC ;
1201
                               CDR ;
1202
                               UNPAIR ;
1203
                               SWAP ;
1204
                               DUP ;
1205
                               DUG 3 ;
1206
                               CAR ;
1207
                               CAR ;
1208
                               CAR ;
1209
                               GET 4 ;
1210
                               CONTRACT %getTotalSupply (pair (unit %request)
1211
                                                              (contract %callback nat)) ;
1212
                               IF_NONE
1213
                                 { PUSH string "cant call getTotalSupply of lb token" ;
1214
                                   FAILWITH }
1215
                                 {} ;
1216
                               PUSH mutez 0 ;
1217
                               SELF %updateLqtTotalCallback ;
1218
                               UNIT ;
1219
                               PAIR ;
1220
                               TRANSFER_TOKENS ;
1221
                               CONS ;
1222
                               DUP 3 ;
1223
                               CAR ;
1224
                               CAR ;
1225
                               GET 3 ;
1226
                               CAR ;
1227
                               CONTRACT %getBalance (pair (address %owner)
1228
                                                          (contract %callback nat)) ;
1229
                               IF_NONE
1230
                                 { PUSH string "cant call getBalance for tzBTC" ;
1231
                                   FAILWITH }
1232
                                 {} ;
1233
                               PUSH mutez 0 ;
1234
                               SELF %updateTzbtcPoolCallback ;
1235
                               DUP 6 ;
1236
                               GET 3 ;
1237
                               CAR ;
1238
                               GET 3 ;
1239
                               PAIR ;
1240
                               TRANSFER_TOKENS ;
1241
                               CONS ;
1242
                               SELF %calculateLbPrice ;
1243
                               PUSH mutez 0 ;
1244
                               UNIT ;
1245
                               TRANSFER_TOKENS ;
1246
                               CONS }
1247
                             { DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; NIL operation } ;
1248
                           PUSH nat 100000 ;
1249
                           DIG 3 ;
1250
                           DUP ;
1251
                           CAR ;
1252
                           CAR ;
1253
                           GET 7 ;
1254
                           SWAP ;
1255
                           DUP ;
1256
                           DUG 5 ;
1257
                           CAR ;
1258
                           CAR ;
1259
                           GET 3 ;
1260
                           CDR ;
1261
                           ADD ;
1262
                           DUP 4 ;
1263
                           CDR ;
1264
                           MUL ;
1265
                           NEG ;
1266
                           EDIV ;
1267
                           IF_NONE { PUSH int 39 ; FAILWITH } {} ;
1268
                           CAR ;
1269
                           ABS ;
1270
                           DIG 3 ;
1271
                           UNPAIR ;
1272
                           UNPAIR ;
1273
                           UNPAIR ;
1274
                           SWAP ;
1275
                           UNPAIR ;
1276
                           SWAP ;
1277
                           UNPAIR ;
1278
                           SWAP ;
1279
                           UNPAIR ;
1280
                           SWAP ;
1281
                           DUP 8 ;
1282
                           DUP 11 ;
1283
                           CDR ;
1284
                           ADD ;
1285
                           ADD ;
1286
                           SWAP ;
1287
                           PAIR ;
1288
                           SWAP ;
1289
                           PAIR ;
1290
                           SWAP ;
1291
                           PAIR ;
1292
                           SWAP ;
1293
                           PAIR ;
1294
                           PAIR ;
1295
                           PAIR ;
1296
                           DUP ;
1297
                           GET 11 ;
1298
                           DIG 2 ;
1299
                           ADD ;
1300
                           UPDATE 11 ;
1301
                           DUG 2 ;
1302
                           PUSH nat 0 ;
1303
                           DUP 4 ;
1304
                           GET 7 ;
1305
                           CAR ;
1306
                           COMPARE ;
1307
                           GT ;
1308
                           IF
1309
                             { DUP 3 ;
1310
                               UNPAIR ;
1311
                               UNPAIR ;
1312
                               UNPAIR ;
1313
                               UNPAIR ;
1314
                               UNPAIR ;
1315
                               SWAP ;
1316
                               PUSH nat 100000 ;
1317
                               DUP 10 ;
1318
                               GET 7 ;
1319
                               CAR ;
1320
                               PUSH nat 1000000000000 ;
1321
                               DUP ;
1322
                               DUP 12 ;
1323
                               CDR ;
1324
                               MUL ;
1325
                               DIG 12 ;
1326
                               CAR ;
1327
                               CAR ;
1328
                               GET 7 ;
1329
                               MUL ;
1330
                               MUL ;
1331
                               EDIV ;
1332
                               IF_NONE { PUSH int 1264 ; FAILWITH } { CAR } ;
1333
                               EDIV ;
1334
                               IF_NONE { PUSH int 1264 ; FAILWITH } { CAR } ;
1335
                               ADD ;
1336
                               SWAP ;
1337
                               PAIR ;
1338
                               PAIR ;
1339
                               PAIR ;
1340
                               PAIR ;
1341
                               PAIR ;
1342
                               DUG 2 }
1343
                             {} ;
1344
                           DUP 3 ;
1345
                           CAR ;
1346
                           CAR ;
1347
                           GET 3 ;
1348
                           CAR ;
1349
                           CONTRACT %transfer (pair (address %from)
1350
                                                    (pair (address %to) (nat %value))) ;
1351
                           IF_NONE
1352
                             { PUSH string "cant call transfer for tzBTC shares" ;
1353
                               FAILWITH }
1354
                             {} ;
1355
                           PUSH mutez 0 ;
1356
                           DUP 4 ;
1357
                           CDR ;
1358
                           SENDER ;
1359
                           SELF_ADDRESS ;
1360
                           PAIR 3 ;
1361
                           TRANSFER_TOKENS ;
1362
                           CONS ;
1363
                           SWAP ;
1364
                           CAR ;
1365
                           PUSH mutez 0 ;
1366
                           UNIT ;
1367
                           TRANSFER_TOKENS ;
1368
                           CONS ;
1369
                           SELF %flashloanFinalize ;
1370
                           PUSH mutez 0 ;
1371
                           UNIT ;
1372
                           TRANSFER_TOKENS ;
1373
                           CONS } }
1374
                     { DIG 3 ;
1375
                       DROP ;
1376
                       DIG 3 ;
1377
                       DROP ;
1378
                       IF_LEFT
1379
                         { DROP ;
1380
                           SWAP ;
1381
                           DROP ;
1382
                           DUP ;
1383
                           CAR ;
1384
                           CAR ;
1385
                           GET 8 ;
1386
                           PUSH nat 0 ;
1387
                           COMPARE ;
1388
                           EQ ;
1389
                           IF {} { PUSH string "loan error" ; FAILWITH } ;
1390
                           NIL operation }
1391
                         { IF_LEFT
1392
                             { NIL operation ;
1393
                               DUP 3 ;
1394
                               CAR ;
1395
                               CAR ;
1396
                               GET 3 ;
1397
                               CAR ;
1398
                               CONTRACT %transfer (pair (address %from)
1399
                                                        (pair (address %to) (nat %value))) ;
1400
                               IF_NONE
1401
                                 { PUSH string "cant call transfer for tzBTC shares" ;
1402
                                   FAILWITH }
1403
                                 {} ;
1404
                               PUSH mutez 0 ;
1405
                               DUP 4 ;
1406
                               SELF_ADDRESS ;
1407
                               SENDER ;
1408
                               PAIR 3 ;
1409
                               TRANSFER_TOKENS ;
1410
                               CONS ;
1411
                               SWAP ;
1412
                               DUP ;
1413
                               DUG 2 ;
1414
                               DUP 4 ;
1415
                               CAR ;
1416
                               CAR ;
1417
                               GET 8 ;
1418
                               SUB ;
1419
                               ISNAT ;
1420
                               DUP ;
1421
                               IF_NONE
1422
                                 { DROP ;
1423
                                   SWAP ;
1424
                                   DROP ;
1425
                                   DIG 2 ;
1426
                                   DROP ;
1427
                                   SWAP ;
1428
                                   UNPAIR ;
1429
                                   UNPAIR ;
1430
                                   UNPAIR ;
1431
                                   SWAP ;
1432
                                   UNPAIR ;
1433
                                   SWAP ;
1434
                                   UNPAIR ;
1435
                                   SWAP ;
1436
                                   CAR ;
1437
                                   PUSH nat 0 ;
1438
                                   SWAP ;
1439
                                   PAIR ;
1440
                                   SWAP ;
1441
                                   PAIR ;
1442
                                   SWAP ;
1443
                                   PAIR ;
1444
                                   SWAP ;
1445
                                   PAIR ;
1446
                                   PAIR ;
1447
                                   PAIR ;
1448
                                   SWAP }
1449
                                 { DROP ;
1450
                                   DIG 2 ;
1451
                                   DROP ;
1452
                                   DIG 3 ;
1453
                                   DROP ;
1454
                                   DIG 2 ;
1455
                                   UNPAIR ;
1456
                                   UNPAIR ;
1457
                                   UNPAIR ;
1458
                                   SWAP ;
1459
                                   UNPAIR ;
1460
                                   SWAP ;
1461
                                   UNPAIR ;
1462
                                   SWAP ;
1463
                                   CAR ;
1464
                                   DIG 6 ;
1465
                                   IF_NONE { PUSH int 1287 ; FAILWITH } {} ;
1466
                                   SWAP ;
1467
                                   PAIR ;
1468
                                   SWAP ;
1469
                                   PAIR ;
1470
                                   SWAP ;
1471
                                   PAIR ;
1472
                                   SWAP ;
1473
                                   PAIR ;
1474
                                   PAIR ;
1475
                                   PAIR ;
1476
                                   SWAP } }
1477
                             { DIG 2 ;
1478
                               DROP ;
1479
                               SWAP ;
1480
                               DUP ;
1481
                               DUG 2 ;
1482
                               CAR ;
1483
                               CAR ;
1484
                               CAR ;
1485
                               CAR ;
1486
                               CAR ;
1487
                               NIL operation ;
1488
                               DIG 2 ;
1489
                               CDR ;
1490
                               PUSH mutez 0 ;
1491
                               DIG 3 ;
1492
                               TRANSFER_TOKENS ;
1493
                               CONS } } } } }
1494
             { IF_LEFT
1495
                 { IF_LEFT
1496
                     { DIG 3 ;
1497
                       DROP ;
1498
                       DIG 3 ;
1499
                       DROP ;
1500
                       IF_LEFT
1501
                         { DIG 2 ;
1502
                           DROP ;
1503
                           SWAP ;
1504
                           DUP ;
1505
                           DUG 2 ;
1506
                           CAR ;
1507
                           GET 9 ;
1508
                           SWAP ;
1509
                           DUP ;
1510
                           DUG 2 ;
1511
                           CAR ;
1512
                           CAR ;
1513
                           MEM ;
1514
                           IF
1515
                             { SWAP ;
1516
                               DUP ;
1517
                               DUG 2 ;
1518
                               CAR ;
1519
                               GET 9 ;
1520
                               SWAP ;
1521
                               DUP ;
1522
                               DUG 2 ;
1523
                               CAR ;
1524
                               CAR ;
1525
                               GET ;
1526
                               IF_NONE { PUSH int 113 ; FAILWITH } {} ;
1527
                               CAR ;
1528
                               SWAP ;
1529
                               DUP ;
1530
                               DUG 2 ;
1531
                               CAR ;
1532
                               CDR ;
1533
                               GET ;
1534
                               IF_NONE { PUSH nat 0 } {} }
1535
                             { PUSH nat 0 } ;
1536
                           NIL operation ;
1537
                           DIG 2 ;
1538
                           CDR ;
1539
                           PUSH mutez 0 ;
1540
                           DIG 3 ;
1541
                           TRANSFER_TOKENS ;
1542
                           CONS }
1543
                         { DIG 2 ;
1544
                           DROP ;
1545
                           SWAP ;
1546
                           DUP ;
1547
                           DUG 2 ;
1548
                           CAR ;
1549
                           GET 9 ;
1550
                           SWAP ;
1551
                           DUP ;
1552
                           DUG 2 ;
1553
                           CAR ;
1554
                           MEM ;
1555
                           IF
1556
                             { SWAP ;
1557
                               DUP ;
1558
                               DUG 2 ;
1559
                               CAR ;
1560
                               GET 9 ;
1561
                               SWAP ;
1562
                               DUP ;
1563
                               DUG 2 ;
1564
                               CAR ;
1565
                               GET ;
1566
                               IF_NONE { PUSH int 106 ; FAILWITH } {} ;
1567
                               CDR }
1568
                             { PUSH nat 0 } ;
1569
                           NIL operation ;
1570
                           DIG 2 ;
1571
                           CDR ;
1572
                           PUSH mutez 0 ;
1573
                           DIG 3 ;
1574
                           TRANSFER_TOKENS ;
1575
                           CONS } }
1576
                     { IF_LEFT
1577
                         { DIG 2 ;
1578
                           DROP ;
1579
                           DIG 2 ;
1580
                           DROP ;
1581
                           DIG 2 ;
1582
                           DROP ;
1583
                           SWAP ;
1584
                           DUP ;
1585
                           DUG 2 ;
1586
                           GET 7 ;
1587
                           CAR ;
1588
                           NIL operation ;
1589
                           DIG 2 ;
1590
                           CDR ;
1591
                           PUSH mutez 0 ;
1592
                           DIG 3 ;
1593
                           TRANSFER_TOKENS ;
1594
                           CONS }
1595
                         { IF_LEFT
1596
                             { NOW ;
1597
                               DUP 3 ;
1598
                               CAR ;
1599
                               GET 3 ;
1600
                               GET 3 ;
1601
                               COMPARE ;
1602
                               NEQ ;
1603
                               IF
1604
                                 { NIL operation ;
1605
                                   DUP 4 ;
1606
                                   UNIT ;
1607
                                   SWAP ;
1608
                                   DIG 4 ;
1609
                                   DIG 3 ;
1610
                                   DIG 3 ;
1611
                                   PAIR 3 ;
1612
                                   EXEC ;
1613
                                   CDR ;
1614
                                   UNPAIR ;
1615
                                   DIG 5 ;
1616
                                   DIG 5 ;
1617
                                   DIG 5 ;
1618
                                   DIG 4 ;
1619
                                   DIG 5 ;
1620
                                   DIG 5 ;
1621
                                   DUP 3 ;
1622
                                   CAR ;
1623
                                   CAR ;
1624
                                   CAR ;
1625
                                   GET 4 ;
1626
                                   CONTRACT %getTotalSupply (pair (unit %request)
1627
                                                                  (contract %callback nat)) ;
1628
                                   IF_NONE
1629
                                     { PUSH string "cant call getTotalSupply of lb token" ;
1630
                                       FAILWITH }
1631
                                     {} ;
1632
                                   PUSH mutez 0 ;
1633
                                   SELF %updateLqtTotalCallback ;
1634
                                   UNIT ;
1635
                                   PAIR ;
1636
                                   TRANSFER_TOKENS ;
1637
                                   CONS ;
1638
                                   DUP 3 ;
1639
                                   CAR ;
1640
                                   CAR ;
1641
                                   GET 3 ;
1642
                                   CAR ;
1643
                                   CONTRACT %getBalance (pair (address %owner)
1644
                                                              (contract %callback nat)) ;
1645
                                   IF_NONE
1646
                                     { PUSH string "cant call getBalance for tzBTC" ;
1647
                                       FAILWITH }
1648
                                     {} ;
1649
                                   PUSH mutez 0 ;
1650
                                   SELF %updateTzbtcPoolCallback ;
1651
                                   DUP 6 ;
1652
                                   GET 3 ;
1653
                                   CAR ;
1654
                                   GET 3 ;
1655
                                   PAIR ;
1656
                                   TRANSFER_TOKENS ;
1657
                                   CONS ;
1658
                                   SELF %calculateLbPrice ;
1659
                                   PUSH mutez 0 ;
1660
                                   UNIT ;
1661
                                   TRANSFER_TOKENS ;
1662
                                   CONS }
1663
                                 { NIL operation } ;
1664
                               PUSH mutez 0 ;
1665
                               AMOUNT ;
1666
                               PUSH nat 2 ;
1667
                               DUP 5 ;
1668
                               GET 9 ;
1669
                               MUL ;
1670
                               SUB_MUTEZ ;
1671
                               DUP ;
1672
                               IF_NONE
1673
                                 {}
1674
                                 { DROP ;
1675
                                   SWAP ;
1676
                                   DROP ;
1677
                                   DUP 4 ;
1678
                                   GET 12 ;
1679
                                   PUSH nat 100000 ;
1680
                                   SUB ;
1681
                                   ISNAT ;
1682
                                   IF_NONE { PUSH int 736 ; FAILWITH } {} ;
1683
                                   DUP 5 ;
1684
                                   GET 12 ;
1685
                                   DUP 3 ;
1686
                                   IF_NONE { PUSH int 734 ; FAILWITH } {} ;
1687
                                   MUL ;
1688
                                   EDIV ;
1689
                                   IF_NONE { PUSH int 733 ; FAILWITH } {} ;
1690
                                   CAR ;
1691
                                   SWAP } ;
1692
                               PUSH mutez 0 ;
1693
                               DUP 3 ;
1694
                               COMPARE ;
1695
                               GT ;
1696
                               IF
1697
                                 { DIG 2 ;
1698
                                   DUP 5 ;
1699
                                   CAR ;
1700
                                   CAR ;
1701
                                   CAR ;
1702
                                   CAR ;
1703
                                   CAR ;
1704
                                   CONTRACT unit ;
1705
                                   IF_NONE { PUSH int 739 ; FAILWITH } {} ;
1706
                                   DUP 4 ;
1707
                                   UNIT ;
1708
                                   TRANSFER_TOKENS ;
1709
                                   CONS ;
1710
                                   DUG 2 }
1711
                                 {} ;
1712
                               SWAP ;
1713
                               DUP ;
1714
                               DUG 2 ;
1715
                               DIG 4 ;
1716
                               DUP ;
1717
                               GET 9 ;
1718
                               SWAP ;
1719
                               DUP ;
1720
                               DUG 6 ;
1721
                               CAR ;
1722
                               ADD ;
1723
                               ADD ;
1724
                               AMOUNT ;
1725
                               COMPARE ;
1726
                               LE ;
1727
                               IF {} { PUSH string "sent amount error" ; FAILWITH } ;
1728
                               PUSH int 1 ;
1729
                               NOW ;
1730
                               ADD ;
1731
                               PUSH mutez 0 ;
1732
                               DUP 6 ;
1733
                               CAR ;
1734
                               COMPARE ;
1735
                               GT ;
1736
                               IF
1737
                                 { DIG 3 ;
1738
                                   DUP 6 ;
1739
                                   CAR ;
1740
                                   CAR ;
1741
                                   CAR ;
1742
                                   GET 3 ;
1743
                                   CONTRACT %xtzToToken (pair (address %to)
1744
                                                              (pair
1745
                                                                (nat %minTokensBought)
1746
                                                                (timestamp %deadline))) ;
1747
                                   IF_NONE
1748
                                     { PUSH string "cant call xtzToToken" ; FAILWITH }
1749
                                     {} ;
1750
                                   DUP 6 ;
1751
                                   CAR ;
1752
                                   DUP 4 ;
1753
                                   DUP 8 ;
1754
                                   GET 3 ;
1755
                                   SELF_ADDRESS ;
1756
                                   PAIR 3 ;
1757
                                   TRANSFER_TOKENS ;
1758
                                   CONS ;
1759
                                   DUG 3 }
1760
                                 { PUSH nat 0 ;
1761
                                   DUP 6 ;
1762
                                   GET 5 ;
1763
                                   COMPARE ;
1764
                                   GT ;
1765
                                   IF
1766
                                     { DUP 8 ;
1767
                                       DIG 5 ;
1768
                                       DUP ;
1769
                                       GET 5 ;
1770
                                       SWAP ;
1771
                                       DUP ;
1772
                                       DUG 7 ;
1773
                                       GET 7 ;
1774
                                       PAIR ;
1775
                                       SWAP ;
1776
                                       DIG 7 ;
1777
                                       DIG 6 ;
1778
                                       DIG 3 ;
1779
                                       PAIR 3 ;
1780
                                       EXEC ;
1781
                                       CDR ;
1782
                                       UNPAIR ;
1783
                                       DIG 8 ;
1784
                                       DIG 8 ;
1785
                                       DIG 8 ;
1786
                                       DIG 4 ;
1787
                                       DIG 8 ;
1788
                                       DIG 5 ;
1789
                                       DIG 8 ;
1790
                                       DIG 8 ;
1791
                                       DIG 8 }
1792
                                     {} } ;
1793
                               DIG 3 ;
1794
                               DUP 6 ;
1795
                               CAR ;
1796
                               CAR ;
1797
                               GET 3 ;
1798
                               CAR ;
1799
                               CONTRACT %approve (pair (address %spender) (nat %value)) ;
1800
                               IF_NONE
1801
                                 { PUSH string "cant call approve for tzBTC shares" ;
1802
                                   FAILWITH }
1803
                                 {} ;
1804
                               PUSH mutez 0 ;
1805
                               PUSH nat 1000000000000000000 ;
1806
                               DUP 9 ;
1807
                               GET 3 ;
1808
                               CAR ;
1809
                               GET 3 ;
1810
                               PAIR ;
1811
                               TRANSFER_TOKENS ;
1812
                               CONS ;
1813
                               DUP ;
1814
                               DUG 4 ;
1815
                               DUP 7 ;
1816
                               GET 3 ;
1817
                               CAR ;
1818
                               GET 3 ;
1819
                               CONTRACT %addLiquidity (pair (address %owner)
1820
                                                            (pair (nat %minLqtMinted)
1821
                                                                  (pair
1822
                                                                    (nat %maxTokensDeposited)
1823
                                                                    (timestamp %deadline)))) ;
1824
                               IF_NONE
1825
                                 { PUSH string "cant call addLiquidity" ; FAILWITH }
1826
                                 {} ;
1827
                               DUP 7 ;
1828
                               GET 9 ;
1829
                               DUP 4 ;
1830
                               PUSH nat 1000000000000000000 ;
1831
                               DUP 10 ;
1832
                               GET 10 ;
1833
                               SELF_ADDRESS ;
1834
                               PAIR 4 ;
1835
                               DIG 7 ;
1836
                               DROP ;
1837
                               TRANSFER_TOKENS ;
1838
                               CONS ;
1839
                               DUP 6 ;
1840
                               CAR ;
1841
                               CAR ;
1842
                               GET 3 ;
1843
                               CAR ;
1844
                               CONTRACT %approve (pair (address %spender) (nat %value)) ;
1845
                               IF_NONE
1846
                                 { PUSH string "cant call approve for tzBTC shares" ;
1847
                                   FAILWITH }
1848
                                 {} ;
1849
                               PUSH mutez 0 ;
1850
                               PUSH nat 0 ;
1851
                               DUP 9 ;
1852
                               GET 3 ;
1853
                               CAR ;
1854
                               GET 3 ;
1855
                               PAIR ;
1856
                               TRANSFER_TOKENS ;
1857
                               CONS ;
1858
                               SELF %sellXtz ;
1859
                               PUSH mutez 0 ;
1860
                               UNIT ;
1861
                               TRANSFER_TOKENS ;
1862
                               CONS ;
1863
                               DUG 3 ;
1864
                               DIG 5 ;
1865
                               UNPAIR ;
1866
                               SWAP ;
1867
                               UNPAIR ;
1868
                               UNPAIR ;
1869
                               SWAP ;
1870
                               UNPAIR ;
1871
                               UNPAIR ;
1872
                               UNPAIR ;
1873
                               CDR ;
1874
                               PUSH bool True ;
1875
                               PAIR ;
1876
                               PAIR ;
1877
                               PAIR ;
1878
                               PAIR ;
1879
                               SWAP ;
1880
                               PAIR ;
1881
                               PAIR ;
1882
                               SWAP ;
1883
                               PAIR ;
1884
                               DUG 5 ;
1885
                               DIG 3 ;
1886
                               DUP 6 ;
1887
                               CAR ;
1888
                               CAR ;
1889
                               CAR ;
1890
                               GET 4 ;
1891
                               CONTRACT %getBalance (pair (address %owner)
1892
                                                          (contract %callback nat)) ;
1893
                               IF_NONE
1894
                                 { PUSH string "cant call getBalance for LB shares" ;
1895
                                   FAILWITH }
1896
                                 {} ;
1897
                               PUSH mutez 0 ;
1898
                               SELF %updateLBCallback ;
1899
                               SELF_ADDRESS ;
1900
                               PAIR ;
1901
                               TRANSFER_TOKENS ;
1902
                               CONS ;
1903
                               DUG 3 ;
1904
                               DIG 5 ;
1905
                               UNPAIR ;
1906
                               SWAP ;
1907
                               UNPAIR ;
1908
                               UNPAIR ;
1909
                               SWAP ;
1910
                               UNPAIR ;
1911
                               UNPAIR ;
1912
                               UNPAIR ;
1913
                               CAR ;
1914
                               PUSH bool True ;
1915
                               SWAP ;
1916
                               PAIR ;
1917
                               PAIR ;
1918
                               PAIR ;
1919
                               PAIR ;
1920
                               SWAP ;
1921
                               PAIR ;
1922
                               PAIR ;
1923
                               SWAP ;
1924
                               PAIR ;
1925
                               DUG 5 ;
1926
                               DIG 3 ;
1927
                               DUP 6 ;
1928
                               CAR ;
1929
                               CAR ;
1930
                               GET 3 ;
1931
                               CAR ;
1932
                               CONTRACT %getBalance (pair (address %owner)
1933
                                                          (contract %callback nat)) ;
1934
                               IF_NONE
1935
                                 { PUSH string "cant call getBalance for tzBTC shares" ;
1936
                                   FAILWITH }
1937
                                 {} ;
1938
                               PUSH mutez 0 ;
1939
                               SELF %updateTzBTCCallback ;
1940
                               SELF_ADDRESS ;
1941
                               PAIR ;
1942
                               TRANSFER_TOKENS ;
1943
                               CONS ;
1944
                               DUP ;
1945
                               DUG 4 ;
1946
                               SELF %investLBFinalize ;
1947
                               PUSH mutez 0 ;
1948
                               DUP 8 ;
1949
                               GET 5 ;
1950
                               DIG 9 ;
1951
                               DUP ;
1952
                               GET 11 ;
1953
                               SWAP ;
1954
                               DUP ;
1955
                               DUG 11 ;
1956
                               CAR ;
1957
                               GET 7 ;
1958
                               SENDER ;
1959
                               PAIR 4 ;
1960
                               DIG 4 ;
1961
                               DROP ;
1962
                               DIG 4 ;
1963
                               DROP ;
1964
                               DIG 4 ;
1965
                               DROP ;
1966
                               DIG 4 ;
1967
                               DROP ;
1968
                               DIG 4 ;
1969
                               DROP ;
1970
                               DIG 5 ;
1971
                               DROP ;
1972
                               DIG 5 ;
1973
                               DROP ;
1974
                               DIG 5 ;
1975
                               DROP ;
1976
                               TRANSFER_TOKENS ;
1977
                               CONS }
1978
                             { DIG 2 ;
1979
                               DROP ;
1980
                               DIG 2 ;
1981
                               DROP ;
1982
                               SENDER ;
1983
                               SELF_ADDRESS ;
1984
                               COMPARE ;
1985
                               EQ ;
1986
                               IF {} { PUSH string "Forbidden." ; FAILWITH } ;
1987
                               SWAP ;
1988
                               DUP ;
1989
                               DUG 2 ;
1990
                               GET 11 ;
1991
                               SWAP ;
1992
                               DUP ;
1993
                               DUG 2 ;
1994
                               GET 5 ;
1995
                               SUB ;
1996
                               ISNAT ;
1997
                               IF_NONE
1998
                                 { PUSH string "negative tzBTC delta error" ; FAILWITH }
1999
                                 {} ;
2000
                               SWAP ;
2001
                               DUP ;
2002
                               DUG 2 ;
2003
                               GET 3 ;
2004
                               DUP 4 ;
2005
                               CAR ;
2006
                               GET 7 ;
2007
                               SUB ;
2008
                               ISNAT ;
2009
                               IF_NONE
2010
                                 { PUSH string "negative lb delta error" ; FAILWITH }
2011
                                 {} ;
2012
                               SWAP ;
2013
                               DUP ;
2014
                               DUG 2 ;
2015
                               PUSH nat 20 ;
2016
                               DUP 6 ;
2017
                               GET 3 ;
2018
                               GET 3 ;
2019
                               CDR ;
2020
                               SUB ;
2021
                               ISNAT ;
2022
                               IF_NONE { PUSH int 820 ; FAILWITH } {} ;
2023
                               MUL ;
2024
                               DUP 4 ;
2025
                               GET 6 ;
2026
                               PUSH nat 10 ;
2027
                               DUP 7 ;
2028
                               GET 3 ;
2029
                               GET 3 ;
2030
                               CDR ;
2031
                               SUB ;
2032
                               ISNAT ;
2033
                               IF_NONE { PUSH int 820 ; FAILWITH } {} ;
2034
                               PUSH nat 2 ;
2035
                               MUL ;
2036
                               MUL ;
2037
                               COMPARE ;
2038
                               LE ;
2039
                               IF {} { PUSH string "leverage error" ; FAILWITH } ;
2040
                               DUP 4 ;
2041
                               GET 3 ;
2042
                               CAR ;
2043
                               GET 4 ;
2044
                               DUP 4 ;
2045
                               CAR ;
2046
                               MEM ;
2047
                               IF
2048
                                 {}
2049
                                 { DIG 3 ;
2050
                                   UNPAIR ;
2051
                                   SWAP ;
2052
                                   UNPAIR ;
2053
                                   UNPAIR ;
2054
                                   UNPAIR ;
2055
                                   SWAP ;
2056
                                   UNPAIR ;
2057
                                   SWAP ;
2058
                                   PUSH nat 0 ;
2059
                                   DUP ;
2060
                                   DUP ;
2061
                                   PAIR 3 ;
2062
                                   SOME ;
2063
                                   DUP 10 ;
2064
                                   CAR ;
2065
                                   UPDATE ;
2066
                                   SWAP ;
2067
                                   PAIR ;
2068
                                   SWAP ;
2069
                                   PAIR ;
2070
                                   PAIR ;
2071
                                   PAIR ;
2072
                                   SWAP ;
2073
                                   PAIR ;
2074
                                   DUG 3 } ;
2075
                               PUSH nat 1000000000000 ;
2076
                               DUP ;
2077
                               DIG 3 ;
2078
                               MUL ;
2079
                               MUL ;
2080
                               DUP 4 ;
2081
                               GET 3 ;
2082
                               GET 7 ;
2083
                               SWAP ;
2084
                               DUP ;
2085
                               DUG 2 ;
2086
                               NEG ;
2087
                               EDIV ;
2088
                               IF_NONE { PUSH int 39 ; FAILWITH } {} ;
2089
                               CAR ;
2090
                               ABS ;
2091
                               DIG 4 ;
2092
                               UNPAIR ;
2093
                               SWAP ;
2094
                               UNPAIR ;
2095
                               UNPAIR ;
2096
                               UNPAIR ;
2097
                               SWAP ;
2098
                               UNPAIR ;
2099
                               SWAP ;
2100
                               DUP ;
2101
                               DUP 11 ;
2102
                               CAR ;
2103
                               DUP ;
2104
                               DUG 2 ;
2105
                               GET ;
2106
                               IF_NONE { PUSH int 834 ; FAILWITH } {} ;
2107
                               DUP ;
2108
                               GET 4 ;
2109
                               DUP 10 ;
2110
                               ADD ;
2111
                               UPDATE 4 ;
2112
                               SOME ;
2113
                               SWAP ;
2114
                               UPDATE ;
2115
                               SWAP ;
2116
                               PAIR ;
2117
                               SWAP ;
2118
                               PAIR ;
2119
                               PAIR ;
2120
                               PAIR ;
2121
                               SWAP ;
2122
                               PAIR ;
2123
                               DUP ;
2124
                               GET 9 ;
2125
                               DIG 2 ;
2126
                               ADD ;
2127
                               UPDATE 9 ;
2128
                               DUP ;
2129
                               DUG 4 ;
2130
                               CAR ;
2131
                               GET 3 ;
2132
                               CAR ;
2133
                               CAR ;
2134
                               SWAP ;
2135
                               NEG ;
2136
                               EDIV ;
2137
                               IF_NONE { PUSH int 39 ; FAILWITH } {} ;
2138
                               CAR ;
2139
                               ABS ;
2140
                               DIG 3 ;
2141
                               UNPAIR ;
2142
                               SWAP ;
2143
                               UNPAIR ;
2144
                               UNPAIR ;
2145
                               UNPAIR ;
2146
                               SWAP ;
2147
                               UNPAIR ;
2148
                               SWAP ;
2149
                               DUP ;
2150
                               DUP 10 ;
2151
                               CAR ;
2152
                               DUP ;
2153
                               DUG 2 ;
2154
                               GET ;
2155
                               IF_NONE { PUSH int 838 ; FAILWITH } {} ;
2156
                               DUP ;
2157
                               CAR ;
2158
                               DUP 10 ;
2159
                               ADD ;
2160
                               UPDATE 1 ;
2161
                               SOME ;
2162
                               SWAP ;
2163
                               UPDATE ;
2164
                               SWAP ;
2165
                               PAIR ;
2166
                               SWAP ;
2167
                               PAIR ;
2168
                               PAIR ;
2169
                               SWAP ;
2170
                               UNPAIR ;
2171
                               SWAP ;
2172
                               UNPAIR ;
2173
                               UNPAIR ;
2174
                               SWAP ;
2175
                               DIG 6 ;
2176
                               ADD ;
2177
                               SWAP ;
2178
                               PAIR ;
2179
                               PAIR ;
2180
                               SWAP ;
2181
                               PAIR ;
2182
                               SWAP ;
2183
                               UNPAIR ;
2184
                               UNPAIR ;
2185
                               SWAP ;
2186
                               UNPAIR ;
2187
                               SWAP ;
2188
                               DUP ;
2189
                               DIG 8 ;
2190
                               CAR ;
2191
                               DUP ;
2192
                               DUG 2 ;
2193
                               GET ;
2194
                               IF_NONE { PUSH int 841 ; FAILWITH } {} ;
2195
                               DUP ;
2196
                               GET 3 ;
2197
                               DIG 9 ;
2198
                               ADD ;
2199
                               UPDATE 3 ;
2200
                               SOME ;
2201
                               SWAP ;
2202
                               UPDATE ;
2203
                               SWAP ;
2204
                               PAIR ;
2205
                               SWAP ;
2206
                               PAIR ;
2207
                               PAIR ;
2208
                               PAIR ;
2209
                               SWAP ;
2210
                               PAIR ;
2211
                               SWAP ;
2212
                               UNIT ;
2213
                               SWAP ;
2214
                               DUG 2 ;
2215
                               PAIR ;
2216
                               EXEC ;
2217
                               CDR ;
2218
                               NIL operation } } } }
2219
                 { IF_LEFT
2220
                     { IF_LEFT
2221
                         { NOW ;
2222
                           DUP 3 ;
2223
                           CAR ;
2224
                           GET 3 ;
2225
                           GET 3 ;
2226
                           COMPARE ;
2227
                           NEQ ;
2228
                           IF
2229
                             { DIG 3 ;
2230
                               DROP ;
2231
                               DIG 3 ;
2232
                               DROP ;
2233
                               NIL operation ;
2234
                               DIG 3 ;
2235
                               UNIT ;
2236
                               SWAP ;
2237
                               DIG 4 ;
2238
                               DIG 3 ;
2239
                               DIG 3 ;
2240
                               PAIR 3 ;
2241
                               EXEC ;
2242
                               CDR ;
2243
                               UNPAIR ;
2244
                               SWAP ;
2245
                               DUP ;
2246
                               DUG 3 ;
2247
                               CAR ;
2248
                               CAR ;
2249
                               CAR ;
2250
                               GET 4 ;
2251
                               CONTRACT %getTotalSupply (pair (unit %request)
2252
                                                              (contract %callback nat)) ;
2253
                               IF_NONE
2254
                                 { PUSH string "cant call getTotalSupply of lb token" ;
2255
                                   FAILWITH }
2256
                                 {} ;
2257
                               PUSH mutez 0 ;
2258
                               SELF %updateLqtTotalCallback ;
2259
                               UNIT ;
2260
                               PAIR ;
2261
                               TRANSFER_TOKENS ;
2262
                               CONS ;
2263
                               DUP 3 ;
2264
                               CAR ;
2265
                               CAR ;
2266
                               GET 3 ;
2267
                               CAR ;
2268
                               CONTRACT %getBalance (pair (address %owner)
2269
                                                          (contract %callback nat)) ;
2270
                               IF_NONE
2271
                                 { PUSH string "cant call getBalance for tzBTC" ;
2272
                                   FAILWITH }
2273
                                 {} ;
2274
                               PUSH mutez 0 ;
2275
                               SELF %updateTzbtcPoolCallback ;
2276
                               DUP 6 ;
2277
                               GET 3 ;
2278
                               CAR ;
2279
                               GET 3 ;
2280
                               PAIR ;
2281
                               TRANSFER_TOKENS ;
2282
                               CONS ;
2283
                               SELF %calculateLbPrice ;
2284
                               PUSH mutez 0 ;
2285
                               UNIT ;
2286
                               TRANSFER_TOKENS ;
2287
                               CONS }
2288
                             { DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; NIL operation } ;
2289
                           DUP 3 ;
2290
                           GET 3 ;
2291
                           CAR ;
2292
                           GET 4 ;
2293
                           DUP 3 ;
2294
                           CAR ;
2295
                           MEM ;
2296
                           IF {} { PUSH string "Unknown Address." ; FAILWITH } ;
2297
                           PUSH nat 0 ;
2298
                           DUP 4 ;
2299
                           GET 3 ;
2300
                           CAR ;
2301
                           GET 4 ;
2302
                           DUP 4 ;
2303
                           CAR ;
2304
                           GET ;
2305
                           IF_NONE { PUSH int 1061 ; FAILWITH } {} ;
2306
                           GET 4 ;
2307
                           COMPARE ;
2308
                           GT ;
2309
                           IF {} { PUSH string "not loaned" ; FAILWITH } ;
2310
                           SELF %liquidateLBFinalize ;
2311
                           PUSH mutez 0 ;
2312
                           DUP 4 ;
2313
                           CDR ;
2314
                           SENDER ;
2315
                           DIG 5 ;
2316
                           CAR ;
2317
                           PAIR 3 ;
2318
                           TRANSFER_TOKENS ;
2319
                           CONS }
2320
                         { DIG 2 ;
2321
                           DROP ;
2322
                           DIG 2 ;
2323
                           DROP ;
2324
                           DIG 2 ;
2325
                           DROP ;
2326
                           SENDER ;
2327
                           SELF_ADDRESS ;
2328
                           COMPARE ;
2329
                           EQ ;
2330
                           IF {} { PUSH string "Forbidden." ; FAILWITH } ;
2331
                           SWAP ;
2332
                           DUP ;
2333
                           DUG 2 ;
2334
                           GET 3 ;
2335
                           CAR ;
2336
                           GET 4 ;
2337
                           SWAP ;
2338
                           DUP ;
2339
                           DUG 2 ;
2340
                           CAR ;
2341
                           GET ;
2342
                           IF_NONE { PUSH int 1095 ; FAILWITH } {} ;
2343
                           GET 3 ;
2344
                           PUSH nat 1000000000000 ;
2345
                           DUP ;
2346
                           DIG 4 ;
2347
                           DUP ;
2348
                           CAR ;
2349
                           GET 3 ;
2350
                           CAR ;
2351
                           CAR ;
2352
                           SWAP ;
2353
                           DUP ;
2354
                           DUG 6 ;
2355
                           GET 3 ;
2356
                           CAR ;
2357
                           GET 4 ;
2358
                           DUP 6 ;
2359
                           CAR ;
2360
                           GET ;
2361
                           IF_NONE { PUSH int 1100 ; FAILWITH } {} ;
2362
                           CAR ;
2363
                           MUL ;
2364
                           NEG ;
2365
                           EDIV ;
2366
                           IF_NONE { PUSH int 39 ; FAILWITH } {} ;
2367
                           CAR ;
2368
                           ABS ;
2369
                           NEG ;
2370
                           EDIV ;
2371
                           IF_NONE { PUSH int 39 ; FAILWITH } {} ;
2372
                           CAR ;
2373
                           ABS ;
2374
                           DUP 4 ;
2375
                           GET 3 ;
2376
                           CAR ;
2377
                           CAR ;
2378
                           CAR ;
2379
                           SWAP ;
2380
                           DUP ;
2381
                           DUG 2 ;
2382
                           DUP 6 ;
2383
                           GET 5 ;
2384
                           GET 3 ;
2385
                           PUSH string "BTC" ;
2386
                           VIEW "get_price" nat ;
2387
                           IF_NONE { PUSH string "invalid view" ; FAILWITH } {} ;
2388
                           MUL ;
2389
                           MUL ;
2390
                           PUSH nat 100 ;
2391
                           PUSH nat 1000000000000 ;
2392
                           DUP 7 ;
2393
                           GET 5 ;
2394
                           GET 3 ;
2395
                           PUSH string "BTC" ;
2396
                           VIEW "get_price" nat ;
2397
                           IF_NONE { PUSH string "invalid view" ; FAILWITH } {} ;
2398
                           DUP 8 ;
2399
                           CAR ;
2400
                           GET 5 ;
2401
                           CAR ;
2402
                           PUSH nat 2 ;
2403
                           DUP 8 ;
2404
                           MUL ;
2405
                           MUL ;
2406
                           MUL ;
2407
                           EDIV ;
2408
                           IF_NONE { PUSH int 1098 ; FAILWITH } { CAR } ;
2409
                           MUL ;
2410
                           COMPARE ;
2411
                           LT ;
2412
                           IF
2413
                             {}
2414
                             { PUSH string "liquidation is not allowed" ; FAILWITH } ;
2415
                           DUP 4 ;
2416
                           GET 3 ;
2417
                           CAR ;
2418
                           GET 4 ;
2419
                           DUP 4 ;
2420
                           CAR ;
2421
                           GET ;
2422
                           IF_NONE { PUSH int 1111 ; FAILWITH } {} ;
2423
                           CAR ;
2424
                           DUP 5 ;
2425
                           CAR ;
2426
                           GET 3 ;
2427
                           CAR ;
2428
                           CAR ;
2429
                           PUSH nat 1000000000000 ;
2430
                           DUP ;
2431
                           DUP 5 ;
2432
                           DUP 9 ;
2433
                           GET 3 ;
2434
                           CAR ;
2435
                           CAR ;
2436
                           CDR ;
2437
                           PUSH nat 100 ;
2438
                           DUP 10 ;
2439
                           GET 4 ;
2440
                           MUL ;
2441
                           EDIV ;
2442
                           IF_NONE { PUSH int 1106 ; FAILWITH } { CAR } ;
2443
                           DUP ;
2444
                           DUP 3 ;
2445
                           COMPARE ;
2446
                           LE ;
2447
                           IF { DROP } { SWAP ; DROP } ;
2448
                           MUL ;
2449
                           MUL ;
2450
                           EDIV ;
2451
                           IF_NONE { PUSH int 1110 ; FAILWITH } { CAR } ;
2452
                           DUP ;
2453
                           DUP 3 ;
2454
                           COMPARE ;
2455
                           LE ;
2456
                           IF { DROP } { SWAP ; DROP } ;
2457
                           DUP 5 ;
2458
                           GET 3 ;
2459
                           CAR ;
2460
                           GET 4 ;
2461
                           DUP 5 ;
2462
                           CAR ;
2463
                           GET ;
2464
                           IF_NONE { PUSH int 1114 ; FAILWITH } {} ;
2465
                           CAR ;
2466
                           SWAP ;
2467
                           DUP ;
2468
                           DUG 2 ;
2469
                           DUP 7 ;
2470
                           GET 3 ;
2471
                           CAR ;
2472
                           GET 4 ;
2473
                           DUP 7 ;
2474
                           CAR ;
2475
                           GET ;
2476
                           IF_NONE { PUSH int 1114 ; FAILWITH } {} ;
2477
                           GET 4 ;
2478
                           MUL ;
2479
                           EDIV ;
2480
                           IF_NONE { PUSH int 1114 ; FAILWITH } { CAR } ;
2481
                           DUP 6 ;
2482
                           GET 3 ;
2483
                           CAR ;
2484
                           GET 4 ;
2485
                           DUP 6 ;
2486
                           CAR ;
2487
                           GET ;
2488
                           IF_NONE { PUSH int 1116 ; FAILWITH } {} ;
2489
                           CAR ;
2490
                           DUP 3 ;
2491
                           DUP 6 ;
2492
                           MUL ;
2493
                           EDIV ;
2494
                           IF_NONE { PUSH int 1116 ; FAILWITH } { CAR } ;
2495
                           DUP 7 ;
2496
                           DUP 3 ;
2497
                           DIG 8 ;
2498
                           GET 9 ;
2499
                           SUB ;
2500
                           ISNAT ;
2501
                           IF_NONE { PUSH int 1118 ; FAILWITH } {} ;
2502
                           UPDATE 9 ;
2503
                           DUP ;
2504
                           DUG 7 ;
2505
                           UNPAIR ;
2506
                           SWAP ;
2507
                           UNPAIR ;
2508
                           SWAP ;
2509
                           UNPAIR ;
2510
                           SWAP ;
2511
                           UNPAIR ;
2512
                           CAR ;
2513
                           DUP 8 ;
2514
                           DIG 12 ;
2515
                           GET 7 ;
2516
                           CDR ;
2517
                           SUB ;
2518
                           ISNAT ;
2519
                           IF_NONE { PUSH int 1119 ; FAILWITH } {} ;
2520
                           SWAP ;
2521
                           PAIR ;
2522
                           PAIR ;
2523
                           SWAP ;
2524
                           PAIR ;
2525
                           SWAP ;
2526
                           PAIR ;
2527
                           SWAP ;
2528
                           PAIR ;
2529
                           DUP ;
2530
                           DUG 7 ;
2531
                           UNPAIR ;
2532
                           SWAP ;
2533
                           UNPAIR ;
2534
                           UNPAIR ;
2535
                           UNPAIR ;
2536
                           SWAP ;
2537
                           UNPAIR ;
2538
                           SWAP ;
2539
                           DUP ;
2540
                           DUP 13 ;
2541
                           CAR ;
2542
                           DUP ;
2543
                           DUG 2 ;
2544
                           GET ;
2545
                           IF_NONE { PUSH int 1120 ; FAILWITH } {} ;
2546
                           DIG 10 ;
2547
                           DIG 14 ;
2548
                           GET 3 ;
2549
                           CAR ;
2550
                           GET 4 ;
2551
                           DUP 15 ;
2552
                           CAR ;
2553
                           GET ;
2554
                           IF_NONE { PUSH int 1121 ; FAILWITH } {} ;
2555
                           CAR ;
2556
                           SUB ;
2557
                           ISNAT ;
2558
                           IF_NONE
2559
                             { PUSH string "wrong liquidated gross credit" ; FAILWITH }
2560
                             {} ;
2561
                           UPDATE 1 ;
2562
                           SOME ;
2563
                           SWAP ;
2564
                           UPDATE ;
2565
                           SWAP ;
2566
                           PAIR ;
2567
                           SWAP ;
2568
                           PAIR ;
2569
                           PAIR ;
2570
                           PAIR ;
2571
                           SWAP ;
2572
                           PAIR ;
2573
                           DUP ;
2574
                           DUG 6 ;
2575
                           UNPAIR ;
2576
                           SWAP ;
2577
                           UNPAIR ;
2578
                           UNPAIR ;
2579
                           UNPAIR ;
2580
                           SWAP ;
2581
                           UNPAIR ;
2582
                           SWAP ;
2583
                           DUP ;
2584
                           DUP 12 ;
2585
                           CAR ;
2586
                           DUP ;
2587
                           DUG 2 ;
2588
                           GET ;
2589
                           IF_NONE { PUSH int 1124 ; FAILWITH } {} ;
2590
                           DIG 9 ;
2591
                           DIG 13 ;
2592
                           GET 3 ;
2593
                           CAR ;
2594
                           GET 4 ;
2595
                           DUP 14 ;
2596
                           CAR ;
2597
                           GET ;
2598
                           IF_NONE { PUSH int 1125 ; FAILWITH } {} ;
2599
                           GET 4 ;
2600
                           SUB ;
2601
                           ISNAT ;
2602
                           IF_NONE
2603
                             { PUSH string "wrong liquidated net credit" ; FAILWITH }
2604
                             {} ;
2605
                           UPDATE 4 ;
2606
                           SOME ;
2607
                           SWAP ;
2608
                           UPDATE ;
2609
                           DUP ;
2610
                           DUP 11 ;
2611
                           CAR ;
2612
                           DUP ;
2613
                           DUG 2 ;
2614
                           GET ;
2615
                           IF_NONE { PUSH int 1128 ; FAILWITH } {} ;
2616
                           DUP 9 ;
2617
                           DIG 11 ;
2618
                           SUB ;
2619
                           ISNAT ;
2620
                           IF_NONE
2621
                             { PUSH string "wrong liquidated shares" ; FAILWITH }
2622
                             {} ;
2623
                           UPDATE 3 ;
2624
                           SOME ;
2625
                           SWAP ;
2626
                           UPDATE ;
2627
                           SWAP ;
2628
                           PAIR ;
2629
                           SWAP ;
2630
                           PAIR ;
2631
                           PAIR ;
2632
                           PAIR ;
2633
                           SWAP ;
2634
                           PAIR ;
2635
                           DUG 3 ;
2636
                           NIL operation ;
2637
                           DUP 5 ;
2638
                           CAR ;
2639
                           CAR ;
2640
                           GET 3 ;
2641
                           CAR ;
2642
                           CONTRACT %transfer (pair (address %from)
2643
                                                    (pair (address %to) (nat %value))) ;
2644
                           IF_NONE
2645
                             { PUSH string "cant call transfer for tzBTC shares" ;
2646
                               FAILWITH }
2647
                             {} ;
2648
                           PUSH mutez 0 ;
2649
                           DUP 6 ;
2650
                           GET 4 ;
2651
                           SELF_ADDRESS ;
2652
                           DUP 8 ;
2653
                           GET 3 ;
2654
                           PAIR 3 ;
2655
                           TRANSFER_TOKENS ;
2656
                           CONS ;
2657
                           DIG 2 ;
2658
                           DUP 5 ;
2659
                           GET 3 ;
2660
                           CAR ;
2661
                           CAR ;
2662
                           CDR ;
2663
                           PUSH nat 100 ;
2664
                           DUP 6 ;
2665
                           GET 4 ;
2666
                           MUL ;
2667
                           EDIV ;
2668
                           IF_NONE { PUSH int 1106 ; FAILWITH } { CAR } ;
2669
                           DUP ;
2670
                           DUP 3 ;
2671
                           COMPARE ;
2672
                           LE ;
2673
                           IF { DROP } { SWAP ; DROP } ;
2674
                           DUP 4 ;
2675
                           GET 4 ;
2676
                           SUB ;
2677
                           ISNAT ;
2678
                           IF_NONE
2679
                             { PUSH string "wrong liquidation_price_percent" ; FAILWITH }
2680
                             {} ;
2681
                           PUSH nat 100 ;
2682
                           DUP 6 ;
2683
                           CAR ;
2684
                           GET 10 ;
2685
                           DUP 3 ;
2686
                           MUL ;
2687
                           EDIV ;
2688
                           IF_NONE { PUSH int 1136 ; FAILWITH } { CAR } ;
2689
                           DUP ;
2690
                           PUSH nat 0 ;
2691
                           COMPARE ;
2692
                           LT ;
2693
                           IF
2694
                             { DIG 2 ;
2695
                               DUP 6 ;
2696
                               CAR ;
2697
                               CAR ;
2698
                               GET 3 ;
2699
                               CAR ;
2700
                               CONTRACT %transfer (pair (address %from)
2701
                                                        (pair (address %to) (nat %value))) ;
2702
                               IF_NONE
2703
                                 { PUSH string "cant call transfer for tzBTC shares" ;
2704
                                   FAILWITH }
2705
                                 {} ;
2706
                               PUSH mutez 0 ;
2707
                               DUP 4 ;
2708
                               DUP 9 ;
2709
                               CAR ;
2710
                               CAR ;
2711
                               CAR ;
2712
                               CAR ;
2713
                               CAR ;
2714
                               SELF_ADDRESS ;
2715
                               PAIR 3 ;
2716
                               TRANSFER_TOKENS ;
2717
                               CONS ;
2718
                               DUG 2 }
2719
                             {} ;
2720
                           DUP 6 ;
2721
                           UNPAIR ;
2722
                           UNPAIR ;
2723
                           UNPAIR ;
2724
                           UNPAIR ;
2725
                           UNPAIR ;
2726
                           SWAP ;
2727
                           DIG 11 ;
2728
                           GET 7 ;
2729
                           CAR ;
2730
                           PUSH nat 1000000000000 ;
2731
                           DUP ;
2732
                           DUP 10 ;
2733
                           DIG 11 ;
2734
                           SUB ;
2735
                           ISNAT ;
2736
                           IF_NONE
2737
                             { PUSH string "admin commission error" ; FAILWITH }
2738
                             {} ;
2739
                           MUL ;
2740
                           MUL ;
2741
                           EDIV ;
2742
                           IF_NONE { PUSH int 1143 ; FAILWITH } { CAR } ;
2743
                           ADD ;
2744
                           SWAP ;
2745
                           PAIR ;
2746
                           PAIR ;
2747
                           PAIR ;
2748
                           PAIR ;
2749
                           PAIR ;
2750
                           DUG 4 ;
2751
                           SWAP ;
2752
                           DUP 5 ;
2753
                           CAR ;
2754
                           CAR ;
2755
                           CAR ;
2756
                           GET 4 ;
2757
                           CONTRACT %transfer (pair (address %from)
2758
                                                    (pair (address %to) (nat %value))) ;
2759
                           IF_NONE
2760
                             { PUSH string "cant call transfer for LB shares" ; FAILWITH }
2761
                             {} ;
2762
                           PUSH mutez 0 ;
2763
                           DUP 5 ;
2764
                           DUP 7 ;
2765
                           GET 3 ;
2766
                           SELF_ADDRESS ;
2767
                           PAIR 3 ;
2768
                           TRANSFER_TOKENS ;
2769
                           CONS ;
2770
                           SWAP ;
2771
                           DUP 5 ;
2772
                           UNPAIR ;
2773
                           UNPAIR ;
2774
                           SWAP ;
2775
                           UNPAIR ;
2776
                           SWAP ;
2777
                           UNPAIR ;
2778
                           SWAP ;
2779
                           CDR ;
2780
                           DIG 7 ;
2781
                           DIG 9 ;
2782
                           CAR ;
2783
                           GET 7 ;
2784
                           SUB ;
2785
                           ISNAT ;
2786
                           IF_NONE { PUSH int 1148 ; FAILWITH } {} ;
2787
                           PAIR ;
2788
                           SWAP ;
2789
                           PAIR ;
2790
                           SWAP ;
2791
                           PAIR ;
2792
                           SWAP ;
2793
                           PAIR ;
2794
                           PAIR ;
2795
                           DUP ;
2796
                           DUG 4 ;
2797
                           SWAP ;
2798
                           DIG 3 ;
2799
                           GET 4 ;
2800
                           DIG 4 ;
2801
                           GET 11 ;
2802
                           ADD ;
2803
                           SUB ;
2804
                           ISNAT ;
2805
                           IF_NONE { PUSH int 1149 ; FAILWITH } {} ;
2806
                           UPDATE 11 ;
2807
                           SWAP } }
2808
                     { IF_LEFT
2809
                         { SENDER ;
2810
                           DUP 3 ;
2811
                           CAR ;
2812
                           CAR ;
2813
                           CAR ;
2814
                           CAR ;
2815
                           CAR ;
2816
                           COMPARE ;
2817
                           EQ ;
2818
                           IF {} { PUSH string "Forbidden." ; FAILWITH } ;
2819
                           SWAP ;
2820
                           DUP ;
2821
                           DUG 2 ;
2822
                           GET 3 ;
2823
                           GET 8 ;
2824
                           IF
2825
                             {}
2826
                             { PUSH string "Onchain liquidation disabled." ; FAILWITH } ;
2827
                           NOW ;
2828
                           DUP 3 ;
2829
                           CAR ;
2830
                           GET 3 ;
2831
                           GET 3 ;
2832
                           COMPARE ;
2833
                           NEQ ;
2834
                           IF
2835
                             { NIL operation ;
2836
                               DUP 4 ;
2837
                               UNIT ;
2838
                               SWAP ;
2839
                               DIG 4 ;
2840
                               DIG 3 ;
2841
                               DIG 3 ;
2842
                               PAIR 3 ;
2843
                               EXEC ;
2844
                               CDR ;
2845
                               UNPAIR ;
2846
                               DIG 5 ;
2847
                               DIG 5 ;
2848
                               DIG 5 ;
2849
                               DIG 4 ;
2850
                               DIG 5 ;
2851
                               DIG 5 ;
2852
                               DUP 3 ;
2853
                               CAR ;
2854
                               CAR ;
2855
                               CAR ;
2856
                               GET 4 ;
2857
                               CONTRACT %getTotalSupply (pair (unit %request)
2858
                                                              (contract %callback nat)) ;
2859
                               IF_NONE
2860
                                 { PUSH string "cant call getTotalSupply of lb token" ;
2861
                                   FAILWITH }
2862
                                 {} ;
2863
                               PUSH mutez 0 ;
2864
                               SELF %updateLqtTotalCallback ;
2865
                               UNIT ;
2866
                               PAIR ;
2867
                               TRANSFER_TOKENS ;
2868
                               CONS ;
2869
                               DUP 3 ;
2870
                               CAR ;
2871
                               CAR ;
2872
                               GET 3 ;
2873
                               CAR ;
2874
                               CONTRACT %getBalance (pair (address %owner)
2875
                                                          (contract %callback nat)) ;
2876
                               IF_NONE
2877
                                 { PUSH string "cant call getBalance for tzBTC" ;
2878
                                   FAILWITH }
2879
                                 {} ;
2880
                               PUSH mutez 0 ;
2881
                               SELF %updateTzbtcPoolCallback ;
2882
                               DUP 6 ;
2883
                               GET 3 ;
2884
                               CAR ;
2885
                               GET 3 ;
2886
                               PAIR ;
2887
                               TRANSFER_TOKENS ;
2888
                               CONS ;
2889
                               SELF %calculateLbPrice ;
2890
                               PUSH mutez 0 ;
2891
                               UNIT ;
2892
                               TRANSFER_TOKENS ;
2893
                               CONS }
2894
                             { NIL operation } ;
2895
                           DUP 3 ;
2896
                           GET 3 ;
2897
                           CAR ;
2898
                           GET 4 ;
2899
                           DUP 3 ;
2900
                           MEM ;
2901
                           IF {} { PUSH string "Unknown Address." ; FAILWITH } ;
2902
                           PUSH nat 0 ;
2903
                           DUP 4 ;
2904
                           GET 3 ;
2905
                           CAR ;
2906
                           GET 4 ;
2907
                           DUP 4 ;
2908
                           GET ;
2909
                           IF_NONE { PUSH int 1161 ; FAILWITH } {} ;
2910
                           GET 4 ;
2911
                           COMPARE ;
2912
                           GT ;
2913
                           IF {} { PUSH string "not loaned" ; FAILWITH } ;
2914
                           DUP 3 ;
2915
                           UNPAIR ;
2916
                           UNPAIR ;
2917
                           SWAP ;
2918
                           UNPAIR ;
2919
                           SWAP ;
2920
                           UNPAIR ;
2921
                           SWAP ;
2922
                           CDR ;
2923
                           DUP 8 ;
2924
                           GET 3 ;
2925
                           CAR ;
2926
                           GET 4 ;
2927
                           DUP 8 ;
2928
                           GET ;
2929
                           IF_NONE { PUSH int 1164 ; FAILWITH } {} ;
2930
                           GET 3 ;
2931
                           DIG 8 ;
2932
                           CAR ;
2933
                           GET 7 ;
2934
                           SUB ;
2935
                           ISNAT ;
2936
                           IF_NONE { PUSH int 956 ; FAILWITH } {} ;
2937
                           PAIR ;
2938
                           SWAP ;
2939
                           PAIR ;
2940
                           SWAP ;
2941
                           PAIR ;
2942
                           SWAP ;
2943
                           PAIR ;
2944
                           PAIR ;
2945
                           DUP ;
2946
                           DUG 3 ;
2947
                           CAR ;
2948
                           CAR ;
2949
                           CAR ;
2950
                           GET 4 ;
2951
                           CONTRACT %approve (pair (address %spender) (nat %value)) ;
2952
                           IF_NONE
2953
                             { PUSH string "cant call approve for LB shares" ; FAILWITH }
2954
                             {} ;
2955
                           PUSH mutez 0 ;
2956
                           DUP 5 ;
2957
                           GET 3 ;
2958
                           CAR ;
2959
                           GET 4 ;
2960
                           DUP 5 ;
2961
                           GET ;
2962
                           IF_NONE { PUSH int 1164 ; FAILWITH } {} ;
2963
                           GET 3 ;
2964
                           DUP 6 ;
2965
                           GET 3 ;
2966
                           CAR ;
2967
                           GET 3 ;
2968
                           PAIR ;
2969
                           TRANSFER_TOKENS ;
2970
                           CONS ;
2971
                           DUP ;
2972
                           DUP 4 ;
2973
                           GET 3 ;
2974
                           CAR ;
2975
                           GET 3 ;
2976
                           CONTRACT %removeLiquidity (pair (address %to)
2977
                                                           (pair (nat %lqtBurned)
2978
                                                                 (pair
2979
                                                                   (mutez %minXtzWithdrawn)
2980
                                                                   (pair
2981
                                                                     (nat %minTokensWithdrawn)
2982
                                                                     (timestamp %deadline))))) ;
2983
                           IF_NONE
2984
                             { PUSH string "cant call removeLiquidity" ; FAILWITH }
2985
                             {} ;
2986
                           PUSH mutez 0 ;
2987
                           PUSH int 1 ;
2988
                           NOW ;
2989
                           ADD ;
2990
                           PUSH nat 0 ;
2991
                           PUSH mutez 0 ;
2992
                           DUP 9 ;
2993
                           GET 3 ;
2994
                           CAR ;
2995
                           GET 4 ;
2996
                           DUP 9 ;
2997
                           GET ;
2998
                           IF_NONE { PUSH int 1164 ; FAILWITH } {} ;
2999
                           GET 3 ;
3000
                           SELF_ADDRESS ;
3001
                           PAIR 5 ;
3002
                           DIG 4 ;
3003
                           DROP ;
3004
                           DIG 6 ;
3005
                           DROP ;
3006
                           DIG 6 ;
3007
                           DROP ;
3008
                           DIG 6 ;
3009
                           DROP ;
3010
                           TRANSFER_TOKENS ;
3011
                           CONS ;
3012
                           DUP 3 ;
3013
                           CAR ;
3014
                           CAR ;
3015
                           CAR ;
3016
                           GET 4 ;
3017
                           CONTRACT %approve (pair (address %spender) (nat %value)) ;
3018
                           IF_NONE
3019
                             { PUSH string "cant call approve for LB shares" ; FAILWITH }
3020
                             {} ;
3021
                           PUSH mutez 0 ;
3022
                           PUSH nat 0 ;
3023
                           DUP 6 ;
3024
                           GET 3 ;
3025
                           CAR ;
3026
                           GET 3 ;
3027
                           PAIR ;
3028
                           TRANSFER_TOKENS ;
3029
                           CONS ;
3030
                           SELF %sellXtz ;
3031
                           PUSH mutez 0 ;
3032
                           UNIT ;
3033
                           TRANSFER_TOKENS ;
3034
                           CONS ;
3035
                           DIG 2 ;
3036
                           UNPAIR ;
3037
                           SWAP ;
3038
                           UNPAIR ;
3039
                           UNPAIR ;
3040
                           SWAP ;
3041
                           UNPAIR ;
3042
                           UNPAIR ;
3043
                           UNPAIR ;
3044
                           CAR ;
3045
                           PUSH bool True ;
3046
                           SWAP ;
3047
                           PAIR ;
3048
                           PAIR ;
3049
                           PAIR ;
3050
                           PAIR ;
3051
                           SWAP ;
3052
                           PAIR ;
3053
                           PAIR ;
3054
                           SWAP ;
3055
                           PAIR ;
3056
                           DUP ;
3057
                           DUG 3 ;
3058
                           CAR ;
3059
                           CAR ;
3060
                           GET 3 ;
3061
                           CAR ;
3062
                           CONTRACT %getBalance (pair (address %owner)
3063
                                                      (contract %callback nat)) ;
3064
                           IF_NONE
3065
                             { PUSH string "cant call getBalance for tzBTC shares" ;
3066
                               FAILWITH }
3067
                             {} ;
3068
                           PUSH mutez 0 ;
3069
                           SELF %updateTzBTCCallback ;
3070
                           SELF_ADDRESS ;
3071
                           PAIR ;
3072
                           TRANSFER_TOKENS ;
3073
                           CONS ;
3074
                           SELF %liquidateOnchainLBFinalize ;
3075
                           PUSH mutez 0 ;
3076
                           DUP 5 ;
3077
                           GET 11 ;
3078
                           DIG 4 ;
3079
                           PAIR ;
3080
                           TRANSFER_TOKENS ;
3081
                           CONS }
3082
                         { IF_LEFT
3083
                             { DIG 2 ;
3084
                               DROP ;
3085
                               DIG 2 ;
3086
                               DROP ;
3087
                               DIG 2 ;
3088
                               DROP ;
3089
                               SENDER ;
3090
                               SELF_ADDRESS ;
3091
                               COMPARE ;
3092
                               EQ ;
3093
                               IF {} { PUSH string "Forbidden." ; FAILWITH } ;
3094
                               DUP ;
3095
                               CDR ;
3096
                               DUP 3 ;
3097
                               GET 11 ;
3098
                               SUB ;
3099
                               ISNAT ;
3100
                               IF_NONE
3101
                                 { PUSH string "negative tzBTC shares delta error" ;
3102
                                   FAILWITH }
3103
                                 {} ;
3104
                               PUSH nat 1000000000000 ;
3105
                               DUP ;
3106
                               DIG 4 ;
3107
                               DUP ;
3108
                               CAR ;
3109
                               GET 3 ;
3110
                               CAR ;
3111
                               CAR ;
3112
                               SWAP ;
3113
                               DUP ;
3114
                               DUG 6 ;
3115
                               GET 3 ;
3116
                               CAR ;
3117
                               GET 4 ;
3118
                               DUP 6 ;
3119
                               CAR ;
3120
                               GET ;
3121
                               IF_NONE { PUSH int 1009 ; FAILWITH } {} ;
3122
                               CAR ;
3123
                               MUL ;
3124
                               NEG ;
3125
                               EDIV ;
3126
                               IF_NONE { PUSH int 39 ; FAILWITH } {} ;
3127
                               CAR ;
3128
                               ABS ;
3129
                               NEG ;
3130
                               EDIV ;
3131
                               IF_NONE { PUSH int 39 ; FAILWITH } {} ;
3132
                               CAR ;
3133
                               ABS ;
3134
                               DIG 3 ;
3135
                               DUP ;
3136
                               DUP ;
3137
                               DUG 5 ;
3138
                               GET 3 ;
3139
                               CAR ;
3140
                               GET 4 ;
3141
                               DUP 5 ;
3142
                               CAR ;
3143
                               GET ;
3144
                               IF_NONE { PUSH int 1011 ; FAILWITH } {} ;
3145
                               GET 4 ;
3146
                               DIG 5 ;
3147
                               GET 9 ;
3148
                               SUB ;
3149
                               ISNAT ;
3150
                               IF_NONE { PUSH int 1011 ; FAILWITH } {} ;
3151
                               UPDATE 9 ;
3152
                               DUP ;
3153
                               DUG 4 ;
3154
                               UNPAIR ;
3155
                               SWAP ;
3156
                               UNPAIR ;
3157
                               SWAP ;
3158
                               UNPAIR ;
3159
                               SWAP ;
3160
                               UNPAIR ;
3161
                               CAR ;
3162
                               DUP 9 ;
3163
                               GET 3 ;
3164
                               CAR ;
3165
                               GET 4 ;
3166
                               DUP 9 ;
3167
                               CAR ;
3168
                               GET ;
3169
                               IF_NONE { PUSH int 1012 ; FAILWITH } {} ;
3170
                               CAR ;
3171
                               DIG 9 ;
3172
                               GET 7 ;
3173
                               CDR ;
3174
                               SUB ;
3175
                               ISNAT ;
3176
                               IF_NONE { PUSH int 1012 ; FAILWITH } {} ;
3177
                               SWAP ;
3178
                               PAIR ;
3179
                               PAIR ;
3180
                               SWAP ;
3181
                               PAIR ;
3182
                               SWAP ;
3183
                               UNPAIR ;
3184
                               UNPAIR ;
3185
                               SWAP ;
3186
                               UNPAIR ;
3187
                               SWAP ;
3188
                               DUP ;
3189
                               DUP 10 ;
3190
                               CAR ;
3191
                               DUP ;
3192
                               DUG 2 ;
3193
                               GET ;
3194
                               IF_NONE { PUSH int 1014 ; FAILWITH } {} ;
3195
                               PUSH nat 0 ;
3196
                               UPDATE 3 ;
3197
                               SOME ;
3198
                               SWAP ;
3199
                               UPDATE ;
3200
                               DUP ;
3201
                               DUP 10 ;
3202
                               CAR ;
3203
                               DUP ;
3204
                               DUG 2 ;
3205
                               GET ;
3206
                               IF_NONE { PUSH int 1015 ; FAILWITH } {} ;
3207
                               PUSH nat 0 ;
3208
                               UPDATE 4 ;
3209
                               SOME ;
3210
                               SWAP ;
3211
                               UPDATE ;
3212
                               DUP ;
3213
                               DIG 9 ;
3214
                               CAR ;
3215
                               DUP ;
3216
                               DUG 2 ;
3217
                               GET ;
3218
                               IF_NONE { PUSH int 1016 ; FAILWITH } {} ;
3219
                               PUSH nat 0 ;
3220
                               UPDATE 1 ;
3221
                               SOME ;
3222
                               SWAP ;
3223
                               UPDATE ;
3224
                               SWAP ;
3225
                               PAIR ;
3226
                               SWAP ;
3227
                               PAIR ;
3228
                               PAIR ;
3229
                               PAIR ;
3230
                               SWAP ;
3231
                               PAIR ;
3232
                               DUG 2 ;
3233
                               DUP ;
3234
                               DUP 4 ;
3235
                               GET 5 ;
3236
                               CAR ;
3237
                               CDR ;
3238
                               MUL ;
3239
                               DUP 3 ;
3240
                               PUSH nat 100 ;
3241
                               MUL ;
3242
                               COMPARE ;
3243
                               LT ;
3244
                               IF
3245
                                 {}
3246
                                 { PUSH string "liquidation is not allowed" ; FAILWITH } ;
3247
                               PUSH nat 1000000000000 ;
3248
                               SWAP ;
3249
                               MUL ;
3250
                               PUSH nat 1000000000000 ;
3251
                               DIG 2 ;
3252
                               MUL ;
3253
                               SUB ;
3254
                               DUP ;
3255
                               PUSH int 0 ;
3256
                               COMPARE ;
3257
                               LT ;
3258
                               IF
3259
                                 { PUSH nat 1000000000000 ;
3260
                                   PUSH nat 100 ;
3261
                                   DUP 4 ;
3262
                                   GET 5 ;
3263
                                   CAR ;
3264
                                   CAR ;
3265
                                   DUP 4 ;
3266
                                   ISNAT ;
3267
                                   IF_NONE { PUSH int 1203 ; FAILWITH } {} ;
3268
                                   MUL ;
3269
                                   EDIV ;
3270
                                   IF_NONE { PUSH int 1203 ; FAILWITH } { CAR } ;
3271
                                   EDIV ;
3272
                                   IF_NONE { PUSH int 35 ; FAILWITH } { CAR } ;
3273
                                   DUP ;
3274
                                   PUSH nat 0 ;
3275
                                   COMPARE ;
3276
                                   LT ;
3277
                                   IF
3278
                                     { NIL operation ;
3279
                                       DUP 4 ;
3280
                                       CAR ;
3281
                                       CAR ;
3282
                                       GET 3 ;
3283
                                       CAR ;
3284
                                       CONTRACT %transfer (pair (address %from)
3285
                                                                (pair (address %to)
3286
                                                                      (nat %value))) ;
3287
                                       IF_NONE
3288
                                         { PUSH string "cant call transfer for tzBTC shares" ;
3289
                                           FAILWITH }
3290
                                         {} ;
3291
                                       PUSH mutez 0 ;
3292
                                       DUP 4 ;
3293
                                       DUP 7 ;
3294
                                       CAR ;
3295
                                       CAR ;
3296
                                       CAR ;
3297
                                       CAR ;
3298
                                       CAR ;
3299
                                       SELF_ADDRESS ;
3300
                                       PAIR 3 ;
3301
                                       TRANSFER_TOKENS ;
3302
                                       CONS ;
3303
                                       DUP 4 ;
3304
                                       DUP 3 ;
3305
                                       DIG 5 ;
3306
                                       GET 11 ;
3307
                                       SUB ;
3308
                                       ISNAT ;
3309
                                       IF_NONE { PUSH int 1206 ; FAILWITH } {} ;
3310
                                       UPDATE 11 ;
3311
                                       DUG 3 }
3312
                                     { NIL operation } ;
3313
                                   DUP 4 ;
3314
                                   UNPAIR ;
3315
                                   UNPAIR ;
3316
                                   UNPAIR ;
3317
                                   UNPAIR ;
3318
                                   UNPAIR ;
3319
                                   SWAP ;
3320
                                   DIG 9 ;
3321
                                   GET 7 ;
3322
                                   CAR ;
3323
                                   PUSH nat 1000000000000 ;
3324
                                   DUP ;
3325
                                   DIG 10 ;
3326
                                   MUL ;
3327
                                   DIG 10 ;
3328
                                   ISNAT ;
3329
                                   IF_NONE { PUSH int 1207 ; FAILWITH } {} ;
3330
                                   SUB ;
3331
                                   ISNAT ;
3332
                                   IF_NONE { PUSH int 1207 ; FAILWITH } {} ;
3333
                                   MUL ;
3334
                                   EDIV ;
3335
                                   IF_NONE { PUSH int 1207 ; FAILWITH } { CAR } ;
3336
                                   ADD ;
3337
                                   SWAP ;
3338
                                   PAIR ;
3339
                                   PAIR ;
3340
                                   PAIR ;
3341
                                   PAIR ;
3342
                                   PAIR ;
3343
                                   SWAP }
3344
                                 { SWAP ;
3345
                                   DUP ;
3346
                                   DUG 2 ;
3347
                                   UNPAIR ;
3348
                                   UNPAIR ;
3349
                                   UNPAIR ;
3350
                                   UNPAIR ;
3351
                                   CAR ;
3352
                                   DUP 7 ;
3353
                                   GET 7 ;
3354
                                   CAR ;
3355
                                   PUSH nat 1000000000000 ;
3356
                                   DIG 7 ;
3357
                                   NEG ;
3358
                                   ISNAT ;
3359
                                   IF_NONE { PUSH int 1212 ; FAILWITH } {} ;
3360
                                   MUL ;
3361
                                   NEG ;
3362
                                   EDIV ;
3363
                                   IF_NONE { PUSH int 39 ; FAILWITH } {} ;
3364
                                   CAR ;
3365
                                   ABS ;
3366
                                   DIG 6 ;
3367
                                   CAR ;
3368
                                   CAR ;
3369
                                   CAR ;
3370
                                   CAR ;
3371
                                   CDR ;
3372
                                   SUB ;
3373
                                   ISNAT ;
3374
                                   IF_NONE { PUSH int 1212 ; FAILWITH } {} ;
3375
                                   SWAP ;
3376
                                   PAIR ;
3377
                                   PAIR ;
3378
                                   PAIR ;
3379
                                   PAIR ;
3380
                                   PAIR ;
3381
                                   NIL operation } }
3382
                             { NOW ;
3383
                               DUP 3 ;
3384
                               CAR ;
3385
                               GET 3 ;
3386
                               GET 3 ;
3387
                               COMPARE ;
3388
                               NEQ ;
3389
                               IF
3390
                                 { NIL operation ;
3391
                                   DUP 4 ;
3392
                                   UNIT ;
3393
                                   SWAP ;
3394
                                   DIG 4 ;
3395
                                   DIG 3 ;
3396
                                   DIG 3 ;
3397
                                   PAIR 3 ;
3398
                                   EXEC ;
3399
                                   CDR ;
3400
                                   UNPAIR ;
3401
                                   DIG 5 ;
3402
                                   DIG 5 ;
3403
                                   DIG 5 ;
3404
                                   DIG 4 ;
3405
                                   DIG 5 ;
3406
                                   DIG 5 ;
3407
                                   DUP 3 ;
3408
                                   CAR ;
3409
                                   CAR ;
3410
                                   CAR ;
3411
                                   GET 4 ;
3412
                                   CONTRACT %getTotalSupply (pair (unit %request)
3413
                                                                  (contract %callback nat)) ;
3414
                                   IF_NONE
3415
                                     { PUSH string "cant call getTotalSupply of lb token" ;
3416
                                       FAILWITH }
3417
                                     {} ;
3418
                                   PUSH mutez 0 ;
3419
                                   SELF %updateLqtTotalCallback ;
3420
                                   UNIT ;
3421
                                   PAIR ;
3422
                                   TRANSFER_TOKENS ;
3423
                                   CONS ;
3424
                                   DUP 3 ;
3425
                                   CAR ;
3426
                                   CAR ;
3427
                                   GET 3 ;
3428
                                   CAR ;
3429
                                   CONTRACT %getBalance (pair (address %owner)
3430
                                                              (contract %callback nat)) ;
3431
                                   IF_NONE
3432
                                     { PUSH string "cant call getBalance for tzBTC" ;
3433
                                       FAILWITH }
3434
                                     {} ;
3435
                                   PUSH mutez 0 ;
3436
                                   SELF %updateTzbtcPoolCallback ;
3437
                                   DUP 6 ;
3438
                                   GET 3 ;
3439
                                   CAR ;
3440
                                   GET 3 ;
3441
                                   PAIR ;
3442
                                   TRANSFER_TOKENS ;
3443
                                   CONS ;
3444
                                   SELF %calculateLbPrice ;
3445
                                   PUSH mutez 0 ;
3446
                                   UNIT ;
3447
                                   TRANSFER_TOKENS ;
3448
                                   CONS }
3449
                                 { NIL operation } ;
3450
                               DUP 3 ;
3451
                               UNPAIR ;
3452
                               UNPAIR ;
3453
                               SWAP ;
3454
                               UNPAIR ;
3455
                               SWAP ;
3456
                               UNPAIR ;
3457
                               SWAP ;
3458
                               CDR ;
3459
                               DUP 7 ;
3460
                               CAR ;
3461
                               DIG 8 ;
3462
                               CAR ;
3463
                               GET 7 ;
3464
                               SUB ;
3465
                               ISNAT ;
3466
                               IF_NONE { PUSH int 956 ; FAILWITH } {} ;
3467
                               PAIR ;
3468
                               SWAP ;
3469
                               PAIR ;
3470
                               SWAP ;
3471
                               PAIR ;
3472
                               SWAP ;
3473
                               PAIR ;
3474
                               PAIR ;
3475
                               DUP ;
3476
                               DUG 3 ;
3477
                               CAR ;
3478
                               CAR ;
3479
                               CAR ;
3480
                               GET 4 ;
3481
                               CONTRACT %approve (pair (address %spender) (nat %value)) ;
3482
                               IF_NONE
3483
                                 { PUSH string "cant call approve for LB shares" ;
3484
                                   FAILWITH }
3485
                                 {} ;
3486
                               PUSH mutez 0 ;
3487
                               DUP 4 ;
3488
                               CAR ;
3489
                               DUP 6 ;
3490
                               GET 3 ;
3491
                               CAR ;
3492
                               GET 3 ;
3493
                               PAIR ;
3494
                               TRANSFER_TOKENS ;
3495
                               CONS ;
3496
                               DUP ;
3497
                               DUP 4 ;
3498
                               GET 3 ;
3499
                               CAR ;
3500
                               GET 3 ;
3501
                               CONTRACT %removeLiquidity (pair (address %to)
3502
                                                               (pair (nat %lqtBurned)
3503
                                                                     (pair
3504
                                                                       (mutez %minXtzWithdrawn)
3505
                                                                       (pair
3506
                                                                         (nat %minTokensWithdrawn)
3507
                                                                         (timestamp %deadline))))) ;
3508
                               IF_NONE
3509
                                 { PUSH string "cant call removeLiquidity" ; FAILWITH }
3510
                                 {} ;
3511
                               PUSH mutez 0 ;
3512
                               PUSH int 1 ;
3513
                               NOW ;
3514
                               ADD ;
3515
                               DUP 6 ;
3516
                               GET 3 ;
3517
                               PUSH mutez 0 ;
3518
                               DUP 8 ;
3519
                               CAR ;
3520
                               SELF_ADDRESS ;
3521
                               PAIR 5 ;
3522
                               DIG 4 ;
3523
                               DROP ;
3524
                               DIG 6 ;
3525
                               DROP ;
3526
                               DIG 6 ;
3527
                               DROP ;
3528
                               DIG 6 ;
3529
                               DROP ;
3530
                               TRANSFER_TOKENS ;
3531
                               CONS ;
3532
                               DUP 3 ;
3533
                               CAR ;
3534
                               CAR ;
3535
                               CAR ;
3536
                               GET 4 ;
3537
                               CONTRACT %approve (pair (address %spender) (nat %value)) ;
3538
                               IF_NONE
3539
                                 { PUSH string "cant call approve for LB shares" ;
3540
                                   FAILWITH }
3541
                                 {} ;
3542
                               PUSH mutez 0 ;
3543
                               PUSH nat 0 ;
3544
                               DUP 6 ;
3545
                               GET 3 ;
3546
                               CAR ;
3547
                               GET 3 ;
3548
                               PAIR ;
3549
                               TRANSFER_TOKENS ;
3550
                               CONS ;
3551
                               PUSH mutez 0 ;
3552
                               DUP 3 ;
3553
                               GET 4 ;
3554
                               COMPARE ;
3555
                               GT ;
3556
                               IF
3557
                                 { DUP 3 ;
3558
                                   CAR ;
3559
                                   CAR ;
3560
                                   CAR ;
3561
                                   GET 3 ;
3562
                                   CONTRACT %xtzToToken (pair (address %to)
3563
                                                              (pair
3564
                                                                (nat %minTokensBought)
3565
                                                                (timestamp %deadline))) ;
3566
                                   IF_NONE
3567
                                     { PUSH string "cant call xtzToToken" ; FAILWITH }
3568
                                     {} ;
3569
                                   DUP 3 ;
3570
                                   GET 4 ;
3571
                                   PUSH int 1 ;
3572
                                   NOW ;
3573
                                   ADD ;
3574
                                   PUSH nat 0 ;
3575
                                   SELF_ADDRESS ;
3576
                                   PAIR 3 ;
3577
                                   TRANSFER_TOKENS ;
3578
                                   CONS }
3579
                                 {} ;
3580
                               DIG 2 ;
3581
                               UNPAIR ;
3582
                               SWAP ;
3583
                               UNPAIR ;
3584
                               UNPAIR ;
3585
                               SWAP ;
3586
                               UNPAIR ;
3587
                               UNPAIR ;
3588
                               UNPAIR ;
3589
                               CAR ;
3590
                               PUSH bool True ;
3591
                               SWAP ;
3592
                               PAIR ;
3593
                               PAIR ;
3594
                               PAIR ;
3595
                               PAIR ;
3596
                               SWAP ;
3597
                               PAIR ;
3598
                               PAIR ;
3599
                               SWAP ;
3600
                               PAIR ;
3601
                               DUP ;
3602
                               DUG 3 ;
3603
                               CAR ;
3604
                               CAR ;
3605
                               GET 3 ;
3606
                               CAR ;
3607
                               CONTRACT %getBalance (pair (address %owner)
3608
                                                          (contract %callback nat)) ;
3609
                               IF_NONE
3610
                                 { PUSH string "cant call getBalance for tzBTC shares" ;
3611
                                   FAILWITH }
3612
                                 {} ;
3613
                               PUSH mutez 0 ;
3614
                               SELF %updateTzBTCCallback ;
3615
                               SELF_ADDRESS ;
3616
                               PAIR ;
3617
                               TRANSFER_TOKENS ;
3618
                               CONS ;
3619
                               SELF %redeemLBFinalize ;
3620
                               PUSH mutez 0 ;
3621
                               DUP 5 ;
3622
                               GET 11 ;
3623
                               DIG 4 ;
3624
                               CAR ;
3625
                               SENDER ;
3626
                               PAIR 3 ;
3627
                               TRANSFER_TOKENS ;
3628
                               CONS ;
3629
                               SELF_ADDRESS ;
3630
                               CONTRACT %sendBalance address ;
3631
                               IF_NONE
3632
                                 { PUSH string "cant make selfcall sendBalance" ;
3633
                                   FAILWITH }
3634
                                 {} ;
3635
                               PUSH mutez 0 ;
3636
                               SENDER ;
3637
                               TRANSFER_TOKENS ;
3638
                               CONS } } } } } }
3639
         { IF_LEFT
3640
             { IF_LEFT
3641
                 { IF_LEFT
3642
                     { IF_LEFT
3643
                         { SENDER ;
3644
                           SELF_ADDRESS ;
3645
                           COMPARE ;
3646
                           EQ ;
3647
                           IF {} { PUSH string "Forbidden." ; FAILWITH } ;
3648
                           SWAP ;
3649
                           DUP ;
3650
                           DUG 2 ;
3651
                           GET 3 ;
3652
                           CAR ;
3653
                           GET 4 ;
3654
                           SWAP ;
3655
                           DUP ;
3656
                           DUG 2 ;
3657
                           CAR ;
3658
                           GET ;
3659
                           IF_NONE { PUSH int 1024 ; FAILWITH } {} ;
3660
                           GET 3 ;
3661
                           DUP ;
3662
                           PUSH nat 1000000000000 ;
3663
                           SWAP ;
3664
                           PUSH nat 1000000000000 ;
3665
                           MUL ;
3666
                           DUP 4 ;
3667
                           GET 3 ;
3668
                           DIG 5 ;
3669
                           DUP ;
3670
                           CAR ;
3671
                           GET 3 ;
3672
                           CAR ;
3673
                           CAR ;
3674
                           SWAP ;
3675
                           DUP ;
3676
                           DUG 7 ;
3677
                           GET 3 ;
3678
                           CAR ;
3679
                           GET 4 ;
3680
                           DUP 7 ;
3681
                           CAR ;
3682
                           GET ;
3683
                           IF_NONE { PUSH int 1027 ; FAILWITH } {} ;
3684
                           CAR ;
3685
                           MUL ;
3686
                           MUL ;
3687
                           NEG ;
3688
                           EDIV ;
3689
                           IF_NONE { PUSH int 39 ; FAILWITH } {} ;
3690
                           CAR ;
3691
                           ABS ;
3692
                           NEG ;
3693
                           EDIV ;
3694
                           IF_NONE { PUSH int 39 ; FAILWITH } {} ;
3695
                           CAR ;
3696
                           ABS ;
3697
                           SWAP ;
3698
                           DUP ;
3699
                           DUG 2 ;
3700
                           DUP 4 ;
3701
                           GET 3 ;
3702
                           DUP 6 ;
3703
                           GET 3 ;
3704
                           CAR ;
3705
                           GET 4 ;
3706
                           DUP 6 ;
3707
                           CAR ;
3708
                           GET ;
3709
                           IF_NONE { PUSH int 1030 ; FAILWITH } {} ;
3710
                           CAR ;
3711
                           MUL ;
3712
                           EDIV ;
3713
                           IF_NONE { PUSH int 1030 ; FAILWITH } { CAR } ;
3714
                           DUP 5 ;
3715
                           UNPAIR ;
3716
                           SWAP ;
3717
                           UNPAIR ;
3718
                           SWAP ;
3719
                           UNPAIR ;
3720
                           SWAP ;
3721
                           UNPAIR ;
3722
                           CAR ;
3723
                           DUP 6 ;
3724
                           DIG 10 ;
3725
                           GET 7 ;
3726
                           CDR ;
3727
                           SUB ;
3728
                           ISNAT ;
3729
                           IF_NONE { PUSH int 1031 ; FAILWITH } {} ;
3730
                           SWAP ;
3731
                           PAIR ;
3732
                           PAIR ;
3733
                           SWAP ;
3734
                           PAIR ;
3735
                           SWAP ;
3736
                           PAIR ;
3737
                           SWAP ;
3738
                           PAIR ;
3739
                           DUP ;
3740
                           DUG 5 ;
3741
                           UNPAIR ;
3742
                           SWAP ;
3743
                           UNPAIR ;
3744
                           UNPAIR ;
3745
                           UNPAIR ;
3746
                           SWAP ;
3747
                           UNPAIR ;
3748
                           SWAP ;
3749
                           DUP ;
3750
                           DUP 11 ;
3751
                           CAR ;
3752
                           DUP ;
3753
                           DUG 2 ;
3754
                           GET ;
3755
                           IF_NONE { PUSH int 1032 ; FAILWITH } {} ;
3756
                           DUP 9 ;
3757
                           DIG 13 ;
3758
                           GET 3 ;
3759
                           CAR ;
3760
                           GET 4 ;
3761
                           DUP 14 ;
3762
                           CAR ;
3763
                           GET ;
3764
                           IF_NONE { PUSH int 1033 ; FAILWITH } {} ;
3765
                           CAR ;
3766
                           SUB ;
3767
                           ISNAT ;
3768
                           IF_NONE
3769
                             { PUSH string "wrong liquidated gross credit" ; FAILWITH }
3770
                             {} ;
3771
                           UPDATE 1 ;
3772
                           SOME ;
3773
                           SWAP ;
3774
                           UPDATE ;
3775
                           SWAP ;
3776
                           PAIR ;
3777
                           SWAP ;
3778
                           PAIR ;
3779
                           PAIR ;
3780
                           PAIR ;
3781
                           SWAP ;
3782
                           PAIR ;
3783
                           DUG 4 ;
3784
                           DUP 3 ;
3785
                           DUP 5 ;
3786
                           GET 3 ;
3787
                           DUP 7 ;
3788
                           GET 3 ;
3789
                           CAR ;
3790
                           GET 4 ;
3791
                           DUP 7 ;
3792
                           CAR ;
3793
                           GET ;
3794
                           IF_NONE { PUSH int 1037 ; FAILWITH } {} ;
3795
                           GET 4 ;
3796
                           MUL ;
3797
                           EDIV ;
3798
                           IF_NONE { PUSH int 1037 ; FAILWITH } { CAR } ;
3799
                           DUP 6 ;
3800
                           SWAP ;
3801
                           DUP ;
3802
                           DUG 2 ;
3803
                           DIG 7 ;
3804
                           GET 9 ;
3805
                           SUB ;
3806
                           ISNAT ;
3807
                           IF_NONE { PUSH int 1038 ; FAILWITH } {} ;
3808
                           UPDATE 9 ;
3809
                           DUP ;
3810
                           DUG 6 ;
3811
                           UNPAIR ;
3812
                           SWAP ;
3813
                           UNPAIR ;
3814
                           UNPAIR ;
3815
                           UNPAIR ;
3816
                           SWAP ;
3817
                           UNPAIR ;
3818
                           SWAP ;
3819
                           DUP ;
3820
                           DUP 12 ;
3821
                           CAR ;
3822
                           DUP ;
3823
                           DUG 2 ;
3824
                           GET ;
3825
                           IF_NONE { PUSH int 1039 ; FAILWITH } {} ;
3826
                           DUP 9 ;
3827
                           DIG 14 ;
3828
                           GET 3 ;
3829
                           CAR ;
3830
                           GET 4 ;
3831
                           DUP 15 ;
3832
                           CAR ;
3833
                           GET ;
3834
                           IF_NONE { PUSH int 1040 ; FAILWITH } {} ;
3835
                           GET 4 ;
3836
                           SUB ;
3837
                           ISNAT ;
3838
                           IF_NONE
3839
                             { PUSH string "wrong liquidated net credit" ; FAILWITH }
3840
                             {} ;
3841
                           UPDATE 4 ;
3842
                           SOME ;
3843
                           SWAP ;
3844
                           UPDATE ;
3845
                           DUP ;
3846
                           DUP 12 ;
3847
                           CAR ;
3848
                           DUP ;
3849
                           DUG 2 ;
3850
                           GET ;
3851
                           IF_NONE { PUSH int 1044 ; FAILWITH } {} ;
3852
                           DUP 13 ;
3853
                           GET 3 ;
3854
                           DUP 13 ;
3855
                           SUB ;
3856
                           ISNAT ;
3857
                           IF_NONE
3858
                             { PUSH string "wrong liquidated shares" ; FAILWITH }
3859
                             {} ;
3860
                           UPDATE 3 ;
3861
                           SOME ;
3862
                           SWAP ;
3863
                           UPDATE ;
3864
                           SWAP ;
3865
                           PAIR ;
3866
                           SWAP ;
3867
                           PAIR ;
3868
                           PAIR ;
3869
                           PAIR ;
3870
                           SWAP ;
3871
                           PAIR ;
3872
                           DUG 5 ;
3873
                           DUP 3 ;
3874
                           DUP 6 ;
3875
                           GET 4 ;
3876
                           DUP 8 ;
3877
                           GET 11 ;
3878
                           SUB ;
3879
                           ISNAT ;
3880
                           IF_NONE
3881
                             { PUSH string "negative tzBTC delta error" ; FAILWITH }
3882
                             {} ;
3883
                           SUB ;
3884
                           ISNAT ;
3885
                           IF_NONE
3886
                             { PUSH string "not enough collateral" ; FAILWITH }
3887
                             {} ;
3888
                           DUP ;
3889
                           PUSH nat 0 ;
3890
                           COMPARE ;
3891
                           LT ;
3892
                           IF
3893
                             { SWAP ;
3894
                               DROP ;
3895
                               SWAP ;
3896
                               DROP ;
3897
                               SWAP ;
3898
                               DROP ;
3899
                               SWAP ;
3900
                               DROP ;
3901
                               SWAP ;
3902
                               DROP ;
3903
                               DIG 2 ;
3904
                               DROP ;
3905
                               DIG 3 ;
3906
                               DROP ;
3907
                               NIL operation ;
3908
                               DIG 3 ;
3909
                               DUP 3 ;
3910
                               PUSH mutez 0 ;
3911
                               PAIR ;
3912
                               SWAP ;
3913
                               DIG 4 ;
3914
                               DIG 3 ;
3915
                               DIG 3 ;
3916
                               PAIR 3 ;
3917
                               EXEC ;
3918
                               CDR ;
3919
                               UNPAIR ;
3920
                               SWAP ;
3921
                               DUP ;
3922
                               DUG 3 ;
3923
                               DIG 2 ;
3924
                               DIG 3 ;
3925
                               GET 11 ;
3926
                               SUB ;
3927
                               ISNAT ;
3928
                               IF_NONE { PUSH int 953 ; FAILWITH } {} ;
3929
                               UPDATE 11 ;
3930
                               SWAP }
3931
                             { DROP 6 ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; NIL operation } }
3932
                         { SWAP ;
3933
                           DUP ;
3934
                           DUG 2 ;
3935
                           CAR ;
3936
                           GET 9 ;
3937
                           SENDER ;
3938
                           MEM ;
3939
                           IF {} { PUSH string "Unknown Address." ; FAILWITH } ;
3940
                           NOW ;
3941
                           DUP 3 ;
3942
                           CAR ;
3943
                           GET 3 ;
3944
                           GET 3 ;
3945
                           COMPARE ;
3946
                           NEQ ;
3947
                           IF
3948
                             { DIG 3 ;
3949
                               DROP ;
3950
                               NIL operation ;
3951
                               DIG 3 ;
3952
                               UNIT ;
3953
                               SWAP ;
3954
                               DIG 4 ;
3955
                               DIG 3 ;
3956
                               DIG 3 ;
3957
                               PAIR 3 ;
3958
                               EXEC ;
3959
                               CDR ;
3960
                               UNPAIR ;
3961
                               DIG 3 ;
3962
                               DIG 2 ;
3963
                               DIG 3 ;
3964
                               DIG 3 ;
3965
                               DUP 3 ;
3966
                               CAR ;
3967
                               CAR ;
3968
                               CAR ;
3969
                               GET 4 ;
3970
                               CONTRACT %getTotalSupply (pair (unit %request)
3971
                                                              (contract %callback nat)) ;
3972
                               IF_NONE
3973
                                 { PUSH string "cant call getTotalSupply of lb token" ;
3974
                                   FAILWITH }
3975
                                 {} ;
3976
                               PUSH mutez 0 ;
3977
                               SELF %updateLqtTotalCallback ;
3978
                               UNIT ;
3979
                               PAIR ;
3980
                               TRANSFER_TOKENS ;
3981
                               CONS ;
3982
                               DUP 3 ;
3983
                               CAR ;
3984
                               CAR ;
3985
                               GET 3 ;
3986
                               CAR ;
3987
                               CONTRACT %getBalance (pair (address %owner)
3988
                                                          (contract %callback nat)) ;
3989
                               IF_NONE
3990
                                 { PUSH string "cant call getBalance for tzBTC" ;
3991
                                   FAILWITH }
3992
                                 {} ;
3993
                               PUSH mutez 0 ;
3994
                               SELF %updateTzbtcPoolCallback ;
3995
                               DUP 6 ;
3996
                               GET 3 ;
3997
                               CAR ;
3998
                               GET 3 ;
3999
                               PAIR ;
4000
                               TRANSFER_TOKENS ;
4001
                               CONS ;
4002
                               SELF %calculateLbPrice ;
4003
                               PUSH mutez 0 ;
4004
                               UNIT ;
4005
                               TRANSFER_TOKENS ;
4006
                               CONS }
4007
                             { DIG 2 ; DROP ; DIG 2 ; DROP ; NIL operation } ;
4008
                           DUP 3 ;
4009
                           CAR ;
4010
                           CAR ;
4011
                           CAR ;
4012
                           CAR ;
4013
                           CDR ;
4014
                           PUSH nat 1000000000000 ;
4015
                           DUP ;
4016
                           DUP 5 ;
4017
                           MUL ;
4018
                           MUL ;
4019
                           NEG ;
4020
                           EDIV ;
4021
                           IF_NONE { PUSH int 39 ; FAILWITH } {} ;
4022
                           CAR ;
4023
                           ABS ;
4024
                           DUP 4 ;
4025
                           UNPAIR ;
4026
                           UNPAIR ;
4027
                           SWAP ;
4028
                           UNPAIR ;
4029
                           SWAP ;
4030
                           UNPAIR ;
4031
                           SWAP ;
4032
                           UNPAIR ;
4033
                           SWAP ;
4034
                           UNPAIR ;
4035
                           DUP ;
4036
                           SENDER ;
4037
                           DUP ;
4038
                           DUG 2 ;
4039
                           GET ;
4040
                           IF_NONE { PUSH int 682 ; FAILWITH } {} ;
4041
                           DUP 10 ;
4042
                           DIG 13 ;
4043
                           CAR ;
4044
                           GET 9 ;
4045
                           SENDER ;
4046
                           GET ;
4047
                           IF_NONE { PUSH int 683 ; FAILWITH } {} ;
4048
                           CDR ;
4049
                           SUB ;
4050
                           ISNAT ;
4051
                           IF_NONE { PUSH string "too much amount" ; FAILWITH } {} ;
4052
                           UPDATE 2 ;
4053
                           SOME ;
4054
                           SWAP ;
4055
                           UPDATE ;
4056
                           PAIR ;
4057
                           SWAP ;
4058
                           PAIR ;
4059
                           SWAP ;
4060
                           PAIR ;
4061
                           SWAP ;
4062
                           PAIR ;
4063
                           SWAP ;
4064
                           PAIR ;
4065
                           PAIR ;
4066
                           DUP ;
4067
                           DUG 4 ;
4068
                           UNPAIR ;
4069
                           SWAP ;
4070
                           UNPAIR ;
4071
                           SWAP ;
4072
                           UNPAIR ;
4073
                           SWAP ;
4074
                           UNPAIR ;
4075
                           CDR ;
4076
                           DIG 5 ;
4077
                           DIG 8 ;
4078
                           GET 7 ;
4079
                           CAR ;
4080
                           SUB ;
4081
                           ISNAT ;
4082
                           IF_NONE
4083
                             { PUSH string "wrong total deposit value" ; FAILWITH }
4084
                             {} ;
4085
                           PAIR ;
4086
                           PAIR ;
4087
                           SWAP ;
4088
                           PAIR ;
4089
                           SWAP ;
4090
                           PAIR ;
4091
                           SWAP ;
4092
                           PAIR ;
4093
                           DUP ;
4094
                           DUG 3 ;
4095
                           CAR ;
4096
                           CAR ;
4097
                           GET 3 ;
4098
                           CAR ;
4099
                           CONTRACT %transfer (pair (address %from)
4100
                                                    (pair (address %to) (nat %value))) ;
4101
                           IF_NONE
4102
                             { PUSH string "cant call transfer for tzBTC shares" ;
4103
                               FAILWITH }
4104
                             {} ;
4105
                           PUSH mutez 0 ;
4106
                           DUP 4 ;
4107
                           SENDER ;
4108
                           SELF_ADDRESS ;
4109
                           PAIR 3 ;
4110
                           TRANSFER_TOKENS ;
4111
                           CONS ;
4112
                           DUP 3 ;
4113
                           DIG 2 ;
4114
                           DIG 3 ;
4115
                           GET 11 ;
4116
                           SUB ;
4117
                           ISNAT ;
4118
                           IF_NONE { PUSH int 693 ; FAILWITH } {} ;
4119
                           UPDATE 11 ;
4120
                           SWAP ;
4121
                           DIG 2 ;
4122
                           UNIT ;
4123
                           SWAP ;
4124
                           DIG 3 ;
4125
                           DIG 2 ;
4126
                           PAIR ;
4127
                           EXEC ;
4128
                           CDR ;
4129
                           SWAP } }
4130
                     { DIG 3 ;
4131
                       DROP ;
4132
                       DIG 3 ;
4133
                       DROP ;
4134
                       IF_LEFT
4135
                         { DROP ;
4136
                           SWAP ;
4137
                           DROP ;
4138
                           SENDER ;
4139
                           SELF_ADDRESS ;
4140
                           COMPARE ;
4141
                           EQ ;
4142
                           IF {} { PUSH string "Forbidden." ; FAILWITH } ;
4143
                           PUSH mutez 0 ;
4144
                           BALANCE ;
4145
                           COMPARE ;
4146
                           GT ;
4147
                           IF
4148
                             { DUP ;
4149
                               CAR ;
4150
                               CAR ;
4151
                               CAR ;
4152
                               GET 3 ;
4153
                               CONTRACT %xtzToToken (pair (address %to)
4154
                                                          (pair (nat %minTokensBought)
4155
                                                                (timestamp %deadline))) ;
4156
                               IF_NONE
4157
                                 { PUSH string "cant call xtzToToken" ; FAILWITH }
4158
                                 {} ;
4159
                               NIL operation ;
4160
                               SWAP ;
4161
                               BALANCE ;
4162
                               PUSH int 1 ;
4163
                               NOW ;
4164
                               ADD ;
4165
                               PUSH nat 0 ;
4166
                               SELF_ADDRESS ;
4167
                               PAIR 3 ;
4168
                               TRANSFER_TOKENS ;
4169
                               CONS }
4170
                             { NIL operation } }
4171
                         { IF_LEFT
4172
                             { DIG 2 ;
4173
                               DROP ;
4174
                               SENDER ;
4175
                               SELF_ADDRESS ;
4176
                               COMPARE ;
4177
                               EQ ;
4178
                               IF {} { PUSH string "Forbidden." ; FAILWITH } ;
4179
                               PUSH mutez 0 ;
4180
                               BALANCE ;
4181
                               COMPARE ;
4182
                               GT ;
4183
                               IF
4184
                                 { CONTRACT unit ;
4185
                                   IF_NONE { PUSH int 876 ; FAILWITH } {} ;
4186
                                   NIL operation ;
4187
                                   SWAP ;
4188
                                   BALANCE ;
4189
                                   UNIT ;
4190
                                   TRANSFER_TOKENS ;
4191
                                   CONS }
4192
                                 { DROP ; NIL operation } }
4193
                             { DIG 2 ;
4194
                               DROP ;
4195
                               SWAP ;
4196
                               DUP ;
4197
                               DUG 2 ;
4198
                               CAR ;
4199
                               CAR ;
4200
                               CAR ;
4201
                               CAR ;
4202
                               CAR ;
4203
                               SENDER ;
4204
                               COMPARE ;
4205
                               EQ ;
4206
                               IF {} { PUSH string "NotAdmin" ; FAILWITH } ;
4207
                               SWAP ;
4208
                               UNPAIR ;
4209
                               UNPAIR ;
4210
                               UNPAIR ;
4211
                               UNPAIR ;
4212
                               CDR ;
4213
                               DIG 5 ;
4214
                               PAIR ;
4215
                               PAIR ;
4216
                               PAIR ;
4217
                               PAIR ;
4218
                               PAIR ;
4219
                               NIL operation } } } }
4220
                 { IF_LEFT
4221
                     { DIG 2 ;
4222
                       DROP ;
4223
                       DIG 2 ;
4224
                       DROP ;
4225
                       DIG 2 ;
4226
                       DROP ;
4227
                       IF_LEFT
4228
                         { SENDER ;
4229
                           DUP 3 ;
4230
                           CAR ;
4231
                           CAR ;
4232
                           CAR ;
4233
                           CAR ;
4234
                           CAR ;
4235
                           COMPARE ;
4236
                           EQ ;
4237
                           IF {} { PUSH string "Forbidden." ; FAILWITH } ;
4238
                           SWAP ;
4239
                           UNPAIR ;
4240
                           UNPAIR ;
4241
                           UNPAIR ;
4242
                           UNPAIR ;
4243
                           SWAP ;
4244
                           CDR ;
4245
                           DIG 5 ;
4246
                           PAIR ;
4247
                           SWAP ;
4248
                           PAIR ;
4249
                           PAIR ;
4250
                           PAIR ;
4251
                           PAIR }
4252
                         { SENDER ;
4253
                           DUP 3 ;
4254
                           CAR ;
4255
                           CAR ;
4256
                           CAR ;
4257
                           CAR ;
4258
                           CAR ;
4259
                           COMPARE ;
4260
                           EQ ;
4261
                           IF {} { PUSH string "Forbidden." ; FAILWITH } ;
4262
                           SWAP ;
4263
                           UNPAIR ;
4264
                           UNPAIR ;
4265
                           UNPAIR ;
4266
                           SWAP ;
4267
                           UNPAIR ;
4268
                           CAR ;
4269
                           DUP 6 ;
4270
                           CAR ;
4271
                           SWAP ;
4272
                           PAIR ;
4273
                           SWAP ;
4274
                           GET 4 ;
4275
                           DUP 6 ;
4276
                           GET 3 ;
4277
                           PAIR ;
4278
                           DIG 5 ;
4279
                           GET 4 ;
4280
                           PAIR ;
4281
                           SWAP ;
4282
                           PAIR ;
4283
                           SWAP ;
4284
                           PAIR ;
4285
                           PAIR ;
4286
                           PAIR } ;
4287
                       NIL operation }
4288
                     { IF_LEFT
4289
                         { SENDER ;
4290
                           DUP 3 ;
4291
                           CAR ;
4292
                           CAR ;
4293
                           CAR ;
4294
                           CAR ;
4295
                           CAR ;
4296
                           COMPARE ;
4297
                           EQ ;
4298
                           IF {} { PUSH string "Forbidden." ; FAILWITH } ;
4299
                           NOW ;
4300
                           DUP 3 ;
4301
                           CAR ;
4302
                           GET 3 ;
4303
                           GET 3 ;
4304
                           COMPARE ;
4305
                           NEQ ;
4306
                           IF
4307
                             { DIG 3 ;
4308
                               DROP ;
4309
                               DIG 3 ;
4310
                               DROP ;
4311
                               NIL operation ;
4312
                               DIG 3 ;
4313
                               UNIT ;
4314
                               SWAP ;
4315
                               DIG 4 ;
4316
                               DIG 3 ;
4317
                               DIG 3 ;
4318
                               PAIR 3 ;
4319
                               EXEC ;
4320
                               CDR ;
4321
                               UNPAIR ;
4322
                               SWAP ;
4323
                               DUP ;
4324
                               DUG 3 ;
4325
                               CAR ;
4326
                               CAR ;
4327
                               CAR ;
4328
                               GET 4 ;
4329
                               CONTRACT %getTotalSupply (pair (unit %request)
4330
                                                              (contract %callback nat)) ;
4331
                               IF_NONE
4332
                                 { PUSH string "cant call getTotalSupply of lb token" ;
4333
                                   FAILWITH }
4334
                                 {} ;
4335
                               PUSH mutez 0 ;
4336
                               SELF %updateLqtTotalCallback ;
4337
                               UNIT ;
4338
                               PAIR ;
4339
                               TRANSFER_TOKENS ;
4340
                               CONS ;
4341
                               DUP 3 ;
4342
                               CAR ;
4343
                               CAR ;
4344
                               GET 3 ;
4345
                               CAR ;
4346
                               CONTRACT %getBalance (pair (address %owner)
4347
                                                          (contract %callback nat)) ;
4348
                               IF_NONE
4349
                                 { PUSH string "cant call getBalance for tzBTC" ;
4350
                                   FAILWITH }
4351
                                 {} ;
4352
                               PUSH mutez 0 ;
4353
                               SELF %updateTzbtcPoolCallback ;
4354
                               DUP 6 ;
4355
                               GET 3 ;
4356
                               CAR ;
4357
                               GET 3 ;
4358
                               PAIR ;
4359
                               TRANSFER_TOKENS ;
4360
                               CONS ;
4361
                               SELF %calculateLbPrice ;
4362
                               PUSH mutez 0 ;
4363
                               UNIT ;
4364
                               TRANSFER_TOKENS ;
4365
                               CONS }
4366
                             { DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; NIL operation } ;
4367
                           DIG 2 ;
4368
                           UNPAIR ;
4369
                           UNPAIR ;
4370
                           SWAP ;
4371
                           UNPAIR ;
4372
                           UNPAIR ;
4373
                           SWAP ;
4374
                           CAR ;
4375
                           DIG 6 ;
4376
                           SWAP ;
4377
                           PAIR ;
4378
                           SWAP ;
4379
                           PAIR ;
4380
                           PAIR ;
4381
                           SWAP ;
4382
                           PAIR ;
4383
                           PAIR ;
4384
                           SWAP }
4385
                         { DIG 2 ;
4386
                           DROP ;
4387
                           DIG 2 ;
4388
                           DROP ;
4389
                           DIG 2 ;
4390
                           DROP ;
4391
                           IF_LEFT
4392
                             { SENDER ;
4393
                               DUP 3 ;
4394
                               CAR ;
4395
                               CAR ;
4396
                               CAR ;
4397
                               CAR ;
4398
                               CAR ;
4399
                               COMPARE ;
4400
                               EQ ;
4401
                               IF {} { PUSH string "Forbidden." ; FAILWITH } ;
4402
                               DUP ;
4403
                               PUSH nat 277777777 ;
4404
                               SWAP ;
4405
                               COMPARE ;
4406
                               LE ;
4407
                               IF
4408
                                 {}
4409
                                 { PUSH string "price change rate max value error" ;
4410
                                   FAILWITH } ;
4411
                               SWAP ;
4412
                               UNPAIR ;
4413
                               UNPAIR ;
4414
                               SWAP ;
4415
                               UNPAIR ;
4416
                               SWAP ;
4417
                               UNPAIR ;
4418
                               CAR ;
4419
                               DIG 5 ;
4420
                               SWAP ;
4421
                               PAIR ;
4422
                               PAIR ;
4423
                               SWAP ;
4424
                               PAIR ;
4425
                               SWAP ;
4426
                               PAIR ;
4427
                               PAIR }
4428
                             { SENDER ;
4429
                               DUP 3 ;
4430
                               CAR ;
4431
                               CAR ;
4432
                               CAR ;
4433
                               CAR ;
4434
                               CAR ;
4435
                               COMPARE ;
4436
                               EQ ;
4437
                               IF {} { PUSH string "Forbidden." ; FAILWITH } ;
4438
                               DUP ;
4439
                               CAR ;
4440
                               PUSH nat 20 ;
4441
                               SWAP ;
4442
                               COMPARE ;
4443
                               GE ;
4444
                               IF
4445
                                 {}
4446
                                 { PUSH string "max_leverage min value error" ; FAILWITH } ;
4447
                               DUP ;
4448
                               CAR ;
4449
                               PUSH nat 100 ;
4450
                               SWAP ;
4451
                               COMPARE ;
4452
                               LE ;
4453
                               IF
4454
                                 {}
4455
                                 { PUSH string "max_leverage max value error" ; FAILWITH } ;
4456
                               DUP ;
4457
                               GET 3 ;
4458
                               PUSH nat 100 ;
4459
                               COMPARE ;
4460
                               LT ;
4461
                               IF
4462
                                 {}
4463
                                 { PUSH string "onchain_liquidation_percent min value error" ;
4464
                                   FAILWITH } ;
4465
                               DUP ;
4466
                               GET 3 ;
4467
                               PUSH nat 200 ;
4468
                               SWAP ;
4469
                               COMPARE ;
4470
                               LE ;
4471
                               IF
4472
                                 {}
4473
                                 { PUSH string "onchain_liquidation_percent max value error" ;
4474
                                   FAILWITH } ;
4475
                               DUP ;
4476
                               GET 5 ;
4477
                               PUSH nat 100 ;
4478
                               SWAP ;
4479
                               COMPARE ;
4480
                               LE ;
4481
                               IF
4482
                                 {}
4483
                                 { PUSH string "onchain_liquidation_comm max value error" ;
4484
                                   FAILWITH } ;
4485
                               DUP ;
4486
                               GET 7 ;
4487
                               PUSH nat 100 ;
4488
                               COMPARE ;
4489
                               LT ;
4490
                               IF
4491
                                 {}
4492
                                 { PUSH string "liquidation_percent min value error" ;
4493
                                   FAILWITH } ;
4494
                               DUP ;
4495
                               GET 7 ;
4496
                               PUSH nat 200 ;
4497
                               SWAP ;
4498
                               COMPARE ;
4499
                               LE ;
4500
                               IF
4501
                                 {}
4502
                                 { PUSH string "liquidation_percent max value error" ;
4503
                                   FAILWITH } ;
4504
                               DUP ;
4505
                               GET 9 ;
4506
                               PUSH nat 100 ;
4507
                               COMPARE ;
4508
                               LT ;
4509
                               IF
4510
                                 {}
4511
                                 { PUSH string "liquidation_price_percent min value error" ;
4512
                                   FAILWITH } ;
4513
                               DUP ;
4514
                               GET 7 ;
4515
                               SWAP ;
4516
                               DUP ;
4517
                               DUG 2 ;
4518
                               GET 9 ;
4519
                               COMPARE ;
4520
                               LE ;
4521
                               IF
4522
                                 {}
4523
                                 { PUSH string "liquidation_percent max value error" ;
4524
                                   FAILWITH } ;
4525
                               DUP ;
4526
                               GET 11 ;
4527
                               PUSH nat 100 ;
4528
                               SWAP ;
4529
                               COMPARE ;
4530
                               LE ;
4531
                               IF
4532
                                 {}
4533
                                 { PUSH string "liquidation_comm max value error" ;
4534
                                   FAILWITH } ;
4535
                               SWAP ;
4536
                               UNPAIR ;
4537
                               SWAP ;
4538
                               UNPAIR ;
4539
                               UNPAIR ;
4540
                               SWAP ;
4541
                               UNPAIR ;
4542
                               CAR ;
4543
                               DUP 6 ;
4544
                               CAR ;
4545
                               SWAP ;
4546
                               PAIR ;
4547
                               PAIR ;
4548
                               SWAP ;
4549
                               PAIR ;
4550
                               SWAP ;
4551
                               UNPAIR ;
4552
                               CDR ;
4553
                               DUP 5 ;
4554
                               GET 3 ;
4555
                               DUP 6 ;
4556
                               GET 5 ;
4557
                               PAIR ;
4558
                               PAIR ;
4559
                               PAIR ;
4560
                               SWAP ;
4561
                               UNPAIR ;
4562
                               CDR ;
4563
                               DUP 5 ;
4564
                               GET 7 ;
4565
                               DUP 6 ;
4566
                               GET 9 ;
4567
                               SWAP ;
4568
                               PAIR ;
4569
                               PAIR ;
4570
                               PAIR ;
4571
                               PAIR ;
4572
                               SWAP ;
4573
                               UNPAIR ;
4574
                               SWAP ;
4575
                               UNPAIR ;
4576
                               SWAP ;
4577
                               UNPAIR ;
4578
                               SWAP ;
4579
                               UNPAIR ;
4580
                               SWAP ;
4581
                               CAR ;
4582
                               DUP 7 ;
4583
                               GET 11 ;
4584
                               SWAP ;
4585
                               PAIR ;
4586
                               SWAP ;
4587
                               PAIR ;
4588
                               SWAP ;
4589
                               PAIR ;
4590
                               SWAP ;
4591
                               PAIR ;
4592
                               SWAP ;
4593
                               PAIR ;
4594
                               SWAP ;
4595
                               UNPAIR ;
4596
                               SWAP ;
4597
                               UNPAIR ;
4598
                               UNPAIR ;
4599
                               SWAP ;
4600
                               CDR ;
4601
                               DIG 5 ;
4602
                               GET 12 ;
4603
                               PAIR ;
4604
                               SWAP ;
4605
                               PAIR ;
4606
                               PAIR ;
4607
                               SWAP ;
4608
                               PAIR ;
4609
                               SWAP ;
4610
                               PAIR } ;
4611
                           NIL operation } } } }
4612
             { IF_LEFT
4613
                 { IF_LEFT
4614
                     { IF_LEFT
4615
                         { SENDER ;
4616
                           DUP 3 ;
4617
                           CAR ;
4618
                           CAR ;
4619
                           CAR ;
4620
                           CAR ;
4621
                           CAR ;
4622
                           COMPARE ;
4623
                           EQ ;
4624
                           IF {} { PUSH string "Forbidden." ; FAILWITH } ;
4625
                           NOW ;
4626
                           DUP 3 ;
4627
                           CAR ;
4628
                           GET 3 ;
4629
                           GET 3 ;
4630
                           COMPARE ;
4631
                           NEQ ;
4632
                           IF
4633
                             { DIG 3 ;
4634
                               DROP ;
4635
                               DIG 3 ;
4636
                               DROP ;
4637
                               NIL operation ;
4638
                               DIG 3 ;
4639
                               UNIT ;
4640
                               SWAP ;
4641
                               DIG 4 ;
4642
                               DIG 3 ;
4643
                               DIG 3 ;
4644
                               PAIR 3 ;
4645
                               EXEC ;
4646
                               CDR ;
4647
                               UNPAIR ;
4648
                               SWAP ;
4649
                               DUP ;
4650
                               DUG 3 ;
4651
                               CAR ;
4652
                               CAR ;
4653
                               CAR ;
4654
                               GET 4 ;
4655
                               CONTRACT %getTotalSupply (pair (unit %request)
4656
                                                              (contract %callback nat)) ;
4657
                               IF_NONE
4658
                                 { PUSH string "cant call getTotalSupply of lb token" ;
4659
                                   FAILWITH }
4660
                                 {} ;
4661
                               PUSH mutez 0 ;
4662
                               SELF %updateLqtTotalCallback ;
4663
                               UNIT ;
4664
                               PAIR ;
4665
                               TRANSFER_TOKENS ;
4666
                               CONS ;
4667
                               DUP 3 ;
4668
                               CAR ;
4669
                               CAR ;
4670
                               GET 3 ;
4671
                               CAR ;
4672
                               CONTRACT %getBalance (pair (address %owner)
4673
                                                          (contract %callback nat)) ;
4674
                               IF_NONE
4675
                                 { PUSH string "cant call getBalance for tzBTC" ;
4676
                                   FAILWITH }
4677
                                 {} ;
4678
                               PUSH mutez 0 ;
4679
                               SELF %updateTzbtcPoolCallback ;
4680
                               DUP 6 ;
4681
                               GET 3 ;
4682
                               CAR ;
4683
                               GET 3 ;
4684
                               PAIR ;
4685
                               TRANSFER_TOKENS ;
4686
                               CONS ;
4687
                               SELF %calculateLbPrice ;
4688
                               PUSH mutez 0 ;
4689
                               UNIT ;
4690
                               TRANSFER_TOKENS ;
4691
                               CONS }
4692
                             { DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; NIL operation } ;
4693
                           PUSH nat 12857 ;
4694
                           DIG 2 ;
4695
                           DUP ;
4696
                           GET 3 ;
4697
                           SWAP ;
4698
                           DUP ;
4699
                           DUG 4 ;
4700
                           CAR ;
4701
                           ADD ;
4702
                           COMPARE ;
4703
                           LE ;
4704
                           IF {} { PUSH string "rate2 max value error" ; FAILWITH } ;
4705
                           PUSH nat 100 ;
4706
                           DUP 3 ;
4707
                           GET 6 ;
4708
                           COMPARE ;
4709
                           LE ;
4710
                           IF {} { PUSH string "wrong threshold percent" ; FAILWITH } ;
4711
                           SWAP ;
4712
                           DUP ;
4713
                           GET 6 ;
4714
                           SWAP ;
4715
                           DUP ;
4716
                           DUG 3 ;
4717
                           GET 5 ;
4718
                           COMPARE ;
4719
                           LE ;
4720
                           IF {} { PUSH string "wrong threshold percent" ; FAILWITH } ;
4721
                           DIG 2 ;
4722
                           UNPAIR ;
4723
                           SWAP ;
4724
                           UNPAIR ;
4725
                           SWAP ;
4726
                           UNPAIR ;
4727
                           UNPAIR ;
4728
                           SWAP ;
4729
                           UNPAIR ;
4730
                           SWAP ;
4731
                           UNPAIR ;
4732
                           CDR ;
4733
                           DUP 9 ;
4734
                           CAR ;
4735
                           DUP 10 ;
4736
                           GET 3 ;
4737
                           SWAP ;
4738
                           PAIR ;
4739
                           PAIR ;
4740
                           DUP 9 ;
4741
                           GET 5 ;
4742
                           UPDATE 3 ;
4743
                           DIG 8 ;
4744
                           GET 6 ;
4745
                           UPDATE 4 ;
4746
                           PAIR ;
4747
                           SWAP ;
4748
                           PAIR ;
4749
                           SWAP ;
4750
                           PAIR ;
4751
                           PAIR ;
4752
                           SWAP ;
4753
                           PAIR ;
4754
                           SWAP ;
4755
                           PAIR ;
4756
                           SWAP }
4757
                         { DIG 2 ;
4758
                           DROP ;
4759
                           DIG 2 ;
4760
                           DROP ;
4761
                           DIG 2 ;
4762
                           DROP ;
4763
                           SENDER ;
4764
                           DUP 3 ;
4765
                           CAR ;
4766
                           CAR ;
4767
                           CAR ;
4768
                           CAR ;
4769
                           CAR ;
4770
                           COMPARE ;
4771
                           EQ ;
4772
                           IF {} { PUSH string "Forbidden." ; FAILWITH } ;
4773
                           DUP ;
4774
                           PUSH nat 2000 ;
4775
                           SWAP ;
4776
                           COMPARE ;
4777
                           LE ;
4778
                           IF
4779
                             {}
4780
                             { PUSH string "upfront commission max value error" ;
4781
                               FAILWITH } ;
4782
                           UPDATE 12 ;
4783
                           NIL operation } }
4784
                     { DIG 3 ;
4785
                       DROP ;
4786
                       DIG 3 ;
4787
                       DROP ;
4788
                       IF_LEFT
4789
                         { DIG 2 ;
4790
                           DROP ;
4791
                           SWAP ;
4792
                           DUP ;
4793
                           DUG 2 ;
4794
                           CAR ;
4795
                           GET 9 ;
4796
                           SWAP ;
4797
                           DUP ;
4798
                           DUG 2 ;
4799
                           CAR ;
4800
                           MEM ;
4801
                           IF
4802
                             {}
4803
                             { SWAP ;
4804
                               UNPAIR ;
4805
                               UNPAIR ;
4806
                               SWAP ;
4807
                               UNPAIR ;
4808
                               SWAP ;
4809
                               UNPAIR ;
4810
                               SWAP ;
4811
                               UNPAIR ;
4812
                               SWAP ;
4813
                               UNPAIR ;
4814
                               PUSH (option (pair (map address nat) nat)) (Some (Pair {} 0)) ;
4815
                               DUP 9 ;
4816
                               CAR ;
4817
                               UPDATE ;
4818
                               PAIR ;
4819
                               SWAP ;
4820
                               PAIR ;
4821
                               SWAP ;
4822
                               PAIR ;
4823
                               SWAP ;
4824
                               PAIR ;
4825
                               SWAP ;
4826
                               PAIR ;
4827
                               PAIR ;
4828
                               SWAP } ;
4829
                           SWAP ;
4830
                           DUP ;
4831
                           DUG 2 ;
4832
                           CAR ;
4833
                           GET 9 ;
4834
                           SWAP ;
4835
                           DUP ;
4836
                           DUG 2 ;
4837
                           GET 3 ;
4838
                           MEM ;
4839
                           IF
4840
                             {}
4841
                             { SWAP ;
4842
                               UNPAIR ;
4843
                               UNPAIR ;
4844
                               SWAP ;
4845
                               UNPAIR ;
4846
                               SWAP ;
4847
                               UNPAIR ;
4848
                               SWAP ;
4849
                               UNPAIR ;
4850
                               SWAP ;
4851
                               UNPAIR ;
4852
                               PUSH (option (pair (map address nat) nat)) (Some (Pair {} 0)) ;
4853
                               DUP 9 ;
4854
                               GET 3 ;
4855
                               UPDATE ;
4856
                               PAIR ;
4857
                               SWAP ;
4858
                               PAIR ;
4859
                               SWAP ;
4860
                               PAIR ;
4861
                               SWAP ;
4862
                               PAIR ;
4863
                               SWAP ;
4864
                               PAIR ;
4865
                               PAIR ;
4866
                               SWAP } ;
4867
                           DUP ;
4868
                           CAR ;
4869
                           SENDER ;
4870
                           COMPARE ;
4871
                           NEQ ;
4872
                           IF
4873
                             { SWAP ;
4874
                               DUP ;
4875
                               DUG 2 ;
4876
                               CAR ;
4877
                               GET 9 ;
4878
                               SWAP ;
4879
                               DUP ;
4880
                               DUG 2 ;
4881
                               CAR ;
4882
                               GET ;
4883
                               IF_NONE { PUSH int 81 ; FAILWITH } {} ;
4884
                               CAR ;
4885
                               SENDER ;
4886
                               MEM ;
4887
                               IF
4888
                                 { DUP ;
4889
                                   GET 4 ;
4890
                                   DUP 3 ;
4891
                                   CAR ;
4892
                                   GET 9 ;
4893
                                   DUP 3 ;
4894
                                   CAR ;
4895
                                   GET ;
4896
                                   IF_NONE { PUSH int 82 ; FAILWITH } {} ;
4897
                                   CAR ;
4898
                                   SENDER ;
4899
                                   GET ;
4900
                                   IF_NONE { PUSH int 82 ; FAILWITH } {} ;
4901
                                   COMPARE ;
4902
                                   GE }
4903
                                 { PUSH bool False } ;
4904
                               IF {} { PUSH string "NotEnoughAllowance" ; FAILWITH } }
4905
                             {} ;
4906
                           DUP ;
4907
                           GET 4 ;
4908
                           DUP 3 ;
4909
                           CAR ;
4910
                           GET 9 ;
4911
                           DUP 3 ;
4912
                           CAR ;
4913
                           GET ;
4914
                           IF_NONE { PUSH int 85 ; FAILWITH } {} ;
4915
                           CDR ;
4916
                           COMPARE ;
4917
                           GE ;
4918
                           IF {} { PUSH string "NotEnoughBalance" ; FAILWITH } ;
4919
                           SWAP ;
4920
                           DUP ;
4921
                           DUG 2 ;
4922
                           UNPAIR ;
4923
                           UNPAIR ;
4924
                           SWAP ;
4925
                           UNPAIR ;
4926
                           SWAP ;
4927
                           UNPAIR ;
4928
                           SWAP ;
4929
                           UNPAIR ;
4930
                           SWAP ;
4931
                           UNPAIR ;
4932
                           DUP ;
4933
                           DUP 9 ;
4934
                           CAR ;
4935
                           DUP ;
4936
                           DUG 2 ;
4937
                           GET ;
4938
                           IF_NONE { PUSH int 86 ; FAILWITH } {} ;
4939
                           DUP 10 ;
4940
                           GET 4 ;
4941
                           DIG 11 ;
4942
                           CAR ;
4943
                           GET 9 ;
4944
                           DUP 12 ;
4945
                           CAR ;
4946
                           GET ;
4947
                           IF_NONE { PUSH int 86 ; FAILWITH } {} ;
4948
                           CDR ;
4949
                           SUB ;
4950
                           ISNAT ;
4951
                           IF_NONE { PUSH int 86 ; FAILWITH } {} ;
4952
                           UPDATE 2 ;
4953
                           SOME ;
4954
                           SWAP ;
4955
                           UPDATE ;
4956
                           DUP ;
4957
                           DUP 9 ;
4958
                           GET 3 ;
4959
                           DUP ;
4960
                           DUG 2 ;
4961
                           GET ;
4962
                           IF_NONE { PUSH int 87 ; FAILWITH } {} ;
4963
                           DUP ;
4964
                           CDR ;
4965
                           DUP 11 ;
4966
                           GET 4 ;
4967
                           ADD ;
4968
                           UPDATE 2 ;
4969
                           SOME ;
4970
                           SWAP ;
4971
                           UPDATE ;
4972
                           PAIR ;
4973
                           SWAP ;
4974
                           PAIR ;
4975
                           SWAP ;
4976
                           PAIR ;
4977
                           SWAP ;
4978
                           PAIR ;
4979
                           SWAP ;
4980
                           PAIR ;
4981
                           PAIR ;
4982
                           SWAP ;
4983
                           DUP ;
4984
                           CAR ;
4985
                           SENDER ;
4986
                           COMPARE ;
4987
                           NEQ ;
4988
                           IF
4989
                             { SWAP ;
4990
                               DUP ;
4991
                               DUG 2 ;
4992
                               UNPAIR ;
4993
                               UNPAIR ;
4994
                               SWAP ;
4995
                               UNPAIR ;
4996
                               SWAP ;
4997
                               UNPAIR ;
4998
                               SWAP ;
4999
                               UNPAIR ;
5000
                               SWAP ;
5001
                               UNPAIR ;
5002
                               DUP ;
5003
                               DUP 9 ;
5004
                               CAR ;
5005
                               DUP ;
5006
                               DUG 2 ;
5007
                               GET ;
5008
                               IF_NONE { PUSH int 89 ; FAILWITH } {} ;
5009
                               DUP ;
5010
                               CAR ;
5011
                               DUP 11 ;
5012
                               GET 4 ;
5013
                               DIG 12 ;
5014
                               CAR ;
5015
                               GET 9 ;
5016
                               DIG 12 ;
5017
                               CAR ;
5018
                               GET ;
5019
                               IF_NONE { PUSH int 89 ; FAILWITH } {} ;
5020
                               CAR ;
5021
                               SENDER ;
5022
                               GET ;
5023
                               IF_NONE { PUSH int 89 ; FAILWITH } {} ;
5024
                               SUB ;
5025
                               ISNAT ;
5026
                               IF_NONE { PUSH int 89 ; FAILWITH } {} ;
5027
                               SOME ;
5028
                               SENDER ;
5029
                               UPDATE ;
5030
                               UPDATE 1 ;
5031
                               SOME ;
5032
                               SWAP ;
5033
                               UPDATE ;
5034
                               PAIR ;
5035
                               SWAP ;
5036
                               PAIR ;
5037
                               SWAP ;
5038
                               PAIR ;
5039
                               SWAP ;
5040
                               PAIR ;
5041
                               SWAP ;
5042
                               PAIR ;
5043
                               PAIR }
5044
                             { DROP } ;
5045
                           NIL operation }
5046
                         { IF_LEFT
5047
                             { DROP ;
5048
                               DUP ;
5049
                               CAR ;
5050
                               GET 3 ;
5051
                               GET 3 ;
5052
                               NOW ;
5053
                               COMPARE ;
5054
                               NEQ ;
5055
                               IF
5056
                                 { NIL operation ;
5057
                                   DIG 2 ;
5058
                                   UNIT ;
5059
                                   SWAP ;
5060
                                   DUG 3 ;
5061
                                   PAIR 3 ;
5062
                                   EXEC ;
5063
                                   CDR ;
5064
                                   UNPAIR ;
5065
                                   SWAP ;
5066
                                   DUP ;
5067
                                   DUG 2 ;
5068
                                   CAR ;
5069
                                   CAR ;
5070
                                   CAR ;
5071
                                   GET 4 ;
5072
                                   CONTRACT %getTotalSupply (pair (unit %request)
5073
                                                                  (contract %callback nat)) ;
5074
                                   IF_NONE
5075
                                     { PUSH string "cant call getTotalSupply of lb token" ;
5076
                                       FAILWITH }
5077
                                     {} ;
5078
                                   PUSH mutez 0 ;
5079
                                   SELF %updateLqtTotalCallback ;
5080
                                   UNIT ;
5081
                                   PAIR ;
5082
                                   TRANSFER_TOKENS ;
5083
                                   CONS ;
5084
                                   SWAP ;
5085
                                   DUP ;
5086
                                   DUG 2 ;
5087
                                   CAR ;
5088
                                   CAR ;
5089
                                   GET 3 ;
5090
                                   CAR ;
5091
                                   CONTRACT %getBalance (pair (address %owner)
5092
                                                              (contract %callback nat)) ;
5093
                                   IF_NONE
5094
                                     { PUSH string "cant call getBalance for tzBTC" ;
5095
                                       FAILWITH }
5096
                                     {} ;
5097
                                   PUSH mutez 0 ;
5098
                                   SELF %updateTzbtcPoolCallback ;
5099
                                   DUP 5 ;
5100
                                   GET 3 ;
5101
                                   CAR ;
5102
                                   GET 3 ;
5103
                                   PAIR ;
5104
                                   TRANSFER_TOKENS ;
5105
                                   CONS ;
5106
                                   SELF %calculateLbPrice ;
5107
                                   PUSH mutez 0 ;
5108
                                   UNIT ;
5109
                                   TRANSFER_TOKENS ;
5110
                                   CONS }
5111
                                 { SWAP ; DROP ; NIL operation } }
5112
                             { DIG 2 ;
5113
                               DROP ;
5114
                               SENDER ;
5115
                               DUP 3 ;
5116
                               CAR ;
5117
                               CAR ;
5118
                               CAR ;
5119
                               GET 4 ;
5120
                               COMPARE ;
5121
                               EQ ;
5122
                               IF {} { PUSH string "Forbidden." ; FAILWITH } ;
5123
                               SWAP ;
5124
                               DUP ;
5125
                               DUG 2 ;
5126
                               GET 3 ;
5127
                               GET 3 ;
5128
                               CAR ;
5129
                               CAR ;
5130
                               CAR ;
5131
                               IF {} { PUSH string "Bad status." ; FAILWITH } ;
5132
                               SWAP ;
5133
                               UNPAIR ;
5134
                               SWAP ;
5135
                               UNPAIR ;
5136
                               UNPAIR ;
5137
                               SWAP ;
5138
                               UNPAIR ;
5139
                               UNPAIR ;
5140
                               UNPAIR ;
5141
                               CDR ;
5142
                               PUSH bool False ;
5143
                               PAIR ;
5144
                               PAIR ;
5145
                               PAIR ;
5146
                               PAIR ;
5147
                               SWAP ;
5148
                               PAIR ;
5149
                               PAIR ;
5150
                               SWAP ;
5151
                               UNPAIR ;
5152
                               SWAP ;
5153
                               UNPAIR ;
5154
                               SWAP ;
5155
                               UNPAIR ;
5156
                               SWAP ;
5157
                               CDR ;
5158
                               DIG 5 ;
5159
                               PAIR ;
5160
                               SWAP ;
5161
                               PAIR ;
5162
                               SWAP ;
5163
                               PAIR ;
5164
                               SWAP ;
5165
                               PAIR ;
5166
                               PAIR ;
5167
                               NIL operation } } } }
5168
                 { IF_LEFT
5169
                     { DIG 2 ;
5170
                       DROP ;
5171
                       DIG 2 ;
5172
                       DROP ;
5173
                       DIG 2 ;
5174
                       DROP ;
5175
                       IF_LEFT
5176
                         { SENDER ;
5177
                           DUP 3 ;
5178
                           CAR ;
5179
                           CAR ;
5180
                           CAR ;
5181
                           GET 4 ;
5182
                           COMPARE ;
5183
                           EQ ;
5184
                           IF {} { PUSH string "Forbidden." ; FAILWITH } ;
5185
                           SWAP ;
5186
                           UNPAIR ;
5187
                           SWAP ;
5188
                           UNPAIR ;
5189
                           UNPAIR ;
5190
                           SWAP ;
5191
                           UNPAIR ;
5192
                           UNPAIR ;
5193
                           DIG 6 ;
5194
                           UPDATE 3 ;
5195
                           PAIR ;
5196
                           PAIR ;
5197
                           SWAP ;
5198
                           PAIR ;
5199
                           PAIR ;
5200
                           SWAP ;
5201
                           PAIR }
5202
                         { SENDER ;
5203
                           DUP 3 ;
5204
                           CAR ;
5205
                           CAR ;
5206
                           GET 3 ;
5207
                           CAR ;
5208
                           COMPARE ;
5209
                           EQ ;
5210
                           IF {} { PUSH string "Forbidden." ; FAILWITH } ;
5211
                           SWAP ;
5212
                           DUP ;
5213
                           DUG 2 ;
5214
                           GET 3 ;
5215
                           GET 3 ;
5216
                           CAR ;
5217
                           CAR ;
5218
                           CDR ;
5219
                           IF {} { PUSH string "Bad status." ; FAILWITH } ;
5220
                           SWAP ;
5221
                           UNPAIR ;
5222
                           SWAP ;
5223
                           UNPAIR ;
5224
                           UNPAIR ;
5225
                           SWAP ;
5226
                           UNPAIR ;
5227
                           UNPAIR ;
5228
                           UNPAIR ;
5229
                           CAR ;
5230
                           PUSH bool False ;
5231
                           SWAP ;
5232
                           PAIR ;
5233
                           PAIR ;
5234
                           PAIR ;
5235
                           PAIR ;
5236
                           SWAP ;
5237
                           PAIR ;
5238
                           PAIR ;
5239
                           SWAP ;
5240
                           PAIR ;
5241
                           SWAP ;
5242
                           UPDATE 11 } ;
5243
                       NIL operation }
5244
                     { IF_LEFT
5245
                         { DIG 2 ;
5246
                           DROP ;
5247
                           DIG 2 ;
5248
                           DROP ;
5249
                           DIG 2 ;
5250
                           DROP ;
5251
                           SENDER ;
5252
                           DUP 3 ;
5253
                           CAR ;
5254
                           CAR ;
5255
                           GET 3 ;
5256
                           CAR ;
5257
                           COMPARE ;
5258
                           EQ ;
5259
                           IF {} { PUSH string "Forbidden." ; FAILWITH } ;
5260
                           SWAP ;
5261
                           UNPAIR ;
5262
                           SWAP ;
5263
                           UNPAIR ;
5264
                           UNPAIR ;
5265
                           SWAP ;
5266
                           UNPAIR ;
5267
                           UNPAIR ;
5268
                           DIG 6 ;
5269
                           UPDATE 4 ;
5270
                           PAIR ;
5271
                           PAIR ;
5272
                           SWAP ;
5273
                           PAIR ;
5274
                           PAIR ;
5275
                           SWAP ;
5276
                           PAIR ;
5277
                           NIL operation }
5278
                         { IF_LEFT
5279
                             { DIG 2 ;
5280
                               DROP ;
5281
                               DIG 2 ;
5282
                               DROP ;
5283
                               DIG 2 ;
5284
                               DROP ;
5285
                               SWAP ;
5286
                               DUP ;
5287
                               DUG 2 ;
5288
                               CAR ;
5289
                               CAR ;
5290
                               CAR ;
5291
                               CAR ;
5292
                               CAR ;
5293
                               SENDER ;
5294
                               COMPARE ;
5295
                               EQ ;
5296
                               IF {} { PUSH string "NotAdmin" ; FAILWITH } ;
5297
                               SWAP ;
5298
                               UNPAIR ;
5299
                               SWAP ;
5300
                               UNPAIR ;
5301
                               UNPAIR ;
5302
                               SWAP ;
5303
                               UNPAIR ;
5304
                               SWAP ;
5305
                               UNPAIR ;
5306
                               DUP 7 ;
5307
                               CDR ;
5308
                               SOME ;
5309
                               DIG 7 ;
5310
                               CAR ;
5311
                               UPDATE ;
5312
                               PAIR ;
5313
                               SWAP ;
5314
                               PAIR ;
5315
                               SWAP ;
5316
                               PAIR ;
5317
                               PAIR ;
5318
                               SWAP ;
5319
                               PAIR ;
5320
                               NIL operation }
5321
                             { NOW ;
5322
                               DUP 3 ;
5323
                               CAR ;
5324
                               GET 3 ;
5325
                               GET 3 ;
5326
                               COMPARE ;
5327
                               NEQ ;
5328
                               IF
5329
                                 { NIL operation ;
5330
                                   DUP 4 ;
5331
                                   UNIT ;
5332
                                   SWAP ;
5333
                                   DIG 4 ;
5334
                                   DIG 3 ;
5335
                                   DIG 3 ;
5336
                                   PAIR 3 ;
5337
                                   EXEC ;
5338
                                   CDR ;
5339
                                   UNPAIR ;
5340
                                   DIG 5 ;
5341
                                   DIG 5 ;
5342
                                   DIG 5 ;
5343
                                   DIG 4 ;
5344
                                   DIG 5 ;
5345
                                   DIG 5 ;
5346
                                   DUP 3 ;
5347
                                   CAR ;
5348
                                   CAR ;
5349
                                   CAR ;
5350
                                   GET 4 ;
5351
                                   CONTRACT %getTotalSupply (pair (unit %request)
5352
                                                                  (contract %callback nat)) ;
5353
                                   IF_NONE
5354
                                     { PUSH string "cant call getTotalSupply of lb token" ;
5355
                                       FAILWITH }
5356
                                     {} ;
5357
                                   PUSH mutez 0 ;
5358
                                   SELF %updateLqtTotalCallback ;
5359
                                   UNIT ;
5360
                                   PAIR ;
5361
                                   TRANSFER_TOKENS ;
5362
                                   CONS ;
5363
                                   DUP 3 ;
5364
                                   CAR ;
5365
                                   CAR ;
5366
                                   GET 3 ;
5367
                                   CAR ;
5368
                                   CONTRACT %getBalance (pair (address %owner)
5369
                                                              (contract %callback nat)) ;
5370
                                   IF_NONE
5371
                                     { PUSH string "cant call getBalance for tzBTC" ;
5372
                                       FAILWITH }
5373
                                     {} ;
5374
                                   PUSH mutez 0 ;
5375
                                   SELF %updateTzbtcPoolCallback ;
5376
                                   DUP 6 ;
5377
                                   GET 3 ;
5378
                                   CAR ;
5379
                                   GET 3 ;
5380
                                   PAIR ;
5381
                                   TRANSFER_TOKENS ;
5382
                                   CONS ;
5383
                                   SELF %calculateLbPrice ;
5384
                                   PUSH mutez 0 ;
5385
                                   UNIT ;
5386
                                   TRANSFER_TOKENS ;
5387
                                   CONS }
5388
                                 { NIL operation } ;
5389
                               SENDER ;
5390
                               DUP 4 ;
5391
                               CAR ;
5392
                               CAR ;
5393
                               CAR ;
5394
                               CAR ;
5395
                               CAR ;
5396
                               COMPARE ;
5397
                               EQ ;
5398
                               IF {} { PUSH string "Forbidden." ; FAILWITH } ;
5399
                               DIG 2 ;
5400
                               DUP ;
5401
                               CAR ;
5402
                               CAR ;
5403
                               CAR ;
5404
                               CAR ;
5405
                               CDR ;
5406
                               SWAP ;
5407
                               DUP ;
5408
                               DUG 4 ;
5409
                               GET 7 ;
5410
                               CAR ;
5411
                               MUL ;
5412
                               DIG 3 ;
5413
                               DUP ;
5414
                               CAR ;
5415
                               GET 3 ;
5416
                               CAR ;
5417
                               CAR ;
5418
                               SWAP ;
5419
                               DUP ;
5420
                               DUG 5 ;
5421
                               GET 7 ;
5422
                               CDR ;
5423
                               MUL ;
5424
                               PUSH nat 1000000000000 ;
5425
                               DUP ;
5426
                               DUP 7 ;
5427
                               GET 11 ;
5428
                               MUL ;
5429
                               MUL ;
5430
                               ADD ;
5431
                               SUB ;
5432
                               DUP ;
5433
                               PUSH int 0 ;
5434
                               COMPARE ;
5435
                               LT ;
5436
                               IF
5437
                                 { PUSH nat 1000000000000 ;
5438
                                   DUP ;
5439
                                   DUP 3 ;
5440
                                   ISNAT ;
5441
                                   IF_NONE { PUSH int 428 ; FAILWITH } {} ;
5442
                                   EDIV ;
5443
                                   IF_NONE { PUSH int 428 ; FAILWITH } { CAR } ;
5444
                                   EDIV ;
5445
                                   IF_NONE { PUSH int 35 ; FAILWITH } { CAR } ;
5446
                                   DUP 5 ;
5447
                                   GET 11 ;
5448
                                   SWAP ;
5449
                                   DUP ;
5450
                                   DUG 2 ;
5451
                                   COMPARE ;
5452
                                   GT ;
5453
                                   IF { DROP ; DUP 4 ; GET 11 } {} ;
5454
                                   DUP ;
5455
                                   PUSH nat 0 ;
5456
                                   COMPARE ;
5457
                                   LT ;
5458
                                   IF
5459
                                     { SWAP ;
5460
                                       DROP ;
5461
                                       DIG 2 ;
5462
                                       DROP ;
5463
                                       DIG 3 ;
5464
                                       DROP ;
5465
                                       DIG 3 ;
5466
                                       DROP ;
5467
                                       DIG 3 ;
5468
                                       DROP ;
5469
                                       SWAP ;
5470
                                       DUP 3 ;
5471
                                       CAR ;
5472
                                       CAR ;
5473
                                       GET 3 ;
5474
                                       CAR ;
5475
                                       CONTRACT %transfer (pair (address %from)
5476
                                                                (pair (address %to)
5477
                                                                      (nat %value))) ;
5478
                                       IF_NONE
5479
                                         { PUSH string "cant call transfer for tzBTC shares" ;
5480
                                           FAILWITH }
5481
                                         {} ;
5482
                                       PUSH mutez 0 ;
5483
                                       DUP 4 ;
5484
                                       DUP 6 ;
5485
                                       CAR ;
5486
                                       CAR ;
5487
                                       CAR ;
5488
                                       CAR ;
5489
                                       CAR ;
5490
                                       SELF_ADDRESS ;
5491
                                       PAIR 3 ;
5492
                                       TRANSFER_TOKENS ;
5493
                                       CONS ;
5494
                                       SWAP ;
5495
                                       DUP 3 ;
5496
                                       SWAP ;
5497
                                       DIG 3 ;
5498
                                       GET 11 ;
5499
                                       SUB ;
5500
                                       ISNAT ;
5501
                                       IF_NONE { PUSH int 434 ; FAILWITH } {} ;
5502
                                       UPDATE 11 ;
5503
                                       SWAP }
5504
                                     { DROP 2 ; SWAP ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP } }
5505
                                 { DROP ; SWAP ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP } } } } } } } ;
5506
       NIL operation ;
5507
       SWAP ;
5508
       ITER { CONS } ;
5509
       PAIR }