tx · 6jWLsSCEiqv863AGbEtUcMNChrGXDasyZyWVvYS9mYbp

3MqQg3GcBjjk5727HxPKgQfqGQwWm6QA2yL:  -0.13400000 Waves

2022.09.15 17:47 [2230367] smart account 3MqQg3GcBjjk5727HxPKgQfqGQwWm6QA2yL > SELF 0.00000000 Waves

{ "type": 13, "id": "6jWLsSCEiqv863AGbEtUcMNChrGXDasyZyWVvYS9mYbp", "fee": 13400000, "feeAssetId": null, "timestamp": 1663253115514, "version": 2, "chainId": 84, "sender": "3MqQg3GcBjjk5727HxPKgQfqGQwWm6QA2yL", "senderPublicKey": "4AhS4PdxdW6j71mgHB4Xq7Eewk1rPdm57kDHAwQTTweK", "proofs": [ "5Bfqz9wrme7c9WG15fefNGoH7pNTjCaPCQbmKSc92qfh2pYVB2fzea99L5S8TxJTBXHVLefwTbw6vvifrz7eRdgQ", "5ji6VeGoDuwZHgoTnaTmJC3L3WqtRzMi5PBBL5SRHyKTAUe35qDPNyLt6ZFyk8BT9wqqkhFUMqBQUhJaxRH3YnrW" ], "script": "base64:BgJpCAISBAoCEQESBgoECAEBBBIECgIBBBIECgIRCBIDCgEBEgYKBAgIAQgSBAoCCAESAwoBERIECgIRARIFCgMBCAgSBAoCCAESBQoDCAEBEgASABIECgIRBBIECgIBARIAEgASABIDCgEBXgAJUFJFQ0lTSU9OAMCEPQAFTUFYX0EAwIQ9AAxNQVhfQV9DSEFOR0UACgAIREVDSU1BTFMABgANTUlOX1JBTVBfVElNRQkAaQIAgKMFADwAB3ZlcnNpb24CBTMuMC4wAAhrVmVyc2lvbgIHdmVyc2lvbgAHa0Fzc2V0cwIJYXNzZXRfaWRzAA1rQXNzZXRCYWxhbmNlAghfYmFsYW5jZQAHa0FjdGl2ZQIGYWN0aXZlAAZrQ2F1c2UCDnNodXRkb3duX2NhdXNlAA1rU2hhcmVBc3NldElkAg5zaGFyZV9hc3NldF9pZAARa1NoYXJlQXNzZXRTdXBwbHkCEnNoYXJlX2Fzc2V0X3N1cHBseQAEa0ZlZQIKY29tbWlzc2lvbgASa0RBcHBUaHJlc2hvbGRDb2VmAhFkQXBwVGhyZXNob2xkQ29lZgAMa1VTRE5BZGRyZXNzAhhzdGFraW5nX3VzZG5uc2J0X2FkZHJlc3MACmtEaXNjb3VudHMCCWRpc2NvdW50cwAPa0Rpc2NvdW50VmFsdWVzAg9kaXNjb3VudF92YWx1ZXMADmtVc2VyU3dvcEluR292AgxfU1dPUF9hbW91bnQADWtGaXJzdEhhcnZlc3QCDWZpcnN0X2hhcnZlc3QAE2tGaXJzdEhhcnZlc3RIZWlnaHQCFGZpcnN0X2hhcnZlc3RfaGVpZ2h0AAtrU2hhcmVMaW1pdAIcc2hhcmVfbGltaXRfb25fZmlyc3RfaGFydmVzdAALa0Jhc2VQZXJpb2QCC2Jhc2VfcGVyaW9kAA1rUGVyaW9kTGVuZ3RoAg1wZXJpb2RfbGVuZ3RoAAxrU3RhcnRIZWlnaHQCDHN0YXJ0X2hlaWdodAANa0FkbWluUHViS2V5MQILYWRtaW5fcHViXzEADWtBZG1pblB1YktleTICC2FkbWluX3B1Yl8yAA1rQWRtaW5QdWJLZXkzAgthZG1pbl9wdWJfMwASa0FkbWluSW52b2tlUHViS2V5AhBhZG1pbl9pbnZva2VfcHViABBrTW9uZXlCb3hBZGRyZXNzAhFtb25leV9ib3hfYWRkcmVzcwALa0dvdkFkZHJlc3MCEmdvdmVybmFuY2VfYWRkcmVzcwAOa1ZvdGluZ0FkZHJlc3MCDnZvdGluZ19hZGRyZXNzAA9rRmFybWluZ0FkZHJlc3MCD2Zhcm1pbmdfYWRkcmVzcwARa0xQRmFybWluZ0FkZHJlc3MCCmxwX2Zhcm1pbmcABm9yYWNsZQkBB0FkZHJlc3MBARoBVOlFqh6QLzqu8boO5i6akl8amITh82KzCAETZ2V0QmFzZTU4RnJvbU9yYWNsZQEDa2V5BAckbWF0Y2gwCQCdCAIFBm9yYWNsZQUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQGc3RyaW5nBQckbWF0Y2gwCQDZBAEFBnN0cmluZwQHbm90aGluZwUHJG1hdGNoMAkAAgEJAKwCAgUDa2V5AghpcyBlbXB0eQAMYWRtaW5QdWJLZXkxCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtBZG1pblB1YktleTEADGFkbWluUHViS2V5MgkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ1rQWRtaW5QdWJLZXkyAAxhZG1pblB1YktleTMJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUNa0FkbWluUHViS2V5MwARYWRtaW5QdWJLZXlJbnZva2UJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUSa0FkbWluSW52b2tlUHViS2V5AA9tb25leUJveEFkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBRBrTW9uZXlCb3hBZGRyZXNzAApnb3ZBZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQULa0dvdkFkZHJlc3MAEnN0YWtpbmdVU0ROQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDGtVU0ROQWRkcmVzcwANdm90aW5nQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDmtWb3RpbmdBZGRyZXNzAA5mYXJtaW5nQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFD2tGYXJtaW5nQWRkcmVzcwAQbHBGYXJtaW5nQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFEWtMUEZhcm1pbmdBZGRyZXNzAARVU0ROASBvJKPKqzDcUimY6CxhWu5afyNNwi11u+mdqlTg0tAHwQANc3Rha2luZ0Fzc2V0cwkAzAgCCQDYBAEFBFVTRE4FA25pbAAKYmFzZVBlcmlvZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFDXZvdGluZ0FkZHJlc3MFC2tCYXNlUGVyaW9kAhFFbXB0eSBrQmFzZVBlcmlvZAALc3RhcnRIZWlnaHQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQ12b3RpbmdBZGRyZXNzBQxrU3RhcnRIZWlnaHQCEkVtcHR5IGtTdGFydEhlaWdodAAMcGVyaW9kTGVuZ3RoCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUNdm90aW5nQWRkcmVzcwUNa1BlcmlvZExlbmd0aAITRW1wdHkga1BlcmlvZExlbmd0aAAVZmlyc3RIYXJ2ZXN0RW5kUGVyaW9kCQBkAgkAZAIFCmJhc2VQZXJpb2QJAGkCCQBlAgUGaGVpZ2h0BQtzdGFydEhlaWdodAUMcGVyaW9kTGVuZ3RoAAMABmFjdGl2ZQkBEUBleHRyTmF0aXZlKDEwNTEpAgUEdGhpcwUHa0FjdGl2ZQAMc2hhcmVBc3NldElkCQDZBAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFDWtTaGFyZUFzc2V0SWQAC3NoYXJlU3VwcGx5CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBRFrU2hhcmVBc3NldFN1cHBseQAJZmVlU2NhbGU2AMCEPQADZmVlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQRrRmVlAA1mZWVHb3Zlcm5hbmNlCQBrAwAoBQlmZWVTY2FsZTYAZAAJaW5pdGlhbF9BCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAglpbml0aWFsX0EACGZ1dHVyZV9BCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAghmdXR1cmVfQQAOaW5pdGlhbF9BX3RpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwIOaW5pdGlhbF9BX3RpbWUAAAANZnV0dXJlX0FfdGltZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzAg1mdXR1cmVfQV90aW1lAAAACGFzc2V0SWRzCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFB2tBc3NldHMCASwABm5Db2lucwkAkAMBBQhhc3NldElkcwEHc3VzcGVuZAEFY2F1c2UJAMwIAgkBDEJvb2xlYW5FbnRyeQIFB2tBY3RpdmUHCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmtDYXVzZQUFY2F1c2UFA25pbAENdGhyb3dJc0FjdGl2ZQAJAAIBAhZEQXBwIGlzIGFscmVhZHkgYWN0aXZlAQhpc0FjdGl2ZQADBQZhY3RpdmUFBHVuaXQJAAIBAh9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50AQtpc0FkbWluQ2FsbAEBaQMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFDGFkbWluUHViS2V5MQkAzAgCBQxhZG1pblB1YktleTIJAMwIAgUMYWRtaW5QdWJLZXkzBQNuaWwIBQFpD2NhbGxlclB1YmxpY0tleQUEdW5pdAkAAgECIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgEKaXNTZWxmQ2FsbAEBaQMJAAACBQR0aGlzCAUBaQZjYWxsZXIFBHVuaXQJAAIBAitPbmx5IGNvbnRyYWN0IGl0c2VsZiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAARiaWcyCQC2AgEAAgAOYmxvY2tUaW1lc3RhbXAFBmhlaWdodAEGYXNzZXJ0AQFhAwUBYQcGARRjYWxjdWxhdGVGZWVEaXNjb3VudAEIdXNlckFkZHIEBHVzZXIEByRtYXRjaDAFCHVzZXJBZGRyAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEAXUFByRtYXRjaDAJAKUIAQUBdQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXUFByRtYXRjaDAFAXUJAAIBAhhVbmtub3cgdHlwZSBvZiB1c2VyIEFkZHIECnN3b3BBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUKZ292QWRkcmVzcwkArAICBQR1c2VyBQ5rVXNlclN3b3BJbkdvdgAABA5kaXNjb3VudFZhbHVlcwkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQZvcmFjbGUFD2tEaXNjb3VudFZhbHVlcwIBLAQJZGlzY291bnRzCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBm9yYWNsZQUKa0Rpc2NvdW50cwIBLAMDCQBnAgUKc3dvcEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAAJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAQUKc3dvcEFtb3VudAcJAGUCBQlmZWVTY2FsZTYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlkaXNjb3VudHMAAAMDCQBnAgUKc3dvcEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAEJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAgUKc3dvcEFtb3VudAcJAGUCBQlmZWVTY2FsZTYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlkaXNjb3VudHMAAQMDCQBnAgUKc3dvcEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAIJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAwUKc3dvcEFtb3VudAcJAGUCBQlmZWVTY2FsZTYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlkaXNjb3VudHMAAgMDCQBnAgUKc3dvcEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAMJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMABAUKc3dvcEFtb3VudAcJAGUCBQlmZWVTY2FsZTYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlkaXNjb3VudHMAAwMJAGcCBQpzd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMABAkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwAEBQlmZWVTY2FsZTYBAl9BAAQCdDEF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ZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8ECnhwX3JlZHVjZWQIBQ0kdDAxMDY5OTEwNzYzAl8xBAVpbmRleAgFDSR0MDEwNjk5MTA3NjMCXzIEDHhwX3JlZHVjZWRfaQkAkQMCBQp4cF9yZWR1Y2VkBQFpBAJkeQkAZQIJAGUCBQx4cF9yZWR1Y2VkX2kJAQdnZXRfeV9EBAUDYW1wBQFpBQp4cF9yZWR1Y2VkBQJEMQABCQCUCgIFAmR5CQBlAgUEZHlfMAUCZHkBDWdldFN0ckFzc2V0SWQBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCaWQFByRtYXRjaDAJANgEAQUCaWQDCQABAgUHJG1hdGNoMAIEVW5pdAQFd2F2ZXMFByRtYXRjaDACBVdBVkVTCQACAQILTWF0Y2ggZXJyb3IBGGNhbGNTdGFraW5nRnVuY0FuZEFkZHJlcwIFc3Rha2UHYXNzZXRJZAMFBXN0YWtlCQCUCgICDGxvY2tOZXV0cmlubwUSc3Rha2luZ1VTRE5BZGRyZXNzCQCUCgICDnVubG9ja05ldXRyaW5vBRJzdGFraW5nVVNETkFkZHJlc3MBEWNhbGNTdGFraW5nUGFyYW1zAwVzdGFrZQZhbW91bnQHYXNzZXRJZAMFBXN0YWtlBA0kdDAxMTMyNzExMzkzCQEYY2FsY1N0YWtpbmdGdW5jQW5kQWRkcmVzAgUFc3Rha2UFB2Fzc2V0SWQEBGNhbGwIBQ0kdDAxMTMyNzExMzkzAl8xBAtzdGFraW5nQWRkcggFDSR0MDExMzI3MTEzOTMCXzIJAJYKBAUEY2FsbAULc3Rha2luZ0FkZHIFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUHYXNzZXRJZAUGYW1vdW50BQNuaWwEDSR0MDExNDc5MTE1NDUJARhjYWxjU3Rha2luZ0Z1bmNBbmRBZGRyZXMCBQVzdGFrZQUHYXNzZXRJZAQEY2FsbAgFDSR0MDExNDc5MTE1NDUCXzEEC3N0YWtpbmdBZGRyCAUNJHQwMTE0NzkxMTU0NQJfMgkAlgoEBQRjYWxsBQtzdGFraW5nQWRkcgkAzAgCBQZhbW91bnQJAMwIAgkA2AQBBQdhc3NldElkBQNuaWwFA25pbAEFc3Rha2UCBmFtb3VudA1hc3NldElkU3RyaW5nAwkBD2NvbnRhaW5zRWxlbWVudAIFDXN0YWtpbmdBc3NldHMFDWFzc2V0SWRTdHJpbmcEDSR0MDExNzMyMTE4MzQJARFjYWxjU3Rha2luZ1BhcmFtcwMGBQZhbW91bnQJANkEAQUNYXNzZXRJZFN0cmluZwQEY2FsbAgFDSR0MDExNzMyMTE4MzQCXzEEBGFkZHIIBQ0kdDAxMTczMjExODM0Al8yBAZwYXJhbXMIBQ0kdDAxMTczMjExODM0Al8zBAhwYXltZW50cwgFDSR0MDExNzMyMTE4MzQCXzQJAPwHBAUEYWRkcgUEY2FsbAUGcGFyYW1zBQhwYXltZW50cwAAAQd1bnN0YWtlAgZhbW91bnQNYXNzZXRJZFN0cmluZwMJAQ9jb250YWluc0VsZW1lbnQCBQ1zdGFraW5nQXNzZXRzBQ1hc3NldElkU3RyaW5nBA0kdDAxMjAxOTEyMTIyCQERY2FsY1N0YWtpbmdQYXJhbXMDBwUGYW1vdW50CQDZBAEFDWFzc2V0SWRTdHJpbmcEBGNhbGwIBQ0kdDAxMjAxOTEyMTIyAl8xBARhZGRyCAUNJHQwMTIwMTkxMjEyMgJfMgQGcGFyYW1zCAUNJHQwMTIwMTkxMjEyMgJfMwQIcGF5bWVudHMIBQ0kdDAxMjAxOTEyMTIyAl80CQD8BwQFBGFkZHIFBGNhbGwFBnBhcmFtcwUIcGF5bWVudHMAAAEMc3Rha2VkQW1vdW50AQdhc3NldElkBBZzdGFrZWRBbW91bnRDYWxjdWxhdGVkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEA2FJZAUHJG1hdGNoMAMJAAACBQNhSWQFBFVTRE4JAJoIAgUSc3Rha2luZ1VTRE5BZGRyZXNzCQCsAgIJAKwCAgkArAICAgxycGRfYmFsYW5jZV8JANgEAQUDYUlkAgFfCQClCAEFBHRoaXMAAAMJAAECBQckbWF0Y2gwAgRVbml0AAAJAAIBAgtNYXRjaCBlcnJvcgQHJG1hdGNoMAUWc3Rha2VkQW1vdW50Q2FsY3VsYXRlZAMJAAECBQckbWF0Y2gwAgNJbnQEAWkFByRtYXRjaDAFAWkAAAEPY2hlY2tTdXNwaWNpb3VzAAQQY29udHJhY3RCYWxhbmNlcwkBA194cAAKAQxjaGVja0JhbGFuY2UCA2FjYwdhc3NldElkBA0kdDAxMjczMzEyNzU4BQNhY2MECnN1c3BpY2lvdXMIBQ0kdDAxMjczMzEyNzU4Al8xBAFpCAUNJHQwMTI3MzMxMjc1OAJfMgMFCnN1c3BpY2lvdXMJAJQKAgUKc3VzcGljaW91cwUBaQQIYUJhbGFuY2UJAGQCCQDwBwIFBHRoaXMJANkEAQUHYXNzZXRJZAkBDHN0YWtlZEFtb3VudAEJANkEAQUHYXNzZXRJZAMJAGYCCQCRAwIFEGNvbnRyYWN0QmFsYW5jZXMFAWkFCGFCYWxhbmNlCQCUCgIGBQFpCQCUCgIHCQBkAgUBaQABCgACJGwFCGFzc2V0SWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBwAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQxjaGVja0JhbGFuY2UCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPARFzdXNwZW5kU3VzcGljaW91cwEBaQkBB3N1c3BlbmQBCQCsAgICHVN1c3BpY2lvdXMgc3RhdGUgd2l0aCBhc3NldDogCQCRAwIFCGFzc2V0SWRzBQFpAQ5yZXR1cm5QYXltZW50cwIGY2FsbGVyCHBheW1lbnRzCgENcGFyc2VQYXltZW50cwIDYWNjB3BheW1lbnQJAM0IAgUDYWNjCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIIBQdwYXltZW50BmFtb3VudAgFB3BheW1lbnQHYXNzZXRJZAoAAiRsBQhwYXltZW50cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQENcGFyc2VQYXltZW50cwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8BEmNoZWNrREFwcFRocmVzaG9sZAELbmV3QmFsYW5jZXMEEWRBcHBUaHJlc2hvbGRDb2VmCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwUSa0RBcHBUaHJlc2hvbGRDb2VmAhhObyBkQXBwVGhyZXNob2xkQ29lZiBrZXkEDnRocmVzaG9sZFNjYWxlAJBOBAptYXhCYWxhbmNlCQCWAwEFC25ld0JhbGFuY2VzBAptaW5CYWxhbmNlCQCXAwEFC25ld0JhbGFuY2VzBAVyYXRpbwkAawMFCm1heEJhbGFuY2UFDnRocmVzaG9sZFNjYWxlBQptaW5CYWxhbmNlAwkAZgIFBXJhdGlvCQBoAgURZEFwcFRocmVzaG9sZENvZWYFDnRocmVzaG9sZFNjYWxlCQACAQI4TmV3IGJhbGFuY2UgaW4gYXNzZXRzIG9mIHRoZSBEQXBwIGlzIGxlc3MgdGhhbiB0aHJlc2hvbGQHAQpjaGVja0NvaW5zAQhhc3NldElkcwQFY29pbnMJALUJAgUIYXNzZXRJZHMCASwKAQljaGVja0NvaW4CBWVycm9yB2Fzc2V0SWQEBWFzc2V0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJANkEAQUHYXNzZXRJZAkArAICAhJmcm9tQmFzZTU4U3RyaW5nOiAFB2Fzc2V0SWQECGRlY2ltYWxzCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFBWFzc2V0CQCsAgICC2Fzc2V0SW5mbzogBQdhc3NldElkCGRlY2ltYWxzAwkBAiE9AgUIZGVjaW1hbHMFCERFQ0lNQUxTCQACAQIOd3JvbmcgZGVjaW1hbHMHCgACJGwFBWNvaW5zCgACJHMJAJADAQUCJGwKAAUkYWNjMAcKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCWNoZWNrQ29pbgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8UA21zZwEBRAICeHADYW1wBAFECQEOZ2V0X0RfaW50ZXJuYWwCBQJ4cAUDYW1wCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQICAUQFAUQFA25pbAUBRANtc2cBBGluaXQECGFzc2V0SWRzAl9BEl9kQXBwVGhyZXNob2xkQ29lZgxmaXJzdEhhcnZlc3QDCQEBIQEJAJ4IAQUEdGhpcwkAAgECE0FscmVhZHkgaW5pdGlhbGl6ZWQDCQBnAgAABQJfQQkAAgECFEFtcCBtdXN0IGJlIG11c3QgPiAwAwkAZwIAAAUSX2RBcHBUaHJlc2hvbGRDb2VmCQACAQIfZEFwcCBUaHJlc2hvbGQgQ29lZiBtdXN0IGJlID4gMAQJc2hhcmVOYW1lAgtzX011bHRpX1VTRAQQc2hhcmVEZXNjcmlwdGlvbgkArAICAkJTaGFyZVRva2VuIG9mIFN3b3BGaSBwcm90b2NvbCBmb3IgTXVsdGlTdGFibGUgVVNEIHBvb2wgYXQgYWRkcmVzcyAJAKUIAQUEdGhpcwQKaXNzdWVUb2tlbgkAwggFBQlzaGFyZU5hbWUFEHNoYXJlRGVzY3JpcHRpb24AAAAGBgQHdG9rZW5JZAkAuAgBBQppc3N1ZVRva2VuAwkBCmNoZWNrQ29pbnMBBQhhc3NldElkcwkBBXRocm93AAQJYmFzZUVudHJ5CQDMCAIJAQtTdHJpbmdFbnRyeQIFCGtWZXJzaW9uBQd2ZXJzaW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIFB2tBc3NldHMFCGFzc2V0SWRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAglpbml0aWFsX0EFAl9BCQDMCAIJAQxJbnRlZ2VyRW50cnkCAghmdXR1cmVfQQUCX0EJAMwIAgkBDEludGVnZXJFbnRyeQIFBGtGZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBm9yYWNsZQINYmFzZV9mZWVfZmxhdAkAzAgCCQELU3RyaW5nRW50cnkCBQ1rU2hhcmVBc3NldElkCQDYBAEFB3Rva2VuSWQJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtTaGFyZUFzc2V0U3VwcGx5AAAJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtEQXBwVGhyZXNob2xkQ29lZgUSX2RBcHBUaHJlc2hvbGRDb2VmCQDMCAIJAQxCb29sZWFuRW50cnkCBQdrQWN0aXZlBgkAzAgCBQppc3N1ZVRva2VuBQNuaWwDBQxmaXJzdEhhcnZlc3QJAM4IAgUJYmFzZUVudHJ5CQDMCAIJAQxCb29sZWFuRW50cnkCBQ1rRmlyc3RIYXJ2ZXN0BQxmaXJzdEhhcnZlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tGaXJzdEhhcnZlc3RIZWlnaHQJAGQCBQtzdGFydEhlaWdodAkAaAIFFWZpcnN0SGFydmVzdEVuZFBlcmlvZAUMcGVyaW9kTGVuZ3RoBQNuaWwFCWJhc2VFbnRyeQNtc2cBDGFkZExpcXVpZGl0eQINbWluTWludEFtb3VudAxzdGFrZUZhcm1pbmcJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAEA2FtcAkBAl9BAAQCeHAJAQNfeHAABAJEMAMJAAACBQtzaGFyZVN1cHBseQAAAAAJAQdnZXRETWVtAgUCeHAFA2FtcAQIcGF5bWVudHMIBQNtc2cIcGF5bWVudHMEDHBheW1lbnRzU2l6ZQkAkAMBBQhwYXltZW50cwoBDXZhbGlkUGF5bWVudHMBAW4DCQBmAgUMcGF5bWVudHNTaXplBQZuQ29pbnMJAAIBCQCsAgICEHBheW1lbnRzIHNpemUgPiAJAKQDAQUGbkNvaW5zAwkAZgIAAQUMcGF5bWVudHNTaXplCQACAQIRcGF5bWVudHMgc2l6ZSA8IDEDAwkAAAIFC3NoYXJlU3VwcGx5AAAJAQIhPQIFBm5Db2lucwUMcGF5bWVudHNTaXplBwkAAgECImluaXRpYWwgZGVwb3NpdCByZXF1aXJlcyBhbGwgY29pbnMKAQxwYXltYW50VmFsaWQCA2FjYwdwYXltZW50AwkBD2NvbnRhaW5zRWxlbWVudAIFCGFzc2V0SWRzCQENZ2V0U3RyQXNzZXRJZAEIBQdwYXltZW50B2Fzc2V0SWQGCQACAQIYSW52YWxpZCBhc3NldCBpbiBwYXltZW50CgACJGwFCHBheW1lbnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAcKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDHBheW1hbnRWYWxpZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8DCQEBIQEJAQ12YWxpZFBheW1lbnRzAQUMcGF5bWVudHNTaXplCQEFdGhyb3cABApzdXNwaWNpb3VzCQEPY2hlY2tTdXNwaWNpb3VzAAMIBQpzdXNwaWNpb3VzAl8xCQDOCAIJARFzdXNwZW5kU3VzcGljaW91cwEIBQpzdXNwaWNpb3VzAl8yCQEOcmV0dXJuUGF5bWVudHMCCAUDbXNnBmNhbGxlcgUIcGF5bWVudHMKAQ1wYXJzZVBheW1lbnRzAgNhY2MHYXNzZXRJZAQNJHQwMTcwNjYxNzA5NQUDYWNjBAtuZXdCYWxhbmNlcwgFDSR0MDE3MDY2MTcwOTUCXzEEAWkIBQ0kdDAxNzA2NjE3MDk1Al8yBAFqCAUNJHQwMTcwNjYxNzA5NQJfMwMDCQBmAgUMcGF5bWVudHNTaXplBQFqCQAAAgkBDWdldFN0ckFzc2V0SWQBCAkAkQMCBQhwYXltZW50cwUBagdhc3NldElkBQdhc3NldElkBwkAlQoDCQDNCAIFC25ld0JhbGFuY2VzCQBkAgkAkQMCBQJ4cAUBaQgJAJEDAgUIcGF5bWVudHMFAWoGYW1vdW50CQBkAgUBaQABCQBkAgUBagABCQCVCgMJAM0IAgULbmV3QmFsYW5jZXMJAJEDAgUCeHAFAWkJAGQCBQFpAAEFAWoEDSR0MDE3MzE1MTc0MDEKAAIkbAUIYXNzZXRJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDXBhcnNlUGF5bWVudHMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPBAtuZXdCYWxhbmNlcwgFDSR0MDE3MzE1MTc0MDECXzEEAWsIBQ0kdDAxNzMxNTE3NDAxAl8yBA5wYXJzZWRQYXltZW50cwgFDSR0MDE3MzE1MTc0MDECXzMDCQBmAgUMcGF5bWVudHNTaXplBQ5wYXJzZWRQYXltZW50cwkAAgECF0luY29yZWN0IHBheW1lbnRzIG9yZGVyAwkBEmNoZWNrREFwcFRocmVzaG9sZAEFC25ld0JhbGFuY2VzCQEFdGhyb3cABAJEMQkBB2dldERNZW0CBQtuZXdCYWxhbmNlcwUDYW1wAwkBBmFzc2VydAEJAGYCBQJEMQUCRDAJAAIBAgdEMSA+IEQwBAtmZWVEaXNjb3VudAkBFGNhbGN1bGF0ZUZlZURpc2NvdW50AQgFA21zZwZjYWxsZXIKARFjYWxjU2NyaXB0QWN0aW9ucwIDYWNjCm5ld0JhbGFuY2UEDSR0MDE3ODAyMTc4NDMFA2FjYwQLaW52QmFsYW5jZXMIBQ0kdDAxNzgwMjE3ODQzAl8xBA1zY3JpcHRBY3Rpb25zCAUNJHQwMTc4MDIxNzg0MwJfMgQBaQgFDSR0MDE3ODAyMTc4NDMCXzMDCQBmAgULc2hhcmVTdXBwbHkAAAQEX2ZlZQkAaQIJAGgCCQBuBAUDZmVlBQtmZWVEaXNjb3VudAUJZmVlU2NhbGU2BQdDRUlMSU5HBQZuQ29pbnMJAGgCAAQJAGUCBQZuQ29pbnMAAQQEZmVlcwQMaWRlYWxCYWxhbmNlCQBrAwUCRDEJAJEDAgUCeHAFAWkFAkQwBApkaWZmZXJlbmNlAwkAZgIFDGlkZWFsQmFsYW5jZQUKbmV3QmFsYW5jZQkAZQIFDGlkZWFsQmFsYW5jZQUKbmV3QmFsYW5jZQkAZQIFCm5ld0JhbGFuY2UFDGlkZWFsQmFsYW5jZQkAawMFBF9mZWUFCmRpZmZlcmVuY2UFCWZlZVNjYWxlNgQOZ292ZXJuYW5jZUZlZXMJAGsDBQRmZWVzBQ1mZWVHb3Zlcm5hbmNlBQlmZWVTY2FsZTYEDGZpbmFsQmFsYW5jZQkAZQIFCm5ld0JhbGFuY2UFBGZlZXMEEGludmFyaWFudEJhbGFuY2UJAGUCBQpuZXdCYWxhbmNlBQRmZWVzBANwbXQJAGUCBQpuZXdCYWxhbmNlCQCRAwIFAnhwBQFpBAZscEZlZXMJAGUCBQRmZWVzBQ5nb3Zlcm5hbmNlRmVlcwQDaW52AwkAZgIFA3BtdAAACQEFc3Rha2UCCQBlAgUDcG10BQRmZWVzCQCRAwIFCGFzc2V0SWRzBQFpCQEHdW5zdGFrZQIFBGZlZXMJAJEDAgUIYXNzZXRJZHMFAWkDCQAAAgUDaW52BQNpbnYEB2FpcmRyb3ADCQBmAgUGbHBGZWVzAAAJAPwHBAUQbHBGYXJtaW5nQWRkcmVzcwIHYWlyRHJvcAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQDZBAEJAJEDAgUIYXNzZXRJZHMFAWkFBmxwRmVlcwUDbmlsAAADCQAAAgUHYWlyZHJvcAUHYWlyZHJvcAkAlQoDCQDNCAIFC2ludkJhbGFuY2VzBRBpbnZhcmlhbnRCYWxhbmNlCQDOCAIFDXNjcmlwdEFjdGlvbnMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUPbW9uZXlCb3hBZGRyZXNzBQ5nb3Zlcm5hbmNlRmVlcwkA2QQBCQCRAwIFCGFzc2V0SWRzBQFpCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAJEDAgUIYXNzZXRJZHMFAWkFDWtBc3NldEJhbGFuY2UFDGZpbmFsQmFsYW5jZQUDbmlsCQBkAgUBaQABCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBANpbnYJAQVzdGFrZQIFCm5ld0JhbGFuY2UJAJEDAgUIYXNzZXRJZHMFAWkDCQAAAgUDaW52BQNpbnYJAJUKAwkAzQgCBQtpbnZCYWxhbmNlcwUKbmV3QmFsYW5jZQkAzQgCBQ1zY3JpcHRBY3Rpb25zCQEMSW50ZWdlckVudHJ5AgkArAICCQCRAwIFCGFzc2V0SWRzBQFpBQ1rQXNzZXRCYWxhbmNlBQpuZXdCYWxhbmNlCQBkAgUBaQABCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBA0kdDAxOTU0ODE5NjM2CgACJGwFC25ld0JhbGFuY2VzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwFA25pbAAACgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARFjYWxjU2NyaXB0QWN0aW9ucwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8EC2ludkJhbGFuY2VzCAUNJHQwMTk1NDgxOTYzNgJfMQQNc2NyaXB0QWN0aW9ucwgFDSR0MDE5NTQ4MTk2MzYCXzIEAkQyCQEHZ2V0RE1lbQIFC2ludkJhbGFuY2VzBQNhbXAEC21pbnRfYW1vdW50AwkAAAIFC3NoYXJlU3VwcGx5AAAFAkQxCQBrAwULc2hhcmVTdXBwbHkJAGUCBQJEMgUCRDAFAkQwAwkBBmFzc2VydAEJAGcCBQttaW50X2Ftb3VudAUNbWluTWludEFtb3VudAkAAgECFFNsaXBwYWdlIHNjcmV3ZWQgeW91AwUMc3Rha2VGYXJtaW5nBAJyZQkA/AcEBQR0aGlzAgxyZWlzc3VlU2hhcmUJAMwIAgULbWludF9hbW91bnQFA25pbAUDbmlsAwkAAAIFAnJlBQJyZQQBcwkA/AcEBQ5mYXJtaW5nQWRkcmVzcwIPbG9ja1NoYXJlVG9rZW5zCQDMCAIJAKUIAQUEdGhpcwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQxzaGFyZUFzc2V0SWQFC21pbnRfYW1vdW50BQNuaWwDCQAAAgUBcwUBcwkAzQgCBQ1zY3JpcHRBY3Rpb25zCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkJAGQCBQtzaGFyZVN1cHBseQULbWludF9hbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAM4IAgUNc2NyaXB0QWN0aW9ucwkAzAgCCQEHUmVpc3N1ZQMFDHNoYXJlQXNzZXRJZAULbWludF9hbW91bnQGCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQNtc2cGY2FsbGVyBQttaW50X2Ftb3VudAUMc2hhcmVBc3NldElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrU2hhcmVBc3NldFN1cHBseQkAZAIFC3NoYXJlU3VwcGx5BQttaW50X2Ftb3VudAUDbmlsA21zZwEOY2FsY01pbnRBbW91bnQCC25ld0JhbGFuY2VzBHVzZXIEA2FtcAkBAl9BAAQCeHAJAQNfeHAABAJEMQkBB2dldERNZW0CBQtuZXdCYWxhbmNlcwUDYW1wAwkAAAIFC3NoYXJlU3VwcGx5AAAJAJQKAgUDbmlsBQJEMQQCRDAJAQdnZXRETWVtAgUCeHAFA2FtcAQLZmVlRGlzY291bnQJARRjYWxjdWxhdGVGZWVEaXNjb3VudAEFBHVzZXIKAQ9jYWxjSW52QmFsYW5jZXMCA2FjYwpuZXdCYWxhbmNlBA0kdDAyMDgyNTIwODUxBQNhY2MEC2ludkJhbGFuY2VzCAUNJHQwMjA4MjUyMDg1MQJfMQQBaQgFDSR0MDIwODI1MjA4NTECXzIEBF9mZWUJAGkCCQBoAgkAbgQFA2ZlZQULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwUGbkNvaW5zCQBoAgAECQBlAgUGbkNvaW5zAAEEBGZlZXMEDGlkZWFsQmFsYW5jZQkAawMFAkQxCQCRAwIFAnhwBQFpBQJEMAQKZGlmZmVyZW5jZQMJAGYCBQxpZGVhbEJhbGFuY2UFCm5ld0JhbGFuY2UJAGUCBQxpZGVhbEJhbGFuY2UFCm5ld0JhbGFuY2UJAGUCBQpuZXdCYWxhbmNlBQxpZGVhbEJhbGFuY2UJAGsDBQRfZmVlBQpkaWZmZXJlbmNlBQlmZWVTY2FsZTYEEGludmFyaWFudEJhbGFuY2UJAGUCBQpuZXdCYWxhbmNlBQRmZWVzCQCUCgIJAM0IAgULaW52QmFsYW5jZXMFEGludmFyaWFudEJhbGFuY2UJAGQCBQFpAAEEDSR0MDIxNDUzMjE1MjMKAAIkbAULbmV3QmFsYW5jZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ9jYWxjSW52QmFsYW5jZXMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPBAtpbnZCYWxhbmNlcwgFDSR0MDIxNDUzMjE1MjMCXzEEAWsIBQ0kdDAyMTQ1MzIxNTIzAl8yBAJEMgkBB2dldERNZW0CBQtpbnZCYWxhbmNlcwUDYW1wBAptaW50QW1vdW50CQBrAwULc2hhcmVTdXBwbHkJAGUCBQJEMgUCRDAFAkQwCQCUCgIFA25pbAUKbWludEFtb3VudANtc2cBDHJlaXNzdWVTaGFyZQEGYW1vdW50CQELdmFsdWVPckVsc2UCCQEKaXNTZWxmQ2FsbAEFA21zZwkAzAgCCQEHUmVpc3N1ZQMFDHNoYXJlQXNzZXRJZAUGYW1vdW50BgUDbmlsA21zZwEFZ2V0RHkECWFzc2V0RnJvbQdhc3NldFRvAmR4C3VzZXJBZGRyZXNzBAJ4cAkBA194cAAECWZyb21JbmRleAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCGFzc2V0SWRzBQlhc3NldEZyb20CEHVua25vd24gdG9rZW4gaW4EB3RvSW5kZXgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQhhc3NldElkcwUHYXNzZXRUbwIRdW5rbm93biB0b2tlbiBvdXQEAXgJAGQCCQCRAwIFAnhwBQlmcm9tSW5kZXgFAmR4BAF5CQEEZ2V0WQQFCWZyb21JbmRleAUHdG9JbmRleAUBeAUCeHAEAmR5CQBlAgkAZQIJAJEDAgUCeHAFB3RvSW5kZXgFAXkAAQQLZmVlRGlzY291bnQJARRjYWxjdWxhdGVGZWVEaXNjb3VudAEJAQdBZGRyZXNzAQkA2QQBBQt1c2VyQWRkcmVzcwQEX2ZlZQkAawMJAG4EBQNmZWUFC2ZlZURpc2NvdW50BQlmZWVTY2FsZTYFB0NFSUxJTkcFAmR5BQlmZWVTY2FsZTYJAJQKAgUDbmlsCQCUCgIJAGUCBQJkeQUEX2ZlZQUEX2ZlZQNtc2cBCGV4Y2hhbmdlAgh0b2tlbk91dAZtaW5fZHkJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQADCQECIT0CCQCQAwEIBQNtc2cIcGF5bWVudHMAAQkAAgECE3NpemUocGF5bWVudHMpICE9IDEECnN1c3BpY2lvdXMJAQ9jaGVja1N1c3BpY2lvdXMAAwgFCnN1c3BpY2lvdXMCXzEJAM4IAgkBEXN1c3BlbmRTdXNwaWNpb3VzAQgFCnN1c3BpY2lvdXMCXzIJAQ5yZXR1cm5QYXltZW50cwIIBQNtc2cGY2FsbGVyCAUDbXNnCHBheW1lbnRzBAdwYXltZW50CQCRAwIIBQNtc2cIcGF5bWVudHMAAAQHdG9rZW5JbgkBDWdldFN0ckFzc2V0SWQBCAUHcGF5bWVudAdhc3NldElkBAt0b2tlbk91dEI1OAkA2QQBBQh0b2tlbk91dAQCZHgIBQdwYXltZW50BmFtb3VudAQJZnJvbUluZGV4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUIYXNzZXRJZHMFB3Rva2VuSW4CEHVua25vd24gdG9rZW4gaW4EB3RvSW5kZXgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQhhc3NldElkcwUIdG9rZW5PdXQCEXVua25vd24gdG9rZW4gb3V0BAJ4cAkBA194cAAEAXgJAGQCCQCRAwIFAnhwBQlmcm9tSW5kZXgFAmR4BAF5CQEEZ2V0WQQFCWZyb21JbmRleAUHdG9JbmRleAUBeAUCeHAEA19keQkAZQIJAGUCCQCRAwIFAnhwBQd0b0luZGV4BQF5AAEEC2ZlZURpc2NvdW50CQEUY2FsY3VsYXRlRmVlRGlzY291bnQBCAUDbXNnBmNhbGxlcgQEX2ZlZQkAawMFA19keQkAbgQFA2ZlZQULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwUJZmVlU2NhbGU2BAJkeQkAZQIFA19keQUEX2ZlZQQOZ292ZXJuYW5jZUZlZXMJAGsDBQRfZmVlBQ1mZWVHb3Zlcm5hbmNlBQlmZWVTY2FsZTYDCQEGYXNzZXJ0AQkAZwIFAmR5BQZtaW5fZHkJAAIBAi5FeGNoYW5nZSByZXN1bHRlZCBpbiBmZXdlciBjb2lucyB0aGFuIGV4cGVjdGVkCgEPbWFrZU5ld0JhbGFuY2VzAgNhY2MMdG9rZW5CYWxhbmNlBA0kdDAyMzU1ODIzNTg0BQNhY2MEC25ld0JhbGFuY2VzCAUNJHQwMjM1NTgyMzU4NAJfMQQBaQgFDSR0MDIzNTU4MjM1ODQCXzIDCQAAAgUBaQUJZnJvbUluZGV4CQCUCgIJAM0IAgULbmV3QmFsYW5jZXMJAGQCBQx0b2tlbkJhbGFuY2UFAmR4CQBkAgUBaQABAwkAAAIFAWkFB3RvSW5kZXgJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwkAZQIFDHRva2VuQmFsYW5jZQUDX2R5CQBkAgUBaQABCQCUCgIJAM0IAgULbmV3QmFsYW5jZXMFDHRva2VuQmFsYW5jZQkAZAIFAWkAAQQNJHQwMjM4MzUyMzg5NgoAAiRsBQJ4cAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBD21ha2VOZXdCYWxhbmNlcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8EC25ld0JhbGFuY2VzCAUNJHQwMjM4MzUyMzg5NgJfMQQBaQgFDSR0MDIzODM1MjM4OTYCXzIDCQESY2hlY2tEQXBwVGhyZXNob2xkAQULbmV3QmFsYW5jZXMJAQV0aHJvdwAEAXMJAQVzdGFrZQIIBQdwYXltZW50BmFtb3VudAkBDWdldFN0ckFzc2V0SWQBCAUHcGF5bWVudAdhc3NldElkAwkAAAIFAXMFAXMEAnVzCQEHdW5zdGFrZQIFA19keQUIdG9rZW5PdXQDCQAAAgUCdXMFAnVzBAZscEZlZXMJAGUCBQRfZmVlBQ5nb3Zlcm5hbmNlRmVlcwQHYWlyZHJvcAMJAGYCBQZscEZlZXMAAAkA/AcEBRBscEZhcm1pbmdBZGRyZXNzAgdhaXJEcm9wBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFC3Rva2VuT3V0QjU4BQZscEZlZXMFA25pbAAAAwkAAAIFB2FpcmRyb3AFB2FpcmRyb3AJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQd0b2tlbkluBQ1rQXNzZXRCYWxhbmNlBQF4CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHRva2VuT3V0BQ1rQXNzZXRCYWxhbmNlCQBlAgkAkQMCBQJ4cAUHdG9JbmRleAUDX2R5CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQNtc2cGY2FsbGVyBQJkeQULdG9rZW5PdXRCNTgJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUPbW9uZXlCb3hBZGRyZXNzBQ5nb3Zlcm5hbmNlRmVlcwULdG9rZW5PdXRCNTgFA25pbAkAzAgCBQJkeQkAzAgCBQt0b2tlbk91dEI1OAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuA21zZwEId2l0aGRyYXcBCm1pbkFtb3VudHMJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQADCQECIT0CCQCQAwEIBQNtc2cIcGF5bWVudHMAAQkAAgECE3NpemUocGF5bWVudHMpICE9IDEECXBtdEFtb3VudAgJAJEDAggFA21zZwhwYXltZW50cwAABmFtb3VudAQKcG10QXNzZXRJZAgJAJEDAggFA21zZwhwYXltZW50cwAAB2Fzc2V0SWQDCQECIT0CBQxzaGFyZUFzc2V0SWQFCnBtdEFzc2V0SWQJAAIBAhV1bmtub3duIHBheW1lbnQgdG9rZW4ECnN1c3BpY2lvdXMJAQ9jaGVja1N1c3BpY2lvdXMAAwgFCnN1c3BpY2lvdXMCXzEJAM4IAgkBEXN1c3BlbmRTdXNwaWNpb3VzAQgFCnN1c3BpY2lvdXMCXzIJAQ5yZXR1cm5QYXltZW50cwIIBQNtc2cMb3JpZ2luQ2FsbGVyCAUDbXNnCHBheW1lbnRzCgERY2FsY1NjcmlwdEFjdGlvbnMCA2FjYwdiYWxhbmNlBA0kdDAyNTE4NzI1MjE1BQNhY2MEDXNjcmlwdEFjdGlvbnMIBQ0kdDAyNTE4NzI1MjE1Al8xBAFpCAUNJHQwMjUxODcyNTIxNQJfMgQHd0Ftb3VudAkAawMFB2JhbGFuY2UFCXBtdEFtb3VudAULc2hhcmVTdXBwbHkDCQEGYXNzZXJ0AQkAZwIFB3dBbW91bnQJAJEDAgUKbWluQW1vdW50cwUBaQkAAgECMFdpdGhkcmF3YWwgcmVzdWx0ZWQgaW4gZmV3ZXIgY29pbnMgdGhhbiBleHBlY3RlZAQCdXMJAQd1bnN0YWtlAgUHd0Ftb3VudAkAkQMCBQhhc3NldElkcwUBaQMJAAACBQJ1cwUCdXMJAJQKAgkAzggCBQ1zY3JpcHRBY3Rpb25zCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAJEDAgUIYXNzZXRJZHMFAWkFDWtBc3NldEJhbGFuY2UJAGUCBQdiYWxhbmNlBQd3QW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQNtc2cMb3JpZ2luQ2FsbGVyBQd3QW1vdW50CQDZBAEJAJEDAgUIYXNzZXRJZHMFAWkFA25pbAkAZAIFAWkAAQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQNJHQwMjU3MDUyNTc3MwoAAiRsCQEDX3hwAAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEWNhbGNTY3JpcHRBY3Rpb25zAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwQNc2NyaXB0QWN0aW9ucwgFDSR0MDI1NzA1MjU3NzMCXzEEAWkIBQ0kdDAyNTcwNTI1NzczAl8yCQDOCAIFDXNjcmlwdEFjdGlvbnMJAMwIAgkBBEJ1cm4CBQxzaGFyZUFzc2V0SWQFCXBtdEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkJAGUCBQtzaGFyZVN1cHBseQUJcG10QW1vdW50BQNuaWwDbXNnARJ3aXRoZHJhd1dpdGhVbmxvY2sCCm1pbkFtb3VudHMMdW5sb2NrQW1vdW50CQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUAAwkAZwIAAAUMdW5sb2NrQW1vdW50CQACAQIeVW5sb2NrIGFtb3VudCBtdXN0IGJlIHBvc2l0aXZlBApzdXNwaWNpb3VzCQEPY2hlY2tTdXNwaWNpb3VzAAMIBQpzdXNwaWNpb3VzAl8xCQDOCAIJARFzdXNwZW5kU3VzcGljaW91cwEIBQpzdXNwaWNpb3VzAl8yCQEOcmV0dXJuUGF5bWVudHMCCAUDbXNnBmNhbGxlcggFA21zZwhwYXltZW50cwQJcG10QW1vdW50AwkAZgIJAJADAQgFA21zZwhwYXltZW50cwAAAwkBAiE9AgkAkAMBCAUDbXNnCHBheW1lbnRzAAEJAAIBAhNzaXplKHBheW1lbnRzKSAhPSAxBApwbXRBc3NldElkCAkAkQMCCAUDbXNnCHBheW1lbnRzAAAHYXNzZXRJZAMJAQIhPQIFDHNoYXJlQXNzZXRJZAUKcG10QXNzZXRJZAkAAgECFXVua25vd24gcGF5bWVudCB0b2tlbggJAJEDAggFA21zZwhwYXltZW50cwAABmFtb3VudAAABAZ1bmxvY2sJAPwHBAUOZmFybWluZ0FkZHJlc3MCE3dpdGhkcmF3U2hhcmVUb2tlbnMJAMwIAgkApQgBBQR0aGlzCQDMCAIFDHVubG9ja0Ftb3VudAUDbmlsBQNuaWwDCQAAAgUGdW5sb2NrBQZ1bmxvY2sEDndpdGhkcmF3QW1vdW50CQBkAgUJcG10QW1vdW50BQx1bmxvY2tBbW91bnQEA2ludgkA/AcEBQR0aGlzAgh3aXRoZHJhdwkAzAgCBQptaW5BbW91bnRzBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFDHNoYXJlQXNzZXRJZAUOd2l0aGRyYXdBbW91bnQFA25pbAMJAAACBQNpbnYFA2ludgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuA21zZwETY2FsY1dpdGhkcmF3T25lQ29pbgMLdG9rZW5BbW91bnQIdG9rZW5PdXQEdXNlcgQBaQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCGFzc2V0SWRzBQh0b2tlbk91dAIRdW5rbm93biB0b2tlbiBvdXQJAJQKAgUDbmlsCAkBFF9jYWxjV2l0aGRyYXdPbmVDb2luBAkBA194cAAFC3Rva2VuQW1vdW50BQFpCQEHQWRkcmVzcwEJANkEAQUEdXNlcgJfMQNtc2cBD3dpdGhkcmF3T25lQ29pbgIIdG9rZW5PdXQJbWluQW1vdW50CQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUAAwkBAiE9AgkAkAMBCAUDbXNnCHBheW1lbnRzAAEJAAIBAhNzaXplKHBheW1lbnRzKSAhPSAxBApzdXNwaWNpb3VzCQEPY2hlY2tTdXNwaWNpb3VzAAMIBQpzdXNwaWNpb3VzAl8xCQDOCAIJARFzdXNwZW5kU3VzcGljaW91cwEIBQpzdXNwaWNpb3VzAl8yCQEOcmV0dXJuUGF5bWVudHMCCAUDbXNnDG9yaWdpbkNhbGxlcggFA21zZwhwYXltZW50cwQJcG10QW1vdW50CAkAkQMCCAUDbXNnCHBheW1lbnRzAAAGYW1vdW50BApwbXRBc3NldElkCAkAkQMCCAUDbXNnCHBheW1lbnRzAAAHYXNzZXRJZAMJAQIhPQIFCnBtdEFzc2V0SWQFDHNoYXJlQXNzZXRJZAkAAgECDXVua25vd24gdG9rZW4ECG91dEluZGV4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUIYXNzZXRJZHMFCHRva2VuT3V0AhF1bmtub3duIHRva2VuIG91dAQLdG9rZW5PdXRCNTgJANkEAQUIdG9rZW5PdXQEAnhwCQEDX3hwAAQNJHQwMjc3MzcyNzgxOQkBFF9jYWxjV2l0aGRyYXdPbmVDb2luBAUCeHAFCXBtdEFtb3VudAUIb3V0SW5kZXgIBQNtc2cMb3JpZ2luQ2FsbGVyBAJkeQgFDSR0MDI3NzM3Mjc4MTkCXzEEBmR5X2ZlZQgFDSR0MDI3NzM3Mjc4MTkCXzIDCQEGYXNzZXJ0AQkAZwIFAmR5BQltaW5BbW91bnQJAAIBAhhOb3QgZW5vdWdoIGNvaW5zIHJlbW92ZWQEDmdvdmVybmFuY2VGZWVzCQBrAwUGZHlfZmVlBQ1mZWVHb3Zlcm5hbmNlBQlmZWVTY2FsZTYECmR5X2FuZF9mZWUJAGQCBQJkeQUGZHlfZmVlCgEPbWFrZU5ld0JhbGFuY2VzAgNhY2MMdG9rZW5CYWxhbmNlBA0kdDAyODA3NzI4MTAzBQNhY2MEC25ld0JhbGFuY2VzCAUNJHQwMjgwNzcyODEwMwJfMQQBaQgFDSR0MDI4MDc3MjgxMDMCXzIDCQAAAgUBaQUIb3V0SW5kZXgJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwkAZQIFDHRva2VuQmFsYW5jZQUKZHlfYW5kX2ZlZQkAZAIFAWkAAQkAlAoCCQDNCAIFC25ld0JhbGFuY2VzBQx0b2tlbkJhbGFuY2UJAGQCBQFpAAEEDSR0MDI4MjcwMjgzMzEKAAIkbAUCeHAKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ9tYWtlTmV3QmFsYW5jZXMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPBAtuZXdCYWxhbmNlcwgFDSR0MDI4MjcwMjgzMzECXzEEAXYIBQ0kdDAyODI3MDI4MzMxAl8yAwkBEmNoZWNrREFwcFRocmVzaG9sZAEFC25ld0JhbGFuY2VzCQEFdGhyb3cABAJ1cwkBB3Vuc3Rha2UCBQpkeV9hbmRfZmVlBQh0b2tlbk91dAMJAAACBQJ1cwUCdXMEBmxwRmVlcwkAZQIFBmR5X2ZlZQUOZ292ZXJuYW5jZUZlZXMEB2FpcmRyb3ADCQBmAgUGbHBGZWVzAAAJAPwHBAUQbHBGYXJtaW5nQWRkcmVzcwIHYWlyRHJvcAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQt0b2tlbk91dEI1OAUGbHBGZWVzBQNuaWwAAAMJAAACBQdhaXJkcm9wBQdhaXJkcm9wCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQNtc2cMb3JpZ2luQ2FsbGVyBQJkeQULdG9rZW5PdXRCNTgJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkAkQMCBQhhc3NldElkcwUIb3V0SW5kZXgFDWtBc3NldEJhbGFuY2UJAGUCCQCRAwIFAnhwBQhvdXRJbmRleAUKZHlfYW5kX2ZlZQkAzAgCCQEEQnVybgIFDHNoYXJlQXNzZXRJZAUJcG10QW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFD21vbmV5Qm94QWRkcmVzcwUOZ292ZXJuYW5jZUZlZXMFC3Rva2VuT3V0QjU4CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrU2hhcmVBc3NldFN1cHBseQkAZQIFC3NoYXJlU3VwcGx5BQlwbXRBbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgNtc2cBGXdpdGhkcmF3T25lQ29pbldpdGhVbmxvY2sDCHRva2VuT3V0CW1pbkFtb3VudAx1bmxvY2tBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQADCQBnAgAABQx1bmxvY2tBbW91bnQJAAIBAh5VbmxvY2sgYW1vdW50IG11c3QgYmUgcG9zaXRpdmUECnN1c3BpY2lvdXMJAQ9jaGVja1N1c3BpY2lvdXMAAwgFCnN1c3BpY2lvdXMCXzEJAM4IAgkBEXN1c3BlbmRTdXNwaWNpb3VzAQgFCnN1c3BpY2lvdXMCXzIJAQ5yZXR1cm5QYXltZW50cwIIBQNtc2cGY2FsbGVyCAUDbXNnCHBheW1lbnRzBAlwbXRBbW91bnQDCQBmAgkAkAMBCAUDbXNnCHBheW1lbnRzAAADCQECIT0CCQCQAwEIBQNtc2cIcGF5bWVudHMAAQkAAgECE3NpemUocGF5bWVudHMpICE9IDEECnBtdEFzc2V0SWQICQCRAwIIBQNtc2cIcGF5bWVudHMAAAdhc3NldElkAwkBAiE9AgUMc2hhcmVBc3NldElkBQpwbXRBc3NldElkCQACAQIVdW5rbm93biBwYXltZW50IHRva2VuCAkAkQMCCAUDbXNnCHBheW1lbnRzAAAGYW1vdW50AAAEBnVubG9jawkA/AcEBQ5mYXJtaW5nQWRkcmVzcwITd2l0aGRyYXdTaGFyZVRva2VucwkAzAgCCQClCAEFBHRoaXMJAMwIAgUMdW5sb2NrQW1vdW50BQNuaWwFA25pbAMJAAACBQZ1bmxvY2sFBnVubG9jawQOd2l0aGRyYXdBbW91bnQJAGQCBQlwbXRBbW91bnQFDHVubG9ja0Ftb3VudAQDaW52CQD8BwQFBHRoaXMCD3dpdGhkcmF3T25lQ29pbgkAzAgCBQh0b2tlbk91dAkAzAgCBQltaW5BbW91bnQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUMc2hhcmVBc3NldElkBQ53aXRoZHJhd0Ftb3VudAUDbmlsAwkAAAIFA2ludgUDaW52BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DbXNnAQFBAAkAlAoCBQNuaWwJAQJfQQADbXNnAQ9nZXRWaXJ0dWFsUHJpY2UABAFECQEFZ2V0X0QCCQEDX3hwAAkBAl9BAAkAlAoCBQNuaWwJAGsDBQFEBQlQUkVDSVNJT04FC3NoYXJlU3VwcGx5A21zZwEPY2FsY1Rva2VuQW1vdW50AgdhbW91bnRzB2RlcG9zaXQEA2FtcAkBAl9BAAQIYmFsYW5jZXMJAQNfeHAABAJEMAkBB2dldERNZW0CBQhiYWxhbmNlcwUDYW1wCgEPY2FsY05ld0JhbGFuY2VzAgNhY2MHYmFsYW5jZQQNJHQwMzAzNDgzMDM3NAUDYWNjBAtuZXdCYWxhbmNlcwgFDSR0MDMwMzQ4MzAzNzQCXzEEAWkIBQ0kdDAzMDM0ODMwMzc0Al8yBApuZXdCYWxhbmNlCQBkAgUHYmFsYW5jZQMFB2RlcG9zaXQJAJEDAgUHYW1vdW50cwUBaQkBAS0BCQCRAwIFB2Ftb3VudHMFAWkJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwUKbmV3QmFsYW5jZQkAZAIFAWkAAQQLbmV3QmFsYW5jZXMICgACJGwFCGJhbGFuY2VzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEPY2FsY05ld0JhbGFuY2VzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwJfMQQCRDEJAQdnZXRETWVtAgULbmV3QmFsYW5jZXMFA2FtcAQEZGlmZgMFB2RlcG9zaXQJAGUCBQJEMQUCRDAJAGUCBQJEMAUCRDEJAJQKAgUDbmlsCQBrAwUEZGlmZgULc2hhcmVTdXBwbHkFAkQwA21zZwEFcmFtcEECCF9mdXR1cmVBC19mdXR1cmVUaW1lCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQNtc2cDCQEGYXNzZXJ0AQkAZwIFDmJsb2NrVGltZXN0YW1wCQBkAgUOaW5pdGlhbF9BX3RpbWUFDU1JTl9SQU1QX1RJTUUJAAIBAgl0b28gb2Z0ZW4DCQEGYXNzZXJ0AQkAZwIFC19mdXR1cmVUaW1lCQBkAgUOYmxvY2tUaW1lc3RhbXAFDU1JTl9SQU1QX1RJTUUJAAIBAhFpbnN1ZmZpY2llbnQgdGltZQQKX2luaXRpYWxfQQkBAl9BAAMJAQZhc3NlcnQBAwkAZgIFCF9mdXR1cmVBAAAJAGYCBQVNQVhfQQUIX2Z1dHVyZUEHCQACAQIRb3V0IG9mIGJhc2UgcmFuZ2UDCQEGYXNzZXJ0AQMDCQBnAgUIX2Z1dHVyZUEFCl9pbml0aWFsX0EJAGcCCQBoAgUKX2luaXRpYWxfQQUMTUFYX0FfQ0hBTkdFBQhfZnV0dXJlQQcGAwkAZgIFCl9pbml0aWFsX0EFCF9mdXR1cmVBCQBnAgkAaAIFCF9mdXR1cmVBBQxNQVhfQV9DSEFOR0UFCl9pbml0aWFsX0EHCQACAQIMb3V0IG9mIHJhbmdlCQDMCAIJAQxJbnRlZ2VyRW50cnkCAglpbml0aWFsX0EFCl9pbml0aWFsX0EJAMwIAgkBDEludGVnZXJFbnRyeQICCGZ1dHVyZV9BBQhfZnV0dXJlQQkAzAgCCQEMSW50ZWdlckVudHJ5AgIOaW5pdGlhbF9BX3RpbWUFDmJsb2NrVGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg1mdXR1cmVfQV90aW1lBQtfZnV0dXJlVGltZQUDbmlsA21zZwEJc3RvcFJhbXBBAAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUDbXNnBAhjdXJyZW50QQkBAl9BAAkAzAgCCQEMSW50ZWdlckVudHJ5AgIJaW5pdGlhbF9BBQhjdXJyZW50QQkAzAgCCQEMSW50ZWdlckVudHJ5AgIIZnV0dXJlX0EFCGN1cnJlbnRBCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg5pbml0aWFsX0FfdGltZQUOYmxvY2tUaW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQICDWZ1dHVyZV9BX3RpbWUFDmJsb2NrVGltZXN0YW1wBQNuaWwDbXNnAQhzaHV0ZG93bgAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFA21zZwMJAQEhAQUGYWN0aXZlCQACAQkArAICAiJEQXBwIGlzIGFscmVhZHkgc3VzcGVuZGVkLiBDYXVzZTogCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFBmtDYXVzZQIadGhlIGNhdXNlIHdhc24ndCBzcGVjaWZpZWQJAQdzdXNwZW5kAQIPUGF1c2VkIGJ5IGFkbWluA21zZwEIYWN0aXZhdGUACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQNtc2cDBQZhY3RpdmUJAQ10aHJvd0lzQWN0aXZlAAkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQYJAMwIAgkBC0RlbGV0ZUVudHJ5AQUGa0NhdXNlBQNuaWwDbXNnARhrZWVwTGltaXRGb3JGaXJzdEhhcnZlc3QBCnNoYXJlTGltaXQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFA21zZwkAzAgCCQEMSW50ZWdlckVudHJ5AgULa1NoYXJlTGltaXQFCnNoYXJlTGltaXQFA25pbAECdHgBBnZlcmlmeQAEE211bHRpU2lnbmVkQnlBZG1pbnMEEmFkbWluUHViS2V5MVNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MQABAAAEEmFkbWluUHViS2V5MlNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEFDGFkbWluUHViS2V5MgABAAAEEmFkbWluUHViS2V5M1NpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIFDGFkbWluUHViS2V5MwABAAAJAGcCCQBkAgkAZAIFEmFkbWluUHViS2V5MVNpZ25lZAUSYWRtaW5QdWJLZXkyU2lnbmVkBRJhZG1pblB1YktleTNTaWduZWQAAgQHJG1hdGNoMAUCdHgDCQABAgUHJG1hdGNoMAIXSW52b2tlU2NyaXB0VHJhbnNhY3Rpb24EA2ludgUHJG1hdGNoMAQTY2FsbFRha2VJbnRvQWNjb3VudAMJAAACCAUDaW52BGRBcHAFBHRoaXMJAAACCAUDaW52CGZ1bmN0aW9uAhl0YWtlSW50b0FjY291bnRFeHRyYUZ1bmRzBwQNc2lnbmVkQnlBZG1pbgMDAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkxBgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkyBgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkzBgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAURYWRtaW5QdWJLZXlJbnZva2UDAwUTY2FsbFRha2VJbnRvQWNjb3VudAUNc2lnbmVkQnlBZG1pbgcGBRNtdWx0aVNpZ25lZEJ5QWRtaW5zBRNtdWx0aVNpZ25lZEJ5QWRtaW5z7UbC3A==", "height": 2230367, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EJ3eZimZTcoh46BuCER4W8oFq92pkCzDVXAi8U8uF7Pi Next: 4FzvezCYuo6RJZyzVpca5geyJtLbDjCoz7SpGm6Ka1N6 Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 1000000
55
66 let b = 1000000
77
88 let c = 10
99
1010 let d = 6
1111
1212 let e = (86400 / 60)
1313
1414 let f = "3.0.0"
1515
1616 let g = "version"
1717
1818 let h = "asset_ids"
1919
2020 let i = "_balance"
2121
2222 let j = "active"
2323
2424 let k = "shutdown_cause"
2525
2626 let l = "share_asset_id"
2727
2828 let m = "share_asset_supply"
2929
3030 let n = "commission"
3131
3232 let o = "dAppThresholdCoef"
3333
3434 let p = "staking_usdnnsbt_address"
3535
3636 let q = "discounts"
3737
3838 let r = "discount_values"
3939
4040 let s = "_SWOP_amount"
4141
4242 let t = "first_harvest"
4343
4444 let u = "first_harvest_height"
4545
4646 let v = "share_limit_on_first_harvest"
4747
4848 let w = "base_period"
4949
5050 let x = "period_length"
5151
5252 let y = "start_height"
5353
5454 let z = "admin_pub_1"
5555
5656 let B = "admin_pub_2"
5757
5858 let C = "admin_pub_3"
5959
6060 let E = "admin_invoke_pub"
6161
6262 let F = "money_box_address"
6363
6464 let G = "governance_address"
6565
6666 let H = "voting_address"
6767
6868 let I = "farming_address"
6969
7070 let J = "lp_farming"
7171
7272 let K = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9')
7373
7474 func L (M) = {
7575 let N = getString(K, M)
7676 if ($isInstanceOf(N, "String"))
7777 then {
7878 let O = N
7979 fromBase58String(O)
8080 }
8181 else {
8282 let P = N
8383 throw((M + "is empty"))
8484 }
8585 }
8686
8787
8888 let Q = L(z)
8989
9090 let R = L(B)
9191
9292 let S = L(C)
9393
9494 let T = L(E)
9595
9696 let U = Address(L(F))
9797
9898 let V = Address(L(G))
9999
100100 let W = Address(L(p))
101101
102102 let X = Address(L(H))
103103
104104 let Y = Address(L(I))
105105
106106 let Z = Address(L(J))
107107
108108 let aa = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
109109
110110 let ab = [toBase58String(aa)]
111111
112112 let ac = valueOrErrorMessage(getInteger(X, w), "Empty kBasePeriod")
113113
114114 let ad = valueOrErrorMessage(getInteger(X, y), "Empty kStartHeight")
115115
116116 let ae = valueOrErrorMessage(getInteger(X, x), "Empty kPeriodLength")
117117
118118 let af = ((ac + ((height - ad) / ae)) + 3)
119119
120120 let ag = getBooleanValue(this, j)
121121
122122 let ah = fromBase58String(getStringValue(this, l))
123123
124124 let ai = getIntegerValue(this, m)
125125
126126 let aj = 1000000
127127
128128 let ak = getIntegerValue(this, n)
129129
130130 let al = fraction(40, aj, 100)
131131
132132 let am = getIntegerValue(this, "initial_A")
133133
134134 let an = getIntegerValue(this, "future_A")
135135
136136 let ao = valueOrElse(getInteger(this, "initial_A_time"), 0)
137137
138138 let ap = valueOrElse(getInteger(this, "future_A_time"), 0)
139139
140140 let aq = split(getStringValue(this, h), ",")
141141
142142 let ar = size(aq)
143143
144144 func as (at) = [BooleanEntry(j, false), StringEntry(k, at)]
145145
146146
147147 func au () = throw("DApp is already active")
148148
149149
150150 func av () = if (ag)
151151 then unit
152152 else throw("DApp is inactive at this moment")
153153
154154
155155 func aw (ax) = if (containsElement([Q, R, S], ax.callerPublicKey))
156156 then unit
157157 else throw("Only admin can call this function")
158158
159159
160160 func ay (ax) = if ((this == ax.caller))
161161 then unit
162162 else throw("Only contract itself can call this function")
163163
164164
165165 let az = toBigInt(2)
166166
167167 let aA = height
168168
169169 func aB (aC) = if (aC)
170170 then false
171171 else true
172172
173173
174174 func aD (aE) = {
175175 let aF = {
176176 let N = aE
177177 if ($isInstanceOf(N, "Address"))
178178 then {
179179 let aG = N
180180 toString(aG)
181181 }
182182 else if ($isInstanceOf(N, "String"))
183183 then {
184184 let aG = N
185185 aG
186186 }
187187 else throw("Unknow type of user Addr")
188188 }
189189 let aH = valueOrElse(getInteger(V, (aF + s)), 0)
190190 let aI = split(getStringValue(K, r), ",")
191191 let aJ = split(getStringValue(K, q), ",")
192192 if (if ((aH >= parseIntValue(aI[0])))
193193 then (parseIntValue(aI[1]) > aH)
194194 else false)
195195 then (aj - parseIntValue(aJ[0]))
196196 else if (if ((aH >= parseIntValue(aI[1])))
197197 then (parseIntValue(aI[2]) > aH)
198198 else false)
199199 then (aj - parseIntValue(aJ[1]))
200200 else if (if ((aH >= parseIntValue(aI[2])))
201201 then (parseIntValue(aI[3]) > aH)
202202 else false)
203203 then (aj - parseIntValue(aJ[2]))
204204 else if (if ((aH >= parseIntValue(aI[3])))
205205 then (parseIntValue(aI[4]) > aH)
206206 else false)
207207 then (aj - parseIntValue(aJ[3]))
208208 else if ((aH >= parseIntValue(aI[4])))
209209 then (aj - parseIntValue(aJ[4]))
210210 else aj
211211 }
212212
213213
214214 func aK () = {
215215 let aL = ap
216216 let aM = an
217217 if ((aL > aA))
218218 then {
219219 let aN = am
220220 let aO = ao
221221 if ((aM > aN))
222222 then (aN + (((aM - aN) * (aA - aO)) / (aL - aO)))
223223 else (aN - (((aN - aM) * (aA - aO)) / (aL - aO)))
224224 }
225225 else aM
226226 }
227227
228228
229229 func aP () = {
230230 func aQ (aR,aS) = (aR :+ valueOrElse(getInteger(this, (aS + i)), 0))
231231
232232 let aT = aq
233233 let aU = size(aT)
234234 let aV = nil
235235 func aW (aX,aY) = if ((aY >= aU))
236236 then aX
237237 else aQ(aX, aT[aY])
238238
239239 func aZ (aX,aY) = if ((aY >= aU))
240240 then aX
241241 else throw("List size exceeds 15")
242242
243243 aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
244244 }
245245
246246
247247 func ba (bb) = bb
248248
249249
250250 func bc (aR,bd) = (aR + bd)
251251
252252
253253 func be (bb,bf) = {
254254 let bg = invoke(this, "D", [bb, bf], nil)
255255 if ($isInstanceOf(bg, "Int"))
256256 then bg
257257 else throw(($getType(invoke(this, "D", [bb, bf], nil)) + " couldn't be cast to Int"))
258258 }
259259
260260
261261 func bh (bb,bf) = {
262262 let bi = {
263263 let aT = bb
264264 let aU = size(aT)
265265 let aV = 0
266266 func aW (aX,aY) = if ((aY >= aU))
267267 then aX
268268 else bc(aX, aT[aY])
269269
270270 func aZ (aX,aY) = if ((aY >= aU))
271271 then aX
272272 else throw("List size exceeds 15")
273273
274274 aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
275275 }
276276 if ((bi == 0))
277277 then 0
278278 else {
279279 let bj = (bf * ar)
280280 let bk = (toBigInt(bj) * toBigInt(bi))
281281 let bl = toBigInt((bj - 1))
282282 func bm (aR,ax) = if ((aR._2 == true))
283283 then aR
284284 else {
285285 let bn = aR._1
286286 func bo (bp,ax) = if ((ar > ax))
287287 then ((bp * bn) / (toBigInt(bb[ax]) * toBigInt(ar)))
288288 else bp
289289
290290 let bp = {
291291 let aT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
292292 let aU = size(aT)
293293 let aV = bn
294294 func bq (aX,aY) = if ((aY >= aU))
295295 then aX
296296 else bo(aX, aT[aY])
297297
298298 func br (aX,aY) = if ((aY >= aU))
299299 then aX
300300 else throw("List size exceeds 15")
301301
302302 br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
303303 }
304304 let bs = fraction((bk + (toBigInt(ar) * bp)), bn, ((bl * bn) + (toBigInt((ar + 1)) * bp)))
305305 if ((bs > bn))
306306 then if ((1 >= toInt((bs - bn))))
307307 then $Tuple2(bs, true)
308308 else $Tuple2(bs, false)
309309 else if ((1 >= toInt((bn - bs))))
310310 then $Tuple2(bs, true)
311311 else $Tuple2(bs, false)
312312 }
313313
314314 let bt = {
315315 let aT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
316316 let aU = size(aT)
317317 let aV = $Tuple2(toBigInt(bi), false)
318318 func bq (aX,aY) = if ((aY >= aU))
319319 then aX
320320 else bm(aX, aT[aY])
321321
322322 func br (aX,aY) = if ((aY >= aU))
323323 then aX
324324 else throw("List size exceeds 15")
325325
326326 br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
327327 }
328328 let bs = bt._1
329329 let bu = bt._2
330330 if ((bu == false))
331331 then throw(("get_D() not finished with " + toString(bs)))
332332 else toInt(bs)
333333 }
334334 }
335335
336336
337337 func bv (bb,bf) = be(ba(bb), bf)
338338
339339
340340 func bw (bx,by,bz,bA) = if (aB((bx != by)))
341341 then throw("same coin")
342342 else if (aB(if ((by >= 0))
343343 then (bx >= 0)
344344 else false))
345345 then throw("below zero")
346346 else if (aB(if ((ar > by))
347347 then (ar > bx)
348348 else false))
349349 then throw("above N_COINS")
350350 else {
351351 let bf = aK()
352352 let bs = be(bA, bf)
353353 let bj = (bf * ar)
354354 func bB (aR,ax) = {
355355 let bC = aR
356356 let bD = bC._1
357357 let bE = bC._2
358358 let bF = if ((bx == ax))
359359 then bz
360360 else bA[ax]
361361 if (if ((ax != by))
362362 then (ar > ax)
363363 else false)
364364 then $Tuple2((bD + bF), fraction(bE, toBigInt(bs), toBigInt((bF * ar))))
365365 else $Tuple2(bD, bE)
366366 }
367367
368368 let bG = {
369369 let aT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
370370 let aU = size(aT)
371371 let aV = $Tuple2(0, toBigInt(bs))
372372 func aW (aX,aY) = if ((aY >= aU))
373373 then aX
374374 else bB(aX, aT[aY])
375375
376376 func aZ (aX,aY) = if ((aY >= aU))
377377 then aX
378378 else throw("List size exceeds 15")
379379
380380 aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
381381 }
382382 let bD = bG._1
383383 let bH = bG._2
384384 let bE = fraction(bH, toBigInt(bs), toBigInt((bj * ar)))
385385 let bI = toBigInt(((bD + (bs / bj)) - bs))
386386 func bJ (aR,bK) = if ((aR._2 == true))
387387 then aR
388388 else {
389389 let bL = aR._1
390390 let bM = (((bL * bL) + bE) / ((az * bL) + bI))
391391 if ((bM > bL))
392392 then if ((1 >= toInt((bM - bL))))
393393 then $Tuple2(bM, true)
394394 else $Tuple2(bM, false)
395395 else if ((1 >= toInt((bL - bM))))
396396 then $Tuple2(bM, true)
397397 else $Tuple2(bM, false)
398398 }
399399
400400 let bN = {
401401 let aT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
402402 let aU = size(aT)
403403 let aV = $Tuple2(toBigInt(bs), false)
404404 func bq (aX,aY) = if ((aY >= aU))
405405 then aX
406406 else bJ(aX, aT[aY])
407407
408408 func br (aX,aY) = if ((aY >= aU))
409409 then aX
410410 else throw("List size exceeds 16")
411411
412412 br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
413413 }
414414 let bM = bN._1
415415 let bu = bN._2
416416 if ((bu == false))
417417 then throw(("getY() not finished with " + toString(bM)))
418418 else toInt(bM)
419419 }
420420
421421
422422 func bO (bP,bx,bb,bs) = if (aB((bx >= 0)))
423423 then throw("i below zero")
424424 else if (aB((ar > bx)))
425425 then throw("i above N_COINS")
426426 else {
427427 let bj = (bP * ar)
428428 func bB (aR,ax) = {
429429 let bQ = aR
430430 let bD = bQ._1
431431 let bE = bQ._2
432432 let bF = if (if ((bx != ax))
433433 then (ar > ax)
434434 else false)
435435 then bb[ax]
436436 else 0
437437 if (if ((ar > ax))
438438 then (bx != ax)
439439 else false)
440440 then $Tuple2((bD + bF), fraction(bE, toBigInt(bs), toBigInt((bF * ar))))
441441 else $Tuple2(bD, bE)
442442 }
443443
444444 let bR = {
445445 let aT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
446446 let aU = size(aT)
447447 let aV = $Tuple2(0, toBigInt(bs))
448448 func aW (aX,aY) = if ((aY >= aU))
449449 then aX
450450 else bB(aX, aT[aY])
451451
452452 func aZ (aX,aY) = if ((aY >= aU))
453453 then aX
454454 else throw("List size exceeds 15")
455455
456456 aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
457457 }
458458 let bD = bR._1
459459 let bH = bR._2
460460 let bE = fraction(bH, toBigInt(bs), toBigInt((bj * ar)))
461461 let bI = toBigInt(((bD + (bs / bj)) - bs))
462462 func bS (aR,ax) = if ((aR._2 == true))
463463 then aR
464464 else {
465465 let bL = aR._1
466466 let bM = (((bL * bL) + bE) / ((az * bL) + bI))
467467 if ((bM > bL))
468468 then if ((1 >= toInt((bM - bL))))
469469 then $Tuple2(bM, true)
470470 else $Tuple2(bM, false)
471471 else if ((1 >= toInt((bL - bM))))
472472 then $Tuple2(bM, true)
473473 else $Tuple2(bM, false)
474474 }
475475
476476 let bT = {
477477 let aT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
478478 let aU = size(aT)
479479 let aV = $Tuple2(toBigInt(bs), false)
480480 func bq (aX,aY) = if ((aY >= aU))
481481 then aX
482482 else bS(aX, aT[aY])
483483
484484 func br (aX,aY) = if ((aY >= aU))
485485 then aX
486486 else throw("List size exceeds 16")
487487
488488 br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
489489 }
490490 let bM = bT._1
491491 let bu = bT._2
492492 if ((bu == false))
493493 then throw(("get_y_D() not finished with " + toString(bM)))
494494 else toInt(bM)
495495 }
496496
497497
498498 func bU (bb,bV,ax,bW) = {
499499 let bX = aD(bW)
500500 let bf = aK()
501501 let bY = ((fraction(ak, bX, aj, CEILING) * ar) / (4 * (ar - 1)))
502502 let bZ = ai
503503 let ca = be(bb, bf)
504504 let cb = (ca - fraction(bV, ca, bZ))
505505 let cc = bO(bf, ax, bb, cb)
506506 let cd = (bb[ax] - cc)
507507 func ce (aR,cf) = {
508508 let cg = aR
509509 let ch = cg._1
510510 let ci = cg._2
511511 let cj = if ((ci == ax))
512512 then (fraction(cf, cb, ca) - cc)
513513 else (cf - fraction(cf, cb, ca))
514514 $Tuple2((ch :+ (cf - fraction(bY, cj, aj))), (ci + 1))
515515 }
516516
517517 let ck = {
518518 let aT = bb
519519 let aU = size(aT)
520520 let aV = $Tuple2(nil, 0)
521521 func aW (aX,aY) = if ((aY >= aU))
522522 then aX
523523 else ce(aX, aT[aY])
524524
525525 func aZ (aX,aY) = if ((aY >= aU))
526526 then aX
527527 else throw("List size exceeds 15")
528528
529529 aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
530530 }
531531 let ch = ck._1
532532 let ci = ck._2
533533 let cl = ch[ax]
534534 let cm = ((cl - bO(bf, ax, ch, cb)) - 1)
535535 $Tuple2(cm, (cd - cm))
536536 }
537537
538538
539539 func cn (aS) = {
540540 let N = aS
541541 if ($isInstanceOf(N, "ByteVector"))
542542 then {
543543 let co = N
544544 toBase58String(co)
545545 }
546546 else if ($isInstanceOf(N, "Unit"))
547547 then {
548548 let cp = N
549549 "WAVES"
550550 }
551551 else throw("Match error")
552552 }
553553
554554
555555 func cq (cr,aS) = if (cr)
556556 then $Tuple2("lockNeutrino", W)
557557 else $Tuple2("unlockNeutrino", W)
558558
559559
560560 func cs (cr,ct,aS) = if (cr)
561561 then {
562562 let cu = cq(cr, aS)
563563 let cv = cu._1
564564 let cw = cu._2
565565 $Tuple4(cv, cw, nil, [AttachedPayment(aS, ct)])
566566 }
567567 else {
568568 let cx = cq(cr, aS)
569569 let cv = cx._1
570570 let cw = cx._2
571571 $Tuple4(cv, cw, [ct, toBase58String(aS)], nil)
572572 }
573573
574574
575575 func cr (ct,cy) = if (containsElement(ab, cy))
576576 then {
577577 let cz = cs(true, ct, fromBase58String(cy))
578578 let cv = cz._1
579579 let cA = cz._2
580580 let cB = cz._3
581581 let cC = cz._4
582582 invoke(cA, cv, cB, cC)
583583 }
584584 else 0
585585
586586
587587 func cD (ct,cy) = if (containsElement(ab, cy))
588588 then {
589589 let cE = cs(false, ct, fromBase58String(cy))
590590 let cv = cE._1
591591 let cA = cE._2
592592 let cB = cE._3
593593 let cC = cE._4
594594 invoke(cA, cv, cB, cC)
595595 }
596596 else 0
597597
598598
599599 func cF (aS) = {
600600 let cG = {
601601 let N = aS
602602 if ($isInstanceOf(N, "ByteVector"))
603603 then {
604604 let cH = N
605605 if ((cH == aa))
606606 then getInteger(W, ((("rpd_balance_" + toBase58String(cH)) + "_") + toString(this)))
607607 else 0
608608 }
609609 else if ($isInstanceOf(N, "Unit"))
610610 then 0
611611 else throw("Match error")
612612 }
613613 let N = cG
614614 if ($isInstanceOf(N, "Int"))
615615 then {
616616 let ax = N
617617 ax
618618 }
619619 else 0
620620 }
621621
622622
623623 func cI () = {
624624 let cJ = aP()
625625 func cK (aR,aS) = {
626626 let cL = aR
627627 let cM = cL._1
628628 let ax = cL._2
629629 if (cM)
630630 then $Tuple2(cM, ax)
631631 else {
632632 let cN = (assetBalance(this, fromBase58String(aS)) + cF(fromBase58String(aS)))
633633 if ((cJ[ax] > cN))
634634 then $Tuple2(true, ax)
635635 else $Tuple2(false, (ax + 1))
636636 }
637637 }
638638
639639 let aT = aq
640640 let aU = size(aT)
641641 let aV = $Tuple2(false, 0)
642642 func aW (aX,aY) = if ((aY >= aU))
643643 then aX
644644 else cK(aX, aT[aY])
645645
646646 func aZ (aX,aY) = if ((aY >= aU))
647647 then aX
648648 else throw("List size exceeds 15")
649649
650650 aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
651651 }
652652
653653
654654 func cO (ax) = as(("Suspicious state with asset: " + aq[ax]))
655655
656656
657657 func cP (bW,cC) = {
658658 func cQ (aR,cR) = (aR :+ ScriptTransfer(bW, cR.amount, cR.assetId))
659659
660660 let aT = cC
661661 let aU = size(aT)
662662 let aV = nil
663663 func aW (aX,aY) = if ((aY >= aU))
664664 then aX
665665 else cQ(aX, aT[aY])
666666
667667 func aZ (aX,aY) = if ((aY >= aU))
668668 then aX
669669 else throw("List size exceeds 15")
670670
671671 aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
672672 }
673673
674674
675675 func cS (cT) = {
676676 let cU = valueOrErrorMessage(getInteger(this, o), "No dAppThresholdCoef key")
677677 let cV = 10000
678678 let cW = max(cT)
679679 let cX = min(cT)
680680 let cY = fraction(cW, cV, cX)
681681 if ((cY > (cU * cV)))
682682 then throw("New balance in assets of the DApp is less than threshold")
683683 else false
684684 }
685685
686686
687687 func cZ (aq) = {
688688 let da = split(aq, ",")
689689 func db (dc,aS) = {
690690 let dd = valueOrErrorMessage(fromBase58String(aS), ("fromBase58String: " + aS))
691691 let de = valueOrErrorMessage(assetInfo(dd), ("assetInfo: " + aS)).decimals
692692 if ((de != d))
693693 then throw("wrong decimals")
694694 else false
695695 }
696696
697697 let aT = da
698698 let aU = size(aT)
699699 let aV = false
700700 func aW (aX,aY) = if ((aY >= aU))
701701 then aX
702702 else db(aX, aT[aY])
703703
704704 func aZ (aX,aY) = if ((aY >= aU))
705705 then aX
706706 else throw("List size exceeds 15")
707707
708708 aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
709709 }
710710
711711
712712 @Callable(df)
713713 func D (bb,bf) = {
714714 let bs = bh(bb, bf)
715715 $Tuple2([IntegerEntry("D", bs)], bs)
716716 }
717717
718718
719719
720720 @Callable(df)
721721 func init (aq,aK,dg,dh) = if (!(isDataStorageUntouched(this)))
722722 then throw("Already initialized")
723723 else if ((0 >= aK))
724724 then throw("Amp must be must > 0")
725725 else if ((0 >= dg))
726726 then throw("dApp Threshold Coef must be > 0")
727727 else {
728728 let di = "s_Multi_USD"
729729 let dj = ("ShareToken of SwopFi protocol for MultiStable USD pool at address " + toString(this))
730730 let dk = Issue(di, dj, 0, 6, true)
731731 let dl = calculateAssetId(dk)
732732 if (cZ(aq))
733733 then throw()
734734 else {
735735 let dm = [StringEntry(g, f), StringEntry(h, aq), IntegerEntry("initial_A", aK), IntegerEntry("future_A", aK), IntegerEntry(n, getIntegerValue(K, "base_fee_flat")), StringEntry(l, toBase58String(dl)), IntegerEntry(m, 0), IntegerEntry(o, dg), BooleanEntry(j, true), dk]
736736 if (dh)
737737 then (dm ++ [BooleanEntry(t, dh), IntegerEntry(u, (ad + (af * ae)))])
738738 else dm
739739 }
740740 }
741741
742742
743743
744744 @Callable(df)
745745 func addLiquidity (dn,do) = valueOrElse(av(), {
746746 let bf = aK()
747747 let bb = aP()
748748 let ca = if ((ai == 0))
749749 then 0
750750 else bv(bb, bf)
751751 let cC = df.payments
752752 let dp = size(cC)
753753 func dq (dr) = if ((dp > ar))
754754 then throw(("payments size > " + toString(ar)))
755755 else if ((1 > dp))
756756 then throw("payments size < 1")
757757 else if (if ((ai == 0))
758758 then (ar != dp)
759759 else false)
760760 then throw("initial deposit requires all coins")
761761 else {
762762 func ds (aR,cR) = if (containsElement(aq, cn(cR.assetId)))
763763 then true
764764 else throw("Invalid asset in payment")
765765
766766 let aT = cC
767767 let aU = size(aT)
768768 let aV = false
769769 func aW (aX,aY) = if ((aY >= aU))
770770 then aX
771771 else ds(aX, aT[aY])
772772
773773 func aZ (aX,aY) = if ((aY >= aU))
774774 then aX
775775 else throw("List size exceeds 15")
776776
777777 aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
778778 }
779779
780780 if (!(dq(dp)))
781781 then throw()
782782 else {
783783 let cM = cI()
784784 if (cM._1)
785785 then (cO(cM._2) ++ cP(df.caller, cC))
786786 else {
787787 func cQ (aR,aS) = {
788788 let dt = aR
789789 let cT = dt._1
790790 let ax = dt._2
791791 let du = dt._3
792792 if (if ((dp > du))
793793 then (cn(cC[du].assetId) == aS)
794794 else false)
795795 then $Tuple3((cT :+ (bb[ax] + cC[du].amount)), (ax + 1), (du + 1))
796796 else $Tuple3((cT :+ bb[ax]), (ax + 1), du)
797797 }
798798
799799 let dv = {
800800 let aT = aq
801801 let aU = size(aT)
802802 let aV = $Tuple3(nil, 0, 0)
803803 func aW (aX,aY) = if ((aY >= aU))
804804 then aX
805805 else cQ(aX, aT[aY])
806806
807807 func aZ (aX,aY) = if ((aY >= aU))
808808 then aX
809809 else throw("List size exceeds 15")
810810
811811 aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
812812 }
813813 let cT = dv._1
814814 let dw = dv._2
815815 let dx = dv._3
816816 if ((dp > dx))
817817 then throw("Incorect payments order")
818818 else if (cS(cT))
819819 then throw()
820820 else {
821821 let cb = bv(cT, bf)
822822 if (aB((cb > ca)))
823823 then throw("D1 > D0")
824824 else {
825825 let bX = aD(df.caller)
826826 func dy (aR,dz) = {
827827 let dA = aR
828828 let dB = dA._1
829829 let dC = dA._2
830830 let ax = dA._3
831831 if ((ai > 0))
832832 then {
833833 let bY = ((fraction(ak, bX, aj, CEILING) * ar) / (4 * (ar - 1)))
834834 let dD = {
835835 let dE = fraction(cb, bb[ax], ca)
836836 let dF = if ((dE > dz))
837837 then (dE - dz)
838838 else (dz - dE)
839839 fraction(bY, dF, aj)
840840 }
841841 let dG = fraction(dD, al, aj)
842842 let dH = (dz - dD)
843843 let dI = (dz - dD)
844844 let dJ = (dz - bb[ax])
845845 let dK = (dD - dG)
846846 let dL = if ((dJ > 0))
847847 then cr((dJ - dD), aq[ax])
848848 else cD(dD, aq[ax])
849849 if ((dL == dL))
850850 then {
851851 let dM = if ((dK > 0))
852852 then invoke(Z, "airDrop", nil, [AttachedPayment(fromBase58String(aq[ax]), dK)])
853853 else 0
854854 if ((dM == dM))
855855 then $Tuple3((dB :+ dI), (dC ++ [ScriptTransfer(U, dG, fromBase58String(aq[ax])), IntegerEntry((aq[ax] + i), dH)]), (ax + 1))
856856 else throw("Strict value is not equal to itself.")
857857 }
858858 else throw("Strict value is not equal to itself.")
859859 }
860860 else {
861861 let dL = cr(dz, aq[ax])
862862 if ((dL == dL))
863863 then $Tuple3((dB :+ dz), (dC :+ IntegerEntry((aq[ax] + i), dz)), (ax + 1))
864864 else throw("Strict value is not equal to itself.")
865865 }
866866 }
867867
868868 let dN = {
869869 let aT = cT
870870 let aU = size(aT)
871871 let aV = $Tuple3(nil, nil, 0)
872872 func bq (aX,aY) = if ((aY >= aU))
873873 then aX
874874 else dy(aX, aT[aY])
875875
876876 func br (aX,aY) = if ((aY >= aU))
877877 then aX
878878 else throw("List size exceeds 15")
879879
880880 br(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(bq(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
881881 }
882882 let dB = dN._1
883883 let dC = dN._2
884884 let dO = bv(dB, bf)
885885 let dP = if ((ai == 0))
886886 then cb
887887 else fraction(ai, (dO - ca), ca)
888888 if (aB((dP >= dn)))
889889 then throw("Slippage screwed you")
890890 else if (do)
891891 then {
892892 let dQ = invoke(this, "reissueShare", [dP], nil)
893893 if ((dQ == dQ))
894894 then {
895895 let dR = invoke(Y, "lockShareTokens", [toString(this)], [AttachedPayment(ah, dP)])
896896 if ((dR == dR))
897897 then (dC :+ IntegerEntry(m, (ai + dP)))
898898 else throw("Strict value is not equal to itself.")
899899 }
900900 else throw("Strict value is not equal to itself.")
901901 }
902902 else (dC ++ [Reissue(ah, dP, true), ScriptTransfer(df.caller, dP, ah), IntegerEntry(m, (ai + dP))])
903903 }
904904 }
905905 }
906906 }
907907 })
908908
909909
910910
911911 @Callable(df)
912912 func calcMintAmount (cT,aF) = {
913913 let bf = aK()
914914 let bb = aP()
915915 let cb = bv(cT, bf)
916916 if ((ai == 0))
917917 then $Tuple2(nil, cb)
918918 else {
919919 let ca = bv(bb, bf)
920920 let bX = aD(aF)
921921 func dS (aR,dz) = {
922922 let dT = aR
923923 let dB = dT._1
924924 let ax = dT._2
925925 let bY = ((fraction(ak, bX, aj, CEILING) * ar) / (4 * (ar - 1)))
926926 let dD = {
927927 let dE = fraction(cb, bb[ax], ca)
928928 let dF = if ((dE > dz))
929929 then (dE - dz)
930930 else (dz - dE)
931931 fraction(bY, dF, aj)
932932 }
933933 let dI = (dz - dD)
934934 $Tuple2((dB :+ dI), (ax + 1))
935935 }
936936
937937 let dU = {
938938 let aT = cT
939939 let aU = size(aT)
940940 let aV = $Tuple2(nil, 0)
941941 func aW (aX,aY) = if ((aY >= aU))
942942 then aX
943943 else dS(aX, aT[aY])
944944
945945 func aZ (aX,aY) = if ((aY >= aU))
946946 then aX
947947 else throw("List size exceeds 15")
948948
949949 aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
950950 }
951951 let dB = dU._1
952952 let dw = dU._2
953953 let dO = bv(dB, bf)
954954 let dV = fraction(ai, (dO - ca), ca)
955955 $Tuple2(nil, dV)
956956 }
957957 }
958958
959959
960960
961961 @Callable(df)
962962 func reissueShare (ct) = valueOrElse(ay(df), [Reissue(ah, ct, true)])
963963
964964
965965
966966 @Callable(df)
967967 func getDy (dW,dX,dY,dZ) = {
968968 let bb = aP()
969969 let ea = valueOrErrorMessage(indexOf(aq, dW), "unknown token in")
970970 let eb = valueOrErrorMessage(indexOf(aq, dX), "unknown token out")
971971 let bz = (bb[ea] + dY)
972972 let bM = bw(ea, eb, bz, bb)
973973 let cm = ((bb[eb] - bM) - 1)
974974 let bX = aD(Address(fromBase58String(dZ)))
975975 let bY = fraction(fraction(ak, bX, aj, CEILING), cm, aj)
976976 $Tuple2(nil, $Tuple2((cm - bY), bY))
977977 }
978978
979979
980980
981981 @Callable(df)
982982 func exchange (ec,ed) = valueOrElse(av(), if ((size(df.payments) != 1))
983983 then throw("size(payments) != 1")
984984 else {
985985 let cM = cI()
986986 if (cM._1)
987987 then (cO(cM._2) ++ cP(df.caller, df.payments))
988988 else {
989989 let cR = df.payments[0]
990990 let ee = cn(cR.assetId)
991991 let ef = fromBase58String(ec)
992992 let dY = cR.amount
993993 let ea = valueOrErrorMessage(indexOf(aq, ee), "unknown token in")
994994 let eb = valueOrErrorMessage(indexOf(aq, ec), "unknown token out")
995995 let bb = aP()
996996 let bz = (bb[ea] + dY)
997997 let bM = bw(ea, eb, bz, bb)
998998 let eg = ((bb[eb] - bM) - 1)
999999 let bX = aD(df.caller)
10001000 let bY = fraction(eg, fraction(ak, bX, aj, CEILING), aj)
10011001 let cm = (eg - bY)
10021002 let dG = fraction(bY, al, aj)
10031003 if (aB((cm >= ed)))
10041004 then throw("Exchange resulted in fewer coins than expected")
10051005 else {
10061006 func eh (aR,ei) = {
10071007 let ej = aR
10081008 let cT = ej._1
10091009 let ax = ej._2
10101010 if ((ax == ea))
10111011 then $Tuple2((cT :+ (ei + dY)), (ax + 1))
10121012 else if ((ax == eb))
10131013 then $Tuple2((cT :+ (ei - eg)), (ax + 1))
10141014 else $Tuple2((cT :+ ei), (ax + 1))
10151015 }
10161016
10171017 let ek = {
10181018 let aT = bb
10191019 let aU = size(aT)
10201020 let aV = $Tuple2(nil, 0)
10211021 func aW (aX,aY) = if ((aY >= aU))
10221022 then aX
10231023 else eh(aX, aT[aY])
10241024
10251025 func aZ (aX,aY) = if ((aY >= aU))
10261026 then aX
10271027 else throw("List size exceeds 15")
10281028
10291029 aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
10301030 }
10311031 let cT = ek._1
10321032 let ax = ek._2
10331033 if (cS(cT))
10341034 then throw()
10351035 else {
10361036 let dR = cr(cR.amount, cn(cR.assetId))
10371037 if ((dR == dR))
10381038 then {
10391039 let el = cD(eg, ec)
10401040 if ((el == el))
10411041 then {
10421042 let dK = (bY - dG)
10431043 let dM = if ((dK > 0))
10441044 then invoke(Z, "airDrop", nil, [AttachedPayment(ef, dK)])
10451045 else 0
10461046 if ((dM == dM))
10471047 then $Tuple2([IntegerEntry((ee + i), bz), IntegerEntry((ec + i), (bb[eb] - eg)), ScriptTransfer(df.caller, cm, ef), ScriptTransfer(U, dG, ef)], [cm, ef])
10481048 else throw("Strict value is not equal to itself.")
10491049 }
10501050 else throw("Strict value is not equal to itself.")
10511051 }
10521052 else throw("Strict value is not equal to itself.")
10531053 }
10541054 }
10551055 }
10561056 })
10571057
10581058
10591059
10601060 @Callable(df)
10611061 func withdraw (em) = valueOrElse(av(), if ((size(df.payments) != 1))
10621062 then throw("size(payments) != 1")
10631063 else {
10641064 let en = df.payments[0].amount
10651065 let eo = df.payments[0].assetId
10661066 if ((ah != eo))
10671067 then throw("unknown payment token")
10681068 else {
10691069 let cM = cI()
10701070 if (cM._1)
10711071 then (cO(cM._2) ++ cP(df.originCaller, df.payments))
10721072 else {
10731073 func dy (aR,ep) = {
10741074 let eq = aR
10751075 let dC = eq._1
10761076 let ax = eq._2
10771077 let er = fraction(ep, en, ai)
10781078 if (aB((er >= em[ax])))
10791079 then throw("Withdrawal resulted in fewer coins than expected")
10801080 else {
10811081 let el = cD(er, aq[ax])
10821082 if ((el == el))
10831083 then $Tuple2((dC ++ [IntegerEntry((aq[ax] + i), (ep - er)), ScriptTransfer(df.originCaller, er, fromBase58String(aq[ax]))]), (ax + 1))
10841084 else throw("Strict value is not equal to itself.")
10851085 }
10861086 }
10871087
10881088 let es = {
10891089 let aT = aP()
10901090 let aU = size(aT)
10911091 let aV = $Tuple2(nil, 0)
10921092 func aW (aX,aY) = if ((aY >= aU))
10931093 then aX
10941094 else dy(aX, aT[aY])
10951095
10961096 func aZ (aX,aY) = if ((aY >= aU))
10971097 then aX
10981098 else throw("List size exceeds 15")
10991099
11001100 aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
11011101 }
11021102 let dC = es._1
11031103 let ax = es._2
11041104 (dC ++ [Burn(ah, en), IntegerEntry(m, (ai - en))])
11051105 }
11061106 }
11071107 })
11081108
11091109
11101110
11111111 @Callable(df)
11121112 func withdrawWithUnlock (em,et) = valueOrElse(av(), if ((0 >= et))
11131113 then throw("Unlock amount must be positive")
11141114 else {
11151115 let cM = cI()
11161116 if (cM._1)
11171117 then (cO(cM._2) ++ cP(df.caller, df.payments))
11181118 else {
11191119 let en = if ((size(df.payments) > 0))
11201120 then if ((size(df.payments) != 1))
11211121 then throw("size(payments) != 1")
11221122 else {
11231123 let eo = df.payments[0].assetId
11241124 if ((ah != eo))
11251125 then throw("unknown payment token")
11261126 else df.payments[0].amount
11271127 }
11281128 else 0
11291129 let eu = invoke(Y, "withdrawShareTokens", [toString(this), et], nil)
11301130 if ((eu == eu))
11311131 then {
11321132 let ev = (en + et)
11331133 let dL = invoke(this, "withdraw", [em], [AttachedPayment(ah, ev)])
11341134 if ((dL == dL))
11351135 then nil
11361136 else throw("Strict value is not equal to itself.")
11371137 }
11381138 else throw("Strict value is not equal to itself.")
11391139 }
11401140 })
11411141
11421142
11431143
11441144 @Callable(df)
11451145 func calcWithdrawOneCoin (ew,ec,aF) = {
11461146 let ax = valueOrErrorMessage(indexOf(aq, ec), "unknown token out")
11471147 $Tuple2(nil, bU(aP(), ew, ax, Address(fromBase58String(aF)))._1)
11481148 }
11491149
11501150
11511151
11521152 @Callable(df)
11531153 func withdrawOneCoin (ec,ex) = valueOrElse(av(), if ((size(df.payments) != 1))
11541154 then throw("size(payments) != 1")
11551155 else {
11561156 let cM = cI()
11571157 if (cM._1)
11581158 then (cO(cM._2) ++ cP(df.originCaller, df.payments))
11591159 else {
11601160 let en = df.payments[0].amount
11611161 let eo = df.payments[0].assetId
11621162 if ((eo != ah))
11631163 then throw("unknown token")
11641164 else {
11651165 let ey = valueOrErrorMessage(indexOf(aq, ec), "unknown token out")
11661166 let ef = fromBase58String(ec)
11671167 let bb = aP()
11681168 let ez = bU(bb, en, ey, df.originCaller)
11691169 let cm = ez._1
11701170 let eA = ez._2
11711171 if (aB((cm >= ex)))
11721172 then throw("Not enough coins removed")
11731173 else {
11741174 let dG = fraction(eA, al, aj)
11751175 let eB = (cm + eA)
11761176 func eh (aR,ei) = {
11771177 let eC = aR
11781178 let cT = eC._1
11791179 let ax = eC._2
11801180 if ((ax == ey))
11811181 then $Tuple2((cT :+ (ei - eB)), (ax + 1))
11821182 else $Tuple2((cT :+ ei), (ax + 1))
11831183 }
11841184
11851185 let eD = {
11861186 let aT = bb
11871187 let aU = size(aT)
11881188 let aV = $Tuple2(nil, 0)
11891189 func aW (aX,aY) = if ((aY >= aU))
11901190 then aX
11911191 else eh(aX, aT[aY])
11921192
11931193 func aZ (aX,aY) = if ((aY >= aU))
11941194 then aX
11951195 else throw("List size exceeds 15")
11961196
11971197 aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
11981198 }
11991199 let cT = eD._1
12001200 let eE = eD._2
12011201 if (cS(cT))
12021202 then throw()
12031203 else {
12041204 let el = cD(eB, ec)
12051205 if ((el == el))
12061206 then {
12071207 let dK = (eA - dG)
12081208 let dM = if ((dK > 0))
12091209 then invoke(Z, "airDrop", nil, [AttachedPayment(ef, dK)])
12101210 else 0
12111211 if ((dM == dM))
12121212 then [ScriptTransfer(df.originCaller, cm, ef), IntegerEntry((aq[ey] + i), (bb[ey] - eB)), Burn(ah, en), ScriptTransfer(U, dG, ef), IntegerEntry(m, (ai - en))]
12131213 else throw("Strict value is not equal to itself.")
12141214 }
12151215 else throw("Strict value is not equal to itself.")
12161216 }
12171217 }
12181218 }
12191219 }
12201220 })
12211221
12221222
12231223
12241224 @Callable(df)
12251225 func withdrawOneCoinWithUnlock (ec,ex,et) = valueOrElse(av(), if ((0 >= et))
12261226 then throw("Unlock amount must be positive")
12271227 else {
12281228 let cM = cI()
12291229 if (cM._1)
12301230 then (cO(cM._2) ++ cP(df.caller, df.payments))
12311231 else {
12321232 let en = if ((size(df.payments) > 0))
12331233 then if ((size(df.payments) != 1))
12341234 then throw("size(payments) != 1")
12351235 else {
12361236 let eo = df.payments[0].assetId
12371237 if ((ah != eo))
12381238 then throw("unknown payment token")
12391239 else df.payments[0].amount
12401240 }
12411241 else 0
12421242 let eu = invoke(Y, "withdrawShareTokens", [toString(this), et], nil)
12431243 if ((eu == eu))
12441244 then {
12451245 let ev = (en + et)
12461246 let dL = invoke(this, "withdrawOneCoin", [ec, ex], [AttachedPayment(ah, ev)])
12471247 if ((dL == dL))
12481248 then nil
12491249 else throw("Strict value is not equal to itself.")
12501250 }
12511251 else throw("Strict value is not equal to itself.")
12521252 }
12531253 })
12541254
12551255
12561256
12571257 @Callable(df)
12581258 func A () = $Tuple2(nil, aK())
12591259
12601260
12611261
12621262 @Callable(df)
12631263 func getVirtualPrice () = {
12641264 let bs = be(aP(), aK())
12651265 $Tuple2(nil, fraction(bs, a, ai))
12661266 }
12671267
12681268
12691269
12701270 @Callable(df)
12711271 func calcTokenAmount (eF,eG) = {
12721272 let bf = aK()
12731273 let eH = aP()
12741274 let ca = bv(eH, bf)
12751275 func eI (aR,ep) = {
12761276 let eJ = aR
12771277 let cT = eJ._1
12781278 let ax = eJ._2
12791279 let dz = (ep + (if (eG)
12801280 then eF[ax]
12811281 else -(eF[ax])))
12821282 $Tuple2((cT :+ dz), (ax + 1))
12831283 }
12841284
12851285 let cT = ( let aT = eH
12861286 let aU = size(aT)
12871287 let aV = $Tuple2(nil, 0)
12881288 func aW (aX,aY) = if ((aY >= aU))
12891289 then aX
12901290 else eI(aX, aT[aY])
12911291
12921292 func aZ (aX,aY) = if ((aY >= aU))
12931293 then aX
12941294 else throw("List size exceeds 15")
12951295
12961296 aZ(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aW(aV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15))._1
12971297 let cb = bv(cT, bf)
12981298 let eK = if (eG)
12991299 then (cb - ca)
13001300 else (ca - cb)
13011301 $Tuple2(nil, fraction(eK, ai, ca))
13021302 }
13031303
13041304
13051305
13061306 @Callable(df)
13071307 func rampA (eL,eM) = valueOrElse(av(), valueOrElse(aw(df), if (aB((aA >= (ao + e))))
13081308 then throw("too often")
13091309 else if (aB((eM >= (aA + e))))
13101310 then throw("insufficient time")
13111311 else {
13121312 let eN = aK()
13131313 if (aB(if ((eL > 0))
13141314 then (b > eL)
13151315 else false))
13161316 then throw("out of base range")
13171317 else if (aB(if (if ((eL >= eN))
13181318 then ((eN * c) >= eL)
13191319 else false)
13201320 then true
13211321 else if ((eN > eL))
13221322 then ((eL * c) >= eN)
13231323 else false))
13241324 then throw("out of range")
13251325 else [IntegerEntry("initial_A", eN), IntegerEntry("future_A", eL), IntegerEntry("initial_A_time", aA), IntegerEntry("future_A_time", eM)]
13261326 }))
13271327
13281328
13291329
13301330 @Callable(df)
13311331 func stopRampA () = valueOrElse(av(), valueOrElse(aw(df), {
13321332 let eO = aK()
13331333 [IntegerEntry("initial_A", eO), IntegerEntry("future_A", eO), IntegerEntry("initial_A_time", aA), IntegerEntry("future_A_time", aA)]
13341334 }))
13351335
13361336
13371337
13381338 @Callable(df)
13391339 func shutdown () = valueOrElse(aw(df), if (!(ag))
13401340 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, k), "the cause wasn't specified")))
13411341 else as("Paused by admin"))
13421342
13431343
13441344
13451345 @Callable(df)
13461346 func activate () = valueOrElse(aw(df), if (ag)
13471347 then au()
13481348 else [BooleanEntry(j, true), DeleteEntry(k)])
13491349
13501350
13511351
13521352 @Callable(df)
13531353 func keepLimitForFirstHarvest (eP) = valueOrElse(av(), valueOrElse(aw(df), [IntegerEntry(v, eP)]))
13541354
13551355
13561356 @Verifier(eQ)
13571357 func eR () = {
13581358 let eS = {
13591359 let eT = if (sigVerify(eQ.bodyBytes, eQ.proofs[0], Q))
13601360 then 1
13611361 else 0
13621362 let eU = if (sigVerify(eQ.bodyBytes, eQ.proofs[1], R))
13631363 then 1
13641364 else 0
13651365 let eV = if (sigVerify(eQ.bodyBytes, eQ.proofs[2], S))
13661366 then 1
13671367 else 0
13681368 (((eT + eU) + eV) >= 2)
13691369 }
13701370 let N = eQ
13711371 if ($isInstanceOf(N, "InvokeScriptTransaction"))
13721372 then {
13731373 let dL = N
13741374 let eW = if ((dL.dApp == this))
13751375 then (dL.function == "takeIntoAccountExtraFunds")
13761376 else false
13771377 let eX = if (if (if (sigVerify(eQ.bodyBytes, eQ.proofs[0], Q))
13781378 then true
13791379 else sigVerify(eQ.bodyBytes, eQ.proofs[0], R))
13801380 then true
13811381 else sigVerify(eQ.bodyBytes, eQ.proofs[0], S))
13821382 then true
13831383 else sigVerify(eQ.bodyBytes, eQ.proofs[0], T)
13841384 if (if (eW)
13851385 then eX
13861386 else false)
13871387 then true
13881388 else eS
13891389 }
13901390 else eS
13911391 }
13921392

github/deemru/w8io/169f3d6 
129.53 ms