tx · QbnTx68yL38nvVb4JpdRV3ojkoZM7rqE5wLRYvgBWgc 3N3dmyiBdj7pmjnQrzTTvmfzKSqndSzCMmk: -0.01600000 Waves 2022.10.09 00:20 [2263883] smart account 3N3dmyiBdj7pmjnQrzTTvmfzKSqndSzCMmk > SELF 0.00000000 Waves
{ "type": 13, "id": "QbnTx68yL38nvVb4JpdRV3ojkoZM7rqE5wLRYvgBWgc", "fee": 1600000, "feeAssetId": null, "timestamp": 1665264074043, "version": 2, "chainId": 84, "sender": "3N3dmyiBdj7pmjnQrzTTvmfzKSqndSzCMmk", "senderPublicKey": "AR4BeE6hYADMvKxgRQs4ADN3krEqb2j8WE3WfJxzL3zE", "proofs": [ "3WZrf1hxCmumx1Zs3fsCkwyc6QkP6aEJKQ6GWxhYAhdhCXUQHhKghKL7FN3U3dZx1C4xubNS1KQcwmMN9KwrNtQE" ], "script": "base64:BgJFCAISAwoBCBIAEgMKAQgSAwoBCBIDCgEIEgcKBQgIAQEIEgMKAQgSBAoCCAgSBQoDCAgBEgMKAQgSABIFCgMICAgSABIAJgAFd2F2ZXMAgMLXLwAOdGlja2V0UHJpY2VJbnQAwIQ9AAt0aWNrZXRQcmljZQUOdGlja2V0UHJpY2VJbnQABmludkZlZQCgwh4AEndpdGhkcmF3RmVlUGVyY2VudAAFABZmZWVDb2xsZWN0b3JBZGRyZXNzS2V5AhNmZWVDb2xsZWN0b3JBZGRyZXNzABl0b3VybmFtZW50QnV5SW5GZWVQZXJjZW50AAoADmRlcG9zaXRBc3NldElkAiw1dWUxZml1VjZqNlVCcjZYZjI4UW1zNnk1RnF6S3RxdmF4eGh3dTdoVFE1OAENdHJ5R2V0SW50ZWdlcgEDa2V5BAckbWF0Y2gwCQCaCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAFAWIAAAESZ2V0VGlja2V0c0NvdW50S2V5AQ1hZGRyZXNzU3RyaW5nCQCsAgIFDWFkZHJlc3NTdHJpbmcCDV90aWNrZXRzQ291bnQBImJ1eUluQW1vdW50Rm9yVG91cm5hbWVudEZvckFjY291bnQCDHRvdXJuYW1lbnRJZAdhY2NvdW50CQCsAgIJAKwCAgUMdG91cm5hbWVudElkAhdfYnV5SW5BbW91bnRGb3JBY2NvdW50XwUHYWNjb3VudAEjYnV5SW5Bc3NldElkRm9yVG91cm5hbWVudEZvckFjY291bnQCDHRvdXJuYW1lbnRJZAdhY2NvdW50CQCsAgIJAKwCAgUMdG91cm5hbWVudElkAhhfYnV5SW5Bc3NldElkRm9yQWNjb3VudF8FB2FjY291bnQBHXRpY2tldEZvclRvdXJuYW1lbnRGb3JBY2NvdW50Agx0b3VybmFtZW50SWQHYWNjb3VudAkArAICCQCsAgIFDHRvdXJuYW1lbnRJZAISX3RpY2tldEZvckFjY291bnRfBQdhY2NvdW50ASZ0b3VybmFtZW50VG90YWxCdXlJbkNvbGxlY3RlZEFtb3VudEtleQEMdG91cm5hbWVudElkCQCsAgIFDHRvdXJuYW1lbnRJZAIkX3RvdXJuYW1lbnRUb3RhbEJ1eUluQ29sbGVjdGVkQW1vdW50AS90b3VybmFtZW50VG90YWxCdXlJbkNvbGxlY3RlZEFtb3VudE1pbnVzRmVlc0tleQEMdG91cm5hbWVudElkCQCsAgIFDHRvdXJuYW1lbnRJZAItX3RvdXJuYW1lbnRUb3RhbEJ1eUluQ29sbGVjdGVkQW1vdW50TWludXNGZWVzARR0b3VybmFtZW50Q3JlYXRvcktleQEMdG91cm5hbWVudElkCQCsAgIFDHRvdXJuYW1lbnRJZAISX3RvdXJuYW1lbnRDcmVhdG9yARF0b3VybmFtZW50TmFtZUtleQEMdG91cm5hbWVudElkCQCsAgIFDHRvdXJuYW1lbnRJZAIPX3RvdXJuYW1lbnROYW1lARh0b3VybmFtZW50UHJpemVBbW91bnRLZXkBDHRvdXJuYW1lbnRJZAkArAICBQx0b3VybmFtZW50SWQCFl90b3VybmFtZW50UHJpemVBbW91bnQBHHRvdXJuYW1lbnRNYXhQbGF5ZXJzQ291bnRLZXkBDHRvdXJuYW1lbnRJZAkArAICBQx0b3VybmFtZW50SWQCGl90b3VybmFtZW50TWF4UGxheWVyc0NvdW50ARl0b3VybmFtZW50UGxheWVyc0NvdW50S2V5AQx0b3VybmFtZW50SWQJAKwCAgUMdG91cm5hbWVudElkAhdfdG91cm5hbWVudFBsYXllcnNDb3VudAEZdG91cm5hbWVudFByaXplQXNzZXRJZEtleQEMdG91cm5hbWVudElkCQCsAgIFDHRvdXJuYW1lbnRJZAIXX3RvdXJuYW1lbnRQcml6ZUFzc2V0SWQBG3RvdXJuYW1lbnRQcml6ZUFzc2V0TmFtZUtleQEMdG91cm5hbWVudElkCQCsAgIFDHRvdXJuYW1lbnRJZAIZX3RvdXJuYW1lbnRQcml6ZUFzc2V0TmFtZQEYdG91cm5hbWVudEJ1eUluQW1vdW50S2V5AQx0b3VybmFtZW50SWQJAKwCAgUMdG91cm5hbWVudElkAhZfdG91cm5hbWVudEJ1eUluQW1vdW50ARl0b3VybmFtZW50QnV5SW5Bc3NldElkS2V5AQx0b3VybmFtZW50SWQJAKwCAgUMdG91cm5hbWVudElkAhdfdG91cm5hbWVudEJ1eUluQXNzZXRJZAEbdG91cm5hbWVudEJ1eUluQXNzZXROYW1lS2V5AQx0b3VybmFtZW50SWQJAKwCAgUMdG91cm5hbWVudElkAhlfdG91cm5hbWVudEJ1eUluQXNzZXROYW1lAR90b3VybmFtZW50QnV5SW5Bc3NldERlY2ltYWxzS2V5AQx0b3VybmFtZW50SWQJAKwCAgUMdG91cm5hbWVudElkAh1fdG91cm5hbWVudEJ1eUluQXNzZXREZWNpbWFscwEfdG91cm5hbWVudFByaXplQXNzZXREZWNpbWFsc0tleQEMdG91cm5hbWVudElkCQCsAgIFDHRvdXJuYW1lbnRJZAIdX3RvdXJuYW1lbnRQcml6ZUFzc2V0RGVjaW1hbHMBE3RvdXJuYW1lbnRTdGF0dXNLZXkBDHRvdXJuYW1lbnRJZAkArAICBQx0b3VybmFtZW50SWQCEV90b3VybmFtZW50U3RhdHVzAR50b3VybmFtZW50QnV5SW5GZWVDb2xsZWN0ZWRLZXkBDHRvdXJuYW1lbnRJZAkArAICBQx0b3VybmFtZW50SWQCHF90b3VybmFtZW50QnV5SW5GZWVDb2xsZWN0ZWQBIXRvdXJuYW1lbnRXaW5uaW5nVHJhbnNhY3Rpb25JZEtleQEMdG91cm5hbWVudElkCQCsAgIFDHRvdXJuYW1lbnRJZAIfX3RvdXJuYW1lbnRXaW5uaW5nVHJhbnNhY3Rpb25JZAENZ2FtZVdpbm5lcktleQEGZ2FtZUlkCQCsAgIFBmdhbWVJZAIHX3dpbm5lcgEYYWRkcmVzc0F2YWlsYWJsZUZ1bmRzS2V5AQdhZGRyZXNzCQCsAgIFB2FkZHJlc3MCD19hdmFpbGFibGVGdW5kcwEaYWRkcmVzc1RvdGFsTG9ja2VkRnVuZHNLZXkBB2FkZHJlc3MJAKwCAgUHYWRkcmVzcwIRX3RvdGFsTG9ja2VkRnVuZHMBIWFkZHJlc3NMb2NrZWRGdW5kc1RvdGFsSGlzdG9yeUtleQEHYWRkcmVzcwkArAICBQdhZGRyZXNzAhhfbG9ja2VkRnVuZHNUb3RhbEhpc3RvcnkBHGFkZHJlc3NMb2NrZWRGdW5kc0ZvckdhbWVLZXkCB2FkZHJlc3MGZ2FtZUlkCQCsAgIJAKwCAgUHYWRkcmVzcwINX2xvY2tlZEZ1bmRzXwUGZ2FtZUlkARphZGRyZXNzQXZhaWxhYmxlUmV3YXJkc0tleQEHYWRkcmVzcwkArAICBQdhZGRyZXNzAhFfYXZhaWxhYmxlUmV3YXJkcwEPZ2V0VGlja2V0c0NvdW50AQ1hZGRyZXNzU3RyaW5nCQENdHJ5R2V0SW50ZWdlcgEJARJnZXRUaWNrZXRzQ291bnRLZXkBBQ1hZGRyZXNzU3RyaW5nAQ1jb25zdW1lVGlja2V0AQpwbGF5ZXJBZGRyBBJjdXJyZW50VGlja2V0Q291bnQJAQ9nZXRUaWNrZXRzQ291bnQBBQpwbGF5ZXJBZGRyBBVuZXdDdXJyZW50VGlja2V0Q291bnQJAGUCBRJjdXJyZW50VGlja2V0Q291bnQAAQMJAGYCAAAFFW5ld0N1cnJlbnRUaWNrZXRDb3VudAAABRVuZXdDdXJyZW50VGlja2V0Q291bnQOAWkBFnNldEZlZUNvbGxlY3RvckFkZHJlc3MBDWNvbGxlY3RvckFkZHIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAgpBZG1pbiBPbmx5CQDMCAIJAQtTdHJpbmdFbnRyeQIFFmZlZUNvbGxlY3RvckFkZHJlc3NLZXkFDWNvbGxlY3RvckFkZHIFA25pbAFpAQxkZXBvc2l0RnVuZHMABANwbXQDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABCQCRAwIIBQFpCHBheW1lbnRzAAAJAAIBAiFQbGVhc2UgYXR0YWNoIGV4YWN0bHkgb25lIHBheW1lbnQDCQECIT0CCAUDcG10B2Fzc2V0SWQJANkEAQUOZGVwb3NpdEFzc2V0SWQJAAIBAhlZb3UgY2FuIG9ubHkgZGVwb3NpdCBVU0ROBA1jYWxsZXJBZGRyU3RyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMEFWN1cnJlbnRBdmFpbGFibGVGdW5kcwkBDXRyeUdldEludGVnZXIBCQEYYWRkcmVzc0F2YWlsYWJsZUZ1bmRzS2V5AQUNY2FsbGVyQWRkclN0cgkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEYYWRkcmVzc0F2YWlsYWJsZUZ1bmRzS2V5AQUNY2FsbGVyQWRkclN0cgkAZAIFFWN1cnJlbnRBdmFpbGFibGVGdW5kcwgFA3BtdAZhbW91bnQFA25pbAABAWkBGGNhbmNlbFNpZ25VcFRvVG91cm5hbWVudAEMdG91cm5hbWVudElkBBB0b3VybmFtZW50U3RhdHVzCQERQGV4dHJOYXRpdmUoMTA1OCkBCQETdG91cm5hbWVudFN0YXR1c0tleQEFDHRvdXJuYW1lbnRJZAMJAQIhPQIFEHRvdXJuYW1lbnRTdGF0dXMCDHJlZ2lzdHJhdGlvbgkAAgECKFRvdXJuYW1lbnQgaXMgbm90IGluIHJlZ2lzdHJhdGlvbiBwaGFzZSEEDWNhbGxlckFkZHJTdHIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwQPcGFpZEJ1eUluQW1vdW50CQERQGV4dHJOYXRpdmUoMTA1NSkBCQEiYnV5SW5BbW91bnRGb3JUb3VybmFtZW50Rm9yQWNjb3VudAIFDHRvdXJuYW1lbnRJZAUNY2FsbGVyQWRkclN0cgQQcGFpZEJ1eUluQXNzZXRJZAkBEUBleHRyTmF0aXZlKDEwNTgpAQkBI2J1eUluQXNzZXRJZEZvclRvdXJuYW1lbnRGb3JBY2NvdW50AgUMdG91cm5hbWVudElkBQ1jYWxsZXJBZGRyU3RyBB1hbHJlYWR5UmVnaXN0ZXJlZFBsYXllcnNDb3VudAkBDXRyeUdldEludGVnZXIBCQEZdG91cm5hbWVudFBsYXllcnNDb3VudEtleQEFDHRvdXJuYW1lbnRJZAQZdG90YWxCdXlJbkNvbGxlY3RlZEFtb3VudAkAZQIJAQ10cnlHZXRJbnRlZ2VyAQkBJnRvdXJuYW1lbnRUb3RhbEJ1eUluQ29sbGVjdGVkQW1vdW50S2V5AQUMdG91cm5hbWVudElkBQ9wYWlkQnV5SW5BbW91bnQECWZlZXNUYWtlbgkAawMFGXRvdGFsQnV5SW5Db2xsZWN0ZWRBbW91bnQFGXRvdXJuYW1lbnRCdXlJbkZlZVBlcmNlbnQAZAkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDWNhbGxlckFkZHJTdHIFD3BhaWRCdXlJbkFtb3VudAkA2QQBBRBwYWlkQnV5SW5Bc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAR10aWNrZXRGb3JUb3VybmFtZW50Rm9yQWNjb3VudAIFDHRvdXJuYW1lbnRJZAUNY2FsbGVyQWRkclN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEiYnV5SW5BbW91bnRGb3JUb3VybmFtZW50Rm9yQWNjb3VudAIFDHRvdXJuYW1lbnRJZAUNY2FsbGVyQWRkclN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEjYnV5SW5Bc3NldElkRm9yVG91cm5hbWVudEZvckFjY291bnQCBQx0b3VybmFtZW50SWQFDWNhbGxlckFkZHJTdHIJAMwIAgkBDEludGVnZXJFbnRyeQIJARl0b3VybmFtZW50UGxheWVyc0NvdW50S2V5AQUMdG91cm5hbWVudElkCQBlAgUdYWxyZWFkeVJlZ2lzdGVyZWRQbGF5ZXJzQ291bnQAAQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBJnRvdXJuYW1lbnRUb3RhbEJ1eUluQ29sbGVjdGVkQW1vdW50S2V5AQUMdG91cm5hbWVudElkBRl0b3RhbEJ1eUluQ29sbGVjdGVkQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEvdG91cm5hbWVudFRvdGFsQnV5SW5Db2xsZWN0ZWRBbW91bnRNaW51c0ZlZXNLZXkBBQx0b3VybmFtZW50SWQJAGUCBRl0b3RhbEJ1eUluQ29sbGVjdGVkQW1vdW50BQlmZWVzVGFrZW4FA25pbAABAWkBEnNpZ25VcFRvVG91cm5hbWVudAEMdG91cm5hbWVudElkBA9tYXhQbGF5ZXJzQ291bnQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJARx0b3VybmFtZW50TWF4UGxheWVyc0NvdW50S2V5AQUMdG91cm5hbWVudElkBB1hbHJlYWR5UmVnaXN0ZXJlZFBsYXllcnNDb3VudAkBDXRyeUdldEludGVnZXIBCQEZdG91cm5hbWVudFBsYXllcnNDb3VudEtleQEFDHRvdXJuYW1lbnRJZAQQdG91cm5hbWVudFN0YXR1cwkBEUBleHRyTmF0aXZlKDEwNTgpAQkBE3RvdXJuYW1lbnRTdGF0dXNLZXkBBQx0b3VybmFtZW50SWQDCQECIT0CBRB0b3VybmFtZW50U3RhdHVzAgxyZWdpc3RyYXRpb24JAAIBAihUb3VybmFtZW50IGlzIG5vdCBpbiByZWdpc3RyYXRpb24gcGhhc2UhAwkAAAIFHWFscmVhZHlSZWdpc3RlcmVkUGxheWVyc0NvdW50BQ9tYXhQbGF5ZXJzQ291bnQJAAIBAjVUb3VybmFtZW50IGlzIGN1cnJlbnRseSBmdWxsLCBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyIQQDcG10AwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQkAkQMCCAUBaQhwYXltZW50cwAACQACAQIhUGxlYXNlIGF0dGFjaCBleGFjdGx5IG9uZSBwYXltZW50BAxidXlJbkFzc2V0aWQEByRtYXRjaDAIBQNwbXQHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgRVbml0BAFiBQckbWF0Y2gwAgADCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAkA2AQBBQFiCQACAQILTWF0Y2ggZXJyb3IEE2J1eUluUmVxdWlyZWRBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJARh0b3VybmFtZW50QnV5SW5BbW91bnRLZXkBBQx0b3VybmFtZW50SWQEFGJ1eUluUmVxdWlyZWRBc3NldElkCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQEZdG91cm5hbWVudEJ1eUluQXNzZXRJZEtleQEFDHRvdXJuYW1lbnRJZAMJAQIhPQIFE2J1eUluUmVxdWlyZWRBbW91bnQIBQNwbXQGYW1vdW50CQACAQkArAICAixBdHRhY2hlZCBwYXltZW50IGFtb3VudCBpcyBpbnZhbGlkLCBtdXN0IGJlIAkApAMBBRNidXlJblJlcXVpcmVkQW1vdW50AwkBAiE9AgUUYnV5SW5SZXF1aXJlZEFzc2V0SWQFDGJ1eUluQXNzZXRpZAkAAgEJAKwCAgIuQXR0YWNoZWQgcGF5bWVudCBhc3NldCBpZCBpcyBpbnZhbGlkLCBtdXN0IGJlIAUUYnV5SW5SZXF1aXJlZEFzc2V0SWQEDWNhbGxlckFkZHJTdHIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwQZdG90YWxCdXlJbkNvbGxlY3RlZEFtb3VudAkAZAIJAQ10cnlHZXRJbnRlZ2VyAQkBJnRvdXJuYW1lbnRUb3RhbEJ1eUluQ29sbGVjdGVkQW1vdW50S2V5AQUMdG91cm5hbWVudElkCAUDcG10BmFtb3VudAQJZmVlc1Rha2VuCQBrAwUZdG90YWxCdXlJbkNvbGxlY3RlZEFtb3VudAUZdG91cm5hbWVudEJ1eUluRmVlUGVyY2VudABkCQCUCgIJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAR10aWNrZXRGb3JUb3VybmFtZW50Rm9yQWNjb3VudAIFDHRvdXJuYW1lbnRJZAUNY2FsbGVyQWRkclN0cgYJAMwIAgkBDEludGVnZXJFbnRyeQIJASJidXlJbkFtb3VudEZvclRvdXJuYW1lbnRGb3JBY2NvdW50AgUMdG91cm5hbWVudElkBQ1jYWxsZXJBZGRyU3RyCAUDcG10BmFtb3VudAkAzAgCCQELU3RyaW5nRW50cnkCCQEjYnV5SW5Bc3NldElkRm9yVG91cm5hbWVudEZvckFjY291bnQCBQx0b3VybmFtZW50SWQFDWNhbGxlckFkZHJTdHIFDGJ1eUluQXNzZXRpZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGXRvdXJuYW1lbnRQbGF5ZXJzQ291bnRLZXkBBQx0b3VybmFtZW50SWQJAGQCBR1hbHJlYWR5UmVnaXN0ZXJlZFBsYXllcnNDb3VudAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEmdG91cm5hbWVudFRvdGFsQnV5SW5Db2xsZWN0ZWRBbW91bnRLZXkBBQx0b3VybmFtZW50SWQFGXRvdGFsQnV5SW5Db2xsZWN0ZWRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAS90b3VybmFtZW50VG90YWxCdXlJbkNvbGxlY3RlZEFtb3VudE1pbnVzRmVlc0tleQEFDHRvdXJuYW1lbnRJZAkAZQIFGXRvdGFsQnV5SW5Db2xsZWN0ZWRBbW91bnQFCWZlZXNUYWtlbgUDbmlsAAEBaQEQY2FuY2VsVG91cm5hbWVudAEMdG91cm5hbWVudElkBA1jYWxsZXJBZGRyU3RyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMEEXRvdXJuYW1lbnRDcmVhdG9yCQERQGV4dHJOYXRpdmUoMTA1OCkBCQEUdG91cm5hbWVudENyZWF0b3JLZXkBBQx0b3VybmFtZW50SWQEDGNyZWF0b3JDaGVjawMJAAACBRF0b3VybmFtZW50Q3JlYXRvcgUNY2FsbGVyQWRkclN0cgYDCQAAAggFAWkGY2FsbGVyBQR0aGlzBgkAAgECJk9ubHkgdG91cm5hbWVudCBjcmVhdG9yIGNhbiBjYW5jZWwgaXQhAwkAAAIFDGNyZWF0b3JDaGVjawUMY3JlYXRvckNoZWNrBBB0b3VybmFtZW50U3RhdHVzCQERQGV4dHJOYXRpdmUoMTA1OCkBCQETdG91cm5hbWVudFN0YXR1c0tleQEFDHRvdXJuYW1lbnRJZAMJAQIhPQIFEHRvdXJuYW1lbnRTdGF0dXMCDHJlZ2lzdHJhdGlvbgkAAgECKFRvdXJuYW1lbnQgaXMgbm90IGluIHJlZ2lzdHJhdGlvbiBwaGFzZSEEHWFscmVhZHlSZWdpc3RlcmVkUGxheWVyc0NvdW50CQENdHJ5R2V0SW50ZWdlcgEJARl0b3VybmFtZW50UGxheWVyc0NvdW50S2V5AQUMdG91cm5hbWVudElkAwkAZgIFHWFscmVhZHlSZWdpc3RlcmVkUGxheWVyc0NvdW50AAAJAAIBAkVDYW5ub3QgY2FuY2VsIGEgdG91cm5hbWVudCB3aGVuIHBsYXllcnMgYXJlIGFscmVhZHkgcmVnaXN0ZXJlZCB0byBpdCEEFXRvdXJuYW1lbnRQcml6ZUFtb3VudAkBEUBleHRyTmF0aXZlKDEwNTUpAQkBGHRvdXJuYW1lbnRQcml6ZUFtb3VudEtleQEFDHRvdXJuYW1lbnRJZAQWdG91cm5hbWVudFByaXplQXNzZXRJZAkBEUBleHRyTmF0aXZlKDEwNTgpAQkBGXRvdXJuYW1lbnRQcml6ZUFzc2V0SWRLZXkBBQx0b3VybmFtZW50SWQJAJQKAgkAzAgCCQELRGVsZXRlRW50cnkBCQEYdG91cm5hbWVudFByaXplQW1vdW50S2V5AQUMdG91cm5hbWVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARl0b3VybmFtZW50UGxheWVyc0NvdW50S2V5AQUMdG91cm5hbWVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARx0b3VybmFtZW50TWF4UGxheWVyc0NvdW50S2V5AQUMdG91cm5hbWVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARl0b3VybmFtZW50UHJpemVBc3NldElkS2V5AQUMdG91cm5hbWVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARt0b3VybmFtZW50UHJpemVBc3NldE5hbWVLZXkBBQx0b3VybmFtZW50SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBH3RvdXJuYW1lbnRQcml6ZUFzc2V0RGVjaW1hbHNLZXkBBQx0b3VybmFtZW50SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBE3RvdXJuYW1lbnRTdGF0dXNLZXkBBQx0b3VybmFtZW50SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGHRvdXJuYW1lbnRCdXlJbkFtb3VudEtleQEFDHRvdXJuYW1lbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEbdG91cm5hbWVudEJ1eUluQXNzZXROYW1lS2V5AQUMdG91cm5hbWVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAR90b3VybmFtZW50QnV5SW5Bc3NldERlY2ltYWxzS2V5AQUMdG91cm5hbWVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARl0b3VybmFtZW50QnV5SW5Bc3NldElkS2V5AQUMdG91cm5hbWVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARF0b3VybmFtZW50TmFtZUtleQEFDHRvdXJuYW1lbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEUdG91cm5hbWVudENyZWF0b3JLZXkBBQx0b3VybmFtZW50SWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQURdG91cm5hbWVudENyZWF0b3IFFXRvdXJuYW1lbnRQcml6ZUFtb3VudAkA2QQBBRZ0b3VybmFtZW50UHJpemVBc3NldElkBQNuaWwAAQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARBjcmVhdGVUb3VybmFtZW50BQx0b3VybmFtZW50SWQEbmFtZQxwbGF5ZXJzQ291bnQLYnV5SW5BbW91bnQMYnV5SW5Bc3NldElkBANwbXQDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABCQCRAwIIBQFpCHBheW1lbnRzAAAJAAIBAiFQbGVhc2UgYXR0YWNoIGV4YWN0bHkgb25lIHBheW1lbnQEEXRvdXJuYW1lbnRDcmVhdG9yBAckbWF0Y2gwCQCiCAEJARR0b3VybmFtZW50Q3JlYXRvcktleQEFDHRvdXJuYW1lbnRJZAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEB2NyZWF0b3IFByRtYXRjaDAJAAIBCQCsAgICJ1RvdXJuYW1lbnQgYWxyZWFkeSBleGlzdHMgd2l0aCB0aGlzIGlkIAUMdG91cm5hbWVudElkBQR1bml0AwkAAAIFEXRvdXJuYW1lbnRDcmVhdG9yBRF0b3VybmFtZW50Q3JlYXRvcgQMcHJpemVBc3NldElkBAckbWF0Y2gwCAUDcG10B2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIEVW5pdAQBYgUHJG1hdGNoMAIAAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAJANgEAQUBYgkAAgECC01hdGNoIGVycm9yBAxhc3NldERldGFpbHMEByRtYXRjaDAIBQNwbXQHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgRVbml0BAFiBQckbWF0Y2gwCQDMCAICBVdhdmVzCQDMCAIACAUDbmlsAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAEByRtYXRjaDEJAOwHAQUBYgMJAAECBQckbWF0Y2gxAgVBc3NldAQFYXNzZXQFByRtYXRjaDEJAMwIAggFBWFzc2V0BG5hbWUJAMwIAggFBWFzc2V0CGRlY2ltYWxzBQNuaWwJAAIBAhBDYW4ndCBmaW5kIGFzc2V0CQACAQILTWF0Y2ggZXJyb3IECmJ1eUluQXNzZXQEByRtYXRjaDAJAOwHAQkA2QQBBQxidXlJbkFzc2V0SWQDCQABAgUHJG1hdGNoMAIFQXNzZXQEBWFzc2V0BQckbWF0Y2gwCQDMCAIIBQVhc3NldARuYW1lCQDMCAIIBQVhc3NldAhkZWNpbWFscwUDbmlsCQDMCAICAAkAzAgCAAAFA25pbAQNY2FsbGVyQWRkclN0cgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARh0b3VybmFtZW50UHJpemVBbW91bnRLZXkBBQx0b3VybmFtZW50SWQIBQNwbXQGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEZdG91cm5hbWVudFBsYXllcnNDb3VudEtleQEFDHRvdXJuYW1lbnRJZAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEcdG91cm5hbWVudE1heFBsYXllcnNDb3VudEtleQEFDHRvdXJuYW1lbnRJZAUMcGxheWVyc0NvdW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJARl0b3VybmFtZW50UHJpemVBc3NldElkS2V5AQUMdG91cm5hbWVudElkBQxwcml6ZUFzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBG3RvdXJuYW1lbnRQcml6ZUFzc2V0TmFtZUtleQEFDHRvdXJuYW1lbnRJZAoAAUAJAJEDAgUMYXNzZXREZXRhaWxzAAADCQABAgUBQAIGU3RyaW5nBQFACQACAQkArAICCQADAQUBQAIbIGNvdWxkbid0IGJlIGNhc3QgdG8gU3RyaW5nCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEfdG91cm5hbWVudFByaXplQXNzZXREZWNpbWFsc0tleQEFDHRvdXJuYW1lbnRJZAoAAUAJAJEDAgUMYXNzZXREZXRhaWxzAAEDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJARN0b3VybmFtZW50U3RhdHVzS2V5AQUMdG91cm5hbWVudElkAgxyZWdpc3RyYXRpb24JAMwIAgkBDEludGVnZXJFbnRyeQIJARh0b3VybmFtZW50QnV5SW5BbW91bnRLZXkBBQx0b3VybmFtZW50SWQFC2J1eUluQW1vdW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJARt0b3VybmFtZW50QnV5SW5Bc3NldE5hbWVLZXkBBQx0b3VybmFtZW50SWQKAAFACQCRAwIFCmJ1eUluQXNzZXQAAAMJAAECBQFAAgZTdHJpbmcFAUAJAAIBCQCsAgIJAAMBBQFAAhsgY291bGRuJ3QgYmUgY2FzdCB0byBTdHJpbmcJAMwIAgkBDEludGVnZXJFbnRyeQIJAR90b3VybmFtZW50QnV5SW5Bc3NldERlY2ltYWxzS2V5AQUMdG91cm5hbWVudElkCgABQAkAkQMCBQpidXlJbkFzc2V0AAEDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJARl0b3VybmFtZW50QnV5SW5Bc3NldElkS2V5AQUMdG91cm5hbWVudElkBQxidXlJbkFzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEXRvdXJuYW1lbnROYW1lS2V5AQUMdG91cm5hbWVudElkBQRuYW1lCQDMCAIJAQtTdHJpbmdFbnRyeQIJARR0b3VybmFtZW50Q3JlYXRvcktleQEFDHRvdXJuYW1lbnRJZAUNY2FsbGVyQWRkclN0cgUDbmlsAAEJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEPc3RhcnRUb3VybmFtZW50AQx0b3VybmFtZW50SWQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAgpBZG1pbiBPbmx5CQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBE3RvdXJuYW1lbnRTdGF0dXNLZXkBBQx0b3VybmFtZW50SWQCB3N0YXJ0ZWQFA25pbAABAWkBEGZpbmlzaFRvdXJuYW1lbnQCDHRvdXJuYW1lbnRJZB13aW5uaW5nVHJhbnNmZXJ0VHJhbnNhY3Rpb25JZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECCkFkbWluIE9ubHkEEXRvdXJuYW1lbnRDcmVhdG9yCQERQGV4dHJOYXRpdmUoMTA1OCkBCQEUdG91cm5hbWVudENyZWF0b3JLZXkBBQx0b3VybmFtZW50SWQEGnRvdXJuYW1lbnRUb3RhbEJ1eUluQW1vdW50CQENdHJ5R2V0SW50ZWdlcgEJASZ0b3VybmFtZW50VG90YWxCdXlJbkNvbGxlY3RlZEFtb3VudEtleQEFDHRvdXJuYW1lbnRJZAQVdG91cm5hbWVudEJ1eUluQW1vdW50CQERQGV4dHJOYXRpdmUoMTA1NSkBCQEYdG91cm5hbWVudEJ1eUluQW1vdW50S2V5AQUMdG91cm5hbWVudElkBBZ0b3VybmFtZW50QnV5SW5Bc3NldElkBAckbWF0Y2gwCQCiCAEJARl0b3VybmFtZW50QnV5SW5Bc3NldElkS2V5AQUMdG91cm5hbWVudElkAwkAAQIFByRtYXRjaDACBlN0cmluZwQCaWQFByRtYXRjaDADCQAAAgUCaWQCAAUEdW5pdAkA2QQBBQJpZAUEdW5pdAQSdG91cm5hbWVudEJ1eUluRmVlCQBrAwUadG91cm5hbWVudFRvdGFsQnV5SW5BbW91bnQFGXRvdXJuYW1lbnRCdXlJbkZlZVBlcmNlbnQAZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJASF0b3VybmFtZW50V2lubmluZ1RyYW5zYWN0aW9uSWRLZXkBBQx0b3VybmFtZW50SWQFHXdpbm5pbmdUcmFuc2ZlcnRUcmFuc2FjdGlvbklkCQDMCAIJAQtTdHJpbmdFbnRyeQIJARN0b3VybmFtZW50U3RhdHVzS2V5AQUMdG91cm5hbWVudElkAghmaW5pc2hlZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHnRvdXJuYW1lbnRCdXlJbkZlZUNvbGxlY3RlZEtleQEFDHRvdXJuYW1lbnRJZAUSdG91cm5hbWVudEJ1eUluRmVlCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFEXRvdXJuYW1lbnRDcmVhdG9yCQBlAgUadG91cm5hbWVudFRvdGFsQnV5SW5BbW91bnQFEnRvdXJuYW1lbnRCdXlJbkZlZQUWdG91cm5hbWVudEJ1eUluQXNzZXRJZAUDbmlsAAEBaQEOcGxheWVyRXhpdEdhbWUDBmdhbWVJZApwbGF5ZXJBZGRyD2V4aXRTdGFja0Ftb3VudAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECCkFkbWluIE9ubHkEF2N1cnJlbnRUb3RhbExvY2tlZEZ1bmRzCQENdHJ5R2V0SW50ZWdlcgEJARphZGRyZXNzVG90YWxMb2NrZWRGdW5kc0tleQEFCnBsYXllckFkZHIEIGN1cnJlbnRHYW1lTG9ja2VkQW1vdW50Rm9yUGxheWVyCQENdHJ5R2V0SW50ZWdlcgEJARxhZGRyZXNzTG9ja2VkRnVuZHNGb3JHYW1lS2V5AgUKcGxheWVyQWRkcgUGZ2FtZUlkCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARphZGRyZXNzVG90YWxMb2NrZWRGdW5kc0tleQEFCnBsYXllckFkZHIJAGUCBRdjdXJyZW50VG90YWxMb2NrZWRGdW5kcwUgY3VycmVudEdhbWVMb2NrZWRBbW91bnRGb3JQbGF5ZXIJAMwIAgkBDEludGVnZXJFbnRyeQIJARxhZGRyZXNzTG9ja2VkRnVuZHNGb3JHYW1lS2V5AgUKcGxheWVyQWRkcgUGZ2FtZUlkAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUKcGxheWVyQWRkcgUPZXhpdFN0YWNrQW1vdW50CQDZBAEFDmRlcG9zaXRBc3NldElkBQNuaWwAAQFpARBsb2NrRnVuZHNGb3JHYW1lAQZnYW1lSWQEA3BtdAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEJAJEDAggFAWkIcGF5bWVudHMAAAkAAgECIVBsZWFzZSBhdHRhY2ggZXhhY3RseSBvbmUgcGF5bWVudAMJAQIhPQIIBQNwbXQHYXNzZXRJZAkA2QQBBQ5kZXBvc2l0QXNzZXRJZAkAAgECGVlvdSBjYW4gb25seSBkZXBvc2l0IFVTRE4EDWNhbGxlckFkZHJTdHIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwQXY3VycmVudFRvdGFsTG9ja2VkRnVuZHMJAQ10cnlHZXRJbnRlZ2VyAQkBGmFkZHJlc3NUb3RhbExvY2tlZEZ1bmRzS2V5AQUNY2FsbGVyQWRkclN0cgQeY3VycmVudExvY2tlZEZ1bmRzVG90YWxIaXN0b3J5CQENdHJ5R2V0SW50ZWdlcgEJASFhZGRyZXNzTG9ja2VkRnVuZHNUb3RhbEhpc3RvcnlLZXkBBQ1jYWxsZXJBZGRyU3RyCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARphZGRyZXNzVG90YWxMb2NrZWRGdW5kc0tleQEFDWNhbGxlckFkZHJTdHIJAGQCBRdjdXJyZW50VG90YWxMb2NrZWRGdW5kcwgFA3BtdAZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJASFhZGRyZXNzTG9ja2VkRnVuZHNUb3RhbEhpc3RvcnlLZXkBBQ1jYWxsZXJBZGRyU3RyCQBkAgUeY3VycmVudExvY2tlZEZ1bmRzVG90YWxIaXN0b3J5CAUDcG10BmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHGFkZHJlc3NMb2NrZWRGdW5kc0ZvckdhbWVLZXkCBQ1jYWxsZXJBZGRyU3RyBQZnYW1lSWQIBQNwbXQGYW1vdW50BQNuaWwAAQFpAQ13aXRoZHJhd0Z1bmRzAAQNY2FsbGVyQWRkclN0cgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBBBmZWVDb2xsZWN0b3JBZGRyCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1OCkBBRZmZWVDb2xsZWN0b3JBZGRyZXNzS2V5BBVjdXJyZW50QXZhaWxhYmxlRnVuZHMJAQ10cnlHZXRJbnRlZ2VyAQkBGGFkZHJlc3NBdmFpbGFibGVGdW5kc0tleQEFDWNhbGxlckFkZHJTdHIEC3dpdGhkcmF3RmVlCQBrAwUVY3VycmVudEF2YWlsYWJsZUZ1bmRzBRJ3aXRoZHJhd0ZlZVBlcmNlbnQAZAQUYWN0dWFsQXZhaWxhYmxlRnVuZHMJAGUCBRVjdXJyZW50QXZhaWxhYmxlRnVuZHMFC3dpdGhkcmF3RmVlAwkAZwIAAAUUYWN0dWFsQXZhaWxhYmxlRnVuZHMJAAIBAh5ObyBhdmFpbGFibGUgZnVuZHMgdG8gd2l0aGRyYXcJAMwIAgkBDEludGVnZXJFbnRyeQIJARhhZGRyZXNzQXZhaWxhYmxlRnVuZHNLZXkBBQ1jYWxsZXJBZGRyU3RyAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBRRhY3R1YWxBdmFpbGFibGVGdW5kcwkA2QQBBQ5kZXBvc2l0QXNzZXRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBRBmZWVDb2xsZWN0b3JBZGRyBQt3aXRoZHJhd0ZlZQkA2QQBBQ5kZXBvc2l0QXNzZXRJZAUDbmlsAWkBEHNldFdpbm5lckhlYWRzVXADBmdhbWVJZA13aW5uZXJBZGRyU3RyD290aGVyUGxheWVyQWRkcgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECCkFkbWluIE9ubHkEE2F2YWlsYWJsZVJld2FyZHNLZXkJARphZGRyZXNzQXZhaWxhYmxlUmV3YXJkc0tleQEFDXdpbm5lckFkZHJTdHIEF2N1cnJlbnRBdmFpbGFibGVSZXdhcmRzCQENdHJ5R2V0SW50ZWdlcgEFE2F2YWlsYWJsZVJld2FyZHNLZXkEFG5ld1RpY2tldENvdW50V2lubmVyCQENY29uc3VtZVRpY2tldAEFDXdpbm5lckFkZHJTdHIEGW5ld1RpY2tldENvdW50T3RoZXJQbGF5ZXIJAQ1jb25zdW1lVGlja2V0AQUPb3RoZXJQbGF5ZXJBZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1nYW1lV2lubmVyS2V5AQUGZ2FtZUlkBQ13aW5uZXJBZGRyU3RyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNhdmFpbGFibGVSZXdhcmRzS2V5CQBkAgUXY3VycmVudEF2YWlsYWJsZVJld2FyZHMJAGgCBQt0aWNrZXRQcmljZQACCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESZ2V0VGlja2V0c0NvdW50S2V5AQUNd2lubmVyQWRkclN0cgUUbmV3VGlja2V0Q291bnRXaW5uZXIJAMwIAgkBDEludGVnZXJFbnRyeQIJARJnZXRUaWNrZXRzQ291bnRLZXkBBQ9vdGhlclBsYXllckFkZHIFGW5ld1RpY2tldENvdW50T3RoZXJQbGF5ZXIFA25pbAFpAQ93aXRoZHJhd1Jld2FyZHMABA1jYWxsZXJBZGRyU3RyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMEEGZlZUNvbGxlY3RvckFkZHIJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDU4KQEFFmZlZUNvbGxlY3RvckFkZHJlc3NLZXkEF2N1cnJlbnRBdmFpbGFibGVSZXdhcmRzCQENdHJ5R2V0SW50ZWdlcgEJARphZGRyZXNzQXZhaWxhYmxlUmV3YXJkc0tleQEFDWNhbGxlckFkZHJTdHIEC3dpdGhkcmF3RmVlCQBrAwUXY3VycmVudEF2YWlsYWJsZVJld2FyZHMFEndpdGhkcmF3RmVlUGVyY2VudABkBBZhY3R1YWxBdmFpbGFibGVSZXdhcmRzCQBlAgkAZQIFF2N1cnJlbnRBdmFpbGFibGVSZXdhcmRzBQZpbnZGZWUFC3dpdGhkcmF3RmVlAwkAZwIAAAUXY3VycmVudEF2YWlsYWJsZVJld2FyZHMJAAIBAiBObyBhdmFpbGFibGUgcmV3YXJkcyB0byB3aXRoZHJhdwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGmFkZHJlc3NBdmFpbGFibGVSZXdhcmRzS2V5AQUNY2FsbGVyQWRkclN0cgAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUWYWN0dWFsQXZhaWxhYmxlUmV3YXJkcwUEdW5pdAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBRBmZWVDb2xsZWN0b3JBZGRyBQt3aXRoZHJhd0ZlZQUEdW5pdAUDbmlsAWkBCmJ1eVRpY2tldHMABANwbXQDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABCQCRAwIIBQFpCHBheW1lbnRzAAAJAAIBAiFQbGVhc2UgYXR0YWNoIGV4YWN0bHkgb25lIHBheW1lbnQDCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkCQACAQInVGlja2V0cyBjYW4gb25seSBpYmUgcHVyY2hhc2VkIGluIFdhdmVzAwkBAiE9AggFA3BtdAZhbW91bnQFC3RpY2tldFByaWNlCQACAQkArAICCQCsAgICH1RoZSBwYXltZW50IG11c3QgYmUgb2YgZXhhY3RseSAJAKQDAQUOdGlja2V0UHJpY2VJbnQCBiB3YXZlcwQNY2FsbGVyQWRkclN0cgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBBNjdXJyZW50VGlja2V0c0NvdW50CQENdHJ5R2V0SW50ZWdlcgEJARJnZXRUaWNrZXRzQ291bnRLZXkBBQ1jYWxsZXJBZGRyU3RyCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARJnZXRUaWNrZXRzQ291bnRLZXkBBQ1jYWxsZXJBZGRyU3RyCQBkAgUTY3VycmVudFRpY2tldHNDb3VudAABBQNuaWwAAQECdHgBBnZlcmlmeQAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXnOVCu/", "height": 2263883, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: H5vptWcjz4WPsYBEns1hEzCtjeDRsetyRaRc5U3gLDme Next: BBN1dZSuqf9cuCTqhWWjhN1nHDw8aUxhNuNe7agtgDhY Diff:
Old | New | Differences | |
---|---|---|---|
43 | 43 | func t (p) = (p + "_tournamentTotalBuyInCollectedAmount") | |
44 | 44 | ||
45 | 45 | ||
46 | - | func u (p) = (p + "_ | |
46 | + | func u (p) = (p + "_tournamentTotalBuyInCollectedAmountMinusFees") | |
47 | 47 | ||
48 | 48 | ||
49 | - | func v (p) = (p + "_ | |
49 | + | func v (p) = (p + "_tournamentCreator") | |
50 | 50 | ||
51 | 51 | ||
52 | - | func w (p) = (p + "_ | |
52 | + | func w (p) = (p + "_tournamentName") | |
53 | 53 | ||
54 | 54 | ||
55 | - | func x (p) = (p + "_ | |
55 | + | func x (p) = (p + "_tournamentPrizeAmount") | |
56 | 56 | ||
57 | 57 | ||
58 | - | func y (p) = (p + "_ | |
58 | + | func y (p) = (p + "_tournamentMaxPlayersCount") | |
59 | 59 | ||
60 | 60 | ||
61 | - | func z (p) = (p + "_ | |
61 | + | func z (p) = (p + "_tournamentPlayersCount") | |
62 | 62 | ||
63 | 63 | ||
64 | - | func A (p) = (p + "_ | |
64 | + | func A (p) = (p + "_tournamentPrizeAssetId") | |
65 | 65 | ||
66 | 66 | ||
67 | - | func B (p) = (p + "_ | |
67 | + | func B (p) = (p + "_tournamentPrizeAssetName") | |
68 | 68 | ||
69 | 69 | ||
70 | - | func C (p) = (p + "_ | |
70 | + | func C (p) = (p + "_tournamentBuyInAmount") | |
71 | 71 | ||
72 | 72 | ||
73 | - | func D (p) = (p + "_ | |
73 | + | func D (p) = (p + "_tournamentBuyInAssetId") | |
74 | 74 | ||
75 | 75 | ||
76 | - | func E (p) = (p + "_ | |
76 | + | func E (p) = (p + "_tournamentBuyInAssetName") | |
77 | 77 | ||
78 | 78 | ||
79 | - | func F (p) = (p + "_ | |
79 | + | func F (p) = (p + "_tournamentBuyInAssetDecimals") | |
80 | 80 | ||
81 | 81 | ||
82 | - | func G (p) = (p + "_ | |
82 | + | func G (p) = (p + "_tournamentPrizeAssetDecimals") | |
83 | 83 | ||
84 | 84 | ||
85 | - | func H (p) = (p + "_ | |
85 | + | func H (p) = (p + "_tournamentStatus") | |
86 | 86 | ||
87 | 87 | ||
88 | - | func I (p) = (p + "_ | |
88 | + | func I (p) = (p + "_tournamentBuyInFeeCollected") | |
89 | 89 | ||
90 | 90 | ||
91 | - | func J ( | |
91 | + | func J (p) = (p + "_tournamentWinningTransactionId") | |
92 | 92 | ||
93 | 93 | ||
94 | - | func | |
94 | + | func K (L) = (L + "_winner") | |
95 | 95 | ||
96 | 96 | ||
97 | - | func | |
97 | + | func M (N) = (N + "_availableFunds") | |
98 | 98 | ||
99 | 99 | ||
100 | - | func O ( | |
100 | + | func O (N) = (N + "_totalLockedFunds") | |
101 | 101 | ||
102 | 102 | ||
103 | - | func P ( | |
103 | + | func P (N) = (N + "_lockedFundsTotalHistory") | |
104 | 104 | ||
105 | 105 | ||
106 | - | func Q ( | |
106 | + | func Q (N,L) = ((N + "_lockedFunds_") + L) | |
107 | 107 | ||
108 | 108 | ||
109 | - | func R ( | |
109 | + | func R (N) = (N + "_availableRewards") | |
110 | 110 | ||
111 | 111 | ||
112 | - | func S (T) = { | |
113 | - | let U = R(T) | |
114 | - | let V = (U - 1) | |
115 | - | if ((0 > V)) | |
112 | + | func S (n) = i(m(n)) | |
113 | + | ||
114 | + | ||
115 | + | func T (U) = { | |
116 | + | let V = S(U) | |
117 | + | let W = (V - 1) | |
118 | + | if ((0 > W)) | |
116 | 119 | then 0 | |
117 | - | else | |
120 | + | else W | |
118 | 121 | } | |
119 | 122 | ||
120 | 123 | ||
121 | - | @Callable( | |
122 | - | func setFeeCollectorAddress ( | |
124 | + | @Callable(X) | |
125 | + | func setFeeCollectorAddress (Y) = if ((X.caller != this)) | |
123 | 126 | then throw("Admin Only") | |
124 | - | else [StringEntry(f, | |
127 | + | else [StringEntry(f, Y)] | |
125 | 128 | ||
126 | 129 | ||
127 | 130 | ||
128 | - | @Callable( | |
131 | + | @Callable(X) | |
129 | 132 | func depositFunds () = { | |
130 | - | let | |
131 | - | then | |
133 | + | let Z = if ((size(X.payments) == 1)) | |
134 | + | then X.payments[0] | |
132 | 135 | else throw("Please attach exactly one payment") | |
133 | - | if (( | |
136 | + | if ((Z.assetId != fromBase58String(h))) | |
134 | 137 | then throw("You can only deposit USDN") | |
135 | 138 | else { | |
136 | - | let | |
137 | - | let | |
138 | - | $Tuple2([IntegerEntry( | |
139 | + | let aa = toBase58String(X.caller.bytes) | |
140 | + | let ab = i(M(aa)) | |
141 | + | $Tuple2([IntegerEntry(M(aa), (ab + Z.amount))], 1) | |
139 | 142 | } | |
140 | 143 | } | |
141 | 144 | ||
142 | 145 | ||
143 | 146 | ||
144 | - | @Callable( | |
147 | + | @Callable(X) | |
145 | 148 | func cancelSignUpToTournament (p) = { | |
146 | - | let | |
147 | - | if (( | |
149 | + | let ac = getStringValue(H(p)) | |
150 | + | if ((ac != "registration")) | |
148 | 151 | then throw("Tournament is not in registration phase!") | |
149 | 152 | else { | |
150 | - | let Z = toBase58String(W.caller.bytes) | |
151 | - | let ac = getIntegerValue(o(p, Z)) | |
152 | - | let ad = getStringValue(r(p, Z)) | |
153 | - | let ae = i(y(p)) | |
154 | - | let af = i(t(p)) | |
155 | - | $Tuple2([ScriptTransfer(addressFromStringValue(Z), ac, fromBase58String(ad)), DeleteEntry(s(p, Z)), DeleteEntry(o(p, Z)), DeleteEntry(r(p, Z)), IntegerEntry(y(p), (ae - 1)), IntegerEntry(t(p), (af - ac))], 1) | |
153 | + | let aa = toBase58String(X.caller.bytes) | |
154 | + | let ad = getIntegerValue(o(p, aa)) | |
155 | + | let ae = getStringValue(r(p, aa)) | |
156 | + | let af = i(z(p)) | |
157 | + | let ag = (i(t(p)) - ad) | |
158 | + | let ah = fraction(ag, g, 100) | |
159 | + | $Tuple2([ScriptTransfer(addressFromStringValue(aa), ad, fromBase58String(ae)), DeleteEntry(s(p, aa)), DeleteEntry(o(p, aa)), DeleteEntry(r(p, aa)), IntegerEntry(z(p), (af - 1)), IntegerEntry(t(p), ag), IntegerEntry(u(p), (ag - ah))], 1) | |
156 | 160 | } | |
157 | 161 | } | |
158 | 162 | ||
159 | 163 | ||
160 | 164 | ||
161 | - | @Callable( | |
165 | + | @Callable(X) | |
162 | 166 | func signUpToTournament (p) = { | |
163 | - | let | |
164 | - | let | |
165 | - | let | |
166 | - | if (( | |
167 | + | let ai = getIntegerValue(this, y(p)) | |
168 | + | let af = i(z(p)) | |
169 | + | let ac = getStringValue(H(p)) | |
170 | + | if ((ac != "registration")) | |
167 | 171 | then throw("Tournament is not in registration phase!") | |
168 | - | else if (( | |
172 | + | else if ((af == ai)) | |
169 | 173 | then throw("Tournament is currently full, please try again later!") | |
170 | 174 | else { | |
171 | - | let | |
172 | - | then | |
175 | + | let Z = if ((size(X.payments) == 1)) | |
176 | + | then X.payments[0] | |
173 | 177 | else throw("Please attach exactly one payment") | |
174 | - | let | |
175 | - | let k = | |
178 | + | let aj = { | |
179 | + | let k = Z.assetId | |
176 | 180 | if ($isInstanceOf(k, "Unit")) | |
177 | 181 | then { | |
178 | 182 | let l = k | |
185 | 189 | } | |
186 | 190 | else throw("Match error") | |
187 | 191 | } | |
188 | - | let | |
189 | - | let | |
190 | - | if (( | |
191 | - | then throw(("Attached payment amount is invalid, must be " + toString( | |
192 | - | else if (( | |
193 | - | then throw(("Attached payment asset id is invalid, must be " + | |
192 | + | let ak = getIntegerValue(this, C(p)) | |
193 | + | let al = getStringValue(this, D(p)) | |
194 | + | if ((ak != Z.amount)) | |
195 | + | then throw(("Attached payment amount is invalid, must be " + toString(ak))) | |
196 | + | else if ((al != aj)) | |
197 | + | then throw(("Attached payment asset id is invalid, must be " + al)) | |
194 | 198 | else { | |
195 | - | let Z = toBase58String(W.caller.bytes) | |
196 | - | let af = i(t(p)) | |
197 | - | $Tuple2([BooleanEntry(s(p, Z), true), IntegerEntry(o(p, Z), Y.amount), StringEntry(r(p, Z), ah), IntegerEntry(y(p), (ae + 1)), IntegerEntry(t(p), (af + Y.amount))], 1) | |
199 | + | let aa = toBase58String(X.caller.bytes) | |
200 | + | let ag = (i(t(p)) + Z.amount) | |
201 | + | let ah = fraction(ag, g, 100) | |
202 | + | $Tuple2([BooleanEntry(s(p, aa), true), IntegerEntry(o(p, aa), Z.amount), StringEntry(r(p, aa), aj), IntegerEntry(z(p), (af + 1)), IntegerEntry(t(p), ag), IntegerEntry(u(p), (ag - ah))], 1) | |
198 | 203 | } | |
199 | 204 | } | |
200 | 205 | } | |
201 | 206 | ||
202 | 207 | ||
203 | 208 | ||
204 | - | @Callable( | |
209 | + | @Callable(X) | |
205 | 210 | func cancelTournament (p) = { | |
206 | - | let | |
207 | - | let | |
208 | - | let | |
211 | + | let aa = toBase58String(X.caller.bytes) | |
212 | + | let am = getStringValue(v(p)) | |
213 | + | let an = if ((am == aa)) | |
209 | 214 | then true | |
210 | - | else if (( | |
215 | + | else if ((X.caller == this)) | |
211 | 216 | then true | |
212 | 217 | else throw("Only tournament creator can cancel it!") | |
213 | - | if (( | |
218 | + | if ((an == an)) | |
214 | 219 | then { | |
215 | - | let | |
216 | - | if (( | |
220 | + | let ac = getStringValue(H(p)) | |
221 | + | if ((ac != "registration")) | |
217 | 222 | then throw("Tournament is not in registration phase!") | |
218 | 223 | else { | |
219 | - | let | |
220 | - | if (( | |
224 | + | let af = i(z(p)) | |
225 | + | if ((af > 0)) | |
221 | 226 | then throw("Cannot cancel a tournament when players are already registered to it!") | |
222 | 227 | else { | |
223 | - | let | |
224 | - | let | |
225 | - | $Tuple2([DeleteEntry( | |
228 | + | let ao = getIntegerValue(x(p)) | |
229 | + | let ap = getStringValue(A(p)) | |
230 | + | $Tuple2([DeleteEntry(x(p)), DeleteEntry(z(p)), DeleteEntry(y(p)), DeleteEntry(A(p)), DeleteEntry(B(p)), DeleteEntry(G(p)), DeleteEntry(H(p)), DeleteEntry(C(p)), DeleteEntry(E(p)), DeleteEntry(F(p)), DeleteEntry(D(p)), DeleteEntry(w(p)), DeleteEntry(v(p)), ScriptTransfer(addressFromStringValue(am), ao, fromBase58String(ap))], 1) | |
226 | 231 | } | |
227 | 232 | } | |
228 | 233 | } | |
231 | 236 | ||
232 | 237 | ||
233 | 238 | ||
234 | - | @Callable( | |
235 | - | func createTournament (p, | |
236 | - | let | |
237 | - | then | |
239 | + | @Callable(X) | |
240 | + | func createTournament (p,aq,ar,as,at) = { | |
241 | + | let Z = if ((size(X.payments) == 1)) | |
242 | + | then X.payments[0] | |
238 | 243 | else throw("Please attach exactly one payment") | |
239 | - | let | |
240 | - | let k = getString( | |
244 | + | let am = { | |
245 | + | let k = getString(v(p)) | |
241 | 246 | if ($isInstanceOf(k, "String")) | |
242 | 247 | then { | |
243 | - | let | |
248 | + | let au = k | |
244 | 249 | throw(("Tournament already exists with this id " + p)) | |
245 | 250 | } | |
246 | 251 | else unit | |
247 | 252 | } | |
248 | - | if (( | |
253 | + | if ((am == am)) | |
249 | 254 | then { | |
250 | - | let | |
251 | - | let k = | |
255 | + | let av = { | |
256 | + | let k = Z.assetId | |
252 | 257 | if ($isInstanceOf(k, "Unit")) | |
253 | 258 | then { | |
254 | 259 | let l = k | |
261 | 266 | } | |
262 | 267 | else throw("Match error") | |
263 | 268 | } | |
264 | - | let | |
265 | - | let k = | |
269 | + | let aw = { | |
270 | + | let k = Z.assetId | |
266 | 271 | if ($isInstanceOf(k, "Unit")) | |
267 | 272 | then { | |
268 | 273 | let l = k | |
271 | 276 | else if ($isInstanceOf(k, "ByteVector")) | |
272 | 277 | then { | |
273 | 278 | let l = k | |
274 | - | let | |
275 | - | if ($isInstanceOf( | |
279 | + | let ax = assetInfo(l) | |
280 | + | if ($isInstanceOf(ax, "Asset")) | |
276 | 281 | then { | |
277 | - | let | |
278 | - | [ | |
282 | + | let ay = ax | |
283 | + | [ay.name, ay.decimals] | |
279 | 284 | } | |
280 | 285 | else throw("Can't find asset") | |
281 | 286 | } | |
282 | 287 | else throw("Match error") | |
283 | 288 | } | |
284 | - | let | |
285 | - | let k = assetInfo(fromBase58String( | |
289 | + | let az = { | |
290 | + | let k = assetInfo(fromBase58String(at)) | |
286 | 291 | if ($isInstanceOf(k, "Asset")) | |
287 | 292 | then { | |
288 | - | let | |
289 | - | [ | |
293 | + | let ay = k | |
294 | + | [ay.name, ay.decimals] | |
290 | 295 | } | |
291 | 296 | else ["", 0] | |
292 | 297 | } | |
293 | - | let Z = toBase58String(W.caller.bytes) | |
294 | - | $Tuple2([IntegerEntry(w(p), Y.amount), IntegerEntry(y(p), 0), IntegerEntry(x(p), ap), StringEntry(z(p), at), StringEntry(A(p), { | |
295 | - | let ay = au[0] | |
296 | - | if ($isInstanceOf(ay, "String")) | |
297 | - | then ay | |
298 | - | else throw(($getType(ay) + " couldn't be cast to String")) | |
298 | + | let aa = toBase58String(X.caller.bytes) | |
299 | + | $Tuple2([IntegerEntry(x(p), Z.amount), IntegerEntry(z(p), 0), IntegerEntry(y(p), ar), StringEntry(A(p), av), StringEntry(B(p), { | |
300 | + | let aA = aw[0] | |
301 | + | if ($isInstanceOf(aA, "String")) | |
302 | + | then aA | |
303 | + | else throw(($getType(aA) + " couldn't be cast to String")) | |
304 | + | }), IntegerEntry(G(p), { | |
305 | + | let aA = aw[1] | |
306 | + | if ($isInstanceOf(aA, "Int")) | |
307 | + | then aA | |
308 | + | else throw(($getType(aA) + " couldn't be cast to Int")) | |
309 | + | }), StringEntry(H(p), "registration"), IntegerEntry(C(p), as), StringEntry(E(p), { | |
310 | + | let aA = az[0] | |
311 | + | if ($isInstanceOf(aA, "String")) | |
312 | + | then aA | |
313 | + | else throw(($getType(aA) + " couldn't be cast to String")) | |
299 | 314 | }), IntegerEntry(F(p), { | |
300 | - | let ay = au[1] | |
301 | - | if ($isInstanceOf(ay, "Int")) | |
302 | - | then ay | |
303 | - | else throw(($getType(ay) + " couldn't be cast to Int")) | |
304 | - | }), StringEntry(G(p), "registration"), IntegerEntry(B(p), aq), StringEntry(D(p), { | |
305 | - | let ay = ax[0] | |
306 | - | if ($isInstanceOf(ay, "String")) | |
307 | - | then ay | |
308 | - | else throw(($getType(ay) + " couldn't be cast to String")) | |
309 | - | }), IntegerEntry(E(p), { | |
310 | - | let ay = ax[1] | |
311 | - | if ($isInstanceOf(ay, "Int")) | |
312 | - | then ay | |
313 | - | else throw(($getType(ay) + " couldn't be cast to Int")) | |
314 | - | }), StringEntry(C(p), ar), StringEntry(v(p), ao), StringEntry(u(p), Z)], 1) | |
315 | + | let aA = az[1] | |
316 | + | if ($isInstanceOf(aA, "Int")) | |
317 | + | then aA | |
318 | + | else throw(($getType(aA) + " couldn't be cast to Int")) | |
319 | + | }), StringEntry(D(p), at), StringEntry(w(p), aq), StringEntry(v(p), aa)], 1) | |
315 | 320 | } | |
316 | 321 | else throw("Strict value is not equal to itself.") | |
317 | 322 | } | |
318 | 323 | ||
319 | 324 | ||
320 | 325 | ||
321 | - | @Callable(W) | |
322 | - | func finishTournament (p,az) = if ((W.caller != this)) | |
326 | + | @Callable(X) | |
327 | + | func startTournament (p) = if ((X.caller != this)) | |
328 | + | then throw("Admin Only") | |
329 | + | else $Tuple2([StringEntry(H(p), "started")], 1) | |
330 | + | ||
331 | + | ||
332 | + | ||
333 | + | @Callable(X) | |
334 | + | func finishTournament (p,aB) = if ((X.caller != this)) | |
323 | 335 | then throw("Admin Only") | |
324 | 336 | else { | |
325 | - | let | |
326 | - | let | |
327 | - | let | |
328 | - | let | |
329 | - | let k = getString( | |
337 | + | let am = getStringValue(v(p)) | |
338 | + | let aC = i(t(p)) | |
339 | + | let aD = getIntegerValue(C(p)) | |
340 | + | let aE = { | |
341 | + | let k = getString(D(p)) | |
330 | 342 | if ($isInstanceOf(k, "String")) | |
331 | 343 | then { | |
332 | - | let | |
333 | - | if (( | |
344 | + | let aF = k | |
345 | + | if ((aF == "")) | |
334 | 346 | then unit | |
335 | - | else fromBase58String( | |
347 | + | else fromBase58String(aF) | |
336 | 348 | } | |
337 | 349 | else unit | |
338 | 350 | } | |
339 | - | let | |
340 | - | $Tuple2([StringEntry( | |
351 | + | let aG = fraction(aC, g, 100) | |
352 | + | $Tuple2([StringEntry(J(p), aB), StringEntry(H(p), "finished"), IntegerEntry(I(p), aG), ScriptTransfer(addressFromStringValue(am), (aC - aG), aE)], 1) | |
341 | 353 | } | |
342 | 354 | ||
343 | 355 | ||
344 | 356 | ||
345 | - | @Callable( | |
346 | - | func playerExitGame ( | |
357 | + | @Callable(X) | |
358 | + | func playerExitGame (L,U,aH) = if ((X.caller != this)) | |
347 | 359 | then throw("Admin Only") | |
348 | 360 | else { | |
349 | - | let | |
350 | - | let | |
351 | - | $Tuple2([IntegerEntry( | |
361 | + | let aI = i(O(U)) | |
362 | + | let aJ = i(Q(U, L)) | |
363 | + | $Tuple2([IntegerEntry(O(U), (aI - aJ)), IntegerEntry(Q(U, L), 0), ScriptTransfer(addressFromStringValue(U), aH, fromBase58String(h))], 1) | |
352 | 364 | } | |
353 | 365 | ||
354 | 366 | ||
355 | 367 | ||
356 | - | @Callable( | |
357 | - | func lockFundsForGame ( | |
358 | - | let | |
359 | - | then | |
368 | + | @Callable(X) | |
369 | + | func lockFundsForGame (L) = { | |
370 | + | let Z = if ((size(X.payments) == 1)) | |
371 | + | then X.payments[0] | |
360 | 372 | else throw("Please attach exactly one payment") | |
361 | - | if (( | |
373 | + | if ((Z.assetId != fromBase58String(h))) | |
362 | 374 | then throw("You can only deposit USDN") | |
363 | 375 | else { | |
364 | - | let | |
365 | - | let | |
366 | - | let | |
367 | - | $Tuple2([IntegerEntry( | |
376 | + | let aa = toBase58String(X.caller.bytes) | |
377 | + | let aI = i(O(aa)) | |
378 | + | let aK = i(P(aa)) | |
379 | + | $Tuple2([IntegerEntry(O(aa), (aI + Z.amount)), IntegerEntry(P(aa), (aK + Z.amount)), IntegerEntry(Q(aa, L), Z.amount)], 1) | |
368 | 380 | } | |
369 | 381 | } | |
370 | 382 | ||
371 | 383 | ||
372 | 384 | ||
373 | - | @Callable( | |
385 | + | @Callable(X) | |
374 | 386 | func withdrawFunds () = { | |
375 | - | let | |
376 | - | let | |
377 | - | let | |
378 | - | let | |
379 | - | let | |
380 | - | if ((0 >= | |
387 | + | let aa = toBase58String(X.caller.bytes) | |
388 | + | let aL = addressFromStringValue(getStringValue(f)) | |
389 | + | let ab = i(M(aa)) | |
390 | + | let aM = fraction(ab, e, 100) | |
391 | + | let aN = (ab - aM) | |
392 | + | if ((0 >= aN)) | |
381 | 393 | then throw("No available funds to withdraw") | |
382 | - | else [IntegerEntry( | |
394 | + | else [IntegerEntry(M(aa), 0), ScriptTransfer(X.caller, aN, fromBase58String(h)), ScriptTransfer(aL, aM, fromBase58String(h))] | |
383 | 395 | } | |
384 | 396 | ||
385 | 397 | ||
386 | 398 | ||
387 | - | @Callable( | |
388 | - | func setWinnerHeadsUp ( | |
399 | + | @Callable(X) | |
400 | + | func setWinnerHeadsUp (L,aO,aP) = if ((X.caller != this)) | |
389 | 401 | then throw("Admin Only") | |
390 | 402 | else { | |
391 | - | let | |
392 | - | let | |
393 | - | let | |
394 | - | let | |
395 | - | [StringEntry( | |
403 | + | let aQ = R(aO) | |
404 | + | let aR = i(aQ) | |
405 | + | let aS = T(aO) | |
406 | + | let aT = T(aP) | |
407 | + | [StringEntry(K(L), aO), IntegerEntry(aQ, (aR + (c * 2))), IntegerEntry(m(aO), aS), IntegerEntry(m(aP), aT)] | |
396 | 408 | } | |
397 | 409 | ||
398 | 410 | ||
399 | 411 | ||
400 | - | @Callable( | |
412 | + | @Callable(X) | |
401 | 413 | func withdrawRewards () = { | |
402 | - | let | |
403 | - | let | |
404 | - | let | |
405 | - | let | |
406 | - | let | |
407 | - | if ((0 >= | |
414 | + | let aa = toBase58String(X.caller.bytes) | |
415 | + | let aL = addressFromStringValue(getStringValue(f)) | |
416 | + | let aR = i(R(aa)) | |
417 | + | let aM = fraction(aR, e, 100) | |
418 | + | let aU = ((aR - d) - aM) | |
419 | + | if ((0 >= aR)) | |
408 | 420 | then throw("No available rewards to withdraw") | |
409 | - | else [IntegerEntry( | |
421 | + | else [IntegerEntry(R(aa), 0), ScriptTransfer(X.caller, aU, unit), ScriptTransfer(aL, aM, unit)] | |
410 | 422 | } | |
411 | 423 | ||
412 | 424 | ||
413 | 425 | ||
414 | - | @Callable( | |
426 | + | @Callable(X) | |
415 | 427 | func buyTickets () = { | |
416 | - | let | |
417 | - | then | |
428 | + | let Z = if ((size(X.payments) == 1)) | |
429 | + | then X.payments[0] | |
418 | 430 | else throw("Please attach exactly one payment") | |
419 | - | if (isDefined( | |
431 | + | if (isDefined(Z.assetId)) | |
420 | 432 | then throw("Tickets can only ibe purchased in Waves") | |
421 | - | else if (( | |
433 | + | else if ((Z.amount != c)) | |
422 | 434 | then throw((("The payment must be of exactly " + toString(b)) + " waves")) | |
423 | 435 | else { | |
424 | - | let | |
425 | - | let | |
426 | - | $Tuple2([IntegerEntry(m( | |
436 | + | let aa = toBase58String(X.caller.bytes) | |
437 | + | let aV = i(m(aa)) | |
438 | + | $Tuple2([IntegerEntry(m(aa), (aV + 1))], 1) | |
427 | 439 | } | |
428 | 440 | } | |
429 | 441 | ||
430 | 442 | ||
431 | - | @Verifier( | |
432 | - | func | |
443 | + | @Verifier(aW) | |
444 | + | func aX () = sigVerify(aW.bodyBytes, aW.proofs[0], aW.senderPublicKey) | |
433 | 445 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = 100000000 | |
5 | 5 | ||
6 | 6 | let b = 1000000 | |
7 | 7 | ||
8 | 8 | let c = b | |
9 | 9 | ||
10 | 10 | let d = 500000 | |
11 | 11 | ||
12 | 12 | let e = 5 | |
13 | 13 | ||
14 | 14 | let f = "feeCollectorAddress" | |
15 | 15 | ||
16 | 16 | let g = 10 | |
17 | 17 | ||
18 | 18 | let h = "5ue1fiuV6j6UBr6Xf28Qms6y5FqzKtqvaxxhwu7hTQ58" | |
19 | 19 | ||
20 | 20 | func i (j) = { | |
21 | 21 | let k = getInteger(this, j) | |
22 | 22 | if ($isInstanceOf(k, "Int")) | |
23 | 23 | then { | |
24 | 24 | let l = k | |
25 | 25 | l | |
26 | 26 | } | |
27 | 27 | else 0 | |
28 | 28 | } | |
29 | 29 | ||
30 | 30 | ||
31 | 31 | func m (n) = (n + "_ticketsCount") | |
32 | 32 | ||
33 | 33 | ||
34 | 34 | func o (p,q) = ((p + "_buyInAmountForAccount_") + q) | |
35 | 35 | ||
36 | 36 | ||
37 | 37 | func r (p,q) = ((p + "_buyInAssetIdForAccount_") + q) | |
38 | 38 | ||
39 | 39 | ||
40 | 40 | func s (p,q) = ((p + "_ticketForAccount_") + q) | |
41 | 41 | ||
42 | 42 | ||
43 | 43 | func t (p) = (p + "_tournamentTotalBuyInCollectedAmount") | |
44 | 44 | ||
45 | 45 | ||
46 | - | func u (p) = (p + "_ | |
46 | + | func u (p) = (p + "_tournamentTotalBuyInCollectedAmountMinusFees") | |
47 | 47 | ||
48 | 48 | ||
49 | - | func v (p) = (p + "_ | |
49 | + | func v (p) = (p + "_tournamentCreator") | |
50 | 50 | ||
51 | 51 | ||
52 | - | func w (p) = (p + "_ | |
52 | + | func w (p) = (p + "_tournamentName") | |
53 | 53 | ||
54 | 54 | ||
55 | - | func x (p) = (p + "_ | |
55 | + | func x (p) = (p + "_tournamentPrizeAmount") | |
56 | 56 | ||
57 | 57 | ||
58 | - | func y (p) = (p + "_ | |
58 | + | func y (p) = (p + "_tournamentMaxPlayersCount") | |
59 | 59 | ||
60 | 60 | ||
61 | - | func z (p) = (p + "_ | |
61 | + | func z (p) = (p + "_tournamentPlayersCount") | |
62 | 62 | ||
63 | 63 | ||
64 | - | func A (p) = (p + "_ | |
64 | + | func A (p) = (p + "_tournamentPrizeAssetId") | |
65 | 65 | ||
66 | 66 | ||
67 | - | func B (p) = (p + "_ | |
67 | + | func B (p) = (p + "_tournamentPrizeAssetName") | |
68 | 68 | ||
69 | 69 | ||
70 | - | func C (p) = (p + "_ | |
70 | + | func C (p) = (p + "_tournamentBuyInAmount") | |
71 | 71 | ||
72 | 72 | ||
73 | - | func D (p) = (p + "_ | |
73 | + | func D (p) = (p + "_tournamentBuyInAssetId") | |
74 | 74 | ||
75 | 75 | ||
76 | - | func E (p) = (p + "_ | |
76 | + | func E (p) = (p + "_tournamentBuyInAssetName") | |
77 | 77 | ||
78 | 78 | ||
79 | - | func F (p) = (p + "_ | |
79 | + | func F (p) = (p + "_tournamentBuyInAssetDecimals") | |
80 | 80 | ||
81 | 81 | ||
82 | - | func G (p) = (p + "_ | |
82 | + | func G (p) = (p + "_tournamentPrizeAssetDecimals") | |
83 | 83 | ||
84 | 84 | ||
85 | - | func H (p) = (p + "_ | |
85 | + | func H (p) = (p + "_tournamentStatus") | |
86 | 86 | ||
87 | 87 | ||
88 | - | func I (p) = (p + "_ | |
88 | + | func I (p) = (p + "_tournamentBuyInFeeCollected") | |
89 | 89 | ||
90 | 90 | ||
91 | - | func J ( | |
91 | + | func J (p) = (p + "_tournamentWinningTransactionId") | |
92 | 92 | ||
93 | 93 | ||
94 | - | func | |
94 | + | func K (L) = (L + "_winner") | |
95 | 95 | ||
96 | 96 | ||
97 | - | func | |
97 | + | func M (N) = (N + "_availableFunds") | |
98 | 98 | ||
99 | 99 | ||
100 | - | func O ( | |
100 | + | func O (N) = (N + "_totalLockedFunds") | |
101 | 101 | ||
102 | 102 | ||
103 | - | func P ( | |
103 | + | func P (N) = (N + "_lockedFundsTotalHistory") | |
104 | 104 | ||
105 | 105 | ||
106 | - | func Q ( | |
106 | + | func Q (N,L) = ((N + "_lockedFunds_") + L) | |
107 | 107 | ||
108 | 108 | ||
109 | - | func R ( | |
109 | + | func R (N) = (N + "_availableRewards") | |
110 | 110 | ||
111 | 111 | ||
112 | - | func S (T) = { | |
113 | - | let U = R(T) | |
114 | - | let V = (U - 1) | |
115 | - | if ((0 > V)) | |
112 | + | func S (n) = i(m(n)) | |
113 | + | ||
114 | + | ||
115 | + | func T (U) = { | |
116 | + | let V = S(U) | |
117 | + | let W = (V - 1) | |
118 | + | if ((0 > W)) | |
116 | 119 | then 0 | |
117 | - | else | |
120 | + | else W | |
118 | 121 | } | |
119 | 122 | ||
120 | 123 | ||
121 | - | @Callable( | |
122 | - | func setFeeCollectorAddress ( | |
124 | + | @Callable(X) | |
125 | + | func setFeeCollectorAddress (Y) = if ((X.caller != this)) | |
123 | 126 | then throw("Admin Only") | |
124 | - | else [StringEntry(f, | |
127 | + | else [StringEntry(f, Y)] | |
125 | 128 | ||
126 | 129 | ||
127 | 130 | ||
128 | - | @Callable( | |
131 | + | @Callable(X) | |
129 | 132 | func depositFunds () = { | |
130 | - | let | |
131 | - | then | |
133 | + | let Z = if ((size(X.payments) == 1)) | |
134 | + | then X.payments[0] | |
132 | 135 | else throw("Please attach exactly one payment") | |
133 | - | if (( | |
136 | + | if ((Z.assetId != fromBase58String(h))) | |
134 | 137 | then throw("You can only deposit USDN") | |
135 | 138 | else { | |
136 | - | let | |
137 | - | let | |
138 | - | $Tuple2([IntegerEntry( | |
139 | + | let aa = toBase58String(X.caller.bytes) | |
140 | + | let ab = i(M(aa)) | |
141 | + | $Tuple2([IntegerEntry(M(aa), (ab + Z.amount))], 1) | |
139 | 142 | } | |
140 | 143 | } | |
141 | 144 | ||
142 | 145 | ||
143 | 146 | ||
144 | - | @Callable( | |
147 | + | @Callable(X) | |
145 | 148 | func cancelSignUpToTournament (p) = { | |
146 | - | let | |
147 | - | if (( | |
149 | + | let ac = getStringValue(H(p)) | |
150 | + | if ((ac != "registration")) | |
148 | 151 | then throw("Tournament is not in registration phase!") | |
149 | 152 | else { | |
150 | - | let Z = toBase58String(W.caller.bytes) | |
151 | - | let ac = getIntegerValue(o(p, Z)) | |
152 | - | let ad = getStringValue(r(p, Z)) | |
153 | - | let ae = i(y(p)) | |
154 | - | let af = i(t(p)) | |
155 | - | $Tuple2([ScriptTransfer(addressFromStringValue(Z), ac, fromBase58String(ad)), DeleteEntry(s(p, Z)), DeleteEntry(o(p, Z)), DeleteEntry(r(p, Z)), IntegerEntry(y(p), (ae - 1)), IntegerEntry(t(p), (af - ac))], 1) | |
153 | + | let aa = toBase58String(X.caller.bytes) | |
154 | + | let ad = getIntegerValue(o(p, aa)) | |
155 | + | let ae = getStringValue(r(p, aa)) | |
156 | + | let af = i(z(p)) | |
157 | + | let ag = (i(t(p)) - ad) | |
158 | + | let ah = fraction(ag, g, 100) | |
159 | + | $Tuple2([ScriptTransfer(addressFromStringValue(aa), ad, fromBase58String(ae)), DeleteEntry(s(p, aa)), DeleteEntry(o(p, aa)), DeleteEntry(r(p, aa)), IntegerEntry(z(p), (af - 1)), IntegerEntry(t(p), ag), IntegerEntry(u(p), (ag - ah))], 1) | |
156 | 160 | } | |
157 | 161 | } | |
158 | 162 | ||
159 | 163 | ||
160 | 164 | ||
161 | - | @Callable( | |
165 | + | @Callable(X) | |
162 | 166 | func signUpToTournament (p) = { | |
163 | - | let | |
164 | - | let | |
165 | - | let | |
166 | - | if (( | |
167 | + | let ai = getIntegerValue(this, y(p)) | |
168 | + | let af = i(z(p)) | |
169 | + | let ac = getStringValue(H(p)) | |
170 | + | if ((ac != "registration")) | |
167 | 171 | then throw("Tournament is not in registration phase!") | |
168 | - | else if (( | |
172 | + | else if ((af == ai)) | |
169 | 173 | then throw("Tournament is currently full, please try again later!") | |
170 | 174 | else { | |
171 | - | let | |
172 | - | then | |
175 | + | let Z = if ((size(X.payments) == 1)) | |
176 | + | then X.payments[0] | |
173 | 177 | else throw("Please attach exactly one payment") | |
174 | - | let | |
175 | - | let k = | |
178 | + | let aj = { | |
179 | + | let k = Z.assetId | |
176 | 180 | if ($isInstanceOf(k, "Unit")) | |
177 | 181 | then { | |
178 | 182 | let l = k | |
179 | 183 | "" | |
180 | 184 | } | |
181 | 185 | else if ($isInstanceOf(k, "ByteVector")) | |
182 | 186 | then { | |
183 | 187 | let l = k | |
184 | 188 | toBase58String(l) | |
185 | 189 | } | |
186 | 190 | else throw("Match error") | |
187 | 191 | } | |
188 | - | let | |
189 | - | let | |
190 | - | if (( | |
191 | - | then throw(("Attached payment amount is invalid, must be " + toString( | |
192 | - | else if (( | |
193 | - | then throw(("Attached payment asset id is invalid, must be " + | |
192 | + | let ak = getIntegerValue(this, C(p)) | |
193 | + | let al = getStringValue(this, D(p)) | |
194 | + | if ((ak != Z.amount)) | |
195 | + | then throw(("Attached payment amount is invalid, must be " + toString(ak))) | |
196 | + | else if ((al != aj)) | |
197 | + | then throw(("Attached payment asset id is invalid, must be " + al)) | |
194 | 198 | else { | |
195 | - | let Z = toBase58String(W.caller.bytes) | |
196 | - | let af = i(t(p)) | |
197 | - | $Tuple2([BooleanEntry(s(p, Z), true), IntegerEntry(o(p, Z), Y.amount), StringEntry(r(p, Z), ah), IntegerEntry(y(p), (ae + 1)), IntegerEntry(t(p), (af + Y.amount))], 1) | |
199 | + | let aa = toBase58String(X.caller.bytes) | |
200 | + | let ag = (i(t(p)) + Z.amount) | |
201 | + | let ah = fraction(ag, g, 100) | |
202 | + | $Tuple2([BooleanEntry(s(p, aa), true), IntegerEntry(o(p, aa), Z.amount), StringEntry(r(p, aa), aj), IntegerEntry(z(p), (af + 1)), IntegerEntry(t(p), ag), IntegerEntry(u(p), (ag - ah))], 1) | |
198 | 203 | } | |
199 | 204 | } | |
200 | 205 | } | |
201 | 206 | ||
202 | 207 | ||
203 | 208 | ||
204 | - | @Callable( | |
209 | + | @Callable(X) | |
205 | 210 | func cancelTournament (p) = { | |
206 | - | let | |
207 | - | let | |
208 | - | let | |
211 | + | let aa = toBase58String(X.caller.bytes) | |
212 | + | let am = getStringValue(v(p)) | |
213 | + | let an = if ((am == aa)) | |
209 | 214 | then true | |
210 | - | else if (( | |
215 | + | else if ((X.caller == this)) | |
211 | 216 | then true | |
212 | 217 | else throw("Only tournament creator can cancel it!") | |
213 | - | if (( | |
218 | + | if ((an == an)) | |
214 | 219 | then { | |
215 | - | let | |
216 | - | if (( | |
220 | + | let ac = getStringValue(H(p)) | |
221 | + | if ((ac != "registration")) | |
217 | 222 | then throw("Tournament is not in registration phase!") | |
218 | 223 | else { | |
219 | - | let | |
220 | - | if (( | |
224 | + | let af = i(z(p)) | |
225 | + | if ((af > 0)) | |
221 | 226 | then throw("Cannot cancel a tournament when players are already registered to it!") | |
222 | 227 | else { | |
223 | - | let | |
224 | - | let | |
225 | - | $Tuple2([DeleteEntry( | |
228 | + | let ao = getIntegerValue(x(p)) | |
229 | + | let ap = getStringValue(A(p)) | |
230 | + | $Tuple2([DeleteEntry(x(p)), DeleteEntry(z(p)), DeleteEntry(y(p)), DeleteEntry(A(p)), DeleteEntry(B(p)), DeleteEntry(G(p)), DeleteEntry(H(p)), DeleteEntry(C(p)), DeleteEntry(E(p)), DeleteEntry(F(p)), DeleteEntry(D(p)), DeleteEntry(w(p)), DeleteEntry(v(p)), ScriptTransfer(addressFromStringValue(am), ao, fromBase58String(ap))], 1) | |
226 | 231 | } | |
227 | 232 | } | |
228 | 233 | } | |
229 | 234 | else throw("Strict value is not equal to itself.") | |
230 | 235 | } | |
231 | 236 | ||
232 | 237 | ||
233 | 238 | ||
234 | - | @Callable( | |
235 | - | func createTournament (p, | |
236 | - | let | |
237 | - | then | |
239 | + | @Callable(X) | |
240 | + | func createTournament (p,aq,ar,as,at) = { | |
241 | + | let Z = if ((size(X.payments) == 1)) | |
242 | + | then X.payments[0] | |
238 | 243 | else throw("Please attach exactly one payment") | |
239 | - | let | |
240 | - | let k = getString( | |
244 | + | let am = { | |
245 | + | let k = getString(v(p)) | |
241 | 246 | if ($isInstanceOf(k, "String")) | |
242 | 247 | then { | |
243 | - | let | |
248 | + | let au = k | |
244 | 249 | throw(("Tournament already exists with this id " + p)) | |
245 | 250 | } | |
246 | 251 | else unit | |
247 | 252 | } | |
248 | - | if (( | |
253 | + | if ((am == am)) | |
249 | 254 | then { | |
250 | - | let | |
251 | - | let k = | |
255 | + | let av = { | |
256 | + | let k = Z.assetId | |
252 | 257 | if ($isInstanceOf(k, "Unit")) | |
253 | 258 | then { | |
254 | 259 | let l = k | |
255 | 260 | "" | |
256 | 261 | } | |
257 | 262 | else if ($isInstanceOf(k, "ByteVector")) | |
258 | 263 | then { | |
259 | 264 | let l = k | |
260 | 265 | toBase58String(l) | |
261 | 266 | } | |
262 | 267 | else throw("Match error") | |
263 | 268 | } | |
264 | - | let | |
265 | - | let k = | |
269 | + | let aw = { | |
270 | + | let k = Z.assetId | |
266 | 271 | if ($isInstanceOf(k, "Unit")) | |
267 | 272 | then { | |
268 | 273 | let l = k | |
269 | 274 | ["Waves", 8] | |
270 | 275 | } | |
271 | 276 | else if ($isInstanceOf(k, "ByteVector")) | |
272 | 277 | then { | |
273 | 278 | let l = k | |
274 | - | let | |
275 | - | if ($isInstanceOf( | |
279 | + | let ax = assetInfo(l) | |
280 | + | if ($isInstanceOf(ax, "Asset")) | |
276 | 281 | then { | |
277 | - | let | |
278 | - | [ | |
282 | + | let ay = ax | |
283 | + | [ay.name, ay.decimals] | |
279 | 284 | } | |
280 | 285 | else throw("Can't find asset") | |
281 | 286 | } | |
282 | 287 | else throw("Match error") | |
283 | 288 | } | |
284 | - | let | |
285 | - | let k = assetInfo(fromBase58String( | |
289 | + | let az = { | |
290 | + | let k = assetInfo(fromBase58String(at)) | |
286 | 291 | if ($isInstanceOf(k, "Asset")) | |
287 | 292 | then { | |
288 | - | let | |
289 | - | [ | |
293 | + | let ay = k | |
294 | + | [ay.name, ay.decimals] | |
290 | 295 | } | |
291 | 296 | else ["", 0] | |
292 | 297 | } | |
293 | - | let Z = toBase58String(W.caller.bytes) | |
294 | - | $Tuple2([IntegerEntry(w(p), Y.amount), IntegerEntry(y(p), 0), IntegerEntry(x(p), ap), StringEntry(z(p), at), StringEntry(A(p), { | |
295 | - | let ay = au[0] | |
296 | - | if ($isInstanceOf(ay, "String")) | |
297 | - | then ay | |
298 | - | else throw(($getType(ay) + " couldn't be cast to String")) | |
298 | + | let aa = toBase58String(X.caller.bytes) | |
299 | + | $Tuple2([IntegerEntry(x(p), Z.amount), IntegerEntry(z(p), 0), IntegerEntry(y(p), ar), StringEntry(A(p), av), StringEntry(B(p), { | |
300 | + | let aA = aw[0] | |
301 | + | if ($isInstanceOf(aA, "String")) | |
302 | + | then aA | |
303 | + | else throw(($getType(aA) + " couldn't be cast to String")) | |
304 | + | }), IntegerEntry(G(p), { | |
305 | + | let aA = aw[1] | |
306 | + | if ($isInstanceOf(aA, "Int")) | |
307 | + | then aA | |
308 | + | else throw(($getType(aA) + " couldn't be cast to Int")) | |
309 | + | }), StringEntry(H(p), "registration"), IntegerEntry(C(p), as), StringEntry(E(p), { | |
310 | + | let aA = az[0] | |
311 | + | if ($isInstanceOf(aA, "String")) | |
312 | + | then aA | |
313 | + | else throw(($getType(aA) + " couldn't be cast to String")) | |
299 | 314 | }), IntegerEntry(F(p), { | |
300 | - | let ay = au[1] | |
301 | - | if ($isInstanceOf(ay, "Int")) | |
302 | - | then ay | |
303 | - | else throw(($getType(ay) + " couldn't be cast to Int")) | |
304 | - | }), StringEntry(G(p), "registration"), IntegerEntry(B(p), aq), StringEntry(D(p), { | |
305 | - | let ay = ax[0] | |
306 | - | if ($isInstanceOf(ay, "String")) | |
307 | - | then ay | |
308 | - | else throw(($getType(ay) + " couldn't be cast to String")) | |
309 | - | }), IntegerEntry(E(p), { | |
310 | - | let ay = ax[1] | |
311 | - | if ($isInstanceOf(ay, "Int")) | |
312 | - | then ay | |
313 | - | else throw(($getType(ay) + " couldn't be cast to Int")) | |
314 | - | }), StringEntry(C(p), ar), StringEntry(v(p), ao), StringEntry(u(p), Z)], 1) | |
315 | + | let aA = az[1] | |
316 | + | if ($isInstanceOf(aA, "Int")) | |
317 | + | then aA | |
318 | + | else throw(($getType(aA) + " couldn't be cast to Int")) | |
319 | + | }), StringEntry(D(p), at), StringEntry(w(p), aq), StringEntry(v(p), aa)], 1) | |
315 | 320 | } | |
316 | 321 | else throw("Strict value is not equal to itself.") | |
317 | 322 | } | |
318 | 323 | ||
319 | 324 | ||
320 | 325 | ||
321 | - | @Callable(W) | |
322 | - | func finishTournament (p,az) = if ((W.caller != this)) | |
326 | + | @Callable(X) | |
327 | + | func startTournament (p) = if ((X.caller != this)) | |
328 | + | then throw("Admin Only") | |
329 | + | else $Tuple2([StringEntry(H(p), "started")], 1) | |
330 | + | ||
331 | + | ||
332 | + | ||
333 | + | @Callable(X) | |
334 | + | func finishTournament (p,aB) = if ((X.caller != this)) | |
323 | 335 | then throw("Admin Only") | |
324 | 336 | else { | |
325 | - | let | |
326 | - | let | |
327 | - | let | |
328 | - | let | |
329 | - | let k = getString( | |
337 | + | let am = getStringValue(v(p)) | |
338 | + | let aC = i(t(p)) | |
339 | + | let aD = getIntegerValue(C(p)) | |
340 | + | let aE = { | |
341 | + | let k = getString(D(p)) | |
330 | 342 | if ($isInstanceOf(k, "String")) | |
331 | 343 | then { | |
332 | - | let | |
333 | - | if (( | |
344 | + | let aF = k | |
345 | + | if ((aF == "")) | |
334 | 346 | then unit | |
335 | - | else fromBase58String( | |
347 | + | else fromBase58String(aF) | |
336 | 348 | } | |
337 | 349 | else unit | |
338 | 350 | } | |
339 | - | let | |
340 | - | $Tuple2([StringEntry( | |
351 | + | let aG = fraction(aC, g, 100) | |
352 | + | $Tuple2([StringEntry(J(p), aB), StringEntry(H(p), "finished"), IntegerEntry(I(p), aG), ScriptTransfer(addressFromStringValue(am), (aC - aG), aE)], 1) | |
341 | 353 | } | |
342 | 354 | ||
343 | 355 | ||
344 | 356 | ||
345 | - | @Callable( | |
346 | - | func playerExitGame ( | |
357 | + | @Callable(X) | |
358 | + | func playerExitGame (L,U,aH) = if ((X.caller != this)) | |
347 | 359 | then throw("Admin Only") | |
348 | 360 | else { | |
349 | - | let | |
350 | - | let | |
351 | - | $Tuple2([IntegerEntry( | |
361 | + | let aI = i(O(U)) | |
362 | + | let aJ = i(Q(U, L)) | |
363 | + | $Tuple2([IntegerEntry(O(U), (aI - aJ)), IntegerEntry(Q(U, L), 0), ScriptTransfer(addressFromStringValue(U), aH, fromBase58String(h))], 1) | |
352 | 364 | } | |
353 | 365 | ||
354 | 366 | ||
355 | 367 | ||
356 | - | @Callable( | |
357 | - | func lockFundsForGame ( | |
358 | - | let | |
359 | - | then | |
368 | + | @Callable(X) | |
369 | + | func lockFundsForGame (L) = { | |
370 | + | let Z = if ((size(X.payments) == 1)) | |
371 | + | then X.payments[0] | |
360 | 372 | else throw("Please attach exactly one payment") | |
361 | - | if (( | |
373 | + | if ((Z.assetId != fromBase58String(h))) | |
362 | 374 | then throw("You can only deposit USDN") | |
363 | 375 | else { | |
364 | - | let | |
365 | - | let | |
366 | - | let | |
367 | - | $Tuple2([IntegerEntry( | |
376 | + | let aa = toBase58String(X.caller.bytes) | |
377 | + | let aI = i(O(aa)) | |
378 | + | let aK = i(P(aa)) | |
379 | + | $Tuple2([IntegerEntry(O(aa), (aI + Z.amount)), IntegerEntry(P(aa), (aK + Z.amount)), IntegerEntry(Q(aa, L), Z.amount)], 1) | |
368 | 380 | } | |
369 | 381 | } | |
370 | 382 | ||
371 | 383 | ||
372 | 384 | ||
373 | - | @Callable( | |
385 | + | @Callable(X) | |
374 | 386 | func withdrawFunds () = { | |
375 | - | let | |
376 | - | let | |
377 | - | let | |
378 | - | let | |
379 | - | let | |
380 | - | if ((0 >= | |
387 | + | let aa = toBase58String(X.caller.bytes) | |
388 | + | let aL = addressFromStringValue(getStringValue(f)) | |
389 | + | let ab = i(M(aa)) | |
390 | + | let aM = fraction(ab, e, 100) | |
391 | + | let aN = (ab - aM) | |
392 | + | if ((0 >= aN)) | |
381 | 393 | then throw("No available funds to withdraw") | |
382 | - | else [IntegerEntry( | |
394 | + | else [IntegerEntry(M(aa), 0), ScriptTransfer(X.caller, aN, fromBase58String(h)), ScriptTransfer(aL, aM, fromBase58String(h))] | |
383 | 395 | } | |
384 | 396 | ||
385 | 397 | ||
386 | 398 | ||
387 | - | @Callable( | |
388 | - | func setWinnerHeadsUp ( | |
399 | + | @Callable(X) | |
400 | + | func setWinnerHeadsUp (L,aO,aP) = if ((X.caller != this)) | |
389 | 401 | then throw("Admin Only") | |
390 | 402 | else { | |
391 | - | let | |
392 | - | let | |
393 | - | let | |
394 | - | let | |
395 | - | [StringEntry( | |
403 | + | let aQ = R(aO) | |
404 | + | let aR = i(aQ) | |
405 | + | let aS = T(aO) | |
406 | + | let aT = T(aP) | |
407 | + | [StringEntry(K(L), aO), IntegerEntry(aQ, (aR + (c * 2))), IntegerEntry(m(aO), aS), IntegerEntry(m(aP), aT)] | |
396 | 408 | } | |
397 | 409 | ||
398 | 410 | ||
399 | 411 | ||
400 | - | @Callable( | |
412 | + | @Callable(X) | |
401 | 413 | func withdrawRewards () = { | |
402 | - | let | |
403 | - | let | |
404 | - | let | |
405 | - | let | |
406 | - | let | |
407 | - | if ((0 >= | |
414 | + | let aa = toBase58String(X.caller.bytes) | |
415 | + | let aL = addressFromStringValue(getStringValue(f)) | |
416 | + | let aR = i(R(aa)) | |
417 | + | let aM = fraction(aR, e, 100) | |
418 | + | let aU = ((aR - d) - aM) | |
419 | + | if ((0 >= aR)) | |
408 | 420 | then throw("No available rewards to withdraw") | |
409 | - | else [IntegerEntry( | |
421 | + | else [IntegerEntry(R(aa), 0), ScriptTransfer(X.caller, aU, unit), ScriptTransfer(aL, aM, unit)] | |
410 | 422 | } | |
411 | 423 | ||
412 | 424 | ||
413 | 425 | ||
414 | - | @Callable( | |
426 | + | @Callable(X) | |
415 | 427 | func buyTickets () = { | |
416 | - | let | |
417 | - | then | |
428 | + | let Z = if ((size(X.payments) == 1)) | |
429 | + | then X.payments[0] | |
418 | 430 | else throw("Please attach exactly one payment") | |
419 | - | if (isDefined( | |
431 | + | if (isDefined(Z.assetId)) | |
420 | 432 | then throw("Tickets can only ibe purchased in Waves") | |
421 | - | else if (( | |
433 | + | else if ((Z.amount != c)) | |
422 | 434 | then throw((("The payment must be of exactly " + toString(b)) + " waves")) | |
423 | 435 | else { | |
424 | - | let | |
425 | - | let | |
426 | - | $Tuple2([IntegerEntry(m( | |
436 | + | let aa = toBase58String(X.caller.bytes) | |
437 | + | let aV = i(m(aa)) | |
438 | + | $Tuple2([IntegerEntry(m(aa), (aV + 1))], 1) | |
427 | 439 | } | |
428 | 440 | } | |
429 | 441 | ||
430 | 442 | ||
431 | - | @Verifier( | |
432 | - | func | |
443 | + | @Verifier(aW) | |
444 | + | func aX () = sigVerify(aW.bodyBytes, aW.proofs[0], aW.senderPublicKey) | |
433 | 445 |
github/deemru/w8io/169f3d6 125.21 ms ◑