tx · 9NADwe7v2BerZDrNXTSVe7Fry5p5QAm4eFJLgmrV3XCt

3MpygN8qm376tUAHB6mhC5BxG5NKYortiyX:  -0.14000000 Waves

2023.01.19 16:09 [2411854] smart account 3MpygN8qm376tUAHB6mhC5BxG5NKYortiyX > SELF 0.00000000 Waves

{ "type": 13, "id": "9NADwe7v2BerZDrNXTSVe7Fry5p5QAm4eFJLgmrV3XCt", "fee": 14000000, "feeAssetId": null, "timestamp": 1674133724925, "version": 2, "chainId": 84, "sender": "3MpygN8qm376tUAHB6mhC5BxG5NKYortiyX", "senderPublicKey": "BjnLnkAMaJLYAK36vQqSepUNjGeMDHfZGfmdYwGcLbmg", "proofs": [ "4LydYmwtVy7CCnnBXTpSrMsj8JAQaJZrCdHZRvGZqwrrW9WkXdHK7naAcnpuZPg9nWv1JYSH9SmAZG9oReWvVB1K", "48cEwEAk5VuVUa19ryUrvcQK4w3pJx1urJsDsWosHTwP12z6RF5EAD4LVkSVYXiRLiA4YgMkFMuDTUCNr4D7LeD8" ], "script": "base64:BgJJCAISAwoBBBIECgIEARIGCgQBAQQBEgMKAQESBgoEAQgBARIECgIBARIDCgEBEgASABIAEgMKAQESBQoDBAEIEgASBAoCAQESAG0AB3ZlcnNpb24CBTIuMC4wAAhrVmVyc2lvbgIHdmVyc2lvbgAHa0FjdGl2ZQIGYWN0aXZlAAtrQWN0aXZlR2xvYgIUYWN0aXZlX2FsbF9jb250cmFjdHMAC2tEZXByZWNhdGVkAgtkZXByZWNhdGVkXwAJa0Fzc2V0SWRBAgpBX2Fzc2V0X2lkAAlrQXNzZXRJZEICCkJfYXNzZXRfaWQACWtCYWxhbmNlQQIPQV9hc3NldF9iYWxhbmNlAAlrQmFsYW5jZUICD0JfYXNzZXRfYmFsYW5jZQANa1NoYXJlQXNzZXRJZAIOc2hhcmVfYXNzZXRfaWQAEWtTaGFyZUFzc2V0U3VwcGx5AhJzaGFyZV9hc3NldF9zdXBwbHkABGtGZWUCCmNvbW1pc3Npb24ACmtJbnZhcmlhbnQCCWludmFyaWFudAAGa0NhdXNlAg5zaHV0ZG93bl9jYXVzZQAMa1VTRE5BZGRyZXNzAhhzdGFraW5nX3VzZG5uc2J0X2FkZHJlc3MADGtFVVJOQWRkcmVzcwIUc3Rha2luZ19ldXJuX2FkZHJlc3MACmtEaXNjb3VudHMCCWRpc2NvdW50cwAPa0Rpc2NvdW50VmFsdWVzAg9kaXNjb3VudF92YWx1ZXMADmtVc2VyU3dvcEluR292AgxfU1dPUF9hbW91bnQAD2tVc2VyR1N3b3BJbkdvdgINX0dTd29wX2Ftb3VudAANa0ZpcnN0SGFydmVzdAINZmlyc3RfaGFydmVzdAATa0ZpcnN0SGFydmVzdEhlaWdodAIUZmlyc3RfaGFydmVzdF9oZWlnaHQAC2tTaGFyZUxpbWl0AhxzaGFyZV9saW1pdF9vbl9maXJzdF9oYXJ2ZXN0AAtrQmFzZVBlcmlvZAILYmFzZV9wZXJpb2QADWtQZXJpb2RMZW5ndGgCDXBlcmlvZF9sZW5ndGgADGtTdGFydEhlaWdodAIMc3RhcnRfaGVpZ2h0AA5rREFwcFRocmVzaG9sZAIOZEFwcF90aHJlc2hvbGQADWtBZG1pblB1YktleTECC2FkbWluX3B1Yl8xAA1rQWRtaW5QdWJLZXkyAgthZG1pbl9wdWJfMgANa0FkbWluUHViS2V5MwILYWRtaW5fcHViXzMAEmtBZG1pbkludm9rZVB1YktleQIQYWRtaW5faW52b2tlX3B1YgAQa01vbmV5Qm94QWRkcmVzcwIRbW9uZXlfYm94X2FkZHJlc3MAC2tHb3ZBZGRyZXNzAhJnb3Zlcm5hbmNlX2FkZHJlc3MAD2tGYXJtaW5nQWRkcmVzcwIPZmFybWluZ19hZGRyZXNzAA5rVm90aW5nQWRkcmVzcwIOdm90aW5nX2FkZHJlc3MADGtVU0ROQXNzZXRJZAINdXNkbl9hc3NldF9pZAAOa1N0YWtpbmdBc3NldHMCDnN0YWtpbmdfYXNzZXRzAAZvcmFjbGUJAQdBZGRyZXNzAQEaAVRIE5cMwNMzzCUygLYp96dkaICr48x7S5kBE2dldEJhc2U1OEZyb21PcmFjbGUBA2tleQQHJG1hdGNoMAkAnQgCBQZvcmFjbGUFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEBnN0cmluZwUHJG1hdGNoMAkA2QQBBQZzdHJpbmcEB25vdGhpbmcFByRtYXRjaDAJAAIBCQCsAgIFA2tleQIIaXMgZW1wdHkADGFkbWluUHViS2V5MQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ1rQWRtaW5QdWJLZXkxAAxhZG1pblB1YktleTIJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUNa0FkbWluUHViS2V5MgAMYWRtaW5QdWJLZXkzCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtBZG1pblB1YktleTMAEWFkbWluUHViS2V5SW52b2tlCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFEmtBZG1pbkludm9rZVB1YktleQAPbW9uZXlCb3hBZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUQa01vbmV5Qm94QWRkcmVzcwAKZ292QWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFC2tHb3ZBZGRyZXNzABJzdGFraW5nVVNETkFkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQxrVVNETkFkZHJlc3MADXZvdGluZ0FkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ5rVm90aW5nQWRkcmVzcwAOZmFybWluZ0FkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ9rRmFybWluZ0FkZHJlc3MABFVTRE4JARNnZXRCYXNlNThGcm9tT3JhY2xlAQUMa1VTRE5Bc3NldElkAA1zdGFraW5nQXNzZXRzCQERQGV4dHJOYXRpdmUoMTA1MykCBQZvcmFjbGUFDmtTdGFraW5nQXNzZXRzAApiYXNlUGVyaW9kCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUNdm90aW5nQWRkcmVzcwULa0Jhc2VQZXJpb2QCEUVtcHR5IGtCYXNlUGVyaW9kAAtzdGFydEhlaWdodAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFDXZvdGluZ0FkZHJlc3MFDGtTdGFydEhlaWdodAISRW1wdHkga1N0YXJ0SGVpZ2h0AAxwZXJpb2RMZW5ndGgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQ12b3RpbmdBZGRyZXNzBQ1rUGVyaW9kTGVuZ3RoAhNFbXB0eSBrUGVyaW9kTGVuZ3RoABVmaXJzdEhhcnZlc3RFbmRQZXJpb2QJAGQCCQBkAgUKYmFzZVBlcmlvZAkAaQIJAGUCBQZoZWlnaHQFC3N0YXJ0SGVpZ2h0BQxwZXJpb2RMZW5ndGgAAwAGYWN0aXZlCQERQGV4dHJOYXRpdmUoMTA1MSkCBQR0aGlzBQdrQWN0aXZlAAphY3RpdmVHbG9iCQELdmFsdWVPckVsc2UCCQCbCAIFBm9yYWNsZQULa0FjdGl2ZUdsb2IGAA5kZXByZWNhdGVkUG9vbAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQZvcmFjbGUJAKwCAgULa0RlcHJlY2F0ZWQJAKUIAQUEdGhpcwcAC3N0ckFzc2V0SWRBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQlrQXNzZXRJZEEAC3N0ckFzc2V0SWRCCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQlrQXNzZXRJZEIACGFzc2V0SWRBAwkAAAIFC3N0ckFzc2V0SWRBAgVXQVZFUwUEdW5pdAkA2QQBBQtzdHJBc3NldElkQQAIYXNzZXRJZEIDCQAAAgULc3RyQXNzZXRJZEICBVdBVkVTBQR1bml0CQDZBAEFC3N0ckFzc2V0SWRCAAphc3NldE5hbWVBBAckbWF0Y2gwBQhhc3NldElkQQMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJpZAUHJG1hdGNoMAgJAQV2YWx1ZQEJAOwHAQUCaWQEbmFtZQMJAAECBQckbWF0Y2gwAgRVbml0BAV3YXZlcwUHJG1hdGNoMAIFV0FWRVMJAAIBAgtNYXRjaCBlcnJvcgAKYXNzZXROYW1lQgQHJG1hdGNoMAUIYXNzZXRJZEIDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCaWQFByRtYXRjaDAICQEFdmFsdWUBCQDsBwEFAmlkBG5hbWUDCQABAgUHJG1hdGNoMAIEVW5pdAQFd2F2ZXMFByRtYXRjaDACBVdBVkVTCQACAQILTWF0Y2ggZXJyb3IACGJhbGFuY2VBCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQlrQmFsYW5jZUEACGJhbGFuY2VCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQlrQmFsYW5jZUIADHNoYXJlQXNzZXRJZAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQ1rU2hhcmVBc3NldElkABBzaGFyZUFzc2V0U3VwcGx5CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBRFrU2hhcmVBc3NldFN1cHBseQAJaW52YXJpYW50CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQprSW52YXJpYW50AANmZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFBGtGZWUADWZlZUdvdmVybmFuY2UJAGsDBQNmZWUAKABkAAlmZWVTY2FsZTYAwIQ9AAZzY2FsZTMA6AcABnNjYWxlOACAwtcvAAdzY2FsZTE2AICAhP6m3uERAAdkaWdpdHM4AAgAFWV4Y2hhbmdlUmF0aW9MaW1pdE1pbgCAjs4cABVleGNoYW5nZVJhdGlvTGltaXRNYXgAgPbgQgAFYWxwaGEAMgALYWxwaGFEaWdpdHMAAgAEYmV0YQCAgN6vz/WVCAEOYWNjb3VudEJhbGFuY2UBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCaWQFByRtYXRjaDAJAPAHAgUEdGhpcwUCaWQDCQABAgUHJG1hdGNoMAIEVW5pdAQFd2F2ZXMFByRtYXRjaDAICQDvBwEFBHRoaXMJYXZhaWxhYmxlCQACAQILTWF0Y2ggZXJyb3IBDHN0YWtlZEFtb3VudAEHYXNzZXRJZAQWc3Rha2VkQW1vdW50Q2FsY3VsYXRlZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBANhSWQFByRtYXRjaDADCQAAAgUDYUlkBQRVU0ROCQCaCAIFEnN0YWtpbmdVU0ROQWRkcmVzcwkArAICCQCsAgIJAKwCAgIMcnBkX2JhbGFuY2VfCQDYBAEFA2FJZAIBXwkApQgBBQR0aGlzAAADCQABAgUHJG1hdGNoMAIEVW5pdAAACQACAQILTWF0Y2ggZXJyb3IEByRtYXRjaDAFFnN0YWtlZEFtb3VudENhbGN1bGF0ZWQDCQABAgUHJG1hdGNoMAIDSW50BAFpBQckbWF0Y2gwBQFpAAAADXN0YWtlZEFtb3VudEEJAQxzdGFrZWRBbW91bnQBBQhhc3NldElkQQANc3Rha2VkQW1vdW50QgkBDHN0YWtlZEFtb3VudAEFCGFzc2V0SWRCABFhdmFpbGFibGVCYWxhbmNlQQkAZQIFCGJhbGFuY2VBBQ1zdGFrZWRBbW91bnRBABFhdmFpbGFibGVCYWxhbmNlQgkAZQIFCGJhbGFuY2VCBQ1zdGFrZWRBbW91bnRCABlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRBCQBkAgkBDmFjY291bnRCYWxhbmNlAQUIYXNzZXRJZEEFDXN0YWtlZEFtb3VudEEAGWFjY291bnRCYWxhbmNlV2l0aFN0YWtlZEIJAGQCCQEOYWNjb3VudEJhbGFuY2UBBQhhc3NldElkQgUNc3Rha2VkQW1vdW50QgAQaGFzRW5vdWdoQmFsYW5jZQMJAGcCBRlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRBBQhiYWxhbmNlQQkAZwIFGWFjY291bnRCYWxhbmNlV2l0aFN0YWtlZEIFCGJhbGFuY2VCBwEIc2tld25lc3MCAXgBeQkAaQIJAGQCCQBrAwUHc2NhbGUxNgUBeAUBeQkAawMFB3NjYWxlMTYFAXkFAXgAAgENaW52YXJpYW50Q2FsYwIBeAF5BAJzawkBCHNrZXduZXNzAgUBeAUBeQkAZAIJAGsDCQBkAgUBeAUBeQUHc2NhbGUxNgkAbAYFAnNrBQdkaWdpdHM4BQVhbHBoYQULYWxwaGFEaWdpdHMFB2RpZ2l0czgFB0NFSUxJTkcJAGgCAAIJAGsDCQCgAwEJAHYGCQC8AgMJALYCAQUBeAkAtgIBBQF5CQC2AgEFBnNjYWxlOAAACQC2AgEABQABCQBpAgUHZGlnaXRzOAACBQRET1dOCQBsBgkAZQIFAnNrBQRiZXRhBQdkaWdpdHM4BQVhbHBoYQULYWxwaGFEaWdpdHMFB2RpZ2l0czgFBERPV04FBnNjYWxlOAETY2FsY3VsYXRlU2VuZEFtb3VudAcVYW1vdW50VG9TZW5kRXN0aW1hdGVkFW1pblRva2VuUmVjZWl2ZUFtb3VudBJ0b2tlblJlY2VpdmVBbW91bnQHdG9rZW5JZAViYWxjQQViYWxjQgZpbnZDdXIEHXdvcnN0QWxsb3dlZE5ld0ludmFyaWFudFJhdGlvCQBlAgUHc2NhbGUxNgkAaQIJAGgCBQdzY2FsZTE2AAEAgK3iBAQeZGVsdGFCZXR3ZWVuTWF4QW5kTWluU2VuZFZhbHVlCQBlAgUVYW1vdW50VG9TZW5kRXN0aW1hdGVkBRVtaW5Ub2tlblJlY2VpdmVBbW91bnQEAXgJAGQCBQViYWxjQQUSdG9rZW5SZWNlaXZlQW1vdW50BAF5CQBkAgUFYmFsY0IFEnRva2VuUmVjZWl2ZUFtb3VudAoBDWdldFN0ZXBBbW91bnQCA2FjYwRzdGVwAwkAAAIIBQNhY2MCXzEA////////////AQQMYW1vdW50VG9TZW5kCQBlAgUVYW1vdW50VG9TZW5kRXN0aW1hdGVkCQBpAgkAaQIJAGgCBQRzdGVwBR5kZWx0YUJldHdlZW5NYXhBbmRNaW5TZW5kVmFsdWUAAwUGc2NhbGUzBA1zdGVwSW52YXJpYW50AwkAAAIFB3Rva2VuSWQFCGFzc2V0SWRBCQENaW52YXJpYW50Q2FsYwIFAXgJAGUCBQViYWxjQgUMYW1vdW50VG9TZW5kCQENaW52YXJpYW50Q2FsYwIJAGUCBQViYWxjQQUMYW1vdW50VG9TZW5kBQF5AwkAZgIFDXN0ZXBJbnZhcmlhbnQFBmludkN1cgkAlAoCBQxhbW91bnRUb1NlbmQFDXN0ZXBJbnZhcmlhbnQJAJQKAgD///////////8BAAAFA2FjYwQPYW1vdW50VG9TZW5kTWluCQENZ2V0U3RlcEFtb3VudAIJAJQKAgD///////////8BAAAAuBcDCQBmAgAACAUPYW1vdW50VG9TZW5kTWluAl8xCQACAQIfUHJpY2UgaXMgd29yc2UgdGhhbiBtaW5SZWNlaXZlZAQMaW52RXN0aW1hdGVkAwkAAAIFB3Rva2VuSWQFCGFzc2V0SWRBCQENaW52YXJpYW50Q2FsYwIFAXgJAGUCBQViYWxjQgUVYW1vdW50VG9TZW5kRXN0aW1hdGVkAwkAAAIFB3Rva2VuSWQFCGFzc2V0SWRCCQENaW52YXJpYW50Q2FsYwIJAGUCBQViYWxjQQUVYW1vdW50VG9TZW5kRXN0aW1hdGVkBQF5CQACAQIWV3JvbmcgYXNzZXQgaW4gcGF5bWVudAMJAGYCBQZpbnZDdXIFDGludkVzdGltYXRlZAMJAGcCBR13b3JzdEFsbG93ZWROZXdJbnZhcmlhbnRSYXRpbwkAawMFB3NjYWxlMTYFBmludkN1cgUMaW52RXN0aW1hdGVkCQACAQIyVGhlIHJlcXVlc3RlZCBwcmljZSBpcyB0b28gbm90IHByb2ZpdGFibGUgZm9yIHVzZXIEAWEKAAIkbAkAzAgCABkJAMwIAgDIAQkAzAgCAPQDBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIA////////////AQAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ1nZXRTdGVwQW1vdW50AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyAzCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAwkAZgIAAAgFAWECXzEIBQ9hbW91bnRUb1NlbmRNaW4CXzEIBQFhAl8xBAFhCgACJGwJAMwIAgCM/P////////8BCQDMCAIAuP7/////////AQkAzAgCAOf//////////wEFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgD///////////8BAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDWdldFN0ZXBBbW91bnQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDMJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMED3R1cGxlU2VuZEJldHRlcgMJAGYCAAAIBQFhAl8xCQCUCgIFFWFtb3VudFRvU2VuZEVzdGltYXRlZAUMaW52RXN0aW1hdGVkBQFhAwkAZwIFHXdvcnN0QWxsb3dlZE5ld0ludmFyaWFudFJhdGlvCQBrAwUHc2NhbGUxNgUGaW52Q3VyCAUPdHVwbGVTZW5kQmV0dGVyAl8yCQACAQIyVGhlIHJlcXVlc3RlZCBwcmljZSBpcyB0b28gbm90IHByb2ZpdGFibGUgZm9yIHVzZXIIBQ90dXBsZVNlbmRCZXR0ZXICXzEBDGdldEFzc2V0SW5mbwEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJpZAUHJG1hdGNoMAQIc3RyaW5nSWQJANgEAQUCaWQEBGluZm8JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQJpZAkArAICCQCsAgICBkFzc2V0IAUIc3RyaW5nSWQCDiBkb2Vzbid0IGV4aXN0CQCVCgMFCHN0cmluZ0lkCAUEaW5mbwRuYW1lCAUEaW5mbwhkZWNpbWFscwMJAAECBQckbWF0Y2gwAgRVbml0BAV3YXZlcwUHJG1hdGNoMAkAlQoDAgVXQVZFUwIFV0FWRVMACAkAAgECC01hdGNoIGVycm9yAQdzdXNwZW5kAQVjYXVzZQkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQcJAMwIAgkBC1N0cmluZ0VudHJ5AgUGa0NhdXNlBQVjYXVzZQUDbmlsAQ10aHJvd0lzQWN0aXZlAAkAAgECFkRBcHAgaXMgYWxyZWFkeSBhY3RpdmUBCGlzQWN0aXZlAAMDBQZhY3RpdmUFCmFjdGl2ZUdsb2IHBQR1bml0CQACAQIfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAEMaXNEZXByaWNhdGVkAAMJAQEhAQUOZGVwcmVjYXRlZFBvb2wFBHVuaXQJAAIBAjFQb29sIGlzIGRlcHJlY2F0ZWQuIE9ubHkgd2l0aGRyYXcgYWN0aW9uIGFsbG93ZWQuAQtpc0FkbWluQ2FsbAEBaQMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFDGFkbWluUHViS2V5MQkAzAgCBQxhZG1pblB1YktleTIJAMwIAgUMYWRtaW5QdWJLZXkzBQNuaWwIBQFpD2NhbGxlclB1YmxpY0tleQUEdW5pdAkAAgECIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgEKaXNTZWxmQ2FsbAEBaQMJAAACBQR0aGlzCAUBaQZjYWxsZXIFBHVuaXQJAAIBAitPbmx5IGNvbnRyYWN0IGl0c2VsZiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAQt0aHJvd0Fzc2V0cwAJAAIBCQCsAgIJAKwCAgkArAICAiVJbmNvcnJlY3QgYXNzZXRzIGF0dGFjaGVkLiBFeHBlY3RlZDogBQtzdHJBc3NldElkQQIFIGFuZCAFC3N0ckFzc2V0SWRCAQ90aHJvd09uZVBheW1lbnQACQACAQIdT25lIGF0dGFjaGVkIHBheW1lbnQgZXhwZWN0ZWQBEXN1c3BlbmRTdXNwaWNpb3VzAAkBB3N1c3BlbmQBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAiNTdXNwaWNpb3VzIHN0YXRlLiBBY3R1YWwgYmFsYW5jZXM6IAkApAMBBQhiYWxhbmNlQQIBIAUKYXNzZXROYW1lQQICLCAJAKQDAQUIYmFsYW5jZUICASAFCmFzc2V0TmFtZUICCS4gU3RhdGU6IAkApAMBCQEOYWNjb3VudEJhbGFuY2UBBQhhc3NldElkQQIBIAUKYXNzZXROYW1lQQICLCAJAKQDAQkBDmFjY291bnRCYWxhbmNlAQUIYXNzZXRJZEICASAFCmFzc2V0TmFtZUIBGGNhbGNTdGFraW5nRnVuY0FuZEFkZHJlcwIFc3Rha2UHYXNzZXRJZAMFBXN0YWtlCQCUCgICDGxvY2tOZXV0cmlubwUSc3Rha2luZ1VTRE5BZGRyZXNzCQCUCgICDnVubG9ja05ldXRyaW5vBRJzdGFraW5nVVNETkFkZHJlc3MBEWNhbGNTdGFraW5nUGFyYW1zAwVzdGFrZQZhbW91bnQHYXNzZXRJZAMFBXN0YWtlBA0kdDAxMDQ0NDEwNTEwCQEYY2FsY1N0YWtpbmdGdW5jQW5kQWRkcmVzAgUFc3Rha2UFB2Fzc2V0SWQEBGNhbGwIBQ0kdDAxMDQ0NDEwNTEwAl8xBAtzdGFraW5nQWRkcggFDSR0MDEwNDQ0MTA1MTACXzIJAJYKBAUEY2FsbAULc3Rha2luZ0FkZHIFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUHYXNzZXRJZAUGYW1vdW50BQNuaWwEDSR0MDEwNTk2MTA2NjIJARhjYWxjU3Rha2luZ0Z1bmNBbmRBZGRyZXMCBQVzdGFrZQUHYXNzZXRJZAQEY2FsbAgFDSR0MDEwNTk2MTA2NjICXzEEC3N0YWtpbmdBZGRyCAUNJHQwMTA1OTYxMDY2MgJfMgkAlgoEBQRjYWxsBQtzdGFraW5nQWRkcgkAzAgCBQZhbW91bnQJAMwIAgkA2AQBBQdhc3NldElkBQNuaWwFA25pbAEUY2FsY3VsYXRlRmVlRGlzY291bnQBCHVzZXJBZGRyBApzd29wQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFCmdvdkFkZHJlc3MJAKwCAgkApQgBBQh1c2VyQWRkcgUOa1VzZXJTd29wSW5Hb3YAAAQLZ1N3b3BBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUKZ292QWRkcmVzcwkArAICCQClCAEFCHVzZXJBZGRyBQ9rVXNlckdTd29wSW5Hb3YFCnN3b3BBbW91bnQEDmRpc2NvdW50VmFsdWVzCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBm9yYWNsZQUPa0Rpc2NvdW50VmFsdWVzAgEsBAlkaXNjb3VudHMJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUGb3JhY2xlBQprRGlzY291bnRzAgEsAwMJAGcCBQtnU3dvcEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAAJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAQULZ1N3b3BBbW91bnQHCQBlAgUJZmVlU2NhbGU2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZGlzY291bnRzAAADAwkAZwIFC2dTd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAQkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwACBQtnU3dvcEFtb3VudAcJAGUCBQlmZWVTY2FsZTYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlkaXNjb3VudHMAAQMDCQBnAgULZ1N3b3BBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwACCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAMFC2dTd29wQW1vdW50BwkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwACAwMJAGcCBQtnU3dvcEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAMJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMABAULZ1N3b3BBbW91bnQHCQBlAgUJZmVlU2NhbGU2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZGlzY291bnRzAAMDCQBnAgULZ1N3b3BBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwAECQBlAgUJZmVlU2NhbGU2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZGlzY291bnRzAAQFCWZlZVNjYWxlNgESY2hlY2tEQXBwVGhyZXNob2xkAwtuZXdCYWxhbmNlQQtuZXdCYWxhbmNlQgpwbXRBc3NldElkBA1kQXBwVGhyZXNob2xkCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQ5rREFwcFRocmVzaG9sZAQFcmF0aW8DAwkAAAIFCnBtdEFzc2V0SWQFCGFzc2V0SWRBCQBmAgULbmV3QmFsYW5jZUEFC25ld0JhbGFuY2VCBwkAbgQFC25ld0JhbGFuY2VBAAEFC25ld0JhbGFuY2VCBQdDRUlMSU5HAwMJAAACBQpwbXRBc3NldElkBQhhc3NldElkQgkAZgIFC25ld0JhbGFuY2VCBQtuZXdCYWxhbmNlQQcJAG4EBQtuZXdCYWxhbmNlQgABBQtuZXdCYWxhbmNlQQUHQ0VJTElORwAAAwkAZgIFBXJhdGlvBQ1kQXBwVGhyZXNob2xkBA0kdDAxMjQwNzEyNTE1AwkAAAIFCnBtdEFzc2V0SWQFCGFzc2V0SWRBCQCUCgIFCmFzc2V0TmFtZUIFCmFzc2V0TmFtZUEJAJQKAgUKYXNzZXROYW1lQQUKYXNzZXROYW1lQgQGdG9rZW4xCAUNJHQwMTI0MDcxMjUxNQJfMQQGdG9rZW4yCAUNJHQwMTI0MDcxMjUxNQJfMgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIHQnV5aW5nIAUGdG9rZW4xAicgaXMgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUgZHVlIHRvIHRoZSAFBnRva2VuMgIGIGRlcGVnBgEacmVwbGVuaXNoV2l0aFR3b1Rva2Vuc0NhbGMDAWkMc3Rha2VGYXJtaW5nCGxvY2tUeXBlBAtwbXRBc3NldElkQQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAtwbXRBc3NldElkQggJAJEDAggFAWkIcGF5bWVudHMAAQdhc3NldElkBBNyYXRpb1NoYXJlVG9rZW5zSW5BCQBrAwUGc2NhbGU4CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUIYmFsYW5jZUEEE3JhdGlvU2hhcmVUb2tlbnNJbkIJAGsDBQZzY2FsZTgICQCRAwIIBQFpCHBheW1lbnRzAAEGYW1vdW50BQhiYWxhbmNlQgQNJHQwMTI5NzUxMzA1MgkBDGdldEFzc2V0SW5mbwEFC3BtdEFzc2V0SWRBBA5wbXRTdHJBc3NldElkQQgFDSR0MDEyOTc1MTMwNTICXzEEDXBtdEFzc2V0TmFtZUEIBQ0kdDAxMjk3NTEzMDUyAl8yBAxwbXREZWNpbWFsc0EIBQ0kdDAxMjk3NTEzMDUyAl8zBA0kdDAxMzA1NzEzMTc0CQEMZ2V0QXNzZXRJbmZvAQULcG10QXNzZXRJZEIEDnBtdFN0ckFzc2V0SWRCCAUNJHQwMTMwNTcxMzE3NAJfMQQNcG10QXNzZXROYW1lQggFDSR0MDEzMDU3MTMxNzQCXzIEDHBtdERlY2ltYWxzQggFDSR0MDEzMDU3MTMxNzQCXzMEDSR0MDEzMTc5MTM2ODMDCQBmAgUTcmF0aW9TaGFyZVRva2Vuc0luQgUTcmF0aW9TaGFyZVRva2Vuc0luQQQDcG10CQBuBAUIYmFsYW5jZUIFE3JhdGlvU2hhcmVUb2tlbnNJbkEFBnNjYWxlOAUHQ0VJTElORwkAlwoFCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUDcG10CQBlAggJAJEDAggFAWkIcGF5bWVudHMAAQZhbW91bnQFA3BtdAULcG10QXNzZXRJZEIFE3JhdGlvU2hhcmVUb2tlbnNJbkEEA3BtdAkAbgQFCGJhbGFuY2VBBRNyYXRpb1NoYXJlVG9rZW5zSW5CBQZzY2FsZTgFB0NFSUxJTkcJAJcKBQUDcG10CAkAkQMCCAUBaQhwYXltZW50cwABBmFtb3VudAkAZQIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BQNwbXQFC3BtdEFzc2V0SWRBBRNyYXRpb1NoYXJlVG9rZW5zSW5CBApwbXRBbW91bnRBCAUNJHQwMTMxNzkxMzY4MwJfMQQKcG10QW1vdW50QggFDSR0MDEzMTc5MTM2ODMCXzIEBmNoYW5nZQgFDSR0MDEzMTc5MTM2ODMCXzMEDWNoYW5nZUFzc2V0SWQIBQ0kdDAxMzE3OTEzNjgzAl80BA9zaGFyZVRva2VuUmF0aW8IBQ0kdDAxMzE3OTEzNjgzAl81BBVzaGFyZVRva2VuVG9QYXlBbW91bnQJAGsDBQ9zaGFyZVRva2VuUmF0aW8FEHNoYXJlQXNzZXRTdXBwbHkFBnNjYWxlOAMDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAIJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAwcJAAIBAh5Ud28gb3IgdGhyZWUgcGF5bWVudHMgZXhwZWN0ZWQDAwkBAiE9AgULcG10QXNzZXRJZEEFCGFzc2V0SWRBBgkBAiE9AgULcG10QXNzZXRJZEIFCGFzc2V0SWRCCQELdGhyb3dBc3NldHMAAwkAAAIFFXNoYXJlVG9rZW5Ub1BheUFtb3VudAAACQACAQIdVG9vIHNtYWxsIGFtb3VudCB0byByZXBsZW5pc2gDCQBmAgAABQZjaGFuZ2UJAAIBAgpDaGFuZ2UgPCAwAwkBASEBBRBoYXNFbm91Z2hCYWxhbmNlCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQpwbXRBbW91bnRBBQtwbXRBc3NldElkQQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFCnBtdEFtb3VudEIFC3BtdEFzc2V0SWRCBQNuaWwJARFzdXNwZW5kU3VzcGljaW91cwAEBnN0YWtlMQMJAQhjb250YWlucwIFDXN0YWtpbmdBc3NldHMFDnBtdFN0ckFzc2V0SWRBCQD8BwQFBHRoaXMCDHN0YWtlVW5zdGFrZQkAzAgCBgkAzAgCBQpwbXRBbW91bnRBCQDMCAIFDnBtdFN0ckFzc2V0SWRBBQNuaWwFA25pbAAAAwkAAAIFBnN0YWtlMQUGc3Rha2UxBAZzdGFrZTIDCQEIY29udGFpbnMCBQ1zdGFraW5nQXNzZXRzBQ5wbXRTdHJBc3NldElkQgkA/AcEBQR0aGlzAgxzdGFrZVVuc3Rha2UJAMwIAgYJAMwIAgUKcG10QW1vdW50QgkAzAgCBQ5wbXRTdHJBc3NldElkQgUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTIFBnN0YWtlMgQNc2NyaXB0QWN0aW9ucwkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa0JhbGFuY2VBCQBkAgUIYmFsYW5jZUEFCnBtdEFtb3VudEEJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtCYWxhbmNlQgkAZAIFCGJhbGFuY2VCBQpwbXRBbW91bnRCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrU2hhcmVBc3NldFN1cHBseQkAZAIFEHNoYXJlQXNzZXRTdXBwbHkFFXNoYXJlVG9rZW5Ub1BheUFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUKa0ludmFyaWFudAkBDWludmFyaWFudENhbGMCCQBkAgUIYmFsYW5jZUEFCnBtdEFtb3VudEEJAGQCBQhiYWxhbmNlQgUKcG10QW1vdW50QgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFBmNoYW5nZQUNY2hhbmdlQXNzZXRJZAUDbmlsAwUMc3Rha2VGYXJtaW5nBApzdFBheW1lbnRzCQDOCAIJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFDHNoYXJlQXNzZXRJZAUVc2hhcmVUb2tlblRvUGF5QW1vdW50BQNuaWwDCQAAAgkAkAMBCAUBaQhwYXltZW50cwADCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCAwkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAIHYXNzZXRJZAEABQR1bml0CAkAkQMCCAUBaQhwYXltZW50cwACB2Fzc2V0SWQICQCRAwIIBQFpCHBheW1lbnRzAAIGYW1vdW50BQNuaWwFA25pbAQCcmUJAPwHBAUEdGhpcwIMcmVpc3N1ZVNoYXJlCQDMCAIFFXNoYXJlVG9rZW5Ub1BheUFtb3VudAUDbmlsBQNuaWwDCQAAAgUCcmUFAnJlBAFzCQD8BwQFDmZhcm1pbmdBZGRyZXNzAhdsb2NrU2hhcmVUb2tlbnNGcm9tUG9vbAkAzAgCCAgFAWkGY2FsbGVyBWJ5dGVzCQDMCAIJAKUIAQUEdGhpcwkAzAgCBQhsb2NrVHlwZQUDbmlsBQpzdFBheW1lbnRzAwkAAAIFAXMFAXMFDXNjcmlwdEFjdGlvbnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAM4IAgUNc2NyaXB0QWN0aW9ucwkAzAgCCQEHUmVpc3N1ZQMFDHNoYXJlQXNzZXRJZAUVc2hhcmVUb2tlblRvUGF5QW1vdW50BgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFFXNoYXJlVG9rZW5Ub1BheUFtb3VudAUMc2hhcmVBc3NldElkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BGXJlcGxlbmlzaFdpdGhPbmVUb2tlbkNhbGMFAWkTdmlydHVhbFN3YXBUb2tlblBheRN2aXJ0dWFsU3dhcFRva2VuR2V0DHN0YWtlRmFybWluZwhsb2NrVHlwZQQNJHQwMTYwNzMxNjE0OAkAlAoCCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAlwbXRBbW91bnQIBQ0kdDAxNjA3MzE2MTQ4Al8xBApwbXRBc3NldElkCAUNJHQwMTYwNzMxNjE0OAJfMgQNJHQwMTYxNTMxNjIyNgkBDGdldEFzc2V0SW5mbwEFCnBtdEFzc2V0SWQEDXBtdFN0ckFzc2V0SWQIBQ0kdDAxNjE1MzE2MjI2Al8xBAxwbXRBc3NldE5hbWUIBQ0kdDAxNjE1MzE2MjI2Al8yBAtwbXREZWNpbWFscwgFDSR0MDE2MTUzMTYyMjYCXzMED3BtdE1pblRocmVzaG9sZADAlrECBB10aHJlc2hvbGRWYWx1ZUZvck1pblRvbGVyYW5jZQCA4esXBAl0b2xlcmFuY2UDCQBmAgUddGhyZXNob2xkVmFsdWVGb3JNaW5Ub2xlcmFuY2UFCXBtdEFtb3VudACgjQYAAQQcc2xpcHBhZ2VWYWx1ZU1pbkZvclJlcGxlbmlzaAkAZQIFBnNjYWxlOAkAaQIJAGgCBQZzY2FsZTgFCXRvbGVyYW5jZQCAreIEBBxzbGlwcGFnZVZhbHVlTWF4Rm9yUmVwbGVuaXNoCQBkAgUGc2NhbGU4CQBpAgkAaAIFBnNjYWxlOAUJdG9sZXJhbmNlAICt4gQEF3NsaXBwYWdlVmFsdWVNaW5Gb3JTd2FwCQBlAgUGc2NhbGU4CQBpAgkAaAIFBnNjYWxlOAABAICt4gQDCQBmAgUPcG10TWluVGhyZXNob2xkBQlwbXRBbW91bnQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICD1BheW1lbnQgYW1vdW50IAkApAMBBQlwbXRBbW91bnQCJyBkb2VzIG5vdCBleGNlZWQgdGhlIG1pbmltdW0gYW1vdW50IG9mIAkApAMBBQ9wbXRNaW5UaHJlc2hvbGQCByB0b2tlbnMDAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAIHCQACAQIcT25lIG9yIHR3byBwYXltZW50cyBleHBlY3RlZAMJAQEhAQUQaGFzRW5vdWdoQmFsYW5jZQkAzggCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUJcG10QW1vdW50BQpwbXRBc3NldElkBQNuaWwJARFzdXNwZW5kU3VzcGljaW91cwADAwkBAiE9AgUKcG10QXNzZXRJZAUIYXNzZXRJZEEJAQIhPQIFCnBtdEFzc2V0SWQFCGFzc2V0SWRCBwkBC3Rocm93QXNzZXRzAAQNJHQwMTcyMjgxNzg3MAMJAAACBQpwbXRBc3NldElkBQhhc3NldElkQQkAmAoGCQBlAgUJcG10QW1vdW50BRN2aXJ0dWFsU3dhcFRva2VuUGF5BRN2aXJ0dWFsU3dhcFRva2VuR2V0CQBkAgUIYmFsYW5jZUEFE3ZpcnR1YWxTd2FwVG9rZW5QYXkJAGUCBQhiYWxhbmNlQgUTdmlydHVhbFN3YXBUb2tlbkdldAkAZAIFCGJhbGFuY2VBBQlwbXRBbW91bnQFCGJhbGFuY2VCCQCYCgYFE3ZpcnR1YWxTd2FwVG9rZW5HZXQJAGUCBQlwbXRBbW91bnQFE3ZpcnR1YWxTd2FwVG9rZW5QYXkJAGUCBQhiYWxhbmNlQQUTdmlydHVhbFN3YXBUb2tlbkdldAkAZAIFCGJhbGFuY2VCBRN2aXJ0dWFsU3dhcFRva2VuUGF5BQhiYWxhbmNlQQkAZAIFCGJhbGFuY2VCBQlwbXRBbW91bnQEEXZpcnR1YWxSZXBsZW5pc2hBCAUNJHQwMTcyMjgxNzg3MAJfMQQRdmlydHVhbFJlcGxlbmlzaEIIBQ0kdDAxNzIyODE3ODcwAl8yBBFiYWxhbmNlQWZ0ZXJTd2FwQQgFDSR0MDE3MjI4MTc4NzACXzMEEWJhbGFuY2VBZnRlclN3YXBCCAUNJHQwMTcyMjgxNzg3MAJfNAQLbmV3QmFsYW5jZUEIBQ0kdDAxNzIyODE3ODcwAl81BAtuZXdCYWxhbmNlQggFDSR0MDE3MjI4MTc4NzACXzYEDGludmFyaWFudE5ldwkBDWludmFyaWFudENhbGMCBRFiYWxhbmNlQWZ0ZXJTd2FwQQURYmFsYW5jZUFmdGVyU3dhcEIEJXJhdGlvVmlydHVhbEJhbGFuY2VUb1ZpcnR1YWxSZXBsZW5pc2gJAGkCCQBrAwUHc2NhbGUxNgURYmFsYW5jZUFmdGVyU3dhcEEFEWJhbGFuY2VBZnRlclN3YXBCCQBrAwUGc2NhbGU4BRF2aXJ0dWFsUmVwbGVuaXNoQQURdmlydHVhbFJlcGxlbmlzaEIDAwkAZwIFF3NsaXBwYWdlVmFsdWVNaW5Gb3JTd2FwCQBrAwUGc2NhbGU4BQlpbnZhcmlhbnQFDGludmFyaWFudE5ldwYJAGYCBQlpbnZhcmlhbnQFDGludmFyaWFudE5ldwkAAgECOkluY29ycmVjdCB2aXJ0dWFsU3dhcFRva2VuUGF5IG9yIHZpcnR1YWxTd2FwVG9rZW5HZXQgdmFsdWUDAwkAZgIFHHNsaXBwYWdlVmFsdWVNaW5Gb3JSZXBsZW5pc2gFJXJhdGlvVmlydHVhbEJhbGFuY2VUb1ZpcnR1YWxSZXBsZW5pc2gGCQBmAgUlcmF0aW9WaXJ0dWFsQmFsYW5jZVRvVmlydHVhbFJlcGxlbmlzaAUcc2xpcHBhZ2VWYWx1ZU1heEZvclJlcGxlbmlzaAkAAgECbFN3YXAgd2l0aCB2aXJ0dWFsU3dhcFRva2VuUGF5IGFuZCB2aXJ0dWFsU3dhcFRva2VuR2V0IGlzIHBvc3NpYmxlLCBidXQgcmF0aW8gYWZ0ZXIgdmlydHVhbCBzd2FwIGlzIGluY29ycmVjdAMJAQEhAQkBEmNoZWNrREFwcFRocmVzaG9sZAMFC25ld0JhbGFuY2VBBQtuZXdCYWxhbmNlQgUKcG10QXNzZXRJZAkBBXRocm93AAQTcmF0aW9TaGFyZVRva2Vuc0luQQkAawMFEXZpcnR1YWxSZXBsZW5pc2hBBQZzY2FsZTgFEWJhbGFuY2VBZnRlclN3YXBBBBNyYXRpb1NoYXJlVG9rZW5zSW5CCQBrAwURdmlydHVhbFJlcGxlbmlzaEIFBnNjYWxlOAURYmFsYW5jZUFmdGVyU3dhcEIEFXNoYXJlVG9rZW5Ub1BheUFtb3VudAkAawMJAJcDAQkAzAgCBRNyYXRpb1NoYXJlVG9rZW5zSW5BCQDMCAIFE3JhdGlvU2hhcmVUb2tlbnNJbkIFA25pbAUQc2hhcmVBc3NldFN1cHBseQUGc2NhbGU4BB1zaGFyZVRva2VuVG9QYXlBbW91bnRBZnRlckZlZQkAawMFFXNoYXJlVG9rZW5Ub1BheUFtb3VudAkAZQIFCWZlZVNjYWxlNgkAaQIFA2ZlZQACBQlmZWVTY2FsZTYEGnNoYXJlVG9rZW5Hb3Zlcm5hbmNlUmV3YXJkCQBrAwUVc2hhcmVUb2tlblRvUGF5QW1vdW50CQBpAgUNZmVlR292ZXJuYW5jZQACBQlmZWVTY2FsZTYEFmdvdmVybmFuY2VSZXdhcmRUb2tlbkEJAGsDBRpzaGFyZVRva2VuR292ZXJuYW5jZVJld2FyZAUIYmFsYW5jZUEFEHNoYXJlQXNzZXRTdXBwbHkEFmdvdmVybmFuY2VSZXdhcmRUb2tlbkIJAGsDBRpzaGFyZVRva2VuR292ZXJuYW5jZVJld2FyZAUIYmFsYW5jZUIFEHNoYXJlQXNzZXRTdXBwbHkEDSR0MDE5NjIxMTk5MDQDCQAAAgUNcG10U3RyQXNzZXRJZAULc3RyQXNzZXRJZEEJAJUKAwkAZQIFCXBtdEFtb3VudAUWZ292ZXJuYW5jZVJld2FyZFRva2VuQQUWZ292ZXJuYW5jZVJld2FyZFRva2VuQgULc3RyQXNzZXRJZEIJAJUKAwkAZQIFCXBtdEFtb3VudAUWZ292ZXJuYW5jZVJld2FyZFRva2VuQgUWZ292ZXJuYW5jZVJld2FyZFRva2VuQQULc3RyQXNzZXRJZEEEC3N0YWtlQW1vdW50CAUNJHQwMTk2MjExOTkwNAJfMQQNdW5zdGFrZUFtb3VudAgFDSR0MDE5NjIxMTk5MDQCXzIEDHVuc3Rha2VBc3NldAgFDSR0MDE5NjIxMTk5MDQCXzMEBnN0YWtlMQMJAQhjb250YWlucwIFDXN0YWtpbmdBc3NldHMFDXBtdFN0ckFzc2V0SWQJAPwHBAUEdGhpcwIMc3Rha2VVbnN0YWtlCQDMCAIGCQDMCAIFC3N0YWtlQW1vdW50CQDMCAIFDXBtdFN0ckFzc2V0SWQFA25pbAUDbmlsAAADCQAAAgUGc3Rha2UxBQZzdGFrZTEEBnN0YWtlMgMJAQhjb250YWlucwIFDXN0YWtpbmdBc3NldHMFDHVuc3Rha2VBc3NldAkA/AcEBQR0aGlzAgxzdGFrZVVuc3Rha2UJAMwIAgcJAMwIAgUNdW5zdGFrZUFtb3VudAkAzAgCBQx1bnN0YWtlQXNzZXQFA25pbAUDbmlsAAADCQAAAgUGc3Rha2UyBQZzdGFrZTIEDXNjcmlwdEFjdGlvbnMJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtCYWxhbmNlQQkAZQIFC25ld0JhbGFuY2VBBRZnb3Zlcm5hbmNlUmV3YXJkVG9rZW5BCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUIJAGUCBQtuZXdCYWxhbmNlQgUWZ292ZXJuYW5jZVJld2FyZFRva2VuQgkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkJAGQCBRBzaGFyZUFzc2V0U3VwcGx5BR1zaGFyZVRva2VuVG9QYXlBbW91bnRBZnRlckZlZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUKa0ludmFyaWFudAkBDWludmFyaWFudENhbGMCCQBlAgULbmV3QmFsYW5jZUEFFmdvdmVybmFuY2VSZXdhcmRUb2tlbkEJAGUCBQtuZXdCYWxhbmNlQgUWZ292ZXJuYW5jZVJld2FyZFRva2VuQgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ9tb25leUJveEFkZHJlc3MFFmdvdmVybmFuY2VSZXdhcmRUb2tlbkEFCGFzc2V0SWRBCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFD21vbmV5Qm94QWRkcmVzcwUWZ292ZXJuYW5jZVJld2FyZFRva2VuQgUIYXNzZXRJZEIFA25pbAMFDHN0YWtlRmFybWluZwQKc3RQYXltZW50cwkAzggCCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQxzaGFyZUFzc2V0SWQFHXNoYXJlVG9rZW5Ub1BheUFtb3VudEFmdGVyRmVlBQNuaWwDCQAAAgkAkAMBCAUBaQhwYXltZW50cwACCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCAwkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAEHYXNzZXRJZAEABQR1bml0CAkAkQMCCAUBaQhwYXltZW50cwABB2Fzc2V0SWQICQCRAwIIBQFpCHBheW1lbnRzAAEGYW1vdW50BQNuaWwFA25pbAQCcmUJAPwHBAUEdGhpcwIMcmVpc3N1ZVNoYXJlCQDMCAIFHXNoYXJlVG9rZW5Ub1BheUFtb3VudEFmdGVyRmVlBQNuaWwFA25pbAMJAAACBQJyZQUCcmUEAXMJAPwHBAUOZmFybWluZ0FkZHJlc3MCF2xvY2tTaGFyZVRva2Vuc0Zyb21Qb29sCQDMCAIICAUBaQZjYWxsZXIFYnl0ZXMJAMwIAgkApQgBBQR0aGlzCQDMCAIFCGxvY2tUeXBlBQNuaWwFCnN0UGF5bWVudHMDCQAAAgUBcwUBcwUNc2NyaXB0QWN0aW9ucwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzggCBQ1zY3JpcHRBY3Rpb25zCQDMCAIJAQdSZWlzc3VlAwUMc2hhcmVBc3NldElkBR1zaGFyZVRva2VuVG9QYXlBbW91bnRBZnRlckZlZQYJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBR1zaGFyZVRva2VuVG9QYXlBbW91bnRBZnRlckZlZQUMc2hhcmVBc3NldElkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDHdpdGhkcmF3Q2FsYwIBaQx1bmxvY2tBbW91bnQEDSR0MDIxNzUzMjIwODgDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABAwkBAiE9AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQxzaGFyZUFzc2V0SWQJAAIBCQCsAgICJEluY29ycmVjdCBhc3NldCBhdHRhY2hlZC4gRXhwZWN0ZWQ6IAkA2AQBBQxzaGFyZUFzc2V0SWQJAJQKAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAkAlAoCAAAFDHNoYXJlQXNzZXRJZAQJcG10QW1vdW50CAUNJHQwMjE3NTMyMjA4OAJfMQQKcG10QXNzZXRJZAgFDSR0MDIxNzUzMjIwODgCXzIDCQEBIQEFEGhhc0Vub3VnaEJhbGFuY2UJAM4IAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFCXBtdEFtb3VudAUKcG10QXNzZXRJZAUDbmlsCQERc3VzcGVuZFN1c3BpY2lvdXMABAZ1bmxvY2sDCQBmAgUMdW5sb2NrQW1vdW50AAAJAPwHBAUOZmFybWluZ0FkZHJlc3MCG3dpdGhkcmF3U2hhcmVUb2tlbnNGcm9tUG9vbAkAzAgCCAgFAWkGY2FsbGVyBWJ5dGVzCQDMCAIJAKUIAQUEdGhpcwkAzAgCBQx1bmxvY2tBbW91bnQFA25pbAUDbmlsAAADCQAAAgUGdW5sb2NrBQZ1bmxvY2sEDndpdGhkcmF3QW1vdW50CQBkAgUJcG10QW1vdW50BQx1bmxvY2tBbW91bnQEDGFtb3VudFRvUGF5QQkAawMFDndpdGhkcmF3QW1vdW50BQhiYWxhbmNlQQUQc2hhcmVBc3NldFN1cHBseQQMYW1vdW50VG9QYXlCCQBrAwUOd2l0aGRyYXdBbW91bnQFCGJhbGFuY2VCBRBzaGFyZUFzc2V0U3VwcGx5BBNpbnZhcmlhbnRDYWxjdWxhdGVkCQENaW52YXJpYW50Q2FsYwIJAGUCBQhiYWxhbmNlQQUMYW1vdW50VG9QYXlBCQBlAgUIYmFsYW5jZUIFDGFtb3VudFRvUGF5QgQGc3Rha2UxAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwULc3RyQXNzZXRJZEEJAPwHBAUEdGhpcwIMc3Rha2VVbnN0YWtlCQDMCAIHCQDMCAIFDGFtb3VudFRvUGF5QQkAzAgCBQtzdHJBc3NldElkQQUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTEFBnN0YWtlMQQGc3Rha2UyAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwULc3RyQXNzZXRJZEIJAPwHBAUEdGhpcwIMc3Rha2VVbnN0YWtlCQDMCAIHCQDMCAIFDGFtb3VudFRvUGF5QgkAzAgCBQtzdHJBc3NldElkQgUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTIFBnN0YWtlMgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa0JhbGFuY2VBCQBlAgUIYmFsYW5jZUEFDGFtb3VudFRvUGF5QQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa0JhbGFuY2VCCQBlAgUIYmFsYW5jZUIFDGFtb3VudFRvUGF5QgkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkJAGUCBRBzaGFyZUFzc2V0U3VwcGx5BQ53aXRoZHJhd0Ftb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUKa0ludmFyaWFudAUTaW52YXJpYW50Q2FsY3VsYXRlZAkAzAgCCQEEQnVybgIFDHNoYXJlQXNzZXRJZAUOd2l0aGRyYXdBbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQxhbW91bnRUb1BheUEFCGFzc2V0SWRBCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUMYW1vdW50VG9QYXlCBQhhc3NldElkQgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuDwFpAQRpbml0AQxmaXJzdEhhcnZlc3QEDSR0MDIzNjQwMjM3MTcJAJQKAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQKcG10QW1vdW50QQgFDSR0MDIzNjQwMjM3MTcCXzEEC3BtdEFzc2V0SWRBCAUNJHQwMjM2NDAyMzcxNwJfMgQNJHQwMjM3MjIyMzc5OQkAlAoCCAkAkQMCCAUBaQhwYXltZW50cwABBmFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAQdhc3NldElkBApwbXRBbW91bnRCCAUNJHQwMjM3MjIyMzc5OQJfMQQLcG10QXNzZXRJZEIIBQ0kdDAyMzcyMjIzNzk5Al8yBA0kdDAyMzgwNDIzODgxCQEMZ2V0QXNzZXRJbmZvAQULcG10QXNzZXRJZEEEDnBtdFN0ckFzc2V0SWRBCAUNJHQwMjM4MDQyMzg4MQJfMQQNcG10QXNzZXROYW1lQQgFDSR0MDIzODA0MjM4ODECXzIEDHBtdERlY2ltYWxzQQgFDSR0MDIzODA0MjM4ODECXzMEDSR0MDIzODg2MjM5NjMJAQxnZXRBc3NldEluZm8BBQtwbXRBc3NldElkQgQOcG10U3RyQXNzZXRJZEIIBQ0kdDAyMzg4NjIzOTYzAl8xBA1wbXRBc3NldE5hbWVCCAUNJHQwMjM4ODYyMzk2MwJfMgQMcG10RGVjaW1hbHNCCAUNJHQwMjM4ODYyMzk2MwJfMwMJAQlpc0RlZmluZWQBCQCbCAIFBHRoaXMFB2tBY3RpdmUJAQ10aHJvd0lzQWN0aXZlAAMJAAACBQtwbXRBc3NldElkQQULcG10QXNzZXRJZEIJAAIBAhhBc3NldHMgbXVzdCBiZSBkaWZmZXJlbnQECXNoYXJlTmFtZQkArAICCQCsAgIJAKwCAgIBcwkArwICBQ1wbXRBc3NldE5hbWVBAAcCAV8JAK8CAgUNcG10QXNzZXROYW1lQgAHBBBzaGFyZURlc2NyaXB0aW9uCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIiU2hhcmVUb2tlbiBvZiBTd29wRmkgcHJvdG9jb2wgZm9yIAUNcG10QXNzZXROYW1lQQIFIGFuZCAFDXBtdEFzc2V0TmFtZUICDCBhdCBhZGRyZXNzIAkApQgBBQR0aGlzBA1zaGFyZURlY2ltYWxzCQBpAgkAZAIFDHBtdERlY2ltYWxzQQUMcG10RGVjaW1hbHNCAAIEEnNoYXJlSW5pdGlhbFN1cHBseQkAawMJAGwGBQpwbXRBbW91bnRBBQxwbXREZWNpbWFsc0EABQABBQxwbXREZWNpbWFsc0EFBERPV04JAGwGBQpwbXRBbW91bnRCBQxwbXREZWNpbWFsc0IABQABBQxwbXREZWNpbWFsc0IFBERPV04JAGwGAAoAAAUNc2hhcmVEZWNpbWFscwAAAAAFBERPV04ECnNoYXJlSXNzdWUJAMIIBQUJc2hhcmVOYW1lBRBzaGFyZURlc2NyaXB0aW9uBRJzaGFyZUluaXRpYWxTdXBwbHkFDXNoYXJlRGVjaW1hbHMGBAxzaGFyZUlzc3VlSWQJALgIAQUKc2hhcmVJc3N1ZQQTaW52YXJpYW50Q2FsY3VsYXRlZAkBDWludmFyaWFudENhbGMCBQpwbXRBbW91bnRBBQpwbXRBbW91bnRCBAZzdGFrZTEDCQEIY29udGFpbnMCBQ1zdGFraW5nQXNzZXRzBQ5wbXRTdHJBc3NldElkQQkA/AcEBQR0aGlzAgxzdGFrZVVuc3Rha2UJAMwIAgYJAMwIAgUKcG10QW1vdW50QQkAzAgCBQ5wbXRTdHJBc3NldElkQQUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTEFBnN0YWtlMQQGc3Rha2UyAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwUOcG10U3RyQXNzZXRJZEIJAPwHBAUEdGhpcwIMc3Rha2VVbnN0YWtlCQDMCAIGCQDMCAIFCnBtdEFtb3VudEIJAMwIAgUOcG10U3RyQXNzZXRJZEIFA25pbAUDbmlsAAADCQAAAgUGc3Rha2UyBQZzdGFrZTIECWJhc2VFbnRyeQkAzAgCCQELU3RyaW5nRW50cnkCBQhrVmVyc2lvbgUHdmVyc2lvbgkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQYJAMwIAgkBC1N0cmluZ0VudHJ5AgUJa0Fzc2V0SWRBBQ5wbXRTdHJBc3NldElkQQkAzAgCCQELU3RyaW5nRW50cnkCBQlrQXNzZXRJZEIFDnBtdFN0ckFzc2V0SWRCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUEFCnBtdEFtb3VudEEJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtCYWxhbmNlQgUKcG10QW1vdW50QgkAzAgCCQEMSW50ZWdlckVudHJ5AgUKa0ludmFyaWFudAUTaW52YXJpYW50Q2FsY3VsYXRlZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUEa0ZlZQkBEUBleHRyTmF0aXZlKDEwNTApAgUGb3JhY2xlAg1iYXNlX2ZlZV9mbGF0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5rREFwcFRocmVzaG9sZAADCQDMCAIFCnNoYXJlSXNzdWUJAMwIAgkBC1N0cmluZ0VudHJ5AgUNa1NoYXJlQXNzZXRJZAkA2AQBBQxzaGFyZUlzc3VlSWQJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtTaGFyZUFzc2V0U3VwcGx5BRJzaGFyZUluaXRpYWxTdXBwbHkJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBRJzaGFyZUluaXRpYWxTdXBwbHkFDHNoYXJlSXNzdWVJZAUDbmlsAwUMZmlyc3RIYXJ2ZXN0CQDOCAIFCWJhc2VFbnRyeQkAzAgCCQEMQm9vbGVhbkVudHJ5AgUNa0ZpcnN0SGFydmVzdAUMZmlyc3RIYXJ2ZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrRmlyc3RIYXJ2ZXN0SGVpZ2h0CQBkAgULc3RhcnRIZWlnaHQJAGgCBRVmaXJzdEhhcnZlc3RFbmRQZXJpb2QFDHBlcmlvZExlbmd0aAUDbmlsBQliYXNlRW50cnkJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEYcmVwbGVuaXNoV2l0aFR3b1Rva2Vuc1YyAgxzdGFrZUZhcm1pbmcIbG9ja1R5cGUJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJAQt2YWx1ZU9yRWxzZQIJAQxpc0RlcHJpY2F0ZWQACQEacmVwbGVuaXNoV2l0aFR3b1Rva2Vuc0NhbGMDBQFpBQxzdGFrZUZhcm1pbmcFCGxvY2tUeXBlAWkBF3JlcGxlbmlzaFdpdGhPbmVUb2tlblYyBBN2aXJ0dWFsU3dhcFRva2VuUGF5E3ZpcnR1YWxTd2FwVG9rZW5HZXQMc3Rha2VGYXJtaW5nCGxvY2tUeXBlCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQEMaXNEZXByaWNhdGVkAAkBGXJlcGxlbmlzaFdpdGhPbmVUb2tlbkNhbGMFBQFpBRN2aXJ0dWFsU3dhcFRva2VuUGF5BRN2aXJ0dWFsU3dhcFRva2VuR2V0BQxzdGFrZUZhcm1pbmcFCGxvY2tUeXBlAWkBCndpdGhkcmF3VjIBDHVubG9ja0Ftb3VudAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBDHdpdGhkcmF3Q2FsYwIFAWkFDHVubG9ja0Ftb3VudAFpARB3aXRoZHJhd09uZVRva2VuBAx1bmxvY2tBbW91bnQNd2l0aGRyYXdBc3NldBhlc3RpbWF0ZWRBbW91bnRUb1JlY2VpdmUSbWluQW1vdW50VG9SZWNlaXZlCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQEMaXNEZXByaWNhdGVkAAQNJHQwMjc1MjUyNzg4NAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEDCQECIT0CCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFDHNoYXJlQXNzZXRJZAkAAgEJAKwCAgIkSW5jb3JyZWN0IGFzc2V0IGF0dGFjaGVkLiBFeHBlY3RlZDogCQDYBAEFDHNoYXJlQXNzZXRJZAkAlAoCCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkCQCUCgIAAAUMc2hhcmVBc3NldElkBAlwbXRBbW91bnQIBQ0kdDAyNzUyNTI3ODg0Al8xBApwbXRBc3NldElkCAUNJHQwMjc1MjUyNzg4NAJfMgQOd2l0aGRyYXdBbW91bnQJAGQCBQlwbXRBbW91bnQFDHVubG9ja0Ftb3VudAMDCQECIT0CBQ13aXRoZHJhd0Fzc2V0BQtzdHJBc3NldElkQQkBAiE9AgUNd2l0aGRyYXdBc3NldAULc3RyQXNzZXRJZEIHCQACAQIYSW5jb3JyZWN0IHdpdGhkcmF3IGFzc2V0AwkAZwIAAAUOd2l0aGRyYXdBbW91bnQJAAIBAiV3aXRoZHJhdyBhbW91bnQgbXVzdCBiZSBncmF0ZXIgdGhhbiAwAwkBASEBBRBoYXNFbm91Z2hCYWxhbmNlCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQlwbXRBbW91bnQFCnBtdEFzc2V0SWQFA25pbAkBEXN1c3BlbmRTdXNwaWNpb3VzAAQGdW5sb2NrAwkAZgIFDHVubG9ja0Ftb3VudAAACQD8BwQFDmZhcm1pbmdBZGRyZXNzAht3aXRoZHJhd1NoYXJlVG9rZW5zRnJvbVBvb2wJAMwIAggIBQFpBmNhbGxlcgVieXRlcwkAzAgCCQClCAEFBHRoaXMJAMwIAgUMdW5sb2NrQW1vdW50BQNuaWwFA25pbAAAAwkAAAIFBnVubG9jawUGdW5sb2NrBAxhbW91bnRUb1BheUEJAGsDBQ53aXRoZHJhd0Ftb3VudAUIYmFsYW5jZUEFEHNoYXJlQXNzZXRTdXBwbHkEDGFtb3VudFRvUGF5QgkAawMFDndpdGhkcmF3QW1vdW50BQhiYWxhbmNlQgUQc2hhcmVBc3NldFN1cHBseQQMbmV3VmlydEJhbGNBCQBlAgUIYmFsYW5jZUEFDGFtb3VudFRvUGF5QQQMbmV3VmlydEJhbGNCCQBlAgUIYmFsYW5jZUIFDGFtb3VudFRvUGF5QgQLZmVlRGlzY291bnQJARRjYWxjdWxhdGVGZWVEaXNjb3VudAEIBQFpDG9yaWdpbkNhbGxlcgQWYW1vdW50RXhjaGFuZ2VkV2l0aEZlZQMJAAACBQ13aXRoZHJhd0Fzc2V0BQtzdHJBc3NldElkQQkBE2NhbGN1bGF0ZVNlbmRBbW91bnQHBRhlc3RpbWF0ZWRBbW91bnRUb1JlY2VpdmUFEm1pbkFtb3VudFRvUmVjZWl2ZQUMYW1vdW50VG9QYXlCBQhhc3NldElkQgUMbmV3VmlydEJhbGNBBQxuZXdWaXJ0QmFsY0IJAQ1pbnZhcmlhbnRDYWxjAgUMbmV3VmlydEJhbGNBBQxuZXdWaXJ0QmFsY0IJARNjYWxjdWxhdGVTZW5kQW1vdW50BwUYZXN0aW1hdGVkQW1vdW50VG9SZWNlaXZlBRJtaW5BbW91bnRUb1JlY2VpdmUFDGFtb3VudFRvUGF5QQUIYXNzZXRJZEEFDG5ld1ZpcnRCYWxjQQUMbmV3VmlydEJhbGNCCQENaW52YXJpYW50Q2FsYwIFDG5ld1ZpcnRCYWxjQQUMbmV3VmlydEJhbGNCBAlnb3ZSZXdhcmQJAGsDBRZhbW91bnRFeGNoYW5nZWRXaXRoRmVlCQBuBAUNZmVlR292ZXJuYW5jZQULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwUJZmVlU2NhbGU2BA9hbW91bnRFeGNoYW5nZWQJAGsDBRZhbW91bnRFeGNoYW5nZWRXaXRoRmVlCQBlAgUJZmVlU2NhbGU2CQBuBAUDZmVlBQtmZWVEaXNjb3VudAUJZmVlU2NhbGU2BQdDRUlMSU5HBQlmZWVTY2FsZTYEDSR0MDI5NTc1Mjk5NDkDCQAAAgUNd2l0aGRyYXdBc3NldAULc3RyQXNzZXRJZEEJAJYKBAkAZAIFDGFtb3VudFRvUGF5QQUPYW1vdW50RXhjaGFuZ2VkCQBlAgkAZQIJAGUCBQhiYWxhbmNlQQUMYW1vdW50VG9QYXlBBQ9hbW91bnRFeGNoYW5nZWQFCWdvdlJld2FyZAUIYmFsYW5jZUIFCGFzc2V0SWRCCQCWCgQJAGQCBQxhbW91bnRUb1BheUIFD2Ftb3VudEV4Y2hhbmdlZAUIYmFsYW5jZUEJAGUCCQBlAgkAZQIFCGJhbGFuY2VCBQxhbW91bnRUb1BheUIFD2Ftb3VudEV4Y2hhbmdlZAUJZ292UmV3YXJkBQhhc3NldElkQQQLYW1vdW50VG9QYXkIBQ0kdDAyOTU3NTI5OTQ5Al8xBAtiYWxhbmNlQU5ldwgFDSR0MDI5NTc1Mjk5NDkCXzIEC2JhbGFuY2VCTmV3CAUNJHQwMjk1NzUyOTk0OQJfMwQLdmlydEFzc2V0SWQIBQ0kdDAyOTU3NTI5OTQ5Al80AwkBASEBCQESY2hlY2tEQXBwVGhyZXNob2xkAwULYmFsYW5jZUFOZXcFC2JhbGFuY2VCTmV3BQt2aXJ0QXNzZXRJZAkBBXRocm93AAQTaW52YXJpYW50Q2FsY3VsYXRlZAkBDWludmFyaWFudENhbGMCBQtiYWxhbmNlQU5ldwULYmFsYW5jZUJOZXcEBnN0YWtlMQMJAQhjb250YWlucwIFDXN0YWtpbmdBc3NldHMFDXdpdGhkcmF3QXNzZXQJAPwHBAUEdGhpcwIMc3Rha2VVbnN0YWtlCQDMCAIHCQDMCAIJAGQCBQthbW91bnRUb1BheQUJZ292UmV3YXJkCQDMCAIFDXdpdGhkcmF3QXNzZXQFA25pbAUDbmlsAAADCQAAAgUGc3Rha2UxBQZzdGFrZTEJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtCYWxhbmNlQQULYmFsYW5jZUFOZXcJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtCYWxhbmNlQgULYmFsYW5jZUJOZXcJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtTaGFyZUFzc2V0U3VwcGx5CQBlAgUQc2hhcmVBc3NldFN1cHBseQUOd2l0aGRyYXdBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFCmtJbnZhcmlhbnQFE2ludmFyaWFudENhbGN1bGF0ZWQJAMwIAgkBBEJ1cm4CBQxzaGFyZUFzc2V0SWQFDndpdGhkcmF3QW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgULYW1vdW50VG9QYXkJANkEAQUNd2l0aGRyYXdBc3NldAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ9tb25leUJveEFkZHJlc3MFCWdvdlJld2FyZAkA2QQBBQ13aXRoZHJhd0Fzc2V0BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEIZXhjaGFuZ2UCGGVzdGltYXRlZEFtb3VudFRvUmVjZWl2ZRJtaW5BbW91bnRUb1JlY2VpdmUJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJAQt2YWx1ZU9yRWxzZQIJAQxpc0RlcHJpY2F0ZWQABA0kdDAzMTAxOTMxMDk0CQCUCgIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQECXBtdEFtb3VudAgFDSR0MDMxMDE5MzEwOTQCXzEECnBtdEFzc2V0SWQIBQ0kdDAzMTAxOTMxMDk0Al8yAwkAZwIAAAUYZXN0aW1hdGVkQW1vdW50VG9SZWNlaXZlCQACAQkArAICAitFc3RpbWF0ZWQgYW1vdW50IG11c3QgYmUgcG9zaXRpdmUuIEFjdHVhbDogCQCkAwEFGGVzdGltYXRlZEFtb3VudFRvUmVjZWl2ZQMJAGYCBRJtaW5BbW91bnRUb1JlY2VpdmUFGGVzdGltYXRlZEFtb3VudFRvUmVjZWl2ZQkAAgECL01pbmltYWwgYW1vdW50IGNhbid0IGJlIGdyZWF0ZXIgdGhhbiBlc3RpbWF0ZWQuAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQEPdGhyb3dPbmVQYXltZW50AAMJAQEhAQUQaGFzRW5vdWdoQmFsYW5jZQkAzggCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUJcG10QW1vdW50BQpwbXRBc3NldElkBQNuaWwJARFzdXNwZW5kU3VzcGljaW91cwADAwkBAiE9AgUKcG10QXNzZXRJZAUIYXNzZXRJZEEJAQIhPQIFCnBtdEFzc2V0SWQFCGFzc2V0SWRCBwkBC3Rocm93QXNzZXRzAAMJAGYCAICt4gQFCXBtdEFtb3VudAkAAgECME9ubHkgc3dhcCBvZiAxMC4wMDAwMDAgb3IgbW9yZSB0b2tlbnMgaXMgYWxsb3dlZAMDCQBmAgUVZXhjaGFuZ2VSYXRpb0xpbWl0TWluCQBrAwUGc2NhbGU4BRJtaW5BbW91bnRUb1JlY2VpdmUFCXBtdEFtb3VudAYJAGYCCQBrAwUGc2NhbGU4BRhlc3RpbWF0ZWRBbW91bnRUb1JlY2VpdmUFCXBtdEFtb3VudAUVZXhjaGFuZ2VSYXRpb0xpbWl0TWF4CQACAQIcSW5jb3JyZWN0IGFyZ3MgYW5kIHBtdCByYXRpbwQLc2VuZEFzc2V0SWQDCQAAAgUKcG10QXNzZXRJZAUIYXNzZXRJZEEFCGFzc2V0SWRCBQhhc3NldElkQQQGYW1vdW50CQETY2FsY3VsYXRlU2VuZEFtb3VudAcFGGVzdGltYXRlZEFtb3VudFRvUmVjZWl2ZQUSbWluQW1vdW50VG9SZWNlaXZlBQlwbXRBbW91bnQFCnBtdEFzc2V0SWQFCGJhbGFuY2VBBQhiYWxhbmNlQgUJaW52YXJpYW50BAtmZWVEaXNjb3VudAkBFGNhbGN1bGF0ZUZlZURpc2NvdW50AQgFAWkMb3JpZ2luQ2FsbGVyBBBnb3Zlcm5hbmNlUmV3YXJkCQBrAwUGYW1vdW50CQBuBAUNZmVlR292ZXJuYW5jZQULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwUJZmVlU2NhbGU2BA5hbW91bnRNaW51c0ZlZQkAawMFBmFtb3VudAkAZQIFCWZlZVNjYWxlNgkAbgQFA2ZlZQULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwUJZmVlU2NhbGU2BA0kdDAzMjY5MDMyOTY4AwkAAAIFCnBtdEFzc2V0SWQFCGFzc2V0SWRBCQCUCgIJAGQCBQhiYWxhbmNlQQUJcG10QW1vdW50CQBlAgkAZQIFCGJhbGFuY2VCBQ5hbW91bnRNaW51c0ZlZQUQZ292ZXJuYW5jZVJld2FyZAkAlAoCCQBlAgkAZQIFCGJhbGFuY2VBBQ5hbW91bnRNaW51c0ZlZQUQZ292ZXJuYW5jZVJld2FyZAkAZAIFCGJhbGFuY2VCBQlwbXRBbW91bnQEC25ld0JhbGFuY2VBCAUNJHQwMzI2OTAzMjk2OAJfMQQLbmV3QmFsYW5jZUIIBQ0kdDAzMjY5MDMyOTY4Al8yAwkBASEBCQESY2hlY2tEQXBwVGhyZXNob2xkAwULbmV3QmFsYW5jZUEFC25ld0JhbGFuY2VCBQpwbXRBc3NldElkCQEFdGhyb3cABA0kdDAzMzA3NDMzMTQ3CQEMZ2V0QXNzZXRJbmZvAQUKcG10QXNzZXRJZAQNcG10U3RyQXNzZXRJZAgFDSR0MDMzMDc0MzMxNDcCXzEEDHBtdEFzc2V0TmFtZQgFDSR0MDMzMDc0MzMxNDcCXzIEC3BtdERlY2ltYWxzCAUNJHQwMzMwNzQzMzE0NwJfMwQNJHQwMzMxNjAzMzIzNwkBDGdldEFzc2V0SW5mbwEFC3NlbmRBc3NldElkBA5zZW5kU3RyQXNzZXRJZAgFDSR0MDMzMTYwMzMyMzcCXzEEDXNlbmRBc3NldE5hbWUIBQ0kdDAzMzE2MDMzMjM3Al8yBAxzZW5kRGVjaW1hbHMIBQ0kdDAzMzE2MDMzMjM3Al8zBAZzdGFrZTEDCQEIY29udGFpbnMCBQ1zdGFraW5nQXNzZXRzBQ1wbXRTdHJBc3NldElkCQD8BwQFBHRoaXMCDHN0YWtlVW5zdGFrZQkAzAgCBgkAzAgCBQlwbXRBbW91bnQJAMwIAgUNcG10U3RyQXNzZXRJZAUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTEFBnN0YWtlMQQGc3Rha2UyAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwUOc2VuZFN0ckFzc2V0SWQJAPwHBAUEdGhpcwIMc3Rha2VVbnN0YWtlCQDMCAIHCQDMCAIJAGQCBQ5hbW91bnRNaW51c0ZlZQUQZ292ZXJuYW5jZVJld2FyZAkAzAgCBQ5zZW5kU3RyQXNzZXRJZAUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTIFBnN0YWtlMgkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUEFC25ld0JhbGFuY2VBCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUIFC25ld0JhbGFuY2VCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQprSW52YXJpYW50CQENaW52YXJpYW50Q2FsYwIFC25ld0JhbGFuY2VBBQtuZXdCYWxhbmNlQgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFDmFtb3VudE1pbnVzRmVlBQtzZW5kQXNzZXRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ9tb25leUJveEFkZHJlc3MFEGdvdmVybmFuY2VSZXdhcmQFC3NlbmRBc3NldElkBQNuaWwJAMwIAgUOYW1vdW50TWludXNGZWUJAMwIAgULc2VuZEFzc2V0SWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgNtc2cBDHJlaXNzdWVTaGFyZQEGYW1vdW50CQELdmFsdWVPckVsc2UCCQEKaXNTZWxmQ2FsbAEFA21zZwkAzAgCCQEHUmVpc3N1ZQMFDHNoYXJlQXNzZXRJZAUGYW1vdW50BgUDbmlsAWkBCHNodXRkb3duAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQMJAQEhAQUGYWN0aXZlCQACAQkArAICAiJEQXBwIGlzIGFscmVhZHkgc3VzcGVuZGVkLiBDYXVzZTogCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFBmtDYXVzZQIadGhlIGNhdXNlIHdhc24ndCBzcGVjaWZpZWQJAQdzdXNwZW5kAQIPUGF1c2VkIGJ5IGFkbWluAWkBCGFjdGl2YXRlAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQMFBmFjdGl2ZQkBDXRocm93SXNBY3RpdmUACQDMCAIJAQxCb29sZWFuRW50cnkCBQdrQWN0aXZlBgkAzAgCCQELRGVsZXRlRW50cnkBBQZrQ2F1c2UFA25pbAFpARl0YWtlSW50b0FjY291bnRFeHRyYUZ1bmRzAAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAQFY2xhaW0DAwkAAAIFCGFzc2V0SWRBBQRVU0ROBgkAAAIFCGFzc2V0SWRCBQRVU0ROCQD8BwQFEnN0YWtpbmdVU0ROQWRkcmVzcwIMY2xhaW1SZXdhcmRzBQNuaWwFA25pbAAAAwkAAAIFBWNsYWltBQVjbGFpbQQNYW1vdW50RW5yb2xsQQkAZQIFGWFjY291bnRCYWxhbmNlV2l0aFN0YWtlZEEFCGJhbGFuY2VBBA1hbW91bnRFbnJvbGxCCQBlAgUZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQgUIYmFsYW5jZUIEDGludmFyaWFudE5ldwkBDWludmFyaWFudENhbGMCCQBkAgUIYmFsYW5jZUEFDWFtb3VudEVucm9sbEEJAGQCBQhiYWxhbmNlQgUNYW1vdW50RW5yb2xsQgMJAQIhPQIIBQFpBmNhbGxlcgUPbW9uZXlCb3hBZGRyZXNzCQACAQIpT25seSB0aGUgbW9uZXkgYm94IGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24DAwkAZgIAAAUNYW1vdW50RW5yb2xsQQYJAGYCAAAFDWFtb3VudEVucm9sbEIJAQdzdXNwZW5kAQIWRW5yb2xsIGFtb3VudCBuZWdhdGl2ZQMDCQAAAgUNYW1vdW50RW5yb2xsQQAACQAAAgUNYW1vdW50RW5yb2xsQgAABwkAAgECEE5vIG1vbmV5IHRvIHRha2UEBnN0YWtlMQMDCQEIY29udGFpbnMCBQ1zdGFraW5nQXNzZXRzBQtzdHJBc3NldElkQQkAZgIFDWFtb3VudEVucm9sbEEAAAcJAPwHBAUEdGhpcwIMc3Rha2VVbnN0YWtlCQDMCAIGCQDMCAIFDWFtb3VudEVucm9sbEEJAMwIAgULc3RyQXNzZXRJZEEFA25pbAUDbmlsAAADCQAAAgUGc3Rha2UxBQZzdGFrZTEEBnN0YWtlMgMDCQEIY29udGFpbnMCBQ1zdGFraW5nQXNzZXRzBQtzdHJBc3NldElkQgkAZgIFDWFtb3VudEVucm9sbEIAAAcJAPwHBAUEdGhpcwIMc3Rha2VVbnN0YWtlCQDMCAIGCQDMCAIFDWFtb3VudEVucm9sbEIJAMwIAgULc3RyQXNzZXRJZEIFA25pbAUDbmlsAAADCQAAAgUGc3Rha2UyBQZzdGFrZTIJAMwIAgkBDEludGVnZXJFbnRyeQIFCmtJbnZhcmlhbnQFDGludmFyaWFudE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa0JhbGFuY2VBCQBkAgUIYmFsYW5jZUEFDWFtb3VudEVucm9sbEEJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtCYWxhbmNlQgkAZAIFCGJhbGFuY2VCBQ1hbW91bnRFbnJvbGxCBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEYa2VlcExpbWl0Rm9yRmlyc3RIYXJ2ZXN0AQpzaGFyZUxpbWl0CQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQtrU2hhcmVMaW1pdAUKc2hhcmVMaW1pdAUDbmlsAWkBDHN0YWtlVW5zdGFrZQMFc3Rha2UGYW1vdW50DWFzc2V0SWRTdHJpbmcDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAi1Pbmx5IGNvbnRyYWN0IGl0c2VsZiBjYW4gaW52b2tlIHRoaXMgZnVuY3Rpb24EDSR0MDM2ODg5MzY5OTIJARFjYWxjU3Rha2luZ1BhcmFtcwMFBXN0YWtlBQZhbW91bnQJANkEAQUNYXNzZXRJZFN0cmluZwQEY2FsbAgFDSR0MDM2ODg5MzY5OTICXzEEBGFkZHIIBQ0kdDAzNjg4OTM2OTkyAl8yBAZwYXJhbXMIBQ0kdDAzNjg4OTM2OTkyAl8zBAhwYXltZW50cwgFDSR0MDM2ODg5MzY5OTICXzQEA2ludgkA/AcEBQRhZGRyBQRjYWxsBQZwYXJhbXMFCHBheW1lbnRzAwkAAAIFA2ludgUDaW52BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEWcmVwbGVuaXNoV2l0aFR3b1Rva2VucwAJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJAQt2YWx1ZU9yRWxzZQIJAQxpc0RlcHJpY2F0ZWQACQEacmVwbGVuaXNoV2l0aFR3b1Rva2Vuc0NhbGMDBQFpBwAAAWkBFXJlcGxlbmlzaFdpdGhPbmVUb2tlbgITdmlydHVhbFN3YXBUb2tlblBheRN2aXJ0dWFsU3dhcFRva2VuR2V0CQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQEMaXNEZXByaWNhdGVkAAkBGXJlcGxlbmlzaFdpdGhPbmVUb2tlbkNhbGMFBQFpBRN2aXJ0dWFsU3dhcFRva2VuUGF5BRN2aXJ0dWFsU3dhcFRva2VuR2V0BwAAAWkBCHdpdGhkcmF3AAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBDHdpdGhkcmF3Q2FsYwIFAWkAAAECdHgBBnZlcmlmeQAEE211bHRpU2lnbmVkQnlBZG1pbnMEEmFkbWluUHViS2V5MVNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MQABAAAEEmFkbWluUHViS2V5MlNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEFDGFkbWluUHViS2V5MgABAAAEEmFkbWluUHViS2V5M1NpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIFDGFkbWluUHViS2V5MwABAAAJAGcCCQBkAgkAZAIFEmFkbWluUHViS2V5MVNpZ25lZAUSYWRtaW5QdWJLZXkyU2lnbmVkBRJhZG1pblB1YktleTNTaWduZWQAAgQHJG1hdGNoMAUCdHgDCQABAgUHJG1hdGNoMAIXSW52b2tlU2NyaXB0VHJhbnNhY3Rpb24EA2ludgUHJG1hdGNoMAQTY2FsbFRha2VJbnRvQWNjb3VudAMJAAACCAUDaW52BGRBcHAFBHRoaXMJAAACCAUDaW52CGZ1bmN0aW9uAhl0YWtlSW50b0FjY291bnRFeHRyYUZ1bmRzBwQNc2lnbmVkQnlBZG1pbgMDAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkxBgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkyBgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkzBgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAURYWRtaW5QdWJLZXlJbnZva2UDAwUTY2FsbFRha2VJbnRvQWNjb3VudAUNc2lnbmVkQnlBZG1pbgcGBRNtdWx0aVNpZ25lZEJ5QWRtaW5zBRNtdWx0aVNpZ25lZEJ5QWRtaW5zvhr87A==", "height": 2411854, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EKSesAnP68WHkuQ7YVvgEicae27p2jtHiVbgJ3s3rZkg Next: DTkeuiaWyQGRdw5pq5R9CRxJB5qk4hxC1egj86hqmBDc Diff:
OldNewDifferences
99
1010 let d = "active_all_contracts"
1111
12-let e = "A_asset_id"
12+let e = "deprecated_"
1313
14-let f = "B_asset_id"
14+let f = "A_asset_id"
1515
16-let g = "A_asset_balance"
16+let g = "B_asset_id"
1717
18-let h = "B_asset_balance"
18+let h = "A_asset_balance"
1919
20-let i = "share_asset_id"
20+let i = "B_asset_balance"
2121
22-let j = "share_asset_supply"
22+let j = "share_asset_id"
2323
24-let k = "commission"
24+let k = "share_asset_supply"
2525
26-let l = "invariant"
26+let l = "commission"
2727
28-let m = "shutdown_cause"
28+let m = "invariant"
2929
30-let n = "staking_usdnnsbt_address"
30+let n = "shutdown_cause"
3131
32-let o = "staking_eurn_address"
32+let o = "staking_usdnnsbt_address"
3333
34-let p = "discounts"
34+let p = "staking_eurn_address"
3535
36-let q = "discount_values"
36+let q = "discounts"
3737
38-let r = "_SWOP_amount"
38+let r = "discount_values"
3939
40-let s = "_GSwop_amount"
40+let s = "_SWOP_amount"
4141
42-let t = "first_harvest"
42+let t = "_GSwop_amount"
4343
44-let u = "first_harvest_height"
44+let u = "first_harvest"
4545
46-let v = "share_limit_on_first_harvest"
46+let v = "first_harvest_height"
4747
48-let w = "base_period"
48+let w = "share_limit_on_first_harvest"
4949
50-let x = "period_length"
50+let x = "base_period"
5151
52-let y = "start_height"
52+let y = "period_length"
5353
54-let z = "dApp_threshold"
54+let z = "start_height"
5555
56-let A = "admin_pub_1"
56+let A = "dApp_threshold"
5757
58-let B = "admin_pub_2"
58+let B = "admin_pub_1"
5959
60-let C = "admin_pub_3"
60+let C = "admin_pub_2"
6161
62-let D = "admin_invoke_pub"
62+let D = "admin_pub_3"
6363
64-let E = "money_box_address"
64+let E = "admin_invoke_pub"
6565
66-let F = "governance_address"
66+let F = "money_box_address"
6767
68-let G = "farming_address"
68+let G = "governance_address"
6969
70-let H = "voting_address"
70+let H = "farming_address"
7171
72-let I = "usdn_asset_id"
72+let I = "voting_address"
7373
74-let J = "staking_assets"
74+let J = "usdn_asset_id"
7575
76-let K = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
76+let K = "staking_assets"
7777
78-func L (M) = {
79- let N = getString(K, M)
80- if ($isInstanceOf(N, "String"))
78+let L = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
79+
80+func M (N) = {
81+ let O = getString(L, N)
82+ if ($isInstanceOf(O, "String"))
8183 then {
82- let O = N
83- fromBase58String(O)
84+ let P = O
85+ fromBase58String(P)
8486 }
8587 else {
86- let P = N
87- throw((M + "is empty"))
88+ let Q = O
89+ throw((N + "is empty"))
8890 }
8991 }
9092
9193
92-let Q = L(A)
94+let R = M(B)
9395
94-let R = L(B)
96+let S = M(C)
9597
96-let S = L(C)
98+let T = M(D)
9799
98-let T = L(D)
100+let U = M(E)
99101
100-let U = Address(L(E))
102+let V = Address(M(F))
101103
102-let V = Address(L(F))
104+let W = Address(M(G))
103105
104-let W = Address(L(n))
106+let X = Address(M(o))
105107
106-let X = Address(L(H))
108+let Y = Address(M(I))
107109
108-let Y = Address(L(G))
110+let Z = Address(M(H))
109111
110-let Z = L(I)
112+let aa = M(J)
111113
112-let aa = getStringValue(K, J)
114+let ab = getStringValue(L, K)
113115
114-let ab = valueOrErrorMessage(getInteger(X, w), "Empty kBasePeriod")
116+let ac = valueOrErrorMessage(getInteger(Y, x), "Empty kBasePeriod")
115117
116-let ac = valueOrErrorMessage(getInteger(X, y), "Empty kStartHeight")
118+let ad = valueOrErrorMessage(getInteger(Y, z), "Empty kStartHeight")
117119
118-let ad = valueOrErrorMessage(getInteger(X, x), "Empty kPeriodLength")
120+let ae = valueOrErrorMessage(getInteger(Y, y), "Empty kPeriodLength")
119121
120-let ae = ((ab + ((height - ac) / ad)) + 3)
122+let af = ((ac + ((height - ad) / ae)) + 3)
121123
122-let af = getBooleanValue(this, c)
124+let ag = getBooleanValue(this, c)
123125
124-let ag = valueOrElse(getBoolean(K, d), true)
126+let ah = valueOrElse(getBoolean(L, d), true)
125127
126-let ah = getStringValue(this, e)
128+let ai = valueOrElse(getBoolean(L, (e + toString(this))), false)
127129
128-let ai = getStringValue(this, f)
130+let aj = getStringValue(this, f)
129131
130-let aj = if ((ah == "WAVES"))
132+let ak = getStringValue(this, g)
133+
134+let al = if ((aj == "WAVES"))
131135 then unit
132- else fromBase58String(ah)
136+ else fromBase58String(aj)
133137
134-let ak = if ((ai == "WAVES"))
138+let am = if ((ak == "WAVES"))
135139 then unit
136- else fromBase58String(ai)
140+ else fromBase58String(ak)
137141
138-let al = {
139- let N = aj
140- if ($isInstanceOf(N, "ByteVector"))
142+let an = {
143+ let O = al
144+ if ($isInstanceOf(O, "ByteVector"))
141145 then {
142- let am = N
143- value(assetInfo(am)).name
146+ let ao = O
147+ value(assetInfo(ao)).name
144148 }
145- else if ($isInstanceOf(N, "Unit"))
149+ else if ($isInstanceOf(O, "Unit"))
146150 then {
147- let an = N
151+ let ap = O
148152 "WAVES"
149153 }
150154 else throw("Match error")
151155 }
152156
153-let ao = {
154- let N = ak
155- if ($isInstanceOf(N, "ByteVector"))
157+let aq = {
158+ let O = am
159+ if ($isInstanceOf(O, "ByteVector"))
156160 then {
157- let am = N
158- value(assetInfo(am)).name
161+ let ao = O
162+ value(assetInfo(ao)).name
159163 }
160- else if ($isInstanceOf(N, "Unit"))
164+ else if ($isInstanceOf(O, "Unit"))
161165 then {
162- let an = N
166+ let ap = O
163167 "WAVES"
164168 }
165169 else throw("Match error")
166170 }
167171
168-let ap = getIntegerValue(this, g)
172+let ar = getIntegerValue(this, h)
169173
170-let aq = getIntegerValue(this, h)
174+let as = getIntegerValue(this, i)
171175
172-let ar = fromBase58String(getStringValue(this, i))
173-
174-let as = getIntegerValue(this, j)
175-
176-let at = getIntegerValue(this, l)
176+let at = fromBase58String(getStringValue(this, j))
177177
178178 let au = getIntegerValue(this, k)
179179
180-let av = fraction(au, 40, 100)
180+let av = getIntegerValue(this, m)
181181
182-let aw = 1000000
182+let aw = getIntegerValue(this, l)
183183
184-let ax = 1000
184+let ax = fraction(aw, 40, 100)
185185
186-let ay = 100000000
186+let ay = 1000000
187187
188-let az = 10000000000000000
188+let az = 1000
189189
190-let aA = 8
190+let aA = 100000000
191191
192-let aB = 80000000
192+let aB = 10000000000000000
193193
194-let aC = 120000000
194+let aC = 8
195195
196-let aD = 50
196+let aD = 60000000
197197
198-let aE = 2
198+let aE = 140000000
199199
200-let aF = 4600000000000000
200+let aF = 50
201201
202-func aG (aH) = {
203- let N = aH
204- if ($isInstanceOf(N, "ByteVector"))
202+let aG = 2
203+
204+let aH = 4600000000000000
205+
206+func aI (aJ) = {
207+ let O = aJ
208+ if ($isInstanceOf(O, "ByteVector"))
205209 then {
206- let am = N
207- assetBalance(this, am)
210+ let ao = O
211+ assetBalance(this, ao)
208212 }
209- else if ($isInstanceOf(N, "Unit"))
213+ else if ($isInstanceOf(O, "Unit"))
210214 then {
211- let an = N
215+ let ap = O
212216 wavesBalance(this).available
213217 }
214218 else throw("Match error")
215219 }
216220
217221
218-func aI (aH) = {
219- let aJ = {
220- let N = aH
221- if ($isInstanceOf(N, "ByteVector"))
222+func aK (aJ) = {
223+ let aL = {
224+ let O = aJ
225+ if ($isInstanceOf(O, "ByteVector"))
222226 then {
223- let aK = N
224- if ((aK == Z))
225- then getInteger(W, ((("rpd_balance_" + toBase58String(aK)) + "_") + toString(this)))
227+ let aM = O
228+ if ((aM == aa))
229+ then getInteger(X, ((("rpd_balance_" + toBase58String(aM)) + "_") + toString(this)))
226230 else 0
227231 }
228- else if ($isInstanceOf(N, "Unit"))
232+ else if ($isInstanceOf(O, "Unit"))
229233 then 0
230234 else throw("Match error")
231235 }
232- let N = aJ
233- if ($isInstanceOf(N, "Int"))
236+ let O = aL
237+ if ($isInstanceOf(O, "Int"))
234238 then {
235- let aL = N
236- aL
239+ let aN = O
240+ aN
237241 }
238242 else 0
239243 }
240244
241245
242-let aM = aI(aj)
246+let aO = aK(al)
243247
244-let aN = aI(ak)
248+let aP = aK(am)
245249
246-let aO = (ap - aM)
250+let aQ = (ar - aO)
247251
248-let aP = (aq - aN)
252+let aR = (as - aP)
249253
250-let aQ = (aG(aj) + aM)
254+let aS = (aI(al) + aO)
251255
252-let aR = (aG(ak) + aN)
256+let aT = (aI(am) + aP)
253257
254-let aS = if ((aQ >= ap))
255- then (aR >= aq)
258+let aU = if ((aS >= ar))
259+ then (aT >= as)
256260 else false
257261
258-func aT (aU,aV) = ((fraction(az, aU, aV) + fraction(az, aV, aU)) / 2)
262+func aV (aW,aX) = ((fraction(aB, aW, aX) + fraction(aB, aX, aW)) / 2)
259263
260264
261-func aW (aU,aV) = {
262- let aX = aT(aU, aV)
263- (fraction((aU + aV), az, pow(aX, aA, aD, aE, aA, CEILING)) + (2 * fraction(toInt(pow(fraction(toBigInt(aU), toBigInt(aV), toBigInt(ay)), 0, toBigInt(5), 1, (aA / 2), DOWN)), pow((aX - aF), aA, aD, aE, aA, DOWN), ay)))
265+func aY (aW,aX) = {
266+ let aZ = aV(aW, aX)
267+ (fraction((aW + aX), aB, pow(aZ, aC, aF, aG, aC, CEILING)) + (2 * fraction(toInt(pow(fraction(toBigInt(aW), toBigInt(aX), toBigInt(aA)), 0, toBigInt(5), 1, (aC / 2), DOWN)), pow((aZ - aH), aC, aF, aG, aC, DOWN), aA)))
264268 }
265269
266270
267-func aY (aZ,ba,bb,bc,bd,be,bf) = {
268- let bg = (az - ((az * 1) / 10000000))
269- let bh = (aZ - ba)
270- let aU = (bd + bb)
271- let aV = (be + bb)
272- func bi (bj,bk) = if ((bj._1 == -1))
271+func ba (bb,bc,bd,be,bf,bg,bh) = {
272+ let bi = (aB - ((aB * 1) / 10000000))
273+ let bj = (bb - bc)
274+ let aW = (bf + bd)
275+ let aX = (bg + bd)
276+ func bk (bl,bm) = if ((bl._1 == -1))
273277 then {
274- let bl = (aZ - (((bk * bh) / 3) / ax))
275- let bm = if ((bc == aj))
276- then aW(aU, (be - bl))
277- else aW((bd - bl), aV)
278- if ((bm > bf))
279- then $Tuple2(bl, bm)
278+ let bn = (bb - (((bm * bj) / 3) / az))
279+ let bo = if ((be == al))
280+ then aY(aW, (bg - bn))
281+ else aY((bf - bn), aX)
282+ if ((bo > bh))
283+ then $Tuple2(bn, bo)
280284 else $Tuple2(-1, 0)
281285 }
282- else bj
286+ else bl
283287
284- let bn = bi($Tuple2(-1, 0), 3000)
285- if ((0 > bn._1))
288+ let bp = bk($Tuple2(-1, 0), 3000)
289+ if ((0 > bp._1))
286290 then throw("Price is worse than minReceived")
287291 else {
288- let bo = if ((bc == aj))
289- then aW(aU, (be - aZ))
290- else if ((bc == ak))
291- then aW((bd - aZ), aV)
292+ let bq = if ((be == al))
293+ then aY(aW, (bg - bb))
294+ else if ((be == am))
295+ then aY((bf - bb), aX)
292296 else throw("Wrong asset in payment")
293- if ((bf > bo))
294- then if ((bg >= fraction(az, bf, bo)))
297+ if ((bh > bq))
298+ then if ((bi >= fraction(aB, bh, bq)))
295299 then throw("The requested price is too not profitable for user")
296300 else {
297- let bp = {
298- let bq = [25, 200, 500]
299- let br = size(bq)
300- let bs = $Tuple2(-1, 0)
301- func bt (bu,bv) = if ((bv >= br))
302- then bu
303- else bi(bu, bq[bv])
301+ let br = {
302+ let bs = [25, 200, 500]
303+ let bt = size(bs)
304+ let bu = $Tuple2(-1, 0)
305+ func bv (bw,bx) = if ((bx >= bt))
306+ then bw
307+ else bk(bw, bs[bx])
304308
305- func bw (bu,bv) = if ((bv >= br))
306- then bu
309+ func by (bw,bx) = if ((bx >= bt))
310+ then bw
307311 else throw("List size exceeds 3")
308312
309- bw(bt(bt(bt(bs, 0), 1), 2), 3)
313+ by(bv(bv(bv(bu, 0), 1), 2), 3)
310314 }
311- if ((0 > bp._1))
312- then bn._1
313- else bp._1
315+ if ((0 > br._1))
316+ then bp._1
317+ else br._1
314318 }
315319 else {
316- let bp = {
317- let bq = [-500, -200, -25]
318- let br = size(bq)
319- let bs = $Tuple2(-1, 0)
320- func bt (bu,bv) = if ((bv >= br))
321- then bu
322- else bi(bu, bq[bv])
320+ let br = {
321+ let bs = [-500, -200, -25]
322+ let bt = size(bs)
323+ let bu = $Tuple2(-1, 0)
324+ func bv (bw,bx) = if ((bx >= bt))
325+ then bw
326+ else bk(bw, bs[bx])
323327
324- func bw (bu,bv) = if ((bv >= br))
325- then bu
328+ func by (bw,bx) = if ((bx >= bt))
329+ then bw
326330 else throw("List size exceeds 3")
327331
328- bw(bt(bt(bt(bs, 0), 1), 2), 3)
332+ by(bv(bv(bv(bu, 0), 1), 2), 3)
329333 }
330- let bx = if ((0 > bp._1))
331- then $Tuple2(aZ, bo)
332- else bp
333- if ((bg >= fraction(az, bf, bx._2)))
334+ let bz = if ((0 > br._1))
335+ then $Tuple2(bb, bq)
336+ else br
337+ if ((bi >= fraction(aB, bh, bz._2)))
334338 then throw("The requested price is too not profitable for user")
335- else bx._1
339+ else bz._1
336340 }
337341 }
338342 }
339343
340344
341-func by (aH) = {
342- let N = aH
343- if ($isInstanceOf(N, "ByteVector"))
345+func bA (aJ) = {
346+ let O = aJ
347+ if ($isInstanceOf(O, "ByteVector"))
344348 then {
345- let am = N
346- let bz = toBase58String(am)
347- let bA = valueOrErrorMessage(assetInfo(am), (("Asset " + bz) + " doesn't exist"))
348- $Tuple3(bz, bA.name, bA.decimals)
349+ let ao = O
350+ let bB = toBase58String(ao)
351+ let bC = valueOrErrorMessage(assetInfo(ao), (("Asset " + bB) + " doesn't exist"))
352+ $Tuple3(bB, bC.name, bC.decimals)
349353 }
350- else if ($isInstanceOf(N, "Unit"))
354+ else if ($isInstanceOf(O, "Unit"))
351355 then {
352- let an = N
356+ let ap = O
353357 $Tuple3("WAVES", "WAVES", 8)
354358 }
355359 else throw("Match error")
356360 }
357361
358362
359-func bB (bC) = [BooleanEntry(c, false), StringEntry(m, bC)]
363+func bD (bE) = [BooleanEntry(c, false), StringEntry(n, bE)]
360364
361365
362-func bD () = throw("DApp is already active")
366+func bF () = throw("DApp is already active")
363367
364368
365-func bE () = if (if (af)
366- then ag
369+func bG () = if (if (ag)
370+ then ah
367371 else false)
368372 then unit
369373 else throw("DApp is inactive at this moment")
370374
371375
372-func bF (aL) = if (containsElement([Q, R, S], aL.callerPublicKey))
376+func bH () = if (!(ai))
377+ then unit
378+ else throw("Pool is deprecated. Only withdraw action allowed.")
379+
380+
381+func bI (aN) = if (containsElement([R, S, T], aN.callerPublicKey))
373382 then unit
374383 else throw("Only admin can call this function")
375384
376385
377-func bG (aL) = if ((this == aL.caller))
386+func bJ (aN) = if ((this == aN.caller))
378387 then unit
379388 else throw("Only contract itself can call this function")
380389
381390
382-func bH () = throw(((("Incorrect assets attached. Expected: " + ah) + " and ") + ai))
391+func bK () = throw(((("Incorrect assets attached. Expected: " + aj) + " and ") + ak))
383392
384393
385-func bI () = throw("One attached payment expected")
394+func bL () = throw("One attached payment expected")
386395
387396
388-func bJ () = bB(((((((((((((((("Suspicious state. Actual balances: " + toString(ap)) + " ") + al) + ", ") + toString(aq)) + " ") + ao) + ". State: ") + toString(aG(aj))) + " ") + al) + ", ") + toString(aG(ak))) + " ") + ao))
397+func bM () = bD(((((((((((((((("Suspicious state. Actual balances: " + toString(ar)) + " ") + an) + ", ") + toString(as)) + " ") + aq) + ". State: ") + toString(aI(al))) + " ") + an) + ", ") + toString(aI(am))) + " ") + aq))
389398
390399
391-func bK (bL,aH) = if (bL)
392- then $Tuple2("lockNeutrino", W)
393- else $Tuple2("unlockNeutrino", W)
400+func bN (bO,aJ) = if (bO)
401+ then $Tuple2("lockNeutrino", X)
402+ else $Tuple2("unlockNeutrino", X)
394403
395404
396-func bM (bL,bN,aH) = if (bL)
405+func bP (bO,bQ,aJ) = if (bO)
397406 then {
398- let bO = bK(bL, aH)
399- let bP = bO._1
400- let bQ = bO._2
401- $Tuple4(bP, bQ, nil, [AttachedPayment(aH, bN)])
407+ let bR = bN(bO, aJ)
408+ let bS = bR._1
409+ let bT = bR._2
410+ $Tuple4(bS, bT, nil, [AttachedPayment(aJ, bQ)])
402411 }
403412 else {
404- let bR = bK(bL, aH)
405- let bP = bR._1
406- let bQ = bR._2
407- $Tuple4(bP, bQ, [bN, toBase58String(aH)], nil)
413+ let bU = bN(bO, aJ)
414+ let bS = bU._1
415+ let bT = bU._2
416+ $Tuple4(bS, bT, [bQ, toBase58String(aJ)], nil)
408417 }
409418
410419
411-func bS (bT) = {
412- let bU = valueOrElse(getInteger(V, (toString(bT) + r)), 0)
413- let bV = valueOrElse(getInteger(V, (toString(bT) + s)), bU)
414- let bW = split(getStringValue(K, q), ",")
415- let bX = split(getStringValue(K, p), ",")
416- if (if ((bV >= parseIntValue(bW[0])))
417- then (parseIntValue(bW[1]) > bV)
420+func bV (bW) = {
421+ let bX = valueOrElse(getInteger(W, (toString(bW) + s)), 0)
422+ let bY = valueOrElse(getInteger(W, (toString(bW) + t)), bX)
423+ let bZ = split(getStringValue(L, r), ",")
424+ let ca = split(getStringValue(L, q), ",")
425+ if (if ((bY >= parseIntValue(bZ[0])))
426+ then (parseIntValue(bZ[1]) > bY)
418427 else false)
419- then (aw - parseIntValue(bX[0]))
420- else if (if ((bV >= parseIntValue(bW[1])))
421- then (parseIntValue(bW[2]) > bV)
428+ then (ay - parseIntValue(ca[0]))
429+ else if (if ((bY >= parseIntValue(bZ[1])))
430+ then (parseIntValue(bZ[2]) > bY)
422431 else false)
423- then (aw - parseIntValue(bX[1]))
424- else if (if ((bV >= parseIntValue(bW[2])))
425- then (parseIntValue(bW[3]) > bV)
432+ then (ay - parseIntValue(ca[1]))
433+ else if (if ((bY >= parseIntValue(bZ[2])))
434+ then (parseIntValue(bZ[3]) > bY)
426435 else false)
427- then (aw - parseIntValue(bX[2]))
428- else if (if ((bV >= parseIntValue(bW[3])))
429- then (parseIntValue(bW[4]) > bV)
436+ then (ay - parseIntValue(ca[2]))
437+ else if (if ((bY >= parseIntValue(bZ[3])))
438+ then (parseIntValue(bZ[4]) > bY)
430439 else false)
431- then (aw - parseIntValue(bX[3]))
432- else if ((bV >= parseIntValue(bW[4])))
433- then (aw - parseIntValue(bX[4]))
434- else aw
440+ then (ay - parseIntValue(ca[3]))
441+ else if ((bY >= parseIntValue(bZ[4])))
442+ then (ay - parseIntValue(ca[4]))
443+ else ay
435444 }
436445
437446
438-func bY (bZ,ca,cb) = {
439- let cc = getIntegerValue(this, z)
440- let cd = if (if ((cb == aj))
441- then (bZ > ca)
447+func cb (cc,cd,ce) = {
448+ let cf = getIntegerValue(this, A)
449+ let cg = if (if ((ce == al))
450+ then (cc > cd)
442451 else false)
443- then fraction(bZ, 1, ca, CEILING)
444- else if (if ((cb == ak))
445- then (ca > bZ)
452+ then fraction(cc, 1, cd, CEILING)
453+ else if (if ((ce == am))
454+ then (cd > cc)
446455 else false)
447- then fraction(ca, 1, bZ, CEILING)
456+ then fraction(cd, 1, cc, CEILING)
448457 else 0
449- if ((cd > cc))
458+ if ((cg > cf))
450459 then {
451- let ce = if ((cb == aj))
452- then $Tuple2(ao, al)
453- else $Tuple2(al, ao)
454- let cf = ce._1
455- let cg = ce._2
456- throw((((("Buying " + cf) + " is temporarily unavailable due to the ") + cg) + " depeg"))
460+ let ch = if ((ce == al))
461+ then $Tuple2(aq, an)
462+ else $Tuple2(an, aq)
463+ let ci = ch._1
464+ let cj = ch._2
465+ throw((((("Buying " + ci) + " is temporarily unavailable due to the ") + cj) + " depeg"))
457466 }
458467 else true
459468 }
460469
461470
462-func ch (aL,ci,cj) = {
463- let ck = aL.payments[0].assetId
464- let cl = aL.payments[1].assetId
465- let cm = fraction(ay, aL.payments[0].amount, ap)
466- let cn = fraction(ay, aL.payments[1].amount, aq)
467- let co = by(ck)
468- let cp = co._1
469- let cq = co._2
470- let cr = co._3
471- let cs = by(cl)
472- let ct = cs._1
473- let cu = cs._2
474- let cv = cs._3
475- let cw = if ((cn > cm))
471+func ck (aN,cl,cm) = {
472+ let cn = aN.payments[0].assetId
473+ let co = aN.payments[1].assetId
474+ let cp = fraction(aA, aN.payments[0].amount, ar)
475+ let cq = fraction(aA, aN.payments[1].amount, as)
476+ let cr = bA(cn)
477+ let cs = cr._1
478+ let ct = cr._2
479+ let cu = cr._3
480+ let cv = bA(co)
481+ let cw = cv._1
482+ let cx = cv._2
483+ let cy = cv._3
484+ let cz = if ((cq > cp))
476485 then {
477- let cx = fraction(aq, cm, ay, CEILING)
478- $Tuple5(aL.payments[0].amount, cx, (aL.payments[1].amount - cx), cl, cm)
486+ let cA = fraction(as, cp, aA, CEILING)
487+ $Tuple5(aN.payments[0].amount, cA, (aN.payments[1].amount - cA), co, cp)
479488 }
480489 else {
481- let cx = fraction(ap, cn, ay, CEILING)
482- $Tuple5(cx, aL.payments[1].amount, (aL.payments[0].amount - cx), ck, cn)
490+ let cA = fraction(ar, cq, aA, CEILING)
491+ $Tuple5(cA, aN.payments[1].amount, (aN.payments[0].amount - cA), cn, cq)
483492 }
484- let cy = cw._1
485- let cz = cw._2
486- let cA = cw._3
487- let cB = cw._4
488- let cC = cw._5
489- let cD = fraction(cC, as, ay)
490- if (if ((size(aL.payments) != 2))
491- then (size(aL.payments) != 3)
493+ let cB = cz._1
494+ let cC = cz._2
495+ let cD = cz._3
496+ let cE = cz._4
497+ let cF = cz._5
498+ let cG = fraction(cF, au, aA)
499+ if (if ((size(aN.payments) != 2))
500+ then (size(aN.payments) != 3)
492501 else false)
493502 then throw("Two or three payments expected")
494- else if (if ((ck != aj))
503+ else if (if ((cn != al))
495504 then true
496- else (cl != ak))
497- then bH()
498- else if ((cD == 0))
505+ else (co != am))
506+ then bK()
507+ else if ((cG == 0))
499508 then throw("Too small amount to replenish")
500- else if ((0 > cA))
509+ else if ((0 > cD))
501510 then throw("Change < 0")
502- else if (!(aS))
503- then ([ScriptTransfer(aL.caller, cy, ck), ScriptTransfer(aL.caller, cz, cl)] ++ bJ())
511+ else if (!(aU))
512+ then ([ScriptTransfer(aN.caller, cB, cn), ScriptTransfer(aN.caller, cC, co)] ++ bM())
504513 else {
505- let cE = if (contains(aa, cp))
506- then invoke(this, "stakeUnstake", [true, cy, cp], nil)
514+ let cH = if (contains(ab, cs))
515+ then invoke(this, "stakeUnstake", [true, cB, cs], nil)
507516 else 0
508- if ((cE == cE))
517+ if ((cH == cH))
509518 then {
510- let cF = if (contains(aa, ct))
511- then invoke(this, "stakeUnstake", [true, cz, ct], nil)
519+ let cI = if (contains(ab, cw))
520+ then invoke(this, "stakeUnstake", [true, cC, cw], nil)
512521 else 0
513- if ((cF == cF))
522+ if ((cI == cI))
514523 then {
515- let cG = [IntegerEntry(g, (ap + cy)), IntegerEntry(h, (aq + cz)), IntegerEntry(j, (as + cD)), IntegerEntry(l, aW((ap + cy), (aq + cz))), ScriptTransfer(aL.caller, cA, cB)]
516- if (ci)
524+ let cJ = [IntegerEntry(h, (ar + cB)), IntegerEntry(i, (as + cC)), IntegerEntry(k, (au + cG)), IntegerEntry(m, aY((ar + cB), (as + cC))), ScriptTransfer(aN.caller, cD, cE)]
525+ if (cl)
517526 then {
518- let cH = ([AttachedPayment(ar, cD)] ++ (if ((size(aL.payments) == 3))
519- then [AttachedPayment(if ((aL.payments[2].assetId == base58''))
527+ let cK = ([AttachedPayment(at, cG)] ++ (if ((size(aN.payments) == 3))
528+ then [AttachedPayment(if ((aN.payments[2].assetId == base58''))
520529 then unit
521- else aL.payments[2].assetId, aL.payments[2].amount)]
530+ else aN.payments[2].assetId, aN.payments[2].amount)]
522531 else nil))
523- let cI = invoke(this, "reissueShare", [cD], nil)
524- if ((cI == cI))
532+ let cL = invoke(this, "reissueShare", [cG], nil)
533+ if ((cL == cL))
525534 then {
526- let cJ = invoke(Y, "lockShareTokensFromPool", [aL.caller.bytes, toString(this), cj], cH)
527- if ((cJ == cJ))
528- then cG
535+ let cM = invoke(Z, "lockShareTokensFromPool", [aN.caller.bytes, toString(this), cm], cK)
536+ if ((cM == cM))
537+ then cJ
529538 else throw("Strict value is not equal to itself.")
530539 }
531540 else throw("Strict value is not equal to itself.")
532541 }
533- else (cG ++ [Reissue(ar, cD, true), ScriptTransfer(aL.caller, cD, ar)])
542+ else (cJ ++ [Reissue(at, cG, true), ScriptTransfer(aN.caller, cG, at)])
534543 }
535544 else throw("Strict value is not equal to itself.")
536545 }
539548 }
540549
541550
542-func cK (aL,cL,cM,ci,cj) = {
543- let cN = $Tuple2(aL.payments[0].amount, aL.payments[0].assetId)
544- let cO = cN._1
545- let cb = cN._2
546- let cP = by(cb)
547- let cQ = cP._1
548- let cR = cP._2
549- let cS = cP._3
550- let cT = 5000000
551- let cU = 50000000
552- let cV = if ((cU > cO))
551+func cN (aN,cO,cP,cl,cm) = {
552+ let cQ = $Tuple2(aN.payments[0].amount, aN.payments[0].assetId)
553+ let cR = cQ._1
554+ let ce = cQ._2
555+ let cS = bA(ce)
556+ let cT = cS._1
557+ let cU = cS._2
558+ let cV = cS._3
559+ let cW = 5000000
560+ let cX = 50000000
561+ let cY = if ((cX > cR))
553562 then 100000
554563 else 1
555- let cW = (ay - ((ay * cV) / 10000000))
556- let cX = (ay + ((ay * cV) / 10000000))
557- let cY = (ay - ((ay * 1) / 10000000))
558- if ((cT > cO))
559- then throw((((("Payment amount " + toString(cO)) + " does not exceed the minimum amount of ") + toString(cT)) + " tokens"))
560- else if (if ((size(aL.payments) != 1))
561- then (size(aL.payments) != 2)
564+ let cZ = (aA - ((aA * cY) / 10000000))
565+ let da = (aA + ((aA * cY) / 10000000))
566+ let db = (aA - ((aA * 1) / 10000000))
567+ if ((cW > cR))
568+ then throw((((("Payment amount " + toString(cR)) + " does not exceed the minimum amount of ") + toString(cW)) + " tokens"))
569+ else if (if ((size(aN.payments) != 1))
570+ then (size(aN.payments) != 2)
562571 else false)
563572 then throw("One or two payments expected")
564- else if (!(aS))
565- then ([ScriptTransfer(aL.caller, cO, cb)] ++ bJ())
566- else if (if ((cb != aj))
567- then (cb != ak)
573+ else if (!(aU))
574+ then ([ScriptTransfer(aN.caller, cR, ce)] ++ bM())
575+ else if (if ((ce != al))
576+ then (ce != am)
568577 else false)
569- then bH()
578+ then bK()
570579 else {
571- let cZ = if ((cb == aj))
572- then $Tuple6((cO - cL), cM, (ap + cL), (aq - cM), (ap + cO), aq)
573- else $Tuple6(cM, (cO - cL), (ap - cM), (aq + cL), ap, (aq + cO))
574- let da = cZ._1
575- let db = cZ._2
576- let dc = cZ._3
577- let dd = cZ._4
578- let bZ = cZ._5
579- let ca = cZ._6
580- let de = aW(dc, dd)
581- let df = (fraction(az, dc, dd) / fraction(ay, da, db))
582- if (if ((cY >= fraction(ay, at, de)))
580+ let dc = if ((ce == al))
581+ then $Tuple6((cR - cO), cP, (ar + cO), (as - cP), (ar + cR), as)
582+ else $Tuple6(cP, (cR - cO), (ar - cP), (as + cO), ar, (as + cR))
583+ let dd = dc._1
584+ let de = dc._2
585+ let df = dc._3
586+ let dg = dc._4
587+ let cc = dc._5
588+ let cd = dc._6
589+ let dh = aY(df, dg)
590+ let di = (fraction(aB, df, dg) / fraction(aA, dd, de))
591+ if (if ((db >= fraction(aA, av, dh)))
583592 then true
584- else (at > de))
593+ else (av > dh))
585594 then throw("Incorrect virtualSwapTokenPay or virtualSwapTokenGet value")
586- else if (if ((cW > df))
595+ else if (if ((cZ > di))
587596 then true
588- else (df > cX))
597+ else (di > da))
589598 then throw("Swap with virtualSwapTokenPay and virtualSwapTokenGet is possible, but ratio after virtual swap is incorrect")
590- else if (!(bY(bZ, ca, cb)))
599+ else if (!(cb(cc, cd, ce)))
591600 then throw()
592601 else {
593- let cm = fraction(da, ay, dc)
594- let cn = fraction(db, ay, dd)
595- let cD = fraction(min([cm, cn]), as, ay)
596- let dg = fraction(cD, (aw - (au / 2)), aw)
597- let dh = fraction(cD, (av / 2), aw)
598- let di = fraction(dh, ap, as)
599- let dj = fraction(dh, aq, as)
600- let dk = if ((cQ == ah))
601- then $Tuple3((cO - di), dj, ai)
602- else $Tuple3((cO - dj), di, ah)
603- let dl = dk._1
604- let dm = dk._2
605- let dn = dk._3
606- let cE = if (contains(aa, cQ))
607- then invoke(this, "stakeUnstake", [true, dl, cQ], nil)
602+ let cp = fraction(dd, aA, df)
603+ let cq = fraction(de, aA, dg)
604+ let cG = fraction(min([cp, cq]), au, aA)
605+ let dj = fraction(cG, (ay - (aw / 2)), ay)
606+ let dk = fraction(cG, (ax / 2), ay)
607+ let dl = fraction(dk, ar, au)
608+ let dm = fraction(dk, as, au)
609+ let dn = if ((cT == aj))
610+ then $Tuple3((cR - dl), dm, ak)
611+ else $Tuple3((cR - dm), dl, aj)
612+ let do = dn._1
613+ let dp = dn._2
614+ let dq = dn._3
615+ let cH = if (contains(ab, cT))
616+ then invoke(this, "stakeUnstake", [true, do, cT], nil)
608617 else 0
609- if ((cE == cE))
618+ if ((cH == cH))
610619 then {
611- let cF = if (contains(aa, dn))
612- then invoke(this, "stakeUnstake", [false, dm, dn], nil)
620+ let cI = if (contains(ab, dq))
621+ then invoke(this, "stakeUnstake", [false, dp, dq], nil)
613622 else 0
614- if ((cF == cF))
623+ if ((cI == cI))
615624 then {
616- let cG = [IntegerEntry(g, (bZ - di)), IntegerEntry(h, (ca - dj)), IntegerEntry(j, (as + dg)), IntegerEntry(l, aW((bZ - di), (ca - dj))), ScriptTransfer(U, di, aj), ScriptTransfer(U, dj, ak)]
617- if (ci)
625+ let cJ = [IntegerEntry(h, (cc - dl)), IntegerEntry(i, (cd - dm)), IntegerEntry(k, (au + dj)), IntegerEntry(m, aY((cc - dl), (cd - dm))), ScriptTransfer(V, dl, al), ScriptTransfer(V, dm, am)]
626+ if (cl)
618627 then {
619- let cH = ([AttachedPayment(ar, dg)] ++ (if ((size(aL.payments) == 2))
620- then [AttachedPayment(if ((aL.payments[1].assetId == base58''))
628+ let cK = ([AttachedPayment(at, dj)] ++ (if ((size(aN.payments) == 2))
629+ then [AttachedPayment(if ((aN.payments[1].assetId == base58''))
621630 then unit
622- else aL.payments[1].assetId, aL.payments[1].amount)]
631+ else aN.payments[1].assetId, aN.payments[1].amount)]
623632 else nil))
624- let cI = invoke(this, "reissueShare", [dg], nil)
625- if ((cI == cI))
633+ let cL = invoke(this, "reissueShare", [dj], nil)
634+ if ((cL == cL))
626635 then {
627- let cJ = invoke(Y, "lockShareTokensFromPool", [aL.caller.bytes, toString(this), cj], cH)
628- if ((cJ == cJ))
629- then cG
636+ let cM = invoke(Z, "lockShareTokensFromPool", [aN.caller.bytes, toString(this), cm], cK)
637+ if ((cM == cM))
638+ then cJ
630639 else throw("Strict value is not equal to itself.")
631640 }
632641 else throw("Strict value is not equal to itself.")
633642 }
634- else (cG ++ [Reissue(ar, dg, true), ScriptTransfer(aL.caller, dg, ar)])
643+ else (cJ ++ [Reissue(at, dj, true), ScriptTransfer(aN.caller, dj, at)])
635644 }
636645 else throw("Strict value is not equal to itself.")
637646 }
641650 }
642651
643652
644-func do (aL,dp) = {
645- let dq = if ((size(aL.payments) == 1))
646- then if ((aL.payments[0].assetId != ar))
647- then throw(("Incorrect asset attached. Expected: " + toBase58String(ar)))
648- else $Tuple2(aL.payments[0].amount, aL.payments[0].assetId)
649- else $Tuple2(0, ar)
650- let cO = dq._1
651- let cb = dq._2
652- if (!(aS))
653- then ([ScriptTransfer(aL.caller, cO, cb)] ++ bJ())
653+func dr (aN,ds) = {
654+ let dt = if ((size(aN.payments) == 1))
655+ then if ((aN.payments[0].assetId != at))
656+ then throw(("Incorrect asset attached. Expected: " + toBase58String(at)))
657+ else $Tuple2(aN.payments[0].amount, aN.payments[0].assetId)
658+ else $Tuple2(0, at)
659+ let cR = dt._1
660+ let ce = dt._2
661+ if (!(aU))
662+ then ([ScriptTransfer(aN.caller, cR, ce)] ++ bM())
654663 else {
655- let dr = if ((dp > 0))
656- then invoke(Y, "withdrawShareTokensFromPool", [aL.caller.bytes, toString(this), dp], nil)
664+ let du = if ((ds > 0))
665+ then invoke(Z, "withdrawShareTokensFromPool", [aN.caller.bytes, toString(this), ds], nil)
657666 else 0
658- if ((dr == dr))
667+ if ((du == du))
659668 then {
660- let ds = (cO + dp)
661- let dt = fraction(ds, ap, as)
662- let du = fraction(ds, aq, as)
663- let dv = aW((ap - dt), (aq - du))
664- let cE = if (contains(aa, ah))
665- then invoke(this, "stakeUnstake", [false, dt, ah], nil)
669+ let dv = (cR + ds)
670+ let dw = fraction(dv, ar, au)
671+ let dx = fraction(dv, as, au)
672+ let dy = aY((ar - dw), (as - dx))
673+ let cH = if (contains(ab, aj))
674+ then invoke(this, "stakeUnstake", [false, dw, aj], nil)
666675 else 0
667- if ((cE == cE))
676+ if ((cH == cH))
668677 then {
669- let cF = if (contains(aa, ai))
670- then invoke(this, "stakeUnstake", [false, du, ai], nil)
678+ let cI = if (contains(ab, ak))
679+ then invoke(this, "stakeUnstake", [false, dx, ak], nil)
671680 else 0
672- if ((cF == cF))
673- then [IntegerEntry(g, (ap - dt)), IntegerEntry(h, (aq - du)), IntegerEntry(j, (as - ds)), IntegerEntry(l, dv), Burn(ar, ds), ScriptTransfer(aL.caller, dt, aj), ScriptTransfer(aL.caller, du, ak)]
681+ if ((cI == cI))
682+ then [IntegerEntry(h, (ar - dw)), IntegerEntry(i, (as - dx)), IntegerEntry(k, (au - dv)), IntegerEntry(m, dy), Burn(at, dv), ScriptTransfer(aN.caller, dw, al), ScriptTransfer(aN.caller, dx, am)]
674683 else throw("Strict value is not equal to itself.")
675684 }
676685 else throw("Strict value is not equal to itself.")
680689 }
681690
682691
683-@Callable(aL)
684-func init (dw) = {
685- let dx = $Tuple2(aL.payments[0].amount, aL.payments[0].assetId)
686- let cy = dx._1
687- let ck = dx._2
688- let dy = $Tuple2(aL.payments[1].amount, aL.payments[1].assetId)
689- let cz = dy._1
690- let cl = dy._2
691- let dz = by(ck)
692- let cp = dz._1
693- let cq = dz._2
694- let cr = dz._3
695- let dA = by(cl)
696- let ct = dA._1
697- let cu = dA._2
698- let cv = dA._3
692+@Callable(aN)
693+func init (dz) = {
694+ let dA = $Tuple2(aN.payments[0].amount, aN.payments[0].assetId)
695+ let cB = dA._1
696+ let cn = dA._2
697+ let dB = $Tuple2(aN.payments[1].amount, aN.payments[1].assetId)
698+ let cC = dB._1
699+ let co = dB._2
700+ let dC = bA(cn)
701+ let cs = dC._1
702+ let ct = dC._2
703+ let cu = dC._3
704+ let dD = bA(co)
705+ let cw = dD._1
706+ let cx = dD._2
707+ let cy = dD._3
699708 if (isDefined(getBoolean(this, c)))
700- then bD()
701- else if ((ck == cl))
709+ then bF()
710+ else if ((cn == co))
702711 then throw("Assets must be different")
703712 else {
704- let dB = ((("s" + take(cq, 7)) + "_") + take(cu, 7))
705- let dC = ((((("ShareToken of SwopFi protocol for " + cq) + " and ") + cu) + " at address ") + toString(this))
706- let dD = ((cr + cv) / 2)
707- let dE = fraction(pow(cy, cr, 5, 1, cr, DOWN), pow(cz, cv, 5, 1, cv, DOWN), pow(10, 0, dD, 0, 0, DOWN))
708- let dF = Issue(dB, dC, dE, dD, true)
709- let dG = calculateAssetId(dF)
710- let dv = aW(cy, cz)
711- let cE = if (contains(aa, cp))
712- then invoke(this, "stakeUnstake", [true, cy, cp], nil)
713+ let dE = ((("s" + take(ct, 7)) + "_") + take(cx, 7))
714+ let dF = ((((("ShareToken of SwopFi protocol for " + ct) + " and ") + cx) + " at address ") + toString(this))
715+ let dG = ((cu + cy) / 2)
716+ let dH = fraction(pow(cB, cu, 5, 1, cu, DOWN), pow(cC, cy, 5, 1, cy, DOWN), pow(10, 0, dG, 0, 0, DOWN))
717+ let dI = Issue(dE, dF, dH, dG, true)
718+ let dJ = calculateAssetId(dI)
719+ let dy = aY(cB, cC)
720+ let cH = if (contains(ab, cs))
721+ then invoke(this, "stakeUnstake", [true, cB, cs], nil)
713722 else 0
714- if ((cE == cE))
723+ if ((cH == cH))
715724 then {
716- let cF = if (contains(aa, ct))
717- then invoke(this, "stakeUnstake", [true, cz, ct], nil)
725+ let cI = if (contains(ab, cw))
726+ then invoke(this, "stakeUnstake", [true, cC, cw], nil)
718727 else 0
719- if ((cF == cF))
728+ if ((cI == cI))
720729 then {
721- let dH = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(e, cp), StringEntry(f, ct), IntegerEntry(g, cy), IntegerEntry(h, cz), IntegerEntry(l, dv), IntegerEntry(k, getIntegerValue(K, "base_fee_flat")), IntegerEntry(z, 3), dF, StringEntry(i, toBase58String(dG)), IntegerEntry(j, dE), ScriptTransfer(aL.caller, dE, dG)]
722- if (dw)
723- then (dH ++ [BooleanEntry(t, dw), IntegerEntry(u, (ac + (ae * ad)))])
724- else dH
730+ let dK = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(f, cs), StringEntry(g, cw), IntegerEntry(h, cB), IntegerEntry(i, cC), IntegerEntry(m, dy), IntegerEntry(l, getIntegerValue(L, "base_fee_flat")), IntegerEntry(A, 3), dI, StringEntry(j, toBase58String(dJ)), IntegerEntry(k, dH), ScriptTransfer(aN.caller, dH, dJ)]
731+ if (dz)
732+ then (dK ++ [BooleanEntry(u, dz), IntegerEntry(v, (ad + (af * ae)))])
733+ else dK
725734 }
726735 else throw("Strict value is not equal to itself.")
727736 }
731740
732741
733742
734-@Callable(aL)
735-func replenishWithTwoTokensV2 (ci,cj) = valueOrElse(bE(), ch(aL, ci, cj))
743+@Callable(aN)
744+func replenishWithTwoTokensV2 (cl,cm) = valueOrElse(bG(), valueOrElse(bH(), ck(aN, cl, cm)))
736745
737746
738747
739-@Callable(aL)
740-func replenishWithOneTokenV2 (cL,cM,ci,cj) = valueOrElse(bE(), cK(aL, cL, cM, ci, cj))
748+@Callable(aN)
749+func replenishWithOneTokenV2 (cO,cP,cl,cm) = valueOrElse(bG(), valueOrElse(bH(), cN(aN, cO, cP, cl, cm)))
741750
742751
743752
744-@Callable(aL)
745-func withdrawV2 (dp) = valueOrElse(bE(), do(aL, dp))
753+@Callable(aN)
754+func withdrawV2 (ds) = valueOrElse(bG(), dr(aN, ds))
746755
747756
748757
749-@Callable(aL)
750-func withdrawOneToken (dp,dI,dJ,dK) = valueOrElse(bE(), {
751- let dL = if ((size(aL.payments) == 1))
752- then if ((aL.payments[0].assetId != ar))
753- then throw(("Incorrect asset attached. Expected: " + toBase58String(ar)))
754- else $Tuple2(aL.payments[0].amount, aL.payments[0].assetId)
755- else $Tuple2(0, ar)
756- let cO = dL._1
757- let cb = dL._2
758- let ds = (cO + dp)
759- if (if ((dI != ah))
760- then (dI != ai)
758+@Callable(aN)
759+func withdrawOneToken (ds,dL,dM,dN) = valueOrElse(bG(), valueOrElse(bH(), {
760+ let dO = if ((size(aN.payments) == 1))
761+ then if ((aN.payments[0].assetId != at))
762+ then throw(("Incorrect asset attached. Expected: " + toBase58String(at)))
763+ else $Tuple2(aN.payments[0].amount, aN.payments[0].assetId)
764+ else $Tuple2(0, at)
765+ let cR = dO._1
766+ let ce = dO._2
767+ let dv = (cR + ds)
768+ if (if ((dL != aj))
769+ then (dL != ak)
761770 else false)
762771 then throw("Incorrect withdraw asset")
763- else if ((0 >= ds))
772+ else if ((0 >= dv))
764773 then throw("withdraw amount must be grater than 0")
765- else if (!(aS))
766- then ([ScriptTransfer(aL.caller, cO, cb)] ++ bJ())
774+ else if (!(aU))
775+ then ([ScriptTransfer(aN.caller, cR, ce)] ++ bM())
767776 else {
768- let dr = if ((dp > 0))
769- then invoke(Y, "withdrawShareTokensFromPool", [aL.caller.bytes, toString(this), dp], nil)
777+ let du = if ((ds > 0))
778+ then invoke(Z, "withdrawShareTokensFromPool", [aN.caller.bytes, toString(this), ds], nil)
770779 else 0
771- if ((dr == dr))
780+ if ((du == du))
772781 then {
773- let dt = fraction(ds, ap, as)
774- let du = fraction(ds, aq, as)
775- let dM = (ap - dt)
776- let dN = (aq - du)
777- let dO = bS(aL.originCaller)
778- let dP = if ((dI == ah))
779- then aY(dJ, dK, du, ak, dM, dN, aW(dM, dN))
780- else aY(dJ, dK, dt, aj, dM, dN, aW(dM, dN))
781- let dQ = fraction(dP, fraction(av, dO, aw, CEILING), aw)
782- let dR = fraction(dP, (aw - fraction(au, dO, aw, CEILING)), aw)
783- let dS = if ((dI == ah))
784- then $Tuple4((dt + dR), (((ap - dt) - dR) - dQ), aq, ak)
785- else $Tuple4((du + dR), ap, (((aq - du) - dR) - dQ), aj)
786- let dT = dS._1
787- let dU = dS._2
788- let dV = dS._3
789- let dW = dS._4
790- if (!(bY(dU, dV, dW)))
782+ let dw = fraction(dv, ar, au)
783+ let dx = fraction(dv, as, au)
784+ let dP = (ar - dw)
785+ let dQ = (as - dx)
786+ let dR = bV(aN.originCaller)
787+ let dS = if ((dL == aj))
788+ then ba(dM, dN, dx, am, dP, dQ, aY(dP, dQ))
789+ else ba(dM, dN, dw, al, dP, dQ, aY(dP, dQ))
790+ let dT = fraction(dS, fraction(ax, dR, ay, CEILING), ay)
791+ let dU = fraction(dS, (ay - fraction(aw, dR, ay, CEILING)), ay)
792+ let dV = if ((dL == aj))
793+ then $Tuple4((dw + dU), (((ar - dw) - dU) - dT), as, am)
794+ else $Tuple4((dx + dU), ar, (((as - dx) - dU) - dT), al)
795+ let dW = dV._1
796+ let dX = dV._2
797+ let dY = dV._3
798+ let dZ = dV._4
799+ if (!(cb(dX, dY, dZ)))
791800 then throw()
792801 else {
793- let dv = aW(dU, dV)
794- let cE = if (contains(aa, dI))
795- then invoke(this, "stakeUnstake", [false, (dT + dQ), dI], nil)
802+ let dy = aY(dX, dY)
803+ let cH = if (contains(ab, dL))
804+ then invoke(this, "stakeUnstake", [false, (dW + dT), dL], nil)
796805 else 0
797- if ((cE == cE))
798- then [IntegerEntry(g, dU), IntegerEntry(h, dV), IntegerEntry(j, (as - ds)), IntegerEntry(l, dv), Burn(ar, ds), ScriptTransfer(aL.caller, dT, fromBase58String(dI)), ScriptTransfer(U, dQ, fromBase58String(dI))]
806+ if ((cH == cH))
807+ then [IntegerEntry(h, dX), IntegerEntry(i, dY), IntegerEntry(k, (au - dv)), IntegerEntry(m, dy), Burn(at, dv), ScriptTransfer(aN.caller, dW, fromBase58String(dL)), ScriptTransfer(V, dT, fromBase58String(dL))]
799808 else throw("Strict value is not equal to itself.")
800809 }
801810 }
802811 else throw("Strict value is not equal to itself.")
803812 }
804- })
813+ }))
805814
806815
807816
808-@Callable(aL)
809-func exchange (dJ,dK) = valueOrElse(bE(), {
810- let dX = $Tuple2(aL.payments[0].amount, aL.payments[0].assetId)
811- let cO = dX._1
812- let cb = dX._2
813- if ((0 >= dJ))
814- then throw(("Estimated amount must be positive. Actual: " + toString(dJ)))
815- else if ((dK > dJ))
817+@Callable(aN)
818+func exchange (dM,dN) = valueOrElse(bG(), valueOrElse(bH(), {
819+ let ea = $Tuple2(aN.payments[0].amount, aN.payments[0].assetId)
820+ let cR = ea._1
821+ let ce = ea._2
822+ if ((0 >= dM))
823+ then throw(("Estimated amount must be positive. Actual: " + toString(dM)))
824+ else if ((dN > dM))
816825 then throw("Minimal amount can't be greater than estimated.")
817- else if ((size(aL.payments) != 1))
818- then bI()
819- else if (!(aS))
820- then ([ScriptTransfer(aL.caller, cO, cb)] ++ bJ())
821- else if (if ((cb != aj))
822- then (cb != ak)
826+ else if ((size(aN.payments) != 1))
827+ then bL()
828+ else if (!(aU))
829+ then ([ScriptTransfer(aN.caller, cR, ce)] ++ bM())
830+ else if (if ((ce != al))
831+ then (ce != am)
823832 else false)
824- then bH()
825- else if ((10000000 > cO))
833+ then bK()
834+ else if ((10000000 > cR))
826835 then throw("Only swap of 10.000000 or more tokens is allowed")
827- else if (if ((aB > fraction(ay, dK, cO)))
836+ else if (if ((aD > fraction(aA, dN, cR)))
828837 then true
829- else (fraction(ay, dJ, cO) > aC))
838+ else (fraction(aA, dM, cR) > aE))
830839 then throw("Incorrect args and pmt ratio")
831840 else {
832- let dY = if ((cb == aj))
833- then ak
834- else aj
835- let bN = aY(dJ, dK, cO, cb, ap, aq, at)
836- let dO = bS(aL.originCaller)
837- let dZ = fraction(bN, fraction(av, dO, aw, CEILING), aw)
838- let ea = fraction(bN, (aw - fraction(au, dO, aw, CEILING)), aw)
839- let eb = if ((cb == aj))
840- then $Tuple2((ap + cO), ((aq - ea) - dZ))
841- else $Tuple2(((ap - ea) - dZ), (aq + cO))
842- let bZ = eb._1
843- let ca = eb._2
844- if (!(bY(bZ, ca, cb)))
841+ let eb = if ((ce == al))
842+ then am
843+ else al
844+ let bQ = ba(dM, dN, cR, ce, ar, as, av)
845+ let dR = bV(aN.originCaller)
846+ let ec = fraction(bQ, fraction(ax, dR, ay, CEILING), ay)
847+ let ed = fraction(bQ, (ay - fraction(aw, dR, ay, CEILING)), ay)
848+ let ee = if ((ce == al))
849+ then $Tuple2((ar + cR), ((as - ed) - ec))
850+ else $Tuple2(((ar - ed) - ec), (as + cR))
851+ let cc = ee._1
852+ let cd = ee._2
853+ if (!(cb(cc, cd, ce)))
845854 then throw()
846855 else {
847- let ec = by(cb)
848- let cQ = ec._1
849- let cR = ec._2
850- let cS = ec._3
851- let ed = by(dY)
852- let ee = ed._1
853- let ef = ed._2
854- let eg = ed._3
855- let cE = if (contains(aa, cQ))
856- then invoke(this, "stakeUnstake", [true, cO, cQ], nil)
856+ let ef = bA(ce)
857+ let cT = ef._1
858+ let cU = ef._2
859+ let cV = ef._3
860+ let eg = bA(eb)
861+ let eh = eg._1
862+ let ei = eg._2
863+ let ej = eg._3
864+ let cH = if (contains(ab, cT))
865+ then invoke(this, "stakeUnstake", [true, cR, cT], nil)
857866 else 0
858- if ((cE == cE))
867+ if ((cH == cH))
859868 then {
860- let cF = if (contains(aa, ee))
861- then invoke(this, "stakeUnstake", [false, (ea + dZ), ee], nil)
869+ let cI = if (contains(ab, eh))
870+ then invoke(this, "stakeUnstake", [false, (ed + ec), eh], nil)
862871 else 0
863- if ((cF == cF))
864- then $Tuple2([IntegerEntry(g, bZ), IntegerEntry(h, ca), IntegerEntry(l, aW(bZ, ca)), ScriptTransfer(aL.caller, ea, dY), ScriptTransfer(U, dZ, dY)], [ea, dY])
872+ if ((cI == cI))
873+ then $Tuple2([IntegerEntry(h, cc), IntegerEntry(i, cd), IntegerEntry(m, aY(cc, cd)), ScriptTransfer(aN.caller, ed, eb), ScriptTransfer(V, ec, eb)], [ed, eb])
865874 else throw("Strict value is not equal to itself.")
866875 }
867876 else throw("Strict value is not equal to itself.")
868877 }
869878 }
870- })
879+ }))
871880
872881
873882
874-@Callable(eh)
875-func reissueShare (bN) = valueOrElse(bG(eh), [Reissue(ar, bN, true)])
883+@Callable(ek)
884+func reissueShare (bQ) = valueOrElse(bJ(ek), [Reissue(at, bQ, true)])
876885
877886
878887
879-@Callable(aL)
880-func shutdown () = valueOrElse(bF(aL), if (!(af))
881- then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, m), "the cause wasn't specified")))
882- else bB("Paused by admin"))
888+@Callable(aN)
889+func shutdown () = valueOrElse(bI(aN), if (!(ag))
890+ then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, n), "the cause wasn't specified")))
891+ else bD("Paused by admin"))
883892
884893
885894
886-@Callable(aL)
887-func activate () = valueOrElse(bF(aL), if (af)
888- then bD()
889- else [BooleanEntry(c, true), DeleteEntry(m)])
895+@Callable(aN)
896+func activate () = valueOrElse(bI(aN), if (ag)
897+ then bF()
898+ else [BooleanEntry(c, true), DeleteEntry(n)])
890899
891900
892901
893-@Callable(aL)
894-func takeIntoAccountExtraFunds () = valueOrElse(bE(), {
895- let ei = if (if ((aj == Z))
902+@Callable(aN)
903+func takeIntoAccountExtraFunds () = valueOrElse(bG(), {
904+ let el = if (if ((al == aa))
896905 then true
897- else (ak == Z))
898- then invoke(W, "claimRewards", nil, nil)
906+ else (am == aa))
907+ then invoke(X, "claimRewards", nil, nil)
899908 else 0
900- if ((ei == ei))
909+ if ((el == el))
901910 then {
902- let ej = (aQ - ap)
903- let ek = (aR - aq)
904- let de = aW((ap + ej), (aq + ek))
905- if ((aL.caller != U))
911+ let em = (aS - ar)
912+ let en = (aT - as)
913+ let dh = aY((ar + em), (as + en))
914+ if ((aN.caller != V))
906915 then throw("Only the money box can call this function")
907- else if (if ((0 > ej))
916+ else if (if ((0 > em))
908917 then true
909- else (0 > ek))
910- then bB("Enroll amount negative")
911- else if (if ((ej == 0))
912- then (ek == 0)
918+ else (0 > en))
919+ then bD("Enroll amount negative")
920+ else if (if ((em == 0))
921+ then (en == 0)
913922 else false)
914923 then throw("No money to take")
915924 else {
916- let cE = if (if (contains(aa, ah))
917- then (ej > 0)
925+ let cH = if (if (contains(ab, aj))
926+ then (em > 0)
918927 else false)
919- then invoke(this, "stakeUnstake", [true, ej, ah], nil)
928+ then invoke(this, "stakeUnstake", [true, em, aj], nil)
920929 else 0
921- if ((cE == cE))
930+ if ((cH == cH))
922931 then {
923- let cF = if (if (contains(aa, ai))
924- then (ek > 0)
932+ let cI = if (if (contains(ab, ak))
933+ then (en > 0)
925934 else false)
926- then invoke(this, "stakeUnstake", [true, ek, ai], nil)
935+ then invoke(this, "stakeUnstake", [true, en, ak], nil)
927936 else 0
928- if ((cF == cF))
929- then [IntegerEntry(l, de), IntegerEntry(g, (ap + ej)), IntegerEntry(h, (aq + ek))]
937+ if ((cI == cI))
938+ then [IntegerEntry(m, dh), IntegerEntry(h, (ar + em)), IntegerEntry(i, (as + en))]
930939 else throw("Strict value is not equal to itself.")
931940 }
932941 else throw("Strict value is not equal to itself.")
937946
938947
939948
940-@Callable(aL)
941-func keepLimitForFirstHarvest (el) = valueOrElse(bE(), valueOrElse(bF(aL), [IntegerEntry(v, el)]))
949+@Callable(aN)
950+func keepLimitForFirstHarvest (eo) = valueOrElse(bG(), valueOrElse(bI(aN), [IntegerEntry(w, eo)]))
942951
943952
944953
945-@Callable(aL)
946-func stakeUnstake (bL,bN,em) = if ((aL.caller != this))
954+@Callable(aN)
955+func stakeUnstake (bO,bQ,ep) = if ((aN.caller != this))
947956 then throw("Only contract itself can invoke this function")
948957 else {
949- let en = bM(bL, bN, fromBase58String(em))
950- let bP = en._1
951- let eo = en._2
952- let ep = en._3
953- let eq = en._4
954- let er = invoke(eo, bP, ep, eq)
955- if ((er == er))
958+ let eq = bP(bO, bQ, fromBase58String(ep))
959+ let bS = eq._1
960+ let er = eq._2
961+ let es = eq._3
962+ let et = eq._4
963+ let eu = invoke(er, bS, es, et)
964+ if ((eu == eu))
956965 then nil
957966 else throw("Strict value is not equal to itself.")
958967 }
959968
960969
961970
962-@Callable(aL)
963-func replenishWithTwoTokens () = valueOrElse(bE(), ch(aL, false, 0))
971+@Callable(aN)
972+func replenishWithTwoTokens () = valueOrElse(bG(), valueOrElse(bH(), ck(aN, false, 0)))
964973
965974
966975
967-@Callable(aL)
968-func replenishWithOneToken (cL,cM) = valueOrElse(bE(), cK(aL, cL, cM, false, 0))
976+@Callable(aN)
977+func replenishWithOneToken (cO,cP) = valueOrElse(bG(), valueOrElse(bH(), cN(aN, cO, cP, false, 0)))
969978
970979
971980
972-@Callable(aL)
973-func withdraw () = valueOrElse(bE(), do(aL, 0))
981+@Callable(aN)
982+func withdraw () = valueOrElse(bG(), dr(aN, 0))
974983
975984
976-@Verifier(es)
977-func et () = {
978- let eu = {
979- let ev = if (sigVerify(es.bodyBytes, es.proofs[0], Q))
985+@Verifier(ev)
986+func ew () = {
987+ let ex = {
988+ let ey = if (sigVerify(ev.bodyBytes, ev.proofs[0], R))
980989 then 1
981990 else 0
982- let ew = if (sigVerify(es.bodyBytes, es.proofs[1], R))
991+ let ez = if (sigVerify(ev.bodyBytes, ev.proofs[1], S))
983992 then 1
984993 else 0
985- let ex = if (sigVerify(es.bodyBytes, es.proofs[2], S))
994+ let eA = if (sigVerify(ev.bodyBytes, ev.proofs[2], T))
986995 then 1
987996 else 0
988- (((ev + ew) + ex) >= 2)
997+ (((ey + ez) + eA) >= 2)
989998 }
990- let N = es
991- if ($isInstanceOf(N, "InvokeScriptTransaction"))
999+ let O = ev
1000+ if ($isInstanceOf(O, "InvokeScriptTransaction"))
9921001 then {
993- let er = N
994- let ey = if ((er.dApp == this))
995- then (er.function == "takeIntoAccountExtraFunds")
1002+ let eu = O
1003+ let eB = if ((eu.dApp == this))
1004+ then (eu.function == "takeIntoAccountExtraFunds")
9961005 else false
997- let ez = if (if (if (sigVerify(es.bodyBytes, es.proofs[0], Q))
1006+ let eC = if (if (if (sigVerify(ev.bodyBytes, ev.proofs[0], R))
9981007 then true
999- else sigVerify(es.bodyBytes, es.proofs[0], R))
1008+ else sigVerify(ev.bodyBytes, ev.proofs[0], S))
10001009 then true
1001- else sigVerify(es.bodyBytes, es.proofs[0], S))
1010+ else sigVerify(ev.bodyBytes, ev.proofs[0], T))
10021011 then true
1003- else sigVerify(es.bodyBytes, es.proofs[0], T)
1004- if (if (ey)
1005- then ez
1012+ else sigVerify(ev.bodyBytes, ev.proofs[0], U)
1013+ if (if (eB)
1014+ then eC
10061015 else false)
10071016 then true
1008- else eu
1017+ else ex
10091018 }
1010- else eu
1019+ else ex
10111020 }
10121021
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
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 = "active_all_contracts"
1111
12-let e = "A_asset_id"
12+let e = "deprecated_"
1313
14-let f = "B_asset_id"
14+let f = "A_asset_id"
1515
16-let g = "A_asset_balance"
16+let g = "B_asset_id"
1717
18-let h = "B_asset_balance"
18+let h = "A_asset_balance"
1919
20-let i = "share_asset_id"
20+let i = "B_asset_balance"
2121
22-let j = "share_asset_supply"
22+let j = "share_asset_id"
2323
24-let k = "commission"
24+let k = "share_asset_supply"
2525
26-let l = "invariant"
26+let l = "commission"
2727
28-let m = "shutdown_cause"
28+let m = "invariant"
2929
30-let n = "staking_usdnnsbt_address"
30+let n = "shutdown_cause"
3131
32-let o = "staking_eurn_address"
32+let o = "staking_usdnnsbt_address"
3333
34-let p = "discounts"
34+let p = "staking_eurn_address"
3535
36-let q = "discount_values"
36+let q = "discounts"
3737
38-let r = "_SWOP_amount"
38+let r = "discount_values"
3939
40-let s = "_GSwop_amount"
40+let s = "_SWOP_amount"
4141
42-let t = "first_harvest"
42+let t = "_GSwop_amount"
4343
44-let u = "first_harvest_height"
44+let u = "first_harvest"
4545
46-let v = "share_limit_on_first_harvest"
46+let v = "first_harvest_height"
4747
48-let w = "base_period"
48+let w = "share_limit_on_first_harvest"
4949
50-let x = "period_length"
50+let x = "base_period"
5151
52-let y = "start_height"
52+let y = "period_length"
5353
54-let z = "dApp_threshold"
54+let z = "start_height"
5555
56-let A = "admin_pub_1"
56+let A = "dApp_threshold"
5757
58-let B = "admin_pub_2"
58+let B = "admin_pub_1"
5959
60-let C = "admin_pub_3"
60+let C = "admin_pub_2"
6161
62-let D = "admin_invoke_pub"
62+let D = "admin_pub_3"
6363
64-let E = "money_box_address"
64+let E = "admin_invoke_pub"
6565
66-let F = "governance_address"
66+let F = "money_box_address"
6767
68-let G = "farming_address"
68+let G = "governance_address"
6969
70-let H = "voting_address"
70+let H = "farming_address"
7171
72-let I = "usdn_asset_id"
72+let I = "voting_address"
7373
74-let J = "staking_assets"
74+let J = "usdn_asset_id"
7575
76-let K = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
76+let K = "staking_assets"
7777
78-func L (M) = {
79- let N = getString(K, M)
80- if ($isInstanceOf(N, "String"))
78+let L = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
79+
80+func M (N) = {
81+ let O = getString(L, N)
82+ if ($isInstanceOf(O, "String"))
8183 then {
82- let O = N
83- fromBase58String(O)
84+ let P = O
85+ fromBase58String(P)
8486 }
8587 else {
86- let P = N
87- throw((M + "is empty"))
88+ let Q = O
89+ throw((N + "is empty"))
8890 }
8991 }
9092
9193
92-let Q = L(A)
94+let R = M(B)
9395
94-let R = L(B)
96+let S = M(C)
9597
96-let S = L(C)
98+let T = M(D)
9799
98-let T = L(D)
100+let U = M(E)
99101
100-let U = Address(L(E))
102+let V = Address(M(F))
101103
102-let V = Address(L(F))
104+let W = Address(M(G))
103105
104-let W = Address(L(n))
106+let X = Address(M(o))
105107
106-let X = Address(L(H))
108+let Y = Address(M(I))
107109
108-let Y = Address(L(G))
110+let Z = Address(M(H))
109111
110-let Z = L(I)
112+let aa = M(J)
111113
112-let aa = getStringValue(K, J)
114+let ab = getStringValue(L, K)
113115
114-let ab = valueOrErrorMessage(getInteger(X, w), "Empty kBasePeriod")
116+let ac = valueOrErrorMessage(getInteger(Y, x), "Empty kBasePeriod")
115117
116-let ac = valueOrErrorMessage(getInteger(X, y), "Empty kStartHeight")
118+let ad = valueOrErrorMessage(getInteger(Y, z), "Empty kStartHeight")
117119
118-let ad = valueOrErrorMessage(getInteger(X, x), "Empty kPeriodLength")
120+let ae = valueOrErrorMessage(getInteger(Y, y), "Empty kPeriodLength")
119121
120-let ae = ((ab + ((height - ac) / ad)) + 3)
122+let af = ((ac + ((height - ad) / ae)) + 3)
121123
122-let af = getBooleanValue(this, c)
124+let ag = getBooleanValue(this, c)
123125
124-let ag = valueOrElse(getBoolean(K, d), true)
126+let ah = valueOrElse(getBoolean(L, d), true)
125127
126-let ah = getStringValue(this, e)
128+let ai = valueOrElse(getBoolean(L, (e + toString(this))), false)
127129
128-let ai = getStringValue(this, f)
130+let aj = getStringValue(this, f)
129131
130-let aj = if ((ah == "WAVES"))
132+let ak = getStringValue(this, g)
133+
134+let al = if ((aj == "WAVES"))
131135 then unit
132- else fromBase58String(ah)
136+ else fromBase58String(aj)
133137
134-let ak = if ((ai == "WAVES"))
138+let am = if ((ak == "WAVES"))
135139 then unit
136- else fromBase58String(ai)
140+ else fromBase58String(ak)
137141
138-let al = {
139- let N = aj
140- if ($isInstanceOf(N, "ByteVector"))
142+let an = {
143+ let O = al
144+ if ($isInstanceOf(O, "ByteVector"))
141145 then {
142- let am = N
143- value(assetInfo(am)).name
146+ let ao = O
147+ value(assetInfo(ao)).name
144148 }
145- else if ($isInstanceOf(N, "Unit"))
149+ else if ($isInstanceOf(O, "Unit"))
146150 then {
147- let an = N
151+ let ap = O
148152 "WAVES"
149153 }
150154 else throw("Match error")
151155 }
152156
153-let ao = {
154- let N = ak
155- if ($isInstanceOf(N, "ByteVector"))
157+let aq = {
158+ let O = am
159+ if ($isInstanceOf(O, "ByteVector"))
156160 then {
157- let am = N
158- value(assetInfo(am)).name
161+ let ao = O
162+ value(assetInfo(ao)).name
159163 }
160- else if ($isInstanceOf(N, "Unit"))
164+ else if ($isInstanceOf(O, "Unit"))
161165 then {
162- let an = N
166+ let ap = O
163167 "WAVES"
164168 }
165169 else throw("Match error")
166170 }
167171
168-let ap = getIntegerValue(this, g)
172+let ar = getIntegerValue(this, h)
169173
170-let aq = getIntegerValue(this, h)
174+let as = getIntegerValue(this, i)
171175
172-let ar = fromBase58String(getStringValue(this, i))
173-
174-let as = getIntegerValue(this, j)
175-
176-let at = getIntegerValue(this, l)
176+let at = fromBase58String(getStringValue(this, j))
177177
178178 let au = getIntegerValue(this, k)
179179
180-let av = fraction(au, 40, 100)
180+let av = getIntegerValue(this, m)
181181
182-let aw = 1000000
182+let aw = getIntegerValue(this, l)
183183
184-let ax = 1000
184+let ax = fraction(aw, 40, 100)
185185
186-let ay = 100000000
186+let ay = 1000000
187187
188-let az = 10000000000000000
188+let az = 1000
189189
190-let aA = 8
190+let aA = 100000000
191191
192-let aB = 80000000
192+let aB = 10000000000000000
193193
194-let aC = 120000000
194+let aC = 8
195195
196-let aD = 50
196+let aD = 60000000
197197
198-let aE = 2
198+let aE = 140000000
199199
200-let aF = 4600000000000000
200+let aF = 50
201201
202-func aG (aH) = {
203- let N = aH
204- if ($isInstanceOf(N, "ByteVector"))
202+let aG = 2
203+
204+let aH = 4600000000000000
205+
206+func aI (aJ) = {
207+ let O = aJ
208+ if ($isInstanceOf(O, "ByteVector"))
205209 then {
206- let am = N
207- assetBalance(this, am)
210+ let ao = O
211+ assetBalance(this, ao)
208212 }
209- else if ($isInstanceOf(N, "Unit"))
213+ else if ($isInstanceOf(O, "Unit"))
210214 then {
211- let an = N
215+ let ap = O
212216 wavesBalance(this).available
213217 }
214218 else throw("Match error")
215219 }
216220
217221
218-func aI (aH) = {
219- let aJ = {
220- let N = aH
221- if ($isInstanceOf(N, "ByteVector"))
222+func aK (aJ) = {
223+ let aL = {
224+ let O = aJ
225+ if ($isInstanceOf(O, "ByteVector"))
222226 then {
223- let aK = N
224- if ((aK == Z))
225- then getInteger(W, ((("rpd_balance_" + toBase58String(aK)) + "_") + toString(this)))
227+ let aM = O
228+ if ((aM == aa))
229+ then getInteger(X, ((("rpd_balance_" + toBase58String(aM)) + "_") + toString(this)))
226230 else 0
227231 }
228- else if ($isInstanceOf(N, "Unit"))
232+ else if ($isInstanceOf(O, "Unit"))
229233 then 0
230234 else throw("Match error")
231235 }
232- let N = aJ
233- if ($isInstanceOf(N, "Int"))
236+ let O = aL
237+ if ($isInstanceOf(O, "Int"))
234238 then {
235- let aL = N
236- aL
239+ let aN = O
240+ aN
237241 }
238242 else 0
239243 }
240244
241245
242-let aM = aI(aj)
246+let aO = aK(al)
243247
244-let aN = aI(ak)
248+let aP = aK(am)
245249
246-let aO = (ap - aM)
250+let aQ = (ar - aO)
247251
248-let aP = (aq - aN)
252+let aR = (as - aP)
249253
250-let aQ = (aG(aj) + aM)
254+let aS = (aI(al) + aO)
251255
252-let aR = (aG(ak) + aN)
256+let aT = (aI(am) + aP)
253257
254-let aS = if ((aQ >= ap))
255- then (aR >= aq)
258+let aU = if ((aS >= ar))
259+ then (aT >= as)
256260 else false
257261
258-func aT (aU,aV) = ((fraction(az, aU, aV) + fraction(az, aV, aU)) / 2)
262+func aV (aW,aX) = ((fraction(aB, aW, aX) + fraction(aB, aX, aW)) / 2)
259263
260264
261-func aW (aU,aV) = {
262- let aX = aT(aU, aV)
263- (fraction((aU + aV), az, pow(aX, aA, aD, aE, aA, CEILING)) + (2 * fraction(toInt(pow(fraction(toBigInt(aU), toBigInt(aV), toBigInt(ay)), 0, toBigInt(5), 1, (aA / 2), DOWN)), pow((aX - aF), aA, aD, aE, aA, DOWN), ay)))
265+func aY (aW,aX) = {
266+ let aZ = aV(aW, aX)
267+ (fraction((aW + aX), aB, pow(aZ, aC, aF, aG, aC, CEILING)) + (2 * fraction(toInt(pow(fraction(toBigInt(aW), toBigInt(aX), toBigInt(aA)), 0, toBigInt(5), 1, (aC / 2), DOWN)), pow((aZ - aH), aC, aF, aG, aC, DOWN), aA)))
264268 }
265269
266270
267-func aY (aZ,ba,bb,bc,bd,be,bf) = {
268- let bg = (az - ((az * 1) / 10000000))
269- let bh = (aZ - ba)
270- let aU = (bd + bb)
271- let aV = (be + bb)
272- func bi (bj,bk) = if ((bj._1 == -1))
271+func ba (bb,bc,bd,be,bf,bg,bh) = {
272+ let bi = (aB - ((aB * 1) / 10000000))
273+ let bj = (bb - bc)
274+ let aW = (bf + bd)
275+ let aX = (bg + bd)
276+ func bk (bl,bm) = if ((bl._1 == -1))
273277 then {
274- let bl = (aZ - (((bk * bh) / 3) / ax))
275- let bm = if ((bc == aj))
276- then aW(aU, (be - bl))
277- else aW((bd - bl), aV)
278- if ((bm > bf))
279- then $Tuple2(bl, bm)
278+ let bn = (bb - (((bm * bj) / 3) / az))
279+ let bo = if ((be == al))
280+ then aY(aW, (bg - bn))
281+ else aY((bf - bn), aX)
282+ if ((bo > bh))
283+ then $Tuple2(bn, bo)
280284 else $Tuple2(-1, 0)
281285 }
282- else bj
286+ else bl
283287
284- let bn = bi($Tuple2(-1, 0), 3000)
285- if ((0 > bn._1))
288+ let bp = bk($Tuple2(-1, 0), 3000)
289+ if ((0 > bp._1))
286290 then throw("Price is worse than minReceived")
287291 else {
288- let bo = if ((bc == aj))
289- then aW(aU, (be - aZ))
290- else if ((bc == ak))
291- then aW((bd - aZ), aV)
292+ let bq = if ((be == al))
293+ then aY(aW, (bg - bb))
294+ else if ((be == am))
295+ then aY((bf - bb), aX)
292296 else throw("Wrong asset in payment")
293- if ((bf > bo))
294- then if ((bg >= fraction(az, bf, bo)))
297+ if ((bh > bq))
298+ then if ((bi >= fraction(aB, bh, bq)))
295299 then throw("The requested price is too not profitable for user")
296300 else {
297- let bp = {
298- let bq = [25, 200, 500]
299- let br = size(bq)
300- let bs = $Tuple2(-1, 0)
301- func bt (bu,bv) = if ((bv >= br))
302- then bu
303- else bi(bu, bq[bv])
301+ let br = {
302+ let bs = [25, 200, 500]
303+ let bt = size(bs)
304+ let bu = $Tuple2(-1, 0)
305+ func bv (bw,bx) = if ((bx >= bt))
306+ then bw
307+ else bk(bw, bs[bx])
304308
305- func bw (bu,bv) = if ((bv >= br))
306- then bu
309+ func by (bw,bx) = if ((bx >= bt))
310+ then bw
307311 else throw("List size exceeds 3")
308312
309- bw(bt(bt(bt(bs, 0), 1), 2), 3)
313+ by(bv(bv(bv(bu, 0), 1), 2), 3)
310314 }
311- if ((0 > bp._1))
312- then bn._1
313- else bp._1
315+ if ((0 > br._1))
316+ then bp._1
317+ else br._1
314318 }
315319 else {
316- let bp = {
317- let bq = [-500, -200, -25]
318- let br = size(bq)
319- let bs = $Tuple2(-1, 0)
320- func bt (bu,bv) = if ((bv >= br))
321- then bu
322- else bi(bu, bq[bv])
320+ let br = {
321+ let bs = [-500, -200, -25]
322+ let bt = size(bs)
323+ let bu = $Tuple2(-1, 0)
324+ func bv (bw,bx) = if ((bx >= bt))
325+ then bw
326+ else bk(bw, bs[bx])
323327
324- func bw (bu,bv) = if ((bv >= br))
325- then bu
328+ func by (bw,bx) = if ((bx >= bt))
329+ then bw
326330 else throw("List size exceeds 3")
327331
328- bw(bt(bt(bt(bs, 0), 1), 2), 3)
332+ by(bv(bv(bv(bu, 0), 1), 2), 3)
329333 }
330- let bx = if ((0 > bp._1))
331- then $Tuple2(aZ, bo)
332- else bp
333- if ((bg >= fraction(az, bf, bx._2)))
334+ let bz = if ((0 > br._1))
335+ then $Tuple2(bb, bq)
336+ else br
337+ if ((bi >= fraction(aB, bh, bz._2)))
334338 then throw("The requested price is too not profitable for user")
335- else bx._1
339+ else bz._1
336340 }
337341 }
338342 }
339343
340344
341-func by (aH) = {
342- let N = aH
343- if ($isInstanceOf(N, "ByteVector"))
345+func bA (aJ) = {
346+ let O = aJ
347+ if ($isInstanceOf(O, "ByteVector"))
344348 then {
345- let am = N
346- let bz = toBase58String(am)
347- let bA = valueOrErrorMessage(assetInfo(am), (("Asset " + bz) + " doesn't exist"))
348- $Tuple3(bz, bA.name, bA.decimals)
349+ let ao = O
350+ let bB = toBase58String(ao)
351+ let bC = valueOrErrorMessage(assetInfo(ao), (("Asset " + bB) + " doesn't exist"))
352+ $Tuple3(bB, bC.name, bC.decimals)
349353 }
350- else if ($isInstanceOf(N, "Unit"))
354+ else if ($isInstanceOf(O, "Unit"))
351355 then {
352- let an = N
356+ let ap = O
353357 $Tuple3("WAVES", "WAVES", 8)
354358 }
355359 else throw("Match error")
356360 }
357361
358362
359-func bB (bC) = [BooleanEntry(c, false), StringEntry(m, bC)]
363+func bD (bE) = [BooleanEntry(c, false), StringEntry(n, bE)]
360364
361365
362-func bD () = throw("DApp is already active")
366+func bF () = throw("DApp is already active")
363367
364368
365-func bE () = if (if (af)
366- then ag
369+func bG () = if (if (ag)
370+ then ah
367371 else false)
368372 then unit
369373 else throw("DApp is inactive at this moment")
370374
371375
372-func bF (aL) = if (containsElement([Q, R, S], aL.callerPublicKey))
376+func bH () = if (!(ai))
377+ then unit
378+ else throw("Pool is deprecated. Only withdraw action allowed.")
379+
380+
381+func bI (aN) = if (containsElement([R, S, T], aN.callerPublicKey))
373382 then unit
374383 else throw("Only admin can call this function")
375384
376385
377-func bG (aL) = if ((this == aL.caller))
386+func bJ (aN) = if ((this == aN.caller))
378387 then unit
379388 else throw("Only contract itself can call this function")
380389
381390
382-func bH () = throw(((("Incorrect assets attached. Expected: " + ah) + " and ") + ai))
391+func bK () = throw(((("Incorrect assets attached. Expected: " + aj) + " and ") + ak))
383392
384393
385-func bI () = throw("One attached payment expected")
394+func bL () = throw("One attached payment expected")
386395
387396
388-func bJ () = bB(((((((((((((((("Suspicious state. Actual balances: " + toString(ap)) + " ") + al) + ", ") + toString(aq)) + " ") + ao) + ". State: ") + toString(aG(aj))) + " ") + al) + ", ") + toString(aG(ak))) + " ") + ao))
397+func bM () = bD(((((((((((((((("Suspicious state. Actual balances: " + toString(ar)) + " ") + an) + ", ") + toString(as)) + " ") + aq) + ". State: ") + toString(aI(al))) + " ") + an) + ", ") + toString(aI(am))) + " ") + aq))
389398
390399
391-func bK (bL,aH) = if (bL)
392- then $Tuple2("lockNeutrino", W)
393- else $Tuple2("unlockNeutrino", W)
400+func bN (bO,aJ) = if (bO)
401+ then $Tuple2("lockNeutrino", X)
402+ else $Tuple2("unlockNeutrino", X)
394403
395404
396-func bM (bL,bN,aH) = if (bL)
405+func bP (bO,bQ,aJ) = if (bO)
397406 then {
398- let bO = bK(bL, aH)
399- let bP = bO._1
400- let bQ = bO._2
401- $Tuple4(bP, bQ, nil, [AttachedPayment(aH, bN)])
407+ let bR = bN(bO, aJ)
408+ let bS = bR._1
409+ let bT = bR._2
410+ $Tuple4(bS, bT, nil, [AttachedPayment(aJ, bQ)])
402411 }
403412 else {
404- let bR = bK(bL, aH)
405- let bP = bR._1
406- let bQ = bR._2
407- $Tuple4(bP, bQ, [bN, toBase58String(aH)], nil)
413+ let bU = bN(bO, aJ)
414+ let bS = bU._1
415+ let bT = bU._2
416+ $Tuple4(bS, bT, [bQ, toBase58String(aJ)], nil)
408417 }
409418
410419
411-func bS (bT) = {
412- let bU = valueOrElse(getInteger(V, (toString(bT) + r)), 0)
413- let bV = valueOrElse(getInteger(V, (toString(bT) + s)), bU)
414- let bW = split(getStringValue(K, q), ",")
415- let bX = split(getStringValue(K, p), ",")
416- if (if ((bV >= parseIntValue(bW[0])))
417- then (parseIntValue(bW[1]) > bV)
420+func bV (bW) = {
421+ let bX = valueOrElse(getInteger(W, (toString(bW) + s)), 0)
422+ let bY = valueOrElse(getInteger(W, (toString(bW) + t)), bX)
423+ let bZ = split(getStringValue(L, r), ",")
424+ let ca = split(getStringValue(L, q), ",")
425+ if (if ((bY >= parseIntValue(bZ[0])))
426+ then (parseIntValue(bZ[1]) > bY)
418427 else false)
419- then (aw - parseIntValue(bX[0]))
420- else if (if ((bV >= parseIntValue(bW[1])))
421- then (parseIntValue(bW[2]) > bV)
428+ then (ay - parseIntValue(ca[0]))
429+ else if (if ((bY >= parseIntValue(bZ[1])))
430+ then (parseIntValue(bZ[2]) > bY)
422431 else false)
423- then (aw - parseIntValue(bX[1]))
424- else if (if ((bV >= parseIntValue(bW[2])))
425- then (parseIntValue(bW[3]) > bV)
432+ then (ay - parseIntValue(ca[1]))
433+ else if (if ((bY >= parseIntValue(bZ[2])))
434+ then (parseIntValue(bZ[3]) > bY)
426435 else false)
427- then (aw - parseIntValue(bX[2]))
428- else if (if ((bV >= parseIntValue(bW[3])))
429- then (parseIntValue(bW[4]) > bV)
436+ then (ay - parseIntValue(ca[2]))
437+ else if (if ((bY >= parseIntValue(bZ[3])))
438+ then (parseIntValue(bZ[4]) > bY)
430439 else false)
431- then (aw - parseIntValue(bX[3]))
432- else if ((bV >= parseIntValue(bW[4])))
433- then (aw - parseIntValue(bX[4]))
434- else aw
440+ then (ay - parseIntValue(ca[3]))
441+ else if ((bY >= parseIntValue(bZ[4])))
442+ then (ay - parseIntValue(ca[4]))
443+ else ay
435444 }
436445
437446
438-func bY (bZ,ca,cb) = {
439- let cc = getIntegerValue(this, z)
440- let cd = if (if ((cb == aj))
441- then (bZ > ca)
447+func cb (cc,cd,ce) = {
448+ let cf = getIntegerValue(this, A)
449+ let cg = if (if ((ce == al))
450+ then (cc > cd)
442451 else false)
443- then fraction(bZ, 1, ca, CEILING)
444- else if (if ((cb == ak))
445- then (ca > bZ)
452+ then fraction(cc, 1, cd, CEILING)
453+ else if (if ((ce == am))
454+ then (cd > cc)
446455 else false)
447- then fraction(ca, 1, bZ, CEILING)
456+ then fraction(cd, 1, cc, CEILING)
448457 else 0
449- if ((cd > cc))
458+ if ((cg > cf))
450459 then {
451- let ce = if ((cb == aj))
452- then $Tuple2(ao, al)
453- else $Tuple2(al, ao)
454- let cf = ce._1
455- let cg = ce._2
456- throw((((("Buying " + cf) + " is temporarily unavailable due to the ") + cg) + " depeg"))
460+ let ch = if ((ce == al))
461+ then $Tuple2(aq, an)
462+ else $Tuple2(an, aq)
463+ let ci = ch._1
464+ let cj = ch._2
465+ throw((((("Buying " + ci) + " is temporarily unavailable due to the ") + cj) + " depeg"))
457466 }
458467 else true
459468 }
460469
461470
462-func ch (aL,ci,cj) = {
463- let ck = aL.payments[0].assetId
464- let cl = aL.payments[1].assetId
465- let cm = fraction(ay, aL.payments[0].amount, ap)
466- let cn = fraction(ay, aL.payments[1].amount, aq)
467- let co = by(ck)
468- let cp = co._1
469- let cq = co._2
470- let cr = co._3
471- let cs = by(cl)
472- let ct = cs._1
473- let cu = cs._2
474- let cv = cs._3
475- let cw = if ((cn > cm))
471+func ck (aN,cl,cm) = {
472+ let cn = aN.payments[0].assetId
473+ let co = aN.payments[1].assetId
474+ let cp = fraction(aA, aN.payments[0].amount, ar)
475+ let cq = fraction(aA, aN.payments[1].amount, as)
476+ let cr = bA(cn)
477+ let cs = cr._1
478+ let ct = cr._2
479+ let cu = cr._3
480+ let cv = bA(co)
481+ let cw = cv._1
482+ let cx = cv._2
483+ let cy = cv._3
484+ let cz = if ((cq > cp))
476485 then {
477- let cx = fraction(aq, cm, ay, CEILING)
478- $Tuple5(aL.payments[0].amount, cx, (aL.payments[1].amount - cx), cl, cm)
486+ let cA = fraction(as, cp, aA, CEILING)
487+ $Tuple5(aN.payments[0].amount, cA, (aN.payments[1].amount - cA), co, cp)
479488 }
480489 else {
481- let cx = fraction(ap, cn, ay, CEILING)
482- $Tuple5(cx, aL.payments[1].amount, (aL.payments[0].amount - cx), ck, cn)
490+ let cA = fraction(ar, cq, aA, CEILING)
491+ $Tuple5(cA, aN.payments[1].amount, (aN.payments[0].amount - cA), cn, cq)
483492 }
484- let cy = cw._1
485- let cz = cw._2
486- let cA = cw._3
487- let cB = cw._4
488- let cC = cw._5
489- let cD = fraction(cC, as, ay)
490- if (if ((size(aL.payments) != 2))
491- then (size(aL.payments) != 3)
493+ let cB = cz._1
494+ let cC = cz._2
495+ let cD = cz._3
496+ let cE = cz._4
497+ let cF = cz._5
498+ let cG = fraction(cF, au, aA)
499+ if (if ((size(aN.payments) != 2))
500+ then (size(aN.payments) != 3)
492501 else false)
493502 then throw("Two or three payments expected")
494- else if (if ((ck != aj))
503+ else if (if ((cn != al))
495504 then true
496- else (cl != ak))
497- then bH()
498- else if ((cD == 0))
505+ else (co != am))
506+ then bK()
507+ else if ((cG == 0))
499508 then throw("Too small amount to replenish")
500- else if ((0 > cA))
509+ else if ((0 > cD))
501510 then throw("Change < 0")
502- else if (!(aS))
503- then ([ScriptTransfer(aL.caller, cy, ck), ScriptTransfer(aL.caller, cz, cl)] ++ bJ())
511+ else if (!(aU))
512+ then ([ScriptTransfer(aN.caller, cB, cn), ScriptTransfer(aN.caller, cC, co)] ++ bM())
504513 else {
505- let cE = if (contains(aa, cp))
506- then invoke(this, "stakeUnstake", [true, cy, cp], nil)
514+ let cH = if (contains(ab, cs))
515+ then invoke(this, "stakeUnstake", [true, cB, cs], nil)
507516 else 0
508- if ((cE == cE))
517+ if ((cH == cH))
509518 then {
510- let cF = if (contains(aa, ct))
511- then invoke(this, "stakeUnstake", [true, cz, ct], nil)
519+ let cI = if (contains(ab, cw))
520+ then invoke(this, "stakeUnstake", [true, cC, cw], nil)
512521 else 0
513- if ((cF == cF))
522+ if ((cI == cI))
514523 then {
515- let cG = [IntegerEntry(g, (ap + cy)), IntegerEntry(h, (aq + cz)), IntegerEntry(j, (as + cD)), IntegerEntry(l, aW((ap + cy), (aq + cz))), ScriptTransfer(aL.caller, cA, cB)]
516- if (ci)
524+ let cJ = [IntegerEntry(h, (ar + cB)), IntegerEntry(i, (as + cC)), IntegerEntry(k, (au + cG)), IntegerEntry(m, aY((ar + cB), (as + cC))), ScriptTransfer(aN.caller, cD, cE)]
525+ if (cl)
517526 then {
518- let cH = ([AttachedPayment(ar, cD)] ++ (if ((size(aL.payments) == 3))
519- then [AttachedPayment(if ((aL.payments[2].assetId == base58''))
527+ let cK = ([AttachedPayment(at, cG)] ++ (if ((size(aN.payments) == 3))
528+ then [AttachedPayment(if ((aN.payments[2].assetId == base58''))
520529 then unit
521- else aL.payments[2].assetId, aL.payments[2].amount)]
530+ else aN.payments[2].assetId, aN.payments[2].amount)]
522531 else nil))
523- let cI = invoke(this, "reissueShare", [cD], nil)
524- if ((cI == cI))
532+ let cL = invoke(this, "reissueShare", [cG], nil)
533+ if ((cL == cL))
525534 then {
526- let cJ = invoke(Y, "lockShareTokensFromPool", [aL.caller.bytes, toString(this), cj], cH)
527- if ((cJ == cJ))
528- then cG
535+ let cM = invoke(Z, "lockShareTokensFromPool", [aN.caller.bytes, toString(this), cm], cK)
536+ if ((cM == cM))
537+ then cJ
529538 else throw("Strict value is not equal to itself.")
530539 }
531540 else throw("Strict value is not equal to itself.")
532541 }
533- else (cG ++ [Reissue(ar, cD, true), ScriptTransfer(aL.caller, cD, ar)])
542+ else (cJ ++ [Reissue(at, cG, true), ScriptTransfer(aN.caller, cG, at)])
534543 }
535544 else throw("Strict value is not equal to itself.")
536545 }
537546 else throw("Strict value is not equal to itself.")
538547 }
539548 }
540549
541550
542-func cK (aL,cL,cM,ci,cj) = {
543- let cN = $Tuple2(aL.payments[0].amount, aL.payments[0].assetId)
544- let cO = cN._1
545- let cb = cN._2
546- let cP = by(cb)
547- let cQ = cP._1
548- let cR = cP._2
549- let cS = cP._3
550- let cT = 5000000
551- let cU = 50000000
552- let cV = if ((cU > cO))
551+func cN (aN,cO,cP,cl,cm) = {
552+ let cQ = $Tuple2(aN.payments[0].amount, aN.payments[0].assetId)
553+ let cR = cQ._1
554+ let ce = cQ._2
555+ let cS = bA(ce)
556+ let cT = cS._1
557+ let cU = cS._2
558+ let cV = cS._3
559+ let cW = 5000000
560+ let cX = 50000000
561+ let cY = if ((cX > cR))
553562 then 100000
554563 else 1
555- let cW = (ay - ((ay * cV) / 10000000))
556- let cX = (ay + ((ay * cV) / 10000000))
557- let cY = (ay - ((ay * 1) / 10000000))
558- if ((cT > cO))
559- then throw((((("Payment amount " + toString(cO)) + " does not exceed the minimum amount of ") + toString(cT)) + " tokens"))
560- else if (if ((size(aL.payments) != 1))
561- then (size(aL.payments) != 2)
564+ let cZ = (aA - ((aA * cY) / 10000000))
565+ let da = (aA + ((aA * cY) / 10000000))
566+ let db = (aA - ((aA * 1) / 10000000))
567+ if ((cW > cR))
568+ then throw((((("Payment amount " + toString(cR)) + " does not exceed the minimum amount of ") + toString(cW)) + " tokens"))
569+ else if (if ((size(aN.payments) != 1))
570+ then (size(aN.payments) != 2)
562571 else false)
563572 then throw("One or two payments expected")
564- else if (!(aS))
565- then ([ScriptTransfer(aL.caller, cO, cb)] ++ bJ())
566- else if (if ((cb != aj))
567- then (cb != ak)
573+ else if (!(aU))
574+ then ([ScriptTransfer(aN.caller, cR, ce)] ++ bM())
575+ else if (if ((ce != al))
576+ then (ce != am)
568577 else false)
569- then bH()
578+ then bK()
570579 else {
571- let cZ = if ((cb == aj))
572- then $Tuple6((cO - cL), cM, (ap + cL), (aq - cM), (ap + cO), aq)
573- else $Tuple6(cM, (cO - cL), (ap - cM), (aq + cL), ap, (aq + cO))
574- let da = cZ._1
575- let db = cZ._2
576- let dc = cZ._3
577- let dd = cZ._4
578- let bZ = cZ._5
579- let ca = cZ._6
580- let de = aW(dc, dd)
581- let df = (fraction(az, dc, dd) / fraction(ay, da, db))
582- if (if ((cY >= fraction(ay, at, de)))
580+ let dc = if ((ce == al))
581+ then $Tuple6((cR - cO), cP, (ar + cO), (as - cP), (ar + cR), as)
582+ else $Tuple6(cP, (cR - cO), (ar - cP), (as + cO), ar, (as + cR))
583+ let dd = dc._1
584+ let de = dc._2
585+ let df = dc._3
586+ let dg = dc._4
587+ let cc = dc._5
588+ let cd = dc._6
589+ let dh = aY(df, dg)
590+ let di = (fraction(aB, df, dg) / fraction(aA, dd, de))
591+ if (if ((db >= fraction(aA, av, dh)))
583592 then true
584- else (at > de))
593+ else (av > dh))
585594 then throw("Incorrect virtualSwapTokenPay or virtualSwapTokenGet value")
586- else if (if ((cW > df))
595+ else if (if ((cZ > di))
587596 then true
588- else (df > cX))
597+ else (di > da))
589598 then throw("Swap with virtualSwapTokenPay and virtualSwapTokenGet is possible, but ratio after virtual swap is incorrect")
590- else if (!(bY(bZ, ca, cb)))
599+ else if (!(cb(cc, cd, ce)))
591600 then throw()
592601 else {
593- let cm = fraction(da, ay, dc)
594- let cn = fraction(db, ay, dd)
595- let cD = fraction(min([cm, cn]), as, ay)
596- let dg = fraction(cD, (aw - (au / 2)), aw)
597- let dh = fraction(cD, (av / 2), aw)
598- let di = fraction(dh, ap, as)
599- let dj = fraction(dh, aq, as)
600- let dk = if ((cQ == ah))
601- then $Tuple3((cO - di), dj, ai)
602- else $Tuple3((cO - dj), di, ah)
603- let dl = dk._1
604- let dm = dk._2
605- let dn = dk._3
606- let cE = if (contains(aa, cQ))
607- then invoke(this, "stakeUnstake", [true, dl, cQ], nil)
602+ let cp = fraction(dd, aA, df)
603+ let cq = fraction(de, aA, dg)
604+ let cG = fraction(min([cp, cq]), au, aA)
605+ let dj = fraction(cG, (ay - (aw / 2)), ay)
606+ let dk = fraction(cG, (ax / 2), ay)
607+ let dl = fraction(dk, ar, au)
608+ let dm = fraction(dk, as, au)
609+ let dn = if ((cT == aj))
610+ then $Tuple3((cR - dl), dm, ak)
611+ else $Tuple3((cR - dm), dl, aj)
612+ let do = dn._1
613+ let dp = dn._2
614+ let dq = dn._3
615+ let cH = if (contains(ab, cT))
616+ then invoke(this, "stakeUnstake", [true, do, cT], nil)
608617 else 0
609- if ((cE == cE))
618+ if ((cH == cH))
610619 then {
611- let cF = if (contains(aa, dn))
612- then invoke(this, "stakeUnstake", [false, dm, dn], nil)
620+ let cI = if (contains(ab, dq))
621+ then invoke(this, "stakeUnstake", [false, dp, dq], nil)
613622 else 0
614- if ((cF == cF))
623+ if ((cI == cI))
615624 then {
616- let cG = [IntegerEntry(g, (bZ - di)), IntegerEntry(h, (ca - dj)), IntegerEntry(j, (as + dg)), IntegerEntry(l, aW((bZ - di), (ca - dj))), ScriptTransfer(U, di, aj), ScriptTransfer(U, dj, ak)]
617- if (ci)
625+ let cJ = [IntegerEntry(h, (cc - dl)), IntegerEntry(i, (cd - dm)), IntegerEntry(k, (au + dj)), IntegerEntry(m, aY((cc - dl), (cd - dm))), ScriptTransfer(V, dl, al), ScriptTransfer(V, dm, am)]
626+ if (cl)
618627 then {
619- let cH = ([AttachedPayment(ar, dg)] ++ (if ((size(aL.payments) == 2))
620- then [AttachedPayment(if ((aL.payments[1].assetId == base58''))
628+ let cK = ([AttachedPayment(at, dj)] ++ (if ((size(aN.payments) == 2))
629+ then [AttachedPayment(if ((aN.payments[1].assetId == base58''))
621630 then unit
622- else aL.payments[1].assetId, aL.payments[1].amount)]
631+ else aN.payments[1].assetId, aN.payments[1].amount)]
623632 else nil))
624- let cI = invoke(this, "reissueShare", [dg], nil)
625- if ((cI == cI))
633+ let cL = invoke(this, "reissueShare", [dj], nil)
634+ if ((cL == cL))
626635 then {
627- let cJ = invoke(Y, "lockShareTokensFromPool", [aL.caller.bytes, toString(this), cj], cH)
628- if ((cJ == cJ))
629- then cG
636+ let cM = invoke(Z, "lockShareTokensFromPool", [aN.caller.bytes, toString(this), cm], cK)
637+ if ((cM == cM))
638+ then cJ
630639 else throw("Strict value is not equal to itself.")
631640 }
632641 else throw("Strict value is not equal to itself.")
633642 }
634- else (cG ++ [Reissue(ar, dg, true), ScriptTransfer(aL.caller, dg, ar)])
643+ else (cJ ++ [Reissue(at, dj, true), ScriptTransfer(aN.caller, dj, at)])
635644 }
636645 else throw("Strict value is not equal to itself.")
637646 }
638647 else throw("Strict value is not equal to itself.")
639648 }
640649 }
641650 }
642651
643652
644-func do (aL,dp) = {
645- let dq = if ((size(aL.payments) == 1))
646- then if ((aL.payments[0].assetId != ar))
647- then throw(("Incorrect asset attached. Expected: " + toBase58String(ar)))
648- else $Tuple2(aL.payments[0].amount, aL.payments[0].assetId)
649- else $Tuple2(0, ar)
650- let cO = dq._1
651- let cb = dq._2
652- if (!(aS))
653- then ([ScriptTransfer(aL.caller, cO, cb)] ++ bJ())
653+func dr (aN,ds) = {
654+ let dt = if ((size(aN.payments) == 1))
655+ then if ((aN.payments[0].assetId != at))
656+ then throw(("Incorrect asset attached. Expected: " + toBase58String(at)))
657+ else $Tuple2(aN.payments[0].amount, aN.payments[0].assetId)
658+ else $Tuple2(0, at)
659+ let cR = dt._1
660+ let ce = dt._2
661+ if (!(aU))
662+ then ([ScriptTransfer(aN.caller, cR, ce)] ++ bM())
654663 else {
655- let dr = if ((dp > 0))
656- then invoke(Y, "withdrawShareTokensFromPool", [aL.caller.bytes, toString(this), dp], nil)
664+ let du = if ((ds > 0))
665+ then invoke(Z, "withdrawShareTokensFromPool", [aN.caller.bytes, toString(this), ds], nil)
657666 else 0
658- if ((dr == dr))
667+ if ((du == du))
659668 then {
660- let ds = (cO + dp)
661- let dt = fraction(ds, ap, as)
662- let du = fraction(ds, aq, as)
663- let dv = aW((ap - dt), (aq - du))
664- let cE = if (contains(aa, ah))
665- then invoke(this, "stakeUnstake", [false, dt, ah], nil)
669+ let dv = (cR + ds)
670+ let dw = fraction(dv, ar, au)
671+ let dx = fraction(dv, as, au)
672+ let dy = aY((ar - dw), (as - dx))
673+ let cH = if (contains(ab, aj))
674+ then invoke(this, "stakeUnstake", [false, dw, aj], nil)
666675 else 0
667- if ((cE == cE))
676+ if ((cH == cH))
668677 then {
669- let cF = if (contains(aa, ai))
670- then invoke(this, "stakeUnstake", [false, du, ai], nil)
678+ let cI = if (contains(ab, ak))
679+ then invoke(this, "stakeUnstake", [false, dx, ak], nil)
671680 else 0
672- if ((cF == cF))
673- then [IntegerEntry(g, (ap - dt)), IntegerEntry(h, (aq - du)), IntegerEntry(j, (as - ds)), IntegerEntry(l, dv), Burn(ar, ds), ScriptTransfer(aL.caller, dt, aj), ScriptTransfer(aL.caller, du, ak)]
681+ if ((cI == cI))
682+ then [IntegerEntry(h, (ar - dw)), IntegerEntry(i, (as - dx)), IntegerEntry(k, (au - dv)), IntegerEntry(m, dy), Burn(at, dv), ScriptTransfer(aN.caller, dw, al), ScriptTransfer(aN.caller, dx, am)]
674683 else throw("Strict value is not equal to itself.")
675684 }
676685 else throw("Strict value is not equal to itself.")
677686 }
678687 else throw("Strict value is not equal to itself.")
679688 }
680689 }
681690
682691
683-@Callable(aL)
684-func init (dw) = {
685- let dx = $Tuple2(aL.payments[0].amount, aL.payments[0].assetId)
686- let cy = dx._1
687- let ck = dx._2
688- let dy = $Tuple2(aL.payments[1].amount, aL.payments[1].assetId)
689- let cz = dy._1
690- let cl = dy._2
691- let dz = by(ck)
692- let cp = dz._1
693- let cq = dz._2
694- let cr = dz._3
695- let dA = by(cl)
696- let ct = dA._1
697- let cu = dA._2
698- let cv = dA._3
692+@Callable(aN)
693+func init (dz) = {
694+ let dA = $Tuple2(aN.payments[0].amount, aN.payments[0].assetId)
695+ let cB = dA._1
696+ let cn = dA._2
697+ let dB = $Tuple2(aN.payments[1].amount, aN.payments[1].assetId)
698+ let cC = dB._1
699+ let co = dB._2
700+ let dC = bA(cn)
701+ let cs = dC._1
702+ let ct = dC._2
703+ let cu = dC._3
704+ let dD = bA(co)
705+ let cw = dD._1
706+ let cx = dD._2
707+ let cy = dD._3
699708 if (isDefined(getBoolean(this, c)))
700- then bD()
701- else if ((ck == cl))
709+ then bF()
710+ else if ((cn == co))
702711 then throw("Assets must be different")
703712 else {
704- let dB = ((("s" + take(cq, 7)) + "_") + take(cu, 7))
705- let dC = ((((("ShareToken of SwopFi protocol for " + cq) + " and ") + cu) + " at address ") + toString(this))
706- let dD = ((cr + cv) / 2)
707- let dE = fraction(pow(cy, cr, 5, 1, cr, DOWN), pow(cz, cv, 5, 1, cv, DOWN), pow(10, 0, dD, 0, 0, DOWN))
708- let dF = Issue(dB, dC, dE, dD, true)
709- let dG = calculateAssetId(dF)
710- let dv = aW(cy, cz)
711- let cE = if (contains(aa, cp))
712- then invoke(this, "stakeUnstake", [true, cy, cp], nil)
713+ let dE = ((("s" + take(ct, 7)) + "_") + take(cx, 7))
714+ let dF = ((((("ShareToken of SwopFi protocol for " + ct) + " and ") + cx) + " at address ") + toString(this))
715+ let dG = ((cu + cy) / 2)
716+ let dH = fraction(pow(cB, cu, 5, 1, cu, DOWN), pow(cC, cy, 5, 1, cy, DOWN), pow(10, 0, dG, 0, 0, DOWN))
717+ let dI = Issue(dE, dF, dH, dG, true)
718+ let dJ = calculateAssetId(dI)
719+ let dy = aY(cB, cC)
720+ let cH = if (contains(ab, cs))
721+ then invoke(this, "stakeUnstake", [true, cB, cs], nil)
713722 else 0
714- if ((cE == cE))
723+ if ((cH == cH))
715724 then {
716- let cF = if (contains(aa, ct))
717- then invoke(this, "stakeUnstake", [true, cz, ct], nil)
725+ let cI = if (contains(ab, cw))
726+ then invoke(this, "stakeUnstake", [true, cC, cw], nil)
718727 else 0
719- if ((cF == cF))
728+ if ((cI == cI))
720729 then {
721- let dH = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(e, cp), StringEntry(f, ct), IntegerEntry(g, cy), IntegerEntry(h, cz), IntegerEntry(l, dv), IntegerEntry(k, getIntegerValue(K, "base_fee_flat")), IntegerEntry(z, 3), dF, StringEntry(i, toBase58String(dG)), IntegerEntry(j, dE), ScriptTransfer(aL.caller, dE, dG)]
722- if (dw)
723- then (dH ++ [BooleanEntry(t, dw), IntegerEntry(u, (ac + (ae * ad)))])
724- else dH
730+ let dK = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(f, cs), StringEntry(g, cw), IntegerEntry(h, cB), IntegerEntry(i, cC), IntegerEntry(m, dy), IntegerEntry(l, getIntegerValue(L, "base_fee_flat")), IntegerEntry(A, 3), dI, StringEntry(j, toBase58String(dJ)), IntegerEntry(k, dH), ScriptTransfer(aN.caller, dH, dJ)]
731+ if (dz)
732+ then (dK ++ [BooleanEntry(u, dz), IntegerEntry(v, (ad + (af * ae)))])
733+ else dK
725734 }
726735 else throw("Strict value is not equal to itself.")
727736 }
728737 else throw("Strict value is not equal to itself.")
729738 }
730739 }
731740
732741
733742
734-@Callable(aL)
735-func replenishWithTwoTokensV2 (ci,cj) = valueOrElse(bE(), ch(aL, ci, cj))
743+@Callable(aN)
744+func replenishWithTwoTokensV2 (cl,cm) = valueOrElse(bG(), valueOrElse(bH(), ck(aN, cl, cm)))
736745
737746
738747
739-@Callable(aL)
740-func replenishWithOneTokenV2 (cL,cM,ci,cj) = valueOrElse(bE(), cK(aL, cL, cM, ci, cj))
748+@Callable(aN)
749+func replenishWithOneTokenV2 (cO,cP,cl,cm) = valueOrElse(bG(), valueOrElse(bH(), cN(aN, cO, cP, cl, cm)))
741750
742751
743752
744-@Callable(aL)
745-func withdrawV2 (dp) = valueOrElse(bE(), do(aL, dp))
753+@Callable(aN)
754+func withdrawV2 (ds) = valueOrElse(bG(), dr(aN, ds))
746755
747756
748757
749-@Callable(aL)
750-func withdrawOneToken (dp,dI,dJ,dK) = valueOrElse(bE(), {
751- let dL = if ((size(aL.payments) == 1))
752- then if ((aL.payments[0].assetId != ar))
753- then throw(("Incorrect asset attached. Expected: " + toBase58String(ar)))
754- else $Tuple2(aL.payments[0].amount, aL.payments[0].assetId)
755- else $Tuple2(0, ar)
756- let cO = dL._1
757- let cb = dL._2
758- let ds = (cO + dp)
759- if (if ((dI != ah))
760- then (dI != ai)
758+@Callable(aN)
759+func withdrawOneToken (ds,dL,dM,dN) = valueOrElse(bG(), valueOrElse(bH(), {
760+ let dO = if ((size(aN.payments) == 1))
761+ then if ((aN.payments[0].assetId != at))
762+ then throw(("Incorrect asset attached. Expected: " + toBase58String(at)))
763+ else $Tuple2(aN.payments[0].amount, aN.payments[0].assetId)
764+ else $Tuple2(0, at)
765+ let cR = dO._1
766+ let ce = dO._2
767+ let dv = (cR + ds)
768+ if (if ((dL != aj))
769+ then (dL != ak)
761770 else false)
762771 then throw("Incorrect withdraw asset")
763- else if ((0 >= ds))
772+ else if ((0 >= dv))
764773 then throw("withdraw amount must be grater than 0")
765- else if (!(aS))
766- then ([ScriptTransfer(aL.caller, cO, cb)] ++ bJ())
774+ else if (!(aU))
775+ then ([ScriptTransfer(aN.caller, cR, ce)] ++ bM())
767776 else {
768- let dr = if ((dp > 0))
769- then invoke(Y, "withdrawShareTokensFromPool", [aL.caller.bytes, toString(this), dp], nil)
777+ let du = if ((ds > 0))
778+ then invoke(Z, "withdrawShareTokensFromPool", [aN.caller.bytes, toString(this), ds], nil)
770779 else 0
771- if ((dr == dr))
780+ if ((du == du))
772781 then {
773- let dt = fraction(ds, ap, as)
774- let du = fraction(ds, aq, as)
775- let dM = (ap - dt)
776- let dN = (aq - du)
777- let dO = bS(aL.originCaller)
778- let dP = if ((dI == ah))
779- then aY(dJ, dK, du, ak, dM, dN, aW(dM, dN))
780- else aY(dJ, dK, dt, aj, dM, dN, aW(dM, dN))
781- let dQ = fraction(dP, fraction(av, dO, aw, CEILING), aw)
782- let dR = fraction(dP, (aw - fraction(au, dO, aw, CEILING)), aw)
783- let dS = if ((dI == ah))
784- then $Tuple4((dt + dR), (((ap - dt) - dR) - dQ), aq, ak)
785- else $Tuple4((du + dR), ap, (((aq - du) - dR) - dQ), aj)
786- let dT = dS._1
787- let dU = dS._2
788- let dV = dS._3
789- let dW = dS._4
790- if (!(bY(dU, dV, dW)))
782+ let dw = fraction(dv, ar, au)
783+ let dx = fraction(dv, as, au)
784+ let dP = (ar - dw)
785+ let dQ = (as - dx)
786+ let dR = bV(aN.originCaller)
787+ let dS = if ((dL == aj))
788+ then ba(dM, dN, dx, am, dP, dQ, aY(dP, dQ))
789+ else ba(dM, dN, dw, al, dP, dQ, aY(dP, dQ))
790+ let dT = fraction(dS, fraction(ax, dR, ay, CEILING), ay)
791+ let dU = fraction(dS, (ay - fraction(aw, dR, ay, CEILING)), ay)
792+ let dV = if ((dL == aj))
793+ then $Tuple4((dw + dU), (((ar - dw) - dU) - dT), as, am)
794+ else $Tuple4((dx + dU), ar, (((as - dx) - dU) - dT), al)
795+ let dW = dV._1
796+ let dX = dV._2
797+ let dY = dV._3
798+ let dZ = dV._4
799+ if (!(cb(dX, dY, dZ)))
791800 then throw()
792801 else {
793- let dv = aW(dU, dV)
794- let cE = if (contains(aa, dI))
795- then invoke(this, "stakeUnstake", [false, (dT + dQ), dI], nil)
802+ let dy = aY(dX, dY)
803+ let cH = if (contains(ab, dL))
804+ then invoke(this, "stakeUnstake", [false, (dW + dT), dL], nil)
796805 else 0
797- if ((cE == cE))
798- then [IntegerEntry(g, dU), IntegerEntry(h, dV), IntegerEntry(j, (as - ds)), IntegerEntry(l, dv), Burn(ar, ds), ScriptTransfer(aL.caller, dT, fromBase58String(dI)), ScriptTransfer(U, dQ, fromBase58String(dI))]
806+ if ((cH == cH))
807+ then [IntegerEntry(h, dX), IntegerEntry(i, dY), IntegerEntry(k, (au - dv)), IntegerEntry(m, dy), Burn(at, dv), ScriptTransfer(aN.caller, dW, fromBase58String(dL)), ScriptTransfer(V, dT, fromBase58String(dL))]
799808 else throw("Strict value is not equal to itself.")
800809 }
801810 }
802811 else throw("Strict value is not equal to itself.")
803812 }
804- })
813+ }))
805814
806815
807816
808-@Callable(aL)
809-func exchange (dJ,dK) = valueOrElse(bE(), {
810- let dX = $Tuple2(aL.payments[0].amount, aL.payments[0].assetId)
811- let cO = dX._1
812- let cb = dX._2
813- if ((0 >= dJ))
814- then throw(("Estimated amount must be positive. Actual: " + toString(dJ)))
815- else if ((dK > dJ))
817+@Callable(aN)
818+func exchange (dM,dN) = valueOrElse(bG(), valueOrElse(bH(), {
819+ let ea = $Tuple2(aN.payments[0].amount, aN.payments[0].assetId)
820+ let cR = ea._1
821+ let ce = ea._2
822+ if ((0 >= dM))
823+ then throw(("Estimated amount must be positive. Actual: " + toString(dM)))
824+ else if ((dN > dM))
816825 then throw("Minimal amount can't be greater than estimated.")
817- else if ((size(aL.payments) != 1))
818- then bI()
819- else if (!(aS))
820- then ([ScriptTransfer(aL.caller, cO, cb)] ++ bJ())
821- else if (if ((cb != aj))
822- then (cb != ak)
826+ else if ((size(aN.payments) != 1))
827+ then bL()
828+ else if (!(aU))
829+ then ([ScriptTransfer(aN.caller, cR, ce)] ++ bM())
830+ else if (if ((ce != al))
831+ then (ce != am)
823832 else false)
824- then bH()
825- else if ((10000000 > cO))
833+ then bK()
834+ else if ((10000000 > cR))
826835 then throw("Only swap of 10.000000 or more tokens is allowed")
827- else if (if ((aB > fraction(ay, dK, cO)))
836+ else if (if ((aD > fraction(aA, dN, cR)))
828837 then true
829- else (fraction(ay, dJ, cO) > aC))
838+ else (fraction(aA, dM, cR) > aE))
830839 then throw("Incorrect args and pmt ratio")
831840 else {
832- let dY = if ((cb == aj))
833- then ak
834- else aj
835- let bN = aY(dJ, dK, cO, cb, ap, aq, at)
836- let dO = bS(aL.originCaller)
837- let dZ = fraction(bN, fraction(av, dO, aw, CEILING), aw)
838- let ea = fraction(bN, (aw - fraction(au, dO, aw, CEILING)), aw)
839- let eb = if ((cb == aj))
840- then $Tuple2((ap + cO), ((aq - ea) - dZ))
841- else $Tuple2(((ap - ea) - dZ), (aq + cO))
842- let bZ = eb._1
843- let ca = eb._2
844- if (!(bY(bZ, ca, cb)))
841+ let eb = if ((ce == al))
842+ then am
843+ else al
844+ let bQ = ba(dM, dN, cR, ce, ar, as, av)
845+ let dR = bV(aN.originCaller)
846+ let ec = fraction(bQ, fraction(ax, dR, ay, CEILING), ay)
847+ let ed = fraction(bQ, (ay - fraction(aw, dR, ay, CEILING)), ay)
848+ let ee = if ((ce == al))
849+ then $Tuple2((ar + cR), ((as - ed) - ec))
850+ else $Tuple2(((ar - ed) - ec), (as + cR))
851+ let cc = ee._1
852+ let cd = ee._2
853+ if (!(cb(cc, cd, ce)))
845854 then throw()
846855 else {
847- let ec = by(cb)
848- let cQ = ec._1
849- let cR = ec._2
850- let cS = ec._3
851- let ed = by(dY)
852- let ee = ed._1
853- let ef = ed._2
854- let eg = ed._3
855- let cE = if (contains(aa, cQ))
856- then invoke(this, "stakeUnstake", [true, cO, cQ], nil)
856+ let ef = bA(ce)
857+ let cT = ef._1
858+ let cU = ef._2
859+ let cV = ef._3
860+ let eg = bA(eb)
861+ let eh = eg._1
862+ let ei = eg._2
863+ let ej = eg._3
864+ let cH = if (contains(ab, cT))
865+ then invoke(this, "stakeUnstake", [true, cR, cT], nil)
857866 else 0
858- if ((cE == cE))
867+ if ((cH == cH))
859868 then {
860- let cF = if (contains(aa, ee))
861- then invoke(this, "stakeUnstake", [false, (ea + dZ), ee], nil)
869+ let cI = if (contains(ab, eh))
870+ then invoke(this, "stakeUnstake", [false, (ed + ec), eh], nil)
862871 else 0
863- if ((cF == cF))
864- then $Tuple2([IntegerEntry(g, bZ), IntegerEntry(h, ca), IntegerEntry(l, aW(bZ, ca)), ScriptTransfer(aL.caller, ea, dY), ScriptTransfer(U, dZ, dY)], [ea, dY])
872+ if ((cI == cI))
873+ then $Tuple2([IntegerEntry(h, cc), IntegerEntry(i, cd), IntegerEntry(m, aY(cc, cd)), ScriptTransfer(aN.caller, ed, eb), ScriptTransfer(V, ec, eb)], [ed, eb])
865874 else throw("Strict value is not equal to itself.")
866875 }
867876 else throw("Strict value is not equal to itself.")
868877 }
869878 }
870- })
879+ }))
871880
872881
873882
874-@Callable(eh)
875-func reissueShare (bN) = valueOrElse(bG(eh), [Reissue(ar, bN, true)])
883+@Callable(ek)
884+func reissueShare (bQ) = valueOrElse(bJ(ek), [Reissue(at, bQ, true)])
876885
877886
878887
879-@Callable(aL)
880-func shutdown () = valueOrElse(bF(aL), if (!(af))
881- then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, m), "the cause wasn't specified")))
882- else bB("Paused by admin"))
888+@Callable(aN)
889+func shutdown () = valueOrElse(bI(aN), if (!(ag))
890+ then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, n), "the cause wasn't specified")))
891+ else bD("Paused by admin"))
883892
884893
885894
886-@Callable(aL)
887-func activate () = valueOrElse(bF(aL), if (af)
888- then bD()
889- else [BooleanEntry(c, true), DeleteEntry(m)])
895+@Callable(aN)
896+func activate () = valueOrElse(bI(aN), if (ag)
897+ then bF()
898+ else [BooleanEntry(c, true), DeleteEntry(n)])
890899
891900
892901
893-@Callable(aL)
894-func takeIntoAccountExtraFunds () = valueOrElse(bE(), {
895- let ei = if (if ((aj == Z))
902+@Callable(aN)
903+func takeIntoAccountExtraFunds () = valueOrElse(bG(), {
904+ let el = if (if ((al == aa))
896905 then true
897- else (ak == Z))
898- then invoke(W, "claimRewards", nil, nil)
906+ else (am == aa))
907+ then invoke(X, "claimRewards", nil, nil)
899908 else 0
900- if ((ei == ei))
909+ if ((el == el))
901910 then {
902- let ej = (aQ - ap)
903- let ek = (aR - aq)
904- let de = aW((ap + ej), (aq + ek))
905- if ((aL.caller != U))
911+ let em = (aS - ar)
912+ let en = (aT - as)
913+ let dh = aY((ar + em), (as + en))
914+ if ((aN.caller != V))
906915 then throw("Only the money box can call this function")
907- else if (if ((0 > ej))
916+ else if (if ((0 > em))
908917 then true
909- else (0 > ek))
910- then bB("Enroll amount negative")
911- else if (if ((ej == 0))
912- then (ek == 0)
918+ else (0 > en))
919+ then bD("Enroll amount negative")
920+ else if (if ((em == 0))
921+ then (en == 0)
913922 else false)
914923 then throw("No money to take")
915924 else {
916- let cE = if (if (contains(aa, ah))
917- then (ej > 0)
925+ let cH = if (if (contains(ab, aj))
926+ then (em > 0)
918927 else false)
919- then invoke(this, "stakeUnstake", [true, ej, ah], nil)
928+ then invoke(this, "stakeUnstake", [true, em, aj], nil)
920929 else 0
921- if ((cE == cE))
930+ if ((cH == cH))
922931 then {
923- let cF = if (if (contains(aa, ai))
924- then (ek > 0)
932+ let cI = if (if (contains(ab, ak))
933+ then (en > 0)
925934 else false)
926- then invoke(this, "stakeUnstake", [true, ek, ai], nil)
935+ then invoke(this, "stakeUnstake", [true, en, ak], nil)
927936 else 0
928- if ((cF == cF))
929- then [IntegerEntry(l, de), IntegerEntry(g, (ap + ej)), IntegerEntry(h, (aq + ek))]
937+ if ((cI == cI))
938+ then [IntegerEntry(m, dh), IntegerEntry(h, (ar + em)), IntegerEntry(i, (as + en))]
930939 else throw("Strict value is not equal to itself.")
931940 }
932941 else throw("Strict value is not equal to itself.")
933942 }
934943 }
935944 else throw("Strict value is not equal to itself.")
936945 })
937946
938947
939948
940-@Callable(aL)
941-func keepLimitForFirstHarvest (el) = valueOrElse(bE(), valueOrElse(bF(aL), [IntegerEntry(v, el)]))
949+@Callable(aN)
950+func keepLimitForFirstHarvest (eo) = valueOrElse(bG(), valueOrElse(bI(aN), [IntegerEntry(w, eo)]))
942951
943952
944953
945-@Callable(aL)
946-func stakeUnstake (bL,bN,em) = if ((aL.caller != this))
954+@Callable(aN)
955+func stakeUnstake (bO,bQ,ep) = if ((aN.caller != this))
947956 then throw("Only contract itself can invoke this function")
948957 else {
949- let en = bM(bL, bN, fromBase58String(em))
950- let bP = en._1
951- let eo = en._2
952- let ep = en._3
953- let eq = en._4
954- let er = invoke(eo, bP, ep, eq)
955- if ((er == er))
958+ let eq = bP(bO, bQ, fromBase58String(ep))
959+ let bS = eq._1
960+ let er = eq._2
961+ let es = eq._3
962+ let et = eq._4
963+ let eu = invoke(er, bS, es, et)
964+ if ((eu == eu))
956965 then nil
957966 else throw("Strict value is not equal to itself.")
958967 }
959968
960969
961970
962-@Callable(aL)
963-func replenishWithTwoTokens () = valueOrElse(bE(), ch(aL, false, 0))
971+@Callable(aN)
972+func replenishWithTwoTokens () = valueOrElse(bG(), valueOrElse(bH(), ck(aN, false, 0)))
964973
965974
966975
967-@Callable(aL)
968-func replenishWithOneToken (cL,cM) = valueOrElse(bE(), cK(aL, cL, cM, false, 0))
976+@Callable(aN)
977+func replenishWithOneToken (cO,cP) = valueOrElse(bG(), valueOrElse(bH(), cN(aN, cO, cP, false, 0)))
969978
970979
971980
972-@Callable(aL)
973-func withdraw () = valueOrElse(bE(), do(aL, 0))
981+@Callable(aN)
982+func withdraw () = valueOrElse(bG(), dr(aN, 0))
974983
975984
976-@Verifier(es)
977-func et () = {
978- let eu = {
979- let ev = if (sigVerify(es.bodyBytes, es.proofs[0], Q))
985+@Verifier(ev)
986+func ew () = {
987+ let ex = {
988+ let ey = if (sigVerify(ev.bodyBytes, ev.proofs[0], R))
980989 then 1
981990 else 0
982- let ew = if (sigVerify(es.bodyBytes, es.proofs[1], R))
991+ let ez = if (sigVerify(ev.bodyBytes, ev.proofs[1], S))
983992 then 1
984993 else 0
985- let ex = if (sigVerify(es.bodyBytes, es.proofs[2], S))
994+ let eA = if (sigVerify(ev.bodyBytes, ev.proofs[2], T))
986995 then 1
987996 else 0
988- (((ev + ew) + ex) >= 2)
997+ (((ey + ez) + eA) >= 2)
989998 }
990- let N = es
991- if ($isInstanceOf(N, "InvokeScriptTransaction"))
999+ let O = ev
1000+ if ($isInstanceOf(O, "InvokeScriptTransaction"))
9921001 then {
993- let er = N
994- let ey = if ((er.dApp == this))
995- then (er.function == "takeIntoAccountExtraFunds")
1002+ let eu = O
1003+ let eB = if ((eu.dApp == this))
1004+ then (eu.function == "takeIntoAccountExtraFunds")
9961005 else false
997- let ez = if (if (if (sigVerify(es.bodyBytes, es.proofs[0], Q))
1006+ let eC = if (if (if (sigVerify(ev.bodyBytes, ev.proofs[0], R))
9981007 then true
999- else sigVerify(es.bodyBytes, es.proofs[0], R))
1008+ else sigVerify(ev.bodyBytes, ev.proofs[0], S))
10001009 then true
1001- else sigVerify(es.bodyBytes, es.proofs[0], S))
1010+ else sigVerify(ev.bodyBytes, ev.proofs[0], T))
10021011 then true
1003- else sigVerify(es.bodyBytes, es.proofs[0], T)
1004- if (if (ey)
1005- then ez
1012+ else sigVerify(ev.bodyBytes, ev.proofs[0], U)
1013+ if (if (eB)
1014+ then eC
10061015 else false)
10071016 then true
1008- else eu
1017+ else ex
10091018 }
1010- else eu
1019+ else ex
10111020 }
10121021

github/deemru/w8io/873ac7e 
1304.36 ms