tx · K6qhCjDGRdUw15DWpLt1CAdsCyZ9FuT3uGvnq6L7S8m

3N4yYqBkTUq1mDdHhvAd3St7spCbm84DytS:  -0.02400000 Waves

2023.12.07 11:15 [2875986] smart account 3N4yYqBkTUq1mDdHhvAd3St7spCbm84DytS > SELF 0.00000000 Waves

{ "type": 13, "id": "K6qhCjDGRdUw15DWpLt1CAdsCyZ9FuT3uGvnq6L7S8m", "fee": 2400000, "feeAssetId": null, "timestamp": 1701936971872, "version": 1, "sender": "3N4yYqBkTUq1mDdHhvAd3St7spCbm84DytS", "senderPublicKey": "8h7G4haeVwXKNHXNHsWkC1miUp5CQtk3WmpBKazQPxRh", "proofs": [ "3MbRWeQeEwVTHJBzWHM8vSiCWyZ7n5X6gPgvvBwpJeGqd9uj7vhBMoxDpLpije8XVZajhEXMaptF64ojRtwMEriM" ], "script": "base64:BgI6CAISAwoBARIDCgEBEgASAwoBCBIDCgEBEgMKAQgSAwoBCBIECgIICBIECgIYERIDCgEIEgASAwoBCEEADGNvbnRyYWN0RmlsZQIRbDJtcF9zdGFraW5nLnJpZGUAA1NFUAICX18ABnNjYWxlOACAwtcvAAdzY2FsZTE4AICAkLu61q3wDQANc2NhbGUxOEJpZ0ludAkAtgIBBQdzY2FsZTE4ABJBRERSRVNTX0JZVEVTX1NJWkUAGgANQkxPQ0tTX0lOX0RBWQCgCwEIdGhyb3dFcnIBA21zZwkAAgEJAKwCAgkArAICBQxjb250cmFjdEZpbGUCAjogBQNtc2cACmtleUFzc2V0SWQJALkJAgkAzAgCAgIlcwkAzAgCAgdhc3NldElkBQNuaWwFA1NFUAATa2V5RW1pc3Npb25QZXJCbG9jawkAuQkCCQDMCAICAiVzCQDMCAICEGVtaXNzaW9uUGVyQmxvY2sFA25pbAUDU0VQABlrZXlFbWlzc2lvblBlcmlvZEluQmxvY2tzCQC5CQIJAMwIAgICJXMJAMwIAgIWZW1pc3Npb25QZXJpb2RJbkJsb2NrcwUDbmlsBQNTRVAADWtleVN0YXJ0QmxvY2sJALkJAgkAzAgCAgIlcwkAzAgCAgpzdGFydEJsb2NrBQNuaWwFA1NFUAAQa2V5VG90YWxMcEFtb3VudAkAuQkCCQDMCAICAiVzCQDMCAICDXRvdGFsTHBBbW91bnQFA25pbAUDU0VQABNrZXlUb3RhbEFzc2V0QW1vdW50CQC5CQIJAMwIAgICJXMJAMwIAgIQdG90YWxBc3NldEFtb3VudAUDbmlsBQNTRVAAFmtleVRvdGFsTG9ja2VkTHBBbW91bnQJALkJAgkAzAgCAgIlcwkAzAgCAhN0b3RhbExvY2tlZExwQW1vdW50BQNuaWwFA1NFUAEPa2V5VXNlckxwQW1vdW50AQt1c2VyQWRkcmVzcwkAuQkCCQDMCAICBCVzJXMJAMwIAgIMdXNlckxwQW1vdW50CQDMCAIFC3VzZXJBZGRyZXNzBQNuaWwFA1NFUAEVa2V5VXNlckxvY2tlZExwQW1vdW50AQt1c2VyQWRkcmVzcwkAuQkCCQDMCAICBCVzJXMJAMwIAgISdXNlckxvY2tlZExwQW1vdW50CQDMCAIFC3VzZXJBZGRyZXNzBQNuaWwFA1NFUAETa2V5VXNlclN0YWtpbmdOb2RlcwELdXNlckFkZHJlc3MJALkJAgkAzAgCAgQlcyVzCQDMCAICEHVzZXJTdGFraW5nTm9kZXMJAMwIAgULdXNlckFkZHJlc3MFA25pbAUDU0VQARlrZXlVc2VyU3Rha2luZ05vZGVzU2hhcmVzAQt1c2VyQWRkcmVzcwkAuQkCCQDMCAICBCVzJXMJAMwIAgIWdXNlclN0YWtpbmdOb2Rlc1NoYXJlcwkAzAgCBQt1c2VyQWRkcmVzcwUDbmlsBQNTRVABGmtleVVzZXJUb3RhbEFzc2V0V2l0aGRyYXduAQt1c2VyQWRkcmVzcwkAuQkCCQDMCAICBCVzJXMJAMwIAgITdG90YWxBc3NldFdpdGhkcmF3bgkAzAgCBQt1c2VyQWRkcmVzcwUDbmlsBQNTRVABF2tleVVzZXJUb3RhbEFzc2V0U3Rha2VkAQt1c2VyQWRkcmVzcwkAuQkCCQDMCAICBCVzJXMJAMwIAgIQdG90YWxBc3NldFN0YWtlZAkAzAgCBQt1c2VyQWRkcmVzcwUDbmlsBQNTRVABCmtleUhpc3RvcnkDBHR5cGULdXNlckFkZHJlc3MEdHhJZAkAuQkCCQDMCAICBiVzJXMlcwkAzAgCBQR0eXBlCQDMCAIFC3VzZXJBZGRyZXNzCQDMCAIJANgEAQUEdHhJZAUDbmlsBQNTRVABDWZvcm1hdEhpc3RvcnkEC3RvdGFsUHJvZml0BXByaWNlEHRvdGFsQXNzZXRBbW91bnQNdG90YWxMcEFtb3VudAkAuQkCCQDMCAICCCVkJWQlZCVkCQDMCAIJAKQDAQULdG90YWxQcm9maXQJAMwIAgkApgMBBQVwcmljZQkAzAgCCQCkAwEFEHRvdGFsQXNzZXRBbW91bnQJAMwIAgkApAMBBQ10b3RhbExwQW1vdW50BQNuaWwFA1NFUAANdG90YWxMcEFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBRBrZXlUb3RhbExwQW1vdW50AAAAEHRvdGFsQXNzZXRBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUTa2V5VG90YWxBc3NldEFtb3VudAAAABN0b3RhbExvY2tlZExwQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFFmtleVRvdGFsTG9ja2VkTHBBbW91bnQAAAANYXNzZXRJZFN0cmluZwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQprZXlBc3NldElkAgVXQVZFUwAMYXNzZXRJZEJ5dGVzAwkAAAIFDWFzc2V0SWRTdHJpbmcCBVdBVkVTBQR1bml0CQDZBAEFDWFzc2V0SWRTdHJpbmcAFmVtaXNzaW9uUGVyaW9kSW5CbG9ja3MJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUZa2V5RW1pc3Npb25QZXJpb2RJbkJsb2NrcwUNQkxPQ0tTX0lOX0RBWQAQZW1pc3Npb25QZXJCbG9jawkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBRNrZXlFbWlzc2lvblBlckJsb2NrAAAAEWVtaXNzaW9uUGVyUGVyaW9kCQBoAgUQZW1pc3Npb25QZXJCbG9jawUWZW1pc3Npb25QZXJpb2RJbkJsb2NrcwAPQURNSU5fTElTVF9TSVpFAAUABlFVT1JVTQADABFUWElEX0JZVEVTX0xFTkdUSAAgARhrZXlBbGxvd2VkVHhJZFZvdGVQcmVmaXgBBHR4SWQJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIJYWxsb3dUeElkCQDMCAIFBHR4SWQFA25pbAUDU0VQARBrZXlGdWxsQWRtaW5Wb3RlAgZwcmVmaXgMYWRtaW5BZGRyZXNzCQC5CQIJAMwIAgUGcHJlZml4CQDMCAIFDGFkbWluQWRkcmVzcwUDbmlsBQNTRVABE2tleUFkbWluQWRkcmVzc0xpc3QACQC5CQIJAMwIAgICJXMJAMwIAgIQYWRtaW5BZGRyZXNzTGlzdAUDbmlsBQNTRVABDmtleUFsbG93ZWRUeElkAAkAuQkCCQDMCAICAiVzCQDMCAICBHR4SWQFA25pbAUDU0VQAQxnZXRBZG1pblZvdGUCBnByZWZpeAVhZG1pbgQHdm90ZUtleQkBEGtleUZ1bGxBZG1pblZvdGUCBQZwcmVmaXgFBWFkbWluCQELdmFsdWVPckVsc2UCCQCfCAEFB3ZvdGVLZXkAAAENZ2V0QWRtaW5zTGlzdAAEByRtYXRjaDAJAJ0IAgUEdGhpcwkBE2tleUFkbWluQWRkcmVzc0xpc3QAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkAtQkCBQFzBQNTRVAFA25pbAENaXNJbkFkbWluTGlzdAEHYWRkcmVzcwkBD2NvbnRhaW5zRWxlbWVudAIJAQ1nZXRBZG1pbnNMaXN0AAUHYWRkcmVzcwESZ2VuVm90ZXNLZXlzSGVscGVyAgFhDGFkbWluQWRkcmVzcwQLJHQwMzU5NTM2MTkFAWEEBnJlc3VsdAgFCyR0MDM1OTUzNjE5Al8xBAZwcmVmaXgIBQskdDAzNTk1MzYxOQJfMgkAlAoCCQDNCAIFBnJlc3VsdAkBEGtleUZ1bGxBZG1pblZvdGUCBQZwcmVmaXgFDGFkbWluQWRkcmVzcwUGcHJlZml4AQxnZW5Wb3Rlc0tleXMBCWtleVByZWZpeAQJYWRtaW5MaXN0CQETa2V5QWRtaW5BZGRyZXNzTGlzdAAECyR0MDM3NjYzODUwCgACJGwJAQ1nZXRBZG1pbnNMaXN0AAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsBQlrZXlQcmVmaXgKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEmdlblZvdGVzS2V5c0hlbHBlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUEBnJlc3VsdAgFCyR0MDM3NjYzODUwAl8xBAZwcmVmaXgIBQskdDAzNzY2Mzg1MAJfMgUGcmVzdWx0ARBjb3VudFZvdGVzSGVscGVyAgZyZXN1bHQHdm90ZUtleQkAZAIFBnJlc3VsdAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQd2b3RlS2V5AAABCmNvdW50Vm90ZXMBBnByZWZpeAQFdm90ZXMJAQxnZW5Wb3Rlc0tleXMBBQZwcmVmaXgKAAIkbAUFdm90ZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEGNvdW50Vm90ZXNIZWxwZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFARBjbGVhclZvdGVzSGVscGVyAgZyZXN1bHQDa2V5CQDNCAIFBnJlc3VsdAkBC0RlbGV0ZUVudHJ5AQUDa2V5ARNnZXRDbGVhclZvdGVFbnRyaWVzAQZwcmVmaXgEBXZvdGVzCQEMZ2VuVm90ZXNLZXlzAQUGcHJlZml4CgACJGwFBXZvdGVzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARBjbGVhclZvdGVzSGVscGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQEMdm90ZUlOVEVSTkFMBBNjYWxsZXJBZGRyZXNzU3RyaW5nCWtleVByZWZpeAhtaW5Wb3Rlcwp2b3RlUmVzdWx0BAd2b3RlS2V5CQEQa2V5RnVsbEFkbWluVm90ZQIFCWtleVByZWZpeAUTY2FsbGVyQWRkcmVzc1N0cmluZwQQYWRtaW5DdXJyZW50Vm90ZQkBDGdldEFkbWluVm90ZQIFCWtleVByZWZpeAUTY2FsbGVyQWRkcmVzc1N0cmluZwQDZXJyAwkBASEBCQENaXNJbkFkbWluTGlzdAEFE2NhbGxlckFkZHJlc3NTdHJpbmcJAQh0aHJvd0VycgEJAKwCAgkArAICAglBZGRyZXNzOiAFE2NhbGxlckFkZHJlc3NTdHJpbmcCEiBub3QgaW4gQWRtaW4gbGlzdAMJAAACBRBhZG1pbkN1cnJlbnRWb3RlAAEJAQh0aHJvd0VycgEJAKwCAgUHdm90ZUtleQISIHlvdSBhbHJlYWR5IHZvdGVkBQR1bml0AwkAAAIFA2VycgUDZXJyBAV2b3RlcwkBCmNvdW50Vm90ZXMBBQlrZXlQcmVmaXgDCQBnAgkAZAIFBXZvdGVzAAEFCG1pblZvdGVzBBBjbGVhclZvdGVFbnRyaWVzCQETZ2V0Q2xlYXJWb3RlRW50cmllcwEFCWtleVByZWZpeAkAzggCBRBjbGVhclZvdGVFbnRyaWVzBQp2b3RlUmVzdWx0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd2b3RlS2V5AAEFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEZc3RyaW5nTGlzdFRvSW50TGlzdEhlbHBlcgIDYWNjBXZhbHVlCQDNCAIFA2FjYwkBDXBhcnNlSW50VmFsdWUBBQV2YWx1ZQEYY2FsY1RvdGFsUHJvZml0Rm9ySGVpZ2h0AQFoBApzdGFydEJsb2NrCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFDWtleVN0YXJ0QmxvY2sFBmhlaWdodAQLc3RhcnRQZXJpb2QJAGsDBQpzdGFydEJsb2NrAAEFFmVtaXNzaW9uUGVyaW9kSW5CbG9ja3MEDmVsYXBzZWRQZXJpb2RzCQBlAgkAaQIFAWgFFmVtaXNzaW9uUGVyaW9kSW5CbG9ja3MFC3N0YXJ0UGVyaW9kCQCWAwEJAMwIAgAACQDMCAIJAGgCBRFlbWlzc2lvblBlclBlcmlvZAUOZWxhcHNlZFBlcmlvZHMFA25pbAEPY2FsY1RvdGFsUHJvZml0AAkBGGNhbGNUb3RhbFByb2ZpdEZvckhlaWdodAEFBmhlaWdodAEUZ2V0TWF4QXNzZXRBdmFpbGFibGUABAckbWF0Y2gwBQxhc3NldElkQnl0ZXMDCQABAgUHJG1hdGNoMAIEVW5pdAQBdQUHJG1hdGNoMAgJAO8HAQUEdGhpcwlhdmFpbGFibGUDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAkA8AcCBQR0aGlzBQFiCQACAQILTWF0Y2ggZXJyb3IBK2dldFRvdGFsQXNzZXRBbW91bnRXaXRoUHJvZml0T3JNYXhBdmFpbGFibGUABBp0b3RhbEFzc2V0QW1vdW50V2l0aFByb2ZpdAkAZAIFEHRvdGFsQXNzZXRBbW91bnQJAQ9jYWxjVG90YWxQcm9maXQABAt0b3RhbEFtb3VudAkAlwMBCQDMCAIFGnRvdGFsQXNzZXRBbW91bnRXaXRoUHJvZml0CQDMCAIJARRnZXRNYXhBc3NldEF2YWlsYWJsZQAFA25pbAMJAAACBQ10b3RhbExwQW1vdW50AAAAAAULdG90YWxBbW91bnQBD2dldEN1cnJlbnRQcmljZQADCQECIT0CBQ10b3RhbExwQW1vdW50AAAJALwCAwkAtgIBCQErZ2V0VG90YWxBc3NldEFtb3VudFdpdGhQcm9maXRPck1heEF2YWlsYWJsZQAFDXNjYWxlMThCaWdJbnQJALYCAQUNdG90YWxMcEFtb3VudAUNc2NhbGUxOEJpZ0ludAESZ2V0UmVtYWluaW5nQmxvY2tzAAMJAAACBRBlbWlzc2lvblBlckJsb2NrAAAAAAkAawMJAGUCCQEUZ2V0TWF4QXNzZXRBdmFpbGFibGUACQErZ2V0VG90YWxBc3NldEFtb3VudFdpdGhQcm9maXRPck1heEF2YWlsYWJsZQAAAQUQZW1pc3Npb25QZXJCbG9jawEXZ2V0VXNlclN0YWtpbmdOb2Rlc0RhdGEBC3VzZXJBZGRyZXNzBAhub2Rlc1JhdwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQETa2V5VXNlclN0YWtpbmdOb2RlcwEFC3VzZXJBZGRyZXNzAgAECXNoYXJlc1JhdwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEZa2V5VXNlclN0YWtpbmdOb2Rlc1NoYXJlcwEFC3VzZXJBZGRyZXNzAgAECW5vZGVzTGlzdAMJAAACBQhub2Rlc1JhdwIABQNuaWwJALUJAgUIbm9kZXNSYXcFA1NFUAQQc2hhcmVzU3RyaW5nTGlzdAMJAAACBQlzaGFyZXNSYXcCAAUDbmlsCQC1CQIFCXNoYXJlc1JhdwUDU0VQBApzaGFyZXNMaXN0CgACJGwFEHNoYXJlc1N0cmluZ0xpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBGXN0cmluZ0xpc3RUb0ludExpc3RIZWxwZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAkAlAoCBQlub2Rlc0xpc3QFCnNoYXJlc0xpc3QBD2NhbGNBc3NldEZyb21McAEIbHBBbW91bnQJAJYDAQkAzAgCAAAJAMwIAgkAoAMBCQC8AgMJALYCAQUIbHBBbW91bnQJAQ9nZXRDdXJyZW50UHJpY2UABQ1zY2FsZTE4QmlnSW50BQNuaWwBD2NhbGNMcEZyb21Bc3NldAELYXNzZXRBbW91bnQJAJYDAQkAzAgCAAAJAMwIAgkAoAMBCQC8AgMJALYCAQULYXNzZXRBbW91bnQFDXNjYWxlMThCaWdJbnQJAQ9nZXRDdXJyZW50UHJpY2UABQNuaWwBD2dldFVzZXJMcEFtb3VudAELdXNlckFkZHJlc3MJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBD2tleVVzZXJMcEFtb3VudAEFC3VzZXJBZGRyZXNzAAABFWdldFVzZXJMb2NrZWRMcEFtb3VudAELdXNlckFkZHJlc3MJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBFWtleVVzZXJMb2NrZWRMcEFtb3VudAEFC3VzZXJBZGRyZXNzAAABIGdldFVzZXJBdmFpbGFibGVBc3NldHNUb1dpdGhkcmF3AQt1c2VyQWRkcmVzcwQMdXNlckxwQW1vdW50CQEPZ2V0VXNlckxwQW1vdW50AQULdXNlckFkZHJlc3MJAQ9jYWxjQXNzZXRGcm9tTHABBQx1c2VyTHBBbW91bnQBG2dldENsZWFyU3Rha2luZ05vZGVzQWN0aW9ucwELdXNlckFkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBE2tleVVzZXJTdGFraW5nTm9kZXMBBQt1c2VyQWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEZa2V5VXNlclN0YWtpbmdOb2Rlc1NoYXJlcwEFC3VzZXJBZGRyZXNzBQNuaWwBD2dldFN0YWtlQWN0aW9ucwIBaQt1c2VyQWRkcmVzcwQGY2hlY2tzCQDMCAIDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABBgkBCHRocm93RXJyAQIYc2hvdWxkIGluY2x1ZGUgMSBwYXltZW50CQDMCAIDCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQxhc3NldElkQnl0ZXMGCQEIdGhyb3dFcnIBCQCsAgICFXBheW1lbnQgc2hvdWxkIGJlIGluIAUNYXNzZXRJZFN0cmluZwkAzAgCAwkAZgIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50AAAGAidwYXltZW50IGFtb3VudCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIDAJAMwIAgMJAAACCQDIAQEJANkEAQULdXNlckFkZHJlc3MFEkFERFJFU1NfQllURVNfU0laRQYJAQh0aHJvd0VycgECGXVzZXIgYWRkcmVzcyBpcyBub3QgdmFsaWQFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQNcGF5bWVudEFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQED3BheW1lbnRMcEFtb3VudAkBD2NhbGNMcEZyb21Bc3NldAEFDXBheW1lbnRBbW91bnQEDHVzZXJMcEFtb3VudAkBD2dldFVzZXJMcEFtb3VudAEFC3VzZXJBZGRyZXNzBBV1c2VyVG90YWxTdGFrZWRBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBF2tleVVzZXJUb3RhbEFzc2V0U3Rha2VkAQULdXNlckFkZHJlc3MAAAQQbmV3VG90YWxMcEFtb3VudAkAZAIFDXRvdGFsTHBBbW91bnQFD3BheW1lbnRMcEFtb3VudAQTbmV3VG90YWxBc3NldEFtb3VudAkBD2NhbGNBc3NldEZyb21McAEFEG5ld1RvdGFsTHBBbW91bnQED25ld1VzZXJMcEFtb3VudAkAZAIFDHVzZXJMcEFtb3VudAUPcGF5bWVudExwQW1vdW50BBhuZXdVc2VyVG90YWxTdGFrZWRBbW91bnQJAGQCBRV1c2VyVG90YWxTdGFrZWRBbW91bnQFDXBheW1lbnRBbW91bnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBCmtleUhpc3RvcnkDAgVzdGFrZQULdXNlckFkZHJlc3MIBQFpDXRyYW5zYWN0aW9uSWQJAQ1mb3JtYXRIaXN0b3J5BAkBD2NhbGNUb3RhbFByb2ZpdAAJAQ9nZXRDdXJyZW50UHJpY2UABQ10b3RhbExwQW1vdW50BRB0b3RhbEFzc2V0QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrZXlUb3RhbExwQW1vdW50BRBuZXdUb3RhbExwQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrZXlUb3RhbEFzc2V0QW1vdW50BRNuZXdUb3RhbEFzc2V0QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEPa2V5VXNlckxwQW1vdW50AQULdXNlckFkZHJlc3MFD25ld1VzZXJMcEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBF2tleVVzZXJUb3RhbEFzc2V0U3Rha2VkAQULdXNlckFkZHJlc3MFGG5ld1VzZXJUb3RhbFN0YWtlZEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa2V5U3RhcnRCbG9jawUGaGVpZ2h0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BEmdldFdpdGhkcmF3QWN0aW9ucwIBaRVscEFzc2V0V2l0aGRyYXdBbW91bnQEC3VzZXJBZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQMdXNlckxwQW1vdW50CQEPZ2V0VXNlckxwQW1vdW50AQULdXNlckFkZHJlc3MEBWNoZWNrCQDMCAIDCQBmAgUVbHBBc3NldFdpdGhkcmF3QW1vdW50AAAGCQEIdGhyb3dFcnIBAh9MUCBhbW91bnQgc2hvdWxkIGJlIG1vcmUgdGhhbiAwCQDMCAIDCQBnAgUMdXNlckxwQW1vdW50BRVscEFzc2V0V2l0aGRyYXdBbW91bnQGCQEIdGhyb3dFcnIBCQCsAgIJAKwCAgIoY2Fubm90IHdpdGhkcmF3IG1vcmUgdGhhbiBhdmFpbGFibGUgTFAgKAkApAMBBQx1c2VyTHBBbW91bnQCASkFA25pbAMJAAACBQVjaGVjawUFY2hlY2sED25ld1VzZXJMcEFtb3VudAkAZQIFDHVzZXJMcEFtb3VudAUVbHBBc3NldFdpdGhkcmF3QW1vdW50BBN3aXRoZHJhd0Fzc2V0QW1vdW50CQEPY2FsY0Fzc2V0RnJvbUxwAQUVbHBBc3NldFdpdGhkcmF3QW1vdW50BBBuZXdUb3RhbExwQW1vdW50CQBlAgUNdG90YWxMcEFtb3VudAUVbHBBc3NldFdpdGhkcmF3QW1vdW50BBNuZXdUb3RhbEFzc2V0QW1vdW50CQEPY2FsY0Fzc2V0RnJvbUxwAQUQbmV3VG90YWxMcEFtb3VudAQXdXNlclRvdGFsQXNzZXRXaXRoZHJhd24JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBGmtleVVzZXJUb3RhbEFzc2V0V2l0aGRyYXduAQULdXNlckFkZHJlc3MAAAQabmV3VXNlclRvdGFsQXNzZXRXaXRoZHJhd24JAGQCBRd1c2VyVG90YWxBc3NldFdpdGhkcmF3bgUTd2l0aGRyYXdBc3NldEFtb3VudAQXY2xlYXJTdGFraW5nTm9kZXNBY3Rpb24DCQAAAgUPbmV3VXNlckxwQW1vdW50AAAJARtnZXRDbGVhclN0YWtpbmdOb2Rlc0FjdGlvbnMBBQt1c2VyQWRkcmVzcwUDbmlsCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBCmtleUhpc3RvcnkDAgh3aXRoZHJhdwULdXNlckFkZHJlc3MIBQFpDXRyYW5zYWN0aW9uSWQJAQ1mb3JtYXRIaXN0b3J5BAkBD2NhbGNUb3RhbFByb2ZpdAAJAQ9nZXRDdXJyZW50UHJpY2UABQ10b3RhbExwQW1vdW50BRB0b3RhbEFzc2V0QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrZXlUb3RhbExwQW1vdW50BRBuZXdUb3RhbExwQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrZXlUb3RhbEFzc2V0QW1vdW50BRNuZXdUb3RhbEFzc2V0QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEPa2V5VXNlckxwQW1vdW50AQULdXNlckFkZHJlc3MFD25ld1VzZXJMcEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGmtleVVzZXJUb3RhbEFzc2V0V2l0aGRyYXduAQULdXNlckFkZHJlc3MFGm5ld1VzZXJUb3RhbEFzc2V0V2l0aGRyYXduCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rZXlTdGFydEJsb2NrBQZoZWlnaHQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBRN3aXRoZHJhd0Fzc2V0QW1vdW50BQxhc3NldElkQnl0ZXMFA25pbAUXY2xlYXJTdGFraW5nTm9kZXNBY3Rpb24JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BGGdldFNldFN0YWtpbmdOb2RlQWN0aW9ucwMLdXNlckFkZHJlc3MLbm9kZUFkZHJlc3MJbm9kZVNoYXJlBAVjaGVjawkAzAgCAwkAAAIJAMgBAQkA2QQBBQt1c2VyQWRkcmVzcwUSQUREUkVTU19CWVRFU19TSVpFBgkBCHRocm93RXJyAQIZdXNlciBhZGRyZXNzIGlzIG5vdCB2YWxpZAkAzAgCAwkAAAIJAMgBAQkA2QQBBQtub2RlQWRkcmVzcwUSQUREUkVTU19CWVRFU19TSVpFBgkBCHRocm93RXJyAQIZbm9kZSBhZGRyZXNzIGlzIG5vdCB2YWxpZAUDbmlsAwkAAAIFBWNoZWNrBQVjaGVjawkAzAgCCQELU3RyaW5nRW50cnkCCQETa2V5VXNlclN0YWtpbmdOb2RlcwEFC3VzZXJBZGRyZXNzBQtub2RlQWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQEZa2V5VXNlclN0YWtpbmdOb2Rlc1NoYXJlcwEFC3VzZXJBZGRyZXNzCQCkAwEFCW5vZGVTaGFyZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuDAFpARNzZXRFbWlzc2lvblBlckJsb2NrARBlbWlzc2lvblBlckJsb2NrBAVjaGVjawkAzAgCAwkAAAIIBQFpBmNhbGxlcgUEdGhpcwYJAQh0aHJvd0VycgECEXBlcm1pc3Npb24gZGVuaWVkBQNuaWwDCQAAAgUFY2hlY2sFBWNoZWNrCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrZXlUb3RhbEFzc2V0QW1vdW50CQErZ2V0VG90YWxBc3NldEFtb3VudFdpdGhQcm9maXRPck1heEF2YWlsYWJsZQAJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtleVN0YXJ0QmxvY2sFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa2V5RW1pc3Npb25QZXJCbG9jawkAlgMBCQDMCAIAAAkAzAgCBRBlbWlzc2lvblBlckJsb2NrBQNuaWwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARlzZXRFbWlzc2lvblBlcmlvZEluQmxvY2tzAQFwBAVjaGVjawkAzAgCAwkAZgIFAXAAAAYJAQh0aHJvd0VycgECKGVtaXNzaW9uIHBlcmlvZCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIDAJAMwIAgMJAAACCAUBaQZjYWxsZXIFBHRoaXMGCQEIdGhyb3dFcnIBAhFwZXJtaXNzaW9uIGRlbmllZAUDbmlsAwkAAAIFBWNoZWNrBQVjaGVjawkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa2V5VG90YWxBc3NldEFtb3VudAkBK2dldFRvdGFsQXNzZXRBbW91bnRXaXRoUHJvZml0T3JNYXhBdmFpbGFibGUACQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rZXlTdGFydEJsb2NrBQZoZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIFGWtleUVtaXNzaW9uUGVyaW9kSW5CbG9ja3MFAXAFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQVzdGFrZQAEC3VzZXJBZGRyZXNzCQClCAEIBQFpBmNhbGxlcgkBD2dldFN0YWtlQWN0aW9ucwIFAWkFC3VzZXJBZGRyZXNzAWkBCHN0YWtlRm9yAQt1c2VyQWRkcmVzcwkBD2dldFN0YWtlQWN0aW9ucwIFAWkFC3VzZXJBZGRyZXNzAWkBCHdpdGhkcmF3ARN3aXRoZHJhd0Fzc2V0QW1vdW50BAt1c2VyQWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEDHVzZXJMcEFtb3VudAkBD2dldFVzZXJMcEFtb3VudAEFC3VzZXJBZGRyZXNzBBJscEFtb3VudFRvV2l0aGRyYXcJAQ9jYWxjTHBGcm9tQXNzZXQBBRN3aXRoZHJhd0Fzc2V0QW1vdW50BBx1c2VyQXZhaWxhYmxlQXNzZXRUb1dpdGhkcmF3CQEgZ2V0VXNlckF2YWlsYWJsZUFzc2V0c1RvV2l0aGRyYXcBBQt1c2VyQWRkcmVzcwQWbWluV2l0aGRyYXdBc3NldEFtb3VudAkAoAMBCQC9AgQJAQ9nZXRDdXJyZW50UHJpY2UACQC2AgEAAQUNc2NhbGUxOEJpZ0ludAUHQ0VJTElORwQFY2hlY2sJAMwIAgMJAGYCBRN3aXRoZHJhd0Fzc2V0QW1vdW50AAAGCQEIdGhyb3dFcnIBAiV3aXRoZHJhdyBhbW91bnQgc2hvdWxkIGJlIG1vcmUgdGhhbiAwCQDMCAIDCQBnAgUcdXNlckF2YWlsYWJsZUFzc2V0VG9XaXRoZHJhdwUTd2l0aGRyYXdBc3NldEFtb3VudAYJAQh0aHJvd0VycgEJAKwCAgkArAICAiVjYW5ub3Qgd2l0aGRyYXcgbW9yZSB0aGFuIGF2YWlsYWJsZSAoCQCkAwEFHHVzZXJBdmFpbGFibGVBc3NldFRvV2l0aGRyYXcCASkJAMwIAgMJAGcCBRN3aXRoZHJhd0Fzc2V0QW1vdW50BRZtaW5XaXRoZHJhd0Fzc2V0QW1vdW50BgkBCHRocm93RXJyAQkArAICCQCsAgICJHdpdGhkcmF3IGFtb3VudCBpcyB0b28gc21hbGwuIE1pbjogKAkApAMBBRZtaW5XaXRoZHJhd0Fzc2V0QW1vdW50AgEpBQNuaWwDCQAAAgUFY2hlY2sFBWNoZWNrCQESZ2V0V2l0aGRyYXdBY3Rpb25zAgUBaQkAlwMBCQDMCAIFDHVzZXJMcEFtb3VudAkAzAgCCQBkAgUSbHBBbW91bnRUb1dpdGhkcmF3AAEFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ5zZXRTdGFraW5nTm9kZQELbm9kZUFkZHJlc3MEC3VzZXJBZGRyZXNzCQClCAEIBQFpBmNhbGxlcgkBGGdldFNldFN0YWtpbmdOb2RlQWN0aW9ucwMFC3VzZXJBZGRyZXNzBQtub2RlQWRkcmVzcwBkAWkBFnN0YWtlQW5kU2V0U3Rha2luZ05vZGUBC25vZGVBZGRyZXNzBAt1c2VyQWRkcmVzcwkApQgBCAUBaQZjYWxsZXIJAM4IAgkBD2dldFN0YWtlQWN0aW9ucwIFAWkFC3VzZXJBZGRyZXNzCQEYZ2V0U2V0U3Rha2luZ05vZGVBY3Rpb25zAwULdXNlckFkZHJlc3MFC25vZGVBZGRyZXNzAGQBaQESc3Rha2VGb3JTd2FwSEVMUEVSAgt1c2VyQWRkcmVzcwtub2RlQWRkcmVzcwQFY2hlY2sJAMwIAgMJAAACCQClCAEIBQFpDG9yaWdpbkNhbGxlcgULdXNlckFkZHJlc3MGCQEIdGhyb3dFcnIBAi1pLm9yaWdpbkNhbGxlciBzaG91bGQgYmUgZXF1YWwgdG8gdXNlckFkZHJlc3MFA25pbAMJAAACBQVjaGVjawUFY2hlY2sEFXNldFN0YWtpbmdOb2RlQWN0aW9ucwMJAAACBQtub2RlQWRkcmVzcwIABQNuaWwJARhnZXRTZXRTdGFraW5nTm9kZUFjdGlvbnMDBQt1c2VyQWRkcmVzcwULbm9kZUFkZHJlc3MAZAkAzggCCQEPZ2V0U3Rha2VBY3Rpb25zAgUBaQULdXNlckFkZHJlc3MFFXNldFN0YWtpbmdOb2RlQWN0aW9ucwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQdhaXJkcm9wAgthZGRyZXNzTGlzdAphbW91bnRMaXN0CgEDc3VtAgVhY2N1bQRuZXh0AwkAZgIAAAUEbmV4dAkBCHRocm93RXJyAQIjbmVnYXRpdmUgYW1vdW50IHZhbHVlIGluIGFtb3VudExpc3QJAGQCBQVhY2N1bQUEbmV4dAQNYW1vdW50TGlzdFN1bQoAAiRsBQphbW91bnRMaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNzdW0CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDkwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgA/AEAAQQBCAEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaBAVjaGVjawkAzAgCAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQYJAQh0aHJvd0VycgECGHNob3VsZCBpbmNsdWRlIDEgcGF5bWVudAkAzAgCAwkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUMYXNzZXRJZEJ5dGVzBgkBCHRocm93RXJyAQkArAICAhVwYXltZW50IHNob3VsZCBiZSBpbiAFDWFzc2V0SWRTdHJpbmcJAMwIAgMJAGYCCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAAABgIncGF5bWVudCBhbW91bnQgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAwCQDMCAIDCQAAAgkAkAMBBQthZGRyZXNzTGlzdAkAkAMBBQphbW91bnRMaXN0BgkBCHRocm93RXJyAQItYWRkcmVzc0xpc3Qgc2hvdWxkIGJlIHNhbWUgc2l6ZSBhcyBhbW91bnRMaXN0CQDMCAIDCQBnAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFDWFtb3VudExpc3RTdW0GCQEIdGhyb3dFcnIBAi1wYXltZW50IGFtb3VudCBpcyBsZXNzIHRoYW4gc3VtIG9mIGFtb3VudExpc3QFA25pbAMJAAACBQVjaGVjawUFY2hlY2sKARZnZXRBaXJkcm9wU3RhdGVDaGFuZ2VzAgVhY2N1bQthc3NldEFtb3VudAQNJHQwMTUxMTUxNTE2NgUFYWNjdW0EBnJlc3VsdAgFDSR0MDE1MTE1MTUxNjYCXzEEBWluZGV4CAUNJHQwMTUxMTUxNTE2NgJfMgQHdG90YWxMcAgFDSR0MDE1MTE1MTUxNjYCXzMEDXByb2Nlc3NlZExpc3QIBQ0kdDAxNTExNTE1MTY2Al80BA1hZGRyZXNzU3RyaW5nCQCRAwIFC2FkZHJlc3NMaXN0BQVpbmRleAQHYWRkcmVzcwQHJG1hdGNoMAkApggBBQ1hZGRyZXNzU3RyaW5nAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEA2FkcgUHJG1hdGNoMAUDYWRyCQEIdGhyb3dFcnIBAh5pbnZhbGlkIGFkZHJlc3MgaW4gYWRkcmVzc0xpc3QEAmNoCQDMCAIDCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCBQ1wcm9jZXNzZWRMaXN0BQdhZGRyZXNzBgkBCHRocm93RXJyAQIgZHVwbGljYXRlIGFkZHJlc3MgaXMgYWRkcmVzc0xpc3QFA25pbAMJAAACBQJjaAUCY2gEDWFkZGVkTHBBbW91bnQJAQ9jYWxjTHBGcm9tQXNzZXQBBQthc3NldEFtb3VudAQPdXNlckxvY2tlZExwS2V5CQEVa2V5VXNlckxvY2tlZExwQW1vdW50AQUNYWRkcmVzc1N0cmluZwQLb2xkTHBBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUPdXNlckxvY2tlZExwS2V5AAAJAJYKBAkAzQgCBQZyZXN1bHQJAQxJbnRlZ2VyRW50cnkCBQ91c2VyTG9ja2VkTHBLZXkJAGQCBQtvbGRMcEFtb3VudAUNYWRkZWRMcEFtb3VudAkAZAIFBWluZGV4AAEJAGQCBQd0b3RhbExwBQ1hZGRlZExwQW1vdW50CQDNCAIFDXByb2Nlc3NlZExpc3QFB2FkZHJlc3MJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EDSR0MDE1OTMwMTYwNDcKAAIkbAUKYW1vdW50TGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAUDbmlsAAAAAAUDbmlsCgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARZnZXRBaXJkcm9wU3RhdGVDaGFuZ2VzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYxXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA5MAkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4APwBAAEEAQgBDAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgQOYWlyZHJvcEVudHJpZXMIBQ0kdDAxNTkzMDE2MDQ3Al8xBAJfYQgFDSR0MDE1OTMwMTYwNDcCXzIEGGFkZGVkVG90YWxMb2NrZWRMcEFtb3VudAgFDSR0MDE1OTMwMTYwNDcCXzMEAl9iCAUNJHQwMTU5MzAxNjA0NwJfNAQNbmV3VG90YWxBc3NldAkBD2NhbGNBc3NldEZyb21McAEJAGQCBQ10b3RhbExwQW1vdW50BRhhZGRlZFRvdGFsTG9ja2VkTHBBbW91bnQJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUWa2V5VG90YWxMb2NrZWRMcEFtb3VudAkAZAIFE3RvdGFsTG9ja2VkTHBBbW91bnQFGGFkZGVkVG90YWxMb2NrZWRMcEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa2V5VG90YWxMcEFtb3VudAkAZAIFDXRvdGFsTHBBbW91bnQFGGFkZGVkVG90YWxMb2NrZWRMcEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa2V5VG90YWxBc3NldEFtb3VudAUNbmV3VG90YWxBc3NldAkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa2V5U3RhcnRCbG9jawUGaGVpZ2h0BQNuaWwFDmFpcmRyb3BFbnRyaWVzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFWdldFVzZXJBc3NldHNSRUFET05MWQELdXNlckFkZHJlc3MEDHVzZXJMcEFtb3VudAkBD2dldFVzZXJMcEFtb3VudAEFC3VzZXJBZGRyZXNzBBJ1c2VyTG9ja2VkTHBBbW91bnQJARVnZXRVc2VyTG9ja2VkTHBBbW91bnQBBQt1c2VyQWRkcmVzcwQVdXNlckxvY2tlZEFzc2V0QW1vdW50CQEPY2FsY0Fzc2V0RnJvbUxwAQUSdXNlckxvY2tlZExwQW1vdW50BBx1c2VyQXZhaWxhYmxlQXNzZXRUb1dpdGhkcmF3CQEgZ2V0VXNlckF2YWlsYWJsZUFzc2V0c1RvV2l0aGRyYXcBBQt1c2VyQWRkcmVzcwQVdXNlclRvdGFsU3Rha2VkQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARdrZXlVc2VyVG90YWxBc3NldFN0YWtlZAEFC3VzZXJBZGRyZXNzAAAEF3VzZXJUb3RhbEFzc2V0V2l0aGRyYXduCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARprZXlVc2VyVG90YWxBc3NldFdpdGhkcmF3bgEFC3VzZXJBZGRyZXNzAAAEDSR0MDE3Mzk3MTc0ODkJARdnZXRVc2VyU3Rha2luZ05vZGVzRGF0YQEFC3VzZXJBZGRyZXNzBBR1c2VyU3Rha2luZ05vZGVzTGlzdAgFDSR0MDE3Mzk3MTc0ODkCXzEEGXVzZXJTdGFraW5nTm9kZVNoYXJlc0xpc3QIBQ0kdDAxNzM5NzE3NDg5Al8yCQCUCgIFA25pbAkAnAoKBQx1c2VyTHBBbW91bnQFHHVzZXJBdmFpbGFibGVBc3NldFRvV2l0aGRyYXcJAQ9nZXRDdXJyZW50UHJpY2UABRV1c2VyVG90YWxTdGFrZWRBbW91bnQFF3VzZXJUb3RhbEFzc2V0V2l0aGRyYXduBRJ1c2VyTG9ja2VkTHBBbW91bnQFFXVzZXJMb2NrZWRBc3NldEFtb3VudAUUdXNlclN0YWtpbmdOb2Rlc0xpc3QFGXVzZXJTdGFraW5nTm9kZVNoYXJlc0xpc3QJARJnZXRSZW1haW5pbmdCbG9ja3MAAWkBFmdldFRvdGFsQXNzZXRzUkVBRE9OTFkACQCUCgIFA25pbAkAmAoGBQ10b3RhbExwQW1vdW50CQErZ2V0VG90YWxBc3NldEFtb3VudFdpdGhQcm9maXRPck1heEF2YWlsYWJsZQAJAQ9nZXRDdXJyZW50UHJpY2UABRN0b3RhbExvY2tlZExwQW1vdW50CQEPY2FsY0Fzc2V0RnJvbUxwAQUTdG90YWxMb2NrZWRMcEFtb3VudAkBEmdldFJlbWFpbmluZ0Jsb2NrcwABaQELdm90ZUZvclR4SWQBBHR4SWQEE2NhbGxlckFkZHJlc3NTdHJpbmcJANgEAQgIBQFpBmNhbGxlcgVieXRlcwQJa2V5UHJlZml4CQEYa2V5QWxsb3dlZFR4SWRWb3RlUHJlZml4AQUEdHhJZAQGcmVzdWx0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlBbGxvd2VkVHhJZAAFBHR4SWQFA25pbAQRYWxsb3dlZFR4SWRPcHRpb24JAJ0IAgUEdGhpcwkBDmtleUFsbG93ZWRUeElkAAQDZXJyCQDMCAIDCQAAAgkAyAEBCQDZBAEFBHR4SWQFEVRYSURfQllURVNfTEVOR1RIBgkBCHRocm93RXJyAQkArAICBQR0eElkAhIgaXMgbm90IHZhbGlkIHR4SWQJAMwIAgMDCQAAAgURYWxsb3dlZFR4SWRPcHRpb24FBHVuaXQGCQECIT0CCQEFdmFsdWUBBRFhbGxvd2VkVHhJZE9wdGlvbgUEdHhJZAYJAQh0aHJvd0VycgEJAKwCAgUEdHhJZAITIGlzIGFscmVhZHkgYWxsb3dlZAUDbmlsAwkAAAIFA2VycgUDZXJyCQEMdm90ZUlOVEVSTkFMBAUTY2FsbGVyQWRkcmVzc1N0cmluZwUJa2V5UHJlZml4BQZRVU9SVU0FBnJlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQAECGJ5QWRtaW5zCQAAAggFAnR4AmlkCQDZBAEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBDmtleUFsbG93ZWRUeElkAAIABAdieU93bmVyAwkAZwIJAJADAQkBDWdldEFkbWluc0xpc3QABQZRVU9SVU0HCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5AwUIYnlBZG1pbnMGBQdieU93bmVyaeyP6Q==", "chainId": 84, "height": 2875986, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: C535cxDyehEmG37nqYHoKcV4GDUjkKMxvz6SPyNuZYeX Next: 2TfAUi8mKJujJz9uxrxqcGeDcoLgnWZwsb9HkwwkmmxQ Diff:
OldNewDifferences
459459
460460 @Callable(bl)
461461 func airdrop (bJ,bK) = {
462- func bL (bM,bN) = (bM + bN)
462+ func bL (bM,bN) = if ((0 > bN))
463+ then h("negative amount value in amountList")
464+ else (bM + bN)
463465
464466 let bO = {
465467 let ak = bK
493495 let af = bQ._1
494496 let bR = bQ._2
495497 let bS = bQ._3
496- let bT = bd(be)
497- let bU = s(bJ[bR])
498- let bV = valueOrElse(getInteger(this, bU), 0)
499- $Tuple3((af :+ IntegerEntry(bU, (bV + bT))), (bR + 1), (bS + bT))
498+ let bT = bQ._4
499+ let bU = bJ[bR]
500+ let ab = {
501+ let Y = addressFromString(bU)
502+ if ($isInstanceOf(Y, "Address"))
503+ then {
504+ let bV = Y
505+ bV
506+ }
507+ else h("invalid address in addressList")
508+ }
509+ let bW = [if (!(containsElement(bT, ab)))
510+ then true
511+ else h("duplicate address is addressList")]
512+ if ((bW == bW))
513+ then {
514+ let bX = bd(be)
515+ let bY = s(bU)
516+ let bZ = valueOrElse(getInteger(this, bY), 0)
517+ $Tuple4((af :+ IntegerEntry(bY, (bZ + bX))), (bR + 1), (bS + bX), (bT :+ ab))
518+ }
519+ else throw("Strict value is not equal to itself.")
500520 }
501521
502- let bW = {
522+ let ca = {
503523 let ak = bK
504524 let al = size(ak)
505- let am = $Tuple3(nil, 0, 0)
506- func bX (ao,ap) = if ((ap >= al))
525+ let am = $Tuple4(nil, 0, 0, nil)
526+ func cb (ao,ap) = if ((ap >= al))
507527 then ao
508528 else bP(ao, ak[ap])
509529
510- func bY (ao,ap) = if ((ap >= al))
530+ func cc (ao,ap) = if ((ap >= al))
511531 then ao
512532 else throw("List size exceeds 90")
513533
514- bY(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(am, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90)
534+ cc(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(am, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90)
515535 }
516- let bZ = bW._1
517- let ca = bW._2
518- let cb = bW._3
519- let cc = bb((E + cb))
520- ([IntegerEntry(p, (F + cb)), IntegerEntry(n, (E + cb)), IntegerEntry(o, cc), IntegerEntry(m, height)] ++ bZ)
536+ let cd = ca._1
537+ let ce = ca._2
538+ let cf = ca._3
539+ let cg = ca._4
540+ let ch = bb((E + cf))
541+ ([IntegerEntry(p, (F + cf)), IntegerEntry(n, (E + cf)), IntegerEntry(o, ch), IntegerEntry(m, height)] ++ cd)
521542 }
522543 else throw("Strict value is not equal to itself.")
523544 }
527548 @Callable(bl)
528549 func getUserAssetsREADONLY (r) = {
529550 let bi = bf(r)
530- let cd = bg(r)
531- let ce = bb(cd)
551+ let ci = bg(r)
552+ let cj = bb(ci)
532553 let bG = bh(r)
533554 let bp = valueOrElse(getInteger(this, w(r)), 0)
534555 let by = valueOrElse(getInteger(this, v(r)), 0)
535- let cf = aV(r)
536- let cg = cf._1
537- let ch = cf._2
538- $Tuple2(nil, $Tuple10(bi, bG, aT(), bp, by, cd, ce, cg, ch, aU()))
556+ let ck = aV(r)
557+ let cl = ck._1
558+ let cm = ck._2
559+ $Tuple2(nil, $Tuple10(bi, bG, aT(), bp, by, ci, cj, cl, cm, aU()))
539560 }
540561
541562
550571 let ay = toBase58String(bl.caller.bytes)
551572 let ah = O(z)
552573 let af = [StringEntry(T(), z)]
553- let ci = getString(this, T())
574+ let cn = getString(this, T())
554575 let aC = [if ((size(fromBase58String(z)) == N))
555576 then true
556- else h((z + " is not valid txId")), if (if ((ci == unit))
577+ else h((z + " is not valid txId")), if (if ((cn == unit))
557578 then true
558- else (value(ci) != z))
579+ else (value(cn) != z))
559580 then true
560581 else h((z + " is already allowed"))]
561582 if ((aC == aC))
564585 }
565586
566587
567-@Verifier(cj)
568-func ck () = {
569- let cl = (cj.id == fromBase58String(valueOrElse(getString(this, T()), "")))
570- let cm = if ((size(X()) >= M))
588+@Verifier(co)
589+func cp () = {
590+ let cq = (co.id == fromBase58String(valueOrElse(getString(this, T()), "")))
591+ let cr = if ((size(X()) >= M))
571592 then false
572- else sigVerify(cj.bodyBytes, cj.proofs[0], cj.senderPublicKey)
573- if (cl)
593+ else sigVerify(co.bodyBytes, co.proofs[0], co.senderPublicKey)
594+ if (cq)
574595 then true
575- else cm
596+ else cr
576597 }
577598
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "l2mp_staking.ride"
55
66 let b = "__"
77
88 let c = 100000000
99
1010 let d = 1000000000000000000
1111
1212 let e = toBigInt(d)
1313
1414 let f = 26
1515
1616 let g = 1440
1717
1818 func h (i) = throw(((a + ": ") + i))
1919
2020
2121 let j = makeString(["%s", "assetId"], b)
2222
2323 let k = makeString(["%s", "emissionPerBlock"], b)
2424
2525 let l = makeString(["%s", "emissionPeriodInBlocks"], b)
2626
2727 let m = makeString(["%s", "startBlock"], b)
2828
2929 let n = makeString(["%s", "totalLpAmount"], b)
3030
3131 let o = makeString(["%s", "totalAssetAmount"], b)
3232
3333 let p = makeString(["%s", "totalLockedLpAmount"], b)
3434
3535 func q (r) = makeString(["%s%s", "userLpAmount", r], b)
3636
3737
3838 func s (r) = makeString(["%s%s", "userLockedLpAmount", r], b)
3939
4040
4141 func t (r) = makeString(["%s%s", "userStakingNodes", r], b)
4242
4343
4444 func u (r) = makeString(["%s%s", "userStakingNodesShares", r], b)
4545
4646
4747 func v (r) = makeString(["%s%s", "totalAssetWithdrawn", r], b)
4848
4949
5050 func w (r) = makeString(["%s%s", "totalAssetStaked", r], b)
5151
5252
5353 func x (y,r,z) = makeString(["%s%s%s", y, r, toBase58String(z)], b)
5454
5555
5656 func A (B,C,D,E) = makeString(["%d%d%d%d", toString(B), toString(C), toString(D), toString(E)], b)
5757
5858
5959 let E = valueOrElse(getInteger(this, n), 0)
6060
6161 let D = valueOrElse(getInteger(this, o), 0)
6262
6363 let F = valueOrElse(getInteger(this, p), 0)
6464
6565 let G = valueOrElse(getString(this, j), "WAVES")
6666
6767 let H = if ((G == "WAVES"))
6868 then unit
6969 else fromBase58String(G)
7070
7171 let I = valueOrElse(getInteger(this, l), g)
7272
7373 let J = valueOrElse(getInteger(this, k), 0)
7474
7575 let K = (J * I)
7676
7777 let L = 5
7878
7979 let M = 3
8080
8181 let N = 32
8282
8383 func O (z) = makeString(["%s%s%s", "allowTxId", z], b)
8484
8585
8686 func P (Q,R) = makeString([Q, R], b)
8787
8888
8989 func S () = makeString(["%s", "adminAddressList"], b)
9090
9191
9292 func T () = makeString(["%s", "txId"], b)
9393
9494
9595 func U (Q,V) = {
9696 let W = P(Q, V)
9797 valueOrElse(getInteger(W), 0)
9898 }
9999
100100
101101 func X () = {
102102 let Y = getString(this, S())
103103 if ($isInstanceOf(Y, "String"))
104104 then {
105105 let Z = Y
106106 split(Z, b)
107107 }
108108 else nil
109109 }
110110
111111
112112 func aa (ab) = containsElement(X(), ab)
113113
114114
115115 func ac (ad,R) = {
116116 let ae = ad
117117 let af = ae._1
118118 let Q = ae._2
119119 $Tuple2((af :+ P(Q, R)), Q)
120120 }
121121
122122
123123 func ag (ah) = {
124124 let ai = S()
125125 let aj = {
126126 let ak = X()
127127 let al = size(ak)
128128 let am = $Tuple2(nil, ah)
129129 func an (ao,ap) = if ((ap >= al))
130130 then ao
131131 else ac(ao, ak[ap])
132132
133133 func aq (ao,ap) = if ((ap >= al))
134134 then ao
135135 else throw("List size exceeds 5")
136136
137137 aq(an(an(an(an(an(am, 0), 1), 2), 3), 4), 5)
138138 }
139139 let af = aj._1
140140 let Q = aj._2
141141 af
142142 }
143143
144144
145145 func ar (af,W) = (af + valueOrElse(getInteger(W), 0))
146146
147147
148148 func as (Q) = {
149149 let at = ag(Q)
150150 let ak = at
151151 let al = size(ak)
152152 let am = 0
153153 func an (ao,ap) = if ((ap >= al))
154154 then ao
155155 else ar(ao, ak[ap])
156156
157157 func aq (ao,ap) = if ((ap >= al))
158158 then ao
159159 else throw("List size exceeds 5")
160160
161161 aq(an(an(an(an(an(am, 0), 1), 2), 3), 4), 5)
162162 }
163163
164164
165165 func au (af,av) = (af :+ DeleteEntry(av))
166166
167167
168168 func aw (Q) = {
169169 let at = ag(Q)
170170 let ak = at
171171 let al = size(ak)
172172 let am = nil
173173 func an (ao,ap) = if ((ap >= al))
174174 then ao
175175 else au(ao, ak[ap])
176176
177177 func aq (ao,ap) = if ((ap >= al))
178178 then ao
179179 else throw("List size exceeds 5")
180180
181181 aq(an(an(an(an(an(am, 0), 1), 2), 3), 4), 5)
182182 }
183183
184184
185185 func ax (ay,ah,az,aA) = {
186186 let W = P(ah, ay)
187187 let aB = U(ah, ay)
188188 let aC = if (!(aa(ay)))
189189 then h((("Address: " + ay) + " not in Admin list"))
190190 else if ((aB == 1))
191191 then h((W + " you already voted"))
192192 else unit
193193 if ((aC == aC))
194194 then {
195195 let at = as(ah)
196196 if (((at + 1) >= az))
197197 then {
198198 let aD = aw(ah)
199199 (aD ++ aA)
200200 }
201201 else [IntegerEntry(W, 1)]
202202 }
203203 else throw("Strict value is not equal to itself.")
204204 }
205205
206206
207207 func aE (aF,aG) = (aF :+ parseIntValue(aG))
208208
209209
210210 func aH (aI) = {
211211 let aJ = valueOrElse(getInteger(this, m), height)
212212 let aK = fraction(aJ, 1, I)
213213 let aL = ((aI / I) - aK)
214214 max([0, (K * aL)])
215215 }
216216
217217
218218 func aM () = aH(height)
219219
220220
221221 func aN () = {
222222 let Y = H
223223 if ($isInstanceOf(Y, "Unit"))
224224 then {
225225 let aO = Y
226226 wavesBalance(this).available
227227 }
228228 else if ($isInstanceOf(Y, "ByteVector"))
229229 then {
230230 let aP = Y
231231 assetBalance(this, aP)
232232 }
233233 else throw("Match error")
234234 }
235235
236236
237237 func aQ () = {
238238 let aR = (D + aM())
239239 let aS = min([aR, aN()])
240240 if ((E == 0))
241241 then 0
242242 else aS
243243 }
244244
245245
246246 func aT () = if ((E != 0))
247247 then fraction(toBigInt(aQ()), e, toBigInt(E))
248248 else e
249249
250250
251251 func aU () = if ((J == 0))
252252 then 0
253253 else fraction((aN() - aQ()), 1, J)
254254
255255
256256 func aV (r) = {
257257 let aW = valueOrElse(getString(this, t(r)), "")
258258 let aX = valueOrElse(getString(this, u(r)), "")
259259 let aY = if ((aW == ""))
260260 then nil
261261 else split(aW, b)
262262 let aZ = if ((aX == ""))
263263 then nil
264264 else split(aX, b)
265265 let ba = {
266266 let ak = aZ
267267 let al = size(ak)
268268 let am = nil
269269 func an (ao,ap) = if ((ap >= al))
270270 then ao
271271 else aE(ao, ak[ap])
272272
273273 func aq (ao,ap) = if ((ap >= al))
274274 then ao
275275 else throw("List size exceeds 20")
276276
277277 aq(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(am, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
278278 }
279279 $Tuple2(aY, ba)
280280 }
281281
282282
283283 func bb (bc) = max([0, toInt(fraction(toBigInt(bc), aT(), e))])
284284
285285
286286 func bd (be) = max([0, toInt(fraction(toBigInt(be), e, aT()))])
287287
288288
289289 func bf (r) = valueOrElse(getInteger(this, q(r)), 0)
290290
291291
292292 func bg (r) = valueOrElse(getInteger(this, s(r)), 0)
293293
294294
295295 func bh (r) = {
296296 let bi = bf(r)
297297 bb(bi)
298298 }
299299
300300
301301 func bj (r) = [DeleteEntry(t(r)), DeleteEntry(u(r))]
302302
303303
304304 func bk (bl,r) = {
305305 let bm = [if ((size(bl.payments) == 1))
306306 then true
307307 else h("should include 1 payment"), if ((bl.payments[0].assetId == H))
308308 then true
309309 else h(("payment should be in " + G)), if ((bl.payments[0].amount > 0))
310310 then true
311311 else "payment amount should be greater than 0", if ((size(fromBase58String(r)) == f))
312312 then true
313313 else h("user address is not valid")]
314314 if ((bm == bm))
315315 then {
316316 let bn = bl.payments[0].amount
317317 let bo = bd(bn)
318318 let bi = bf(r)
319319 let bp = valueOrElse(getInteger(this, w(r)), 0)
320320 let bq = (E + bo)
321321 let br = bb(bq)
322322 let bs = (bi + bo)
323323 let bt = (bp + bn)
324324 [StringEntry(x("stake", r, bl.transactionId), A(aM(), aT(), E, D)), IntegerEntry(n, bq), IntegerEntry(o, br), IntegerEntry(q(r), bs), IntegerEntry(w(r), bt), IntegerEntry(m, height)]
325325 }
326326 else throw("Strict value is not equal to itself.")
327327 }
328328
329329
330330 func bu (bl,bv) = {
331331 let r = toString(bl.caller)
332332 let bi = bf(r)
333333 let bw = [if ((bv > 0))
334334 then true
335335 else h("LP amount should be more than 0"), if ((bi >= bv))
336336 then true
337337 else h((("cannot withdraw more than available LP (" + toString(bi)) + ")"))]
338338 if ((bw == bw))
339339 then {
340340 let bs = (bi - bv)
341341 let bx = bb(bv)
342342 let bq = (E - bv)
343343 let br = bb(bq)
344344 let by = valueOrElse(getInteger(this, v(r)), 0)
345345 let bz = (by + bx)
346346 let bA = if ((bs == 0))
347347 then bj(r)
348348 else nil
349349 ([StringEntry(x("withdraw", r, bl.transactionId), A(aM(), aT(), E, D)), IntegerEntry(n, bq), IntegerEntry(o, br), IntegerEntry(q(r), bs), IntegerEntry(v(r), bz), IntegerEntry(m, height), ScriptTransfer(bl.caller, bx, H)] ++ bA)
350350 }
351351 else throw("Strict value is not equal to itself.")
352352 }
353353
354354
355355 func bB (r,bC,bD) = {
356356 let bw = [if ((size(fromBase58String(r)) == f))
357357 then true
358358 else h("user address is not valid"), if ((size(fromBase58String(bC)) == f))
359359 then true
360360 else h("node address is not valid")]
361361 if ((bw == bw))
362362 then [StringEntry(t(r), bC), StringEntry(u(r), toString(bD))]
363363 else throw("Strict value is not equal to itself.")
364364 }
365365
366366
367367 @Callable(bl)
368368 func setEmissionPerBlock (J) = {
369369 let bw = [if ((bl.caller == this))
370370 then true
371371 else h("permission denied")]
372372 if ((bw == bw))
373373 then [IntegerEntry(o, aQ()), IntegerEntry(m, height), IntegerEntry(k, max([0, J]))]
374374 else throw("Strict value is not equal to itself.")
375375 }
376376
377377
378378
379379 @Callable(bl)
380380 func setEmissionPeriodInBlocks (bE) = {
381381 let bw = [if ((bE > 0))
382382 then true
383383 else h("emission period should be greater than 0"), if ((bl.caller == this))
384384 then true
385385 else h("permission denied")]
386386 if ((bw == bw))
387387 then [IntegerEntry(o, aQ()), IntegerEntry(m, height), IntegerEntry(l, bE)]
388388 else throw("Strict value is not equal to itself.")
389389 }
390390
391391
392392
393393 @Callable(bl)
394394 func stake () = {
395395 let r = toString(bl.caller)
396396 bk(bl, r)
397397 }
398398
399399
400400
401401 @Callable(bl)
402402 func stakeFor (r) = bk(bl, r)
403403
404404
405405
406406 @Callable(bl)
407407 func withdraw (bx) = {
408408 let r = toString(bl.caller)
409409 let bi = bf(r)
410410 let bF = bd(bx)
411411 let bG = bh(r)
412412 let bH = toInt(fraction(aT(), toBigInt(1), e, CEILING))
413413 let bw = [if ((bx > 0))
414414 then true
415415 else h("withdraw amount should be more than 0"), if ((bG >= bx))
416416 then true
417417 else h((("cannot withdraw more than available (" + toString(bG)) + ")")), if ((bx >= bH))
418418 then true
419419 else h((("withdraw amount is too small. Min: (" + toString(bH)) + ")"))]
420420 if ((bw == bw))
421421 then bu(bl, min([bi, (bF + 1)]))
422422 else throw("Strict value is not equal to itself.")
423423 }
424424
425425
426426
427427 @Callable(bl)
428428 func setStakingNode (bC) = {
429429 let r = toString(bl.caller)
430430 bB(r, bC, 100)
431431 }
432432
433433
434434
435435 @Callable(bl)
436436 func stakeAndSetStakingNode (bC) = {
437437 let r = toString(bl.caller)
438438 (bk(bl, r) ++ bB(r, bC, 100))
439439 }
440440
441441
442442
443443 @Callable(bl)
444444 func stakeForSwapHELPER (r,bC) = {
445445 let bw = [if ((toString(bl.originCaller) == r))
446446 then true
447447 else h("i.originCaller should be equal to userAddress")]
448448 if ((bw == bw))
449449 then {
450450 let bI = if ((bC == ""))
451451 then nil
452452 else bB(r, bC, 100)
453453 (bk(bl, r) ++ bI)
454454 }
455455 else throw("Strict value is not equal to itself.")
456456 }
457457
458458
459459
460460 @Callable(bl)
461461 func airdrop (bJ,bK) = {
462- func bL (bM,bN) = (bM + bN)
462+ func bL (bM,bN) = if ((0 > bN))
463+ then h("negative amount value in amountList")
464+ else (bM + bN)
463465
464466 let bO = {
465467 let ak = bK
466468 let al = size(ak)
467469 let am = 0
468470 func an (ao,ap) = if ((ap >= al))
469471 then ao
470472 else bL(ao, ak[ap])
471473
472474 func aq (ao,ap) = if ((ap >= al))
473475 then ao
474476 else throw("List size exceeds 90")
475477
476478 aq(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(an(am, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90)
477479 }
478480 let bw = [if ((size(bl.payments) == 1))
479481 then true
480482 else h("should include 1 payment"), if ((bl.payments[0].assetId == H))
481483 then true
482484 else h(("payment should be in " + G)), if ((bl.payments[0].amount > 0))
483485 then true
484486 else "payment amount should be greater than 0", if ((size(bJ) == size(bK)))
485487 then true
486488 else h("addressList should be same size as amountList"), if ((bl.payments[0].amount >= bO))
487489 then true
488490 else h("payment amount is less than sum of amountList")]
489491 if ((bw == bw))
490492 then {
491493 func bP (bM,be) = {
492494 let bQ = bM
493495 let af = bQ._1
494496 let bR = bQ._2
495497 let bS = bQ._3
496- let bT = bd(be)
497- let bU = s(bJ[bR])
498- let bV = valueOrElse(getInteger(this, bU), 0)
499- $Tuple3((af :+ IntegerEntry(bU, (bV + bT))), (bR + 1), (bS + bT))
498+ let bT = bQ._4
499+ let bU = bJ[bR]
500+ let ab = {
501+ let Y = addressFromString(bU)
502+ if ($isInstanceOf(Y, "Address"))
503+ then {
504+ let bV = Y
505+ bV
506+ }
507+ else h("invalid address in addressList")
508+ }
509+ let bW = [if (!(containsElement(bT, ab)))
510+ then true
511+ else h("duplicate address is addressList")]
512+ if ((bW == bW))
513+ then {
514+ let bX = bd(be)
515+ let bY = s(bU)
516+ let bZ = valueOrElse(getInteger(this, bY), 0)
517+ $Tuple4((af :+ IntegerEntry(bY, (bZ + bX))), (bR + 1), (bS + bX), (bT :+ ab))
518+ }
519+ else throw("Strict value is not equal to itself.")
500520 }
501521
502- let bW = {
522+ let ca = {
503523 let ak = bK
504524 let al = size(ak)
505- let am = $Tuple3(nil, 0, 0)
506- func bX (ao,ap) = if ((ap >= al))
525+ let am = $Tuple4(nil, 0, 0, nil)
526+ func cb (ao,ap) = if ((ap >= al))
507527 then ao
508528 else bP(ao, ak[ap])
509529
510- func bY (ao,ap) = if ((ap >= al))
530+ func cc (ao,ap) = if ((ap >= al))
511531 then ao
512532 else throw("List size exceeds 90")
513533
514- bY(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(am, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90)
534+ cc(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(cb(am, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90)
515535 }
516- let bZ = bW._1
517- let ca = bW._2
518- let cb = bW._3
519- let cc = bb((E + cb))
520- ([IntegerEntry(p, (F + cb)), IntegerEntry(n, (E + cb)), IntegerEntry(o, cc), IntegerEntry(m, height)] ++ bZ)
536+ let cd = ca._1
537+ let ce = ca._2
538+ let cf = ca._3
539+ let cg = ca._4
540+ let ch = bb((E + cf))
541+ ([IntegerEntry(p, (F + cf)), IntegerEntry(n, (E + cf)), IntegerEntry(o, ch), IntegerEntry(m, height)] ++ cd)
521542 }
522543 else throw("Strict value is not equal to itself.")
523544 }
524545
525546
526547
527548 @Callable(bl)
528549 func getUserAssetsREADONLY (r) = {
529550 let bi = bf(r)
530- let cd = bg(r)
531- let ce = bb(cd)
551+ let ci = bg(r)
552+ let cj = bb(ci)
532553 let bG = bh(r)
533554 let bp = valueOrElse(getInteger(this, w(r)), 0)
534555 let by = valueOrElse(getInteger(this, v(r)), 0)
535- let cf = aV(r)
536- let cg = cf._1
537- let ch = cf._2
538- $Tuple2(nil, $Tuple10(bi, bG, aT(), bp, by, cd, ce, cg, ch, aU()))
556+ let ck = aV(r)
557+ let cl = ck._1
558+ let cm = ck._2
559+ $Tuple2(nil, $Tuple10(bi, bG, aT(), bp, by, ci, cj, cl, cm, aU()))
539560 }
540561
541562
542563
543564 @Callable(bl)
544565 func getTotalAssetsREADONLY () = $Tuple2(nil, $Tuple6(E, aQ(), aT(), F, bb(F), aU()))
545566
546567
547568
548569 @Callable(bl)
549570 func voteForTxId (z) = {
550571 let ay = toBase58String(bl.caller.bytes)
551572 let ah = O(z)
552573 let af = [StringEntry(T(), z)]
553- let ci = getString(this, T())
574+ let cn = getString(this, T())
554575 let aC = [if ((size(fromBase58String(z)) == N))
555576 then true
556- else h((z + " is not valid txId")), if (if ((ci == unit))
577+ else h((z + " is not valid txId")), if (if ((cn == unit))
557578 then true
558- else (value(ci) != z))
579+ else (value(cn) != z))
559580 then true
560581 else h((z + " is already allowed"))]
561582 if ((aC == aC))
562583 then ax(ay, ah, M, af)
563584 else throw("Strict value is not equal to itself.")
564585 }
565586
566587
567-@Verifier(cj)
568-func ck () = {
569- let cl = (cj.id == fromBase58String(valueOrElse(getString(this, T()), "")))
570- let cm = if ((size(X()) >= M))
588+@Verifier(co)
589+func cp () = {
590+ let cq = (co.id == fromBase58String(valueOrElse(getString(this, T()), "")))
591+ let cr = if ((size(X()) >= M))
571592 then false
572- else sigVerify(cj.bodyBytes, cj.proofs[0], cj.senderPublicKey)
573- if (cl)
593+ else sigVerify(co.bodyBytes, co.proofs[0], co.senderPublicKey)
594+ if (cq)
574595 then true
575- else cm
596+ else cr
576597 }
577598

github/deemru/w8io/3ef1775 
218.49 ms