tx · 8cJ4EYMU8BZc9HUWjUXJ2GKL3c6sqRRmDBggDAVhCdDZ

3N7BEKCGKtgSAqfywYKRDwQMB9yGBP9SuSe:  -0.01400000 Waves

2022.03.25 10:34 [1979168] smart account 3N7BEKCGKtgSAqfywYKRDwQMB9yGBP9SuSe > SELF 0.00000000 Waves

{ "type": 13, "id": "8cJ4EYMU8BZc9HUWjUXJ2GKL3c6sqRRmDBggDAVhCdDZ", "fee": 1400000, "feeAssetId": null, "timestamp": 1648193679790, "version": 2, "chainId": 84, "sender": "3N7BEKCGKtgSAqfywYKRDwQMB9yGBP9SuSe", "senderPublicKey": "5h6eNMEnAmx4CY8P35do6SfACsuGxcHMc1BPELwFvyFe", "proofs": [ "3rJ6xqvVQ46SAVoHvxcHzKU8RYwNpUtyFVpzTBEErHcfazjmSypzAamp19NGyaTcnjqqRTuNbDD41HphbENLhpAP", "3N1RvfCLrn2oisNHjyaEXVBwRRUJosH3frcCgqj4Fqt8sb8JbJN3fyBjgaeAKPQcP7dZ1ZUtej7t1vVwD89V9cs7" ], "script": "base64:AAIFAAAAAAAAACMIAhIAEgASBAoCAQESABIECgIBARIAEgASABIAEgUKAwQBCAAAAFIAAAAAB3ZlcnNpb24CAAAABTIuMC4wAAAAAAhrVmVyc2lvbgIAAAAHdmVyc2lvbgAAAAAHa0FjdGl2ZQIAAAAGYWN0aXZlAAAAAAlrQXNzZXRJZEECAAAACkFfYXNzZXRfaWQAAAAACWtBc3NldElkQgIAAAAKQl9hc3NldF9pZAAAAAAJa0JhbGFuY2VBAgAAAA9BX2Fzc2V0X2JhbGFuY2UAAAAACWtCYWxhbmNlQgIAAAAPQl9hc3NldF9iYWxhbmNlAAAAAA1rU2hhcmVBc3NldElkAgAAAA5zaGFyZV9hc3NldF9pZAAAAAARa1NoYXJlQXNzZXRTdXBwbHkCAAAAEnNoYXJlX2Fzc2V0X3N1cHBseQAAAAAEa0ZlZQIAAAAKY29tbWlzc2lvbgAAAAASa0ZlZVNjYWxlRGVsaW1pdGVyAgAAABpjb21taXNzaW9uX3NjYWxlX2RlbGltaXRlcgAAAAAKa0ludmFyaWFudAIAAAAJaW52YXJpYW50AAAAAAZrQ2F1c2UCAAAADnNodXRkb3duX2NhdXNlAAAAABJrZXlVU0ROTlNCVEFkZHJlc3MCAAAAGHN0YWtpbmdfdXNkbm5zYnRfYWRkcmVzcwAAAAAOa2V5RVVSTkFkZHJlc3MCAAAAFHN0YWtpbmdfZXVybl9hZGRyZXNzAAAAAA9rZXlBZG1pblB1YktleTECAAAAC2FkbWluX3B1Yl8xAAAAAA9rZXlBZG1pblB1YktleTICAAAAC2FkbWluX3B1Yl8yAAAAAA9rZXlBZG1pblB1YktleTMCAAAAC2FkbWluX3B1Yl8zAAAAABRVU0ROVG9XYXZlc0V4Y2hhbmdlcgkBAAAAB0FkZHJlc3MAAAABAQAAABoBVLyvLOw52HwgF6zPLvnW0fXFIi/xmKAk8gAAAAAGb3JhY2xlCQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFU6UWqHpAvOq7xug7mLpqSXxqYhOHzYrMIAQAAAAtnZXRBZG1pblB1YgAAAAEAAAALa2V5QWRtaW5QdWIEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAGb3JhY2xlBQAAAAtrZXlBZG1pblB1YgMJAAABAAAAAgUAAAAHJG1h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bWVBAgAAAAIsIAkAAaQAAAABCQEAAAAOYWNjb3VudEJhbGFuY2UAAAABBQAAAAhhc3NldElkQgIAAAABIAUAAAAKYXNzZXROYW1lQgEAAAAYY2FsY1N0YWtpbmdGdW5jQW5kQWRkcmVzAAAAAgAAAAVzdGFrZQAAAAdhc3NldElkAwUAAAAFc3Rha2UDCQAAAAAAAAIFAAAAB2Fzc2V0SWQFAAAABFVTRE4JAAUUAAAAAgIAAAAMbG9ja05ldXRyaW5vBQAAABZzdGFraW5nVVNETk5TQlRBZGRyZXNzCQAFFAAAAAICAAAADHN0YXJ0U3Rha2luZwUAAAASc3Rha2luZ0VVUk5BZGRyZXNzAwkAAAAAAAACBQAAAAdhc3NldElkBQAAAARVU0ROCQAFFAAAAAICAAAADnVubG9ja05ldXRyaW5vBQAAABZzdGFraW5nVVNETk5TQlRBZGRyZXNzCQAFFAAAAAICAAAAC3N0b3BTdGFraW5nBQAAABJzdGFraW5nRVVSTkFkZHJlc3MBAAAAEWNhbGNTdGFraW5nUGFyYW1zAAAAAwAAAAVzdGFrZQAAAAZhbW91bnQAAAAHYXNzZXRJZAMFAAAABXN0YWtlBAAAAAskdDA5ODUyOTkxOAkBAAAAGGNhbGNTdGFraW5nRnVuY0FuZEFkZHJlcwAAAAIFAAAABXN0YWtlBQAAAAdhc3NldElkBAAAAARjYWxsCAUAAAALJHQwOTg1Mjk5MTgAAAACXzEEAAAAC3N0YWtpbmdBZGRyCAUAAAALJHQwOTg1Mjk5MTgAAAACXzIJAAUWAAAABAUAAAAEY2FsbAUAAAALc3Rha2luZ0FkZHIFAAAAA25pbAkABEwAAAACCQEAAAAPQXR0YWNoZWRQYXltZW50AAAAAgUAAAAHYXNzZXRJZAUAAAAGYW1vdW50BQAAAANuaWwEAAAADSR0MDEwMDA0MTAwNzAJAQAAABhjYWxjU3Rha2luZ0Z1bmNBbmRBZGRyZXMAAAACBQAAAAVzdGFrZQUAAAAHYXNzZXRJZAQAAAAEY2FsbAgFAAAADSR0MDEwMDA0MTAwNzAAAAACXzEEAAAAC3N0YWtpbmdBZGRyCAUAAAANJHQwMTAwMDQxMDA3MAAAAAJfMgkABRYAAAAEBQAAAARjYWxsBQAAAAtzdGFraW5nQWRkcgkA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BQAAAAhiYWxhbmNlQgQAAAANJHQwMTMwNzkxMzE1NgkBAAAADGdldEFzc2V0SW5mbwAAAAEFAAAAC3BtdEFzc2V0SWRBBAAAAA5wbXRTdHJBc3NldElkQQgFAAAADSR0MDEzMDc5MTMxNTYAAAACXzEEAAAADXBtdEFzc2V0TmFtZUEIBQAAAA0kdDAxMzA3OTEzMTU2AAAAAl8yBAAAAAxwbXREZWNpbWFsc0EIBQAAAA0kdDAxMzA3OTEzMTU2AAAAAl8zBAAAAA0kdDAxMzE2MTEzMjc4CQEAAAAMZ2V0QXNzZXRJbmZvAAAAAQUAAAALcG10QXNzZXRJZEIEAAAADnBtdFN0ckFzc2V0SWRCCAUAAAANJHQwMTMxNjExMzI3OAAAAAJfMQQAAAANcG10QXNzZXROYW1lQggFAAAADSR0MDEzMTYxMTMyNzgAAAACXzIEAAAADHBtdERlY2ltYWxzQggFAAAADSR0MDEzMTYxMTMyNzgAAAACXzMEAAAADSR0MDEzMjgzMTM3ODcDCQAAZgAAAAIFAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkIFAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkEEAAAAA3BtdAkBAAAACGZyYWN0aW9uAAAABAUAAAAIYmFsYW5jZUIFAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkEFAAAABnNjYWxlOAUAAAAHQ0VJTElORwkABRcAAAAFCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQFAAAAA3BtdAkAAGUAAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQAAAAZhbW91bnQFAAAAA3BtdAUAAAALcG10QXNzZXRJZEIFAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkEEAAAAA3BtdAkBAAAACGZyYWN0aW9uAAAABAUAAAAIYmFsYW5jZUEFAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkIFAAAABnNjYWxlOAUAAAAHQ0VJTElORwkABRcAAAAFBQAAAANwbXQICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABAAAABmFtb3VudAkAAGUAAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAA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BQAAAAxzaGFyZUFzc2V0SWQFAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAYJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQFAAAADHNoYXJlQXNzZXRJZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAABmNoYW5nZQUAAAANY2hhbmdlQXNzZXRJZAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAVcmVwbGVuaXNoV2l0aE9uZVRva2VuAAAAAgAAABN2aXJ0dWFsU3dhcFRva2VuUGF5AAAAE3ZpcnR1YWxTd2FwVG9rZW5HZXQJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAQAAAAhpc0FjdGl2ZQAAAAAEAAAADSR0MDE1NDM2MTU1MTEJAAUUAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBAAAAAlwbXRBbW91bnQIBQAAAA0kdDAxNTQzNjE1NTExAAAAAl8xBAAAAApwbXRBc3NldElkCAUAAAANJHQwMTU0MzYxNTUxMQAAAAJfMgQAAAANJHQwMTU1MTYxNTU4OQkBAAAADGdldEFzc2V0SW5mbwAAAAEFAAAACnBtdEFzc2V0SWQEAAAADXBtdFN0ckFzc2V0SWQIBQAAAA0kdDAxNTUxNjE1NTg5AAAAAl8xBAAAAAxwbXRBc3NldE5hbWUIBQAAAA0kdDAxNTUxNjE1NTg5AAAAAl8yBAAAAAtwbXREZWNpbWFscwgFAAAADSR0MDE1NTE2MTU1ODkAAAACXzMEAAAAD3BtdE1pblRocmVzaG9sZAAAAAAAAExLQAQAAAAddGhyZXNob2xkVmFsdWVGb3JNaW5Ub2xlcmFuY2UAAAAAAAL68IAEAAAACXRvbGVyYW5jZQMJAABmAAAAAgUAAAAddGhyZXNob2xkVmFsdWVGb3JNaW5Ub2xlcmFuY2UFAAAACXBtdEFtb3VudAAAAAAAAAGGoAAAAAAAAAAAAQQAAAAcc2xpcHBhZ2VWYWx1ZU1pbkZvclJlcGxlbmlzaAkAAGUAAAACBQAAAAZzY2FsZTgJAABpAAAAAgkAAGgAAAACBQAAAAZzY2FsZTgFAAAACXRvbGVyYW5jZQAAAAAAAJiWgAQAAAAcc2xpcHBhZ2VWYWx1ZU1heEZvclJlcGxlbmlzaAkAAGQAAAACBQAAAAZzY2FsZTgJAABpAAAAAgkAAGgAAAACBQAAAAZzY2FsZTgFAAAACXRvbGVyYW5jZQAAAAAAAJiWgAQAAAAXc2xpcHBhZ2VWYWx1ZU1pbkZvclN3YXAJAABlAAAAAgUAAAAGc2NhbGU4CQAAaQAAAAIJAABoAAAAAgUAAAAGc2NhbGU4AAAAAAAAAAABAAAAAAAAmJaAAwkAAGYAAAACBQAAAA9wbXRNaW5UaHJlc2hvbGQFAAAACXBtdEFtb3VudAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAD1BheW1lbnQgYW1vdW50IAkAAaQAAAABBQAAAAlwbXRBbW91bnQCAAAAJyBkb2VzIG5vdCBleGNlZWQgdGhlIG1pbmltdW0gYW1vdW50IG9mIAkAAaQAAAABBQAAAA9wbXRNaW5UaHJlc2hvbGQCAAAAByB0b2tlbnMDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQEAAAAPdGhyb3dPbmVQYXltZW50AAAAAAMJAQAAAAEhAAAAAQUAAAAQaGFzRW5vdWdoQmFsYW5jZQkABE4AAAACCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAJcG10QW1vdW50BQAAAApwbXRBc3NldElkBQAAAANuaWwJAQAAABFzdXNwZW5kU3VzcGljaW91cwAAAAADAwkBAAAAAiE9AAAAAgUAAAAKcG10QXNzZXRJZAUAAAAIYXNzZXRJZEEJAQAAAAIhPQAAAAIFAAAACnBtdEFzc2V0SWQFAAAACGFzc2V0SWRCBwkBAAAAC3Rocm93QXNzZXRzAAAAAAQAAAANJHQwMTY1MjcxNzI5MgMJAAAAAAAAAgUAAAAKcG10QXNzZXRJZAUAAAAIYXNzZXRJZEEJAAUZAAAABwkAAGUAAAACBQAAAAlwbXRBbW91bnQFAAAAE3ZpcnR1YWxTd2FwVG9rZW5QYXkFAAAAE3ZpcnR1YWxTd2FwVG9rZW5HZXQJAABkAAAAAgUAAAAIYmFsYW5jZUEFAAAAE3ZpcnR1YWxTd2FwVG9rZW5QYXkJAABlAAAAAgUAAAAIYmFsYW5jZUIFAAAAE3ZpcnR1YWxTd2FwVG9rZW5HZXQJAQAAAA1pbnZhcmlhbnRDYWxjAAAAAgkAAGQAAAACBQAAAAhiYWxhbmNlQQUAAAAJcG10QW1vdW50BQAAAAhiYWxhbmNlQgkAAGQAAAACBQAAAAhiYWxhbmNlQQUAAAAJcG10QW1vdW50BQAAAAhiYWxhbmNlQgkABRkAAAAHBQAAABN2aXJ0dWFsU3dhcFRva2VuR2V0CQAAZQAAAAIFAAAACXBtdEFtb3VudAUAAAATdmlydHVhbFN3YXBUb2tlblBheQkAAGUAAAACBQAAAAhiYWxhbmNlQQUAAAATdmlydHVhbFN3YXBUb2tlbkdldAkAAGQAAAACBQAAAAhiYWxhbmNlQgUAAAATdmlydHVhbFN3YXBUb2tlblBheQkBAAAADWludmFyaWFudENhbGMAAAACBQAAAAhiYWxhbmNlQQkAAGQAAAACBQAAAAhiYWxhbmNlQgUAAAAJcG10QW1vdW50BQAAAAhiYWxhbmNlQQkAAGQAAAACBQAAAAhiYWxhbmNlQgUAAAAJcG10QW1vdW50BAAAABF2aXJ0dWFsUmVwbGVuaXNoQQgFAAAADSR0MDE2NTI3MTcyOTIAAAACXzEEAAAAEXZpcnR1YWxSZXBsZW5pc2hCCAUAAAANJHQwMTY1MjcxNzI5MgAAAAJfMgQAAAARYmFsYW5jZUFmdGVyU3dhcEEIBQAAAA0kdDAxNjUyNzE3MjkyAAAAAl8zBAAAABFiYWxhbmNlQWZ0ZXJTd2FwQggFAAAADSR0MDE2NTI3MTcyOTIAAAACXzQEAAAAE2ludmFyaWFudENhbGN1bGF0ZWQIBQAAAA0kdDAxNjUyNzE3MjkyAAAAAl81BAAAAAtuZXdCYWxhbmNlQQgFAAAADSR0MDE2NTI3MTcyOTIAAAACXzYEAAAAC25ld0JhbGFuY2VCCAUAAAANJHQwMTY1MjcxNzI5MgAAAAJfNwQAAAAPbmV3QmFsYW5jZUVudHJ5AwkAAAAAAAACBQAAAApwbXRBc3NldElkBQAAAAhhc3NldElkQQkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAACWtCYWxhbmNlQQUAAAALbmV3QmFsYW5jZUEJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAlrQmFsYW5jZUIFAAAAC25ld0JhbGFuY2VCBAAAAAxpbnZhcmlhbnROZXcJAQAAAA1pbnZhcmlhbnRDYWxjAAAAAgUAAAARYmFsYW5jZUFmdGVyU3dhcEEFAAAAEWJhbGFuY2VBZnRlclN3YXBCBAAAABdpbnZhcmlhbnRFc3RpbWF0ZWRSYXRpbwkAAGsAAAADBQAAAAZzY2FsZTgFAAAACWludmFyaWFudAUAAAAMaW52YXJpYW50TmV3BAAAACVyYXRpb1ZpcnR1YWxCYWxhbmNlVG9WaXJ0dWFsUmVwbGVuaXNoCQAAaQAAAAIJAABrAAAAAwkAAGgAAAACBQAAAAZzY2FsZTgFAAAABnNjYWxlOAUAAAARYmFsYW5jZUFmdGVyU3dhcEEFAAAAEWJhbGFuY2VBZnRlclN3YXBCCQAAawAAAAMFAAAABnNjYWxlOAUAAAARdmlydHVhbFJlcGxlbmlzaEEFAAAAEXZpcnR1YWxSZXBsZW5pc2hCBAAAABNkQXBwVGhyZXNob2xkQW1vdW50CQAAawAAAAMJAABkAAAAAgUAAAALbmV3QmFsYW5jZUEFAAAAC25ld0JhbGFuY2VCBQAAAA1kQXBwVGhyZXNob2xkCQAAaAAAAAIAAAAAAAAAAAIFAAAAE2RBcHBUaHJlc2hvbGRTY2FsZTIDAwkAAGcAAAACBQAAABdzbGlwcGFnZVZhbHVlTWluRm9yU3dhcAUAAAAXaW52YXJpYW50RXN0aW1hdGVkUmF0aW8GCQAAZgAAAAIFAAAACWludmFyaWFudAUAAAAMaW52YXJpYW50TmV3CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAOkluY29ycmVjdCB2aXJ0dWFsU3dhcFRva2VuUGF5IG9yIHZpcnR1YWxTd2FwVG9rZW5HZXQgdmFsdWUCAAAAGiBpbnZhcmlhbnRFc3RpbWF0ZWRSYXRpbzogCQABpAAAAAEFAAAAF2ludmFyaWFudEVzdGltYXRlZFJhdGlvAgAAAA8gaW52YXJpYW50TmV3OiAJAAGkAAAAAQUAAAAMaW52YXJpYW50TmV3AgAAAAwgaW52YXJpYW50OiAJAAGkAAAAAQUAAAAJaW52YXJpYW50AwMJAABmAAAAAgUAAAAcc2xpcHBhZ2VWYWx1ZU1pbkZvclJlcGxlbmlzaAUAAAAlcmF0aW9WaXJ0dWFsQmFsYW5jZVRvVmlydHVhbFJlcGxlbmlzaAYJAABmAAAAAgUAAAAlcmF0aW9WaXJ0dWFsQmFsYW5jZVRvVmlydHVhbFJlcGxlbmlzaAUAAAAcc2xpcHBhZ2VWYWx1ZU1heEZvclJlcGxlbmlzaAkAAAIAAAABAgAAAGxTd2FwIHdpdGggdmlydHVhbFN3YXBUb2tlblBheSBhbmQgdmlydHVhbFN3YXBUb2tlbkdldCBpcyBwb3NzaWJsZSwgYnV0IHJhdGlvIGFmdGVyIHZpcnR1YWwgc3dhcCBpcyBpbmNvcnJlY3QDAwkAAGYAAAACBQAAABNkQXBwVGhyZXNob2xkQW1vdW50BQAAAAtuZXdCYWxhbmNlQQYJAABmAAAAAgUAAAATZEFwcFRocmVzaG9sZEFtb3VudAUAAAALbmV3QmFsYW5jZUIJAQAAAA50aHJvd1RocmVzaG9sZAAAAAMFAAAAE2RBcHBUaHJlc2hvbGRBbW91bnQFAAAAC25ld0JhbGFuY2VBBQAAAAtuZXdCYWxhbmNlQgQAAAAGc3Rha2UxAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAADXN0YWtpbmdBc3NldHMFAAAADXBtdFN0ckFzc2V0SWQJAAP8AAAABAUAAAAEdGhpcwIAAAAMc3Rha2VVbnN0YWtlCQAETAAAAAIGCQAETAAAAAIFAAAACXBtdEFtb3VudAkABEwAAAACBQAAAA1wbXRTdHJBc3NldElkBQAAAANuaWwFAAAAA25pbAAAAAAAAAAAAAMJAAAAAAAAAgUAAAAGc3Rha2UxBQAAAAZzdGFrZTEEAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkEJAABrAAAAAwUAAAARdmlydHVhbFJlcGxlbmlzaEEFAAAABnNjYWxlOAUAAAARYmFsYW5jZUFmdGVyU3dhcEEEAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkIJAABrAAAAAwUAAAARdmlydHVhbFJlcGxlbmlzaEIFAAAABnNjYWxlOAUAAAARYmFsYW5jZUFmdGVyU3dhcEIEAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAkAAGsAAAADCQABlwAAAAEJAARMAAAAAgUAAAATcmF0aW9TaGFyZVRva2Vuc0luQQkABEwAAAACBQAAABNyYXRpb1NoYXJlVG9rZW5zSW5CBQAAAANuaWwFAAAAEHNoYXJlQXNzZXRTdXBwbHkFAAAABnNjYWxlOAkABEwAAAACCQEAAAAHUmVpc3N1ZQAAAAMFAAAADHNoYXJlQXNzZXRJZAUAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50BgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAUAAAAMc2hhcmVBc3NldElkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABFrU2hhcmVBc3NldFN1cHBseQkAAGQAAAACBQAAABBzaGFyZUFzc2V0U3VwcGx5BQAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQJAARMAAAAAgUAAAAPbmV3QmFsYW5jZUVudHJ5CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAprSW52YXJpYW50BQAAABNpbnZhcmlhbnRDYWxjdWxhdGVkBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAACHdpdGhkcmF3AAAAAAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAACGlzQWN0aXZlAAAAAAQAAAANJHQwMTk3MjExOTc5NgkABRQAAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQEAAAACXBtdEFtb3VudAgFAAAADSR0MDE5NzIxMTk3OTYAAAACXzEEAAAACnBtdEFzc2V0SWQIBQAAAA0kdDAxOTcyMTE5Nzk2AAAAAl8yBAAAAAxhbW91bnRUb1BheUEJAABrAAAAAwUAAAAJcG10QW1vdW50BQAAAAhiYWxhbmNlQQUAAAAQc2hhcmVBc3NldFN1cHBseQQAAAAMYW1vdW50VG9QYXlCCQAAawAAAAMFAAAACXBtdEFtb3VudAUAAAAIYmFsYW5jZUIFAAAAEHNoYXJlQXNzZXRTdXBwbHkEAAAAE2ludmFyaWFudENhbGN1bGF0ZWQJAQAAAA1pbnZhcmlhbnRDYWxjAAAAAgkAAGUAAAACBQAAAAhiYWxhbmNlQQUAAAAMYW1vdW50VG9QYXlBCQAAZQAAAAIFAAAACGJhbGFuY2VCBQAAAAxhbW91bnRUb1BheUIDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQEAAAAPdGhyb3dPbmVQYXltZW50AAAAAAMJAQAAAAIhPQAAAAIFAAAACnBtdEFzc2V0SWQFAAAADHNoYXJlQXNzZXRJZAkAAAIAAAABCQABLAAAAAICAAAAJEluY29ycmVjdCBhc3NldCBhdHRhY2hlZC4gRXhwZWN0ZWQ6IAkAAlgAAAABBQAAAAxzaGFyZUFzc2V0SWQDCQEAAAABIQAAAAEFAAAAEGhhc0Vub3VnaEJhbGFuY2UJAAROAAAAAgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAACXBtdEFtb3VudAUAAAAKcG10QXNzZXRJZAUAAAADbmlsCQEAAAARc3VzcGVuZFN1c3BpY2lvdXMAAAAABAAAAAZzdGFrZTEDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAANc3Rha2luZ0Fzc2V0cwUAAAALc3RyQXNzZXRJZEEJAAP8AAAABAUAAAAEdGhpcwIAAAAMc3Rha2VVbnN0YWtlCQAETAAAAAIHCQAETAAAAAIFAAAADGFtb3VudFRvUGF5QQkABEwAAAACBQAAAAtzdHJBc3NldElkQQUAAAADbmlsBQAAAANuaWwAAAAAAAAAAAADCQAA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c3BlbmRTdXNwaWNpb3VzAAAAAAMDCQEAAAACIT0AAAACBQAAAApwbXRBc3NldElkBQAAAAhhc3NldElkQQkBAAAAAiE9AAAAAgUAAAAKcG10QXNzZXRJZAUAAAAIYXNzZXRJZEIHCQEAAAALdGhyb3dBc3NldHMAAAAAAwkAAGYAAAACAAAAAAAAmJaABQAAAAlwbXRBbW91bnQJAAACAAAAAQIAAAAwT25seSBzd2FwIG9mIDEwLjAwMDAwMCBvciBtb3JlIHRva2VucyBpcyBhbGxvd2VkAwMJAABmAAAAAgUAAAAVZXhjaGFuZ2VSYXRpb0xpbWl0TWluCQAAawAAAAMFAAAABnNjYWxlOAUAAAASbWluQW1vdW50VG9SZWNlaXZlBQAAAAlwbXRBbW91bnQGCQAAZgAAAAIJAABrAAAAAwUAAAAGc2NhbGU4BQAAABhlc3RpbWF0ZWRBbW91bnRUb1JlY2VpdmUFAAAACXBtdEFtb3VudAUAAAAVZXhjaGFuZ2VSYXRpb0xpbWl0TWF4CQAAAgAAAAECAAAAHEluY29ycmVjdCBhcmdzIGFuZCBwbXQgcmF0aW8EAAAAC3NlbmRBc3NldElkAwkAAAAAAAACBQAAAApwbXRBc3NldElkBQAAAAhhc3NldElkQQUAAAAIYXNzZXRJZEIFAAAACGFzc2V0SWRBBAAAAAZhbW91bnQJAQAAABNjYWxjdWxhdGVTZW5kQW1vdW50AAAABAUAAAAYZXN0aW1hdGVkQW1vdW50VG9SZWNlaXZlBQAAABJtaW5BbW91bnRUb1JlY2VpdmUFAAAACXBtdEFtb3VudAUAAAAKcG10QXNzZXRJZAQAAAAQZ292ZXJuYW5jZVJld2FyZAkAAGsAAAADBQAAAAZhbW91bnQFAAAADWZlZUdvdmVybmFuY2UFAAAACWZlZVNjYWxlNgQAAAAOYW1vdW50TWludXNGZWUJAABrAAAAAwUAAAAGYW1vdW50CQAAZQAAAAIFAAAACWZlZVNjYWxlNgUAAAADZmVlBQAAAAlmZWVTY2FsZTYEAAAADSR0MDIyNjgyMjI5NDQDCQAAAAAAAAIFAAAACnBtdEFzc2V0SWQFAAAACGFzc2V0SWRBCQAFFAAAAAIJAABkAAAAAgUAAAAIYmFsYW5jZUEFAAAACXBtdEFtb3VudAkAAGUAAAACCQAAZQAAAAIFAAAACGJhbGFuY2VCBQAAAA5hbW91bnRNaW51c0ZlZQUAAAAQZ292ZXJuYW5jZVJld2FyZAkABRQAAAACCQAAZQAAAAIJAABlAAAAAgUAAAAIYmFsYW5jZUEFAAAADmFtb3VudE1pbnVzRmVlBQAAABBnb3Zlcm5hbmNlUmV3YXJkCQAAZAAAAAIFAAAACGJhbGFuY2VCBQAAAAlwbXRBbW91bnQEAAAAC25ld0JhbGFuY2VBCAUAAAANJHQwMjI2ODIyMjk0NAAAAAJfMQQAAAALbmV3QmFsYW5jZUIIBQAAAA0kdDAyMjY4MjIyOTQ0AAAAAl8yBAAAABNkQXBwVGhyZXNob2xkQW1vdW50CQAAawAAAAMJAABkAAAAAgUAAAALbmV3QmFsYW5jZUEFAAAAC25ld0JhbGFuY2VCBQAAAA1kQXBwVGhyZXNob2xkCQAAaAAAAAIAAAAAAAAAAAIFAAAAE2RBcHBUaHJlc2hvbGRTY2FsZTIDAwkAAGYAAAACBQAAABNkQXBwVGhyZXNob2xkQW1vdW50BQAAAAtuZXdCYWxhbmNlQQYJAABmAAAAAgUAAAATZEFwcFRocmVzaG9sZEFtb3VudAUAAAALbmV3QmFsYW5jZUIJAQAAAA50aHJvd1RocmVzaG9sZAAAAAMFAAAAE2RBcHBUaHJlc2hvbGRBbW91bnQFAAAAC25ld0JhbGFuY2VBBQAAAAtuZXdCYWxhbmNlQgQAAAANJHQwMjMyNDIyMzMxNQkBAAAADGdldEFzc2V0SW5mbwAAAAEFAAAACnBtdEFzc2V0SWQEAAAADXBtdFN0ckFzc2V0SWQIBQAAAA0kdDAyMzI0MjIzMzE1AAAAAl8xBAAAAAxwbXRBc3NldE5hbWUIBQAAAA0kdDAyMzI0MjIzMzE1AAAAAl8yBAAAAAtwbXREZWNpbWFscwgFAAAADSR0MDIzMjQyMjMzMTUAAAACXzMEAAAADSR0MDIzMzI4MjM0MDUJAQAAAAxnZXRBc3NldEluZm8AAAABBQAAAAtzZW5kQXNzZXRJZAQAAAAOc2VuZFN0ckFzc2V0SWQIBQAAAA0kdDAyMzMyODIzNDA1AAAAAl8xBAAAAA1zZW5kQXNzZXROYW1lCAUAAAANJHQwMjMzMjgyMzQwNQAAAAJfMgQAAAAMc2VuZERlY2ltYWxzCAUAAAANJHQwMjMzMjgyMzQwNQAAAAJfMwQAAAAGc3Rha2UxAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAADXN0YWtpbmdBc3NldHMFAAAADXBtdFN0ckFzc2V0SWQJAAP8AAAABAUAAAAEdGhpcwIAAAAMc3Rha2VVbnN0YWtlCQAETAAAAAIGCQAETAAAAAIFAAAACXBtdEFtb3VudAkABEwAAAACBQAAAA1wbXRTdHJBc3NldElkBQAAAANuaWwFAAAAA25pbAAAAAAAAAAAAAMJAAAAAAAAAgUAAAAGc3Rha2UxBQAAAAZzdGFrZTEEAAAABnN0YWtlMgMJAQAAAA9jb250YWluc0VsZW1lbnQAAAACBQAAAA1zdGFraW5nQXNzZXRzBQAAAA5zZW5kU3RyQXNzZXRJZAkAA/wAAAAEBQAAAAR0aGlzAgAAAAxzdGFrZVVuc3Rha2UJAARMAAAAAgcJAARMAAAAAgkAAGQAAAACBQAAAA5hbW91bnRNaW51c0ZlZQUAAAAQZ292ZXJuYW5jZVJld2FyZAkABEwAAAACBQAAAA5zZW5kU3RyQXNzZXRJZAUAAAADbmlsBQAAAANuaWwAAAAAAAAAAAADCQAAAAAAAAIFAAAABnN0YWtlMgUAAAAGc3Rha2UyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAlrQmFsYW5jZUEFAAAAC25ld0JhbGFuY2VBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAlrQmFsYW5jZUIFAAAAC25ld0JhbGFuY2VCCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAprSW52YXJpYW50CQEAAAANaW52YXJpYW50Q2FsYwAAAAIFAAAAC25ld0JhbGFuY2VBBQAAAAtuZXdCYWxhbmNlQgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADmFtb3VudE1pbnVzRmVlBQAAAAtzZW5kQXNzZXRJZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAA13YWxsZXRBZGRyZXNzBQAAABBnb3Zlcm5hbmNlUmV3YXJkBQAAAAtzZW5kQXNzZXRJZAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAIc2h1dGRvd24AAAAACQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAALaXNBZG1pbkNhbGwAAAABBQAAAAFpAwkBAAAAASEAAAABBQAAAAZhY3RpdmUJAAACAAAAAQkAASwAAAACAgAAACJEQXBwIGlzIGFscmVhZHkgc3VzcGVuZGVkLiBDYXVzZTogCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAABmtDYXVzZQIAAAAadGhlIGNhdXNlIHdhc24ndCBzcGVjaWZpZWQJAQAAAAdzdXNwZW5kAAAAAQIAAAAPUGF1c2VkIGJ5IGFkbWluAAAAAWkBAAAACGFjdGl2YXRlAAAAAAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAAC2lzQWRtaW5DYWxsAAAAAQUAAAABaQMFAAAABmFjdGl2ZQkBAAAADXRocm93SXNBY3RpdmUAAAAACQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAAAdrQWN0aXZlBgkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABBQAAAAZrQ2F1c2UFAAAAA25pbAAAAAFpAQAAABl0YWtlSW50b0FjY291bnRFeHRyYUZ1bmRzAAAAAAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkBAAAACGlzQWN0aXZlAAAAAAQAAAANYW1vdW50RW5yb2xsQQkAAGUAAAACBQAAABlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRBBQAAAAhiYWxhbmNlQQQAAAANYW1vdW50RW5yb2xsQgkAAGUAAAACBQAAABlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRCBQAAAAhiYWxhbmNlQgQAAAAMaW52YXJpYW50TmV3CQEAAAANaW52YXJpYW50Q2FsYwAAAAIJAABkAAAAAgUAAAAIYmFsYW5jZUEFAAAADWFtb3VudEVucm9sbEEJAABkAAAAAgUAAAAIYmFsYW5jZUIFAAAADWFtb3VudEVucm9sbEIDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAADXdhbGxldEFkZHJlc3MJAAACAAAAAQIAAAAmT25seSB0aGUgd2FsbGV0IGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24DAwkAAGYAAAACAAAAAAAAAAAABQAAAA1hbW91bnRFbnJvbGxBBgkAAGYAAAACAAAAAAAAAAAABQAAAA1hbW91bnRFbnJvbGxCCQEAAAAHc3VzcGVuZAAAAAECAAAAFkVucm9sbCBhbW91bnQgbmVnYXRpdmUDAwkAAAAAAAACBQAAAA1hbW91bnRFbnJvbGxBAAAAAAAAAAAACQAAAAAAAAIFAAAADWFtb3VudEVucm9sbEIAAAAAAAAAAAAHCQAAAgAAAAECAAAAEE5vIG1vbmV5IHRvIHRha2UEAAAABnN0YWtlMQMDCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgUAAAANc3Rha2luZ0Fzc2V0cwUAAAALc3RyQXNzZXRJZEEJAABmAAAAAgUAAAANYW1vdW50RW5yb2xsQQAAAAAAAAAAAAcJAAP8AAAABAUAAAAEdGhpcwIAAAAMc3Rha2VVbnN0YWtlCQAETAAAAAIGCQAETAAAAAIFAAAADWFtb3VudEVucm9sbEEJAARMAAAAAgUAAAALc3RyQXNzZXRJZEEFAAAAA25pbAUAAAADbmlsAAAAAAAAAAAAAwkAAAAAAAACBQAAAAZzdGFrZTEFAAAABnN0YWtlMQQAAAAGc3Rha2UyAwMJAQAAAA9jb250YWluc0VsZW1lbnQAAAACBQAAAA1zdGFraW5nQXNzZXRzBQAAAAtzdHJBc3NldElkQgkAAGYAAAACBQAAAA1hbW91bnRFbnJvbGxCAAAAAAAAAAAABwkAA/wAAAAEBQAAAAR0aGlzAgAAAAxzdGFrZVVuc3Rha2UJAARMAAAAAgYJAARMAAAAAgUAAAANYW1vdW50RW5yb2xsQgkABEwAAAACBQAAAAtzdHJBc3NldElkQgUAAAADbmlsBQAAAANuaWwAAAAAAAAAAAADCQAAAAAAAAIFAAAABnN0YWtlMgUAAAAGc3Rha2UyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAprSW52YXJpYW50BQAAAAxpbnZhcmlhbnROZXcJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAACWtCYWxhbmNlQQkAAGQAAAACBQAAAAhiYWxhbmNlQQUAAAANYW1vdW50RW5yb2xsQQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAJa0JhbGFuY2VCCQAAZAAAAAIFAAAACGJhbGFuY2VCBQAAAA1hbW91bnRFbnJvbGxCCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAADGxhc3RfaW5jb21lXwUAAAALc3RyQXNzZXRJZEEFAAAADWFtb3VudEVucm9sbEEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgIAAAAMbGFzdF9pbmNvbWVfBQAAAAtzdHJBc3NldElkQgUAAAANYW1vdW50RW5yb2xsQgUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAUd3JpdGVCaWdJbnRJbnZhcmlhbnQAAAAACQEAAAALdmFsdWVPckVsc2UAAAACCQEAAAALaXNBZG1pbkNhbGwAAAABBQAAAAFpBAAAAAxpbnZhcmlhbnROZXcJAQAAAA1pbnZhcmlhbnRDYWxjAAAAAgUAAAAIYmFsYW5jZUEFAAAACGJhbGFuY2VCCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAprSW52YXJpYW50BQAAAAxpbnZhcmlhbnROZXcFAAAAA25pbAAAAAFpAQAAAAxzdGFrZVVuc3Rha2UAAAADAAAABXN0YWtlAAAABmFtb3VudAAAAA1hc3NldElkU3RyaW5nAwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAR0aGlzCQAAAgAAAAECAAAALU9ubHkgY29udHJhY3QgaXRzZWxmIGNhbiBpbnZva2UgdGhpcyBmdW5jdGlvbgQAAAANJHQwMjYzOTQyNjQ5NwkBAAAAEWNhbGNTdGFraW5nUGFyYW1zAAAAAwUAAAAFc3Rha2UFAAAABmFtb3VudAkAAlkAAAABBQAAAA1hc3NldElkU3RyaW5nBAAAAARjYWxsCAUAAAANJHQwMjYzOTQyNjQ5NwAAAAJfMQQAAAAEYWRkcggFAAAADSR0MDI2Mzk0MjY0OTcAAAACXzIEAAAABnBhcmFtcwgFAAAADSR0MDI2Mzk0MjY0OTcAAAACXzMEAAAACHBheW1lbnRzCAUAAAANJHQwMjYzOTQyNjQ5NwAAAAJfNAQAAAADaW52CQAD/AAAAAQFAAAABGFkZHIFAAAABGNhbGwFAAAABnBhcmFtcwUAAAAIcGF5bWVudHMDCQAAAAAAAAIFAAAAA2ludgUAAAADaW52BQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAQAAAATbXVsdGlTaWduZWRCeUFkbWlucwQAAAASYWRtaW5QdWJLZXkxU2lnbmVkAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAFAAAADGFkbWluUHViS2V5MQAAAAAAAAAAAQAAAAAAAAAAAAQAAAASYWRtaW5QdWJLZXkyU2lnbmVkAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAEFAAAADGFkbWluUHViS2V5MgAAAAAAAAAAAQAAAAAAAAAAAAQAAAASYWRtaW5QdWJLZXkzU2lnbmVkAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAIFAAAADGFkbWluUHViS2V5MwAAAAAAAAAAAQAAAAAAAAAAAAkAAGcAAAACCQAAZAAAAAIJAABkAAAAAgUAAAASYWRtaW5QdWJLZXkxU2lnbmVkBQAAABJhZG1pblB1YktleTJTaWduZWQFAAAAEmFkbWluUHViS2V5M1NpZ25lZAAAAAAAAAAAAgQAAAAHJG1hdGNoMAUAAAACdHgDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAF0ludm9rZVNjcmlwdFRyYW5zYWN0aW9uBAAAAANpbnYFAAAAByRtYXRjaDAEAAAAE2NhbGxUYWtlSW50b0FjY291bnQDCQAAAAAAAAIIBQAAAANpbnYAAAAEZEFwcAUAAAAEdGhpcwkAAAAAAAACCAUAAAADaW52AAAACGZ1bmN0aW9uAgAAABl0YWtlSW50b0FjY291bnRFeHRyYUZ1bmRzBwQAAAANc2lnbmVkQnlBZG1pbgMDAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAFAAAADGFkbWluUHViS2V5MQYJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAABQAAAAxhZG1pblB1YktleTIGCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAUAAAAMYWRtaW5QdWJLZXkzBgkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAFAAAACmFkbVN0YWtpbmcDAwUAAAATY2FsbFRha2VJbnRvQWNjb3VudAUAAAANc2lnbmVkQnlBZG1pbgcGBQAAABNtdWx0aVNpZ25lZEJ5QWRtaW5zBQAAABNtdWx0aVNpZ25lZEJ5QWRtaW5zRctgIw==", "height": 1979168, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5yHdxw2eD3cVJ9kxJnGPabQ1vQLeFrNqmJJEwbp6BzUW Next: none Diff:
OldNewDifferences
254254 else if ((aJ == O))
255255 then aD((T - aG), aC)
256256 else throw("Wrong asset in payment")
257- let aT = if ((X > aS))
257+ if ((X > aS))
258258 then if ((aK >= fraction(ac, X, aS)))
259- then throw("Bad estimation provided 1")
259+ then throw("The requested price is too not profitable for user")
260260 else {
261- let aU = {
262- let aV = [25, 200, 500]
263- let aW = size(aV)
264- let aX = $Tuple2(-1, 0)
265- func aY (aZ,ba) = if ((ba >= aW))
266- then aZ
267- else aM(aZ, aV[ba])
261+ let aT = {
262+ let aU = [25, 200, 500]
263+ let aV = size(aU)
264+ let aW = $Tuple2(-1, 0)
265+ func aX (aY,aZ) = if ((aZ >= aV))
266+ then aY
267+ else aM(aY, aU[aZ])
268268
269- func bb (aZ,ba) = if ((ba >= aW))
270- then aZ
269+ func ba (aY,aZ) = if ((aZ >= aV))
270+ then aY
271271 else throw("List size exceeds 3")
272272
273- bb(aY(aY(aY(aX, 0), 1), 2), 3)
273+ ba(aX(aX(aX(aW, 0), 1), 2), 3)
274274 }
275- if ((0 > aU._1))
276- then aR
277- else aU
275+ if ((0 > aT._1))
276+ then aR._1
277+ else aT._1
278278 }
279279 else {
280- let aU = {
281- let aV = [-500, -200, -25]
282- let aW = size(aV)
283- let aX = $Tuple2(-1, 0)
284- func aY (aZ,ba) = if ((ba >= aW))
285- then aZ
286- else aM(aZ, aV[ba])
280+ let aT = {
281+ let aU = [-500, -200, -25]
282+ let aV = size(aU)
283+ let aW = $Tuple2(-1, 0)
284+ func aX (aY,aZ) = if ((aZ >= aV))
285+ then aY
286+ else aM(aY, aU[aZ])
287287
288- func bb (aZ,ba) = if ((ba >= aW))
289- then aZ
288+ func ba (aY,aZ) = if ((aZ >= aV))
289+ then aY
290290 else throw("List size exceeds 3")
291291
292- bb(aY(aY(aY(aX, 0), 1), 2), 3)
292+ ba(aX(aX(aX(aW, 0), 1), 2), 3)
293293 }
294- let bc = if ((0 > aU._1))
294+ let bb = if ((0 > aT._1))
295295 then $Tuple2(aG, aS)
296- else aU
297- if ((aK >= fraction(ac, X, bc._2)))
298- then throw("Bad estimation provided 2")
299- else bc
296+ else aT
297+ if ((aK >= fraction(ac, X, bb._2)))
298+ then throw("The requested price is too not profitable for user")
299+ else bb._1
300300 }
301- aT
302301 }
303302 }
304303
305304
306-func bd (ao) = {
305+func bc (ao) = {
307306 let w = ao
308307 if ($isInstanceOf(w, "ByteVector"))
309308 then {
310309 let Q = w
311- let be = toBase58String(Q)
312- let bf = valueOrErrorMessage(assetInfo(Q), (("Asset " + be) + " doesn't exist"))
313- $Tuple3(be, bf.name, bf.decimals)
310+ let bd = toBase58String(Q)
311+ let be = valueOrErrorMessage(assetInfo(Q), (("Asset " + bd) + " doesn't exist"))
312+ $Tuple3(bd, be.name, be.decimals)
314313 }
315314 else if ($isInstanceOf(w, "Unit"))
316315 then {
321320 }
322321
323322
324-func bg (bh) = [BooleanEntry(c, false), StringEntry(m, bh)]
323+func bf (bg) = [BooleanEntry(c, false), StringEntry(m, bg)]
325324
326325
327-func bi () = throw("DApp is already active")
326+func bh () = throw("DApp is already active")
328327
329328
330-func bj () = if (K)
329+func bi () = if (K)
331330 then unit
332331 else throw("DApp is inactive at this moment")
333332
334333
335-func bk (as) = if (containsElement([z, A, B], as.callerPublicKey))
334+func bj (as) = if (containsElement([z, A, B], as.callerPublicKey))
336335 then unit
337336 else throw("Only admin can call this function")
338337
339338
340-func bl () = throw(((("Incorrect assets attached. Expected: " + L) + " and ") + M))
339+func bk () = throw(((("Incorrect assets attached. Expected: " + L) + " and ") + M))
341340
342341
343-func bm () = throw("One attached payment expected")
342+func bl () = throw("One attached payment expected")
344343
345344
346-func bn (bo,bp,bq) = throw(((((((((("New balance in assets of the DApp is less than threshold " + toString(bo)) + ": ") + toString(bp)) + " ") + P) + ", ") + toString(bq)) + " ") + S))
345+func bm (bn,bo,bp) = throw(((((((((("New balance in assets of the DApp is less than threshold " + toString(bn)) + ": ") + toString(bo)) + " ") + P) + ", ") + toString(bp)) + " ") + S))
347346
348347
349-func br () = bg(((((((((((((((("Suspicious state. Actual balances: " + toString(T)) + " ") + P) + ", ") + toString(U)) + " ") + S) + ". State: ") + toString(an(N))) + " ") + P) + ", ") + toString(an(O))) + " ") + S))
348+func bq () = bf(((((((((((((((("Suspicious state. Actual balances: " + toString(T)) + " ") + P) + ", ") + toString(U)) + " ") + S) + ". State: ") + toString(an(N))) + " ") + P) + ", ") + toString(an(O))) + " ") + S))
350349
351350
352-func bs (bt,ao) = if (bt)
351+func br (bs,ao) = if (bs)
353352 then if ((ao == F))
354353 then $Tuple2("lockNeutrino", I)
355354 else $Tuple2("startStaking", J)
358357 else $Tuple2("stopStaking", J)
359358
360359
361-func bu (bt,bv,ao) = if (bt)
360+func bt (bs,bu,ao) = if (bs)
362361 then {
363- let bw = bs(bt, ao)
364- let bx = bw._1
365- let by = bw._2
366- $Tuple4(bx, by, nil, [AttachedPayment(ao, bv)])
362+ let bv = br(bs, ao)
363+ let bw = bv._1
364+ let bx = bv._2
365+ $Tuple4(bw, bx, nil, [AttachedPayment(ao, bu)])
367366 }
368367 else {
369- let bz = bs(bt, ao)
370- let bx = bz._1
371- let by = bz._2
372- $Tuple4(bx, by, [bv, toBase58String(ao)], nil)
368+ let by = br(bs, ao)
369+ let bw = by._1
370+ let bx = by._2
371+ $Tuple4(bw, bx, [bu, toBase58String(ao)], nil)
373372 }
374373
375374
376375 @Callable(as)
377376 func init () = {
378- let bA = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
379- let bB = bA._1
380- let bC = bA._2
381- let bD = $Tuple2(as.payments[1].amount, as.payments[1].assetId)
382- let bE = bD._1
383- let bF = bD._2
384- let bG = bd(bC)
385- let bH = bG._1
386- let bI = bG._2
387- let bJ = bG._3
388- let bK = bd(bF)
389- let bL = bK._1
390- let bM = bK._2
391- let bN = bK._3
377+ let bz = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
378+ let bA = bz._1
379+ let bB = bz._2
380+ let bC = $Tuple2(as.payments[1].amount, as.payments[1].assetId)
381+ let bD = bC._1
382+ let bE = bC._2
383+ let bF = bc(bB)
384+ let bG = bF._1
385+ let bH = bF._2
386+ let bI = bF._3
387+ let bJ = bc(bE)
388+ let bK = bJ._1
389+ let bL = bJ._2
390+ let bM = bJ._3
392391 if (isDefined(getBoolean(this, c)))
393- then bi()
394- else if ((bC == bF))
392+ then bh()
393+ else if ((bB == bE))
395394 then throw("Assets must be different")
396395 else {
397- let bO = ((("s" + take(bI, 7)) + "_") + take(bM, 7))
398- let bP = ((((("ShareToken of SwopFi protocol for " + bI) + " and ") + bM) + " at address ") + toString(this))
399- let bQ = ((bJ + bN) / 2)
400- let bR = fraction(pow(bB, bJ, 5, 1, bJ, DOWN), pow(bE, bN, 5, 1, bN, DOWN), pow(10, 0, bQ, 0, 0, DOWN))
401- let bS = Issue(bO, bP, bR, bQ, true)
402- let bT = calculateAssetId(bS)
403- let bU = aD(bB, bE)
404- let bV = if (containsElement(H, bH))
405- then invoke(this, "stakeUnstake", [true, bB, bH], nil)
396+ let bN = ((("s" + take(bH, 7)) + "_") + take(bL, 7))
397+ let bO = ((((("ShareToken of SwopFi protocol for " + bH) + " and ") + bL) + " at address ") + toString(this))
398+ let bP = ((bI + bM) / 2)
399+ let bQ = fraction(pow(bA, bI, 5, 1, bI, DOWN), pow(bD, bM, 5, 1, bM, DOWN), pow(10, 0, bP, 0, 0, DOWN))
400+ let bR = Issue(bN, bO, bQ, bP, true)
401+ let bS = calculateAssetId(bR)
402+ let bT = aD(bA, bD)
403+ let bU = if (containsElement(H, bG))
404+ then invoke(this, "stakeUnstake", [true, bA, bG], nil)
406405 else 0
407- if ((bV == bV))
406+ if ((bU == bU))
408407 then {
409- let bW = if (containsElement(H, bL))
410- then invoke(this, "stakeUnstake", [true, bE, bL], nil)
408+ let bV = if (containsElement(H, bK))
409+ then invoke(this, "stakeUnstake", [true, bD, bK], nil)
411410 else 0
412- if ((bW == bW))
413- then [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bH), StringEntry(e, bL), IntegerEntry(f, bB), IntegerEntry(g, bE), IntegerEntry(l, bU), IntegerEntry(j, Y), IntegerEntry(k, aa), bS, StringEntry(h, toBase58String(bT)), IntegerEntry(i, bR), ScriptTransfer(as.caller, bR, bT)]
411+ if ((bV == bV))
412+ then [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bG), StringEntry(e, bK), IntegerEntry(f, bA), IntegerEntry(g, bD), IntegerEntry(l, bT), IntegerEntry(j, Y), IntegerEntry(k, aa), bR, StringEntry(h, toBase58String(bS)), IntegerEntry(i, bQ), ScriptTransfer(as.caller, bQ, bS)]
414413 else throw("Strict value is not equal to itself.")
415414 }
416415 else throw("Strict value is not equal to itself.")
420419
421420
422421 @Callable(as)
423-func replenishWithTwoTokens () = valueOrElse(bj(), {
424- let bC = as.payments[0].assetId
425- let bF = as.payments[1].assetId
426- let bX = fraction(ac, as.payments[0].amount, T)
427- let bY = fraction(ac, as.payments[1].amount, U)
428- let bZ = bd(bC)
429- let bH = bZ._1
430- let bI = bZ._2
431- let bJ = bZ._3
432- let ca = bd(bF)
433- let bL = ca._1
434- let bM = ca._2
435- let bN = ca._3
436- let cb = if ((bY > bX))
422+func replenishWithTwoTokens () = valueOrElse(bi(), {
423+ let bB = as.payments[0].assetId
424+ let bE = as.payments[1].assetId
425+ let bW = fraction(ac, as.payments[0].amount, T)
426+ let bX = fraction(ac, as.payments[1].amount, U)
427+ let bY = bc(bB)
428+ let bG = bY._1
429+ let bH = bY._2
430+ let bI = bY._3
431+ let bZ = bc(bE)
432+ let bK = bZ._1
433+ let bL = bZ._2
434+ let bM = bZ._3
435+ let ca = if ((bX > bW))
437436 then {
438- let cc = fraction(U, bX, ac, CEILING)
439- $Tuple5(as.payments[0].amount, cc, (as.payments[1].amount - cc), bF, bX)
437+ let cb = fraction(U, bW, ac, CEILING)
438+ $Tuple5(as.payments[0].amount, cb, (as.payments[1].amount - cb), bE, bW)
440439 }
441440 else {
442- let cc = fraction(U, bX, ac, CEILING)
443- $Tuple5(cc, as.payments[1].amount, (as.payments[0].amount - cc), bC, bY)
441+ let cb = fraction(T, bX, ac, CEILING)
442+ $Tuple5(cb, as.payments[1].amount, (as.payments[0].amount - cb), bB, bX)
444443 }
445- let bB = cb._1
446- let bE = cb._2
447- let cd = cb._3
448- let ce = cb._4
449- let cf = cb._5
450- let cg = fraction(cf, W, ac)
444+ let bA = ca._1
445+ let bD = ca._2
446+ let cc = ca._3
447+ let cd = ca._4
448+ let ce = ca._5
449+ let cf = fraction(ce, W, ac)
451450 if ((size(as.payments) != 2))
452451 then throw("Two attached assets expected")
453- else if (if ((bC != N))
452+ else if (if ((bB != N))
454453 then true
455- else (bF != O))
456- then bl()
457- else if ((cg == 0))
454+ else (bE != O))
455+ then bk()
456+ else if ((cf == 0))
458457 then throw("Too small amount to replenish")
459- else if ((0 > cd))
458+ else if ((0 > cc))
460459 then throw("Change < 0")
461460 else if (!(az))
462- then ([ScriptTransfer(as.caller, bB, bC), ScriptTransfer(as.caller, bE, bF)] ++ br())
461+ then ([ScriptTransfer(as.caller, bA, bB), ScriptTransfer(as.caller, bD, bE)] ++ bq())
463462 else {
464- let bV = if (containsElement(H, bH))
465- then invoke(this, "stakeUnstake", [true, bB, bH], nil)
463+ let bU = if (containsElement(H, bG))
464+ then invoke(this, "stakeUnstake", [true, bA, bG], nil)
466465 else 0
467- if ((bV == bV))
466+ if ((bU == bU))
468467 then {
469- let bW = if (containsElement(H, bL))
470- then invoke(this, "stakeUnstake", [true, bE, bL], nil)
468+ let bV = if (containsElement(H, bK))
469+ then invoke(this, "stakeUnstake", [true, bD, bK], nil)
471470 else 0
472- if ((bW == bW))
473- then [IntegerEntry(f, (T + bB)), IntegerEntry(g, (U + bE)), IntegerEntry(i, (W + cg)), IntegerEntry(l, aD((T + bB), (U + bE))), Reissue(V, cg, true), ScriptTransfer(as.caller, cg, V), ScriptTransfer(as.caller, cd, ce)]
471+ if ((bV == bV))
472+ then [IntegerEntry(f, (T + bA)), IntegerEntry(g, (U + bD)), IntegerEntry(i, (W + cf)), IntegerEntry(l, aD((T + bA), (U + bD))), Reissue(V, cf, true), ScriptTransfer(as.caller, cf, V), ScriptTransfer(as.caller, cc, cd)]
474473 else throw("Strict value is not equal to itself.")
475474 }
476475 else throw("Strict value is not equal to itself.")
480479
481480
482481 @Callable(as)
483-func replenishWithOneToken (ch,ci) = valueOrElse(bj(), {
484- let cj = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
485- let ck = cj._1
486- let cl = cj._2
487- let cm = bd(cl)
488- let cn = cm._1
489- let co = cm._2
490- let cp = cm._3
491- let cq = 5000000
492- let cr = 50000000
493- let cs = if ((cr > ck))
482+func replenishWithOneToken (cg,ch) = valueOrElse(bi(), {
483+ let ci = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
484+ let cj = ci._1
485+ let ck = ci._2
486+ let cl = bc(ck)
487+ let cm = cl._1
488+ let cn = cl._2
489+ let co = cl._3
490+ let cp = 5000000
491+ let cq = 50000000
492+ let cr = if ((cq > cj))
494493 then 100000
495494 else 1
496- let ct = (ac - ((ac * cs) / 10000000))
497- let cu = (ac + ((ac * cs) / 10000000))
498- let cv = (ac - ((ac * 1) / 10000000))
499- if ((cq > ck))
500- then throw((((("Payment amount " + toString(ck)) + " does not exceed the minimum amount of ") + toString(cq)) + " tokens"))
495+ let cs = (ac - ((ac * cr) / 10000000))
496+ let ct = (ac + ((ac * cr) / 10000000))
497+ let cu = (ac - ((ac * 1) / 10000000))
498+ if ((cp > cj))
499+ then throw((((("Payment amount " + toString(cj)) + " does not exceed the minimum amount of ") + toString(cp)) + " tokens"))
501500 else if ((size(as.payments) != 1))
502- then bm()
501+ then bl()
503502 else if (!(az))
504- then ([ScriptTransfer(as.caller, ck, cl)] ++ br())
505- else if (if ((cl != N))
506- then (cl != O)
503+ then ([ScriptTransfer(as.caller, cj, ck)] ++ bq())
504+ else if (if ((ck != N))
505+ then (ck != O)
507506 else false)
508- then bl()
507+ then bk()
509508 else {
510- let cw = if ((cl == N))
511- then $Tuple7((ck - ch), ci, (T + ch), (U - ci), aD((T + ck), U), (T + ck), U)
512- else $Tuple7(ci, (ck - ch), (T - ci), (U + ch), aD(T, (U + ck)), T, (U + ck))
513- let cx = cw._1
514- let cy = cw._2
515- let cz = cw._3
516- let cA = cw._4
517- let bU = cw._5
518- let cB = cw._6
519- let cC = cw._7
520- let cD = if ((cl == N))
521- then IntegerEntry(f, cB)
522- else IntegerEntry(g, cC)
523- let cE = aD(cz, cA)
524- let cF = fraction(ac, X, cE)
525- let cG = (fraction((ac * ac), cz, cA) / fraction(ac, cx, cy))
526- let cH = fraction((cB + cC), ag, (2 * ah))
527- if (if ((cv >= cF))
509+ let cv = if ((ck == N))
510+ then $Tuple7((cj - cg), ch, (T + cg), (U - ch), aD((T + cj), U), (T + cj), U)
511+ else $Tuple7(ch, (cj - cg), (T - ch), (U + cg), aD(T, (U + cj)), T, (U + cj))
512+ let cw = cv._1
513+ let cx = cv._2
514+ let cy = cv._3
515+ let cz = cv._4
516+ let bT = cv._5
517+ let cA = cv._6
518+ let cB = cv._7
519+ let cC = if ((ck == N))
520+ then IntegerEntry(f, cA)
521+ else IntegerEntry(g, cB)
522+ let cD = aD(cy, cz)
523+ let cE = fraction(ac, X, cD)
524+ let cF = (fraction((ac * ac), cy, cz) / fraction(ac, cw, cx))
525+ let cG = fraction((cA + cB), ag, (2 * ah))
526+ if (if ((cu >= cE))
528527 then true
529- else (X > cE))
530- then throw("Incorrect virtualSwapTokenPay or virtualSwapTokenGet value")
531- else if (if ((ct > cG))
528+ else (X > cD))
529+ then throw((((((("Incorrect virtualSwapTokenPay or virtualSwapTokenGet value" + " invariantEstimatedRatio: ") + toString(cE)) + " invariantNew: ") + toString(cD)) + " invariant: ") + toString(X)))
530+ else if (if ((cs > cF))
532531 then true
533- else (cG > cu))
532+ else (cF > ct))
534533 then throw("Swap with virtualSwapTokenPay and virtualSwapTokenGet is possible, but ratio after virtual swap is incorrect")
535- else if (if ((cH > cB))
534+ else if (if ((cG > cA))
536535 then true
537- else (cH > cC))
538- then bn(cH, cB, cC)
536+ else (cG > cB))
537+ then bm(cG, cA, cB)
539538 else {
540- let bV = if (containsElement(H, cn))
541- then invoke(this, "stakeUnstake", [true, ck, cn], nil)
539+ let bU = if (containsElement(H, cm))
540+ then invoke(this, "stakeUnstake", [true, cj, cm], nil)
542541 else 0
543- if ((bV == bV))
542+ if ((bU == bU))
544543 then {
544+ let bW = fraction(cw, ac, cy)
545545 let bX = fraction(cx, ac, cz)
546- let bY = fraction(cy, ac, cA)
547- let cg = fraction(min([bX, bY]), W, ac)
548-[Reissue(V, cg, true), ScriptTransfer(as.caller, cg, V), IntegerEntry(i, (W + cg)), cD, IntegerEntry(l, bU)]
546+ let cf = fraction(min([bW, bX]), W, ac)
547+[Reissue(V, cf, true), ScriptTransfer(as.caller, cf, V), IntegerEntry(i, (W + cf)), cC, IntegerEntry(l, bT)]
549548 }
550549 else throw("Strict value is not equal to itself.")
551550 }
555554
556555
557556 @Callable(as)
558-func withdraw () = valueOrElse(bj(), {
559- let cI = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
560- let ck = cI._1
561- let cl = cI._2
562- let cJ = fraction(ck, T, W)
563- let cK = fraction(ck, U, W)
564- let bU = aD((T - cJ), (U - cK))
557+func withdraw () = valueOrElse(bi(), {
558+ let cH = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
559+ let cj = cH._1
560+ let ck = cH._2
561+ let cI = fraction(cj, T, W)
562+ let cJ = fraction(cj, U, W)
563+ let bT = aD((T - cI), (U - cJ))
565564 if ((size(as.payments) != 1))
566- then bm()
567- else if ((cl != V))
565+ then bl()
566+ else if ((ck != V))
568567 then throw(("Incorrect asset attached. Expected: " + toBase58String(V)))
569568 else if (!(az))
570- then ([ScriptTransfer(as.caller, ck, cl)] ++ br())
569+ then ([ScriptTransfer(as.caller, cj, ck)] ++ bq())
571570 else {
572- let bV = if (containsElement(H, L))
573- then invoke(this, "stakeUnstake", [false, cJ, L], nil)
571+ let bU = if (containsElement(H, L))
572+ then invoke(this, "stakeUnstake", [false, cI, L], nil)
574573 else 0
575- if ((bV == bV))
574+ if ((bU == bU))
576575 then {
577- let bW = if (containsElement(H, M))
578- then invoke(this, "stakeUnstake", [false, cK, M], nil)
576+ let bV = if (containsElement(H, M))
577+ then invoke(this, "stakeUnstake", [false, cJ, M], nil)
579578 else 0
580- if ((bW == bW))
581- then [IntegerEntry(f, (T - cJ)), IntegerEntry(g, (U - cK)), IntegerEntry(i, (W - ck)), IntegerEntry(l, bU), Burn(V, ck), ScriptTransfer(as.caller, cJ, N), ScriptTransfer(as.caller, cK, O)]
579+ if ((bV == bV))
580+ then [IntegerEntry(f, (T - cI)), IntegerEntry(g, (U - cJ)), IntegerEntry(i, (W - cj)), IntegerEntry(l, bT), Burn(V, cj), ScriptTransfer(as.caller, cI, N), ScriptTransfer(as.caller, cJ, O)]
582581 else throw("Strict value is not equal to itself.")
583582 }
584583 else throw("Strict value is not equal to itself.")
588587
589588
590589 @Callable(as)
591-func exchange (cL,cM) = valueOrElse(bj(), {
592- let cN = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
593- let ck = cN._1
594- let cl = cN._2
595- if ((0 >= cL))
596- then throw(("Estimated amount must be positive. Actual: " + toString(cL)))
597- else if ((cM > cL))
598- then throw(((("Minimal amount can't be greater than estimated. Estimated: " + toString(cL)) + ". Minimal: ") + toString(cM)))
590+func exchange (cK,cL) = valueOrElse(bi(), {
591+ let cM = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
592+ let cj = cM._1
593+ let ck = cM._2
594+ if ((0 >= cK))
595+ then throw(("Estimated amount must be positive. Actual: " + toString(cK)))
596+ else if ((cL > cK))
597+ then throw(((("Minimal amount can't be greater than estimated. Estimated: " + toString(cK)) + ". Minimal: ") + toString(cL)))
599598 else if ((size(as.payments) != 1))
600- then bm()
599+ then bl()
601600 else if (!(az))
602- then ([ScriptTransfer(as.caller, ck, cl)] ++ br())
603- else if (if ((cl != N))
604- then (cl != O)
601+ then ([ScriptTransfer(as.caller, cj, ck)] ++ bq())
602+ else if (if ((ck != N))
603+ then (ck != O)
605604 else false)
606- then bl()
607- else if ((10000000 > ck))
605+ then bk()
606+ else if ((10000000 > cj))
608607 then throw("Only swap of 10.000000 or more tokens is allowed")
609- else if (if ((ai > fraction(ac, cM, ck)))
608+ else if (if ((ai > fraction(ac, cL, cj)))
610609 then true
611- else (fraction(ac, cL, ck) > aj))
610+ else (fraction(ac, cK, cj) > aj))
612611 then throw("Incorrect args and pmt ratio")
613612 else {
614- let cO = if ((cl == N))
613+ let cN = if ((ck == N))
615614 then O
616615 else N
617- let cP = aF(cL, cM, ck, cl)
618- let bv = cP._1
619- let cQ = cP._2
620- let cR = fraction(bv, Z, aa)
621- let cS = fraction(bv, (aa - Y), aa)
622- let cT = if ((cl == N))
623- then $Tuple2((T + ck), ((U - cS) - cR))
624- else $Tuple2(((T - cS) - cR), (U + ck))
625- let cB = cT._1
626- let cC = cT._2
627- let cH = fraction((cB + cC), ag, (2 * ah))
628- if (if ((cH > cB))
616+ let bu = aF(cK, cL, cj, ck)
617+ let cO = fraction(bu, Z, aa)
618+ let cP = fraction(bu, (aa - Y), aa)
619+ let cQ = if ((ck == N))
620+ then $Tuple2((T + cj), ((U - cP) - cO))
621+ else $Tuple2(((T - cP) - cO), (U + cj))
622+ let cA = cQ._1
623+ let cB = cQ._2
624+ let cG = fraction((cA + cB), ag, (2 * ah))
625+ if (if ((cG > cA))
629626 then true
630- else (cH > cC))
631- then bn(cH, cB, cC)
627+ else (cG > cB))
628+ then bm(cG, cA, cB)
632629 else {
633- let cU = bd(cl)
634- let cn = cU._1
635- let co = cU._2
636- let cp = cU._3
637- let cV = bd(cO)
638- let cW = cV._1
639- let cX = cV._2
640- let cY = cV._3
641- let bV = if (containsElement(H, cn))
642- then invoke(this, "stakeUnstake", [true, ck, cn], nil)
630+ let cR = bc(ck)
631+ let cm = cR._1
632+ let cn = cR._2
633+ let co = cR._3
634+ let cS = bc(cN)
635+ let cT = cS._1
636+ let cU = cS._2
637+ let cV = cS._3
638+ let bU = if (containsElement(H, cm))
639+ then invoke(this, "stakeUnstake", [true, cj, cm], nil)
643640 else 0
644- if ((bV == bV))
641+ if ((bU == bU))
645642 then {
646- let bW = if (containsElement(H, cW))
647- then invoke(this, "stakeUnstake", [false, (cS + cR), cW], nil)
643+ let bV = if (containsElement(H, cT))
644+ then invoke(this, "stakeUnstake", [false, (cP + cO), cT], nil)
648645 else 0
649- if ((bW == bW))
650- then [IntegerEntry(f, cB), IntegerEntry(g, cC), IntegerEntry(l, cQ), ScriptTransfer(as.caller, cS, cO), ScriptTransfer(E, cR, cO)]
646+ if ((bV == bV))
647+ then [IntegerEntry(f, cA), IntegerEntry(g, cB), IntegerEntry(l, aD(cA, cB)), ScriptTransfer(as.caller, cP, cN), ScriptTransfer(E, cO, cN)]
651648 else throw("Strict value is not equal to itself.")
652649 }
653650 else throw("Strict value is not equal to itself.")
658655
659656
660657 @Callable(as)
661-func shutdown () = valueOrElse(bk(as), if (!(K))
658+func shutdown () = valueOrElse(bj(as), if (!(K))
662659 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, m), "the cause wasn't specified")))
663- else bg("Paused by admin"))
660+ else bf("Paused by admin"))
664661
665662
666663
667664 @Callable(as)
668-func activate () = valueOrElse(bk(as), if (K)
669- then bi()
665+func activate () = valueOrElse(bj(as), if (K)
666+ then bh()
670667 else [BooleanEntry(c, true), DeleteEntry(m)])
671668
672669
673670
674671 @Callable(as)
675-func takeIntoAccountExtraFunds () = valueOrElse(bj(), {
676- let cZ = (ax - T)
677- let da = (ay - U)
678- let cE = aD((T + cZ), (U + da))
672+func takeIntoAccountExtraFunds () = valueOrElse(bi(), {
673+ let cW = (ax - T)
674+ let cX = (ay - U)
675+ let cD = aD((T + cW), (U + cX))
679676 if ((as.caller != E))
680677 then throw("Only the wallet can call this function")
681- else if (if ((0 > cZ))
678+ else if (if ((0 > cW))
682679 then true
683- else (0 > da))
684- then bg("Enroll amount negative")
685- else if (if ((cZ == 0))
686- then (da == 0)
680+ else (0 > cX))
681+ then bf("Enroll amount negative")
682+ else if (if ((cW == 0))
683+ then (cX == 0)
687684 else false)
688685 then throw("No money to take")
689686 else {
690- let bV = if (if (containsElement(H, L))
691- then (cZ > 0)
687+ let bU = if (if (containsElement(H, L))
688+ then (cW > 0)
692689 else false)
693- then invoke(this, "stakeUnstake", [true, cZ, L], nil)
690+ then invoke(this, "stakeUnstake", [true, cW, L], nil)
694691 else 0
695- if ((bV == bV))
692+ if ((bU == bU))
696693 then {
697- let bW = if (if (containsElement(H, M))
698- then (da > 0)
694+ let bV = if (if (containsElement(H, M))
695+ then (cX > 0)
699696 else false)
700- then invoke(this, "stakeUnstake", [true, da, M], nil)
697+ then invoke(this, "stakeUnstake", [true, cX, M], nil)
701698 else 0
702- if ((bW == bW))
703- then [IntegerEntry(l, cE), IntegerEntry(f, (T + cZ)), IntegerEntry(g, (U + da)), IntegerEntry(("last_income_" + L), cZ), IntegerEntry(("last_income_" + M), da)]
699+ if ((bV == bV))
700+ then [IntegerEntry(l, cD), IntegerEntry(f, (T + cW)), IntegerEntry(g, (U + cX)), IntegerEntry(("last_income_" + L), cW), IntegerEntry(("last_income_" + M), cX)]
704701 else throw("Strict value is not equal to itself.")
705702 }
706703 else throw("Strict value is not equal to itself.")
710707
711708
712709 @Callable(as)
713-func writeBigIntInvariant () = valueOrElse(bk(as), {
714- let cE = aD(T, U)
715-[IntegerEntry(l, cE)]
710+func writeBigIntInvariant () = valueOrElse(bj(as), {
711+ let cD = aD(T, U)
712+[IntegerEntry(l, cD)]
716713 })
717714
718715
719716
720717 @Callable(as)
721-func stakeUnstake (bt,bv,db) = if ((as.caller != this))
718+func stakeUnstake (bs,bu,cY) = if ((as.caller != this))
722719 then throw("Only contract itself can invoke this function")
723720 else {
724- let dc = bu(bt, bv, fromBase58String(db))
725- let bx = dc._1
726- let dd = dc._2
727- let de = dc._3
728- let df = dc._4
729- let dg = invoke(dd, bx, de, df)
730- if ((dg == dg))
721+ let cZ = bt(bs, bu, fromBase58String(cY))
722+ let bw = cZ._1
723+ let da = cZ._2
724+ let db = cZ._3
725+ let dc = cZ._4
726+ let dd = invoke(da, bw, db, dc)
727+ if ((dd == dd))
731728 then nil
732729 else throw("Strict value is not equal to itself.")
733730 }
734731
735732
736-@Verifier(dh)
737-func di () = {
738- let dj = {
739- let dk = if (sigVerify(dh.bodyBytes, dh.proofs[0], z))
733+@Verifier(de)
734+func df () = {
735+ let dg = {
736+ let dh = if (sigVerify(de.bodyBytes, de.proofs[0], z))
740737 then 1
741738 else 0
742- let dl = if (sigVerify(dh.bodyBytes, dh.proofs[1], A))
739+ let di = if (sigVerify(de.bodyBytes, de.proofs[1], A))
743740 then 1
744741 else 0
745- let dm = if (sigVerify(dh.bodyBytes, dh.proofs[2], B))
742+ let dj = if (sigVerify(de.bodyBytes, de.proofs[2], B))
746743 then 1
747744 else 0
748- (((dk + dl) + dm) >= 2)
745+ (((dh + di) + dj) >= 2)
749746 }
750- let w = dh
747+ let w = de
751748 if ($isInstanceOf(w, "InvokeScriptTransaction"))
752749 then {
753- let dg = w
754- let dn = if ((dg.dApp == this))
755- then (dg.function == "takeIntoAccountExtraFunds")
750+ let dd = w
751+ let dk = if ((dd.dApp == this))
752+ then (dd.function == "takeIntoAccountExtraFunds")
756753 else false
757- let do = if (if (if (sigVerify(dh.bodyBytes, dh.proofs[0], z))
754+ let dl = if (if (if (sigVerify(de.bodyBytes, de.proofs[0], z))
758755 then true
759- else sigVerify(dh.bodyBytes, dh.proofs[0], A))
756+ else sigVerify(de.bodyBytes, de.proofs[0], A))
760757 then true
761- else sigVerify(dh.bodyBytes, dh.proofs[0], B))
758+ else sigVerify(de.bodyBytes, de.proofs[0], B))
762759 then true
763- else sigVerify(dh.bodyBytes, dh.proofs[0], D)
764- if (if (dn)
765- then do
760+ else sigVerify(de.bodyBytes, de.proofs[0], D)
761+ if (if (dk)
762+ then dl
766763 else false)
767764 then true
768- else dj
765+ else dg
769766 }
770- else dj
767+ else dg
771768 }
772769
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "2.0.0"
55
66 let b = "version"
77
88 let c = "active"
99
1010 let d = "A_asset_id"
1111
1212 let e = "B_asset_id"
1313
1414 let f = "A_asset_balance"
1515
1616 let g = "B_asset_balance"
1717
1818 let h = "share_asset_id"
1919
2020 let i = "share_asset_supply"
2121
2222 let j = "commission"
2323
2424 let k = "commission_scale_delimiter"
2525
2626 let l = "invariant"
2727
2828 let m = "shutdown_cause"
2929
3030 let n = "staking_usdnnsbt_address"
3131
3232 let o = "staking_eurn_address"
3333
3434 let p = "admin_pub_1"
3535
3636 let q = "admin_pub_2"
3737
3838 let r = "admin_pub_3"
3939
4040 let s = Address(base58'3N77kfPbQyjXWpDALX3xjKw3iEGMWEctV37')
4141
4242 let t = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
4343
4444 func u (v) = {
4545 let w = getString(t, v)
4646 if ($isInstanceOf(w, "String"))
4747 then {
4848 let x = w
4949 fromBase58String(x)
5050 }
5151 else {
5252 let y = w
5353 throw("Admin public key is empty")
5454 }
5555 }
5656
5757
5858 let z = u(p)
5959
6060 let A = u(q)
6161
6262 let B = u(r)
6363
6464 let C = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
6565
6666 let D = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
6767
6868 let E = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
6969
7070 let F = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
7171
7272 let G = base58'ECBCkHS68DckpBrzLeoRgYbFg7sCVqR176mPqbXsj9pA'
7373
7474 let H = [toBase58String(F), toBase58String(G)]
7575
7676 let I = Address(fromBase58String(valueOrErrorMessage(getString(t, n), "no usdn staking address")))
7777
7878 let J = Address(fromBase58String(valueOrErrorMessage(getString(t, o), "no usdn staking address")))
7979
8080 let K = getBooleanValue(this, c)
8181
8282 let L = getStringValue(this, d)
8383
8484 let M = getStringValue(this, e)
8585
8686 let N = if ((L == "WAVES"))
8787 then unit
8888 else fromBase58String(L)
8989
9090 let O = if ((M == "WAVES"))
9191 then unit
9292 else fromBase58String(M)
9393
9494 let P = {
9595 let w = N
9696 if ($isInstanceOf(w, "ByteVector"))
9797 then {
9898 let Q = w
9999 value(assetInfo(Q)).name
100100 }
101101 else if ($isInstanceOf(w, "Unit"))
102102 then {
103103 let R = w
104104 "WAVES"
105105 }
106106 else throw("Match error")
107107 }
108108
109109 let S = {
110110 let w = O
111111 if ($isInstanceOf(w, "ByteVector"))
112112 then {
113113 let Q = w
114114 value(assetInfo(Q)).name
115115 }
116116 else if ($isInstanceOf(w, "Unit"))
117117 then {
118118 let R = w
119119 "WAVES"
120120 }
121121 else throw("Match error")
122122 }
123123
124124 let T = getIntegerValue(this, f)
125125
126126 let U = getIntegerValue(this, g)
127127
128128 let V = fromBase58String(getStringValue(this, h))
129129
130130 let W = getIntegerValue(this, i)
131131
132132 let X = getIntegerValue(this, l)
133133
134134 let Y = 500
135135
136136 let Z = 200
137137
138138 let aa = 1000000
139139
140140 let ab = 1000
141141
142142 let ac = 100000000
143143
144144 let ad = 10000000000000000
145145
146146 let ae = 1000
147147
148148 let af = 8
149149
150150 let ag = 50
151151
152152 let ah = 100
153153
154154 let ai = 90000000
155155
156156 let aj = 110000000
157157
158158 let ak = 50
159159
160160 let al = 2
161161
162162 let am = 4600000000000000
163163
164164 func an (ao) = {
165165 let w = ao
166166 if ($isInstanceOf(w, "ByteVector"))
167167 then {
168168 let Q = w
169169 assetBalance(this, Q)
170170 }
171171 else if ($isInstanceOf(w, "Unit"))
172172 then {
173173 let R = w
174174 wavesBalance(this).available
175175 }
176176 else throw("Match error")
177177 }
178178
179179
180180 func ap (ao) = {
181181 let aq = {
182182 let w = ao
183183 if ($isInstanceOf(w, "ByteVector"))
184184 then {
185185 let ar = w
186186 if ((ar == F))
187187 then getInteger(I, ((("rpd_balance_" + toBase58String(ar)) + "_") + toString(this)))
188188 else if ((ar == G))
189189 then getInteger(J, ((("%s%s%s__stakingBalance__" + toBase58String(ar)) + "__") + toString(this)))
190190 else 0
191191 }
192192 else if ($isInstanceOf(w, "Unit"))
193193 then 0
194194 else throw("Match error")
195195 }
196196 let w = aq
197197 if ($isInstanceOf(w, "Int"))
198198 then {
199199 let as = w
200200 as
201201 }
202202 else 0
203203 }
204204
205205
206206 let at = ap(N)
207207
208208 let au = ap(O)
209209
210210 let av = (T - at)
211211
212212 let aw = (U - au)
213213
214214 let ax = (an(N) + at)
215215
216216 let ay = (an(O) + au)
217217
218218 let az = if ((ax >= T))
219219 then (ay >= U)
220220 else false
221221
222222 func aA (aB,aC) = ((fraction(ad, aB, aC) + fraction(ad, aC, aB)) / 2)
223223
224224
225225 func aD (aB,aC) = {
226226 let aE = aA(aB, aC)
227227 (fraction((aB + aC), ad, pow(aE, af, ak, al, af, CEILING)) + (2 * fraction(toInt(pow(fraction(toBigInt(aB), toBigInt(aC), toBigInt(ac)), 0, toBigInt(5), 1, (af / 2), DOWN)), pow((aE - am), af, ak, al, af, DOWN), ac)))
228228 }
229229
230230
231231 func aF (aG,aH,aI,aJ) = {
232232 let aK = (ac - ((ac * 1) / 10000000))
233233 let aL = (aG - aH)
234234 let aB = (T + aI)
235235 let aC = (U + aI)
236236 func aM (aN,aO) = if ((aN._1 == -1))
237237 then {
238238 let aP = (aG - (((aO * aL) / 3) / ab))
239239 let aQ = if ((aJ == N))
240240 then aD(aB, (U - aP))
241241 else aD((T - aP), aC)
242242 if ((aQ > X))
243243 then $Tuple2(aP, aQ)
244244 else $Tuple2(-1, 0)
245245 }
246246 else aN
247247
248248 let aR = aM($Tuple2(-1, 0), 3000)
249249 if ((0 > aR._1))
250250 then throw("Price is worse than minReceived")
251251 else {
252252 let aS = if ((aJ == N))
253253 then aD(aB, (U - aG))
254254 else if ((aJ == O))
255255 then aD((T - aG), aC)
256256 else throw("Wrong asset in payment")
257- let aT = if ((X > aS))
257+ if ((X > aS))
258258 then if ((aK >= fraction(ac, X, aS)))
259- then throw("Bad estimation provided 1")
259+ then throw("The requested price is too not profitable for user")
260260 else {
261- let aU = {
262- let aV = [25, 200, 500]
263- let aW = size(aV)
264- let aX = $Tuple2(-1, 0)
265- func aY (aZ,ba) = if ((ba >= aW))
266- then aZ
267- else aM(aZ, aV[ba])
261+ let aT = {
262+ let aU = [25, 200, 500]
263+ let aV = size(aU)
264+ let aW = $Tuple2(-1, 0)
265+ func aX (aY,aZ) = if ((aZ >= aV))
266+ then aY
267+ else aM(aY, aU[aZ])
268268
269- func bb (aZ,ba) = if ((ba >= aW))
270- then aZ
269+ func ba (aY,aZ) = if ((aZ >= aV))
270+ then aY
271271 else throw("List size exceeds 3")
272272
273- bb(aY(aY(aY(aX, 0), 1), 2), 3)
273+ ba(aX(aX(aX(aW, 0), 1), 2), 3)
274274 }
275- if ((0 > aU._1))
276- then aR
277- else aU
275+ if ((0 > aT._1))
276+ then aR._1
277+ else aT._1
278278 }
279279 else {
280- let aU = {
281- let aV = [-500, -200, -25]
282- let aW = size(aV)
283- let aX = $Tuple2(-1, 0)
284- func aY (aZ,ba) = if ((ba >= aW))
285- then aZ
286- else aM(aZ, aV[ba])
280+ let aT = {
281+ let aU = [-500, -200, -25]
282+ let aV = size(aU)
283+ let aW = $Tuple2(-1, 0)
284+ func aX (aY,aZ) = if ((aZ >= aV))
285+ then aY
286+ else aM(aY, aU[aZ])
287287
288- func bb (aZ,ba) = if ((ba >= aW))
289- then aZ
288+ func ba (aY,aZ) = if ((aZ >= aV))
289+ then aY
290290 else throw("List size exceeds 3")
291291
292- bb(aY(aY(aY(aX, 0), 1), 2), 3)
292+ ba(aX(aX(aX(aW, 0), 1), 2), 3)
293293 }
294- let bc = if ((0 > aU._1))
294+ let bb = if ((0 > aT._1))
295295 then $Tuple2(aG, aS)
296- else aU
297- if ((aK >= fraction(ac, X, bc._2)))
298- then throw("Bad estimation provided 2")
299- else bc
296+ else aT
297+ if ((aK >= fraction(ac, X, bb._2)))
298+ then throw("The requested price is too not profitable for user")
299+ else bb._1
300300 }
301- aT
302301 }
303302 }
304303
305304
306-func bd (ao) = {
305+func bc (ao) = {
307306 let w = ao
308307 if ($isInstanceOf(w, "ByteVector"))
309308 then {
310309 let Q = w
311- let be = toBase58String(Q)
312- let bf = valueOrErrorMessage(assetInfo(Q), (("Asset " + be) + " doesn't exist"))
313- $Tuple3(be, bf.name, bf.decimals)
310+ let bd = toBase58String(Q)
311+ let be = valueOrErrorMessage(assetInfo(Q), (("Asset " + bd) + " doesn't exist"))
312+ $Tuple3(bd, be.name, be.decimals)
314313 }
315314 else if ($isInstanceOf(w, "Unit"))
316315 then {
317316 let R = w
318317 $Tuple3("WAVES", "WAVES", 8)
319318 }
320319 else throw("Match error")
321320 }
322321
323322
324-func bg (bh) = [BooleanEntry(c, false), StringEntry(m, bh)]
323+func bf (bg) = [BooleanEntry(c, false), StringEntry(m, bg)]
325324
326325
327-func bi () = throw("DApp is already active")
326+func bh () = throw("DApp is already active")
328327
329328
330-func bj () = if (K)
329+func bi () = if (K)
331330 then unit
332331 else throw("DApp is inactive at this moment")
333332
334333
335-func bk (as) = if (containsElement([z, A, B], as.callerPublicKey))
334+func bj (as) = if (containsElement([z, A, B], as.callerPublicKey))
336335 then unit
337336 else throw("Only admin can call this function")
338337
339338
340-func bl () = throw(((("Incorrect assets attached. Expected: " + L) + " and ") + M))
339+func bk () = throw(((("Incorrect assets attached. Expected: " + L) + " and ") + M))
341340
342341
343-func bm () = throw("One attached payment expected")
342+func bl () = throw("One attached payment expected")
344343
345344
346-func bn (bo,bp,bq) = throw(((((((((("New balance in assets of the DApp is less than threshold " + toString(bo)) + ": ") + toString(bp)) + " ") + P) + ", ") + toString(bq)) + " ") + S))
345+func bm (bn,bo,bp) = throw(((((((((("New balance in assets of the DApp is less than threshold " + toString(bn)) + ": ") + toString(bo)) + " ") + P) + ", ") + toString(bp)) + " ") + S))
347346
348347
349-func br () = bg(((((((((((((((("Suspicious state. Actual balances: " + toString(T)) + " ") + P) + ", ") + toString(U)) + " ") + S) + ". State: ") + toString(an(N))) + " ") + P) + ", ") + toString(an(O))) + " ") + S))
348+func bq () = bf(((((((((((((((("Suspicious state. Actual balances: " + toString(T)) + " ") + P) + ", ") + toString(U)) + " ") + S) + ". State: ") + toString(an(N))) + " ") + P) + ", ") + toString(an(O))) + " ") + S))
350349
351350
352-func bs (bt,ao) = if (bt)
351+func br (bs,ao) = if (bs)
353352 then if ((ao == F))
354353 then $Tuple2("lockNeutrino", I)
355354 else $Tuple2("startStaking", J)
356355 else if ((ao == F))
357356 then $Tuple2("unlockNeutrino", I)
358357 else $Tuple2("stopStaking", J)
359358
360359
361-func bu (bt,bv,ao) = if (bt)
360+func bt (bs,bu,ao) = if (bs)
362361 then {
363- let bw = bs(bt, ao)
364- let bx = bw._1
365- let by = bw._2
366- $Tuple4(bx, by, nil, [AttachedPayment(ao, bv)])
362+ let bv = br(bs, ao)
363+ let bw = bv._1
364+ let bx = bv._2
365+ $Tuple4(bw, bx, nil, [AttachedPayment(ao, bu)])
367366 }
368367 else {
369- let bz = bs(bt, ao)
370- let bx = bz._1
371- let by = bz._2
372- $Tuple4(bx, by, [bv, toBase58String(ao)], nil)
368+ let by = br(bs, ao)
369+ let bw = by._1
370+ let bx = by._2
371+ $Tuple4(bw, bx, [bu, toBase58String(ao)], nil)
373372 }
374373
375374
376375 @Callable(as)
377376 func init () = {
378- let bA = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
379- let bB = bA._1
380- let bC = bA._2
381- let bD = $Tuple2(as.payments[1].amount, as.payments[1].assetId)
382- let bE = bD._1
383- let bF = bD._2
384- let bG = bd(bC)
385- let bH = bG._1
386- let bI = bG._2
387- let bJ = bG._3
388- let bK = bd(bF)
389- let bL = bK._1
390- let bM = bK._2
391- let bN = bK._3
377+ let bz = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
378+ let bA = bz._1
379+ let bB = bz._2
380+ let bC = $Tuple2(as.payments[1].amount, as.payments[1].assetId)
381+ let bD = bC._1
382+ let bE = bC._2
383+ let bF = bc(bB)
384+ let bG = bF._1
385+ let bH = bF._2
386+ let bI = bF._3
387+ let bJ = bc(bE)
388+ let bK = bJ._1
389+ let bL = bJ._2
390+ let bM = bJ._3
392391 if (isDefined(getBoolean(this, c)))
393- then bi()
394- else if ((bC == bF))
392+ then bh()
393+ else if ((bB == bE))
395394 then throw("Assets must be different")
396395 else {
397- let bO = ((("s" + take(bI, 7)) + "_") + take(bM, 7))
398- let bP = ((((("ShareToken of SwopFi protocol for " + bI) + " and ") + bM) + " at address ") + toString(this))
399- let bQ = ((bJ + bN) / 2)
400- let bR = fraction(pow(bB, bJ, 5, 1, bJ, DOWN), pow(bE, bN, 5, 1, bN, DOWN), pow(10, 0, bQ, 0, 0, DOWN))
401- let bS = Issue(bO, bP, bR, bQ, true)
402- let bT = calculateAssetId(bS)
403- let bU = aD(bB, bE)
404- let bV = if (containsElement(H, bH))
405- then invoke(this, "stakeUnstake", [true, bB, bH], nil)
396+ let bN = ((("s" + take(bH, 7)) + "_") + take(bL, 7))
397+ let bO = ((((("ShareToken of SwopFi protocol for " + bH) + " and ") + bL) + " at address ") + toString(this))
398+ let bP = ((bI + bM) / 2)
399+ let bQ = fraction(pow(bA, bI, 5, 1, bI, DOWN), pow(bD, bM, 5, 1, bM, DOWN), pow(10, 0, bP, 0, 0, DOWN))
400+ let bR = Issue(bN, bO, bQ, bP, true)
401+ let bS = calculateAssetId(bR)
402+ let bT = aD(bA, bD)
403+ let bU = if (containsElement(H, bG))
404+ then invoke(this, "stakeUnstake", [true, bA, bG], nil)
406405 else 0
407- if ((bV == bV))
406+ if ((bU == bU))
408407 then {
409- let bW = if (containsElement(H, bL))
410- then invoke(this, "stakeUnstake", [true, bE, bL], nil)
408+ let bV = if (containsElement(H, bK))
409+ then invoke(this, "stakeUnstake", [true, bD, bK], nil)
411410 else 0
412- if ((bW == bW))
413- then [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bH), StringEntry(e, bL), IntegerEntry(f, bB), IntegerEntry(g, bE), IntegerEntry(l, bU), IntegerEntry(j, Y), IntegerEntry(k, aa), bS, StringEntry(h, toBase58String(bT)), IntegerEntry(i, bR), ScriptTransfer(as.caller, bR, bT)]
411+ if ((bV == bV))
412+ then [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bG), StringEntry(e, bK), IntegerEntry(f, bA), IntegerEntry(g, bD), IntegerEntry(l, bT), IntegerEntry(j, Y), IntegerEntry(k, aa), bR, StringEntry(h, toBase58String(bS)), IntegerEntry(i, bQ), ScriptTransfer(as.caller, bQ, bS)]
414413 else throw("Strict value is not equal to itself.")
415414 }
416415 else throw("Strict value is not equal to itself.")
417416 }
418417 }
419418
420419
421420
422421 @Callable(as)
423-func replenishWithTwoTokens () = valueOrElse(bj(), {
424- let bC = as.payments[0].assetId
425- let bF = as.payments[1].assetId
426- let bX = fraction(ac, as.payments[0].amount, T)
427- let bY = fraction(ac, as.payments[1].amount, U)
428- let bZ = bd(bC)
429- let bH = bZ._1
430- let bI = bZ._2
431- let bJ = bZ._3
432- let ca = bd(bF)
433- let bL = ca._1
434- let bM = ca._2
435- let bN = ca._3
436- let cb = if ((bY > bX))
422+func replenishWithTwoTokens () = valueOrElse(bi(), {
423+ let bB = as.payments[0].assetId
424+ let bE = as.payments[1].assetId
425+ let bW = fraction(ac, as.payments[0].amount, T)
426+ let bX = fraction(ac, as.payments[1].amount, U)
427+ let bY = bc(bB)
428+ let bG = bY._1
429+ let bH = bY._2
430+ let bI = bY._3
431+ let bZ = bc(bE)
432+ let bK = bZ._1
433+ let bL = bZ._2
434+ let bM = bZ._3
435+ let ca = if ((bX > bW))
437436 then {
438- let cc = fraction(U, bX, ac, CEILING)
439- $Tuple5(as.payments[0].amount, cc, (as.payments[1].amount - cc), bF, bX)
437+ let cb = fraction(U, bW, ac, CEILING)
438+ $Tuple5(as.payments[0].amount, cb, (as.payments[1].amount - cb), bE, bW)
440439 }
441440 else {
442- let cc = fraction(U, bX, ac, CEILING)
443- $Tuple5(cc, as.payments[1].amount, (as.payments[0].amount - cc), bC, bY)
441+ let cb = fraction(T, bX, ac, CEILING)
442+ $Tuple5(cb, as.payments[1].amount, (as.payments[0].amount - cb), bB, bX)
444443 }
445- let bB = cb._1
446- let bE = cb._2
447- let cd = cb._3
448- let ce = cb._4
449- let cf = cb._5
450- let cg = fraction(cf, W, ac)
444+ let bA = ca._1
445+ let bD = ca._2
446+ let cc = ca._3
447+ let cd = ca._4
448+ let ce = ca._5
449+ let cf = fraction(ce, W, ac)
451450 if ((size(as.payments) != 2))
452451 then throw("Two attached assets expected")
453- else if (if ((bC != N))
452+ else if (if ((bB != N))
454453 then true
455- else (bF != O))
456- then bl()
457- else if ((cg == 0))
454+ else (bE != O))
455+ then bk()
456+ else if ((cf == 0))
458457 then throw("Too small amount to replenish")
459- else if ((0 > cd))
458+ else if ((0 > cc))
460459 then throw("Change < 0")
461460 else if (!(az))
462- then ([ScriptTransfer(as.caller, bB, bC), ScriptTransfer(as.caller, bE, bF)] ++ br())
461+ then ([ScriptTransfer(as.caller, bA, bB), ScriptTransfer(as.caller, bD, bE)] ++ bq())
463462 else {
464- let bV = if (containsElement(H, bH))
465- then invoke(this, "stakeUnstake", [true, bB, bH], nil)
463+ let bU = if (containsElement(H, bG))
464+ then invoke(this, "stakeUnstake", [true, bA, bG], nil)
466465 else 0
467- if ((bV == bV))
466+ if ((bU == bU))
468467 then {
469- let bW = if (containsElement(H, bL))
470- then invoke(this, "stakeUnstake", [true, bE, bL], nil)
468+ let bV = if (containsElement(H, bK))
469+ then invoke(this, "stakeUnstake", [true, bD, bK], nil)
471470 else 0
472- if ((bW == bW))
473- then [IntegerEntry(f, (T + bB)), IntegerEntry(g, (U + bE)), IntegerEntry(i, (W + cg)), IntegerEntry(l, aD((T + bB), (U + bE))), Reissue(V, cg, true), ScriptTransfer(as.caller, cg, V), ScriptTransfer(as.caller, cd, ce)]
471+ if ((bV == bV))
472+ then [IntegerEntry(f, (T + bA)), IntegerEntry(g, (U + bD)), IntegerEntry(i, (W + cf)), IntegerEntry(l, aD((T + bA), (U + bD))), Reissue(V, cf, true), ScriptTransfer(as.caller, cf, V), ScriptTransfer(as.caller, cc, cd)]
474473 else throw("Strict value is not equal to itself.")
475474 }
476475 else throw("Strict value is not equal to itself.")
477476 }
478477 })
479478
480479
481480
482481 @Callable(as)
483-func replenishWithOneToken (ch,ci) = valueOrElse(bj(), {
484- let cj = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
485- let ck = cj._1
486- let cl = cj._2
487- let cm = bd(cl)
488- let cn = cm._1
489- let co = cm._2
490- let cp = cm._3
491- let cq = 5000000
492- let cr = 50000000
493- let cs = if ((cr > ck))
482+func replenishWithOneToken (cg,ch) = valueOrElse(bi(), {
483+ let ci = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
484+ let cj = ci._1
485+ let ck = ci._2
486+ let cl = bc(ck)
487+ let cm = cl._1
488+ let cn = cl._2
489+ let co = cl._3
490+ let cp = 5000000
491+ let cq = 50000000
492+ let cr = if ((cq > cj))
494493 then 100000
495494 else 1
496- let ct = (ac - ((ac * cs) / 10000000))
497- let cu = (ac + ((ac * cs) / 10000000))
498- let cv = (ac - ((ac * 1) / 10000000))
499- if ((cq > ck))
500- then throw((((("Payment amount " + toString(ck)) + " does not exceed the minimum amount of ") + toString(cq)) + " tokens"))
495+ let cs = (ac - ((ac * cr) / 10000000))
496+ let ct = (ac + ((ac * cr) / 10000000))
497+ let cu = (ac - ((ac * 1) / 10000000))
498+ if ((cp > cj))
499+ then throw((((("Payment amount " + toString(cj)) + " does not exceed the minimum amount of ") + toString(cp)) + " tokens"))
501500 else if ((size(as.payments) != 1))
502- then bm()
501+ then bl()
503502 else if (!(az))
504- then ([ScriptTransfer(as.caller, ck, cl)] ++ br())
505- else if (if ((cl != N))
506- then (cl != O)
503+ then ([ScriptTransfer(as.caller, cj, ck)] ++ bq())
504+ else if (if ((ck != N))
505+ then (ck != O)
507506 else false)
508- then bl()
507+ then bk()
509508 else {
510- let cw = if ((cl == N))
511- then $Tuple7((ck - ch), ci, (T + ch), (U - ci), aD((T + ck), U), (T + ck), U)
512- else $Tuple7(ci, (ck - ch), (T - ci), (U + ch), aD(T, (U + ck)), T, (U + ck))
513- let cx = cw._1
514- let cy = cw._2
515- let cz = cw._3
516- let cA = cw._4
517- let bU = cw._5
518- let cB = cw._6
519- let cC = cw._7
520- let cD = if ((cl == N))
521- then IntegerEntry(f, cB)
522- else IntegerEntry(g, cC)
523- let cE = aD(cz, cA)
524- let cF = fraction(ac, X, cE)
525- let cG = (fraction((ac * ac), cz, cA) / fraction(ac, cx, cy))
526- let cH = fraction((cB + cC), ag, (2 * ah))
527- if (if ((cv >= cF))
509+ let cv = if ((ck == N))
510+ then $Tuple7((cj - cg), ch, (T + cg), (U - ch), aD((T + cj), U), (T + cj), U)
511+ else $Tuple7(ch, (cj - cg), (T - ch), (U + cg), aD(T, (U + cj)), T, (U + cj))
512+ let cw = cv._1
513+ let cx = cv._2
514+ let cy = cv._3
515+ let cz = cv._4
516+ let bT = cv._5
517+ let cA = cv._6
518+ let cB = cv._7
519+ let cC = if ((ck == N))
520+ then IntegerEntry(f, cA)
521+ else IntegerEntry(g, cB)
522+ let cD = aD(cy, cz)
523+ let cE = fraction(ac, X, cD)
524+ let cF = (fraction((ac * ac), cy, cz) / fraction(ac, cw, cx))
525+ let cG = fraction((cA + cB), ag, (2 * ah))
526+ if (if ((cu >= cE))
528527 then true
529- else (X > cE))
530- then throw("Incorrect virtualSwapTokenPay or virtualSwapTokenGet value")
531- else if (if ((ct > cG))
528+ else (X > cD))
529+ then throw((((((("Incorrect virtualSwapTokenPay or virtualSwapTokenGet value" + " invariantEstimatedRatio: ") + toString(cE)) + " invariantNew: ") + toString(cD)) + " invariant: ") + toString(X)))
530+ else if (if ((cs > cF))
532531 then true
533- else (cG > cu))
532+ else (cF > ct))
534533 then throw("Swap with virtualSwapTokenPay and virtualSwapTokenGet is possible, but ratio after virtual swap is incorrect")
535- else if (if ((cH > cB))
534+ else if (if ((cG > cA))
536535 then true
537- else (cH > cC))
538- then bn(cH, cB, cC)
536+ else (cG > cB))
537+ then bm(cG, cA, cB)
539538 else {
540- let bV = if (containsElement(H, cn))
541- then invoke(this, "stakeUnstake", [true, ck, cn], nil)
539+ let bU = if (containsElement(H, cm))
540+ then invoke(this, "stakeUnstake", [true, cj, cm], nil)
542541 else 0
543- if ((bV == bV))
542+ if ((bU == bU))
544543 then {
544+ let bW = fraction(cw, ac, cy)
545545 let bX = fraction(cx, ac, cz)
546- let bY = fraction(cy, ac, cA)
547- let cg = fraction(min([bX, bY]), W, ac)
548-[Reissue(V, cg, true), ScriptTransfer(as.caller, cg, V), IntegerEntry(i, (W + cg)), cD, IntegerEntry(l, bU)]
546+ let cf = fraction(min([bW, bX]), W, ac)
547+[Reissue(V, cf, true), ScriptTransfer(as.caller, cf, V), IntegerEntry(i, (W + cf)), cC, IntegerEntry(l, bT)]
549548 }
550549 else throw("Strict value is not equal to itself.")
551550 }
552551 }
553552 })
554553
555554
556555
557556 @Callable(as)
558-func withdraw () = valueOrElse(bj(), {
559- let cI = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
560- let ck = cI._1
561- let cl = cI._2
562- let cJ = fraction(ck, T, W)
563- let cK = fraction(ck, U, W)
564- let bU = aD((T - cJ), (U - cK))
557+func withdraw () = valueOrElse(bi(), {
558+ let cH = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
559+ let cj = cH._1
560+ let ck = cH._2
561+ let cI = fraction(cj, T, W)
562+ let cJ = fraction(cj, U, W)
563+ let bT = aD((T - cI), (U - cJ))
565564 if ((size(as.payments) != 1))
566- then bm()
567- else if ((cl != V))
565+ then bl()
566+ else if ((ck != V))
568567 then throw(("Incorrect asset attached. Expected: " + toBase58String(V)))
569568 else if (!(az))
570- then ([ScriptTransfer(as.caller, ck, cl)] ++ br())
569+ then ([ScriptTransfer(as.caller, cj, ck)] ++ bq())
571570 else {
572- let bV = if (containsElement(H, L))
573- then invoke(this, "stakeUnstake", [false, cJ, L], nil)
571+ let bU = if (containsElement(H, L))
572+ then invoke(this, "stakeUnstake", [false, cI, L], nil)
574573 else 0
575- if ((bV == bV))
574+ if ((bU == bU))
576575 then {
577- let bW = if (containsElement(H, M))
578- then invoke(this, "stakeUnstake", [false, cK, M], nil)
576+ let bV = if (containsElement(H, M))
577+ then invoke(this, "stakeUnstake", [false, cJ, M], nil)
579578 else 0
580- if ((bW == bW))
581- then [IntegerEntry(f, (T - cJ)), IntegerEntry(g, (U - cK)), IntegerEntry(i, (W - ck)), IntegerEntry(l, bU), Burn(V, ck), ScriptTransfer(as.caller, cJ, N), ScriptTransfer(as.caller, cK, O)]
579+ if ((bV == bV))
580+ then [IntegerEntry(f, (T - cI)), IntegerEntry(g, (U - cJ)), IntegerEntry(i, (W - cj)), IntegerEntry(l, bT), Burn(V, cj), ScriptTransfer(as.caller, cI, N), ScriptTransfer(as.caller, cJ, O)]
582581 else throw("Strict value is not equal to itself.")
583582 }
584583 else throw("Strict value is not equal to itself.")
585584 }
586585 })
587586
588587
589588
590589 @Callable(as)
591-func exchange (cL,cM) = valueOrElse(bj(), {
592- let cN = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
593- let ck = cN._1
594- let cl = cN._2
595- if ((0 >= cL))
596- then throw(("Estimated amount must be positive. Actual: " + toString(cL)))
597- else if ((cM > cL))
598- then throw(((("Minimal amount can't be greater than estimated. Estimated: " + toString(cL)) + ". Minimal: ") + toString(cM)))
590+func exchange (cK,cL) = valueOrElse(bi(), {
591+ let cM = $Tuple2(as.payments[0].amount, as.payments[0].assetId)
592+ let cj = cM._1
593+ let ck = cM._2
594+ if ((0 >= cK))
595+ then throw(("Estimated amount must be positive. Actual: " + toString(cK)))
596+ else if ((cL > cK))
597+ then throw(((("Minimal amount can't be greater than estimated. Estimated: " + toString(cK)) + ". Minimal: ") + toString(cL)))
599598 else if ((size(as.payments) != 1))
600- then bm()
599+ then bl()
601600 else if (!(az))
602- then ([ScriptTransfer(as.caller, ck, cl)] ++ br())
603- else if (if ((cl != N))
604- then (cl != O)
601+ then ([ScriptTransfer(as.caller, cj, ck)] ++ bq())
602+ else if (if ((ck != N))
603+ then (ck != O)
605604 else false)
606- then bl()
607- else if ((10000000 > ck))
605+ then bk()
606+ else if ((10000000 > cj))
608607 then throw("Only swap of 10.000000 or more tokens is allowed")
609- else if (if ((ai > fraction(ac, cM, ck)))
608+ else if (if ((ai > fraction(ac, cL, cj)))
610609 then true
611- else (fraction(ac, cL, ck) > aj))
610+ else (fraction(ac, cK, cj) > aj))
612611 then throw("Incorrect args and pmt ratio")
613612 else {
614- let cO = if ((cl == N))
613+ let cN = if ((ck == N))
615614 then O
616615 else N
617- let cP = aF(cL, cM, ck, cl)
618- let bv = cP._1
619- let cQ = cP._2
620- let cR = fraction(bv, Z, aa)
621- let cS = fraction(bv, (aa - Y), aa)
622- let cT = if ((cl == N))
623- then $Tuple2((T + ck), ((U - cS) - cR))
624- else $Tuple2(((T - cS) - cR), (U + ck))
625- let cB = cT._1
626- let cC = cT._2
627- let cH = fraction((cB + cC), ag, (2 * ah))
628- if (if ((cH > cB))
616+ let bu = aF(cK, cL, cj, ck)
617+ let cO = fraction(bu, Z, aa)
618+ let cP = fraction(bu, (aa - Y), aa)
619+ let cQ = if ((ck == N))
620+ then $Tuple2((T + cj), ((U - cP) - cO))
621+ else $Tuple2(((T - cP) - cO), (U + cj))
622+ let cA = cQ._1
623+ let cB = cQ._2
624+ let cG = fraction((cA + cB), ag, (2 * ah))
625+ if (if ((cG > cA))
629626 then true
630- else (cH > cC))
631- then bn(cH, cB, cC)
627+ else (cG > cB))
628+ then bm(cG, cA, cB)
632629 else {
633- let cU = bd(cl)
634- let cn = cU._1
635- let co = cU._2
636- let cp = cU._3
637- let cV = bd(cO)
638- let cW = cV._1
639- let cX = cV._2
640- let cY = cV._3
641- let bV = if (containsElement(H, cn))
642- then invoke(this, "stakeUnstake", [true, ck, cn], nil)
630+ let cR = bc(ck)
631+ let cm = cR._1
632+ let cn = cR._2
633+ let co = cR._3
634+ let cS = bc(cN)
635+ let cT = cS._1
636+ let cU = cS._2
637+ let cV = cS._3
638+ let bU = if (containsElement(H, cm))
639+ then invoke(this, "stakeUnstake", [true, cj, cm], nil)
643640 else 0
644- if ((bV == bV))
641+ if ((bU == bU))
645642 then {
646- let bW = if (containsElement(H, cW))
647- then invoke(this, "stakeUnstake", [false, (cS + cR), cW], nil)
643+ let bV = if (containsElement(H, cT))
644+ then invoke(this, "stakeUnstake", [false, (cP + cO), cT], nil)
648645 else 0
649- if ((bW == bW))
650- then [IntegerEntry(f, cB), IntegerEntry(g, cC), IntegerEntry(l, cQ), ScriptTransfer(as.caller, cS, cO), ScriptTransfer(E, cR, cO)]
646+ if ((bV == bV))
647+ then [IntegerEntry(f, cA), IntegerEntry(g, cB), IntegerEntry(l, aD(cA, cB)), ScriptTransfer(as.caller, cP, cN), ScriptTransfer(E, cO, cN)]
651648 else throw("Strict value is not equal to itself.")
652649 }
653650 else throw("Strict value is not equal to itself.")
654651 }
655652 }
656653 })
657654
658655
659656
660657 @Callable(as)
661-func shutdown () = valueOrElse(bk(as), if (!(K))
658+func shutdown () = valueOrElse(bj(as), if (!(K))
662659 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, m), "the cause wasn't specified")))
663- else bg("Paused by admin"))
660+ else bf("Paused by admin"))
664661
665662
666663
667664 @Callable(as)
668-func activate () = valueOrElse(bk(as), if (K)
669- then bi()
665+func activate () = valueOrElse(bj(as), if (K)
666+ then bh()
670667 else [BooleanEntry(c, true), DeleteEntry(m)])
671668
672669
673670
674671 @Callable(as)
675-func takeIntoAccountExtraFunds () = valueOrElse(bj(), {
676- let cZ = (ax - T)
677- let da = (ay - U)
678- let cE = aD((T + cZ), (U + da))
672+func takeIntoAccountExtraFunds () = valueOrElse(bi(), {
673+ let cW = (ax - T)
674+ let cX = (ay - U)
675+ let cD = aD((T + cW), (U + cX))
679676 if ((as.caller != E))
680677 then throw("Only the wallet can call this function")
681- else if (if ((0 > cZ))
678+ else if (if ((0 > cW))
682679 then true
683- else (0 > da))
684- then bg("Enroll amount negative")
685- else if (if ((cZ == 0))
686- then (da == 0)
680+ else (0 > cX))
681+ then bf("Enroll amount negative")
682+ else if (if ((cW == 0))
683+ then (cX == 0)
687684 else false)
688685 then throw("No money to take")
689686 else {
690- let bV = if (if (containsElement(H, L))
691- then (cZ > 0)
687+ let bU = if (if (containsElement(H, L))
688+ then (cW > 0)
692689 else false)
693- then invoke(this, "stakeUnstake", [true, cZ, L], nil)
690+ then invoke(this, "stakeUnstake", [true, cW, L], nil)
694691 else 0
695- if ((bV == bV))
692+ if ((bU == bU))
696693 then {
697- let bW = if (if (containsElement(H, M))
698- then (da > 0)
694+ let bV = if (if (containsElement(H, M))
695+ then (cX > 0)
699696 else false)
700- then invoke(this, "stakeUnstake", [true, da, M], nil)
697+ then invoke(this, "stakeUnstake", [true, cX, M], nil)
701698 else 0
702- if ((bW == bW))
703- then [IntegerEntry(l, cE), IntegerEntry(f, (T + cZ)), IntegerEntry(g, (U + da)), IntegerEntry(("last_income_" + L), cZ), IntegerEntry(("last_income_" + M), da)]
699+ if ((bV == bV))
700+ then [IntegerEntry(l, cD), IntegerEntry(f, (T + cW)), IntegerEntry(g, (U + cX)), IntegerEntry(("last_income_" + L), cW), IntegerEntry(("last_income_" + M), cX)]
704701 else throw("Strict value is not equal to itself.")
705702 }
706703 else throw("Strict value is not equal to itself.")
707704 }
708705 })
709706
710707
711708
712709 @Callable(as)
713-func writeBigIntInvariant () = valueOrElse(bk(as), {
714- let cE = aD(T, U)
715-[IntegerEntry(l, cE)]
710+func writeBigIntInvariant () = valueOrElse(bj(as), {
711+ let cD = aD(T, U)
712+[IntegerEntry(l, cD)]
716713 })
717714
718715
719716
720717 @Callable(as)
721-func stakeUnstake (bt,bv,db) = if ((as.caller != this))
718+func stakeUnstake (bs,bu,cY) = if ((as.caller != this))
722719 then throw("Only contract itself can invoke this function")
723720 else {
724- let dc = bu(bt, bv, fromBase58String(db))
725- let bx = dc._1
726- let dd = dc._2
727- let de = dc._3
728- let df = dc._4
729- let dg = invoke(dd, bx, de, df)
730- if ((dg == dg))
721+ let cZ = bt(bs, bu, fromBase58String(cY))
722+ let bw = cZ._1
723+ let da = cZ._2
724+ let db = cZ._3
725+ let dc = cZ._4
726+ let dd = invoke(da, bw, db, dc)
727+ if ((dd == dd))
731728 then nil
732729 else throw("Strict value is not equal to itself.")
733730 }
734731
735732
736-@Verifier(dh)
737-func di () = {
738- let dj = {
739- let dk = if (sigVerify(dh.bodyBytes, dh.proofs[0], z))
733+@Verifier(de)
734+func df () = {
735+ let dg = {
736+ let dh = if (sigVerify(de.bodyBytes, de.proofs[0], z))
740737 then 1
741738 else 0
742- let dl = if (sigVerify(dh.bodyBytes, dh.proofs[1], A))
739+ let di = if (sigVerify(de.bodyBytes, de.proofs[1], A))
743740 then 1
744741 else 0
745- let dm = if (sigVerify(dh.bodyBytes, dh.proofs[2], B))
742+ let dj = if (sigVerify(de.bodyBytes, de.proofs[2], B))
746743 then 1
747744 else 0
748- (((dk + dl) + dm) >= 2)
745+ (((dh + di) + dj) >= 2)
749746 }
750- let w = dh
747+ let w = de
751748 if ($isInstanceOf(w, "InvokeScriptTransaction"))
752749 then {
753- let dg = w
754- let dn = if ((dg.dApp == this))
755- then (dg.function == "takeIntoAccountExtraFunds")
750+ let dd = w
751+ let dk = if ((dd.dApp == this))
752+ then (dd.function == "takeIntoAccountExtraFunds")
756753 else false
757- let do = if (if (if (sigVerify(dh.bodyBytes, dh.proofs[0], z))
754+ let dl = if (if (if (sigVerify(de.bodyBytes, de.proofs[0], z))
758755 then true
759- else sigVerify(dh.bodyBytes, dh.proofs[0], A))
756+ else sigVerify(de.bodyBytes, de.proofs[0], A))
760757 then true
761- else sigVerify(dh.bodyBytes, dh.proofs[0], B))
758+ else sigVerify(de.bodyBytes, de.proofs[0], B))
762759 then true
763- else sigVerify(dh.bodyBytes, dh.proofs[0], D)
764- if (if (dn)
765- then do
760+ else sigVerify(de.bodyBytes, de.proofs[0], D)
761+ if (if (dk)
762+ then dl
766763 else false)
767764 then true
768- else dj
765+ else dg
769766 }
770- else dj
767+ else dg
771768 }
772769

github/deemru/w8io/169f3d6 
258.72 ms