tx · CgVZmLAtrgWv2UwNfL7Reazswo2WebQZsK434ZcXta3N

3N2yNznNNBCevaJdCMr8XhM87sKKuBjMdEq:  -0.01000000 Waves

2022.05.18 11:52 [2056881] smart account 3N2yNznNNBCevaJdCMr8XhM87sKKuBjMdEq > SELF 0.00000000 Waves

{ "type": 13, "id": "CgVZmLAtrgWv2UwNfL7Reazswo2WebQZsK434ZcXta3N", "fee": 1000000, "feeAssetId": null, "timestamp": 1652864022983, "version": 2, "chainId": 84, "sender": "3N2yNznNNBCevaJdCMr8XhM87sKKuBjMdEq", "senderPublicKey": "644NyMVpLnyzhSJG4FPftw1Gn3yQfD6hbZJQvvoavceg", "proofs": [ "4eyvXVv1bkndQTYuTG8KTP1gTnzZvHGuPP1RzWcamJHVnZ6RhyRcSqEWcr6oRRwEvi9PzsEtvZTysGsWtNVLusXW" ], "script": "base64:AAIFAAAAAAAAAEIIAhIGCgQCGBESEgYKBAIYERISBgoEAhgREhIGCgQCGBESEgYKBAIYERISBgoEAhgREhIGCgQCGBESEgYKBAIYERIAAAA/AAAAAAd2ZXJzaW9uAgAAAAUxLjAuMAAAAAAIa1ZlcnNpb24CAAAAB3ZlcnNpb24AAAAAB2tBY3RpdmUCAAAABmFjdGl2ZQAAAAAJa0Fzc2V0SWRBAgAAAApBX2Fzc2V0X2lkAAAAAAlrQXNzZXRJZEICAAAACkJfYXNzZXRfaWQAAAAACWtCYWxhbmNlQQIAAAAPQV9hc3NldF9iYWxhbmNlAAAAAAlrQmFsYW5jZUICAAAAD0JfYXNzZXRfYmFsYW5jZQAAAAANa0JhbGFuY2VJbml0QQIAAAAMQV9hc3NldF9pbml0AAAAAA1rQmFsYW5jZUluaXRCAgAAAAxCX2Fzc2V0X2luaXQAAAAADWtTaGFyZUFzc2V0SWQCAAAADnNoYXJlX2Fzc2V0X2lkAAAAABFrU2hhcmVBc3NldFN1cHBseQIAAAASc2hhcmVfYXNzZXRfc3VwcGx5AAAAAARrRmVlAgAAAApjb21taXNzaW9uAAAAAAZrQ2F1c2UCAAAADnNodXRkb3duX2NhdXNlAAAAAA1rRmlyc3RIYXJ2ZXN0AgAAAA1maXJzdF9oYXJ2ZXN0AAAAABNrRmlyc3RIYXJ2ZXN0SGVpZ2h0AgAAABRmaXJzdF9oYXJ2ZXN0X2hlaWdodAAAAAALa1NoYXJlTGltaXQCAAAAHHNoYXJlX2xpbWl0X29uX2ZpcnN0X2hhcnZlc3QAAAAAC2tCYXNlUGVyaW9kAgAAAAtiYXNlX3BlcmlvZAAAAAANa1BlcmlvZExlbmd0aAIAAAANcGVyaW9kX2xlbmd0aAAAAAAMa1N0YXJ0SGVpZ2h0AgAAAAxzdGFydF9oZWlnaHQAAAAADGtVU0ROQWRkcmVzcwIAAAAYc3Rha2luZ191c2RubnNidF9hZGRyZXNzAAAAAAxrRVVSTkFkZHJlc3MCAAAAFHN0YWtpbmdfZXVybl9hZGRyZXNzAAAAAA5rTGVhc2luZ0Ftb3VudAIAAAAObGVhc2luZ19hbW91bnQAAAAADGtVU0ROQXNzZXRJZAIAAAANdXNkbl9hc3NldF9pZAAAAAAMa0VVUk5Bc3NldElkAgAAAA1ldXJuX2Fzc2V0X2lkAAAAAA5rU3Rha2luZ0Fzc2V0cwIAAAAOc3Rha2luZ19hc3NldHMAAAAADWtPcmFjbGVBY3RpdmUCAAAAFGFjdGl2ZV9hbGxfY29udHJhY3RzAAAAABdrT3JhY2xlQWN0aXZlRXhjaGFuZ2VycwIAAAAYYWN0aXZlX2dsb2JhbF9leGNoYW5nZXJzAAAAAA1rQWRtaW5QdWJLZXkxAgAAAAthZG1pbl9wdWJfMQAAAAANa0FkbWluUHViS2V5MgIAAAALYWRtaW5fcHViXzIAAAAADWtBZG1pblB1YktleTMCAAAAC2FkbWluX3B1Yl8zAAAAABJrQWRtaW5JbnZva2VQdWJLZXkCAAAAEGFkbWluX2ludm9rZV9wdWIAAAAAEGtNb25leUJveEFkZHJlc3MCAAAAEW1vbmV5X2JveF9hZGRyZXNzAAAAAA5rVm90aW5nQWRkcmVzcwIAAAAOdm90aW5nX2FkZHJlc3MAAAAABm9yYWNsZQkBAAAAB0FkZHJlc3MAAAABAQAAABoBVOlFqh6QLzqu8boO5i6akl8amITh82KzCAEAAAATZ2V0QmFzZTU4RnJvbU9yYWNsZQAAAAEAAAADa2V5BAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABm9yYWNsZQUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAABnN0cmluZwUAAAAHJG1hdGNoMAkAAlkAAAABBQAAAAZzdHJpbmcEAAAAB25vdGhpbmcFAAAAByRtYXRjaDAJAAACAAAAAQkAASwAAAACBQAAAANrZXkCAAAACGlzIGVtcHR5AAAAAAxhZG1pblB1YktleTEJAQAAABNnZXRCYXNlNThGcm9tT3JhY2xlAAAAAQUAAAANa0FkbWluUHViS2V5MQAAAAAMYWRtaW5QdWJLZXkyCQEAAAATZ2V0QmFzZTU4RnJvbU9yYWNsZQAAAAEFAAAADWtBZG1pblB1YktleTIAAAAADGFkbWluUHViS2V5MwkBAAAAE2dldEJhc2U1OEZyb21PcmFjbGUAAAABBQAAAA1rQWRtaW5QdWJLZXkzAAAAABFhZG1pbkludm9rZVB1YktleQkBAAAAE2dldEJhc2U1OEZyb21PcmFjbGUAAAABBQAAABJrQWRtaW5JbnZva2VQdWJLZXkAAAAAD21vbmV5Qm94QWRkcmVzcwkBAAAAB0FkZHJlc3MAAAABCQEAAAATZ2V0QmFzZTU4RnJvbU9yYWNsZQAAAAEFAAAAEGtNb25leUJveEFkZHJlc3MAAAAADXZvdGluZ0FkZHJlc3MJAQAAAAdBZGRyZXNzAAAAAQkBAAAAE2dldEJhc2U1OEZyb21PcmFjbGUAAAABBQAAAA5rVm90aW5nQWRkcmVzcwAAAAAEVVNETgkBAAAAE2dldEJhc2U1OEZyb21PcmFjbGUAAAABBQAAAAxrVVNETkFzc2V0SWQAAAAABEVVUk4JAQAAABNnZXRCYXNlNThGcm9tT3JhY2xlAAAAAQUAAAAMa0VVUk5Bc3NldElkAAAAAA1zdGFraW5nQXNzZXRzCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAZvcmFjbGUFAAAADmtTdGFraW5nQXNzZXRzAAAAABJzdGFraW5nVVNETkFkZHJlc3MJAQAAAAdBZGRyZXNzAAAAAQkBAAAAE2dldEJhc2U1OEZyb21PcmFjbGUAAAABBQAAAAxrVVNETkFkZHJlc3MAAAAAEnN0YWtpbmdFVVJOQWRkcmVzcwkBAAAAB0FkZHJlc3MAAAABCQEAAAATZ2V0QmFzZTU4RnJvbU9yYWNsZQAAAAEFAAAADGtFVVJOQWRkcmVzcwAAAAAKYmFzZVBlcmlvZAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAADXZvdGluZ0FkZHJlc3MFAAAAC2tCYXNlUGVyaW9kAgAAABFFbXB0eSBrQmFzZVBlcmlvZAAAAAALc3RhcnRIZWlnaHQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAA12b3RpbmdBZGRyZXNzBQAAAAxrU3RhcnRIZWlnaHQCAAAAEkVtcHR5IGtTdGFydEhlaWdodAAAAAAMcGVyaW9kTGVuZ3RoCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAANdm90aW5nQWRkcmVzcwUAAAANa1BlcmlvZExlbmd0aAIAAAATRW1wdHkga1BlcmlvZExlbmd0aAAAAAAVZmlyc3RIYXJ2ZXN0RW5kUGVyaW9k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AARpbmZvAAAACGRlY2ltYWxzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BAAAAAV3YXZlcwUAAAAHJG1hdGNoMAkABRUAAAADAgAAAAVXQVZFUwIAAAAFV0FWRVMAAAAAAAAAAAgJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAAB3N1c3BlbmQAAAABAAAABWNhdXNlCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAAAdrQWN0aXZlBwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAZrQ2F1c2UFAAAABWNhdXNlBQAAAANuaWwBAAAADWNhbGN1bGF0ZUZlZXMAAAAGAAAACXBtdEFtb3VudAAAABJtaW5BbW91bnRUb1JlY2VpdmUAAAAJdG9rZW5Gcm9tAAAAB3Rva2VuVG8AAAADZmVlAAAADWZlZUdvdmVybmFuY2UEAAAAEGFtb3VudFdpdGhvdXRGZWUJAABrAAAAAwUAAAAHdG9rZW5UbwUAAAAJcG10QW1vdW50CQAAZAAAAAIFAAAACXBtdEFtb3VudAUAAAAJdG9rZW5Gcm9tBAAAAA1hbW91bnRXaXRoRmVlCQAAawAAAAMFAAAAEGFtb3VudFdpdGhvdXRGZWUJAABlAAAAAgUAAAAJZmVlU2NhbGU2BQAAAANmZWUFAAAACWZlZVNjYWxlNgQAAAAQZ292ZXJuYW5jZVJld2FyZAkAAGsAAAADBQAAABBhbW91bnRXaXRob3V0RmVlBQAAAA1mZWVHb3Zlcm5hbmNlBQAAAAlmZWVTY2FsZTYDCQAAZgAAAAIFAAAAEm1pbkFtb3VudFRvUmVjZWl2ZQUAAAANYW1vdW50V2l0aEZlZQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAB1DYWxjdWxhdGVkIGFtb3VudCB0byByZWNlaXZlIAkAAaQAAAABBQAAAA1hbW91bnRXaXRoRmVlAgAAACAgaXMgbGVzcyB0aGFuIHNwZWNpZmllZCBtaW5pbXVtIAkAAaQAAAABBQAAABJtaW5BbW91bnRUb1JlY2VpdmUJAAUVAAAAAwUAAAAQYW1vdW50V2l0aG91dEZlZQUAAAANYW1vdW50V2l0aEZlZQUAAAAQZ292ZXJuYW5jZVJld2FyZAEAAAARc3VzcGVuZFN1c3BpY2lvdXMAAAAGAAAAD2FjY291bnRCYWxhbmNlQQAAAA9hY2NvdW50QmFsYW5jZUIAAAAIYmFsYW5jZUEAAAAIYmFsYW5jZUIAAAAIYXNzZXRJZEEAAAAIYXNzZXRJZEIJAQAAAAdzdXNwZW5kAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAjU3VzcGljaW91cyBzdGF0ZS4gQWN0dWFsIGJhbGFuY2VzOiAJAAGkAAAAAQUAAAAPYWNjb3VudEJhbGFuY2VBAgAAAAEgBQAAAAhhc3NldElkQQIAAAACLCAJAAGkAAAAAQUAAAAPYWNjb3VudEJhbGFuY2VCAgAAAAEgBQAAAAhhc3NldElkQgIAAAAJLiBTdGF0ZTogCQABpAAAAAEFAAAACGJhbGFuY2VBAgAAAAEgBQAAAAhhc3NldElkQQIAAAACLCAJAAGkAAAAAQUAAAAIYmFsYW5jZUICAAAAASAFAAAACGFzc2V0SWRCAQAAAAhpc0FjdGl2ZQAAAAADBQAAAAZhY3RpdmUFAAAABHVuaXQJAAACAAAAAQIAAAAfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAEAAAAPZ2V0UG9vbEJhbGFuY2VzAAAAAwAAAARwb29sAAAACGFzc2V0SWRBAAAACGFzc2V0SWRCBAAAAAhiYWxhbmNlQQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEcG9vbAUAAAAJa0JhbGFuY2VBBAAAAAhiYWxhbmNlQgkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEcG9vbAUAAAAJa0JhbGFuY2VCBAAAAA1zdGFrZWRBbW91bnRBCQEAAAAMc3Rha2VkQW1vdW50AAAAAgUAAAAIYXNzZXRJZEEFAAAABHBvb2wEAAAADXN0YWtlZEFtb3VudEIJAQAAAAxzdGFrZWRBbW91bnQAAAACBQAAAAhhc3NldElkQgUAAAAEcG9vbAQAAAAPYWNjb3VudEJhbGFuY2VBCQAAZAAAAAIJAQAAAA5hY2NvdW50QmFsYW5jZQAAAAIFAAAACGFzc2V0SWRBBQAAAARwb29sBQAAAA1zdGFrZWRBbW91bnRBBAAAAA9hY2NvdW50QmFsYW5jZUIJAABkAAAAAgkBAAAADmFjY291bnRCYWxhbmNlAAAAAgUAAAAIYXNzZXRJZEIFAAAABHBvb2wFAAAADXN0YWtlZEFtb3VudEIEAAAAC3NoYXJlU3VwcGx5CQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAARwb29sBQAAABFrU2hhcmVBc3NldFN1cHBseQkABRcAAAAFBQAAAAhiYWxhbmNlQQUAAAAIYmFsYW5jZUIFAAAAD2FjY291bnRCYWxhbmNlQQUAAAAPYWNjb3VudEJhbGFuY2VCBQAAAAtzaGFyZVN1cHBseQEAAAANZ2V0UG9vbEFzc2V0cwAAAAEAAAAEcG9vbAQAAAALc3RyQXNzZXRJZEEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHBvb2wFAAAACWtBc3NldElkQQQAAAALc3RyQXNzZXRJZEIJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHBvb2wFAAAACWtBc3NldElkQgQAAAAIYXNzZXRJZEEDCQAAAAAAAAIFAAAAC3N0ckFzc2V0SWRBAgAAAAVXQVZFUwUAAAAEdW5pdAkAAlkAAAABBQAAAAtzdHJBc3NldElkQQQAAAAIYXNzZXRJZEIDCQAAAAAAAAIFAAAAC3N0ckFzc2V0SWRCAgAAAAVXQVZFUwUAAAAEdW5pdAkAAlkAAAABBQAAAAtzdHJBc3NldElkQgQAAAAMc2hhcmVBc3NldElkCQACWQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHBvb2wFAAAADWtTaGFyZUFzc2V0SWQJAAUXAAAABQUAAAALc3RyQXNzZXRJZEEFAAAAC3N0ckFzc2V0SWRCBQAAAAhhc3NldElkQQUAAAAIYXNzZXRJZEIFAAAADHNoYXJlQXNzZXRJZAEAAAAMZ2V0RmVlUGFyYW1zAAAAAQAAAARwb29sBAAAAANmZWUJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHBvb2wFAAAABGtGZWUE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AAIFAAAAB2tBY3RpdmUGCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAACWtBc3NldElkQQUAAAAOcG10U3RyQXNzZXRJZEEJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAJa0Fzc2V0SWRCBQAAAA5wbXRTdHJBc3NldElkQgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAJa0JhbGFuY2VBBQAAAApwbXRBbW91bnRBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAlrQmFsYW5jZUIFAAAACnBtdEFtb3VudEIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAABGtGZWUJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABm9yYWNsZQIAAAANYmFzZV9mZWVfY3BtbQkABEwAAAACBQAAAApzaGFyZUlzc3VlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAADWtTaGFyZUFzc2V0SWQJAAJYAAAAAQUAAAAMc2hhcmVJc3N1ZUlkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABFrU2hhcmVBc3NldFN1cHBseQUAAAASc2hhcmVJbml0aWFsU3VwcGx5CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAABmNhbGxlcgUAAAASc2hhcmVJbml0aWFsU3VwcGx5BQAAAAxzaGFyZUlzc3VlSWQFAAAAA25pbAMFAAAADGZpcnN0SGFydmVzdAkABRQAAAACBQAAAANuaWwJAAROAAAAAgUAAAAJYmFzZUVudHJ5CQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAAA1rRmlyc3RIYXJ2ZXN0BQAAAAxmaXJzdEhhcnZlc3QJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAE2tGaXJzdEhhcnZlc3RIZWlnaHQJAABkAAAAAgUAAAALc3RhcnRIZWlnaHQJAABoAAAAAgUAAAAVZmlyc3RIYXJ2ZXN0RW5kUGVyaW9kBQAAAAxwZXJpb2RMZW5ndGgFAAAAA25pbAkABRQAAAACBQAAAANuaWwFAAAACWJhc2VFbnRyeQkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAEWluaXRXaXRoSW5pdFJhdGlvAAAABAAAAAtjYWxsZXJCeXRlcwAAAARhcmdzAAAACHBBbW91bnRzAAAACXBBc3NldElkcwQAAAAGY2FsbGVyCQEAAAAHQWRkcmVzcwAAAAEFAAAAC2NhbGxlckJ5dGVzBAAAAAskdDA5NDkzOTY5MwkABRcAAAAFCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAEYXJncwAAAAAAAAAAAAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAABGFyZ3MAAAAAAAAAAAEJAAGRAAAAAgUAAAAEYXJncwAAAAAAAAAAAgkAAZEAAAACBQAAAARhcmdzAAAAAAAAAAADCQAAAAAAAAIJAAGRAAAAAgUAAAAEYXJncwAAAAAAAAAABAIAAAAEdHJ1ZQQAAAAJYW10QXNzZXRBCAUAAAALJHQwOTQ5Mzk2OTMAAAACXzEEAAAACWFtdEFzc2V0QggFAAAACyR0MDk0OTM5NjkzAAAAAl8yBAAAAAthc3NldElkQVN0cggFAAAACyR0MDk0OTM5NjkzAAAAAl8zBAAAAAthc3NldElkQlN0cggFAAAACyR0MDk0OTM5NjkzAAAAAl80BAAAAAxmaXJzdEhhcnZlc3QIBQAAAAskdDA5NDkzOTY5MwAAAAJfNQMJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkxCQAETAAAAAIFAAAADGFkbWluUHViS2V5MgkABEwAAAACBQAAAAxhZG1pblB1YktleTMJAARMAAAAAgUAAAARYWRtaW5JbnZva2VQdWJLZXkFAAAAA25pbAgFAAAAAWkAAAAVb3JpZ2luQ2FsbGVyUHVibGljS2V5CQAAAgAAAAECAAAAIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgMJAQAAAAlpc0RlZmluZWQAAAABCQAEGwAAAAIFAAAABmNhbGxlcgUAAAAHa0FjdGl2ZQkAAAIAAAABAgAAABZEQXBwIGlzIGFscmVhZHkgYWN0aXZlAwkAAAAAAAACBQAAAAthc3NldElkQVN0cgUAAAALYXNzZXRJZEJTdHIJAAACAAAAAQIAAAAYQXNzZXRzIG11c3QgYmUgZGlmZmVyZW50BAAAAA0kdDAxMDA2MzEwMTQwCQEAAAAMZ2V0QXNzZXRJbmZvAAAAAQUAAAALYXNzZXRJZEFTdHIEAAAADnBtdFN0ckFzc2V0SWRBCAUAAAANJHQwMTAwNjMxMDE0MAAAAAJfMQQAAAANcG10QXNzZXROYW1lQQgFAAAADSR0MDEwMDYzMTAxNDAAAAACXzIEAAAADHBtdERlY2ltYWxzQQgFAAAADSR0MDEwMDYzMTAxNDAAAAACXzMEAAAADSR0MDEwMTQ5MTAyMjYJAQAAAAxnZXRBc3NldEluZm8AAAABBQAAAAthc3NldElkQlN0cgQAAAAOcG10U3RyQXNzZXRJZEIIBQAAAA0kdDAxMDE0OTEwMjI2AAAAAl8xBAAAAA1wbXRBc3NldE5hbWVCCAUAAAANJHQwMTAxNDkxMDIyNgAAAAJfMgQAAAAMcG10RGVjaW1hbHNCCAUAAAANJHQwMTAxNDkxMDIyNgAAAAJfMwQAAAAJc2hhcmVOYW1lCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAFzCQABLwAAAAIFAAAADXBtdEFzc2V0TmFtZUEAAAAAAAAAAAcCAAAAAV8JAAEvAAAAAgUAAAANcG10QXNzZXROYW1lQgAAAAAAAAAABwQAAAAQc2hhcmVEZXNjcmlwdGlvbgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAIlNoYXJlVG9rZW4gb2YgU3dvcEZpIHByb3RvY29sIGZvciAFAAAADXBtdEFzc2V0TmFtZUECAAAABSBhbmQgBQAAAA1wbXRBc3NldE5hbWVCAgAAAAwgYXQgYWRkcmVzcyAJAAQlAAAAAQUAAAAEdGhpcwQAAAANc2hhcmVEZWNpbWFscwkAAGkAAAACCQAAZAAAAAIFAAAADHBtdERlY2ltYWxzQQUAAAAMcG10RGVjaW1hbHNCAAAAAAAAAAACBAAAABJzaGFyZUluaXRpYWxTdXBwbHkAAAAAAAAAAAAEAAAACnNoYXJlSXNzdWUJAARCAAAABQUAAAAJc2hhcmVOYW1lBQAAABBzaGFyZURlc2NyaXB0aW9uBQAAABJzaGFyZUluaXRpYWxTdXBwbHkFAAAADXNoYXJlRGVjaW1hbHMGBAAAAAxzaGFyZUlzc3VlSWQJAAQ4AAAAAQUAAAAKc2hhcmVJc3N1ZQQAAAAJYmFzZUVudHJ5CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAACGtWZXJzaW9uBQAAAAd2ZXJzaW9uCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAAAdrQWN0aXZlBgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAlrQXNzZXRJZEEFAAAADnBtdFN0ckFzc2V0SWRBCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAACWtBc3NldElkQgUAAAAOcG10U3RyQXNzZXRJZEIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADWtCYWxhbmNlSW5pdEEFAAAACWFtdEFzc2V0QQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAANa0JhbGFuY2VJbml0QgUAAAAJYW10QXNzZXRCCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAlrQmFsYW5jZUEAAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAACWtCYWxhbmNlQgAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAEa0ZlZQkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAGb3JhY2xlAgAAAA1iYXNlX2ZlZV9jcG1tCQAETAAAAAIFAAAACnNoYXJlSXNzdWUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAANa1NoYXJlQXNzZXRJZAkAAlgAAAABBQAAAAxzaGFyZUlzc3VlSWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEWtTaGFyZUFzc2V0U3VwcGx5BQAAABJzaGFyZUluaXRpYWxTdXBwbHkFAAAAA25pbAMFAAAADGZpcnN0SGFydmVzdAkA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aW5pbWFsIGFtb3VudCB0byByZWNlaXZlIG11c3QgYmUgcG9zaXRpdmUuIEFjdHVhbDogCQABpAAAAAEFAAAAEm1pbkFtb3VudFRvUmVjZWl2ZQMJAQAAAAIhPQAAAAIJAAGQAAAAAQUAAAAIcEFtb3VudHMAAAAAAAAAAAEJAAACAAAAAQIAAAAdT25lIGF0dGFjaGVkIHBheW1lbnQgZXhwZWN0ZWQDCQEAAAABIQAAAAEJAQAAAA9jb250YWluc0VsZW1lbnQAAAACCQAETAAAAAIFAAAACGFzc2V0SWRBCQAETAAAAAIFAAAACGFzc2V0SWRCBQAAAANuaWwFAAAACnBtdEFzc2V0SWQJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAkSW5jb3JyZWN0IGFzc2V0IGF0dGFjaGVkLiBFeHBlY3RlZDogBQAAAAtzdHJBc3NldElkQQIAAAAEIG9yIAUAAAALc3RyQXNzZXRJZEIDAwkAAGYAAAACBQAAAAhiYWxhbmNlQQUAAAAPYWNjb3VudEJhbGFuY2VBBgkAAGYAAAACBQAAAAhiYWxhbmNlQgUAAAAPYWNjb3VudEJhbGFuY2VCCQAFFAAAAAIFAAAAA25pbAkABE4AAAACCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAABmNhbGxlcgUAAAAJcG10QW1vdW50BQAAAApwbXRBc3NldElkBQAAAANuaWwJAQAAABFzdXNwZW5kU3VzcGljaW91cwAAAAYFAAAAD2FjY291bnRCYWxhbmNlQQUAAAAPYWNjb3VudEJhbGFuY2VCBQAAAAhiYWxhbmNlQQUAAAAIYmFsYW5jZUIFAAAAC3N0ckFzc2V0SWRBBQAAAAtzdHJBc3NldElkQgQAAAANJHQwMTMzOTIxMzQzNAkBAAAADGdldEZlZVBhcmFtcwAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAADZmVlCAUAAAANJHQwMTMzOTIxMzQzNAAAAAJfMQQAAAAGZ292RmVlCAUAAAANJHQwMTMzOTIxMzQzNAAAAAJfMgQAAAANJHQwMTM0NDMxMzc0OAMJAAAAAAAAAgUAAAAKcG10QXNzZXRJZAUAAAAIYXNzZXRJZEEJAQAAAA1jYWxjdWxhdGVGZWVzAAAABgUAAAAJcG10QW1vdW50BQAAABJtaW5BbW91bnRUb1JlY2VpdmUFAAAACGJhbGFuY2VBBQAAAAhiYWxhbmNlQgUAAAADZmVlBQAAAAZnb3ZGZWUJAQAAAA1jYWxjdWxhdGVGZWVzAAAABgUAAAAJcG10QW1vdW50BQAAABJtaW5BbW91bnRUb1JlY2VpdmUFAAAACGJhbGFuY2VCBQAAAAhiYWxhbmNlQQUAAAADZmVlBQAAAAZnb3ZGZWUEAAAAEGFtb3VudFdpdGhvdXRGZWUIBQAAAA0kdDAxMzQ0MzEzNzQ4AAAAAl8xBAAAAA1hbW91bnRXaXRoRmVlCAUAAAANJHQwMTM0NDMxMzc0OAAAAAJfMgQAAAAQZ292ZXJuYW5jZVJld2FyZAgFAAAADSR0MDEzNDQzMTM3NDgAAAACXzMEAAAADSR0MDEzNzU4MTQyMDcDCQAAAAAAAAIFAAAACnBtdEFzc2V0SWQFAAAACGFzc2V0SWRBCQAFFQAAAAMJAABkAAAAAgUAAAAIYmFsYW5jZUEFAAAACXBtdEFtb3VudAkAAGUAAAACCQAAZQAAAAIFAAAACGJhbGFuY2VCBQAAAA1hbW91bnRXaXRoRmVlBQAAABBnb3Zlcm5hbmNlUmV3YXJkBQAAAAhhc3NldElkQgkABRUAAAADCQAAZQAAAAIJAABlAAAAAgUAAAAIYmFsYW5jZUEFAAAADWFtb3VudFdpdGhGZWUFAAAAEGdvdmVybmFuY2VSZXdhcmQJAABkAAAAAgUAAAAIYmFsYW5jZUIFAAAACXBtdEFtb3VudAUAAAAIYXNzZXRJZEEEAAAAC25ld0JhbGFuY2VBCAUAAAANJHQwMTM3NTgxNDIwNwAAAAJfMQQAAAALbmV3QmFsYW5jZUIIBQAAAA0kdDAxMzc1ODE0MjA3AAAAAl8yBAAAAAthc3NldElkU2VuZAgFAAAADSR0MDEzNzU4MTQyMDcAAAACXzMEAAAADSR0MDE0MjE3MTQ0MzUDCQAAAAAAAAIFAAAACnBtdEFzc2V0SWQFAAAACGFzc2V0SWRBCQAFFAAAAAIFAAAACXBtdEFtb3VudAkAAGQAAAACBQAAAA1hbW91bnRXaXRoRmVlBQAAABBnb3Zlcm5hbmNlUmV3YXJkCQAFFAAAAAIJAABkAAAAAgUAAAANYW1vdW50V2l0aEZlZQUAAAAQZ292ZXJuYW5jZVJld2FyZAUAAAAJcG10QW1vdW50BAAAAAxzdGFrZUFtb3VudEEIBQAAAA0kdDAxNDIxNzE0NDM1AAAAAl8xBAAAAAxzdGFrZUFtb3VudEIIBQAAAA0kdDAxNDIxNzE0NDM1AAAAAl8yBAAAAAZzdGFrZTEDCQEAAAAIY29udGFpbnMAAAACBQAAAA1zdGFraW5nQXNzZXRzBQAAAAtzdHJBc3NldElkQQkAA/wAAAAECAUAAAABaQAAAAZjYWxsZXICAAAADHN0YWtlVW5zdGFrZQkABEwAAAACCQAAAAAAAAIFAAAACnBtdEFzc2V0SWQFAAAACGFzc2V0SWRBCQAETAAAAAIFAAAADHN0YWtlQW1vdW50QQkABEwAAAACBQAAAAtzdHJBc3NldElkQQUAAAADbmlsBQAAAANuaWwAAAAAAAAAAAADCQAAAAAAAAIFAAAABnN0YWtlMQUAAAAGc3Rha2UxBAAAAAZzdGFrZTIDCQEAAAAIY29udGFpbnMAAAACBQAAAA1zdGFraW5nQXNzZXRzBQAAAAtzdHJBc3NldElkQgkAA/wAAAAECAUAAAABaQAAAAZjYWxsZXICAAAADHN0YWtlVW5zdGFrZQkABEwAAAACCQAAAAAAAAIFAAAACnBtdEFzc2V0SWQFAAAACGFzc2V0SWRCCQAETAAAAAIFAAAADHN0YWtlQW1vdW50QgkABEwAAAACBQAAAAtzdHJBc3NldElkQgUAAAADbmlsBQAAAANuaWwAAAAAAAAAAAADCQAAAAAAAAIFAAAABnN0YWtlMgUAAAAGc3Rha2UyCQAFFAAAAAIFAAAAA25pbAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAJa0JhbGFuY2VBBQAAAAtuZXdCYWxhbmNlQQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAJa0JhbGFuY2VCBQAAAAtuZXdCYWxhbmNlQgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAZjYWxsZXIFAAAADWFtb3VudFdpdGhGZWUFAAAAC2Fzc2V0SWRTZW5kCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAD21vbmV5Qm94QWRkcmVzcwUAAAAQZ292ZXJuYW5jZVJld2FyZAUAAAALYXNzZXRJZFNlbmQFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAFnJlcGxlbmlzaFdpdGhUd29Ub2tlbnMAAAAEAAAAC2NhbGxlckJ5dGVzAAAABGFyZ3MAAAAIcEFtb3VudHMAAAAJcEFzc2V0SWRzCQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAAIaXNBY3RpdmUAAAAABAAAAAZjYWxsZXIJAQAAAAdBZGRyZXNzAAAAAQUAAAALY2FsbGVyQnl0ZXMEAAAAC3BtdEFzc2V0SWRBCQABkQAAAAIFAAAACXBBc3NldElkcwAAAAAAAAAAAAQAAAALcG10QXNzZXRJZEIJAAGRAAAAAgUAAAAJcEFzc2V0SWRzAAAAAAAAAAABBAAAAA0kdDAxNTI5NzE1Mzg3CQEAAAANZ2V0UG9vbEFzc2V0cwAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAALc3RyQXNzZXRJZEEIBQAAAA0kdDAxNTI5NzE1Mzg3AAAAAl8xBAAAAAtzdHJBc3NldElkQggFAAAADSR0MDE1Mjk3MTUzODcAAAACXzIEAAAACGFzc2V0SWRBCAUAAAANJHQwMTUyOTcxNTM4NwAAAAJfMwQAAAAIYXNzZXRJZEIIBQAAAA0kdDAxNTI5NzE1Mzg3AAAAAl80BAAAAAxzaGFyZUFzc2V0SWQIBQAAAA0kdDAxNTI5NzE1Mzg3AAAAAl81BAAAAA0kdDAxNTM5MjE1NTE2CQEAAAAPZ2V0UG9vbEJhbGFuY2VzAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAAAhhc3NldElkQQUAAAAIYXNzZXRJZEIEAAAACGJhbGFuY2VBCAUAAAANJHQwMTUzOTIxNTUxNgAAAAJfMQQAAAAIYmFsYW5jZUIIBQAAAA0kdDAxNTM5MjE1NTE2AAAAAl8yBAAAAA9hY2NvdW50QmFsYW5jZUEIBQAAAA0kdDAxNTM5MjE1NTE2AAAAAl8zBAAAAA9hY2NvdW50QmFsYW5jZUIIBQAAAA0kdDAx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BQAAAAZjYWxsZXIFAAAABmNoYW5nZQUAAAANY2hhbmdlQXNzZXRJZAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAVcmVwbGVuaXNoV2l0aE9uZVRva2VuAAAABAAAAAtjYWxsZXJCeXRlcwAAAARhcmdzAAAACHBBbW91bnRzAAAACXBBc3NldElkcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAACGlzQWN0aXZlAAAAAAQAAAAGY2FsbGVyCQEAAAAHQWRkcmVzcwAAAAEFAAAAC2NhbGxlckJ5dGVzBAAAAApwbXRBc3NldElkCQABkQAAAAIFAAAACXBBc3NldElkcwAAAAAAAAAAAAQAAAAJcG10QW1vdW50CQABkQAAAAIFAAAACHBBbW91bnRzAAAAAAAAAAAABAAAAA12aXJ0TWluQW1vdW50CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAEYXJncwAAAAAAAAAAAAQAAAANJHQwMTg2ODUxODc3NQkBAAAADWdldFBvb2xBc3NldHMAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAAC3N0ckFzc2V0SWRBCAUAAAANJHQwMTg2ODUxODc3NQAAAAJfMQQAAAALc3RyQXNzZXRJZEIIBQAAAA0kdDAxODY4NTE4Nzc1AAAAAl8yBAAAAAhhc3NldElkQQgFAAAADSR0MDE4Njg1MTg3NzUAAAACXzMEAAAACGFzc2V0SWRCCAUAAAANJHQwMTg2ODUxODc3NQAAAAJfNAQAAAAMc2hhcmVBc3NldElkCAUAAAANJHQwMTg2ODUxODc3NQAAAAJfNQQAAAANJHQwMTg3ODAxODkwNAkBAAAAD2dldFBvb2xCYWxhbmNlcwAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAIYXNzZXRJZEEFAAAACGFzc2V0SWRCBAAAAAhiYWxhbmNlQQgFAAAADSR0MDE4NzgwMTg5MDQAAAACXzEEAAAACGJhbGFuY2VCCAUAAAANJHQwMTg3ODAxODkwNAAAAAJfMgQAAAAPYWNjb3VudEJhbGFuY2VBCAUAAAANJHQwMTg3ODAxODkwNAAAAAJfMwQAAAAPYWNjb3VudEJhbGFuY2VCCAUAAAANJHQwMTg3ODAxODkwNAAAAAJfNAQAAAAQc2hhcmVBc3NldFN1cHBseQgFAAAADSR0MDE4NzgwMTg5MDQAAAACXzUEAAAAB2luaXRpYWwJAAAAAAAAAgkAAGQAAAACBQAAAAhiYWxhbmNlQQUAAAAIYmFsYW5jZUIAAAAAAAAAAAADCQEAAAACIT0AAAACCQABkAAAAAEFAAAACHBBbW91bnRzAAAAAAAAAAABCQAAAgAAAAECAAAAHE9uZSBhdHRhY2hlZCBhc3NldHMgZXhwZWN0ZWQDAwkBAAAAAiE9AAAAAgUAAAAKcG10QXNzZXRJZAUAAAAIYXNzZXRJZEEJAQAAAAIhPQAAAAIFAAAACnBtdEFzc2V0SWQFAAAACGFzc2V0SWRCBwkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAACRJbmNvcnJlY3QgYXNzZXQgYXR0YWNoZWQuIEV4cGVjdGVkOiAFAAAAC3N0ckFzc2V0SWRBAgAAAAQgb3IgBQAAAAtzdHJBc3NldElkQgMFAAAAB2luaXRpYWwJAAACAAAAAQIAAAAwRm9yIGluaXRpYWwgZXhjaGFuZ2VyIHlvdSBuZWVkIHRvIHVzZSB0d28gdG9rZW5zAwMJAABmAAAAAgUAAAAIYmFsYW5jZUEFAAAAD2FjY291bnRCYWxhbmNlQQYJAABmAAAAAgUAAAAIYmFsYW5jZUIFAAAAD2FjY291bnRCYWxhbmNlQgkABRQAAAACBQAAAANuaWwJAAROAAAAAgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAZjYWxsZXIFAAAACXBtdEFtb3VudAUAAAAKcG10QXNzZXRJZAUAAAADbmlsCQEAAAARc3VzcGVuZFN1c3BpY2lvdXMAAAAGBQAAAA9hY2NvdW50QmFsYW5jZUEFAAAAD2FjY291bnRCYWxhbmNlQgUAAAAIYmFsYW5jZUEFAAAACGJhbGFuY2VCBQAAAAtzdHJBc3NldElkQQUAAAALc3RyQXNzZXRJZEIEAAAADSR0MDE5NTU1MTk1OTcJAQAAAAxnZXRGZWVQYXJhbXMAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAAA2ZlZQgFAAAADSR0MDE5NTU1MTk1OTcAAAACXzEEAAAABmdvdkZlZQgFAAAADSR0MDE5NTU1MTk1OTcAAAACXzIEAAAADSR0MDE5NjA2MjExMTMDCQAAAAAAAAIFAAAACnBtdEFzc2V0SWQFAAAACGFzc2V0SWRBBAAAAA0kdDAxOTc2NzE5ODk4CQEAAAANY2FsY3VsYXRlRmVlcwAAAAYFAAAACXBtdEFtb3VudAUAAAANdmlydE1pbkFtb3VudAUAAAAIYmFsYW5jZUEFAAAACGJhbGFuY2VCBQAAAANmZWUFAAAABmdvdkZlZQQAAAAQYW1vdW50V2l0aG91dEZlZQgFAAAADSR0MDE5NzY3MTk4OTgAAAACXzEEAAAADWFtb3VudFdpdGhGZWUIBQAAAA0kdDAxOTc2NzE5ODk4AAAAAl8yBAAAABBnb3Zlcm5hbmNlUmV3YXJkCAUAAAANJHQwMTk3NjcxOTg5OAAAAAJfMwQAAAALbmV3QmFsYW5jZUEJAABkAAAAAgUAAAAIYmFsYW5jZUEFAAAACXBtdEFtb3VudAQAAAALbmV3QmFsYW5jZUIJAABlAAAAAgUAAAAIYmFsYW5jZUIFAAAAEGdvdmVybmFuY2VSZXdhcmQEAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkEJAABrAAAAAwkAAGkAAAACBQAAAAlwbXRBbW91bnQAAAAAAAAAAAIFAAAABnNjYWxlOAUAAAALbmV3QmFsYW5jZUEEAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkIJAABrAAAAAwUAAAANYW1vdW50V2l0aEZlZQUAAAAGc2NhbGU4BQAAAAtuZXdCYWxhbmNlQgQAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50CQAAawAAAAMJAAGXAAAAAQkABEwAAAACBQAAABNyYXRpb1NoYXJlVG9rZW5zSW5BCQAETAAAAAIFAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkIFAAAAA25pbAUAAAAQc2hhcmVBc3NldFN1cHBseQUAAAAGc2NhbGU4CQAFGAAAAAYFAAAAC25ld0JhbGFuY2VBBQAAAAtuZXdCYWxhbmNlQgUAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50BQAAABBnb3Zlcm5hbmNlUmV3YXJkBQAAAAhhc3NldElkQgUAAAALc3RyQXNzZXRJZEIEAAAADSR0MDIwNDU3MjA1ODgJAQAAAA1jYWxjdWxhdGVGZWVzAAAABgUAAAAJcG10QW1vdW50BQAAAA12aXJ0TWluQW1vdW50BQAAAAhiYWxhbmNlQgUAAAAIYmFsYW5jZUEFAAAAA2ZlZQUAAAAGZ292RmVlBAAAABBhbW91bnRXaXRob3V0RmVlCAUAAAANJHQwMjA0NTcyMDU4OAAAAAJfMQQAAAANYW1vdW50V2l0aEZlZQgFAAAADSR0MDIwNDU3MjA1ODgAAAACXzIEAAAAEGdvdmVybmFuY2VSZXdhcmQIBQAAAA0kdDAyMDQ1NzIwNTg4AAAAAl8zBAAAAAtuZXdCYWxhbmNlQQkAAGUAAAACBQAAAAhiYWxhbmNlQQUAAAAQZ292ZXJuYW5jZVJld2FyZAQAAAALbmV3QmFsYW5jZUIJAABkAAAAAgUAAAAIYmFsYW5jZUIFAAAACXBtdEFtb3VudAQAAAATcmF0aW9TaGFyZVRva2Vuc0luQQkAAGsAAAADBQAAAA1hbW91bnRXaXRoRmVlBQAAAAZzY2FsZTgFAAAAC25ld0JhbGFuY2VBBAAAABNyYXRpb1NoYXJlVG9rZW5zSW5CCQAAawAAAAMJAABpAAAAAgUAAAAJcG10QW1vdW50AAAAAAAAAAACBQAAAAZzY2FsZTgFAAAAC25ld0JhbGFuY2VCBAAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQJAABrAAAAAwkAAZcAAAABCQAETAAAAAIFAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkEJAARMAAAAAgUAAAATcmF0aW9TaGFyZVRva2Vuc0luQgUAAAADbmlsBQAAABBzaGFyZUFzc2V0U3VwcGx5BQAAAAZzY2FsZTgJAAUYAAAABgUAAAALbmV3QmFsYW5jZUEFAAAAC25ld0JhbGFuY2VCBQAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQFAAAAEGdvdmVybmFuY2VSZXdhcmQFAAAACGFzc2V0SWRBBQAAAAtzdHJBc3NldElkQQQAAAALbmV3QmFsYW5jZUEIBQAAAA0kdDAxOTYwNjIxMTEzAAAAAl8xBAAAAAtuZXdCYWxhbmNlQggFAAAADSR0MDE5NjA2MjExMTMAAAACXzIEAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAgFAAAADSR0MDE5NjA2MjExMTMAAAACXzMEAAAACWdvdlJld2FyZAgFAAAADSR0MDE5NjA2MjExMTMAAAACXzQEAAAADmdvdlJld2FyZEFzc2V0CAUAAAANJHQwMTk2MDYyMTExMwAAAAJfNQQAAAARZ292UmV3YXJkQXNzZXRTdHIIBQAAAA0kdDAxOTYwNjIxMTEzAAAAAl82AwkAAAAAAAACBQAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQAAAAAAAAAAAAJAAACAAAAAQIAAAAdVG9vIHNtYWxsIGFtb3VudCB0byByZXBsZW5pc2gEAAAABnN0YWtlMQMJAQAAAAhjb250YWlucwAAAAIFAAAADXN0YWtpbmdBc3NldHMFAAAAEWdvdlJld2FyZEFzc2V0U3RyCQAD/AAAAAQIBQAAAAFpAAAABmNhbGxlcgIAAAAMc3Rha2VVbnN0YWtlCQAETAAAAAIHCQAETAAAAAIFAAAACWdvdlJld2FyZAkABEwAAAACBQAAABFnb3ZSZXdhcmRBc3NldFN0cgUAAAADbmlsBQAAAANuaWwAAAAAAAAAAAADCQAAAAAAAAIFAAAABnN0YWtlMQUAAAAGc3Rha2UxCQAFFAAAAAIFAAAAA25pbAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAJa0JhbGFuY2VBBQAAAAtuZXdCYWxhbmNlQQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAJa0JhbGFuY2VCBQAAAAtuZXdCYWxhbmNlQgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAARa1NoYXJlQXNzZXRTdXBwbHkJAABkAAAAAgUAAAAQc2hhcmVBc3NldFN1cHBseQUAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50CQAETAAAAAIJAQAAAAdSZWlzc3VlAAAAAwUAAAAMc2hhcmVBc3NldElkBQAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQGCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAABmNhbGxlcgUAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50BQAAAAxzaGFyZUFzc2V0SWQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAPbW9uZXlCb3hBZGRyZXNzBQAAAAlnb3ZSZXdhcmQFAAAADmdvdlJld2FyZEFzc2V0BQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAACHdpdGhkcmF3AAAABAAAAAtjYWxsZXJCeXRlcwAAAARhcmdzAAAACHBBbW91bnRzAAAACXBBc3NldElkcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAACGlzQWN0aXZlAAAAAAQAAAAGY2FsbGVyCQEAAAAHQWRkcmVzcwAAAAEFAAAAC2NhbGxlckJ5dGVzBAAAAA0kdDAyMjA2NzIyMTI0CQAFFAAAAAIJAAGRAAAAAgUAAAAIcEFtb3VudHMAAAAAAAAAAAAJAAGRAAAAAgUAAAAJcEFzc2V0SWRzAAAAAAAAAAAABAAAAAlwbXRBbW91bnQIBQAAAA0kdDAyMjA2NzIyMTI0AAAAAl8xBAAAAApwbXRBc3NldElkCAUAAAANJHQwMjIwNjcyMjEyNAAAAAJfMgQAAAANJHQwMjIxMzAyMjIyMAkBAAAADWdldFBvb2xBc3NldHMAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAAC3N0ckFzc2V0SWRBCAUAAAANJHQwMjIxMzAyMjIyMAAAAAJfMQQAAAALc3RyQXNzZXRJZEIIBQAAAA0kdDAyMjEzMDIyMjIwAAAAAl8yBAAAAAhhc3NldElkQQgFAAAADSR0MDIyMTMwMjIyMjAAAAACXzMEAAAACGFzc2V0SWRCCAUAAAANJHQwMjIxMzAyMjIyMAAAAAJfNAQAAAAMc2hhcmVBc3NldElkCAUAAAANJHQwMjIxMzAyMjIyMAAAAAJfNQQAAAANJHQwMjIyMjUyMjM0OQkBAAAAD2dldFBvb2xCYWxhbmNlcwAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAIYXNzZXRJZEEFAAAACGFzc2V0SWRCBAAAAAhiYWxhbmNlQQgFAAAADSR0MDIyMjI1MjIzNDkAAAACXzEEAAAACGJhbGFuY2VCCAUAAAANJHQwMjIyMjUyMjM0OQAAAAJfMgQAAAAPYWNjb3VudEJhbGFuY2VBCAUAAAANJHQwMjIyMjUyMjM0OQAAAAJfMwQAAAAPYWNjb3VudEJhbGFuY2VCCAUAAAANJHQwMjIyMjUyMjM0OQAAAAJfNAQAAAAQc2hhcmVBc3NldFN1cHBseQgFAAAADSR0MDIyMjI1MjIzNDkAAAACXzUDCQEAAAACIT0AAAACCQABkAAAAAEFAAAACHBBbW91bnRzAAAAAAAAAAABCQAAAgAAAAECAAAAHU9uZSBhdHRhY2hlZCBwYXltZW50IGV4cGVjdGVkAwkBAAAAAiE9AAAAAgUAAAAKcG10QXNzZXRJZAUAAAAMc2hhcmVBc3NldElkCQAAAgAAAAEJAAEsAAAAAgIAAAAkSW5jb3JyZWN0IGFzc2V0IGF0dGFjaGVkLiBFeHBlY3RlZDogCQACWAAAAAEFAAAADHNoYXJlQXNzZXRJZAMDCQAAZgAAAAIFAAAACGJhbGFuY2VBBQAAAA9hY2NvdW50QmFsYW5jZUEGCQAAZgAAAAIFAAAACGJhbGFuY2VCBQAAAA9hY2NvdW50QmFsYW5jZUIJAAUUAAAAAgUAAAADbmlsCQAETgAAAAIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAGY2FsbGVyBQAAAAlwbXRBbW91bnQFAAAACnBtdEFzc2V0SWQFAAAAA25pbAkBAAAAEXN1c3BlbmRTdXNwaWNpb3VzAAAABgUAAAAPYWNjb3VudEJhbGFuY2VBBQAAAA9hY2NvdW50QmFsYW5jZUIFAAAACGJhbGFuY2VBBQAAAAhiYWxhbmNlQgUAAAALc3RyQXNzZXRJZEEFAAAAC3N0ckFzc2V0SWRCBAAAAAxhbW91bnRUb1BheUEJAABrAAAAAwUAAAAJcG10QW1vdW50BQAAAAhiYWxhbmNlQQUAAAAQc2hhcmVBc3NldFN1cHBseQQAAAAMYW1vdW50VG9QYXlCCQAAawAAAAMFAAAACXBtdEFtb3VudAUAAAAIYmFsYW5jZUIFAAAAEHNoYXJlQXNzZXRTdXBwbHkEAAAABnN0YWtlMQMJAQAAAAhjb250YWlucwAAAAIFAAAADXN0YWtpbmdBc3NldHMFAAAAC3N0ckFzc2V0SWRBCQAD/AAAAAQIBQAAAAFpAAAABmNhbGxlcgIAAAAMc3Rha2VVbnN0YWtlCQAETAAAAAIHCQAETAAAAAIFAAAADGFtb3VudFRvUGF5QQkABEwAAAACBQAAAAtzdHJBc3NldElkQQUAAAADbmlsBQAAAANuaWwAAAAAAAAAAAADCQAAAAAAAAIFAAAABnN0YWtlMQUAAAAGc3Rha2UxBAAAAAZzdGFrZTIDCQEAAAAIY29udGFpbnMAAAACBQAAAA1zdGFraW5nQXNzZXRzBQAAAAtzdHJBc3NldElkQgkAA/wAAAAECAUAAAABaQAAAAZjYWxsZXICAAAADHN0YWtlVW5zdGFrZQkABEwAAAACBwkABEwAAAACBQAAAAxhbW91bnRUb1BheUIJAARMAAAAAgUAAAALc3RyQXNzZXRJZEIFAAAAA25pbAUAAAADbmlsAAAAAAAAAAAAAwkAAAAAAAACBQAAAAZzdGFrZTIFAAAABnN0YWtlMgkABRQAAAACBQAAAANuaWwJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAACWtCYWxhbmNlQQkAAGUAAAACBQAAAAhiYWxhbmNlQQUAAAAMYW1vdW50VG9QYXlBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAlrQmFsYW5jZUIJAABlAAAAAgUAAAAIYmFsYW5jZUIFAAAADGFtb3VudFRvUGF5QgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAARa1NoYXJlQXNzZXRTdXBwbHkJAABlAAAAAgUAAAAQc2hhcmVBc3NldFN1cHBseQUAAAAJcG10QW1vdW50CQAETAAAAAIJAQAAAARCdXJuAAAAAgUAAAAMc2hhcmVBc3NldElkBQAAAAlwbXRBbW91bnQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAGY2FsbGVyBQAAAAxhbW91bnRUb1BheUEFAAAACGFzc2V0SWRBCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAABmNhbGxlcgUAAAAMYW1vdW50VG9QYXlCBQAAAAhhc3NldElkQgUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAZdGFrZUludG9BY2NvdW50RXh0cmFGdW5kcwAAAAQAAAALY2FsbGVyQnl0ZXMAAAAEYXJncwAAAAhwQW1vdW50cwAAAAlwQXNzZXRJZHMJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAAAhpc0FjdGl2ZQAAAAAEAAAADSR0MDIzODU4MjM5MzQJAQAAAA1nZXRQb29sQXNzZXRzAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAAAtzdHJBc3NldElkQQgFAAAADSR0MDIzODU4MjM5MzQAAAACXzEEAAAAC3N0ckFzc2V0SWRCCAUAAAANJHQwMjM4NTgyMzkzNAAAAAJfMgQAAAAIYXNzZXRJZEEIBQAAAA0kdDAyMzg1ODIzOTM0AAAAAl8zBAAAAAhhc3NldElkQggFAAAADSR0MDIzODU4MjM5MzQAAAACXzQEAAAADSR0MDIzOTM5MjQwNDUJAQAAAA9nZXRQb29sQmFsYW5jZXMAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAACGFzc2V0SWRBBQAAAAhhc3NldElkQgQAAAAIYmFsYW5jZUEIBQAAAA0kdDAyMzkzOTI0MDQ1AAAAAl8xBAAAAAhiYWxhbmNlQggFAAAADSR0MDIzOTM5MjQwNDUAAAACXzIEAAAAD2FjY291bnRCYWxhbmNlQQgFAAAADSR0MDIzOTM5MjQwNDUAAAACXzMEAAAAD2FjY291bnRCYWxhbmNlQggFAAAADSR0MDIzOTM5MjQwNDUAAAACXzQEAAAADWFtb3VudEVucm9sbEEJAABlAAAAAgUAAAAPYWNjb3VudEJhbGFuY2VBBQAAAAhiYWxhbmNlQQQAAAANYW1vdW50RW5yb2xsQgkAAGUAAAACBQAAAA9hY2NvdW50QmFsYW5jZUIFAAAACGJhbGFuY2VCAwkBAAAAAiE9AAAAAgUAAAAPbW9uZXlCb3hBZGRyZXNzCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIJAAACAAAAAQIAAAAmT25seSB0aGUgd2FsbGV0IGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24DAwkAAGYAAAACAAAAAAAAAAAABQAAAA1hbW91bnRFbnJvbGxBBgkAAGYAAAACAAAAAAAAAAAABQAAAA1hbW91bnRFbnJvbGxCCQEAAAAHc3VzcGVuZAAAAAECAAAAFkVucm9sbCBhbW91bnQgbmVnYXRpdmUDAwkAAAAAAAACBQAAAA1hbW91bnRFbnJvbGxBAAAAAAAAAAAACQAAAAAAAAIFAAAADWFtb3VudEVucm9sbEIAAAAAAAAAAAAHCQAAAgAAAAECAAAAEE5vIG1vbmV5IHRvIHRha2UEAAAABnN0YWtlMQMDCQEAAAAIY29udGFpbnMAAAACBQAAAA1zdGFraW5nQXNzZXRzBQAAAAtzdHJBc3NldElkQQkAAGYAAAACBQAAAA1hbW91bnRFbnJvbGxBAAAAAAAAAAAABwkAA/wAAAAEBQAAAAR0aGlzAgAAAAxzdGFrZVVuc3Rha2UJAARMAAAAAgYJAARMAAAAAgUAAAANYW1vdW50RW5yb2xsQQkABEwAAAACBQAAAAtzdHJBc3NldElkQQUAAAADbmlsBQAAAANuaWwAAAAAAAAAAAADCQAAAAAAAAIFAAAABnN0YWtlMQUAAAAGc3Rha2UxBAAAAAZzdGFrZTIDAwkBAAAACGNvbnRhaW5zAAAAAgUAAAANc3Rha2luZ0Fzc2V0cwUAAAALc3RyQXNzZXRJZEIJAABmAAAAAgUAAAANYW1vdW50RW5yb2xsQgAAAAAAAAAAAAcJAAP8AAAABAUAAAAEdGhpcwIAAAAMc3Rha2VVbnN0YWtlCQAETAAAAAIGCQAETAAAAAIFAAAADWFtb3VudEVucm9sbEIJAARMAAAAAgUAAAALc3RyQXNzZXRJZEIFAAAAA25pbAUAAAADbmlsAAAAAAAAAAAAAwkAAAAAAAACBQAAAAZzdGFrZTIFAAAABnN0YWtlMgkABRQAAAACBQAAAANuaWwJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAACWtCYWxhbmNlQQkAAGQAAAACBQAAAAhiYWxhbmNlQQUAAAANYW1vdW50RW5yb2xsQQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAJa0JhbGFuY2VCCQAAZAAAAAIFAAAACGJhbGFuY2VCBQAAAA1hbW91bnRFbnJvbGxCBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAE211bHRpU2lnbmVkQnlBZG1pbnMEAAAAEmFkbWluUHViS2V5MVNpZ25lZAMJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAABQAAAAxhZG1pblB1YktleTEAAAAAAAAAAAEAAAAAAAAAAAAEAAAAEmFkbWluUHViS2V5MlNpZ25lZAMJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAABBQAAAAxhZG1pblB1YktleTIAAAAAAAAAAAEAAAAAAAAAAAAEAAAAEmFkbWluUHViS2V5M1NpZ25lZAMJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAACBQAAAAxhZG1pblB1YktleTMAAAAAAAAAAAEAAAAAAAAAAAAJAABnAAAAAgkAAGQAAAACCQAAZAAAAAIFAAAAEmFkbWluUHViS2V5MVNpZ25lZAUAAAASYWRtaW5QdWJLZXkyU2lnbmVkBQAAABJhZG1pblB1YktleTNTaWduZWQAAAAAAAAAAAIFAAAAE211bHRpU2lnbmVkQnlBZG1pbnN8VSFp", "height": 2056881, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: Bz9P6rJGoJT1hMCKddpY611edWW1zwMgyhJKKsaQjUjB Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 5 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let version = "1.0.0"
5+
6+let kVersion = "version"
7+
8+let kActive = "active"
9+
10+let kAssetIdA = "A_asset_id"
11+
12+let kAssetIdB = "B_asset_id"
13+
14+let kBalanceA = "A_asset_balance"
15+
16+let kBalanceB = "B_asset_balance"
17+
18+let kBalanceInitA = "A_asset_init"
19+
20+let kBalanceInitB = "B_asset_init"
21+
22+let kShareAssetId = "share_asset_id"
23+
24+let kShareAssetSupply = "share_asset_supply"
25+
26+let kFee = "commission"
27+
28+let kCause = "shutdown_cause"
29+
30+let kFirstHarvest = "first_harvest"
31+
32+let kFirstHarvestHeight = "first_harvest_height"
33+
34+let kShareLimit = "share_limit_on_first_harvest"
35+
36+let kBasePeriod = "base_period"
37+
38+let kPeriodLength = "period_length"
39+
40+let kStartHeight = "start_height"
41+
42+let kUSDNAddress = "staking_usdnnsbt_address"
43+
44+let kEURNAddress = "staking_eurn_address"
45+
46+let kLeasingAmount = "leasing_amount"
47+
48+let kUSDNAssetId = "usdn_asset_id"
49+
50+let kEURNAssetId = "eurn_asset_id"
51+
52+let kStakingAssets = "staking_assets"
53+
54+let kOracleActive = "active_all_contracts"
55+
56+let kOracleActiveExchangers = "active_global_exchangers"
57+
58+let kAdminPubKey1 = "admin_pub_1"
59+
60+let kAdminPubKey2 = "admin_pub_2"
61+
62+let kAdminPubKey3 = "admin_pub_3"
63+
64+let kAdminInvokePubKey = "admin_invoke_pub"
65+
66+let kMoneyBoxAddress = "money_box_address"
67+
68+let kVotingAddress = "voting_address"
69+
70+let oracle = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
71+
72+func getBase58FromOracle (key) = match getString(oracle, key) {
73+ case string: String =>
74+ fromBase58String(string)
75+ case nothing =>
76+ throw((key + "is empty"))
77+}
78+
79+
80+let adminPubKey1 = getBase58FromOracle(kAdminPubKey1)
81+
82+let adminPubKey2 = getBase58FromOracle(kAdminPubKey2)
83+
84+let adminPubKey3 = getBase58FromOracle(kAdminPubKey3)
85+
86+let adminInvokePubKey = getBase58FromOracle(kAdminInvokePubKey)
87+
88+let moneyBoxAddress = Address(getBase58FromOracle(kMoneyBoxAddress))
89+
90+let votingAddress = Address(getBase58FromOracle(kVotingAddress))
91+
92+let USDN = getBase58FromOracle(kUSDNAssetId)
93+
94+let EURN = getBase58FromOracle(kEURNAssetId)
95+
96+let stakingAssets = getStringValue(oracle, kStakingAssets)
97+
98+let stakingUSDNAddress = Address(getBase58FromOracle(kUSDNAddress))
99+
100+let stakingEURNAddress = Address(getBase58FromOracle(kEURNAddress))
101+
102+let basePeriod = valueOrErrorMessage(getInteger(votingAddress, kBasePeriod), "Empty kBasePeriod")
103+
104+let startHeight = valueOrErrorMessage(getInteger(votingAddress, kStartHeight), "Empty kStartHeight")
105+
106+let periodLength = valueOrErrorMessage(getInteger(votingAddress, kPeriodLength), "Empty kPeriodLength")
107+
108+let firstHarvestEndPeriod = ((basePeriod + ((height - startHeight) / periodLength)) + 3)
109+
110+let active = if (getBooleanValue(oracle, kOracleActive))
111+ then getBooleanValue(oracle, kOracleActiveExchangers)
112+ else false
113+
114+let feeScale6 = 1000000
115+
116+let scale8 = 100000000
117+
118+func accountBalance (assetId,pool) = match assetId {
119+ case id: ByteVector =>
120+ assetBalance(pool, id)
121+ case waves: Unit =>
122+ wavesBalance(pool).available
123+ case _ =>
124+ throw("Match error")
125+}
126+
127+
128+func stakedAmount (assetId,pool) = {
129+ let stakedAmountCalculated = match assetId {
130+ case aId: ByteVector =>
131+ if ((aId == USDN))
132+ then getInteger(stakingUSDNAddress, ((("rpd_balance_" + toBase58String(aId)) + "_") + toString(pool)))
133+ else if ((aId == EURN))
134+ then getInteger(stakingEURNAddress, ((("%s%s%s__stakingBalance__" + toBase58String(aId)) + "__") + toString(pool)))
135+ else 0
136+ case _: Unit =>
137+ valueOrElse(getInteger(pool, kLeasingAmount), 0)
138+ case _ =>
139+ throw("Match error")
140+ }
141+ match stakedAmountCalculated {
142+ case i: Int =>
143+ i
144+ case _ =>
145+ 0
146+ }
147+ }
148+
149+
150+func getAssetInfo (assetId) = match assetId {
151+ case id: String|ByteVector =>
152+ let $t036343806 = match id {
153+ case aId: ByteVector =>
154+ $Tuple2(toBase58String(aId), aId)
155+ case aId: String =>
156+ $Tuple2(aId, fromBase58String(aId))
157+ case _ =>
158+ throw("Match error")
159+ }
160+ let stringId = $t036343806._1
161+ let bytesId = $t036343806._2
162+ let info = valueOrErrorMessage(assetInfo(bytesId), (("Asset " + stringId) + " doesn't exist"))
163+ $Tuple3(stringId, info.name, info.decimals)
164+ case waves: Unit =>
165+ $Tuple3("WAVES", "WAVES", 8)
166+ case _ =>
167+ throw("Match error")
168+}
169+
170+
171+func suspend (cause) = [BooleanEntry(kActive, false), StringEntry(kCause, cause)]
172+
173+
174+func calculateFees (pmtAmount,minAmountToReceive,tokenFrom,tokenTo,fee,feeGovernance) = {
175+ let amountWithoutFee = fraction(tokenTo, pmtAmount, (pmtAmount + tokenFrom))
176+ let amountWithFee = fraction(amountWithoutFee, (feeScale6 - fee), feeScale6)
177+ let governanceReward = fraction(amountWithoutFee, feeGovernance, feeScale6)
178+ if ((minAmountToReceive > amountWithFee))
179+ then throw(((("Calculated amount to receive " + toString(amountWithFee)) + " is less than specified minimum ") + toString(minAmountToReceive)))
180+ else $Tuple3(amountWithoutFee, amountWithFee, governanceReward)
181+ }
182+
183+
184+func suspendSuspicious (accountBalanceA,accountBalanceB,balanceA,balanceB,assetIdA,assetIdB) = suspend(((((((((((((((("Suspicious state. Actual balances: " + toString(accountBalanceA)) + " ") + assetIdA) + ", ") + toString(accountBalanceB)) + " ") + assetIdB) + ". State: ") + toString(balanceA)) + " ") + assetIdA) + ", ") + toString(balanceB)) + " ") + assetIdB))
185+
186+
187+func isActive () = if (active)
188+ then unit
189+ else throw("DApp is inactive at this moment")
190+
191+
192+func getPoolBalances (pool,assetIdA,assetIdB) = {
193+ let balanceA = getIntegerValue(pool, kBalanceA)
194+ let balanceB = getIntegerValue(pool, kBalanceB)
195+ let stakedAmountA = stakedAmount(assetIdA, pool)
196+ let stakedAmountB = stakedAmount(assetIdB, pool)
197+ let accountBalanceA = (accountBalance(assetIdA, pool) + stakedAmountA)
198+ let accountBalanceB = (accountBalance(assetIdB, pool) + stakedAmountB)
199+ let shareSupply = getIntegerValue(pool, kShareAssetSupply)
200+ $Tuple5(balanceA, balanceB, accountBalanceA, accountBalanceB, shareSupply)
201+ }
202+
203+
204+func getPoolAssets (pool) = {
205+ let strAssetIdA = getStringValue(pool, kAssetIdA)
206+ let strAssetIdB = getStringValue(pool, kAssetIdB)
207+ let assetIdA = if ((strAssetIdA == "WAVES"))
208+ then unit
209+ else fromBase58String(strAssetIdA)
210+ let assetIdB = if ((strAssetIdB == "WAVES"))
211+ then unit
212+ else fromBase58String(strAssetIdB)
213+ let shareAssetId = fromBase58String(getStringValue(pool, kShareAssetId))
214+ $Tuple5(strAssetIdA, strAssetIdB, assetIdA, assetIdB, shareAssetId)
215+ }
216+
217+
218+func getFeeParams (pool) = {
219+ let fee = getIntegerValue(pool, kFee)
220+ let govFee = fraction(fee, 40, 100)
221+ $Tuple2(fee, govFee)
222+ }
223+
224+
225+@Callable(i)
226+func init (callerBytes,args,pAmounts,pAssetIds) = {
227+ let caller = Address(callerBytes)
228+ let $t066046663 = $Tuple2(pAmounts[0], pAssetIds[0])
229+ let pmtAmountA = $t066046663._1
230+ let pmtAssetIdA = $t066046663._2
231+ let $t066686727 = $Tuple2(pAmounts[1], pAssetIds[1])
232+ let pmtAmountB = $t066686727._1
233+ let pmtAssetIdB = $t066686727._2
234+ if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, adminInvokePubKey], i.originCallerPublicKey)))
235+ then throw("Only admin can call this function")
236+ else if (isDefined(getBoolean(caller, kActive)))
237+ then throw("DApp is already active")
238+ else if ((pmtAssetIdA == pmtAssetIdB))
239+ then throw("Assets must be different")
240+ else {
241+ let $t070977174 = getAssetInfo(pmtAssetIdA)
242+ let pmtStrAssetIdA = $t070977174._1
243+ let pmtAssetNameA = $t070977174._2
244+ let pmtDecimalsA = $t070977174._3
245+ let $t071837260 = getAssetInfo(pmtAssetIdB)
246+ let pmtStrAssetIdB = $t071837260._1
247+ let pmtAssetNameB = $t071837260._2
248+ let pmtDecimalsB = $t071837260._3
249+ let firstHarvest = (args[0] == "true")
250+ let shareName = ((("s" + take(pmtAssetNameA, 7)) + "_") + take(pmtAssetNameB, 7))
251+ let shareDescription = ((((("ShareToken of SwopFi protocol for " + pmtAssetNameA) + " and ") + pmtAssetNameB) + " at address ") + toString(this))
252+ let shareDecimals = ((pmtDecimalsA + pmtDecimalsB) / 2)
253+ let arg1 = pow(pmtAmountA, pmtDecimalsA, 5, 1, pmtDecimalsA, DOWN)
254+ let arg2 = pow(pmtAmountB, pmtDecimalsB, 5, 1, pmtDecimalsB, DOWN)
255+ let arg3 = pow(10, 0, shareDecimals, 0, 0, DOWN)
256+ let shareInitialSupply = fraction(arg1, arg2, arg3)
257+ let shareIssue = Issue(shareName, shareDescription, shareInitialSupply, shareDecimals, true)
258+ let shareIssueId = calculateAssetId(shareIssue)
259+ let stake1 = if (contains(stakingAssets, pmtStrAssetIdA))
260+ then invoke(i.caller, "stakeUnstake", [true, pmtAmountA, pmtStrAssetIdA], nil)
261+ else 0
262+ if ((stake1 == stake1))
263+ then {
264+ let stake2 = if (contains(stakingAssets, pmtStrAssetIdB))
265+ then invoke(i.caller, "stakeUnstake", [true, pmtAmountB, pmtStrAssetIdB], nil)
266+ else 0
267+ if ((stake2 == stake2))
268+ then {
269+ let baseEntry = [StringEntry(kVersion, version), BooleanEntry(kActive, true), StringEntry(kAssetIdA, pmtStrAssetIdA), StringEntry(kAssetIdB, pmtStrAssetIdB), IntegerEntry(kBalanceA, pmtAmountA), IntegerEntry(kBalanceB, pmtAmountB), IntegerEntry(kFee, getIntegerValue(oracle, "base_fee_cpmm")), shareIssue, StringEntry(kShareAssetId, toBase58String(shareIssueId)), IntegerEntry(kShareAssetSupply, shareInitialSupply), ScriptTransfer(caller, shareInitialSupply, shareIssueId)]
270+ if (firstHarvest)
271+ then $Tuple2(nil, (baseEntry ++ [BooleanEntry(kFirstHarvest, firstHarvest), IntegerEntry(kFirstHarvestHeight, (startHeight + (firstHarvestEndPeriod * periodLength)))]))
272+ else $Tuple2(nil, baseEntry)
273+ }
274+ else throw("Strict value is not equal to itself.")
275+ }
276+ else throw("Strict value is not equal to itself.")
277+ }
278+ }
279+
280+
281+
282+@Callable(i)
283+func initWithInitRatio (callerBytes,args,pAmounts,pAssetIds) = {
284+ let caller = Address(callerBytes)
285+ let $t094939693 = $Tuple5(parseIntValue(args[0]), parseIntValue(args[1]), args[2], args[3], (args[4] == "true"))
286+ let amtAssetA = $t094939693._1
287+ let amtAssetB = $t094939693._2
288+ let assetIdAStr = $t094939693._3
289+ let assetIdBStr = $t094939693._4
290+ let firstHarvest = $t094939693._5
291+ if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, adminInvokePubKey], i.originCallerPublicKey)))
292+ then throw("Only admin can call this function")
293+ else if (isDefined(getBoolean(caller, kActive)))
294+ then throw("DApp is already active")
295+ else if ((assetIdAStr == assetIdBStr))
296+ then throw("Assets must be different")
297+ else {
298+ let $t01006310140 = getAssetInfo(assetIdAStr)
299+ let pmtStrAssetIdA = $t01006310140._1
300+ let pmtAssetNameA = $t01006310140._2
301+ let pmtDecimalsA = $t01006310140._3
302+ let $t01014910226 = getAssetInfo(assetIdBStr)
303+ let pmtStrAssetIdB = $t01014910226._1
304+ let pmtAssetNameB = $t01014910226._2
305+ let pmtDecimalsB = $t01014910226._3
306+ let shareName = ((("s" + take(pmtAssetNameA, 7)) + "_") + take(pmtAssetNameB, 7))
307+ let shareDescription = ((((("ShareToken of SwopFi protocol for " + pmtAssetNameA) + " and ") + pmtAssetNameB) + " at address ") + toString(this))
308+ let shareDecimals = ((pmtDecimalsA + pmtDecimalsB) / 2)
309+ let shareInitialSupply = 0
310+ let shareIssue = Issue(shareName, shareDescription, shareInitialSupply, shareDecimals, true)
311+ let shareIssueId = calculateAssetId(shareIssue)
312+ let baseEntry = [StringEntry(kVersion, version), BooleanEntry(kActive, true), StringEntry(kAssetIdA, pmtStrAssetIdA), StringEntry(kAssetIdB, pmtStrAssetIdB), IntegerEntry(kBalanceInitA, amtAssetA), IntegerEntry(kBalanceInitB, amtAssetB), IntegerEntry(kBalanceA, 0), IntegerEntry(kBalanceB, 0), IntegerEntry(kFee, getIntegerValue(oracle, "base_fee_cpmm")), shareIssue, StringEntry(kShareAssetId, toBase58String(shareIssueId)), IntegerEntry(kShareAssetSupply, shareInitialSupply)]
313+ if (firstHarvest)
314+ then $Tuple2(nil, (baseEntry ++ [BooleanEntry(kFirstHarvest, firstHarvest), IntegerEntry(kFirstHarvestHeight, (startHeight + (firstHarvestEndPeriod * periodLength)))]))
315+ else $Tuple2(nil, baseEntry)
316+ }
317+ }
318+
319+
320+
321+@Callable(i)
322+func keepLimitForFirstHarvest (callerBytes,args,pAmounts,pAssetIds) = valueOrElse(isActive(), if (!(containsElement([adminPubKey1, adminPubKey2, adminPubKey3, adminInvokePubKey], i.originCallerPublicKey)))
323+ then throw("Only admin can call this function")
324+ else {
325+ let shareLimit = parseIntValue(args[0])
326+ $Tuple2(nil, [IntegerEntry(kShareLimit, shareLimit)])
327+ })
328+
329+
330+
331+@Callable(i)
332+func exchange (callerBytes,args,pAmounts,pAssetIds) = valueOrElse(isActive(), {
333+ let caller = Address(callerBytes)
334+ let $t01232612383 = $Tuple2(pAmounts[0], pAssetIds[0])
335+ let pmtAmount = $t01232612383._1
336+ let pmtAssetId = $t01232612383._2
337+ let minAmountToReceive = parseIntValue(args[0])
338+ let $t01244012516 = getPoolAssets(i.caller)
339+ let strAssetIdA = $t01244012516._1
340+ let strAssetIdB = $t01244012516._2
341+ let assetIdA = $t01244012516._3
342+ let assetIdB = $t01244012516._4
343+ let $t01252112627 = getPoolBalances(i.caller, assetIdA, assetIdB)
344+ let balanceA = $t01252112627._1
345+ let balanceB = $t01252112627._2
346+ let accountBalanceA = $t01252112627._3
347+ let accountBalanceB = $t01252112627._4
348+ if (if ((balanceA == 0))
349+ then true
350+ else (balanceB == 0))
351+ then throw("Can't exchange with zero balance")
352+ else if ((0 >= minAmountToReceive))
353+ then throw(("Minimal amount to receive must be positive. Actual: " + toString(minAmountToReceive)))
354+ else if ((size(pAmounts) != 1))
355+ then throw("One attached payment expected")
356+ else if (!(containsElement([assetIdA, assetIdB], pmtAssetId)))
357+ then throw(((("Incorrect asset attached. Expected: " + strAssetIdA) + " or ") + strAssetIdB))
358+ else if (if ((balanceA > accountBalanceA))
359+ then true
360+ else (balanceB > accountBalanceB))
361+ then $Tuple2(nil, ([ScriptTransfer(caller, pmtAmount, pmtAssetId)] ++ suspendSuspicious(accountBalanceA, accountBalanceB, balanceA, balanceB, strAssetIdA, strAssetIdB)))
362+ else {
363+ let $t01339213434 = getFeeParams(i.caller)
364+ let fee = $t01339213434._1
365+ let govFee = $t01339213434._2
366+ let $t01344313748 = if ((pmtAssetId == assetIdA))
367+ then calculateFees(pmtAmount, minAmountToReceive, balanceA, balanceB, fee, govFee)
368+ else calculateFees(pmtAmount, minAmountToReceive, balanceB, balanceA, fee, govFee)
369+ let amountWithoutFee = $t01344313748._1
370+ let amountWithFee = $t01344313748._2
371+ let governanceReward = $t01344313748._3
372+ let $t01375814207 = if ((pmtAssetId == assetIdA))
373+ then $Tuple3((balanceA + pmtAmount), ((balanceB - amountWithFee) - governanceReward), assetIdB)
374+ else $Tuple3(((balanceA - amountWithFee) - governanceReward), (balanceB + pmtAmount), assetIdA)
375+ let newBalanceA = $t01375814207._1
376+ let newBalanceB = $t01375814207._2
377+ let assetIdSend = $t01375814207._3
378+ let $t01421714435 = if ((pmtAssetId == assetIdA))
379+ then $Tuple2(pmtAmount, (amountWithFee + governanceReward))
380+ else $Tuple2((amountWithFee + governanceReward), pmtAmount)
381+ let stakeAmountA = $t01421714435._1
382+ let stakeAmountB = $t01421714435._2
383+ let stake1 = if (contains(stakingAssets, strAssetIdA))
384+ then invoke(i.caller, "stakeUnstake", [(pmtAssetId == assetIdA), stakeAmountA, strAssetIdA], nil)
385+ else 0
386+ if ((stake1 == stake1))
387+ then {
388+ let stake2 = if (contains(stakingAssets, strAssetIdB))
389+ then invoke(i.caller, "stakeUnstake", [(pmtAssetId == assetIdB), stakeAmountB, strAssetIdB], nil)
390+ else 0
391+ if ((stake2 == stake2))
392+ then $Tuple2(nil, [IntegerEntry(kBalanceA, newBalanceA), IntegerEntry(kBalanceB, newBalanceB), ScriptTransfer(caller, amountWithFee, assetIdSend), ScriptTransfer(moneyBoxAddress, governanceReward, assetIdSend)])
393+ else throw("Strict value is not equal to itself.")
394+ }
395+ else throw("Strict value is not equal to itself.")
396+ }
397+ })
398+
399+
400+
401+@Callable(i)
402+func replenishWithTwoTokens (callerBytes,args,pAmounts,pAssetIds) = valueOrElse(isActive(), {
403+ let caller = Address(callerBytes)
404+ let pmtAssetIdA = pAssetIds[0]
405+ let pmtAssetIdB = pAssetIds[1]
406+ let $t01529715387 = getPoolAssets(i.caller)
407+ let strAssetIdA = $t01529715387._1
408+ let strAssetIdB = $t01529715387._2
409+ let assetIdA = $t01529715387._3
410+ let assetIdB = $t01529715387._4
411+ let shareAssetId = $t01529715387._5
412+ let $t01539215516 = getPoolBalances(i.caller, assetIdA, assetIdB)
413+ let balanceA = $t01539215516._1
414+ let balanceB = $t01539215516._2
415+ let accountBalanceA = $t01539215516._3
416+ let accountBalanceB = $t01539215516._4
417+ let shareAssetSupply = $t01539215516._5
418+ if ((size(pAmounts) != 2))
419+ then throw("Two attached assets expected")
420+ else if (if ((pmtAssetIdA != assetIdA))
421+ then true
422+ else (pmtAssetIdB != assetIdB))
423+ then throw(((("Incorrect assets attached. Expected: " + strAssetIdA) + " and ") + strAssetIdB))
424+ else if (if ((balanceA > accountBalanceA))
425+ then true
426+ else (balanceB > accountBalanceB))
427+ then $Tuple2(nil, ([ScriptTransfer(caller, pAmounts[0], pmtAssetIdA), ScriptTransfer(caller, pAmounts[1], pmtAssetIdB)] ++ suspendSuspicious(accountBalanceA, accountBalanceB, balanceA, balanceB, strAssetIdA, strAssetIdB)))
428+ else {
429+ let $t01610116178 = getAssetInfo(pmtAssetIdA)
430+ let pmtStrAssetIdA = $t01610116178._1
431+ let pmtAssetNameA = $t01610116178._2
432+ let pmtDecimalsA = $t01610116178._3
433+ let $t01618716264 = getAssetInfo(pmtAssetIdB)
434+ let pmtStrAssetIdB = $t01618716264._1
435+ let pmtAssetNameB = $t01618716264._2
436+ let pmtDecimalsB = $t01618716264._3
437+ let initial = ((balanceA + balanceB) == 0)
438+ let $t01632317078 = if (initial)
439+ then $Tuple5(pAmounts[0], pAmounts[1], 0, pmtAssetIdA, 1)
440+ else {
441+ let ratioShareTokensInA = fraction(scale8, pAmounts[0], balanceA)
442+ let ratioShareTokensInB = fraction(scale8, pAmounts[1], balanceB)
443+ if ((ratioShareTokensInB > ratioShareTokensInA))
444+ then {
445+ let pmt = fraction(pAmounts[0], balanceB, balanceA)
446+ $Tuple5(pAmounts[0], pmt, (pAmounts[1] - pmt), pmtAssetIdB, ratioShareTokensInA)
447+ }
448+ else {
449+ let pmt = fraction(pAmounts[1], balanceA, balanceB)
450+ $Tuple5(pmt, pAmounts[1], (pAmounts[0] - pmt), pmtAssetIdA, ratioShareTokensInB)
451+ }
452+ }
453+ let pmtAmountA = $t01632317078._1
454+ let pmtAmountB = $t01632317078._2
455+ let change = $t01632317078._3
456+ let changeAssetId = $t01632317078._4
457+ let shareTokenRatio = $t01632317078._5
458+ let shareTokenToPayAmount = if (initial)
459+ then {
460+ let shareDecimals = ((pmtDecimalsA + pmtDecimalsB) / 2)
461+ fraction(pow(pmtAmountA, pmtDecimalsA, 5, 1, pmtDecimalsA, DOWN), pow(pmtAmountB, pmtDecimalsB, 5, 1, pmtDecimalsB, DOWN), pow(10, 0, shareDecimals, 0, 0, DOWN))
462+ }
463+ else fraction(shareTokenRatio, shareAssetSupply, scale8)
464+ if ((shareTokenToPayAmount == 0))
465+ then throw("Too small amount to replenish")
466+ else {
467+ let stake1 = if (contains(stakingAssets, pmtStrAssetIdA))
468+ then invoke(i.caller, "stakeUnstake", [true, pmtAmountA, pmtStrAssetIdA], nil)
469+ else 0
470+ if ((stake1 == stake1))
471+ then {
472+ let stake2 = if (contains(stakingAssets, pmtStrAssetIdB))
473+ then invoke(i.caller, "stakeUnstake", [true, pmtAmountB, pmtStrAssetIdB], nil)
474+ else 0
475+ if ((stake2 == stake2))
476+ then $Tuple2(nil, [Reissue(shareAssetId, shareTokenToPayAmount, true), IntegerEntry(kBalanceA, (balanceA + pmtAmountA)), IntegerEntry(kBalanceB, (balanceB + pmtAmountB)), IntegerEntry(kShareAssetSupply, (shareAssetSupply + shareTokenToPayAmount)), ScriptTransfer(caller, shareTokenToPayAmount, shareAssetId), ScriptTransfer(caller, change, changeAssetId)])
477+ else throw("Strict value is not equal to itself.")
478+ }
479+ else throw("Strict value is not equal to itself.")
480+ }
481+ }
482+ })
483+
484+
485+
486+@Callable(i)
487+func replenishWithOneToken (callerBytes,args,pAmounts,pAssetIds) = valueOrElse(isActive(), {
488+ let caller = Address(callerBytes)
489+ let pmtAssetId = pAssetIds[0]
490+ let pmtAmount = pAmounts[0]
491+ let virtMinAmount = parseIntValue(args[0])
492+ let $t01868518775 = getPoolAssets(i.caller)
493+ let strAssetIdA = $t01868518775._1
494+ let strAssetIdB = $t01868518775._2
495+ let assetIdA = $t01868518775._3
496+ let assetIdB = $t01868518775._4
497+ let shareAssetId = $t01868518775._5
498+ let $t01878018904 = getPoolBalances(i.caller, assetIdA, assetIdB)
499+ let balanceA = $t01878018904._1
500+ let balanceB = $t01878018904._2
501+ let accountBalanceA = $t01878018904._3
502+ let accountBalanceB = $t01878018904._4
503+ let shareAssetSupply = $t01878018904._5
504+ let initial = ((balanceA + balanceB) == 0)
505+ if ((size(pAmounts) != 1))
506+ then throw("One attached assets expected")
507+ else if (if ((pmtAssetId != assetIdA))
508+ then (pmtAssetId != assetIdB)
509+ else false)
510+ then throw(((("Incorrect asset attached. Expected: " + strAssetIdA) + " or ") + strAssetIdB))
511+ else if (initial)
512+ then throw("For initial exchanger you need to use two tokens")
513+ else if (if ((balanceA > accountBalanceA))
514+ then true
515+ else (balanceB > accountBalanceB))
516+ then $Tuple2(nil, ([ScriptTransfer(caller, pmtAmount, pmtAssetId)] ++ suspendSuspicious(accountBalanceA, accountBalanceB, balanceA, balanceB, strAssetIdA, strAssetIdB)))
517+ else {
518+ let $t01955519597 = getFeeParams(i.caller)
519+ let fee = $t01955519597._1
520+ let govFee = $t01955519597._2
521+ let $t01960621113 = if ((pmtAssetId == assetIdA))
522+ then {
523+ let $t01976719898 = calculateFees(pmtAmount, virtMinAmount, balanceA, balanceB, fee, govFee)
524+ let amountWithoutFee = $t01976719898._1
525+ let amountWithFee = $t01976719898._2
526+ let governanceReward = $t01976719898._3
527+ let newBalanceA = (balanceA + pmtAmount)
528+ let newBalanceB = (balanceB - governanceReward)
529+ let ratioShareTokensInA = fraction((pmtAmount / 2), scale8, newBalanceA)
530+ let ratioShareTokensInB = fraction(amountWithFee, scale8, newBalanceB)
531+ let shareTokenToPayAmount = fraction(min([ratioShareTokensInA, ratioShareTokensInB]), shareAssetSupply, scale8)
532+ $Tuple6(newBalanceA, newBalanceB, shareTokenToPayAmount, governanceReward, assetIdB, strAssetIdB)
533+ }
534+ else {
535+ let $t02045720588 = calculateFees(pmtAmount, virtMinAmount, balanceB, balanceA, fee, govFee)
536+ let amountWithoutFee = $t02045720588._1
537+ let amountWithFee = $t02045720588._2
538+ let governanceReward = $t02045720588._3
539+ let newBalanceA = (balanceA - governanceReward)
540+ let newBalanceB = (balanceB + pmtAmount)
541+ let ratioShareTokensInA = fraction(amountWithFee, scale8, newBalanceA)
542+ let ratioShareTokensInB = fraction((pmtAmount / 2), scale8, newBalanceB)
543+ let shareTokenToPayAmount = fraction(min([ratioShareTokensInA, ratioShareTokensInB]), shareAssetSupply, scale8)
544+ $Tuple6(newBalanceA, newBalanceB, shareTokenToPayAmount, governanceReward, assetIdA, strAssetIdA)
545+ }
546+ let newBalanceA = $t01960621113._1
547+ let newBalanceB = $t01960621113._2
548+ let shareTokenToPayAmount = $t01960621113._3
549+ let govReward = $t01960621113._4
550+ let govRewardAsset = $t01960621113._5
551+ let govRewardAssetStr = $t01960621113._6
552+ if ((shareTokenToPayAmount == 0))
553+ then throw("Too small amount to replenish")
554+ else {
555+ let stake1 = if (contains(stakingAssets, govRewardAssetStr))
556+ then invoke(i.caller, "stakeUnstake", [false, govReward, govRewardAssetStr], nil)
557+ else 0
558+ if ((stake1 == stake1))
559+ then $Tuple2(nil, [IntegerEntry(kBalanceA, newBalanceA), IntegerEntry(kBalanceB, newBalanceB), IntegerEntry(kShareAssetSupply, (shareAssetSupply + shareTokenToPayAmount)), Reissue(shareAssetId, shareTokenToPayAmount, true), ScriptTransfer(caller, shareTokenToPayAmount, shareAssetId), ScriptTransfer(moneyBoxAddress, govReward, govRewardAsset)])
560+ else throw("Strict value is not equal to itself.")
561+ }
562+ }
563+ })
564+
565+
566+
567+@Callable(i)
568+func withdraw (callerBytes,args,pAmounts,pAssetIds) = valueOrElse(isActive(), {
569+ let caller = Address(callerBytes)
570+ let $t02206722124 = $Tuple2(pAmounts[0], pAssetIds[0])
571+ let pmtAmount = $t02206722124._1
572+ let pmtAssetId = $t02206722124._2
573+ let $t02213022220 = getPoolAssets(i.caller)
574+ let strAssetIdA = $t02213022220._1
575+ let strAssetIdB = $t02213022220._2
576+ let assetIdA = $t02213022220._3
577+ let assetIdB = $t02213022220._4
578+ let shareAssetId = $t02213022220._5
579+ let $t02222522349 = getPoolBalances(i.caller, assetIdA, assetIdB)
580+ let balanceA = $t02222522349._1
581+ let balanceB = $t02222522349._2
582+ let accountBalanceA = $t02222522349._3
583+ let accountBalanceB = $t02222522349._4
584+ let shareAssetSupply = $t02222522349._5
585+ if ((size(pAmounts) != 1))
586+ then throw("One attached payment expected")
587+ else if ((pmtAssetId != shareAssetId))
588+ then throw(("Incorrect asset attached. Expected: " + toBase58String(shareAssetId)))
589+ else if (if ((balanceA > accountBalanceA))
590+ then true
591+ else (balanceB > accountBalanceB))
592+ then $Tuple2(nil, ([ScriptTransfer(caller, pmtAmount, pmtAssetId)] ++ suspendSuspicious(accountBalanceA, accountBalanceB, balanceA, balanceB, strAssetIdA, strAssetIdB)))
593+ else {
594+ let amountToPayA = fraction(pmtAmount, balanceA, shareAssetSupply)
595+ let amountToPayB = fraction(pmtAmount, balanceB, shareAssetSupply)
596+ let stake1 = if (contains(stakingAssets, strAssetIdA))
597+ then invoke(i.caller, "stakeUnstake", [false, amountToPayA, strAssetIdA], nil)
598+ else 0
599+ if ((stake1 == stake1))
600+ then {
601+ let stake2 = if (contains(stakingAssets, strAssetIdB))
602+ then invoke(i.caller, "stakeUnstake", [false, amountToPayB, strAssetIdB], nil)
603+ else 0
604+ if ((stake2 == stake2))
605+ then $Tuple2(nil, [IntegerEntry(kBalanceA, (balanceA - amountToPayA)), IntegerEntry(kBalanceB, (balanceB - amountToPayB)), IntegerEntry(kShareAssetSupply, (shareAssetSupply - pmtAmount)), Burn(shareAssetId, pmtAmount), ScriptTransfer(caller, amountToPayA, assetIdA), ScriptTransfer(caller, amountToPayB, assetIdB)])
606+ else throw("Strict value is not equal to itself.")
607+ }
608+ else throw("Strict value is not equal to itself.")
609+ }
610+ })
611+
612+
613+
614+@Callable(i)
615+func takeIntoAccountExtraFunds (callerBytes,args,pAmounts,pAssetIds) = valueOrElse(isActive(), {
616+ let $t02385823934 = getPoolAssets(i.caller)
617+ let strAssetIdA = $t02385823934._1
618+ let strAssetIdB = $t02385823934._2
619+ let assetIdA = $t02385823934._3
620+ let assetIdB = $t02385823934._4
621+ let $t02393924045 = getPoolBalances(i.caller, assetIdA, assetIdB)
622+ let balanceA = $t02393924045._1
623+ let balanceB = $t02393924045._2
624+ let accountBalanceA = $t02393924045._3
625+ let accountBalanceB = $t02393924045._4
626+ let amountEnrollA = (accountBalanceA - balanceA)
627+ let amountEnrollB = (accountBalanceB - balanceB)
628+ if ((moneyBoxAddress != i.originCaller))
629+ then throw("Only the wallet can call this function")
630+ else if (if ((0 > amountEnrollA))
631+ then true
632+ else (0 > amountEnrollB))
633+ then suspend("Enroll amount negative")
634+ else if (if ((amountEnrollA == 0))
635+ then (amountEnrollB == 0)
636+ else false)
637+ then throw("No money to take")
638+ else {
639+ let stake1 = if (if (contains(stakingAssets, strAssetIdA))
640+ then (amountEnrollA > 0)
641+ else false)
642+ then invoke(this, "stakeUnstake", [true, amountEnrollA, strAssetIdA], nil)
643+ else 0
644+ if ((stake1 == stake1))
645+ then {
646+ let stake2 = if (if (contains(stakingAssets, strAssetIdB))
647+ then (amountEnrollB > 0)
648+ else false)
649+ then invoke(this, "stakeUnstake", [true, amountEnrollB, strAssetIdB], nil)
650+ else 0
651+ if ((stake2 == stake2))
652+ then $Tuple2(nil, [IntegerEntry(kBalanceA, (balanceA + amountEnrollA)), IntegerEntry(kBalanceB, (balanceB + amountEnrollB))])
653+ else throw("Strict value is not equal to itself.")
654+ }
655+ else throw("Strict value is not equal to itself.")
656+ }
657+ })
658+
659+
660+@Verifier(tx)
661+func verify () = {
662+ let multiSignedByAdmins = {
663+ let adminPubKey1Signed = if (sigVerify(tx.bodyBytes, tx.proofs[0], adminPubKey1))
664+ then 1
665+ else 0
666+ let adminPubKey2Signed = if (sigVerify(tx.bodyBytes, tx.proofs[1], adminPubKey2))
667+ then 1
668+ else 0
669+ let adminPubKey3Signed = if (sigVerify(tx.bodyBytes, tx.proofs[2], adminPubKey3))
670+ then 1
671+ else 0
672+ (((adminPubKey1Signed + adminPubKey2Signed) + adminPubKey3Signed) >= 2)
673+ }
674+ multiSignedByAdmins
675+ }
676+

github/deemru/w8io/873ac7e 
40.70 ms