tx · 5Unuj6SH4L7t9EfURPMuZpSKjFF42oHnwvHsHJaE7jfk

3MqzpRGNBq3GSxMonFoenAhNRDHJ2a8omm1:  -0.03000000 Waves

2023.08.10 20:30 [2704786] smart account 3MqzpRGNBq3GSxMonFoenAhNRDHJ2a8omm1 > SELF 0.00000000 Waves

{ "type": 13, "id": "5Unuj6SH4L7t9EfURPMuZpSKjFF42oHnwvHsHJaE7jfk", "fee": 3000000, "feeAssetId": null, "timestamp": 1691688670789, "version": 2, "chainId": 84, "sender": "3MqzpRGNBq3GSxMonFoenAhNRDHJ2a8omm1", "senderPublicKey": "Cm1uVVKocYw3S4eL9bYUMNZe5vpBPipgiiTx37eL6E8F", "proofs": [ "fTFcbDNCXD3JBfZXD57gmpwRQyRQg4TZ6Lgp7MS3W7PBaTsnEaLqcckLNGvdjcbGRs442e5PEvb73ca7VtvMFST" ], "script": "base64:BgJQCAISBAoCAQgSAwoBCBIUChIIAQEIAQEBAQEBAQEYBAEBBBgSBAoCAQgSBAoCAQgSBAoCAQgSBQoDAQEIEgMKAQESAwoBARIECgIBARIAEgBMAAlrZXlBY3RpdmUCBmFjdGl2ZQALa0FjdGl2ZUdsb2ICFGFjdGl2ZV9hbGxfY29udHJhY3RzAA9rZXlBZG1pblB1YktleTECC2FkbWluX3B1Yl8xAA9rZXlBZG1pblB1YktleTICC2FkbWluX3B1Yl8yAA9rZXlBZG1pblB1YktleTMCC2FkbWluX3B1Yl8zACFrZXlMYXVuY2hwYWREYXRhVHJhbnNhY3Rpb25TdGF0dXMCIWxhdW5jaHBhZF9kYXRhX3RyYW5zYWN0aW9uX3N0YXR1cwASa2V5TGF1bmNocGFkTmV4dElkAhFsYXVuY2hwYWRfbmV4dF9pZAAUa2V5TGF1bmNocGFkQWN0aXZlSWQCE2xhdW5jaHBhZF9hY3RpdmVfaWQADWtleUluaXRDYWxsZXICC2luaXRfY2FsbGVyAAprZXlBZGRyZXNzAghfYWRkcmVzcwANa2V5SW5pdEhlaWdodAIMX2luaXRfaGVpZ2h0AA5rZXlTdGFydEhlaWdodAINX3N0YXJ0X2hlaWdodAARa2V5RmluYWxpc2VIZWlnaHQCEF9maW5hbGlzZV9oZWlnaHQADGtleUNvbWlzc2lvbgIKX2NvbWlzc2lvbgAKa2V5QXNzZXRJZAIJX2Fzc2V0X2lkABNrZXlUb3RhbFRva2VuQW1vdW50AhNfdG90YWxfdG9rZW5fYW1vdW50ABprZXlUb3RhbEFtb3VudEJ1eUFzc2V0U29sZAIVX3RvdGFsX2J1eV9hc3NldF9zb2xkABJrZXlUb2tlbnNQZXJUaWNrZXQCEl90b2tlbnNfcGVyX3RpY2tldAAQa2V5UHJpY2VQZXJUb2tlbgIQX3ByaWNlX3Blcl90b2tlbgAQa2V5U3dvcFBlclRpY2tldAIQX3N3b3BfcGVyX3RpY2tldAAWa2V5U3dvcGZpVGlja2V0c0Ftb3VudAIXX3RpY2tldHNfc3dvcGZpX21lbWJlcnMAF2tleUNhbXBhaWduVG9rZW5zQW1vdW50AhNfdG9rZW5zX2FjY2Vzc19saXN0ABZrZXlUb2tlbnNQZXJBbGxvY2F0aW9uAhZfdG9rZW5zX3Blcl9hbGxvY2F0aW9uABNrZXlUaWNrZXRMYXN0TnVtYmVyAhNfdGlja2V0X2xhc3RfbnVtYmVyABNrZXlHb3Zlcm5hbmNlU3Rha2VkAg1fR1N3b3BfYW1vdW50AAxrZXlVc2VyUmVmSWQCB19yZWZfaWQADWtleVZlcmlmeUhhc2gCDF92ZXJpZnlfaGFzaAALa2V5RHVyYXRpb24CCV9kdXJhdGlvbgAca2V5QW1vdW50QnV5QXNzZXRJbk1hcmtldGluZwInX3RvdGFsX3B1cmNoYXNlZF9idXlfYXNzZXRfaW5fbWFya2V0aW5nACVrZXlBbW91bnRCdXlBc3NldEluTWFya2V0aW5nRmluYWxpemVkAjFfdG90YWxfcHVyY2hhc2VkX2J1eV9hc3NldF9pbl9tYXJrZXRpbmdfZmluYWxpemVkABNrZXlUcmFuc2ZlckJ1eUFzc2V0AhNfdHJhbnNmZXJfYnV5X2Fzc2V0ABRrZXlGcmVlelN3b3BEdXJhdGlvbgIVX2ZyZWV6ZV9zd29wX2R1cmF0aW9uABhrZXlGcmVlemVBZGRpdGlvbmFsVG9rZW4CGF9mcmVlemVfYWRkaXRpb25hbF90b2tlbgAQa2V5RnJlZXplVG9rZW5JZAIQX2ZyZWV6ZV90b2tlbl9pZAAWa2V5RnJlZXplVG9rZW5EdXJhdGlvbgIWX2ZyZWV6ZV90b2tlbl9kdXJhdGlvbgAXa2V5RnJlZXplVG9rZW5QZXJUaWNrZXQCGF9mcmVlemVfdG9rZW5fcGVyX3RpY2tldAALa2V5QnV5VG9rZW4CCl9idXlfdG9rZW4ADmtleUNsYWltUGFyYW1zAg1fY2xhaW1fcGFyYW1zABtrZXlIaWdoQ29tcGV0aXRpb25Db21pc3Npb24CG19oaWdoX2NvbXBldGl0aW9uX2NvbWlzc2lvbgAWa2V5SGlnaENvbXBldGl0aW9uU2FsZQIWX2hpZ2hfY29tcGV0aXRpb25fc2FsZQAVa2V5SENUaWNrZXRMYXN0TnVtYmVyAiRfaGlnaF9jb21wZXRpdGlvbl90aWNrZXRfbGFzdF9udW1iZXIAGGtleUhpZ2hDb21wZXRpdGlvbkFtb3VudAIZX3RpY2tldHNfaGlnaF9jb21wZXRpdGlvbgAca2V5VG90YWxBbW91bnRCdXlBc3NldFNvbGRIQwImX3RvdGFsX2J1eV9hc3NldF9zb2xkX2hpZ2hfY29tcGV0aXRpb24AFGtleVVzZXJDbGFpbWVkVG9rZW5zAg9fY2xhaW1lZF90b2tlbnMAF2tleVVzZXJDbGFpbWVkQnV5VG9rZW5zAhNfY2xhaW1lZF9idXlfdG9rZW5zABprZXlVc2VyQm91Z2h0VGlja2V0c0Ftb3VudAIPX2JvdWdodF90aWNrZXRzAA5rZXlVc2VyVGlja2V0cwIPX3RpY2tldHNfbnVtYmVyABBrZXlVc2VySENUaWNrZXRzAiBfdGlja2V0c19udW1iZXJfaGlnaF9jb21wZXRpdGlvbgAca2V5VXNlckhDQm91Z2h0VGlja2V0c0Ftb3VudAIgX2JvdWdodF90aWNrZXRzX2hpZ2hfY29tcGV0aXRpb24AG2tleVVzZXJBdmFpbGFibGVBbGxvY2F0aW9ucwIdX2F2YWlsYWJsZV9wdXJjaGFzZV9tYXJrZXRpbmcAIGtleVVzZXJBbW91bnRCdXlBc3NldEluTWFya2V0aW5nAiFfcHVyY2hhc2VkX2J1eV9hc3NldF9pbl9tYXJrZXRpbmcAGGtleVVzZXJCb3VnaHRBbGxvY2F0aW9ucwITX2JvdWdodF9hbGxvY2F0aW9ucwASa2V5VXNlckNsYWltU3RhdHVzAg1fY2xhaW1fc3RhdHVzABprZXlVc2VyV2lubmVkVGlja2V0c0Ftb3VudAIPX3RpY2tldHNfcmVzdWx0AClrZXlVc2VyV2lubmVkSGlnaENvbXBldGl0aW9uVGlja2V0c0Ftb3VudAIgX3RpY2tldHNfcmVzdWx0X2hpZ2hfY29tcGV0aXRpb24AEmtleVVzZXJGcmVlemVUb2tlbgIUX2ZyZWV6ZV90b2tlbl9hbW91bnQABm9yYWNsZQkBB0FkZHJlc3MBARoBVEgTlwzA0zPMJTKAtin3p2RogKvjzHtLmQAKZ292ZXJuYW5jZQkBB0FkZHJlc3MBARoBVMjcuWCotbWVPLfydaKVHLjfUPyH4RW0IgAQY29tbWlzc2lvbldhbGxldAkBB0FkZHJlc3MBARoBVIu67/x0Qcp5qolR7D86Zc0NPlB1AJuHDgASc3Rha2luZ1VTRE5BZGRyZXNzCQEHQWRkcmVzcwEBGgFUyzDUI2tI0RnhEQqOmg6HEPqnSokkZ5v9AARVU0ROASA0ARNWjmBG4n5bqbgBR4LnsQAmEpt25E5LoqB8nG3ugQASYWRtaW5QdWJLZXlTdGFraW5nASAEz3XlZNDBD05nuR8TZMQaDeqEJEIxfTOQXUBYCp2TSgAUbWF4QWxsb2NhdGlvbnNBbW91bnQAAgARYWN0aXZlTGF1bmNocGFkSWQJAQt2YWx1ZU9yRWxzZQIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFFGtleUxhdW5jaHBhZEFjdGl2ZUlkAP///////////wEBC2dldEFkbWluUHViAQtrZXlBZG1pblB1YgQHJG1hdGNoMAkAnQgCBQZvcmFjbGUFC2tleUFkbWluUHViAwkAAQIFByRtYXRjaDACBlN0cmluZwQGc3RyaW5nBQckbWF0Y2gwCQDZBAEFBnN0cmluZwQHbm90aGluZwUHJG1hdGNoMAkAAgECGUFkbWluIHB1YmxpYyBrZXkgaXMgZW1wdHkADGFkbWluUHViS2V5MQkBC2dldEFkbWluUHViAQUPa2V5QWRtaW5QdWJLZXkxAAxhZG1pblB1YktleTIJAQtnZXRBZG1pblB1YgEFD2tleUFkbWluUHViS2V5MgAMYWRtaW5QdWJLZXkzCQELZ2V0QWRtaW5QdWIBBQ9rZXlBZG1pblB1YktleTMBDGdldEFzc2V0SW5mbwEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJpZAUHJG1hdGNoMAQIc3RyaW5nSWQJANgEAQUCaWQEBGluZm8JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQJpZAkArAICCQCsAgICBkFzc2V0IAUIc3RyaW5nSWQCDiBkb2Vzbid0IGV4aXN0CQCVCgMFCHN0cmluZ0lkCAUEaW5mbwRuYW1lCAUEaW5mbwhkZWNpbWFscwMJAAECBQckbWF0Y2gwAgRVbml0BAV3YXZlcwUHJG1hdGNoMAkAlQoDAgVXQVZFUwIFV0FWRVMACAkAAgECC01hdGNoIGVycm9yARJnZXRMYXVuY2hwYWROZXh0SWQACQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFEmtleUxhdW5jaHBhZE5leHRJZAABARBzdGFrZWRVc2RuQW1vdW50AAkBC3ZhbHVlT3JFbHNlAgkAmggCBRJzdGFraW5nVVNETkFkZHJlc3MJAKwCAgkArAICCQCsAgICDHJwZF9iYWxhbmNlXwkA2AQBBQRVU0ROAgFfCQClCAEFBHRoaXMAAAAGYWN0aXZlCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFCWtleUFjdGl2ZQYACmFjdGl2ZUdsb2IJAQt2YWx1ZU9yRWxzZQIJAJsIAgUGb3JhY2xlBQtrQWN0aXZlR2xvYgYBCGlzQWN0aXZlAAMDBQZhY3RpdmUFCmFjdGl2ZUdsb2IHBQR1bml0CQACAQIfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAELaXNBZG1pbkNhbGwBAWkDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQxhZG1pblB1YktleTEJAMwIAgUMYWRtaW5QdWJLZXkyCQDMCAIFDGFkbWluUHViS2V5MwUDbmlsCAUBaQ9jYWxsZXJQdWJsaWNLZXkFBHVuaXQJAAIBAiFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BFmdldEFzc2V0SW5mb0Zyb21TdHJpbmcBCGFzc2V0U3RyAwkAAAIFCGFzc2V0U3RyAgVXQVZFUwkAlgoEBQR1bml0AgVXQVZFUwIFV0FWRVMACAQIc3RyaW5nSWQFCGFzc2V0U3RyBAJpZAkA2QQBBQhhc3NldFN0cgQEaW5mbwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmlkCQCsAgIJAKwCAgIGQXNzZXQgBQhzdHJpbmdJZAIOIGRvZXNuJ3QgZXhpc3QJAJYKBAUCaWQFCHN0cmluZ0lkCAUEaW5mbwRuYW1lCAUEaW5mbwhkZWNpbWFscwwBaQENaGFzaGluZ1JhbmRvbQILbGF1bmNocGFkSWQEaGFzaAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFDWtleVZlcmlmeUhhc2gFBGhhc2gFA25pbAFpAQppbml0Q2FsbGVyAQdhZGRyZXNzCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpCQDMCAIJAQtTdHJpbmdFbnRyeQIFDWtleUluaXRDYWxsZXIFB2FkZHJlc3MFA25pbAFpAQRpbml0Eg5wcm9qZWN0QWRkcmVzcwtzdGFydEhlaWdodAhkdXJhdGlvbghidXlUb2tlbgpjb21taXNzaW9uD3Rva2Vuc1BlclRpY2tldA1wcmljZVBlclRva2VuE3N3b3BmaVRpY2tldHNBbW91bnQUY2FtcGFpZ25Ub2tlbnNBbW91bnQTdG9rZW5zUGVyQWxsb2NhdGlvbg1zd29wUGVyVGlja2V0EnN3b3BGcmVlemVEdXJhdGlvbgtjbGFpbVBhcmFtcxNIaWdoQ29tcGV0aXRpb25TYWxlGGhpZ2hDb21wZXRpdGlvbkNvbWlzc2lvbhxoaWdoQ29tcGV0aXRpb25UaWNrZXRzQW1vdW50FWZyZWV6ZUFkZGl0aW9uYWxUb2tlbgxmcmVlemVQYXJhbXMJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQADCQECIT0CCQClCAEIBQFpBmNhbGxlcgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQ1rZXlJbml0Q2FsbGVyAgAJAAIBAilPbmx5IHByb2plY3QgYWRtaW4gY2FuIGNhbGwgaW5pdCBmdW5jdGlvbgMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHU9uZSBhdHRhY2hlZCBwYXltZW50IGV4cGVjdGVkAwkAZgIFBmhlaWdodAULc3RhcnRIZWlnaHQJAAIBAjNTdGFydCBoZWlnaHQgbXVzdCBiZSBncmVhdGVyIHRoYW4gYmxvY2tjaGFpbiBoZWlnaHQDAwUVZnJlZXplQWRkaXRpb25hbFRva2VuCQECIT0CCQCQAwEFDGZyZWV6ZVBhcmFtcwADBwkAAgECJEZyZWV6ZSBwYXJhbXMgbGlzdCBtdXN0IGhhdmUgMyBpdGVtcwQLbGF1bmNocGFkSWQJARJnZXRMYXVuY2hwYWROZXh0SWQABA5sYXVuY2hwYWRJZFN0cgkApAMBBQtsYXVuY2hwYWRJZAQLJHQwNjQ5OTY1NzQJAJQKAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQJcG10QW1vdW50CAULJHQwNjQ5OTY1NzQCXzEECnBtdEFzc2V0SWQIBQskdDA2NDk5NjU3NAJfMgQLJHQwNjU4MzY2NTYJAQxnZXRBc3NldEluZm8BBQpwbXRBc3NldElkBA1wbXRTdHJBc3NldElkCAULJHQwNjU4MzY2NTYCXzEEDHBtdEFzc2V0TmFtZQgFCyR0MDY1ODM2NjU2Al8yBAtwbXREZWNpbWFscwgFCyR0MDY1ODM2NjU2Al8zBBVmcmVlemVBZGRpdGlvbmFsRW50cnkDBRVmcmVlemVBZGRpdGlvbmFsVG9rZW4JAMwIAgkBDEJvb2xlYW5FbnRyeQIJAKwCAgUObGF1bmNocGFkSWRTdHIFGGtleUZyZWV6ZUFkZGl0aW9uYWxUb2tlbgYJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQ5sYXVuY2hwYWRJZFN0cgUQa2V5RnJlZXplVG9rZW5JZAkAkQMCBQxmcmVlemVQYXJhbXMAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQ5sYXVuY2hwYWRJZFN0cgUWa2V5RnJlZXplVG9rZW5EdXJhdGlvbgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDGZyZWV6ZVBhcmFtcwABCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFDmxhdW5jaHBhZElkU3RyBRdrZXlGcmVlemVUb2tlblBlclRpY2tldAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDGZyZWV6ZVBhcmFtcwACBQNuaWwFA25pbAkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFDXBtdFN0ckFzc2V0SWQCCl9sYXVuY2hwYWQFC2xhdW5jaHBhZElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrZXlMYXVuY2hwYWROZXh0SWQJAGQCBQtsYXVuY2hwYWRJZAABCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUObGF1bmNocGFkSWRTdHIFCmtleUFkZHJlc3MFDnByb2plY3RBZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFDmxhdW5jaHBhZElkU3RyBQ1rZXlJbml0SGVpZ2h0BQZoZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUObGF1bmNocGFkSWRTdHIFDmtleVN0YXJ0SGVpZ2h0BQtzdGFydEhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQ5sYXVuY2hwYWRJZFN0cgULa2V5RHVyYXRpb24FCGR1cmF0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUObGF1bmNocGFkSWRTdHIFC2tleUJ1eVRva2VuBQhidXlUb2tlbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQ5sYXVuY2hwYWRJZFN0cgUUa2V5RnJlZXpTd29wRHVyYXRpb24FEnN3b3BGcmVlemVEdXJhdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQ5sYXVuY2hwYWRJZFN0cgUTa2V5VG90YWxUb2tlbkFtb3VudAUJcG10QW1vdW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUObGF1bmNocGFkSWRTdHIFCmtleUFzc2V0SWQFDXBtdFN0ckFzc2V0SWQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUObGF1bmNocGFkSWRTdHIFDGtleUNvbWlzc2lvbgUKY29tbWlzc2lvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQ5sYXVuY2hwYWRJZFN0cgUTa2V5VGlja2V0TGFzdE51bWJlcgAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFDmxhdW5jaHBhZElkU3RyBRVrZXlIQ1RpY2tldExhc3ROdW1iZXIAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQ5sYXVuY2hwYWRJZFN0cgUSa2V5VG9rZW5zUGVyVGlja2V0BQ90b2tlbnNQZXJUaWNrZXQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUObGF1bmNocGFkSWRTdHIFEGtleVByaWNlUGVyVG9rZW4FDXByaWNlUGVyVG9rZW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUObGF1bmNocGFkSWRTdHIFEGtleVN3b3BQZXJUaWNrZXQFDXN3b3BQZXJUaWNrZXQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUObGF1bmNocGFkSWRTdHIFFmtleVN3b3BmaVRpY2tldHNBbW91bnQFE3N3b3BmaVRpY2tldHNBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUObGF1bmNocGFkSWRTdHIFF2tleUNhbXBhaWduVG9rZW5zQW1vdW50BRRjYW1wYWlnblRva2Vuc0Ftb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQ5sYXVuY2hwYWRJZFN0cgUWa2V5VG9rZW5zUGVyQWxsb2NhdGlvbgUTdG9rZW5zUGVyQWxsb2NhdGlvbgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFDmxhdW5jaHBhZElkU3RyBQ5rZXlDbGFpbVBhcmFtcwkAuQkCBQtjbGFpbVBhcmFtcwIBLAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkArAICBQ5sYXVuY2hwYWRJZFN0cgUWa2V5SGlnaENvbXBldGl0aW9uU2FsZQUTSGlnaENvbXBldGl0aW9uU2FsZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQ5sYXVuY2hwYWRJZFN0cgUba2V5SGlnaENvbXBldGl0aW9uQ29taXNzaW9uBRhoaWdoQ29tcGV0aXRpb25Db21pc3Npb24JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUObGF1bmNocGFkSWRTdHIFGGtleUhpZ2hDb21wZXRpdGlvbkFtb3VudAUcaGlnaENvbXBldGl0aW9uVGlja2V0c0Ftb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUUa2V5TGF1bmNocGFkQWN0aXZlSWQFC2xhdW5jaHBhZElkCQDMCAIJAQtTdHJpbmdFbnRyeQIFDWtleUluaXRDYWxsZXICAAUDbmlsBRVmcmVlemVBZGRpdGlvbmFsRW50cnkBaQEQY29tbWl0U3dvcGZpU2FsZQILbGF1bmNocGFkSWQFcmVmSWQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAECyR0MDkyNjI5MzM3CQCUCgIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQECXBtdEFtb3VudAgFCyR0MDkyNjI5MzM3Al8xBApwbXRBc3NldElkCAULJHQwOTI2MjkzMzcCXzIECyR0MDkzNDI5NDkyCQEWZ2V0QXNzZXRJbmZvRnJvbVN0cmluZwEJAQV2YWx1ZQEJAJ0IAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBQtrZXlCdXlUb2tlbgQKYnV5QXNzZXRJZAgFCyR0MDkzNDI5NDkyAl8xBA1idXlBc3NldFN0cklkCAULJHQwOTM0Mjk0OTICXzIEDGJ1eUFzc2V0TmFtZQgFCyR0MDkzNDI5NDkyAl8zBBBidXlBc3NldERlY2ltYWxzCAULJHQwOTM0Mjk0OTICXzQEC3N0YWtlZFN3b3BzCQELdmFsdWVPckVsc2UCCQCaCAIFCmdvdmVybmFuY2UJAKwCAgkApQgBCAUBaQZjYWxsZXIFE2tleUdvdmVybmFuY2VTdGFrZWQAAAQXYWxsb3dlZFRpY2tldHNBbW91bnRBbGwJAGkCBQtzdGFrZWRTd29wcwkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBRBrZXlTd29wUGVyVGlja2V0BBNib3VnaHRUaWNrZXRzQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFC2xhdW5jaHBhZElkBRprZXlVc2VyQm91Z2h0VGlja2V0c0Ftb3VudAAABBRhbGxvd2VkVGlja2V0c0Ftb3VudAkAZQIFF2FsbG93ZWRUaWNrZXRzQW1vdW50QWxsBRNib3VnaHRUaWNrZXRzQW1vdW50BAtzdGFydEhlaWdodAkBBXZhbHVlAQkAmggCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFDmtleVN0YXJ0SGVpZ2h0BAhkdXJhdGlvbgkBBXZhbHVlAQkAmggCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFC2tleUR1cmF0aW9uBBVmcmVlemVBZGRpdGlvbmFsVG9rZW4JAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBRhrZXlGcmVlemVBZGRpdGlvbmFsVG9rZW4HAwkBAiE9AgURYWN0aXZlTGF1bmNocGFkSWQFC2xhdW5jaHBhZElkCQACAQI3VGhlcmUgaXMgbm8gYWN0aXZlIGxhdW5jaHBhZCBvciB0aGlzIGxhdW5jaHBhZCBpcyBlbmRlZAMJAGYCBQtzdGFydEhlaWdodAUGaGVpZ2h0CQACAQIeTGF1bmNocGFkIHNhbGUgbm90IHN0YXJ0ZWQgeWV0AwkAZgIFBmhlaWdodAkAZAIFC3N0YXJ0SGVpZ2h0BQhkdXJhdGlvbgkAAgECFExhdW5jaHBhZCBzYWxlIGVuZGVkAwMJAQEhAQUVZnJlZXplQWRkaXRpb25hbFRva2VuAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABBgkBAiE9AgUKcG10QXNzZXRJZAUKYnV5QXNzZXRJZAcJAAIBCQCsAgIJAKwCAgIYT25lIGF0dGFjaGVkIHBheW1lbnQgaW4gBQxidXlBc3NldE5hbWUCCSBleHBlY3RlZAMDBRVmcmVlemVBZGRpdGlvbmFsVG9rZW4DCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAIGCQECIT0CBQpwbXRBc3NldElkBQpidXlBc3NldElkBwQNZnJlZXplVG9rZW5JZAkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBRBrZXlGcmVlemVUb2tlbklkCQACAQkArAICCQCsAgIJAKwCAgIpVHdvIGF0dGFjaGVkIHBheW1lbnRzIGV4cGVjdGVkOiBGaXJzdCBpbiAFDGJ1eUFzc2V0TmFtZQIMLCBzZWNvbmQgaW4gBQ1mcmVlemVUb2tlbklkAwMJAGcCAAAFF2FsbG93ZWRUaWNrZXRzQW1vdW50QWxsBgkAZwIAAAUUYWxsb3dlZFRpY2tldHNBbW91bnQJAAIBAipOb3QgZW5vdWdodCBTV09QIGluIHN0YWtpbmcgdG8gYnV5IHRpY2tldHMECnRva2VuUHJpY2UJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkApAMBBQtsYXVuY2hwYWRJZAUQa2V5UHJpY2VQZXJUb2tlbgQPdG9rZW5zUGVyVGlja2V0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFEmtleVRva2Vuc1BlclRpY2tldAQNJHQwMTEzMDQxMTQ0OAkBFmdldEFzc2V0SW5mb0Zyb21TdHJpbmcBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFCmtleUFzc2V0SWQEB3Rva2VuSWQIBQ0kdDAxMTMwNDExNDQ4Al8xBA90b2tlblN0ckFzc2V0SWQIBQ0kdDAxMTMwNDExNDQ4Al8yBA50b2tlbkFzc2V0TmFtZQgFDSR0MDExMzA0MTE0NDgCXzMEDXRva2VuRGVjaW1hbHMIBQ0kdDAxMTMwNDExNDQ4Al80BAt0aWNrZXRQcmljZQkAawMFD3Rva2Vuc1BlclRpY2tldAUKdG9rZW5QcmljZQkAbAYACgAABQ10b2tlbkRlY2ltYWxzAAAAAAUERE9XTgQTY29tbWlzc2lvblBlclRpY2tldAkAawMFC3RpY2tldFByaWNlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFDGtleUNvbWlzc2lvbgBkBA9idXlUaWNrZXRBbW91bnQJAGkCBQlwbXRBbW91bnQJAGQCBQt0aWNrZXRQcmljZQUTY29tbWlzc2lvblBlclRpY2tldAQWYWxsb3dlZEJ1eVRpY2tldEFtb3VudAkAlwMBCQDMCAIFD2J1eVRpY2tldEFtb3VudAkAzAgCBRRhbGxvd2VkVGlja2V0c0Ftb3VudAUDbmlsBBxhbGxvd2VkQnV5UHJpY2VXaXRoQ29taXNzaW9uCQBoAgUWYWxsb3dlZEJ1eVRpY2tldEFtb3VudAkAZAIFC3RpY2tldFByaWNlBRNjb21taXNzaW9uUGVyVGlja2V0BAZjaGFuZ2UJAGUCBQlwbXRBbW91bnQFHGFsbG93ZWRCdXlQcmljZVdpdGhDb21pc3Npb24DCQAAAgUPYnV5VGlja2V0QW1vdW50AAAJAAIBCQCsAgIJAKwCAgIMTm90IGVub3VnaHQgBQxidXlBc3NldE5hbWUCDyB0byBidXkgdGlja2V0cwMJAQIhPQIFBmNoYW5nZQAACQACAQkArAICCQCsAgIJAKwCAgkArAICAhZXcm9uZyBwYXltZW50LiBUbyBidXkgCQCkAwEFFmFsbG93ZWRCdXlUaWNrZXRBbW91bnQCGHRpY2tldHMgeW91IG5lZWQgdG8gcGF5IAkApAMBBRxhbGxvd2VkQnV5UHJpY2VXaXRoQ29taXNzaW9uBQxidXlBc3NldE5hbWUEFWZyZWV6ZUFkZGl0aW9uYWxFbnRyeQMFFWZyZWV6ZUFkZGl0aW9uYWxUb2tlbgQNZnJlZXplVG9rZW5JZAkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBRBrZXlGcmVlemVUb2tlbklkBBRmcmVlemVUb2tlblBlclRpY2tldAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBRdrZXlGcmVlemVUb2tlblBlclRpY2tldAQNJHQwMTI2MTIxMjY5OQkAlAoCCAkAkQMCCAUBaQhwYXltZW50cwABBmFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAQdhc3NldElkBA9wbXRBbW91bnRGcmVlemUIBQ0kdDAxMjYxMjEyNjk5Al8xBBBwbXRBc3NldElkRnJlZXplCAUNJHQwMTI2MTIxMjY5OQJfMgQNJHQwMTI3MTYxMjgwNwkBDGdldEFzc2V0SW5mbwEFCnBtdEFzc2V0SWQEE3BtdEZyZWV6ZVN0ckFzc2V0SWQIBQ0kdDAxMjcxNjEyODA3Al8xBBJwbXRGcmVlemVBc3NldE5hbWUIBQ0kdDAxMjcxNjEyODA3Al8yBBFwbXRGcmVlemVEZWNpbWFscwgFDSR0MDEyNzE2MTI4MDcCXzMEEG5lZWRGcmVlemVUb2tlbnMJAGgCBRRmcmVlemVUb2tlblBlclRpY2tldAUPYnV5VGlja2V0QW1vdW50AwMJAQIhPQIFE3BtdEZyZWV6ZVN0ckFzc2V0SWQFDWZyZWV6ZVRva2VuSWQGCQECIT0CBRBuZWVkRnJlZXplVG9rZW5zBQ9wbXRBbW91bnRGcmVlemUJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEFlvdSBuZWVkIHRvIGFkZCAJAKQDAQUQbmVlZEZyZWV6ZVRva2VucwIBIAUScG10RnJlZXplQXNzZXROYW1lAhQgYXMgYSBzZWNvbmQgcGF5bWVudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQULbGF1bmNocGFkSWQFEmtleVVzZXJGcmVlemVUb2tlbgUPcG10QW1vdW50RnJlZXplBQNuaWwFA25pbAQYdXNlckJvdWdodFRpY2tldHNOdW1iZXJzCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFC2xhdW5jaHBhZElkBQ5rZXlVc2VyVGlja2V0cwIABBZsYXN0Qm91Z2h0VGlja2V0TnVtYmVyCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFE2tleVRpY2tldExhc3ROdW1iZXIEC2JvdWdodFJhbmdlCQCsAgIJAKwCAgkApAMBCQBkAgUWbGFzdEJvdWdodFRpY2tldE51bWJlcgABAgEtCQCkAwEJAGQCBRZsYXN0Qm91Z2h0VGlja2V0TnVtYmVyBRZhbGxvd2VkQnV5VGlja2V0QW1vdW50BBtuZXdVc2VyQm91Z2h0VGlja2V0c051bWJlcnMJAKwCAgUYdXNlckJvdWdodFRpY2tldHNOdW1iZXJzAwkBAiE9AgUYdXNlckJvdWdodFRpY2tldHNOdW1iZXJzAgAJAKwCAgIBLAULYm91Z2h0UmFuZ2UJAKwCAgIABQtib3VnaHRSYW5nZQQDaW52AwkAAAIFCmJ1eUFzc2V0SWQFBFVTRE4JAPwHBAUSc3Rha2luZ1VTRE5BZGRyZXNzAgxsb2NrTmV1dHJpbm8FA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUKcG10QXNzZXRJZAUJcG10QW1vdW50BQNuaWwAAAMJAAACBQNpbnYFA2ludgQJYmFzZUVudHJ5CQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFC2xhdW5jaHBhZElkBRprZXlVc2VyQm91Z2h0VGlja2V0c0Ftb3VudAkAZAIFE2JvdWdodFRpY2tldHNBbW91bnQFFmFsbG93ZWRCdXlUaWNrZXRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkApAMBBQtsYXVuY2hwYWRJZAUTa2V5VGlja2V0TGFzdE51bWJlcgkAZAIFFmxhc3RCb3VnaHRUaWNrZXROdW1iZXIFFmFsbG93ZWRCdXlUaWNrZXRBbW91bnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQULbGF1bmNocGFkSWQFDmtleVVzZXJUaWNrZXRzBRtuZXdVc2VyQm91Z2h0VGlja2V0c051bWJlcnMFA25pbAUVZnJlZXplQWRkaXRpb25hbEVudHJ5AwkBASEBCQEJaXNEZWZpbmVkAQkAnQgCBQR0aGlzCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQtsYXVuY2hwYWRJZAUMa2V5VXNlclJlZklkCQDOCAIFCWJhc2VFbnRyeQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQtsYXVuY2hwYWRJZAUMa2V5VXNlclJlZklkBQVyZWZJZAUDbmlsBQliYXNlRW50cnkJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEUY29tbWl0QWNjZXNzTGlzdFNhbGUCC2xhdW5jaHBhZElkBXJlZklkCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUABA0kdDAxNDg3ODE0OTUzCQCUCgIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQECXBtdEFtb3VudAgFDSR0MDE0ODc4MTQ5NTMCXzEECnBtdEFzc2V0SWQIBQ0kdDAxNDg3ODE0OTUzAl8yBA0kdDAxNDk1ODE1MTA4CQEWZ2V0QXNzZXRJbmZvRnJvbVN0cmluZwEJAQV2YWx1ZQEJAJ0IAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBQtrZXlCdXlUb2tlbgQKYnV5QXNzZXRJZAgFDSR0MDE0OTU4MTUxMDgCXzEEDWJ1eUFzc2V0U3RySWQIBQ0kdDAxNDk1ODE1MTA4Al8yBAxidXlBc3NldE5hbWUIBQ0kdDAxNDk1ODE1MTA4Al8zBBBidXlBc3NldERlY2ltYWxzCAUNJHQwMTQ5NTgxNTEwOAJfNAQTdXNlclVzZG5Jbk1hcmtldGluZwkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQtsYXVuY2hwYWRJZAUga2V5VXNlckFtb3VudEJ1eUFzc2V0SW5NYXJrZXRpbmcAAAQPdXNkbkluTWFya2V0aW5nCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkApAMBBQtsYXVuY2hwYWRJZAUca2V5QW1vdW50QnV5QXNzZXRJbk1hcmtldGluZwAABBFib3VnaHRBbGxvY2F0aW9ucwkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQtsYXVuY2hwYWRJZAUYa2V5VXNlckJvdWdodEFsbG9jYXRpb25zAAAECmNvbW1pc3Npb24JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkApAMBBQtsYXVuY2hwYWRJZAUMa2V5Q29taXNzaW9uBAp0b2tlblByaWNlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFEGtleVByaWNlUGVyVG9rZW4EE3Rva2Vuc1BlckFsbG9jYXRpb24JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkApAMBBQtsYXVuY2hwYWRJZAUWa2V5VG9rZW5zUGVyQWxsb2NhdGlvbgQNJHQwMTU3NzcxNTkyMQkBFmdldEFzc2V0SW5mb0Zyb21TdHJpbmcBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFCmtleUFzc2V0SWQEB3Rva2VuSWQIBQ0kdDAxNTc3NzE1OTIxAl8xBA90b2tlblN0ckFzc2V0SWQIBQ0kdDAxNTc3NzE1OTIxAl8yBA50b2tlbkFzc2V0TmFtZQgFDSR0MDE1Nzc3MTU5MjECXzMEDXRva2VuRGVjaW1hbHMIBQ0kdDAxNTc3NzE1OTIxAl80BBxhbGxvY2F0aW9uUHJpY2VXaXRoQ29taXNzaW9uCQBrAwkAawMFCnRva2VuUHJpY2UFE3Rva2Vuc1BlckFsbG9jYXRpb24JAGwGAAoAAAUNdG9rZW5EZWNpbWFscwAAAAAFBERPV04JAGQCAGQFCmNvbW1pc3Npb24AZAQLc3RhcnRIZWlnaHQJAQV2YWx1ZQEJAJoIAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBQ5rZXlTdGFydEhlaWdodAQIZHVyYXRpb24JAQV2YWx1ZQEJAJoIAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBQtrZXlEdXJhdGlvbgMJAQIhPQIFEWFjdGl2ZUxhdW5jaHBhZElkBQtsYXVuY2hwYWRJZAkAAgECN1RoZXJlIGlzIG5vIGFjdGl2ZSBsYXVuY2hwYWQgb3IgdGhpcyBsYXVuY2hwYWQgaXMgZW5kZWQDCQBmAgULc3RhcnRIZWlnaHQFBmhlaWdodAkAAgECHkxhdW5jaHBhZCBzYWxlIG5vdCBzdGFydGVkIHlldAMJAGYCBQZoZWlnaHQJAGQCBQtzdGFydEhlaWdodAUIZHVyYXRpb24JAAIBAhRMYXVuY2hwYWQgc2FsZSBlbmRlZAMDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEGCQECIT0CBQpwbXRBc3NldElkBQpidXlBc3NldElkCQACAQkArAICCQCsAgICGE9uZSBhdHRhY2hlZCBwYXltZW50IGluIAUMYnV5QXNzZXROYW1lAgkgZXhwZWN0ZWQDCQBnAgURYm91Z2h0QWxsb2NhdGlvbnMFFG1heEFsbG9jYXRpb25zQW1vdW50CQACAQkArAICCQCsAgICEVlvdSBjYW4gYnV5IG9ubHkgCQCkAwEFFG1heEFsbG9jYXRpb25zQW1vdW50AgthbGxvY2F0aW9ucwMDCQECIT0CBRxhbGxvY2F0aW9uUHJpY2VXaXRoQ29taXNzaW9uBQlwbXRBbW91bnQJAQIhPQIJAGgCBRxhbGxvY2F0aW9uUHJpY2VXaXRoQ29taXNzaW9uAAIFCXBtdEFtb3VudAcJAAIBCQCsAgIJAKwCAgkArAICAjJXcm9uZyBwYXltZW50LiBZb3UgY2FuIGJ1eSAxIG9yIDIgYWxsb2NhdGlvbnMgZm9yIAkApAMBBRxhbGxvY2F0aW9uUHJpY2VXaXRoQ29taXNzaW9uBQxidXlBc3NldE5hbWUCDyBwZXIgYWxsb2NhdGlvbgQUYnV5QWxsb2NhdGlvbnNBbW91bnQJAGkCBQlwbXRBbW91bnQFHGFsbG9jYXRpb25QcmljZVdpdGhDb21pc3Npb24EA2ludgMJAAACBQpidXlBc3NldElkBQRVU0ROCQD8BwQFEnN0YWtpbmdVU0ROQWRkcmVzcwIMbG9ja05ldXRyaW5vBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCnBtdEFzc2V0SWQFCXBtdEFtb3VudAUDbmlsAAADCQAAAgUDaW52BQNpbnYECWJhc2VFbnRyeQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQULbGF1bmNocGFkSWQFGGtleVVzZXJCb3VnaHRBbGxvY2F0aW9ucwkAZAIFEWJvdWdodEFsbG9jYXRpb25zBRRidXlBbGxvY2F0aW9uc0Ftb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQULbGF1bmNocGFkSWQFIGtleVVzZXJBbW91bnRCdXlBc3NldEluTWFya2V0aW5nCQBkAgUTdXNlclVzZG5Jbk1hcmtldGluZwUJcG10QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFHGtleUFtb3VudEJ1eUFzc2V0SW5NYXJrZXRpbmcJAGQCBQ91c2RuSW5NYXJrZXRpbmcFCXBtdEFtb3VudAUDbmlsAwkBASEBCQEJaXNEZWZpbmVkAQkAnQgCBQR0aGlzCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQtsYXVuY2hwYWRJZAUMa2V5VXNlclJlZklkCQDOCAIFCWJhc2VFbnRyeQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQtsYXVuY2hwYWRJZAUMa2V5VXNlclJlZklkBQVyZWZJZAUDbmlsBQliYXNlRW50cnkJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEZY29tbWl0SGlnaENvbXBldGl0aW9uU2FsZQILbGF1bmNocGFkSWQFcmVmSWQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAEDSR0MDE4MTc5MTgyNTQJAJQKAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQJcG10QW1vdW50CAUNJHQwMTgxNzkxODI1NAJfMQQKcG10QXNzZXRJZAgFDSR0MDE4MTc5MTgyNTQCXzIEDSR0MDE4MjU5MTg0MDkJARZnZXRBc3NldEluZm9Gcm9tU3RyaW5nAQkBBXZhbHVlAQkAnQgCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFC2tleUJ1eVRva2VuBApidXlBc3NldElkCAUNJHQwMTgyNTkxODQwOQJfMQQNYnV5QXNzZXRTdHJJZAgFDSR0MDE4MjU5MTg0MDkCXzIEDGJ1eUFzc2V0TmFtZQgFDSR0MDE4MjU5MTg0MDkCXzMEEGJ1eUFzc2V0RGVjaW1hbHMIBQ0kdDAxODI1OTE4NDA5Al80BAtzdGFydEhlaWdodAkBBXZhbHVlAQkAmggCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFDmtleVN0YXJ0SGVpZ2h0BAhkdXJhdGlvbgkBBXZhbHVlAQkAmggCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFC2tleUR1cmF0aW9uBBVib3VnaHRIQ1RpY2tldHNBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQULbGF1bmNocGFkSWQFHGtleVVzZXJIQ0JvdWdodFRpY2tldHNBbW91bnQAAAQTaGlnaENvbXBldGl0aW9uU2FsZQkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFFmtleUhpZ2hDb21wZXRpdGlvblNhbGUHAwkBAiE9AgURYWN0aXZlTGF1bmNocGFkSWQFC2xhdW5jaHBhZElkCQACAQI3VGhlcmUgaXMgbm8gYWN0aXZlIGxhdW5jaHBhZCBvciB0aGlzIGxhdW5jaHBhZCBpcyBlbmRlZAMJAQEhAQUTaGlnaENvbXBldGl0aW9uU2FsZQkAAgECNFRoZXJlIGlzIG5vIGhpZ2ggY29tcGV0aXRpb24gc2FsZSBmb3IgdGhpcyBsYXVuY2hwYWQDCQBmAgULc3RhcnRIZWlnaHQFBmhlaWdodAkAAgECHkxhdW5jaHBhZCBzYWxlIG5vdCBzdGFydGVkIHlldAMJAGYCBQZoZWlnaHQJAGQCBQtzdGFydEhlaWdodAUIZHVyYXRpb24JAAIBAhRMYXVuY2hwYWQgc2FsZSBlbmRlZAMDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEGCQECIT0CBQpwbXRBc3NldElkBQpidXlBc3NldElkCQACAQkArAICCQCsAgICGE9uZSBhdHRhY2hlZCBwYXltZW50IGluIAUMYnV5QXNzZXROYW1lAgkgZXhwZWN0ZWQECnRva2VuUHJpY2UJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkApAMBBQtsYXVuY2hwYWRJZAUQa2V5UHJpY2VQZXJUb2tlbgQPdG9rZW5zUGVyVGlja2V0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFEmtleVRva2Vuc1BlclRpY2tldAQNJHQwMTk1ODIxOTcyNgkBFmdldEFzc2V0SW5mb0Zyb21TdHJpbmcBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFCmtleUFzc2V0SWQEB3Rva2VuSWQIBQ0kdDAxOTU4MjE5NzI2Al8xBA90b2tlblN0ckFzc2V0SWQIBQ0kdDAxOTU4MjE5NzI2Al8yBA50b2tlbkFzc2V0TmFtZQgFDSR0MDE5NTgyMTk3MjYCXzMEDXRva2VuRGVjaW1hbHMIBQ0kdDAxOTU4MjE5NzI2Al80BAt0aWNrZXRQcmljZQkAawMFD3Rva2Vuc1BlclRpY2tldAUKdG9rZW5QcmljZQkAbAYACgAABQ10b2tlbkRlY2ltYWxzAAAAAAUERE9XTgQTY29tbWlzc2lvblBlclRpY2tldAkAawMFC3RpY2tldFByaWNlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFG2tleUhpZ2hDb21wZXRpdGlvbkNvbWlzc2lvbgBkBA9idXlUaWNrZXRBbW91bnQJAGkCBQlwbXRBbW91bnQJAGQCBQt0aWNrZXRQcmljZQUTY29tbWlzc2lvblBlclRpY2tldAQVYnV5UHJpY2VXaXRoQ29taXNzaW9uCQBoAgUPYnV5VGlja2V0QW1vdW50CQBkAgULdGlja2V0UHJpY2UFE2NvbW1pc3Npb25QZXJUaWNrZXQEBmNoYW5nZQkAZQIFCXBtdEFtb3VudAUVYnV5UHJpY2VXaXRoQ29taXNzaW9uAwkAAAIFD2J1eVRpY2tldEFtb3VudAAACQACAQkArAICCQCsAgICDE5vdCBlbm91Z2h0IAUMYnV5QXNzZXROYW1lAg8gdG8gYnV5IHRpY2tldHMDCQECIT0CBQZjaGFuZ2UAAAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIWV3JvbmcgcGF5bWVudC4gVG8gYnV5IAkApAMBBQ9idXlUaWNrZXRBbW91bnQCGHRpY2tldHMgeW91IG5lZWQgdG8gcGF5IAkApAMBBRVidXlQcmljZVdpdGhDb21pc3Npb24FDGJ1eUFzc2V0TmFtZQQYdXNlckJvdWdodFRpY2tldHNOdW1iZXJzCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFC2xhdW5jaHBhZElkBRBrZXlVc2VySENUaWNrZXRzAgAEFmxhc3RCb3VnaHRUaWNrZXROdW1iZXIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkApAMBBQtsYXVuY2hwYWRJZAUVa2V5SENUaWNrZXRMYXN0TnVtYmVyBAtib3VnaHRSYW5nZQkArAICCQCsAgIJAKQDAQkAZAIFFmxhc3RCb3VnaHRUaWNrZXROdW1iZXIAAQIBLQkApAMBCQBkAgUWbGFzdEJvdWdodFRpY2tldE51bWJlcgUPYnV5VGlja2V0QW1vdW50BBtuZXdVc2VyQm91Z2h0VGlja2V0c051bWJlcnMJAKwCAgUYdXNlckJvdWdodFRpY2tldHNOdW1iZXJzAwkBAiE9AgUYdXNlckJvdWdodFRpY2tldHNOdW1iZXJzAgAJAKwCAgIBLAULYm91Z2h0UmFuZ2UJAKwCAgIABQtib3VnaHRSYW5nZQQDaW52AwkAAAIFCmJ1eUFzc2V0SWQFBFVTRE4JAPwHBAUSc3Rha2luZ1VTRE5BZGRyZXNzAgxsb2NrTmV1dHJpbm8FA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUKcG10QXNzZXRJZAUJcG10QW1vdW50BQNuaWwAAAMJAAACBQNpbnYFA2ludgQJYmFzZUVudHJ5CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQtsYXVuY2hwYWRJZAUca2V5VXNlckhDQm91Z2h0VGlja2V0c0Ftb3VudAkAZAIFFWJvdWdodEhDVGlja2V0c0Ftb3VudAUPYnV5VGlja2V0QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFFWtleUhDVGlja2V0TGFzdE51bWJlcgkAZAIFFmxhc3RCb3VnaHRUaWNrZXROdW1iZXIFD2J1eVRpY2tldEFtb3VudAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQtsYXVuY2hwYWRJZAUQa2V5VXNlckhDVGlja2V0cwUbbmV3VXNlckJvdWdodFRpY2tldHNOdW1iZXJzBQNuaWwDCQEBIQEJAQlpc0RlZmluZWQBCQCdCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFC2xhdW5jaHBhZElkBQxrZXlVc2VyUmVmSWQJAM4IAgUJYmFzZUVudHJ5CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFC2xhdW5jaHBhZElkBQxrZXlVc2VyUmVmSWQFBXJlZklkBQNuaWwFCWJhc2VFbnRyeQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQhmaW5hbGlzZQMLbGF1bmNocGFkSWQJdnJmSGVpZ2h0CnNlY3JldFdvcmQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkECXNhdmVkSGFzaAkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBQ1rZXlWZXJpZnlIYXNoBAhjYWxjSGFzaAkA2AQBCQD3AwEJAMsBAgkAmgMBBQl2cmZIZWlnaHQJAJsDAQUKc2VjcmV0V29yZAMJAQIhPQIFCGNhbGNIYXNoBQlzYXZlZEhhc2gJAAIBAhx2cmYgSGVpZ2h0IGhhc2ggbm90IG1hdGNoaW5nBA0kdDAyMjMzOTIyNDg5CQEWZ2V0QXNzZXRJbmZvRnJvbVN0cmluZwEJAQV2YWx1ZQEJAJ0IAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBQtrZXlCdXlUb2tlbgQKYnV5QXNzZXRJZAgFDSR0MDIyMzM5MjI0ODkCXzEEDWJ1eUFzc2V0U3RySWQIBQ0kdDAyMjMzOTIyNDg5Al8yBAxidXlBc3NldE5hbWUIBQ0kdDAyMjMzOTIyNDg5Al8zBBBidXlBc3NldERlY2ltYWxzCAUNJHQwMjIzMzkyMjQ4OQJfNAQOcHJvamVjdEFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgkApAMBBQtsYXVuY2hwYWRJZAUKa2V5QWRkcmVzcwQKY29tbWlzc2lvbgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBQxrZXlDb21pc3Npb24EDGNvbW1pc3Npb25IQwkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBRtrZXlIaWdoQ29tcGV0aXRpb25Db21pc3Npb24EEnRyYW5zZmVyZWRCdXlBc3NldAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFE2tleVRyYW5zZmVyQnV5QXNzZXQAAAQbc3dvcGZpTWVtYmVyc0J1eUFzc2V0QW1vdW50CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFGmtleVRvdGFsQW1vdW50QnV5QXNzZXRTb2xkBBZzd29wZmlIQ0J1eUFzc2V0QW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkApAMBBQtsYXVuY2hwYWRJZAUca2V5VG90YWxBbW91bnRCdXlBc3NldFNvbGRIQwAABBZzd29wZmlNZW1iZXJzQ29taXNzaW9uCQBrAwUbc3dvcGZpTWVtYmVyc0J1eUFzc2V0QW1vdW50BQpjb21taXNzaW9uAGQEEXN3b3BmaUhDQ29taXNzaW9uCQBrAwUWc3dvcGZpSENCdXlBc3NldEFtb3VudAUMY29tbWlzc2lvbkhDAGQEHnRvdGFsQW1vdW50QnV5QXNzZXRJbk1hcmtldGluZwkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBSVrZXlBbW91bnRCdXlBc3NldEluTWFya2V0aW5nRmluYWxpemVkBBJtYXJrZXRpbmdDb21pc3Npb24JAGsDBR50b3RhbEFtb3VudEJ1eUFzc2V0SW5NYXJrZXRpbmcFCmNvbW1pc3Npb24AZAQNdW5zdGFrZUFtb3VudAkAZQIJAGQCCQBkAgkAZAIJAGQCCQBkAgUbc3dvcGZpTWVtYmVyc0J1eUFzc2V0QW1vdW50BR50b3RhbEFtb3VudEJ1eUFzc2V0SW5NYXJrZXRpbmcFFnN3b3BmaU1lbWJlcnNDb21pc3Npb24FEm1hcmtldGluZ0NvbWlzc2lvbgUWc3dvcGZpSENCdXlBc3NldEFtb3VudAURc3dvcGZpSENDb21pc3Npb24FEnRyYW5zZmVyZWRCdXlBc3NldAMJAGYCBRJ0cmFuc2ZlcmVkQnV5QXNzZXQJAGQCCQBkAgUbc3dvcGZpTWVtYmVyc0J1eUFzc2V0QW1vdW50BR50b3RhbEFtb3VudEJ1eUFzc2V0SW5NYXJrZXRpbmcFFnN3b3BmaUhDQnV5QXNzZXRBbW91bnQJAAIBAihDYW4ndCB0cmFuc2ZlciBuZWdhdGl2ZSB2YWx1ZSB0byBwcm9qZWN0BANpbnYDCQAAAgUKYnV5QXNzZXRJZAUEVVNETgkA/AcEBRJzdGFraW5nVVNETkFkZHJlc3MCDnVubG9ja05ldXRyaW5vCQDMCAIFDXVuc3Rha2VBbW91bnQJAMwIAgkA2AQBBQRVU0ROBQNuaWwFA25pbAAAAwkAAAIFA2ludgUDaW52CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFEWtleUZpbmFsaXNlSGVpZ2h0BQZoZWlnaHQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUOcHJvamVjdEFkZHJlc3MJAGUCCQBkAgkAZAIFG3N3b3BmaU1lbWJlcnNCdXlBc3NldEFtb3VudAUWc3dvcGZpSENCdXlBc3NldEFtb3VudAUedG90YWxBbW91bnRCdXlBc3NldEluTWFya2V0aW5nBRJ0cmFuc2ZlcmVkQnV5QXNzZXQFCmJ1eUFzc2V0SWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUQY29tbWlzc2lvbldhbGxldAkAZAIJAGQCBRZzd29wZmlNZW1iZXJzQ29taXNzaW9uBRJtYXJrZXRpbmdDb21pc3Npb24FEXN3b3BmaUhDQ29taXNzaW9uBQpidXlBc3NldElkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEFY2xhaW0BC2xhdW5jaHBhZElkCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUABA1ib3VnaHRUaWNrZXRzCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFC2xhdW5jaHBhZElkBRprZXlVc2VyQm91Z2h0VGlja2V0c0Ftb3VudAAABA9ib3VnaHRIQ1RpY2tldHMJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQULbGF1bmNocGFkSWQFHGtleVVzZXJIQ0JvdWdodFRpY2tldHNBbW91bnQAAAQRYm91Z2h0QWxsb2NhdGlvbnMJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQULbGF1bmNocGFkSWQFGGtleVVzZXJCb3VnaHRBbGxvY2F0aW9ucwAABA91c2VyQ2xhaW1TdGF0dXMJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQULbGF1bmNocGFkSWQFEmtleVVzZXJDbGFpbVN0YXR1cwcEDmZpbmFsaXplSGVpZ2h0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkApAMBBQtsYXVuY2hwYWRJZAURa2V5RmluYWxpc2VIZWlnaHQAAAMJAAACBQ5maW5hbGl6ZUhlaWdodAAACQACAQIxWW91IGNhbid0IGNsYWltIGJlY2F1c2UgcmVzdWx0cyBhcmUgbm90IGZpbmFsaXplZAMFD3VzZXJDbGFpbVN0YXR1cwkAAgECF1lvdSBhcmUgYWxyZWFkeSBjbGFpbWVkAwMDCQAAAgUNYm91Z2h0VGlja2V0cwAACQAAAgURYm91Z2h0QWxsb2NhdGlvbnMAAAcJAAACBQ9ib3VnaHRIQ1RpY2tldHMAAAcJAAIBAi5Zb3UgY2FuJ3QgY2xhaW0gYmVjYXVzZSB5b3UgZG9uJ3QgYnV5IGFueXRoaW5nBA0kdDAyNTU3MzI1NzUwCQEWZ2V0QXNzZXRJbmZvRnJvbVN0cmluZwEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBQtrZXlCdXlUb2tlbgkA2AQBBQRVU0ROBApidXlBc3NldElkCAUNJHQwMjU1NzMyNTc1MAJfMQQNYnV5QXNzZXRTdHJJZAgFDSR0MDI1NTczMjU3NTACXzIEDGJ1eUFzc2V0TmFtZQgFDSR0MDI1NTczMjU3NTACXzMEEGJ1eUFzc2V0RGVjaW1hbHMIBQ0kdDAyNTU3MzI1NzUwAl80BA13b25uZWRUaWNrZXRzCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFC2xhdW5jaHBhZElkBRprZXlVc2VyV2lubmVkVGlja2V0c0Ftb3VudAAABA93b25uZWRIQ1RpY2tldHMJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQULbGF1bmNocGFkSWQFKWtleVVzZXJXaW5uZWRIaWdoQ29tcGV0aXRpb25UaWNrZXRzQW1vdW50AAAEFGF3YWlsYWJsZUFsbG9jYXRpb25zCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFC2xhdW5jaHBhZElkBRtrZXlVc2VyQXZhaWxhYmxlQWxsb2NhdGlvbnMAAAQKY29tbWlzc2lvbgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBQxrZXlDb21pc3Npb24EDGNvbW1pc3Npb25IQwkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFG2tleUhpZ2hDb21wZXRpdGlvbkNvbWlzc2lvbgAABBJhbGxvd2VkQWxsb2NhdGlvbnMJAJcDAQkAzAgCBRFib3VnaHRBbGxvY2F0aW9ucwkAzAgCBRRhd2FpbGFibGVBbGxvY2F0aW9ucwUDbmlsBAp0b2tlblByaWNlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFEGtleVByaWNlUGVyVG9rZW4ED3Rva2Vuc1BlclRpY2tldAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBRJrZXlUb2tlbnNQZXJUaWNrZXQEDSR0MDI2NjY2MjY4MTAJARZnZXRBc3NldEluZm9Gcm9tU3RyaW5nAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBQprZXlBc3NldElkBAd0b2tlbklkCAUNJHQwMjY2NjYyNjgxMAJfMQQPdG9rZW5TdHJBc3NldElkCAUNJHQwMjY2NjYyNjgxMAJfMgQOdG9rZW5Bc3NldE5hbWUIBQ0kdDAyNjY2NjI2ODEwAl8zBA10b2tlbkRlY2ltYWxzCAUNJHQwMjY2NjYyNjgxMAJfNAQLdGlja2V0UHJpY2UJAGsDBQ90b2tlbnNQZXJUaWNrZXQFCnRva2VuUHJpY2UJAGwGAAoAAAUNdG9rZW5EZWNpbWFscwAAAAAFBERPV04EE3Rva2Vuc1BlckFsbG9jYXRpb24JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkApAMBBQtsYXVuY2hwYWRJZAUWa2V5VG9rZW5zUGVyQWxsb2NhdGlvbgQUdHJhbnNmZXJUb2tlbnNBbW91bnQJAGQCCQBkAgkAaAIFDXdvbm5lZFRpY2tldHMFD3Rva2Vuc1BlclRpY2tldAkAaAIFEmFsbG93ZWRBbGxvY2F0aW9ucwUTdG9rZW5zUGVyQWxsb2NhdGlvbgkAaAIFD3dvbm5lZEhDVGlja2V0cwUPdG9rZW5zUGVyVGlja2V0BBtub3RBbGxvd2VkQWxsb2NhdGlvbnNUb2tlbnMJAGgCCQBlAgURYm91Z2h0QWxsb2NhdGlvbnMFEmFsbG93ZWRBbGxvY2F0aW9ucwUTdG9rZW5zUGVyQWxsb2NhdGlvbgQWYnV5QXNzZXRGb3JBbGxvY2F0aW9ucwkAawMJAGsDBRtub3RBbGxvd2VkQWxsb2NhdGlvbnNUb2tlbnMFCnRva2VuUHJpY2UJAGwGAAoAAAUNdG9rZW5EZWNpbWFscwAAAAAFBERPV04JAGQCAGQFCmNvbW1pc3Npb24AZAQaYnV5QXNzZXRGb3JVbndvbm5lZFRpY2tldHMJAGsDCQBoAgkAZQIFDWJvdWdodFRpY2tldHMFDXdvbm5lZFRpY2tldHMFC3RpY2tldFByaWNlCQBkAgBkBQpjb21taXNzaW9uAGQEHGJ1eUFzc2V0Rm9ySENVbndvbm5lZFRpY2tldHMJAGsDCQBoAgkAZQIFD2JvdWdodEhDVGlja2V0cwUPd29ubmVkSENUaWNrZXRzBQt0aWNrZXRQcmljZQkAZAIAZAUMY29tbWlzc2lvbkhDAGQED2NsYWltZWRCdXlUb2tlbgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQtsYXVuY2hwYWRJZAUXa2V5VXNlckNsYWltZWRCdXlUb2tlbnMAAAMDAwkAZgIAAAUWYnV5QXNzZXRGb3JBbGxvY2F0aW9ucwYJAGYCAAAFGmJ1eUFzc2V0Rm9yVW53b25uZWRUaWNrZXRzBgkAZgIAAAUcYnV5QXNzZXRGb3JIQ1Vud29ubmVkVGlja2V0cwkAAgECUkVycm9yIHdpdGggYWxsb3dlZCBhbGxvY2F0aW9uIHBhcmFtIG9yIHdvbm5lZCB0aWNrZXRzIHBhcmFtIHBsZWFzZSBjb250YWN0IHN1cHBvcnQEFnJldHVybmVkQnV5QXNzZXRBbW91bnQJAGUCCQBkAgkAZAIFGmJ1eUFzc2V0Rm9yVW53b25uZWRUaWNrZXRzBRxidXlBc3NldEZvckhDVW53b25uZWRUaWNrZXRzBRZidXlBc3NldEZvckFsbG9jYXRpb25zBQ9jbGFpbWVkQnV5VG9rZW4EEHRyYW5zZmVyQnV5QXNzZXQDCQBmAgUWcmV0dXJuZWRCdXlBc3NldEFtb3VudAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUWcmV0dXJuZWRCdXlBc3NldEFtb3VudAUKYnV5QXNzZXRJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQULbGF1bmNocGFkSWQFF2tleVVzZXJDbGFpbWVkQnV5VG9rZW5zBRZyZXR1cm5lZEJ1eUFzc2V0QW1vdW50BQNuaWwFA25pbAQDaW52AwMJAGYCBRZyZXR1cm5lZEJ1eUFzc2V0QW1vdW50AAAJAAACBQpidXlBc3NldElkBQRVU0ROBwkA/AcEBRJzdGFraW5nVVNETkFkZHJlc3MCDnVubG9ja05ldXRyaW5vCQDMCAIFFnJldHVybmVkQnV5QXNzZXRBbW91bnQJAMwIAgkA2AQBBQRVU0ROBQNuaWwFA25pbAAAAwkAAAIFA2ludgUDaW52BA1jbGFpbWVkUGFyYW1zCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBQ5rZXlDbGFpbVBhcmFtcwIIY2xhaW1BbGwCASwDCQAAAgkAkQMCBQ1jbGFpbWVkUGFyYW1zAAACCGNsYWltQWxsBA50cmFuc2ZlclRva2VucwMJAGYCBRR0cmFuc2ZlclRva2Vuc0Ftb3VudAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUUdHJhbnNmZXJUb2tlbnNBbW91bnQFB3Rva2VuSWQFA25pbAUDbmlsCQDOCAIJAM4IAgkAzAgCCQEMQm9vbGVhbkVudHJ5AgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQULbGF1bmNocGFkSWQFEmtleVVzZXJDbGFpbVN0YXR1cwYJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFC2xhdW5jaHBhZElkBRRrZXlVc2VyQ2xhaW1lZFRva2VucwUUdHJhbnNmZXJUb2tlbnNBbW91bnQFA25pbAUOdHJhbnNmZXJUb2tlbnMFEHRyYW5zZmVyQnV5QXNzZXQDCQAAAgkAkQMCBQ1jbGFpbWVkUGFyYW1zAAACC2NsYWltUGVyaW9kBA1jbGFpbWVkVG9rZW5zCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFC2xhdW5jaHBhZElkBRRrZXlVc2VyQ2xhaW1lZFRva2VucwAABAx1bmxvY2tQZXJpb2QJAQV2YWx1ZQEJALYJAQkAkQMCBQ1jbGFpbWVkUGFyYW1zAAIEC2Jsb2NrSGVpZ2h0CQBkAgkBBXZhbHVlAQkAtgkBCQCRAwIFDWNsYWltZWRQYXJhbXMAAwUOZmluYWxpemVIZWlnaHQEDHVubG9ja0hlaWdodAkAZAIFDHVubG9ja1BlcmlvZAULYmxvY2tIZWlnaHQEEmFsbG93ZWRTdGFydEFtb3VudAkAawMFFHRyYW5zZmVyVG9rZW5zQW1vdW50CQEFdmFsdWUBCQC2CQEJAJEDAgUNY2xhaW1lZFBhcmFtcwABAGQEE2FsbG93ZWRUb2tlbnNBbW91bnQJAGQCBRJhbGxvd2VkU3RhcnRBbW91bnQDCQBmAgUGaGVpZ2h0BQtibG9ja0hlaWdodAkAZQIJAGsDCQBlAgUUdHJhbnNmZXJUb2tlbnNBbW91bnQFEmFsbG93ZWRTdGFydEFtb3VudAkAZQIJAJcDAQkAzAgCBQZoZWlnaHQJAMwIAgUMdW5sb2NrSGVpZ2h0BQNuaWwFC2Jsb2NrSGVpZ2h0BQx1bmxvY2tQZXJpb2QFDWNsYWltZWRUb2tlbnMJAGUCAAAFDWNsYWltZWRUb2tlbnMEEGNsYWltU3RhdHVzRW50cnkDCQBnAgUUdHJhbnNmZXJUb2tlbnNBbW91bnQJAGQCBQ1jbGFpbWVkVG9rZW5zBRNhbGxvd2VkVG9rZW5zQW1vdW50CQDMCAIJAQxCb29sZWFuRW50cnkCCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQtsYXVuY2hwYWRJZAUSa2V5VXNlckNsYWltU3RhdHVzBgUDbmlsBQNuaWwDAwkAZgIFE2FsbG93ZWRUb2tlbnNBbW91bnQAAAYJAGYCBRZyZXR1cm5lZEJ1eUFzc2V0QW1vdW50AAAEDnRyYW5zZmVyVG9rZW5zAwkAZgIFE2FsbG93ZWRUb2tlbnNBbW91bnQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQULbGF1bmNocGFkSWQFFGtleVVzZXJDbGFpbWVkVG9rZW5zCQBkAgUNY2xhaW1lZFRva2VucwUTYWxsb3dlZFRva2Vuc0Ftb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFE2FsbG93ZWRUb2tlbnNBbW91bnQFB3Rva2VuSWQFA25pbAUDbmlsCQDOCAIFEHRyYW5zZmVyQnV5QXNzZXQFDnRyYW5zZmVyVG9rZW5zCQACAQIQTm90aGluZyB0byBjbGFpbQkAAgECFlVua25vd24gY2xhaW0gZnVuY3Rpb24JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEQY2xhaW1GcmVlemVUb2tlbgELbGF1bmNocGFkSWQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAEFWZyZWV6ZUFkZGl0aW9uYWxUb2tlbgkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFGGtleUZyZWV6ZUFkZGl0aW9uYWxUb2tlbgcDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFBHRoaXMJAKwCAgkApAMBBQtsYXVuY2hwYWRJZAURa2V5RmluYWxpc2VIZWlnaHQJAAIBAjFZb3UgY2FuJ3QgY2xhaW0gYmVjYXVzZSByZXN1bHRzIGFyZSBub3QgZmluYWxpemVkAwkBASEBBRVmcmVlemVBZGRpdGlvbmFsVG9rZW4JAAIBAjlUaGVyZSBhcmUgbm8gYWRkaXRpb25hbCB0b2tlbiBmcmVlemluZyBmb3IgdGhpcyBsYXVuY2hwYWQEB3Rva2VuSWQJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBRBrZXlGcmVlemVUb2tlbklkBBF1c2VyVG9rZW5zRnJlZXplZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQtsYXVuY2hwYWRJZAUSa2V5VXNlckZyZWV6ZVRva2VuAAAEC3N0YXJ0SGVpZ2h0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkApAMBBQtsYXVuY2hwYWRJZAUOa2V5U3RhcnRIZWlnaHQAAAQIZHVyYXRpb24JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBQtrZXlEdXJhdGlvbgAABBNmcmVlemVUb2tlbkR1cmF0aW9uCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFFmtleUZyZWV6ZVRva2VuRHVyYXRpb24EDmJsb2NrRW5kSGVpZ2h0CQBkAgkAZAIFC3N0YXJ0SGVpZ2h0BQhkdXJhdGlvbgUTZnJlZXplVG9rZW5EdXJhdGlvbgMJAAACBRF1c2VyVG9rZW5zRnJlZXplZAAACQACAQI4WW91IGFyZSBhbHJlYWR5IGNsYWltZWQgeW91ciB0b2tlbnMgb3Igbm90IHBhaWQgYW55dGhpbmcDCQBmAgUOYmxvY2tFbmRIZWlnaHQFBmhlaWdodAkAAgEJAKwCAgIZWW91ciB0b2tlbnMgZnJlZXplZCB0ZWVsIAkApAMBBQ5ibG9ja0VuZEhlaWdodAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFEXVzZXJUb2tlbnNGcmVlemVkBQd0b2tlbklkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQtsYXVuY2hwYWRJZAUSa2V5VXNlckZyZWV6ZVRva2VuAAAFA25pbAFpARB0cmFuc2ZlckJ1eUFzc2V0AgtsYXVuY2hwYWRJZAZhbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkEDnByb2plY3RBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFCmtleUFkZHJlc3MEDSR0MDMyOTc1MzMxMjUJARZnZXRBc3NldEluZm9Gcm9tU3RyaW5nAQkBBXZhbHVlAQkAnQgCBQR0aGlzCQCsAgIJAKQDAQULbGF1bmNocGFkSWQFC2tleUJ1eVRva2VuBApidXlBc3NldElkCAUNJHQwMzI5NzUzMzEyNQJfMQQNYnV5QXNzZXRTdHJJZAgFDSR0MDMyOTc1MzMxMjUCXzIEDGJ1eUFzc2V0TmFtZQgFDSR0MDMyOTc1MzMxMjUCXzMEEGJ1eUFzc2V0RGVjaW1hbHMIBQ0kdDAzMjk3NTMzMTI1Al80BBJ0cmFuc2ZlcmVkQnV5QXNzZXQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCkAwEFC2xhdW5jaHBhZElkBRNrZXlUcmFuc2ZlckJ1eUFzc2V0AAAEA2ludgMDCQBmAgUGYW1vdW50AAAJAAACBQpidXlBc3NldElkBQRVU0ROBwkA/AcEBRJzdGFraW5nVVNETkFkZHJlc3MCDnVubG9ja05ldXRyaW5vCQDMCAIFBmFtb3VudAkAzAgCCQDYBAEFBFVTRE4FA25pbAUDbmlsAAADCQAAAgUDaW52BQNpbnYJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkApAMBBQtsYXVuY2hwYWRJZAUTa2V5VHJhbnNmZXJCdXlBc3NldAkAZAIFEnRyYW5zZmVyZWRCdXlBc3NldAUGYW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFDnByb2plY3RBZGRyZXNzBQZhbW91bnQFCmJ1eUFzc2V0SWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQhzaHV0ZG93bgAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkDCQEBIQEFBmFjdGl2ZQkAAgECFURBcHAgYWxyZWFkeSBpbmFjdGl2ZQkAzAgCCQEMQm9vbGVhbkVudHJ5AgUJa2V5QWN0aXZlBwUDbmlsAWkBCGFjdGl2YXRlAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQMFBmFjdGl2ZQkAAgECE0RBcHAgYWxyZWFkeSBhY3RpdmUJAMwIAgkBDEJvb2xlYW5FbnRyeQIFCWtleUFjdGl2ZQYFA25pbAC7kyJD", "height": 2704786, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7CY3DHR7HV5ydXRX6awQYcTxNLuumhDc17FhpFRSfVp8 Next: Dks9HsD9JkzXta34GuUS1JzwRAvxTe6xAKq4t3DRg97x Diff:
OldNewDifferences
113113
114114 let keyUserFreezeToken = "_freeze_token_amount"
115115
116-let oracle = Address(base58'3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom')
116+let oracle = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
117117
118-let governance = Address(base58'3PLHVWCqA9DJPDbadUofTohnCULLauiDWhS')
118+let governance = Address(base58'3N8E9LU71MDkdP8FWtbP4TBXCNhoc15hWfs')
119119
120-let commissionWallet = Address(base58'3PGYafJ2GuqPckmZNywet8moiPnBHz51Xdg')
120+let commissionWallet = Address(base58'3N2eueE5vLLKe8jXuBDbdbKcPaH36yG1Had')
121121
122-let stakingUSDNAddress = Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ')
122+let stakingUSDNAddress = Address(base58'3N8STSY7dWpBYLiCimEQMkRizyWePSX3qQx')
123123
124-let USDN = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
124+let USDN = base58'4W19ndijcc2CsQa9HGW2dfXKTVXhnneWWttxXrtjPmEp'
125125
126-let adminPubKeyStaking = base58'Czn4yoAuUZCVCLJDRfskn8URfkwpknwBTZDbs1wFrY7h'
126+let adminPubKeyStaking = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
127127
128128 let maxAllocationsAmount = 2
129129
211211 else {
212212 let launchpadId = getLaunchpadNextId()
213213 let launchpadIdStr = toString(launchpadId)
214- let $t065006575 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
215- let pmtAmount = $t065006575._1
216- let pmtAssetId = $t065006575._2
217- let $t065846657 = getAssetInfo(pmtAssetId)
218- let pmtStrAssetId = $t065846657._1
219- let pmtAssetName = $t065846657._2
220- let pmtDecimals = $t065846657._3
214+ let $t064996574 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
215+ let pmtAmount = $t064996574._1
216+ let pmtAssetId = $t064996574._2
217+ let $t065836656 = getAssetInfo(pmtAssetId)
218+ let pmtStrAssetId = $t065836656._1
219+ let pmtAssetName = $t065836656._2
220+ let pmtDecimals = $t065836656._3
221221 let freezeAdditionalEntry = if (freezeAdditionalToken)
222222 then [BooleanEntry((launchpadIdStr + keyFreezeAdditionalToken), true), StringEntry((launchpadIdStr + keyFreezeTokenId), freezeParams[0]), IntegerEntry((launchpadIdStr + keyFreezeTokenDuration), parseIntValue(freezeParams[1])), IntegerEntry((launchpadIdStr + keyFreezeTokenPerTicket), parseIntValue(freezeParams[2]))]
223223 else nil
228228
229229 @Callable(i)
230230 func commitSwopfiSale (launchpadId,refId) = valueOrElse(isActive(), {
231- let $t092639338 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
232- let pmtAmount = $t092639338._1
233- let pmtAssetId = $t092639338._2
234- let $t093439493 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
235- let buyAssetId = $t093439493._1
236- let buyAssetStrId = $t093439493._2
237- let buyAssetName = $t093439493._3
238- let buyAssetDecimals = $t093439493._4
231+ let $t092629337 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
232+ let pmtAmount = $t092629337._1
233+ let pmtAssetId = $t092629337._2
234+ let $t093429492 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
235+ let buyAssetId = $t093429492._1
236+ let buyAssetStrId = $t093429492._2
237+ let buyAssetName = $t093429492._3
238+ let buyAssetDecimals = $t093429492._4
239239 let stakedSwops = valueOrElse(getInteger(governance, (toString(i.caller) + keyGovernanceStaked)), 0)
240240 let allowedTicketsAmountAll = (stakedSwops / getIntegerValue(this, (toString(launchpadId) + keySwopPerTicket)))
241241 let boughtTicketsAmount = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtTicketsAmount)), 0)
271271 else {
272272 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
273273 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
274- let $t01130511449 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
275- let tokenId = $t01130511449._1
276- let tokenStrAssetId = $t01130511449._2
277- let tokenAssetName = $t01130511449._3
278- let tokenDecimals = $t01130511449._4
274+ let $t01130411448 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
275+ let tokenId = $t01130411448._1
276+ let tokenStrAssetId = $t01130411448._2
277+ let tokenAssetName = $t01130411448._3
278+ let tokenDecimals = $t01130411448._4
279279 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
280280 let commissionPerTicket = fraction(ticketPrice, getIntegerValue(this, (toString(launchpadId) + keyComission)), 100)
281281 let buyTicketAmount = (pmtAmount / (ticketPrice + commissionPerTicket))
291291 then {
292292 let freezeTokenId = getStringValue(this, (toString(launchpadId) + keyFreezeTokenId))
293293 let freezeTokenPerTicket = getIntegerValue(this, (toString(launchpadId) + keyFreezeTokenPerTicket))
294- let $t01261312700 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
295- let pmtAmountFreeze = $t01261312700._1
296- let pmtAssetIdFreeze = $t01261312700._2
297- let $t01271712808 = getAssetInfo(pmtAssetId)
298- let pmtFreezeStrAssetId = $t01271712808._1
299- let pmtFreezeAssetName = $t01271712808._2
300- let pmtFreezeDecimals = $t01271712808._3
294+ let $t01261212699 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
295+ let pmtAmountFreeze = $t01261212699._1
296+ let pmtAssetIdFreeze = $t01261212699._2
297+ let $t01271612807 = getAssetInfo(pmtAssetId)
298+ let pmtFreezeStrAssetId = $t01271612807._1
299+ let pmtFreezeAssetName = $t01271612807._2
300+ let pmtFreezeDecimals = $t01271612807._3
301301 let needFreezeTokens = (freezeTokenPerTicket * buyTicketAmount)
302302 if (if ((pmtFreezeStrAssetId != freezeTokenId))
303303 then true
331331
332332 @Callable(i)
333333 func commitAccessListSale (launchpadId,refId) = valueOrElse(isActive(), {
334- let $t01487914954 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
335- let pmtAmount = $t01487914954._1
336- let pmtAssetId = $t01487914954._2
337- let $t01495915109 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
338- let buyAssetId = $t01495915109._1
339- let buyAssetStrId = $t01495915109._2
340- let buyAssetName = $t01495915109._3
341- let buyAssetDecimals = $t01495915109._4
334+ let $t01487814953 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
335+ let pmtAmount = $t01487814953._1
336+ let pmtAssetId = $t01487814953._2
337+ let $t01495815108 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
338+ let buyAssetId = $t01495815108._1
339+ let buyAssetStrId = $t01495815108._2
340+ let buyAssetName = $t01495815108._3
341+ let buyAssetDecimals = $t01495815108._4
342342 let userUsdnInMarketing = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAmountBuyAssetInMarketing)), 0)
343343 let usdnInMarketing = valueOrElse(getInteger(this, (toString(launchpadId) + keyAmountBuyAssetInMarketing)), 0)
344344 let boughtAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtAllocations)), 0)
345345 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
346346 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
347347 let tokensPerAllocation = getIntegerValue(this, (toString(launchpadId) + keyTokensPerAllocation))
348- let $t01577815922 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
349- let tokenId = $t01577815922._1
350- let tokenStrAssetId = $t01577815922._2
351- let tokenAssetName = $t01577815922._3
352- let tokenDecimals = $t01577815922._4
348+ let $t01577715921 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
349+ let tokenId = $t01577715921._1
350+ let tokenStrAssetId = $t01577715921._2
351+ let tokenAssetName = $t01577715921._3
352+ let tokenDecimals = $t01577715921._4
353353 let allocationPriceWithComission = fraction(fraction(tokenPrice, tokensPerAllocation, pow(10, 0, tokenDecimals, 0, 0, DOWN)), (100 + commission), 100)
354354 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
355355 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
389389
390390 @Callable(i)
391391 func commitHighCompetitionSale (launchpadId,refId) = valueOrElse(isActive(), {
392- let $t01818018255 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
393- let pmtAmount = $t01818018255._1
394- let pmtAssetId = $t01818018255._2
395- let $t01826018410 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
396- let buyAssetId = $t01826018410._1
397- let buyAssetStrId = $t01826018410._2
398- let buyAssetName = $t01826018410._3
399- let buyAssetDecimals = $t01826018410._4
392+ let $t01817918254 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
393+ let pmtAmount = $t01817918254._1
394+ let pmtAssetId = $t01817918254._2
395+ let $t01825918409 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
396+ let buyAssetId = $t01825918409._1
397+ let buyAssetStrId = $t01825918409._2
398+ let buyAssetName = $t01825918409._3
399+ let buyAssetDecimals = $t01825918409._4
400400 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
401401 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
402402 let boughtHCTicketsAmount = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCBoughtTicketsAmount)), 0)
416416 else {
417417 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
418418 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
419- let $t01958319727 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
420- let tokenId = $t01958319727._1
421- let tokenStrAssetId = $t01958319727._2
422- let tokenAssetName = $t01958319727._3
423- let tokenDecimals = $t01958319727._4
419+ let $t01958219726 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
420+ let tokenId = $t01958219726._1
421+ let tokenStrAssetId = $t01958219726._2
422+ let tokenAssetName = $t01958219726._3
423+ let tokenDecimals = $t01958219726._4
424424 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
425425 let commissionPerTicket = fraction(ticketPrice, getIntegerValue(this, (toString(launchpadId) + keyHighCompetitionComission)), 100)
426426 let buyTicketAmount = (pmtAmount / (ticketPrice + commissionPerTicket))
461461 if ((calcHash != savedHash))
462462 then throw("vrf Height hash not matching")
463463 else {
464- let $t02234022490 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
465- let buyAssetId = $t02234022490._1
466- let buyAssetStrId = $t02234022490._2
467- let buyAssetName = $t02234022490._3
468- let buyAssetDecimals = $t02234022490._4
464+ let $t02233922489 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
465+ let buyAssetId = $t02233922489._1
466+ let buyAssetStrId = $t02233922489._2
467+ let buyAssetName = $t02233922489._3
468+ let buyAssetDecimals = $t02233922489._4
469469 let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
470470 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
471471 let commissionHC = getIntegerValue(this, (toString(launchpadId) + keyHighCompetitionComission))
510510 else false)
511511 then throw("You can't claim because you don't buy anything")
512512 else {
513- let $t02557425751 = getAssetInfoFromString(valueOrElse(getString(this, (toString(launchpadId) + keyBuyToken)), toBase58String(USDN)))
514- let buyAssetId = $t02557425751._1
515- let buyAssetStrId = $t02557425751._2
516- let buyAssetName = $t02557425751._3
517- let buyAssetDecimals = $t02557425751._4
513+ let $t02557325750 = getAssetInfoFromString(valueOrElse(getString(this, (toString(launchpadId) + keyBuyToken)), toBase58String(USDN)))
514+ let buyAssetId = $t02557325750._1
515+ let buyAssetStrId = $t02557325750._2
516+ let buyAssetName = $t02557325750._3
517+ let buyAssetDecimals = $t02557325750._4
518518 let wonnedTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserWinnedTicketsAmount)), 0)
519519 let wonnedHCTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserWinnedHighCompetitionTicketsAmount)), 0)
520520 let awailableAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAvailableAllocations)), 0)
523523 let allowedAllocations = min([boughtAllocations, awailableAllocations])
524524 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
525525 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
526- let $t02666726811 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
527- let tokenId = $t02666726811._1
528- let tokenStrAssetId = $t02666726811._2
529- let tokenAssetName = $t02666726811._3
530- let tokenDecimals = $t02666726811._4
526+ let $t02666626810 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
527+ let tokenId = $t02666626810._1
528+ let tokenStrAssetId = $t02666626810._2
529+ let tokenAssetName = $t02666626810._3
530+ let tokenDecimals = $t02666626810._4
531531 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
532532 let tokensPerAllocation = getIntegerValue(this, (toString(launchpadId) + keyTokensPerAllocation))
533533 let transferTokensAmount = (((wonnedTickets * tokensPerTicket) + (allowedAllocations * tokensPerAllocation)) + (wonnedHCTickets * tokensPerTicket))
622622 @Callable(i)
623623 func transferBuyAsset (launchpadId,amount) = valueOrElse(isActive(), valueOrElse(isAdminCall(i), {
624624 let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
625- let $t03297633126 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
626- let buyAssetId = $t03297633126._1
627- let buyAssetStrId = $t03297633126._2
628- let buyAssetName = $t03297633126._3
629- let buyAssetDecimals = $t03297633126._4
625+ let $t03297533125 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
626+ let buyAssetId = $t03297533125._1
627+ let buyAssetStrId = $t03297533125._2
628+ let buyAssetName = $t03297533125._3
629+ let buyAssetDecimals = $t03297533125._4
630630 let transferedBuyAsset = valueOrElse(getInteger(this, (toString(launchpadId) + keyTransferBuyAsset)), 0)
631631 let inv = if (if ((amount > 0))
632632 then (buyAssetId == USDN)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let keyActive = "active"
55
66 let kActiveGlob = "active_all_contracts"
77
88 let keyAdminPubKey1 = "admin_pub_1"
99
1010 let keyAdminPubKey2 = "admin_pub_2"
1111
1212 let keyAdminPubKey3 = "admin_pub_3"
1313
1414 let keyLaunchpadDataTransactionStatus = "launchpad_data_transaction_status"
1515
1616 let keyLaunchpadNextId = "launchpad_next_id"
1717
1818 let keyLaunchpadActiveId = "launchpad_active_id"
1919
2020 let keyInitCaller = "init_caller"
2121
2222 let keyAddress = "_address"
2323
2424 let keyInitHeight = "_init_height"
2525
2626 let keyStartHeight = "_start_height"
2727
2828 let keyFinaliseHeight = "_finalise_height"
2929
3030 let keyComission = "_comission"
3131
3232 let keyAssetId = "_asset_id"
3333
3434 let keyTotalTokenAmount = "_total_token_amount"
3535
3636 let keyTotalAmountBuyAssetSold = "_total_buy_asset_sold"
3737
3838 let keyTokensPerTicket = "_tokens_per_ticket"
3939
4040 let keyPricePerToken = "_price_per_token"
4141
4242 let keySwopPerTicket = "_swop_per_ticket"
4343
4444 let keySwopfiTicketsAmount = "_tickets_swopfi_members"
4545
4646 let keyCampaignTokensAmount = "_tokens_access_list"
4747
4848 let keyTokensPerAllocation = "_tokens_per_allocation"
4949
5050 let keyTicketLastNumber = "_ticket_last_number"
5151
5252 let keyGovernanceStaked = "_GSwop_amount"
5353
5454 let keyUserRefId = "_ref_id"
5555
5656 let keyVerifyHash = "_verify_hash"
5757
5858 let keyDuration = "_duration"
5959
6060 let keyAmountBuyAssetInMarketing = "_total_purchased_buy_asset_in_marketing"
6161
6262 let keyAmountBuyAssetInMarketingFinalized = "_total_purchased_buy_asset_in_marketing_finalized"
6363
6464 let keyTransferBuyAsset = "_transfer_buy_asset"
6565
6666 let keyFreezSwopDuration = "_freeze_swop_duration"
6767
6868 let keyFreezeAdditionalToken = "_freeze_additional_token"
6969
7070 let keyFreezeTokenId = "_freeze_token_id"
7171
7272 let keyFreezeTokenDuration = "_freeze_token_duration"
7373
7474 let keyFreezeTokenPerTicket = "_freeze_token_per_ticket"
7575
7676 let keyBuyToken = "_buy_token"
7777
7878 let keyClaimParams = "_claim_params"
7979
8080 let keyHighCompetitionComission = "_high_competition_comission"
8181
8282 let keyHighCompetitionSale = "_high_competition_sale"
8383
8484 let keyHCTicketLastNumber = "_high_competition_ticket_last_number"
8585
8686 let keyHighCompetitionAmount = "_tickets_high_competition"
8787
8888 let keyTotalAmountBuyAssetSoldHC = "_total_buy_asset_sold_high_competition"
8989
9090 let keyUserClaimedTokens = "_claimed_tokens"
9191
9292 let keyUserClaimedBuyTokens = "_claimed_buy_tokens"
9393
9494 let keyUserBoughtTicketsAmount = "_bought_tickets"
9595
9696 let keyUserTickets = "_tickets_number"
9797
9898 let keyUserHCTickets = "_tickets_number_high_competition"
9999
100100 let keyUserHCBoughtTicketsAmount = "_bought_tickets_high_competition"
101101
102102 let keyUserAvailableAllocations = "_available_purchase_marketing"
103103
104104 let keyUserAmountBuyAssetInMarketing = "_purchased_buy_asset_in_marketing"
105105
106106 let keyUserBoughtAllocations = "_bought_allocations"
107107
108108 let keyUserClaimStatus = "_claim_status"
109109
110110 let keyUserWinnedTicketsAmount = "_tickets_result"
111111
112112 let keyUserWinnedHighCompetitionTicketsAmount = "_tickets_result_high_competition"
113113
114114 let keyUserFreezeToken = "_freeze_token_amount"
115115
116-let oracle = Address(base58'3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom')
116+let oracle = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
117117
118-let governance = Address(base58'3PLHVWCqA9DJPDbadUofTohnCULLauiDWhS')
118+let governance = Address(base58'3N8E9LU71MDkdP8FWtbP4TBXCNhoc15hWfs')
119119
120-let commissionWallet = Address(base58'3PGYafJ2GuqPckmZNywet8moiPnBHz51Xdg')
120+let commissionWallet = Address(base58'3N2eueE5vLLKe8jXuBDbdbKcPaH36yG1Had')
121121
122-let stakingUSDNAddress = Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ')
122+let stakingUSDNAddress = Address(base58'3N8STSY7dWpBYLiCimEQMkRizyWePSX3qQx')
123123
124-let USDN = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
124+let USDN = base58'4W19ndijcc2CsQa9HGW2dfXKTVXhnneWWttxXrtjPmEp'
125125
126-let adminPubKeyStaking = base58'Czn4yoAuUZCVCLJDRfskn8URfkwpknwBTZDbs1wFrY7h'
126+let adminPubKeyStaking = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
127127
128128 let maxAllocationsAmount = 2
129129
130130 let activeLaunchpadId = valueOrElse(getIntegerValue(this, keyLaunchpadActiveId), -1)
131131
132132 func getAdminPub (keyAdminPub) = match getString(oracle, keyAdminPub) {
133133 case string: String =>
134134 fromBase58String(string)
135135 case nothing =>
136136 throw("Admin public key is empty")
137137 }
138138
139139
140140 let adminPubKey1 = getAdminPub(keyAdminPubKey1)
141141
142142 let adminPubKey2 = getAdminPub(keyAdminPubKey2)
143143
144144 let adminPubKey3 = getAdminPub(keyAdminPubKey3)
145145
146146 func getAssetInfo (assetId) = match assetId {
147147 case id: ByteVector =>
148148 let stringId = toBase58String(id)
149149 let info = valueOrErrorMessage(assetInfo(id), (("Asset " + stringId) + " doesn't exist"))
150150 $Tuple3(stringId, info.name, info.decimals)
151151 case waves: Unit =>
152152 $Tuple3("WAVES", "WAVES", 8)
153153 case _ =>
154154 throw("Match error")
155155 }
156156
157157
158158 func getLaunchpadNextId () = valueOrElse(getInteger(this, keyLaunchpadNextId), 1)
159159
160160
161161 func stakedUsdnAmount () = valueOrElse(getInteger(stakingUSDNAddress, ((("rpd_balance_" + toBase58String(USDN)) + "_") + toString(this))), 0)
162162
163163
164164 let active = valueOrElse(getBoolean(this, keyActive), true)
165165
166166 let activeGlob = valueOrElse(getBoolean(oracle, kActiveGlob), true)
167167
168168 func isActive () = if (if (active)
169169 then activeGlob
170170 else false)
171171 then unit
172172 else throw("DApp is inactive at this moment")
173173
174174
175175 func isAdminCall (i) = if (containsElement([adminPubKey1, adminPubKey2, adminPubKey3], i.callerPublicKey))
176176 then unit
177177 else throw("Only admin can call this function")
178178
179179
180180 func getAssetInfoFromString (assetStr) = if ((assetStr == "WAVES"))
181181 then $Tuple4(unit, "WAVES", "WAVES", 8)
182182 else {
183183 let stringId = assetStr
184184 let id = fromBase58String(assetStr)
185185 let info = valueOrErrorMessage(assetInfo(id), (("Asset " + stringId) + " doesn't exist"))
186186 $Tuple4(id, stringId, info.name, info.decimals)
187187 }
188188
189189
190190 @Callable(i)
191191 func hashingRandom (launchpadId,hash) = valueOrElse(isActive(), valueOrElse(isAdminCall(i), [StringEntry((toString(launchpadId) + keyVerifyHash), hash)]))
192192
193193
194194
195195 @Callable(i)
196196 func initCaller (address) = valueOrElse(isActive(), valueOrElse(isAdminCall(i), [StringEntry(keyInitCaller, address)]))
197197
198198
199199
200200 @Callable(i)
201201 func init (projectAddress,startHeight,duration,buyToken,commission,tokensPerTicket,pricePerToken,swopfiTicketsAmount,campaignTokensAmount,tokensPerAllocation,swopPerTicket,swopFreezeDuration,claimParams,HighCompetitionSale,highCompetitionComission,highCompetitionTicketsAmount,freezeAdditionalToken,freezeParams) = valueOrElse(isActive(), if ((toString(i.caller) != valueOrElse(getString(this, keyInitCaller), "")))
202202 then throw("Only project admin can call init function")
203203 else if ((size(i.payments) != 1))
204204 then throw("One attached payment expected")
205205 else if ((height > startHeight))
206206 then throw("Start height must be greater than blockchain height")
207207 else if (if (freezeAdditionalToken)
208208 then (size(freezeParams) != 3)
209209 else false)
210210 then throw("Freeze params list must have 3 items")
211211 else {
212212 let launchpadId = getLaunchpadNextId()
213213 let launchpadIdStr = toString(launchpadId)
214- let $t065006575 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
215- let pmtAmount = $t065006575._1
216- let pmtAssetId = $t065006575._2
217- let $t065846657 = getAssetInfo(pmtAssetId)
218- let pmtStrAssetId = $t065846657._1
219- let pmtAssetName = $t065846657._2
220- let pmtDecimals = $t065846657._3
214+ let $t064996574 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
215+ let pmtAmount = $t064996574._1
216+ let pmtAssetId = $t064996574._2
217+ let $t065836656 = getAssetInfo(pmtAssetId)
218+ let pmtStrAssetId = $t065836656._1
219+ let pmtAssetName = $t065836656._2
220+ let pmtDecimals = $t065836656._3
221221 let freezeAdditionalEntry = if (freezeAdditionalToken)
222222 then [BooleanEntry((launchpadIdStr + keyFreezeAdditionalToken), true), StringEntry((launchpadIdStr + keyFreezeTokenId), freezeParams[0]), IntegerEntry((launchpadIdStr + keyFreezeTokenDuration), parseIntValue(freezeParams[1])), IntegerEntry((launchpadIdStr + keyFreezeTokenPerTicket), parseIntValue(freezeParams[2]))]
223223 else nil
224224 ([IntegerEntry((pmtStrAssetId + "_launchpad"), launchpadId), IntegerEntry(keyLaunchpadNextId, (launchpadId + 1)), StringEntry((launchpadIdStr + keyAddress), projectAddress), IntegerEntry((launchpadIdStr + keyInitHeight), height), IntegerEntry((launchpadIdStr + keyStartHeight), startHeight), IntegerEntry((launchpadIdStr + keyDuration), duration), StringEntry((launchpadIdStr + keyBuyToken), buyToken), IntegerEntry((launchpadIdStr + keyFreezSwopDuration), swopFreezeDuration), IntegerEntry((launchpadIdStr + keyTotalTokenAmount), pmtAmount), StringEntry((launchpadIdStr + keyAssetId), pmtStrAssetId), IntegerEntry((launchpadIdStr + keyComission), commission), IntegerEntry((launchpadIdStr + keyTicketLastNumber), 0), IntegerEntry((launchpadIdStr + keyHCTicketLastNumber), 0), IntegerEntry((launchpadIdStr + keyTokensPerTicket), tokensPerTicket), IntegerEntry((launchpadIdStr + keyPricePerToken), pricePerToken), IntegerEntry((launchpadIdStr + keySwopPerTicket), swopPerTicket), IntegerEntry((launchpadIdStr + keySwopfiTicketsAmount), swopfiTicketsAmount), IntegerEntry((launchpadIdStr + keyCampaignTokensAmount), campaignTokensAmount), IntegerEntry((launchpadIdStr + keyTokensPerAllocation), tokensPerAllocation), StringEntry((launchpadIdStr + keyClaimParams), makeString(claimParams, ",")), BooleanEntry((launchpadIdStr + keyHighCompetitionSale), HighCompetitionSale), IntegerEntry((launchpadIdStr + keyHighCompetitionComission), highCompetitionComission), IntegerEntry((launchpadIdStr + keyHighCompetitionAmount), highCompetitionTicketsAmount), IntegerEntry(keyLaunchpadActiveId, launchpadId), StringEntry(keyInitCaller, "")] ++ freezeAdditionalEntry)
225225 })
226226
227227
228228
229229 @Callable(i)
230230 func commitSwopfiSale (launchpadId,refId) = valueOrElse(isActive(), {
231- let $t092639338 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
232- let pmtAmount = $t092639338._1
233- let pmtAssetId = $t092639338._2
234- let $t093439493 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
235- let buyAssetId = $t093439493._1
236- let buyAssetStrId = $t093439493._2
237- let buyAssetName = $t093439493._3
238- let buyAssetDecimals = $t093439493._4
231+ let $t092629337 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
232+ let pmtAmount = $t092629337._1
233+ let pmtAssetId = $t092629337._2
234+ let $t093429492 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
235+ let buyAssetId = $t093429492._1
236+ let buyAssetStrId = $t093429492._2
237+ let buyAssetName = $t093429492._3
238+ let buyAssetDecimals = $t093429492._4
239239 let stakedSwops = valueOrElse(getInteger(governance, (toString(i.caller) + keyGovernanceStaked)), 0)
240240 let allowedTicketsAmountAll = (stakedSwops / getIntegerValue(this, (toString(launchpadId) + keySwopPerTicket)))
241241 let boughtTicketsAmount = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtTicketsAmount)), 0)
242242 let allowedTicketsAmount = (allowedTicketsAmountAll - boughtTicketsAmount)
243243 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
244244 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
245245 let freezeAdditionalToken = valueOrElse(getBoolean(this, (toString(launchpadId) + keyFreezeAdditionalToken)), false)
246246 if ((activeLaunchpadId != launchpadId))
247247 then throw("There is no active launchpad or this launchpad is ended")
248248 else if ((startHeight > height))
249249 then throw("Launchpad sale not started yet")
250250 else if ((height > (startHeight + duration)))
251251 then throw("Launchpad sale ended")
252252 else if (if (!(freezeAdditionalToken))
253253 then if ((size(i.payments) != 1))
254254 then true
255255 else (pmtAssetId != buyAssetId)
256256 else false)
257257 then throw((("One attached payment in " + buyAssetName) + " expected"))
258258 else if (if (freezeAdditionalToken)
259259 then if ((size(i.payments) != 2))
260260 then true
261261 else (pmtAssetId != buyAssetId)
262262 else false)
263263 then {
264264 let freezeTokenId = getStringValue(this, (toString(launchpadId) + keyFreezeTokenId))
265265 throw(((("Two attached payments expected: First in " + buyAssetName) + ", second in ") + freezeTokenId))
266266 }
267267 else if (if ((0 >= allowedTicketsAmountAll))
268268 then true
269269 else (0 >= allowedTicketsAmount))
270270 then throw("Not enought SWOP in staking to buy tickets")
271271 else {
272272 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
273273 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
274- let $t01130511449 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
275- let tokenId = $t01130511449._1
276- let tokenStrAssetId = $t01130511449._2
277- let tokenAssetName = $t01130511449._3
278- let tokenDecimals = $t01130511449._4
274+ let $t01130411448 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
275+ let tokenId = $t01130411448._1
276+ let tokenStrAssetId = $t01130411448._2
277+ let tokenAssetName = $t01130411448._3
278+ let tokenDecimals = $t01130411448._4
279279 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
280280 let commissionPerTicket = fraction(ticketPrice, getIntegerValue(this, (toString(launchpadId) + keyComission)), 100)
281281 let buyTicketAmount = (pmtAmount / (ticketPrice + commissionPerTicket))
282282 let allowedBuyTicketAmount = min([buyTicketAmount, allowedTicketsAmount])
283283 let allowedBuyPriceWithComission = (allowedBuyTicketAmount * (ticketPrice + commissionPerTicket))
284284 let change = (pmtAmount - allowedBuyPriceWithComission)
285285 if ((buyTicketAmount == 0))
286286 then throw((("Not enought " + buyAssetName) + " to buy tickets"))
287287 else if ((change != 0))
288288 then throw((((("Wrong payment. To buy " + toString(allowedBuyTicketAmount)) + "tickets you need to pay ") + toString(allowedBuyPriceWithComission)) + buyAssetName))
289289 else {
290290 let freezeAdditionalEntry = if (freezeAdditionalToken)
291291 then {
292292 let freezeTokenId = getStringValue(this, (toString(launchpadId) + keyFreezeTokenId))
293293 let freezeTokenPerTicket = getIntegerValue(this, (toString(launchpadId) + keyFreezeTokenPerTicket))
294- let $t01261312700 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
295- let pmtAmountFreeze = $t01261312700._1
296- let pmtAssetIdFreeze = $t01261312700._2
297- let $t01271712808 = getAssetInfo(pmtAssetId)
298- let pmtFreezeStrAssetId = $t01271712808._1
299- let pmtFreezeAssetName = $t01271712808._2
300- let pmtFreezeDecimals = $t01271712808._3
294+ let $t01261212699 = $Tuple2(i.payments[1].amount, i.payments[1].assetId)
295+ let pmtAmountFreeze = $t01261212699._1
296+ let pmtAssetIdFreeze = $t01261212699._2
297+ let $t01271612807 = getAssetInfo(pmtAssetId)
298+ let pmtFreezeStrAssetId = $t01271612807._1
299+ let pmtFreezeAssetName = $t01271612807._2
300+ let pmtFreezeDecimals = $t01271612807._3
301301 let needFreezeTokens = (freezeTokenPerTicket * buyTicketAmount)
302302 if (if ((pmtFreezeStrAssetId != freezeTokenId))
303303 then true
304304 else (needFreezeTokens != pmtAmountFreeze))
305305 then throw((((("You need to add " + toString(needFreezeTokens)) + " ") + pmtFreezeAssetName) + " as a second payment"))
306306 else [IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserFreezeToken), pmtAmountFreeze)]
307307 }
308308 else nil
309309 let userBoughtTicketsNumbers = valueOrElse(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserTickets)), "")
310310 let lastBoughtTicketNumber = getIntegerValue(this, (toString(launchpadId) + keyTicketLastNumber))
311311 let boughtRange = ((toString((lastBoughtTicketNumber + 1)) + "-") + toString((lastBoughtTicketNumber + allowedBuyTicketAmount)))
312312 let newUserBoughtTicketsNumbers = (userBoughtTicketsNumbers + (if ((userBoughtTicketsNumbers != ""))
313313 then ("," + boughtRange)
314314 else ("" + boughtRange)))
315315 let inv = if ((buyAssetId == USDN))
316316 then invoke(stakingUSDNAddress, "lockNeutrino", nil, [AttachedPayment(pmtAssetId, pmtAmount)])
317317 else 0
318318 if ((inv == inv))
319319 then {
320320 let baseEntry = ([IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtTicketsAmount), (boughtTicketsAmount + allowedBuyTicketAmount)), IntegerEntry((toString(launchpadId) + keyTicketLastNumber), (lastBoughtTicketNumber + allowedBuyTicketAmount)), StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserTickets), newUserBoughtTicketsNumbers)] ++ freezeAdditionalEntry)
321321 if (!(isDefined(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId)))))
322322 then (baseEntry ++ [StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId), refId)])
323323 else baseEntry
324324 }
325325 else throw("Strict value is not equal to itself.")
326326 }
327327 }
328328 })
329329
330330
331331
332332 @Callable(i)
333333 func commitAccessListSale (launchpadId,refId) = valueOrElse(isActive(), {
334- let $t01487914954 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
335- let pmtAmount = $t01487914954._1
336- let pmtAssetId = $t01487914954._2
337- let $t01495915109 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
338- let buyAssetId = $t01495915109._1
339- let buyAssetStrId = $t01495915109._2
340- let buyAssetName = $t01495915109._3
341- let buyAssetDecimals = $t01495915109._4
334+ let $t01487814953 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
335+ let pmtAmount = $t01487814953._1
336+ let pmtAssetId = $t01487814953._2
337+ let $t01495815108 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
338+ let buyAssetId = $t01495815108._1
339+ let buyAssetStrId = $t01495815108._2
340+ let buyAssetName = $t01495815108._3
341+ let buyAssetDecimals = $t01495815108._4
342342 let userUsdnInMarketing = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAmountBuyAssetInMarketing)), 0)
343343 let usdnInMarketing = valueOrElse(getInteger(this, (toString(launchpadId) + keyAmountBuyAssetInMarketing)), 0)
344344 let boughtAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtAllocations)), 0)
345345 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
346346 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
347347 let tokensPerAllocation = getIntegerValue(this, (toString(launchpadId) + keyTokensPerAllocation))
348- let $t01577815922 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
349- let tokenId = $t01577815922._1
350- let tokenStrAssetId = $t01577815922._2
351- let tokenAssetName = $t01577815922._3
352- let tokenDecimals = $t01577815922._4
348+ let $t01577715921 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
349+ let tokenId = $t01577715921._1
350+ let tokenStrAssetId = $t01577715921._2
351+ let tokenAssetName = $t01577715921._3
352+ let tokenDecimals = $t01577715921._4
353353 let allocationPriceWithComission = fraction(fraction(tokenPrice, tokensPerAllocation, pow(10, 0, tokenDecimals, 0, 0, DOWN)), (100 + commission), 100)
354354 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
355355 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
356356 if ((activeLaunchpadId != launchpadId))
357357 then throw("There is no active launchpad or this launchpad is ended")
358358 else if ((startHeight > height))
359359 then throw("Launchpad sale not started yet")
360360 else if ((height > (startHeight + duration)))
361361 then throw("Launchpad sale ended")
362362 else if (if ((size(i.payments) != 1))
363363 then true
364364 else (pmtAssetId != buyAssetId))
365365 then throw((("One attached payment in " + buyAssetName) + " expected"))
366366 else if ((boughtAllocations >= maxAllocationsAmount))
367367 then throw((("You can buy only " + toString(maxAllocationsAmount)) + "allocations"))
368368 else if (if ((allocationPriceWithComission != pmtAmount))
369369 then ((allocationPriceWithComission * 2) != pmtAmount)
370370 else false)
371371 then throw(((("Wrong payment. You can buy 1 or 2 allocations for " + toString(allocationPriceWithComission)) + buyAssetName) + " per allocation"))
372372 else {
373373 let buyAllocationsAmount = (pmtAmount / allocationPriceWithComission)
374374 let inv = if ((buyAssetId == USDN))
375375 then invoke(stakingUSDNAddress, "lockNeutrino", nil, [AttachedPayment(pmtAssetId, pmtAmount)])
376376 else 0
377377 if ((inv == inv))
378378 then {
379379 let baseEntry = [IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtAllocations), (boughtAllocations + buyAllocationsAmount)), IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAmountBuyAssetInMarketing), (userUsdnInMarketing + pmtAmount)), IntegerEntry((toString(launchpadId) + keyAmountBuyAssetInMarketing), (usdnInMarketing + pmtAmount))]
380380 if (!(isDefined(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId)))))
381381 then (baseEntry ++ [StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId), refId)])
382382 else baseEntry
383383 }
384384 else throw("Strict value is not equal to itself.")
385385 }
386386 })
387387
388388
389389
390390 @Callable(i)
391391 func commitHighCompetitionSale (launchpadId,refId) = valueOrElse(isActive(), {
392- let $t01818018255 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
393- let pmtAmount = $t01818018255._1
394- let pmtAssetId = $t01818018255._2
395- let $t01826018410 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
396- let buyAssetId = $t01826018410._1
397- let buyAssetStrId = $t01826018410._2
398- let buyAssetName = $t01826018410._3
399- let buyAssetDecimals = $t01826018410._4
392+ let $t01817918254 = $Tuple2(i.payments[0].amount, i.payments[0].assetId)
393+ let pmtAmount = $t01817918254._1
394+ let pmtAssetId = $t01817918254._2
395+ let $t01825918409 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
396+ let buyAssetId = $t01825918409._1
397+ let buyAssetStrId = $t01825918409._2
398+ let buyAssetName = $t01825918409._3
399+ let buyAssetDecimals = $t01825918409._4
400400 let startHeight = value(getInteger(this, (toString(launchpadId) + keyStartHeight)))
401401 let duration = value(getInteger(this, (toString(launchpadId) + keyDuration)))
402402 let boughtHCTicketsAmount = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCBoughtTicketsAmount)), 0)
403403 let highCompetitionSale = valueOrElse(getBoolean(this, (toString(launchpadId) + keyHighCompetitionSale)), false)
404404 if ((activeLaunchpadId != launchpadId))
405405 then throw("There is no active launchpad or this launchpad is ended")
406406 else if (!(highCompetitionSale))
407407 then throw("There is no high competition sale for this launchpad")
408408 else if ((startHeight > height))
409409 then throw("Launchpad sale not started yet")
410410 else if ((height > (startHeight + duration)))
411411 then throw("Launchpad sale ended")
412412 else if (if ((size(i.payments) != 1))
413413 then true
414414 else (pmtAssetId != buyAssetId))
415415 then throw((("One attached payment in " + buyAssetName) + " expected"))
416416 else {
417417 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
418418 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
419- let $t01958319727 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
420- let tokenId = $t01958319727._1
421- let tokenStrAssetId = $t01958319727._2
422- let tokenAssetName = $t01958319727._3
423- let tokenDecimals = $t01958319727._4
419+ let $t01958219726 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
420+ let tokenId = $t01958219726._1
421+ let tokenStrAssetId = $t01958219726._2
422+ let tokenAssetName = $t01958219726._3
423+ let tokenDecimals = $t01958219726._4
424424 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
425425 let commissionPerTicket = fraction(ticketPrice, getIntegerValue(this, (toString(launchpadId) + keyHighCompetitionComission)), 100)
426426 let buyTicketAmount = (pmtAmount / (ticketPrice + commissionPerTicket))
427427 let buyPriceWithComission = (buyTicketAmount * (ticketPrice + commissionPerTicket))
428428 let change = (pmtAmount - buyPriceWithComission)
429429 if ((buyTicketAmount == 0))
430430 then throw((("Not enought " + buyAssetName) + " to buy tickets"))
431431 else if ((change != 0))
432432 then throw((((("Wrong payment. To buy " + toString(buyTicketAmount)) + "tickets you need to pay ") + toString(buyPriceWithComission)) + buyAssetName))
433433 else {
434434 let userBoughtTicketsNumbers = valueOrElse(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCTickets)), "")
435435 let lastBoughtTicketNumber = getIntegerValue(this, (toString(launchpadId) + keyHCTicketLastNumber))
436436 let boughtRange = ((toString((lastBoughtTicketNumber + 1)) + "-") + toString((lastBoughtTicketNumber + buyTicketAmount)))
437437 let newUserBoughtTicketsNumbers = (userBoughtTicketsNumbers + (if ((userBoughtTicketsNumbers != ""))
438438 then ("," + boughtRange)
439439 else ("" + boughtRange)))
440440 let inv = if ((buyAssetId == USDN))
441441 then invoke(stakingUSDNAddress, "lockNeutrino", nil, [AttachedPayment(pmtAssetId, pmtAmount)])
442442 else 0
443443 if ((inv == inv))
444444 then {
445445 let baseEntry = [IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCBoughtTicketsAmount), (boughtHCTicketsAmount + buyTicketAmount)), IntegerEntry((toString(launchpadId) + keyHCTicketLastNumber), (lastBoughtTicketNumber + buyTicketAmount)), StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCTickets), newUserBoughtTicketsNumbers)]
446446 if (!(isDefined(getString(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId)))))
447447 then (baseEntry ++ [StringEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserRefId), refId)])
448448 else baseEntry
449449 }
450450 else throw("Strict value is not equal to itself.")
451451 }
452452 }
453453 })
454454
455455
456456
457457 @Callable(i)
458458 func finalise (launchpadId,vrfHeight,secretWord) = valueOrElse(isActive(), valueOrElse(isAdminCall(i), {
459459 let savedHash = getStringValue(this, (toString(launchpadId) + keyVerifyHash))
460460 let calcHash = toBase58String(sha256((toBytes(vrfHeight) + toBytes(secretWord))))
461461 if ((calcHash != savedHash))
462462 then throw("vrf Height hash not matching")
463463 else {
464- let $t02234022490 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
465- let buyAssetId = $t02234022490._1
466- let buyAssetStrId = $t02234022490._2
467- let buyAssetName = $t02234022490._3
468- let buyAssetDecimals = $t02234022490._4
464+ let $t02233922489 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
465+ let buyAssetId = $t02233922489._1
466+ let buyAssetStrId = $t02233922489._2
467+ let buyAssetName = $t02233922489._3
468+ let buyAssetDecimals = $t02233922489._4
469469 let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
470470 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
471471 let commissionHC = getIntegerValue(this, (toString(launchpadId) + keyHighCompetitionComission))
472472 let transferedBuyAsset = valueOrElse(getInteger(this, (toString(launchpadId) + keyTransferBuyAsset)), 0)
473473 let swopfiMembersBuyAssetAmount = getIntegerValue(this, (toString(launchpadId) + keyTotalAmountBuyAssetSold))
474474 let swopfiHCBuyAssetAmount = valueOrElse(getInteger(this, (toString(launchpadId) + keyTotalAmountBuyAssetSoldHC)), 0)
475475 let swopfiMembersComission = fraction(swopfiMembersBuyAssetAmount, commission, 100)
476476 let swopfiHCComission = fraction(swopfiHCBuyAssetAmount, commissionHC, 100)
477477 let totalAmountBuyAssetInMarketing = getIntegerValue(this, (toString(launchpadId) + keyAmountBuyAssetInMarketingFinalized))
478478 let marketingComission = fraction(totalAmountBuyAssetInMarketing, commission, 100)
479479 let unstakeAmount = ((((((swopfiMembersBuyAssetAmount + totalAmountBuyAssetInMarketing) + swopfiMembersComission) + marketingComission) + swopfiHCBuyAssetAmount) + swopfiHCComission) - transferedBuyAsset)
480480 if ((transferedBuyAsset > ((swopfiMembersBuyAssetAmount + totalAmountBuyAssetInMarketing) + swopfiHCBuyAssetAmount)))
481481 then throw("Can't transfer negative value to project")
482482 else {
483483 let inv = if ((buyAssetId == USDN))
484484 then invoke(stakingUSDNAddress, "unlockNeutrino", [unstakeAmount, toBase58String(USDN)], nil)
485485 else 0
486486 if ((inv == inv))
487487 then [IntegerEntry((toString(launchpadId) + keyFinaliseHeight), height), ScriptTransfer(projectAddress, (((swopfiMembersBuyAssetAmount + swopfiHCBuyAssetAmount) + totalAmountBuyAssetInMarketing) - transferedBuyAsset), buyAssetId), ScriptTransfer(commissionWallet, ((swopfiMembersComission + marketingComission) + swopfiHCComission), buyAssetId)]
488488 else throw("Strict value is not equal to itself.")
489489 }
490490 }
491491 }))
492492
493493
494494
495495 @Callable(i)
496496 func claim (launchpadId) = valueOrElse(isActive(), {
497497 let boughtTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtTicketsAmount)), 0)
498498 let boughtHCTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserHCBoughtTicketsAmount)), 0)
499499 let boughtAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserBoughtAllocations)), 0)
500500 let userClaimStatus = valueOrElse(getBoolean(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimStatus)), false)
501501 let finalizeHeight = valueOrElse(getInteger(this, (toString(launchpadId) + keyFinaliseHeight)), 0)
502502 if ((finalizeHeight == 0))
503503 then throw("You can't claim because results are not finalized")
504504 else if (userClaimStatus)
505505 then throw("You are already claimed")
506506 else if (if (if ((boughtTickets == 0))
507507 then (boughtAllocations == 0)
508508 else false)
509509 then (boughtHCTickets == 0)
510510 else false)
511511 then throw("You can't claim because you don't buy anything")
512512 else {
513- let $t02557425751 = getAssetInfoFromString(valueOrElse(getString(this, (toString(launchpadId) + keyBuyToken)), toBase58String(USDN)))
514- let buyAssetId = $t02557425751._1
515- let buyAssetStrId = $t02557425751._2
516- let buyAssetName = $t02557425751._3
517- let buyAssetDecimals = $t02557425751._4
513+ let $t02557325750 = getAssetInfoFromString(valueOrElse(getString(this, (toString(launchpadId) + keyBuyToken)), toBase58String(USDN)))
514+ let buyAssetId = $t02557325750._1
515+ let buyAssetStrId = $t02557325750._2
516+ let buyAssetName = $t02557325750._3
517+ let buyAssetDecimals = $t02557325750._4
518518 let wonnedTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserWinnedTicketsAmount)), 0)
519519 let wonnedHCTickets = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserWinnedHighCompetitionTicketsAmount)), 0)
520520 let awailableAllocations = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserAvailableAllocations)), 0)
521521 let commission = getIntegerValue(this, (toString(launchpadId) + keyComission))
522522 let commissionHC = valueOrElse(getInteger(this, (toString(launchpadId) + keyHighCompetitionComission)), 0)
523523 let allowedAllocations = min([boughtAllocations, awailableAllocations])
524524 let tokenPrice = getIntegerValue(this, (toString(launchpadId) + keyPricePerToken))
525525 let tokensPerTicket = getIntegerValue(this, (toString(launchpadId) + keyTokensPerTicket))
526- let $t02666726811 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
527- let tokenId = $t02666726811._1
528- let tokenStrAssetId = $t02666726811._2
529- let tokenAssetName = $t02666726811._3
530- let tokenDecimals = $t02666726811._4
526+ let $t02666626810 = getAssetInfoFromString(getStringValue(this, (toString(launchpadId) + keyAssetId)))
527+ let tokenId = $t02666626810._1
528+ let tokenStrAssetId = $t02666626810._2
529+ let tokenAssetName = $t02666626810._3
530+ let tokenDecimals = $t02666626810._4
531531 let ticketPrice = fraction(tokensPerTicket, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN))
532532 let tokensPerAllocation = getIntegerValue(this, (toString(launchpadId) + keyTokensPerAllocation))
533533 let transferTokensAmount = (((wonnedTickets * tokensPerTicket) + (allowedAllocations * tokensPerAllocation)) + (wonnedHCTickets * tokensPerTicket))
534534 let notAllowedAllocationsTokens = ((boughtAllocations - allowedAllocations) * tokensPerAllocation)
535535 let buyAssetForAllocations = fraction(fraction(notAllowedAllocationsTokens, tokenPrice, pow(10, 0, tokenDecimals, 0, 0, DOWN)), (100 + commission), 100)
536536 let buyAssetForUnwonnedTickets = fraction(((boughtTickets - wonnedTickets) * ticketPrice), (100 + commission), 100)
537537 let buyAssetForHCUnwonnedTickets = fraction(((boughtHCTickets - wonnedHCTickets) * ticketPrice), (100 + commissionHC), 100)
538538 let claimedBuyToken = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimedBuyTokens)), 0)
539539 if (if (if ((0 > buyAssetForAllocations))
540540 then true
541541 else (0 > buyAssetForUnwonnedTickets))
542542 then true
543543 else (0 > buyAssetForHCUnwonnedTickets))
544544 then throw("Error with allowed allocation param or wonned tickets param please contact support")
545545 else {
546546 let returnedBuyAssetAmount = (((buyAssetForUnwonnedTickets + buyAssetForHCUnwonnedTickets) + buyAssetForAllocations) - claimedBuyToken)
547547 let transferBuyAsset = if ((returnedBuyAssetAmount > 0))
548548 then [ScriptTransfer(i.caller, returnedBuyAssetAmount, buyAssetId), IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimedBuyTokens), returnedBuyAssetAmount)]
549549 else nil
550550 let inv = if (if ((returnedBuyAssetAmount > 0))
551551 then (buyAssetId == USDN)
552552 else false)
553553 then invoke(stakingUSDNAddress, "unlockNeutrino", [returnedBuyAssetAmount, toBase58String(USDN)], nil)
554554 else 0
555555 if ((inv == inv))
556556 then {
557557 let claimedParams = split(valueOrElse(getString(this, (toString(launchpadId) + keyClaimParams)), "claimAll"), ",")
558558 if ((claimedParams[0] == "claimAll"))
559559 then {
560560 let transferTokens = if ((transferTokensAmount > 0))
561561 then [ScriptTransfer(i.caller, transferTokensAmount, tokenId)]
562562 else nil
563563 (([BooleanEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimStatus), true), IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimedTokens), transferTokensAmount)] ++ transferTokens) ++ transferBuyAsset)
564564 }
565565 else if ((claimedParams[0] == "claimPeriod"))
566566 then {
567567 let claimedTokens = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimedTokens)), 0)
568568 let unlockPeriod = value(parseInt(claimedParams[2]))
569569 let blockHeight = (value(parseInt(claimedParams[3])) + finalizeHeight)
570570 let unlockHeight = (unlockPeriod + blockHeight)
571571 let allowedStartAmount = fraction(transferTokensAmount, value(parseInt(claimedParams[1])), 100)
572572 let allowedTokensAmount = (allowedStartAmount + (if ((height > blockHeight))
573573 then (fraction((transferTokensAmount - allowedStartAmount), (min([height, unlockHeight]) - blockHeight), unlockPeriod) - claimedTokens)
574574 else (0 - claimedTokens)))
575575 let claimStatusEntry = if ((transferTokensAmount >= (claimedTokens + allowedTokensAmount)))
576576 then [BooleanEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimStatus), true)]
577577 else nil
578578 if (if ((allowedTokensAmount > 0))
579579 then true
580580 else (returnedBuyAssetAmount > 0))
581581 then {
582582 let transferTokens = if ((allowedTokensAmount > 0))
583583 then [IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserClaimedTokens), (claimedTokens + allowedTokensAmount)), ScriptTransfer(i.caller, allowedTokensAmount, tokenId)]
584584 else nil
585585 (transferBuyAsset ++ transferTokens)
586586 }
587587 else throw("Nothing to claim")
588588 }
589589 else throw("Unknown claim function")
590590 }
591591 else throw("Strict value is not equal to itself.")
592592 }
593593 }
594594 })
595595
596596
597597
598598 @Callable(i)
599599 func claimFreezeToken (launchpadId) = valueOrElse(isActive(), {
600600 let freezeAdditionalToken = valueOrElse(getBoolean(this, (toString(launchpadId) + keyFreezeAdditionalToken)), false)
601601 if (!(isDefined(getInteger(this, (toString(launchpadId) + keyFinaliseHeight)))))
602602 then throw("You can't claim because results are not finalized")
603603 else if (!(freezeAdditionalToken))
604604 then throw("There are no additional token freezing for this launchpad")
605605 else {
606606 let tokenId = fromBase58String(getStringValue(this, (toString(launchpadId) + keyFreezeTokenId)))
607607 let userTokensFreezed = valueOrElse(getInteger(this, (((toString(i.caller) + "_") + toString(launchpadId)) + keyUserFreezeToken)), 0)
608608 let startHeight = valueOrElse(getInteger(this, (toString(launchpadId) + keyStartHeight)), 0)
609609 let duration = valueOrElse(getInteger(this, (toString(launchpadId) + keyDuration)), 0)
610610 let freezeTokenDuration = getIntegerValue(this, (toString(launchpadId) + keyFreezeTokenDuration))
611611 let blockEndHeight = ((startHeight + duration) + freezeTokenDuration)
612612 if ((userTokensFreezed == 0))
613613 then throw("You are already claimed your tokens or not paid anything")
614614 else if ((blockEndHeight > height))
615615 then throw(("Your tokens freezed teel " + toString(blockEndHeight)))
616616 else [ScriptTransfer(i.caller, userTokensFreezed, tokenId), IntegerEntry((((toString(i.caller) + "_") + toString(launchpadId)) + keyUserFreezeToken), 0)]
617617 }
618618 })
619619
620620
621621
622622 @Callable(i)
623623 func transferBuyAsset (launchpadId,amount) = valueOrElse(isActive(), valueOrElse(isAdminCall(i), {
624624 let projectAddress = addressFromStringValue(getStringValue(this, (toString(launchpadId) + keyAddress)))
625- let $t03297633126 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
626- let buyAssetId = $t03297633126._1
627- let buyAssetStrId = $t03297633126._2
628- let buyAssetName = $t03297633126._3
629- let buyAssetDecimals = $t03297633126._4
625+ let $t03297533125 = getAssetInfoFromString(value(getString(this, (toString(launchpadId) + keyBuyToken))))
626+ let buyAssetId = $t03297533125._1
627+ let buyAssetStrId = $t03297533125._2
628+ let buyAssetName = $t03297533125._3
629+ let buyAssetDecimals = $t03297533125._4
630630 let transferedBuyAsset = valueOrElse(getInteger(this, (toString(launchpadId) + keyTransferBuyAsset)), 0)
631631 let inv = if (if ((amount > 0))
632632 then (buyAssetId == USDN)
633633 else false)
634634 then invoke(stakingUSDNAddress, "unlockNeutrino", [amount, toBase58String(USDN)], nil)
635635 else 0
636636 if ((inv == inv))
637637 then [IntegerEntry((toString(launchpadId) + keyTransferBuyAsset), (transferedBuyAsset + amount)), ScriptTransfer(projectAddress, amount, buyAssetId)]
638638 else throw("Strict value is not equal to itself.")
639639 }))
640640
641641
642642
643643 @Callable(i)
644644 func shutdown () = valueOrElse(isAdminCall(i), if (!(active))
645645 then throw("DApp already inactive")
646646 else [BooleanEntry(keyActive, false)])
647647
648648
649649
650650 @Callable(i)
651651 func activate () = valueOrElse(isAdminCall(i), if (active)
652652 then throw("DApp already active")
653653 else [BooleanEntry(keyActive, true)])
654654
655655

github/deemru/w8io/3ef1775 
191.51 ms