BCD

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