BCD

Tezos Contract Explorer
Search Networks Deploy
  • Home
  • /
  • Mainnet
  • /
  • KT1CJCV...RdHj
operations (2)Storage Code Interact Tokens Fork Statistics Details
Latest
​x
776
1699
 
1
parameter (or
2
            (or (or (unit %claim_all) (nat %increase_reward))
3
                (or (unit %initialize) (address %set_admin)))
4
            (or (nat %stake) (nat %unstake)));
5
storage (pair
6
          (pair
7
            (pair (pair (address %admin) (timestamp %creation_time))
8
                  (pair (list %farm_points nat) (bool %initialized)))
9
            (pair
10
              (pair (option %input_fa2_token_id_opt nat) (address %input_token_address))
11
              (pair (nat %rate) (list %reward_at_week nat))))
12
          (pair
13
            (pair
14
              (pair (option %reward_fa2_token_id_opt nat)
15
                    (address %reward_reserve_address))
16
              (pair (address %reward_token_address) (nat %total_reward)))
17
            (pair (pair (nat %total_weeks) (big_map %user_points address (list nat)))
18
                  (pair (big_map %user_stakes address nat) (nat %week_duration)))));
19
code { { { DUP ; CAR ; DIP { CDR } } } ;
20
       IF_LEFT
21
         { IF_LEFT
22
             { IF_LEFT
23
                 { DROP ;
24
                   PUSH string "The contract is not initialized" ;
25
                   PUSH bool True ;
26
                   { DIP 2 { DUP } ; DIG 3 } ;
27
                   CAR ;
28
                   CAR ;
29
                   CDR ;
30
                   CDR ;
31
                   COMPARE ;
32
                   EQ ;
33
                   IF { DROP } { FAILWITH } ;
34
                   SENDER ;
35
                   SWAP ;
36
                   DUP ;
37
                   DUG 2 ;
38
                   CAR ;
39
                   CAR ;
40
                   CAR ;
41
                   CDR ;
42
                   NOW ;
43
                   SUB ;
44
                   ABS ;
45
                   PUSH nat 1 ;
46
                   { DIP 3 { DUP } ; DIG 4 } ;
47
                   CDR ;
48
                   CDR ;
49
                   CDR ;
50
                   CDR ;
51
                   DIG 2 ;
52
                   EDIV ;
53
                   IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
54
                   CAR ;
55
                   ADD ;
56
                   PUSH string "You cannot claim any reward before the first farm week as passed" ;
57
                   PUSH nat 1 ;
58
                   { DIP 2 { DUP } ; DIG 3 } ;
59
                   COMPARE ;
60
                   GT ;
61
                   IF { DROP } { FAILWITH } ;
62
                   PUSH string "You must not send Tezos to the smart contract" ;
63
                   PUSH mutez 0 ;
64
                   AMOUNT ;
65
                   COMPARE ;
66
                   EQ ;
67
                   IF { DROP } { FAILWITH } ;
68
                   PUSH nat 1 ;
69
                   SWAP ;
70
                   SUB ;
71
                   ABS ;
72
                   { DIP 2 { DUP } ; DIG 3 } ;
73
                   CDR ;
74
                   CDR ;
75
                   CAR ;
76
                   CDR ;
77
                   { DIP 2 { DUP } ; DIG 3 } ;
78
                   GET ;
79
                   IF_NONE
80
                     { DROP 2 ; NIL operation ; PAIR }
81
                     { { DIP 3 { DUP } ; DIG 4 } ;
82
                       CAR ;
83
                       CDR ;
84
                       CDR ;
85
                       CDR ;
86
                       { DIP 4 { DUP } ; DIG 5 } ;
87
                       CAR ;
88
                       CAR ;
89
                       CDR ;
90
                       CAR ;
91
                       { DIP 2 { DUP } ; DIG 3 } ;
92
                       PAIR ;
93
                       { DIP 3 { DUP } ; DIG 4 } ;
94
                       PUSH nat 0 ;
95
                       PAIR ;
96
                       PAIR ;
97
                       PAIR ;
98
                       LEFT nat ;
99
                       LOOP_LEFT { { { DUP ; CAR ; DIP { CDR } } } ;
100
                                   { { DUP ; CAR ; DIP { CDR } } } ;
101
                                   { { DUP ; CAR ; DIP { CDR } } } ;
102
                                   DIG 2 ;
103
                                   { { DUP ; CAR ; DIP { CDR } } } ;
104
                                   DIG 4 ;
105
                                   DUG 2 ;
106
                                   IF_CONS
107
                                     { DIG 2 ;
108
                                       IF_CONS
109
                                         { DIG 4 ;
110
                                           IF_CONS
111
                                             { PUSH nat 0 ;
112
                                               { DIP 8 { DUP } ; DIG 9 } ;
113
                                               COMPARE ;
114
                                               GT ;
115
                                               IF
116
                                                 { PUSH nat 0 ;
117
                                                   { DIP 3 { DUP } ; DIG 4 } ;
118
                                                   COMPARE ;
119
                                                   EQ ;
120
                                                   IF
121
                                                     { DIG 2 ;
122
                                                       DIG 4 ;
123
                                                       DROP 3 ;
124
                                                       SWAP ;
125
                                                       DIG 2 ;
126
                                                       PAIR ;
127
                                                       PUSH nat 1 ;
128
                                                       DIG 4 ;
129
                                                       SUB ;
130
                                                       ABS ;
131
                                                       DIG 3 ;
132
                                                       PAIR ;
133
                                                       PAIR ;
134
                                                       PAIR ;
135
                                                       LEFT nat }
136
                                                     { DIG 2 ;
137
                                                       SWAP ;
138
                                                       DIG 4 ;
139
                                                       MUL ;
140
                                                       EDIV ;
141
                                                       IF_NONE
142
                                                         { PUSH string "DIV by 0" ;
143
                                                           FAILWITH }
144
                                                         {} ;
145
                                                       CAR ;
146
                                                       DIG 4 ;
147
                                                       ADD ;
148
                                                       SWAP ;
149
                                                       DIG 2 ;
150
                                                       DIG 3 ;
151
                                                       PAIR ;
152
                                                       PUSH nat 1 ;
153
                                                       DIG 4 ;
154
                                                       SUB ;
155
                                                       ABS ;
156
                                                       DIG 3 ;
157
                                                       PAIR ;
158
                                                       PAIR ;
159
                                                       PAIR ;
160
                                                       LEFT nat } }
161
                                                 { SWAP ;
162
                                                   DIG 2 ;
163
                                                   DIG 3 ;
164
                                                   DIG 4 ;
165
                                                   DIG 5 ;
166
                                                   DIG 7 ;
167
                                                   DROP 7 ;
168
                                                   RIGHT (pair
169
                                                           (pair (pair nat nat)
170
                                                                 (pair (list nat)
171
                                                                       (list nat)))
172
                                                           (list nat)) } }
173
                                             { DROP 6 ;
174
                                               PUSH string "size don't match" ;
175
                                               FAILWITH } }
176
                                         { DROP 5 ;
177
                                           PUSH string "size don't match" ;
178
                                           FAILWITH } }
179
                                     { DIG 3 ;
180
                                       DROP ;
181
                                       IF_CONS
182
                                         { DROP 4 ;
183
                                           PUSH string "size don't match" ;
184
                                           FAILWITH }
185
                                         { IF_CONS
186
                                             { DROP 3 ;
187
                                               PUSH string "size don't match" ;
188
                                               FAILWITH }
189
                                             { RIGHT (pair
190
                                                       (pair (pair nat nat)
191
                                                             (pair (list nat) (list nat)))
192
                                                       (list nat)) } } } } ;
193
                       { DIP 4 { DUP } ; DIG 5 } ;
194
                       CDR ;
195
                       CAR ;
196
                       CDR ;
197
                       CAR ;
198
                       { DIP 5 { DUP } ; DIG 6 } ;
199
                       CDR ;
200
                       CAR ;
201
                       CAR ;
202
                       CDR ;
203
                       { DIP 6 { DUP } ; DIG 7 } ;
204
                       CDR ;
205
                       CAR ;
206
                       CAR ;
207
                       CAR ;
208
                       IF_NONE
209
                         { SWAP ;
210
                           CONTRACT %transfer (pair address (pair address nat)) ;
211
                           IF_NONE
212
                             { PUSH string "Cannot connect to the reward token entrypoint" ;
213
                               FAILWITH }
214
                             {} ;
215
                           PUSH mutez 0 ;
216
                           { DIP 3 { DUP } ; DIG 4 } ;
217
                           { DIP 7 { DUP } ; DIG 8 } ;
218
                           PAIR ;
219
                           DIG 3 ;
220
                           PAIR ;
221
                           TRANSFER_TOKENS }
222
                         { DIG 2 ;
223
                           CONTRACT %transfer (list (pair address
224
                                                         (list (pair address
225
                                                                    (pair nat nat))))) ;
226
                           IF_NONE
227
                             { PUSH string "Cannot connect to the reward FA2 token entrypoint" ;
228
                               FAILWITH }
229
                             {} ;
230
                           PUSH mutez 0 ;
231
                           NIL (pair address (list (pair address (pair nat nat)))) ;
232
                           NIL (pair address (pair nat nat)) ;
233
                           { DIP 6 { DUP } ; DIG 7 } ;
234
                           DIG 5 ;
235
                           PAIR ;
236
                           { DIP 9 { DUP } ; DIG 10 } ;
237
                           PAIR ;
238
                           CONS ;
239
                           DIG 4 ;
240
                           PAIR ;
241
                           CONS ;
242
                           TRANSFER_TOKENS } ;
243
                       PUSH nat 0 ;
244
                       DIG 2 ;
245
                       COMPARE ;
246
                       EQ ;
247
                       IF
248
                         { DROP 4 ; NIL operation ; PAIR }
249
                         { NIL nat ;
250
                           DIG 2 ;
251
                           DIG 3 ;
252
                           NIL nat ;
253
                           PAIR ;
254
                           PAIR ;
255
                           LEFT (list nat) ;
256
                           LOOP_LEFT { { { DUP ; CAR ; DIP { CDR } } } ;
257
                                       { { DUP ; CAR ; DIP { CDR } } } ;
258
                                       DIG 2 ;
259
                                       IF_CONS
260
                                         { PUSH nat 0 ;
261
                                           { DIP 4 { DUP } ; DIG 5 } ;
262
                                           COMPARE ;
263
                                           GT ;
264
                                           IF
265
                                             { DROP ;
266
                                               PUSH nat 1 ;
267
                                               DIG 3 ;
268
                                               SUB ;
269
                                               ABS ;
270
                                               DIG 2 ;
271
                                               PUSH nat 0 ;
272
                                               CONS ;
273
                                               PAIR ;
274
                                               PAIR ;
275
                                               LEFT (list nat) }
276
                                             { SWAP ; DUG 3 ; CONS ; PAIR ; PAIR ; LEFT (list nat) } }
277
                                         { SWAP ;
278
                                           DROP ;
279
                                           RIGHT (pair (pair (list nat) nat) (list nat)) } } ;
280
                           PAIR ;
281
                           LEFT (list nat) ;
282
                           LOOP_LEFT { { { DUP ; CAR ; DIP { CDR } } } ;
283
                                       IF_CONS
284
                                         { DIG 2 ; SWAP ; CONS ; SWAP ; PAIR ; LEFT (list nat) }
285
                                         { RIGHT (pair (list nat) (list nat)) } } ;
286
                           { DIP 3 { DUP } ; DIG 4 } ;
287
                           CDR ;
288
                           CDR ;
289
                           CDR ;
290
                           { DIP 4 { DUP } ; DIG 5 } ;
291
                           CDR ;
292
                           CDR ;
293
                           CAR ;
294
                           CDR ;
295
                           DIG 2 ;
296
                           SOME ;
297
                           DIG 4 ;
298
                           UPDATE ;
299
                           { DIP 3 { DUP } ; DIG 4 } ;
300
                           CDR ;
301
                           CDR ;
302
                           CAR ;
303
                           CAR ;
304
                           PAIR ;
305
                           PAIR ;
306
                           { DIP 2 { DUP } ; DIG 3 } ;
307
                           CDR ;
308
                           CAR ;
309
                           PAIR ;
310
                           DIG 2 ;
311
                           CAR ;
312
                           PAIR ;
313
                           NIL operation ;
314
                           DIG 2 ;
315
                           CONS ;
316
                           PAIR } } }
317
                 { SWAP ;
318
                   DUP ;
319
                   DUG 2 ;
320
                   CDR ;
321
                   CDR ;
322
                   CAR ;
323
                   CAR ;
324
                   NOW ;
325
                   { DIP 3 { DUP } ; DIG 4 } ;
326
                   CAR ;
327
                   CAR ;
328
                   CAR ;
329
                   CDR ;
330
                   { DIP 4 { DUP } ; DIG 5 } ;
331
                   CAR ;
332
                   CAR ;
333
                   CAR ;
334
                   CDR ;
335
                   NOW ;
336
                   SUB ;
337
                   ABS ;
338
                   PUSH nat 1 ;
339
                   { DIP 6 { DUP } ; DIG 7 } ;
340
                   CDR ;
341
                   CDR ;
342
                   CDR ;
343
                   CDR ;
344
                   DIG 2 ;
345
                   EDIV ;
346
                   IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
347
                   CAR ;
348
                   ADD ;
349
                   PUSH string "The contract is not initialized" ;
350
                   PUSH bool True ;
351
                   { DIP 7 { DUP } ; DIG 8 } ;
352
                   CAR ;
353
                   CAR ;
354
                   CDR ;
355
                   CDR ;
356
                   COMPARE ;
357
                   EQ ;
358
                   IF { DROP } { FAILWITH } ;
359
                   PUSH string "Only the contract admin can change the contract administrator or increase reward" ;
360
                   { DIP 6 { DUP } ; DIG 7 } ;
361
                   CAR ;
362
                   CAR ;
363
                   CAR ;
364
                   CAR ;
365
                   SENDER ;
366
                   COMPARE ;
367
                   EQ ;
368
                   IF { DROP } { FAILWITH } ;
369
                   PUSH string "You must not send Tezos to the smart contract" ;
370
                   PUSH mutez 0 ;
371
                   AMOUNT ;
372
                   COMPARE ;
373
                   EQ ;
374
                   IF { DROP } { FAILWITH } ;
375
                   PUSH string "There are no more weeks left for staking in the farm" ;
376
                   { DIP 6 { DUP } ; DIG 7 } ;
377
                   CDR ;
378
                   CDR ;
379
                   CDR ;
380
                   CDR ;
381
                   { DIP 5 { DUP } ; DIG 6 } ;
382
                   MUL ;
383
                   INT ;
384
                   { DIP 3 { DUP } ; DIG 4 } ;
385
                   ADD ;
386
                   { DIP 4 { DUP } ; DIG 5 } ;
387
                   COMPARE ;
388
                   LT ;
389
                   IF { DROP } { FAILWITH } ;
390
                   PUSH string "The increase amount must be greater than zero" ;
391
                   PUSH nat 0 ;
392
                   { DIP 6 { DUP } ; DIG 7 } ;
393
                   COMPARE ;
394
                   GT ;
395
                   IF { DROP } { FAILWITH } ;
396
                   PUSH nat 1 ;
397
                   SWAP ;
398
                   DUP ;
399
                   DUG 2 ;
400
                   DIG 5 ;
401
                   SUB ;
402
                   ABS ;
403
                   ADD ;
404
                   { DIP 5 { DUP } ; DIG 6 } ;
405
                   CAR ;
406
                   CDR ;
407
                   CDR ;
408
                   CAR ;
409
                   NIL nat ;
410
                   { DIP 2 { DUP } ; DIG 3 } ;
411
                   PAIR ;
412
                   LEFT (list nat) ;
413
                   LOOP_LEFT { { { DUP ; CAR ; DIP { CDR } } } ;
414
                               PUSH nat 0 ;
415
                               SWAP ;
416
                               DUP ;
417
                               DUG 2 ;
418
                               COMPARE ;
419
                               EQ ;
420
                               IF
421
                                 { DROP ; RIGHT (pair nat (list nat)) }
422
                                 { SWAP ;
423
                                   PUSH nat 1 ;
424
                                   { DIP 2 { DUP } ; DIG 3 } ;
425
                                   SUB ;
426
                                   ABS ;
427
                                   { DIP 3 { DUP } ; DIG 4 } ;
428
                                   PUSH nat 1 ;
429
                                   PAIR ;
430
                                   PAIR ;
431
                                   LEFT nat ;
432
                                   LOOP_LEFT { { { DUP ; CAR ; DIP { CDR } } } ;
433
                                               { { DUP ; CAR ; DIP { CDR } } } ;
434
                                               PUSH nat 0 ;
435
                                               { DIP 3 { DUP } ; DIG 4 } ;
436
                                               COMPARE ;
437
                                               EQ ;
438
                                               IF
439
                                                 { SWAP ;
440
                                                   DIG 2 ;
441
                                                   DROP 2 ;
442
                                                   RIGHT (pair (pair nat nat) nat) }
443
                                                 { PUSH nat 1 ;
444
                                                   DIG 3 ;
445
                                                   SUB ;
446
                                                   ABS ;
447
                                                   DIG 2 ;
448
                                                   DUP ;
449
                                                   DIG 3 ;
450
                                                   MUL ;
451
                                                   PAIR ;
452
                                                   PAIR ;
453
                                                   LEFT nat } } ;
454
                                   PUSH nat 1 ;
455
                                   { DIP 3 { DUP } ; DIG 4 } ;
456
                                   SUB ;
457
                                   ABS ;
458
                                   PUSH nat 10000 ;
459
                                   PUSH nat 1 ;
460
                                   PAIR ;
461
                                   PAIR ;
462
                                   LEFT nat ;
463
                                   LOOP_LEFT { { { DUP ; CAR ; DIP { CDR } } } ;
464
                                               { { DUP ; CAR ; DIP { CDR } } } ;
465
                                               PUSH nat 0 ;
466
                                               { DIP 3 { DUP } ; DIG 4 } ;
467
                                               COMPARE ;
468
                                               EQ ;
469
                                               IF
470
                                                 { SWAP ;
471
                                                   DIG 2 ;
472
                                                   DROP 2 ;
473
                                                   RIGHT (pair (pair nat nat) nat) }
474
                                                 { PUSH nat 1 ;
475
                                                   DIG 3 ;
476
                                                   SUB ;
477
                                                   ABS ;
478
                                                   DIG 2 ;
479
                                                   DUP ;
480
                                                   DIG 3 ;
481
                                                   MUL ;
482
                                                   PAIR ;
483
                                                   PAIR ;
484
                                                   LEFT nat } } ;
485
                                   { DIP 4 { DUP } ; DIG 5 } ;
486
                                   PUSH nat 10000 ;
487
                                   SUB ;
488
                                   ABS ;
489
                                   PUSH nat 1 ;
490
                                   { DIP 7 { DUP } ; DIG 8 } ;
491
                                   SUB ;
492
                                   ABS ;
493
                                   PUSH nat 10000 ;
494
                                   PUSH nat 1 ;
495
                                   PAIR ;
496
                                   PAIR ;
497
                                   LEFT nat ;
498
                                   LOOP_LEFT { { { DUP ; CAR ; DIP { CDR } } } ;
499
                                               { { DUP ; CAR ; DIP { CDR } } } ;
500
                                               PUSH nat 0 ;
501
                                               { DIP 3 { DUP } ; DIG 4 } ;
502
                                               COMPARE ;
503
                                               EQ ;
504
                                               IF
505
                                                 { SWAP ;
506
                                                   DIG 2 ;
507
                                                   DROP 2 ;
508
                                                   RIGHT (pair (pair nat nat) nat) }
509
                                                 { PUSH nat 1 ;
510
                                                   DIG 3 ;
511
                                                   SUB ;
512
                                                   ABS ;
513
                                                   DIG 2 ;
514
                                                   DUP ;
515
                                                   DIG 3 ;
516
                                                   MUL ;
517
                                                   PAIR ;
518
                                                   PAIR ;
519
                                                   LEFT nat } } ;
520
                                   SWAP ;
521
                                   MUL ;
522
                                   { DIP 6 { DUP } ; DIG 7 } ;
523
                                   { DIP 6 { DUP } ; DIG 7 } ;
524
                                   PUSH nat 1 ;
525
                                   PAIR ;
526
                                   PAIR ;
527
                                   LEFT nat ;
528
                                   LOOP_LEFT { { { DUP ; CAR ; DIP { CDR } } } ;
529
                                               { { DUP ; CAR ; DIP { CDR } } } ;
530
                                               PUSH nat 0 ;
531
                                               { DIP 3 { DUP } ; DIG 4 } ;
532
                                               COMPARE ;
533
                                               EQ ;
534
                                               IF
535
                                                 { SWAP ;
536
                                                   DIG 2 ;
537
                                                   DROP 2 ;
538
                                                   RIGHT (pair (pair nat nat) nat) }
539
                                                 { PUSH nat 1 ;
540
                                                   DIG 3 ;
541
                                                   SUB ;
542
                                                   ABS ;
543
                                                   DIG 2 ;
544
                                                   DUP ;
545
                                                   DIG 3 ;
546
                                                   MUL ;
547
                                                   PAIR ;
548
                                                   PAIR ;
549
                                                   LEFT nat } } ;
550
                                   { DIP 7 { DUP } ; DIG 8 } ;
551
                                   PUSH nat 10000 ;
552
                                   PUSH nat 1 ;
553
                                   PAIR ;
554
                                   PAIR ;
555
                                   LEFT nat ;
556
                                   LOOP_LEFT { { { DUP ; CAR ; DIP { CDR } } } ;
557
                                               { { DUP ; CAR ; DIP { CDR } } } ;
558
                                               PUSH nat 0 ;
559
                                               { DIP 3 { DUP } ; DIG 4 } ;
560
                                               COMPARE ;
561
                                               EQ ;
562
                                               IF
563
                                                 { SWAP ;
564
                                                   DIG 2 ;
565
                                                   DROP 2 ;
566
                                                   RIGHT (pair (pair nat nat) nat) }
567
                                                 { PUSH nat 1 ;
568
                                                   DIG 3 ;
569
                                                   SUB ;
570
                                                   ABS ;
571
                                                   DIG 2 ;
572
                                                   DUP ;
573
                                                   DIG 3 ;
574
                                                   MUL ;
575
                                                   PAIR ;
576
                                                   PAIR ;
577
                                                   LEFT nat } } ;
578
                                   SUB ;
579
                                   ABS ;
580
                                   DIG 2 ;
581
                                   MUL ;
582
                                   DIG 2 ;
583
                                   { DIP 10 { DUP } ; DIG 11 } ;
584
                                   DIG 3 ;
585
                                   MUL ;
586
                                   MUL ;
587
                                   EDIV ;
588
                                   IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
589
                                   CAR ;
590
                                   CONS ;
591
                                   PUSH nat 1 ;
592
                                   DIG 2 ;
593
                                   SUB ;
594
                                   ABS ;
595
                                   PAIR ;
596
                                   LEFT (list nat) } } ;
597
                   SWAP ;
598
                   DIG 2 ;
599
                   DROP 2 ;
600
                   PUSH nat 1 ;
601
                   DIG 2 ;
602
                   SUB ;
603
                   ABS ;
604
                   SWAP ;
605
                   PAIR ;
606
                   LEFT (list nat) ;
607
                   LOOP_LEFT { { { DUP ; CAR ; DIP { CDR } } } ;
608
                               PUSH nat 0 ;
609
                               { DIP 2 { DUP } ; DIG 3 } ;
610
                               COMPARE ;
611
                               EQ ;
612
                               IF
613
                                 { SWAP ; DROP ; RIGHT (pair (list nat) nat) }
614
                                 { PUSH nat 1 ;
615
                                   DIG 2 ;
616
                                   SUB ;
617
                                   ABS ;
618
                                   SWAP ;
619
                                   PUSH nat 0 ;
620
                                   CONS ;
621
                                   PAIR ;
622
                                   LEFT (list nat) } } ;
623
                   NIL nat ;
624
                   NIL nat ;
625
                   DIG 2 ;
626
                   { DIP 6 { DUP } ; DIG 7 } ;
627
                   CAR ;
628
                   CDR ;
629
                   CDR ;
630
                   CDR ;
631
                   PAIR ;
632
                   PAIR ;
633
                   LEFT (list nat) ;
634
                   LOOP_LEFT { { { DUP ; CAR ; DIP { CDR } } } ;
635
                               { { DUP ; CAR ; DIP { CDR } } } ;
636
                               IF_CONS
637
                                 { DIG 2 ;
638
                                   IF_CONS
639
                                     { PUSH bool True ;
640
                                       PUSH bool True ;
641
                                       COMPARE ;
642
                                       EQ ;
643
                                       IF { DIG 2 ; ADD } { DIG 2 ; SUB ; ABS } ;
644
                                       DIG 3 ;
645
                                       SWAP ;
646
                                       CONS ;
647
                                       SWAP ;
648
                                       DIG 2 ;
649
                                       PAIR ;
650
                                       PAIR ;
651
                                       LEFT (list nat) }
652
                                     { DROP 3 ; PUSH string "size don't match" ; FAILWITH } }
653
                                 { IF_CONS
654
                                     { DROP 3 ; PUSH string "size don't match" ; FAILWITH }
655
                                     { RIGHT (pair (pair (list nat) (list nat))
656
                                                   (list nat)) } } } ;
657
                   PAIR ;
658
                   LEFT (list nat) ;
659
                   LOOP_LEFT { { { DUP ; CAR ; DIP { CDR } } } ;
660
                               IF_CONS
661
                                 { DIG 2 ; SWAP ; CONS ; SWAP ; PAIR ; LEFT (list nat) }
662
                                 { RIGHT (pair (list nat) (list nat)) } } ;
663
                   { DIP 4 { DUP } ; DIG 5 } ;
664
                   CDR ;
665
                   CDR ;
666
                   { DIP 4 { DUP } ; DIG 5 } ;
667
                   { DIP 6 { DUP } ; DIG 7 } ;
668
                   CDR ;
669
                   CAR ;
670
                   CDR ;
671
                   CDR ;
672
                   ADD ;
673
                   { DIP 6 { DUP } ; DIG 7 } ;
674
                   CDR ;
675
                   CAR ;
676
                   CDR ;
677
                   CAR ;
678
                   PAIR ;
679
                   { DIP 6 { DUP } ; DIG 7 } ;
680
                   CDR ;
681
                   CAR ;
682
                   CAR ;
683
                   PAIR ;
684
                   PAIR ;
685
                   DIG 5 ;
686
                   CAR ;
687
                   PAIR ;
688
                   DUP ;
689
                   CDR ;
690
                   DUG 2 ;
691
                   DUP ;
692
                   DUG 3 ;
693
                   CAR ;
694
                   CDR ;
695
                   CDR ;
696
                   CAR ;
697
                   PAIR ;
698
                   { DIP 2 { DUP } ; DIG 3 } ;
699
                   CAR ;
700
                   CDR ;
701
                   CAR ;
702
                   PAIR ;
703
                   DIG 2 ;
704
                   CAR ;
705
                   CAR ;
706
                   PAIR ;
707
                   PAIR ;
708
                   DUP ;
709
                   CDR ;
710
                   SWAP ;
711
                   DUP ;
712
                   DUG 2 ;
713
                   CAR ;
714
                   CDR ;
715
                   { DIP 2 { DUP } ; DIG 3 } ;
716
                   CAR ;
717
                   CAR ;
718
                   CDR ;
719
                   PUSH nat 0 ;
720
                   DIG 7 ;
721
                   COMPARE ;
722
                   EQ ;
723
                   IF { DIG 4 ; DROP ; DIG 4 } { DIG 5 ; DROP ; DIG 4 } ;
724
                   DIG 4 ;
725
                   CAR ;
726
                   CAR ;
727
                   CAR ;
728
                   CAR ;
729
                   PAIR ;
730
                   PAIR ;
731
                   PAIR ;
732
                   PAIR ;
733
                   NIL operation ;
734
                   PAIR } }
735
             { IF_LEFT
736
                 { DROP ;
737
                   NOW ;
738
                   SWAP ;
739
                   DUP ;
740
                   DUG 2 ;
741
                   CAR ;
742
                   CAR ;
743
                   CAR ;
744
                   CDR ;
745
                   NOW ;
746
                   SUB ;
747
                   ABS ;
748
                   PUSH nat 1 ;
749
                   { DIP 3 { DUP } ; DIG 4 } ;
750
                   CDR ;
751
                   CDR ;
752
                   CDR ;
753
                   CDR ;
754
                   DIG 2 ;
755
                   EDIV ;
756
                   IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
757
                   CAR ;
758
                   ADD ;
759
                   DROP ;
760
                   PUSH string "Only the contract admin can change the contract administrator or increase reward" ;
761
                   { DIP 2 { DUP } ; DIG 3 } ;
762
                   CAR ;
763
                   CAR ;
764
                   CAR ;
765
                   CAR ;
766
                   SENDER ;
767
                   COMPARE ;
768
                   EQ ;
769
                   IF { DROP } { FAILWITH } ;
770
                   PUSH string "You must not send Tezos to the smart contract" ;
771
                   PUSH mutez 0 ;
772
                   AMOUNT ;
773
                   COMPARE ;
774
                   EQ ;
775
                   IF { DROP } { FAILWITH } ;
776
                   PUSH string "There are no more weeks left for staking in the farm" ;
777
                   { DIP 2 { DUP } ; DIG 3 } ;
778
                   CDR ;
779
                   CDR ;
780
                   CDR ;
781
                   CDR ;
782
                   INT ;
783
                   { DIP 3 { DUP } ; DIG 4 } ;
784
                   CAR ;
785
                   CAR ;
786
                   CAR ;
787
                   CDR ;
788
                   ADD ;
789
                   { DIP 2 { DUP } ; DIG 3 } ;
790
                   COMPARE ;
791
                   LT ;
792
                   IF { DROP } { FAILWITH } ;
793
                   PUSH string "The contract is already initialized" ;
794
                   PUSH nat 0 ;
795
                   { DIP 3 { DUP } ; DIG 4 } ;
796
                   CAR ;
797
                   CDR ;
798
                   CDR ;
799
                   CDR ;
800
                   SIZE ;
801
                   COMPARE ;
802
                   EQ ;
803
                   IF { DROP } { FAILWITH } ;
804
                   PUSH string "The contract is already initialized" ;
805
                   PUSH bool False ;
806
                   { DIP 3 { DUP } ; DIG 4 } ;
807
                   CAR ;
808
                   CAR ;
809
                   CDR ;
810
                   CDR ;
811
                   COMPARE ;
812
                   EQ ;
813
                   IF { DROP } { FAILWITH } ;
814
                   SWAP ;
815
                   DUP ;
816
                   DUG 2 ;
817
                   CDR ;
818
                   CDR ;
819
                   CAR ;
820
                   CAR ;
821
                   { DIP 2 { DUP } ; DIG 3 } ;
822
                   CAR ;
823
                   CDR ;
824
                   CDR ;
825
                   CAR ;
826
                   NIL nat ;
827
                   { DIP 2 { DUP } ; DIG 3 } ;
828
                   PAIR ;
829
                   LEFT (list nat) ;
830
                   LOOP_LEFT { { { DUP ; CAR ; DIP { CDR } } } ;
831
                               PUSH nat 0 ;
832
                               SWAP ;
833
                               DUP ;
834
                               DUG 2 ;
835
                               COMPARE ;
836
                               EQ ;
837
                               IF
838
                                 { DROP ; RIGHT (pair nat (list nat)) }
839
                                 { SWAP ;
840
                                   PUSH nat 1 ;
841
                                   { DIP 2 { DUP } ; DIG 3 } ;
842
                                   SUB ;
843
                                   ABS ;
844
                                   { DIP 3 { DUP } ; DIG 4 } ;
845
                                   PUSH nat 1 ;
846
                                   PAIR ;
847
                                   PAIR ;
848
                                   LEFT nat ;
849
                                   LOOP_LEFT { { { DUP ; CAR ; DIP { CDR } } } ;
850
                                               { { DUP ; CAR ; DIP { CDR } } } ;
851
                                               PUSH nat 0 ;
852
                                               { DIP 3 { DUP } ; DIG 4 } ;
853
                                               COMPARE ;
854
                                               EQ ;
855
                                               IF
856
                                                 { SWAP ;
857
                                                   DIG 2 ;
858
                                                   DROP 2 ;
859
                                                   RIGHT (pair (pair nat nat) nat) }
860
                                                 { PUSH nat 1 ;
861
                                                   DIG 3 ;
862
                                                   SUB ;
863
                                                   ABS ;
864
                                                   DIG 2 ;
865
                                                   DUP ;
866
                                                   DIG 3 ;
867
                                                   MUL ;
868
                                                   PAIR ;
869
                                                   PAIR ;
870
                                                   LEFT nat } } ;
871
                                   PUSH nat 1 ;
872
                                   { DIP 3 { DUP } ; DIG 4 } ;
873
                                   SUB ;
874
                                   ABS ;
875
                                   PUSH nat 10000 ;
876
                                   PUSH nat 1 ;
877
                                   PAIR ;
878
                                   PAIR ;
879
                                   LEFT nat ;
880
                                   LOOP_LEFT { { { DUP ; CAR ; DIP { CDR } } } ;
881
                                               { { DUP ; CAR ; DIP { CDR } } } ;
882
                                               PUSH nat 0 ;
883
                                               { DIP 3 { DUP } ; DIG 4 } ;
884
                                               COMPARE ;
885
                                               EQ ;
886
                                               IF
887
                                                 { SWAP ;
888
                                                   DIG 2 ;
889
                                                   DROP 2 ;
890
                                                   RIGHT (pair (pair nat nat) nat) }
891
                                                 { PUSH nat 1 ;
892
                                                   DIG 3 ;
893
                                                   SUB ;
894
                                                   ABS ;
895
                                                   DIG 2 ;
896
                                                   DUP ;
897
                                                   DIG 3 ;
898
                                                   MUL ;
899
                                                   PAIR ;
900
                                                   PAIR ;
901
                                                   LEFT nat } } ;
902
                                   { DIP 4 { DUP } ; DIG 5 } ;
903
                                   PUSH nat 10000 ;
904
                                   SUB ;
905
                                   ABS ;
906
                                   PUSH nat 1 ;
907
                                   { DIP 7 { DUP } ; DIG 8 } ;
908
                                   SUB ;
909
                                   ABS ;
910
                                   PUSH nat 10000 ;
911
                                   PUSH nat 1 ;
912
                                   PAIR ;
913
                                   PAIR ;
914
                                   LEFT nat ;
915
                                   LOOP_LEFT { { { DUP ; CAR ; DIP { CDR } } } ;
916
                                               { { DUP ; CAR ; DIP { CDR } } } ;
917
                                               PUSH nat 0 ;
918
                                               { DIP 3 { DUP } ; DIG 4 } ;
919
                                               COMPARE ;
920
                                               EQ ;
921
                                               IF
922
                                                 { SWAP ;
923
                                                   DIG 2 ;
924
                                                   DROP 2 ;
925
                                                   RIGHT (pair (pair nat nat) nat) }
926
                                                 { PUSH nat 1 ;
927
                                                   DIG 3 ;
928
                                                   SUB ;
929
                                                   ABS ;
930
                                                   DIG 2 ;
931
                                                   DUP ;
932
                                                   DIG 3 ;
933
                                                   MUL ;
934
                                                   PAIR ;
935
                                                   PAIR ;
936
                                                   LEFT nat } } ;
937
                                   SWAP ;
938
                                   MUL ;
939
                                   { DIP 6 { DUP } ; DIG 7 } ;
940
                                   { DIP 6 { DUP } ; DIG 7 } ;
941
                                   PUSH nat 1 ;
942
                                   PAIR ;
943
                                   PAIR ;
944
                                   LEFT nat ;
945
                                   LOOP_LEFT { { { DUP ; CAR ; DIP { CDR } } } ;
946
                                               { { DUP ; CAR ; DIP { CDR } } } ;
947
                                               PUSH nat 0 ;
948
                                               { DIP 3 { DUP } ; DIG 4 } ;
949
                                               COMPARE ;
950
                                               EQ ;
951
                                               IF
952
                                                 { SWAP ;
953
                                                   DIG 2 ;
954
                                                   DROP 2 ;
955
                                                   RIGHT (pair (pair nat nat) nat) }
956
                                                 { PUSH nat 1 ;
957
                                                   DIG 3 ;
958
                                                   SUB ;
959
                                                   ABS ;
960
                                                   DIG 2 ;
961
                                                   DUP ;
962
                                                   DIG 3 ;
963
                                                   MUL ;
964
                                                   PAIR ;
965
                                                   PAIR ;
966
                                                   LEFT nat } } ;
967
                                   { DIP 7 { DUP } ; DIG 8 } ;
968
                                   PUSH nat 10000 ;
969
                                   PUSH nat 1 ;
970
                                   PAIR ;
971
                                   PAIR ;
972
                                   LEFT nat ;
973
                                   LOOP_LEFT { { { DUP ; CAR ; DIP { CDR } } } ;
974
                                               { { DUP ; CAR ; DIP { CDR } } } ;
975
                                               PUSH nat 0 ;
976
                                               { DIP 3 { DUP } ; DIG 4 } ;
977
                                               COMPARE ;
978
                                               EQ ;
979
                                               IF
980
                                                 { SWAP ;
981
                                                   DIG 2 ;
982
                                                   DROP 2 ;
983
                                                   RIGHT (pair (pair nat nat) nat) }
984
                                                 { PUSH nat 1 ;
985
                                                   DIG 3 ;
986
                                                   SUB ;
987
                                                   ABS ;
988
                                                   DIG 2 ;
989
                                                   DUP ;
990
                                                   DIG 3 ;
991
                                                   MUL ;
992
                                                   PAIR ;
993
                                                   PAIR ;
994
                                                   LEFT nat } } ;
995
                                   SUB ;
996
                                   ABS ;
997
                                   DIG 2 ;
998
                                   MUL ;
999
                                   DIG 2 ;
1000
                                   { DIP 8 { DUP } ; DIG 9 } ;
1001
                                   CDR ;
1002
                                   CAR ;
1003
                                   CDR ;
1004
                                   CDR ;
1005
                                   DIG 3 ;
1006
                                   MUL ;
1007
                                   MUL ;
1008
                                   EDIV ;
1009
                                   IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
1010
                                   CAR ;
1011
                                   CONS ;
1012
                                   PUSH nat 1 ;
1013
                                   DIG 2 ;
1014
                                   SUB ;
1015
                                   ABS ;
1016
                                   PAIR ;
1017
                                   LEFT (list nat) } } ;
1018
                   SWAP ;
1019
                   DIG 2 ;
1020
                   DROP 2 ;
1021
                   { DIP 2 { DUP } ; DIG 3 } ;
1022
                   CAR ;
1023
                   CDR ;
1024
                   CAR ;
1025
                   CAR ;
1026
                   IF_NONE
1027
                     { { DIP 2 { DUP } ; DIG 3 } ;
1028
                       CAR ;
1029
                       CDR ;
1030
                       CAR ;
1031
                       CDR ;
1032
                       CONTRACT %transfer (pair address (pair address nat)) ;
1033
                       IF_NONE
1034
                         { PUSH string "Cannot connect to the input token entrypoint" ;
1035
                           FAILWITH }
1036
                         { DROP } ;
1037
                       PUSH bool True }
1038
                     { DROP ;
1039
                       { DIP 2 { DUP } ; DIG 3 } ;
1040
                       CAR ;
1041
                       CDR ;
1042
                       CAR ;
1043
                       CDR ;
1044
                       CONTRACT %transfer (list (pair address
1045
                                                     (list (pair address (pair nat nat))))) ;
1046
                       IF_NONE
1047
                         { PUSH string "Cannot connect to the input FA2 token entrypoint" ;
1048
                           FAILWITH }
1049
                         { DROP } ;
1050
                       PUSH bool True } ;
1051
                   DROP ;
1052
                   { DIP 2 { DUP } ; DIG 3 } ;
1053
                   CDR ;
1054
                   CAR ;
1055
                   CAR ;
1056
                   CAR ;
1057
                   IF_NONE
1058
                     { { DIP 2 { DUP } ; DIG 3 } ;
1059
                       CDR ;
1060
                       CAR ;
1061
                       CDR ;
1062
                       CAR ;
1063
                       CONTRACT %transfer (pair address (pair address nat)) ;
1064
                       IF_NONE
1065
                         { PUSH string "Cannot connect to the reward token entrypoint" ;
1066
                           FAILWITH }
1067
                         { DROP } ;
1068
                       PUSH bool True }
1069
                     { DROP ;
1070
                       { DIP 2 { DUP } ; DIG 3 } ;
1071
                       CDR ;
1072
                       CAR ;
1073
                       CDR ;
1074
                       CAR ;
1075
                       CONTRACT %transfer (list (pair address
1076
                                                     (list (pair address (pair nat nat))))) ;
1077
                       IF_NONE
1078
                         { PUSH string "Cannot connect to the reward FA2 token entrypoint" ;
1079
                           FAILWITH }
1080
                         { DROP } ;
1081
                       PUSH bool True } ;
1082
                   DROP ;
1083
                   { DIP 2 { DUP } ; DIG 3 } ;
1084
                   CDR ;
1085
                   SWAP ;
1086
                   { DIP 3 { DUP } ; DIG 4 } ;
1087
                   CAR ;
1088
                   CDR ;
1089
                   CDR ;
1090
                   CAR ;
1091
                   PAIR ;
1092
                   { DIP 3 { DUP } ; DIG 4 } ;
1093
                   CAR ;
1094
                   CDR ;
1095
                   CAR ;
1096
                   PAIR ;
1097
                   DIG 3 ;
1098
                   CAR ;
1099
                   CAR ;
1100
                   PAIR ;
1101
                   PAIR ;
1102
                   DUP ;
1103
                   CDR ;
1104
                   SWAP ;
1105
                   DUP ;
1106
                   DUG 2 ;
1107
                   CAR ;
1108
                   CDR ;
1109
                   { DIP 2 { DUP } ; DIG 3 } ;
1110
                   CAR ;
1111
                   CAR ;
1112
                   CDR ;
1113
                   DIG 4 ;
1114
                   DIG 4 ;
1115
                   CAR ;
1116
                   CAR ;
1117
                   CAR ;
1118
                   CAR ;
1119
                   PAIR ;
1120
                   PAIR ;
1121
                   PAIR ;
1122
                   PAIR ;
1123
                   DUP ;
1124
                   CDR ;
1125
                   SWAP ;
1126
                   DUP ;
1127
                   DUG 2 ;
1128
                   CAR ;
1129
                   CDR ;
1130
                   PUSH bool True ;
1131
                   { DIP 3 { DUP } ; DIG 4 } ;
1132
                   CAR ;
1133
                   CAR ;
1134
                   CDR ;
1135
                   CAR ;
1136
                   PAIR ;
1137
                   DIG 3 ;
1138
                   CAR ;
1139
                   CAR ;
1140
                   CAR ;
1141
                   PAIR ;
1142
                   PAIR ;
1143
                   PAIR ;
1144
                   NIL operation ;
1145
                   PAIR }
1146
                 { PUSH string "Only the contract admin can change the contract administrator or increase reward" ;
1147
                   { DIP 2 { DUP } ; DIG 3 } ;
1148
                   CAR ;
1149
                   CAR ;
1150
                   CAR ;
1151
                   CAR ;
1152
                   SENDER ;
1153
                   COMPARE ;
1154
                   EQ ;
1155
                   IF { DROP } { FAILWITH } ;
1156
                   PUSH string "You must not send Tezos to the smart contract" ;
1157
                   PUSH mutez 0 ;
1158
                   AMOUNT ;
1159
                   COMPARE ;
1160
                   EQ ;
1161
                   IF { DROP } { FAILWITH } ;
1162
                   SWAP ;
1163
                   DUP ;
1164
                   DUG 2 ;
1165
                   CDR ;
1166
                   { DIP 2 { DUP } ; DIG 3 } ;
1167
                   CAR ;
1168
                   CDR ;
1169
                   { DIP 3 { DUP } ; DIG 4 } ;
1170
                   CAR ;
1171
                   CAR ;
1172
                   CDR ;
1173
                   DIG 4 ;
1174
                   CAR ;
1175
                   CAR ;
1176
                   CAR ;
1177
                   CDR ;
1178
                   DIG 4 ;
1179
                   PAIR ;
1180
                   PAIR ;
1181
                   PAIR ;
1182
                   PAIR ;
1183
                   NIL operation ;
1184
                   PAIR } } }
1185
         { IF_LEFT
1186
             { SWAP ;
1187
               DUP ;
1188
               DUG 2 ;
1189
               CAR ;
1190
               CDR ;
1191
               CAR ;
1192
               CDR ;
1193
               NOW ;
1194
               SENDER ;
1195
               { DIP 4 { DUP } ; DIG 5 } ;
1196
               CAR ;
1197
               CAR ;
1198
               CDR ;
1199
               CAR ;
1200
               { DIP 5 { DUP } ; DIG 6 } ;
1201
               CDR ;
1202
               CDR ;
1203
               CAR ;
1204
               CDR ;
1205
               { DIP 6 { DUP } ; DIG 7 } ;
1206
               CAR ;
1207
               CAR ;
1208
               CAR ;
1209
               CDR ;
1210
               NOW ;
1211
               SUB ;
1212
               ABS ;
1213
               PUSH nat 1 ;
1214
               { DIP 8 { DUP } ; DIG 9 } ;
1215
               CDR ;
1216
               CDR ;
1217
               CDR ;
1218
               CDR ;
1219
               DIG 2 ;
1220
               EDIV ;
1221
               IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
1222
               CAR ;
1223
               ADD ;
1224
               { DIP 7 { DUP } ; DIG 8 } ;
1225
               CDR ;
1226
               CDR ;
1227
               CDR ;
1228
               CDR ;
1229
               SWAP ;
1230
               DUP ;
1231
               DUG 2 ;
1232
               MUL ;
1233
               INT ;
1234
               { DIP 8 { DUP } ; DIG 9 } ;
1235
               CAR ;
1236
               CAR ;
1237
               CAR ;
1238
               CDR ;
1239
               ADD ;
1240
               PUSH string "The contract is not initialized" ;
1241
               PUSH bool True ;
1242
               { DIP 10 { DUP } ; DIG 11 } ;
1243
               CAR ;
1244
               CAR ;
1245
               CDR ;
1246
               CDR ;
1247
               COMPARE ;
1248
               EQ ;
1249
               IF { DROP } { FAILWITH } ;
1250
               PUSH string "You must not send Tezos to the smart contract" ;
1251
               PUSH mutez 0 ;
1252
               AMOUNT ;
1253
               COMPARE ;
1254
               EQ ;
1255
               IF { DROP } { FAILWITH } ;
1256
               PUSH string "The farm staking amount must be greater than zero" ;
1257
               PUSH nat 0 ;
1258
               { DIP 9 { DUP } ; DIG 10 } ;
1259
               COMPARE ;
1260
               GT ;
1261
               IF { DROP } { FAILWITH } ;
1262
               PUSH string "There are no more weeks left for staking in the farm" ;
1263
               { DIP 9 { DUP } ; DIG 10 } ;
1264
               CDR ;
1265
               CDR ;
1266
               CDR ;
1267
               CDR ;
1268
               { DIP 10 { DUP } ; DIG 11 } ;
1269
               CDR ;
1270
               CDR ;
1271
               CAR ;
1272
               CAR ;
1273
               MUL ;
1274
               INT ;
1275
               { DIP 10 { DUP } ; DIG 11 } ;
1276
               CAR ;
1277
               CAR ;
1278
               CAR ;
1279
               CDR ;
1280
               ADD ;
1281
               { DIP 7 { DUP } ; DIG 8 } ;
1282
               COMPARE ;
1283
               LT ;
1284
               IF { DROP } { FAILWITH } ;
1285
               PUSH string "Please try again in few seconds" ;
1286
               PUSH int 0 ;
1287
               { DIP 2 { DUP } ; DIG 3 } ;
1288
               { DIP 8 { DUP } ; DIG 9 } ;
1289
               SUB ;
1290
               COMPARE ;
1291
               LT ;
1292
               IF { DROP } { FAILWITH } ;
1293
               { DIP 8 { DUP } ; DIG 9 } ;
1294
               CAR ;
1295
               CDR ;
1296
               CAR ;
1297
               CAR ;
1298
               IF_NONE
1299
                 { DIG 6 ;
1300
                   CONTRACT %transfer (pair address (pair address nat)) ;
1301
                   IF_NONE
1302
                     { PUSH string "Cannot connect to the input token entrypoint" ;
1303
                       FAILWITH }
1304
                     {} ;
1305
                   { DIP 7 { DUP } ; DIG 8 } ;
1306
                   SELF_ADDRESS ;
1307
                   PAIR ;
1308
                   { DIP 6 { DUP } ; DIG 7 } ;
1309
                   PAIR ;
1310
                   SWAP ;
1311
                   PUSH mutez 0 ;
1312
                   DIG 2 ;
1313
                   TRANSFER_TOKENS ;
1314
                   NIL operation ;
1315
                   SWAP ;
1316
                   CONS }
1317
                 { DIG 7 ;
1318
                   CONTRACT %transfer (list (pair address
1319
                                                 (list (pair address (pair nat nat))))) ;
1320
                   IF_NONE
1321
                     { PUSH string "Cannot connect to the input FA2 token entrypoint" ;
1322
                       FAILWITH }
1323
                     {} ;
1324
                   NIL (pair address (pair nat nat)) ;
1325
                   { DIP 9 { DUP } ; DIG 10 } ;
1326
                   DIG 3 ;
1327
                   PAIR ;
1328
                   SELF_ADDRESS ;
1329
                   PAIR ;
1330
                   CONS ;
1331
                   { DIP 6 { DUP } ; DIG 7 } ;
1332
                   PAIR ;
1333
                   SWAP ;
1334
                   PUSH mutez 0 ;
1335
                   NIL (pair address (list (pair address (pair nat nat)))) ;
1336
                   DIG 3 ;
1337
                   CONS ;
1338
                   TRANSFER_TOKENS ;
1339
                   NIL operation ;
1340
                   SWAP ;
1341
                   CONS } ;
1342
               { DIP 8 { DUP } ; DIG 9 } ;
1343
               CDR ;
1344
               CDR ;
1345
               CDR ;
1346
               CAR ;
1347
               { DIP 6 { DUP } ; DIG 7 } ;
1348
               GET ;
1349
               IF_NONE
1350
                 { { DIP 8 { DUP } ; DIG 9 } ;
1351
                   CDR ;
1352
                   CDR ;
1353
                   CDR ;
1354
                   CAR ;
1355
                   { DIP 8 { DUP } ; DIG 9 } ;
1356
                   { DIP 7 { DUP } ; DIG 8 } ;
1357
                   SWAP ;
1358
                   SOME ;
1359
                   SWAP ;
1360
                   UPDATE }
1361
                 { { DIP 9 { DUP } ; DIG 10 } ;
1362
                   CDR ;
1363
                   CDR ;
1364
                   CDR ;
1365
                   CAR ;
1366
                   SWAP ;
1367
                   { DIP 9 { DUP } ; DIG 10 } ;
1368
                   ADD ;
1369
                   SOME ;
1370
                   { DIP 7 { DUP } ; DIG 8 } ;
1371
                   UPDATE } ;
1372
               DIG 2 ;
1373
               DIG 7 ;
1374
               SUB ;
1375
               ABS ;
1376
               { DIP 7 { DUP } ; DIG 8 } ;
1377
               SWAP ;
1378
               MUL ;
1379
               DIG 7 ;
1380
               { DIP 8 { DUP } ; DIG 9 } ;
1381
               CDR ;
1382
               CDR ;
1383
               CDR ;
1384
               CDR ;
1385
               MUL ;
1386
               NIL nat ;
1387
               { DIP 9 { DUP } ; DIG 10 } ;
1388
               CDR ;
1389
               CDR ;
1390
               CAR ;
1391
               CAR ;
1392
               PAIR ;
1393
               LEFT (list nat) ;
1394
               LOOP_LEFT { { { DUP ; CAR ; DIP { CDR } } } ;
1395
                           PUSH nat 0 ;
1396
                           SWAP ;
1397
                           DUP ;
1398
                           DUG 2 ;
1399
                           COMPARE ;
1400
                           EQ ;
1401
                           IF
1402
                             { DROP ; RIGHT (pair nat (list nat)) }
1403
                             { SWAP ;
1404
                               { DIP 6 { DUP } ; DIG 7 } ;
1405
                               { DIP 2 { DUP } ; DIG 3 } ;
1406
                               COMPARE ;
1407
                               LT ;
1408
                               IF
1409
                                 { PUSH nat 0 }
1410
                                 { { DIP 6 { DUP } ; DIG 7 } ;
1411
                                   { DIP 2 { DUP } ; DIG 3 } ;
1412
                                   COMPARE ;
1413
                                   EQ ;
1414
                                   IF
1415
                                     { { DIP 3 { DUP } ; DIG 4 } }
1416
                                     { { DIP 2 { DUP } ; DIG 3 } } } ;
1417
                               CONS ;
1418
                               PUSH nat 1 ;
1419
                               DIG 2 ;
1420
                               SUB ;
1421
                               ABS ;
1422
                               PAIR ;
1423
                               LEFT (list nat) } } ;
1424
               SWAP ;
1425
               DIG 2 ;
1426
               DIG 5 ;
1427
               DROP 3 ;
1428
               { DIP 5 { DUP } ; DIG 6 } ;
1429
               { DIP 4 { DUP } ; DIG 5 } ;
1430
               SWAP ;
1431
               GET ;
1432
               IF_NONE
1433
                 { DUP }
1434
                 { NIL nat ;
1435
                   NIL nat ;
1436
                   { DIP 3 { DUP } ; DIG 4 } ;
1437
                   DIG 3 ;
1438
                   PAIR ;
1439
                   PAIR ;
1440
                   LEFT (list nat) ;
1441
                   LOOP_LEFT { { { DUP ; CAR ; DIP { CDR } } } ;
1442
                               { { DUP ; CAR ; DIP { CDR } } } ;
1443
                               IF_CONS
1444
                                 { DIG 2 ;
1445
                                   IF_CONS
1446
                                     { PUSH bool True ;
1447
                                       PUSH bool True ;
1448
                                       COMPARE ;
1449
                                       EQ ;
1450
                                       IF { DIG 2 ; ADD } { DIG 2 ; SUB ; ABS } ;
1451
                                       DIG 3 ;
1452
                                       SWAP ;
1453
                                       CONS ;
1454
                                       SWAP ;
1455
                                       DIG 2 ;
1456
                                       PAIR ;
1457
                                       PAIR ;
1458
                                       LEFT (list nat) }
1459
                                     { DROP 3 ; PUSH string "size don't match" ; FAILWITH } }
1460
                                 { IF_CONS
1461
                                     { DROP 3 ; PUSH string "size don't match" ; FAILWITH }
1462
                                     { RIGHT (pair (pair (list nat) (list nat))
1463
                                                   (list nat)) } } } ;
1464
                   PAIR ;
1465
                   LEFT (list nat) ;
1466
                   LOOP_LEFT { { { DUP ; CAR ; DIP { CDR } } } ;
1467
                               IF_CONS
1468
                                 { DIG 2 ; SWAP ; CONS ; SWAP ; PAIR ; LEFT (list nat) }
1469
                                 { RIGHT (pair (list nat) (list nat)) } } } ;
1470
               PUSH nat 0 ;
1471
               { DIP 6 { DUP } ; DIG 7 } ;
1472
               SIZE ;
1473
               COMPARE ;
1474
               EQ ;
1475
               IF
1476
                 { SWAP ; DIG 5 ; DROP 2 ; DUP }
1477
                 { NIL nat ;
1478
                   NIL nat ;
1479
                   DIG 3 ;
1480
                   DIG 7 ;
1481
                   PAIR ;
1482
                   PAIR ;
1483
                   LEFT (list nat) ;
1484
                   LOOP_LEFT { { { DUP ; CAR ; DIP { CDR } } } ;
1485
                               { { DUP ; CAR ; DIP { CDR } } } ;
1486
                               IF_CONS
1487
                                 { DIG 2 ;
1488
                                   IF_CONS
1489
                                     { PUSH bool True ;
1490
                                       PUSH bool True ;
1491
                                       COMPARE ;
1492
                                       EQ ;
1493
                                       IF { DIG 2 ; ADD } { DIG 2 ; SUB ; ABS } ;
1494
                                       DIG 3 ;
1495
                                       SWAP ;
1496
                                       CONS ;
1497
                                       SWAP ;
1498
                                       DIG 2 ;
1499
                                       PAIR ;
1500
                                       PAIR ;
1501
                                       LEFT (list nat) }
1502
                                     { DROP 3 ; PUSH string "size don't match" ; FAILWITH } }
1503
                                 { IF_CONS
1504
                                     { DROP 3 ; PUSH string "size don't match" ; FAILWITH }
1505
                                     { RIGHT (pair (pair (list nat) (list nat))
1506
                                                   (list nat)) } } } ;
1507
                   PAIR ;
1508
                   LEFT (list nat) ;
1509
                   LOOP_LEFT { { { DUP ; CAR ; DIP { CDR } } } ;
1510
                               IF_CONS
1511
                                 { DIG 2 ; SWAP ; CONS ; SWAP ; PAIR ; LEFT (list nat) }
1512
                                 { RIGHT (pair (list nat) (list nat)) } } } ;
1513
               { DIP 6 { DUP } ; DIG 7 } ;
1514
               CDR ;
1515
               CDR ;
1516
               CDR ;
1517
               CDR ;
1518
               DIG 3 ;
1519
               PAIR ;
1520
               { DIP 6 { DUP } ; DIG 7 } ;
1521
               CDR ;
1522
               CDR ;
1523
               CAR ;
1524
               PAIR ;
1525
               { DIP 6 { DUP } ; DIG 7 } ;
1526
               CDR ;
1527
               CAR ;
1528
               PAIR ;
1529
               DIG 6 ;
1530
               CAR ;
1531
               PAIR ;
1532
               DUP ;
1533
               CDR ;
1534
               CDR ;
1535
               CDR ;
1536
               DIG 5 ;
1537
               DIG 4 ;
1538
               SOME ;
1539
               DIG 6 ;
1540
               UPDATE ;
1541
               { DIP 2 { DUP } ; DIG 3 } ;
1542
               CDR ;
1543
               CDR ;
1544
               CAR ;
1545
               CAR ;
1546
               PAIR ;
1547
               PAIR ;
1548
               SWAP ;
1549
               DUP ;
1550
               DUG 2 ;
1551
               CDR ;
1552
               CAR ;
1553
               PAIR ;
1554
               SWAP ;
1555
               CAR ;
1556
               PAIR ;
1557
               DUP ;
1558
               CDR ;
1559
               SWAP ;
1560
               DUP ;
1561
               DUG 2 ;
1562
               CAR ;
1563
               CDR ;
1564
               { DIP 2 { DUP } ; DIG 3 } ;
1565
               CAR ;
1566
               CAR ;
1567
               CDR ;
1568
               CDR ;
1569
               DIG 4 ;
1570
               PAIR ;
1571
               DIG 3 ;
1572
               CAR ;
1573
               CAR ;
1574
               CAR ;
1575
               PAIR ;
1576
               PAIR ;
1577
               PAIR ;
1578
               SWAP ;
1579
               PAIR }
1580
             { PUSH string "The contract is not initialized" ;
1581
               PUSH bool True ;
1582
               { DIP 3 { DUP } ; DIG 4 } ;
1583
               CAR ;
1584
               CAR ;
1585
               CDR ;
1586
               CDR ;
1587
               COMPARE ;
1588
               EQ ;
1589
               IF { DROP } { FAILWITH } ;
1590
               SWAP ;
1591
               DUP ;
1592
               DUG 2 ;
1593
               CAR ;
1594
               CDR ;
1595
               CAR ;
1596
               CDR ;
1597
               NOW ;
1598
               { DIP 3 { DUP } ; DIG 4 } ;
1599
               CAR ;
1600
               CAR ;
1601
               CAR ;
1602
               CDR ;
1603
               NOW ;
1604
               SUB ;
1605
               ABS ;
1606
               PUSH nat 1 ;
1607
               { DIP 5 { DUP } ; DIG 6 } ;
1608
               CDR ;
1609
               CDR ;
1610
               CDR ;
1611
               CDR ;
1612
               DIG 2 ;
1613
               EDIV ;
1614
               IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ;
1615
               CAR ;
1616
               ADD ;
1617
               { DIP 4 { DUP } ; DIG 5 } ;
1618
               CDR ;
1619
               CDR ;
1620
               CAR ;
1621
               CDR ;
1622
               PUSH string "You must not send Tezos to the smart contract" ;
1623
               PUSH mutez 0 ;
1624
               AMOUNT ;
1625
               COMPARE ;
1626
               EQ ;
1627
               IF { DROP } { FAILWITH } ;
1628
               SENDER ;
1629
               { DIP 6 { DUP } ; DIG 7 } ;
1630
               CDR ;
1631
               CDR ;
1632
               CDR ;
1633
               CDR ;
1634
               { DIP 3 { DUP } ; DIG 4 } ;
1635
               MUL ;
1636
               INT ;
1637
               { DIP 7 { DUP } ; DIG 8 } ;
1638
               CAR ;
1639
               CAR ;
1640
               CAR ;
1641
               CDR ;
1642
               ADD ;
1643
               { DIP 7 { DUP } ; DIG 8 } ;
1644
               CDR ;
1645
               CDR ;
1646
               CDR ;
1647
               CAR ;
1648
               { DIP 2 { DUP } ; DIG 3 } ;
1649
               GET ;
1650
               IF_NONE { PUSH string "You did not stake any token yet" ; FAILWITH } {} ;
1651
               PUSH string "You cannot unstake more than your farm staking" ;
1652
               { DIP 8 { DUP } ; DIG 9 } ;
1653
               { DIP 2 { DUP } ; DIG 3 } ;
1654
               COMPARE ;
1655
               GE ;
1656
               IF { DROP } { FAILWITH } ;
1657
               { DIP 8 { DUP } ; DIG 9 } ;
1658
               CDR ;
1659
               CDR ;
1660
               CDR ;
1661
               CAR ;
1662
               { DIP 8 { DUP } ; DIG 9 } ;
1663
               DIG 2 ;
1664
               SUB ;
1665
               ABS ;
1666
               SOME ;
1667
               { DIP 3 { DUP } ; DIG 4 } ;
1668
               UPDATE ;
1669
               { DIP 8 { DUP } ; DIG 9 } ;
1670
               CAR ;
1671
               CDR ;
1672
               CAR ;
1673
               CAR ;
1674
               IF_NONE
1675
                 { DIG 6 ;
1676
                   CONTRACT %transfer (pair address (pair address nat)) ;
1677
                   IF_NONE
1678
                     { PUSH string "Cannot connect to the input token entrypoint" ;
1679
                       FAILWITH }
1680
                     {} ;
1681
                   { DIP 7 { DUP } ; DIG 8 } ;
1682
                   { DIP 4 { DUP } ; DIG 5 } ;
1683
                   PAIR ;
1684
                   SELF_ADDRESS ;
1685
                   PAIR ;
1686
                   SWAP ;
1687
                   PUSH mutez 0 ;
1688
                   DIG 2 ;
1689
                   TRANSFER_TOKENS ;
1690
                   NIL operation ;
1691
                   SWAP ;
1692
                   CONS }
1693
                 { DIG 7 ;
1694
                   CONTRACT %transfer (list (pair address
1695
                                                 (list (pair address (pair nat nat))))) ;
1696
                   IF_NONE
1697
                     { PUSH string "Cannot connect to the input token entrypoint" ;
1698
                       FAILWITH }
1699
                     {} ;
1700
                   NIL (pair address (pair nat nat)) ;
1701
                   { DIP 9 { DUP } ; DIG 10 } ;
1702
                   DIG 3 ;
1703
                   PAIR ;
1704
                   { DIP 5 { DUP } ; DIG 6 } ;
1705
                   PAIR ;
1706
                   CONS ;
1707
                   SELF_ADDRESS ;
1708
                   PAIR ;
1709
                   SWAP ;
1710
                   PUSH mutez 0 ;
1711
                   NIL (pair address (list (pair address (pair nat nat)))) ;
1712
                   DIG 3 ;
1713
                   CONS ;
1714
                   TRANSFER_TOKENS ;
1715
                   NIL operation ;
1716
                   SWAP ;
1717
                   CONS } ;
1718
               { DIP 2 { DUP } ; DIG 3 } ;
1719
               { DIP 7 { DUP } ; DIG 8 } ;
1720
               COMPARE ;
1721
               LT ;
1722
               IF
1723
                 { DIG 2 ;
1724
                   DIG 6 ;
1725
                   SUB ;
1726
                   ABS ;
1727
                   { DIP 6 { DUP } ; DIG 7 } ;
1728
                   SWAP ;
1729
                   MUL ;
1730
                   DIG 6 ;
1731
                   { DIP 7 { DUP } ; DIG 8 } ;
1732
                   CDR ;
1733
                   CDR ;
1734
                   CDR ;
1735
                   CDR ;
1736
                   MUL ;
1737
                   NIL nat ;
1738
                   { DIP 8 { DUP } ; DIG 9 } ;
1739
                   CDR ;
1740
                   CDR ;
1741
                   CAR ;
1742
                   CAR ;
1743
                   PAIR ;
1744
                   LEFT (list nat) ;
1745
                   LOOP_LEFT { { { DUP ; CAR ; DIP { CDR } } } ;
1746
                               PUSH nat 0 ;
1747
                               SWAP ;
1748
                               DUP ;
1749
                               DUG 2 ;
1750
                               COMPARE ;
1751
                               EQ ;
1752
                               IF
1753
                                 { DROP ; RIGHT (pair nat (list nat)) }
1754
                                 { SWAP ;
1755
                                   { DIP 8 { DUP } ; DIG 9 } ;
1756
                                   { DIP 2 { DUP } ; DIG 3 } ;
1757
                                   COMPARE ;
1758
                                   LT ;
1759
                                   IF
1760
                                     { PUSH nat 0 }
1761
                                     { { DIP 8 { DUP } ; DIG 9 } ;
1762
                                       { DIP 2 { DUP } ; DIG 3 } ;
1763
                                       COMPARE ;
1764
                                       EQ ;
1765
                                       IF
1766
                                         { { DIP 3 { DUP } ; DIG 4 } }
1767
                                         { { DIP 2 { DUP } ; DIG 3 } } } ;
1768
                                   CONS ;
1769
                                   PUSH nat 1 ;
1770
                                   DIG 2 ;
1771
                                   SUB ;
1772
                                   ABS ;
1773
                                   PAIR ;
1774
                                   LEFT (list nat) } } ;
1775
                   SWAP ;
1776
                   DIG 2 ;
1777
                   DIG 7 ;
1778
                   DROP 3 ;
1779
                   { DIP 3 { DUP } ; DIG 4 } ;
1780
                   { DIP 5 { DUP } ; DIG 6 } ;
1781
                   SWAP ;
1782
                   GET ;
1783
                   IF_NONE
1784
                     { PUSH string "Some points should exist" ; FAILWITH }
1785
                     { NIL nat ;
1786
                       NIL nat ;
1787
                       { DIP 3 { DUP } ; DIG 4 } ;
1788
                       DIG 3 ;
1789
                       PAIR ;
1790
                       PAIR ;
1791
                       LEFT (list nat) ;
1792
                       LOOP_LEFT { { { DUP ; CAR ; DIP { CDR } } } ;
1793
                                   { { DUP ; CAR ; DIP { CDR } } } ;
1794
                                   IF_CONS
1795
                                     { DIG 2 ;
1796
                                       IF_CONS
1797
                                         { PUSH bool True ;
1798
                                           PUSH bool False ;
1799
                                           COMPARE ;
1800
                                           EQ ;
1801
                                           IF { DIG 2 ; ADD } { DIG 2 ; SUB ; ABS } ;
1802
                                           DIG 3 ;
1803
                                           SWAP ;
1804
                                           CONS ;
1805
                                           SWAP ;
1806
                                           DIG 2 ;
1807
                                           PAIR ;
1808
                                           PAIR ;
1809
                                           LEFT (list nat) }
1810
                                         { DROP 3 ;
1811
                                           PUSH string "size don't match" ;
1812
                                           FAILWITH } }
1813
                                     { IF_CONS
1814
                                         { DROP 3 ;
1815
                                           PUSH string "size don't match" ;
1816
                                           FAILWITH }
1817
                                         { RIGHT (pair (pair (list nat) (list nat))
1818
                                                       (list nat)) } } } ;
1819
                       PAIR ;
1820
                       LEFT (list nat) ;
1821
                       LOOP_LEFT { { { DUP ; CAR ; DIP { CDR } } } ;
1822
                                   IF_CONS
1823
                                     { DIG 2 ; SWAP ; CONS ; SWAP ; PAIR ; LEFT (list nat) }
1824
                                     { RIGHT (pair (list nat) (list nat)) } } } ;
1825
                   NIL nat ;
1826
                   NIL nat ;
1827
                   DIG 3 ;
1828
                   { DIP 8 { DUP } ; DIG 9 } ;
1829
                   CAR ;
1830
                   CAR ;
1831
                   CDR ;
1832
                   CAR ;
1833
                   PAIR ;
1834
                   PAIR ;
1835
                   LEFT (list nat) ;
1836
                   LOOP_LEFT { { { DUP ; CAR ; DIP { CDR } } } ;
1837
                               { { DUP ; CAR ; DIP { CDR } } } ;
1838
                               IF_CONS
1839
                                 { DIG 2 ;
1840
                                   IF_CONS
1841
                                     { PUSH bool True ;
1842
                                       PUSH bool False ;
1843
                                       COMPARE ;
1844
                                       EQ ;
1845
                                       IF { DIG 2 ; ADD } { DIG 2 ; SUB ; ABS } ;
1846
                                       DIG 3 ;
1847
                                       SWAP ;
1848
                                       CONS ;
1849
                                       SWAP ;
1850
                                       DIG 2 ;
1851
                                       PAIR ;
1852
                                       PAIR ;
1853
                                       LEFT (list nat) }
1854
                                     { DROP 3 ; PUSH string "size don't match" ; FAILWITH } }
1855
                                 { IF_CONS
1856
                                     { DROP 3 ; PUSH string "size don't match" ; FAILWITH }
1857
                                     { RIGHT (pair (pair (list nat) (list nat))
1858
                                                   (list nat)) } } } ;
1859
                   PAIR ;
1860
                   LEFT (list nat) ;
1861
                   LOOP_LEFT { { { DUP ; CAR ; DIP { CDR } } } ;
1862
                               IF_CONS
1863
                                 { DIG 2 ; SWAP ; CONS ; SWAP ; PAIR ; LEFT (list nat) }
1864
                                 { RIGHT (pair (list nat) (list nat)) } } ;
1865
                   { DIP 6 { DUP } ; DIG 7 } ;
1866
                   CDR ;
1867
                   CDR ;
1868
                   CDR ;
1869
                   CDR ;
1870
                   DIG 4 ;
1871
                   PAIR ;
1872
                   { DIP 6 { DUP } ; DIG 7 } ;
1873
                   CDR ;
1874
                   CDR ;
1875
                   CAR ;
1876
                   PAIR ;
1877
                   { DIP 6 { DUP } ; DIG 7 } ;
1878
                   CDR ;
1879
                   CAR ;
1880
                   PAIR ;
1881
                   DIG 6 ;
1882
                   CAR ;
1883
                   PAIR ;
1884
                   DUP ;
1885
                   CDR ;
1886
                   CDR ;
1887
                   CDR ;
1888
                   DIG 6 ;
1889
                   DIG 4 ;
1890
                   SOME ;
1891
                   DIG 6 ;
1892
                   UPDATE ;
1893
                   { DIP 2 { DUP } ; DIG 3 } ;
1894
                   CDR ;
1895
                   CDR ;
1896
                   CAR ;
1897
                   CAR ;
1898
                   PAIR ;
1899
                   PAIR ;
1900
                   SWAP ;
1901
                   DUP ;
1902
                   DUG 2 ;
1903
                   CDR ;
1904
                   CAR ;
1905
                   PAIR ;
1906
                   SWAP ;
1907
                   CAR ;
1908
                   PAIR ;
1909
                   DUP ;
1910
                   CDR ;
1911
                   SWAP ;
1912
                   DUP ;
1913
                   DUG 2 ;
1914
                   CAR ;
1915
                   CDR ;
1916
                   { DIP 2 { DUP } ; DIG 3 } ;
1917
                   CAR ;
1918
                   CAR ;
1919
                   CDR ;
1920
                   CDR ;
1921
                   DIG 4 ;
1922
                   PAIR ;
1923
                   DIG 3 ;
1924
                   CAR ;
1925
                   CAR ;
1926
                   CAR ;
1927
                   PAIR ;
1928
                   PAIR ;
1929
                   PAIR ;
1930
                   SWAP ;
1931
                   PAIR }
1932
                 { DIG 2 ;
1933
                   DIG 3 ;
1934
                   DIG 4 ;
1935
                   DIG 5 ;
1936
                   DIG 6 ;
1937
                   DIG 7 ;
1938
                   DROP 6 ;
1939
                   { DIP 2 { DUP } ; DIG 3 } ;
1940
                   CDR ;
1941
                   CDR ;
1942
                   CDR ;
1943
                   CDR ;
1944
                   DIG 2 ;
1945
                   PAIR ;
1946
                   { DIP 2 { DUP } ; DIG 3 } ;
1947
                   CDR ;
1948
                   CDR ;
1949
                   CAR ;
1950
                   PAIR ;
1951
                   { DIP 2 { DUP } ; DIG 3 } ;
1952
                   CDR ;
1953
                   CAR ;
1954
                   PAIR ;
1955
                   DIG 2 ;
1956
                   CAR ;
1957
                   PAIR ;
1958
                   SWAP ;
1959
                   PAIR } } } }