tx · 7DULw3wfLc9rHFBz31io411pyN33WkDEKpUs6dFXNCT4

3N3nfqFcxXfd3T18V9icDdh58MJ9wQ2k2xx:  -0.01700000 Waves

2023.11.23 20:24 [2856325] smart account 3N3nfqFcxXfd3T18V9icDdh58MJ9wQ2k2xx > SELF 0.00000000 Waves

{ "type": 13, "id": "7DULw3wfLc9rHFBz31io411pyN33WkDEKpUs6dFXNCT4", "fee": 1700000, "feeAssetId": null, "timestamp": 1700760307023, "version": 2, "chainId": 84, "sender": "3N3nfqFcxXfd3T18V9icDdh58MJ9wQ2k2xx", "senderPublicKey": "UGqkWsCpv7xRVXkQRXyLd6pWPDtYGXmPip7FxSd1pAu", "proofs": [ "218s9DWRRXgA9egDFtStgpoJWL1xpBvaRcmVTU82tYMn3UPoGtnkhc37i6xJ8FnHQVdm25xN2fY7k87ysvwbfT6p" ], "script": "base64:BgIhCAISCQoHAQEBAQEBCBIAEgASBAoCCAESAwoBARIDCgEBPAAPREVGQVVMVExPQ0FUSU9OAg9BZnJpY2FfRl9BZnJpY2EAD2xvY0lkeENvbnRpbmVudAAAAApsb2NJZHhUeXBlAAEBFGtleVN0YWtlZER1Y2tCeU93bmVyAQlvd25lckFkZHIJAKwCAgISc3Rha2VkRHVja0J5T3duZXJfBQlvd25lckFkZHIBD2tleUR1Y2tMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgINZHVja0xvY2F0aW9uXwULZHVja0Fzc2V0SWQADWxhc3RUb3VySWRLZXkCDiVzX19sYXN0VG91cklkARVrZXlUb3VyU3RhdGljRGF0YUJ5SWQBA3RJZAkArAICAhYlcyVkX190b3VyU3RhdGljRGF0YV9fCQCkAwEFA3RJZAEWa2V5VG91ckR5bmFtaWNEYXRhQnlJZAEDdElkCQCsAgICFyVzJWRfX3RvdXJEeW5hbWljRGF0YV9fCQCkAwEFA3RJZAETa2V5U2NvcmVCb2FyZEJ5VG91cgEDdElkCQCsAgICEiVzJWRfX3Njb3JlQm9hcmRfXwkApAMBBQN0SWQBEmtleVN1bVNjb3Jlc0J5VG91cgEDdElkCQCsAgICESVzJWRfX3N1bVNjb3Jlc19fCQCkAwEFA3RJZAEWa2V5VW5wYWlkUmV3YXJkc0J5VG91cgEDdElkCQCsAgICFSVzJWRfX3VucGFpZFJld2FyZHNfXwkApAMBBQN0SWQBG2tleUxhc3RSZWdpc3RlcmVkVG91ckJ5RHVjawELZHVja0Fzc2V0SWQJAKwCAgIgJXMlc19fbGFzdFJlZ2lzdGVyZWRUb3VyQnlEdWNrX18FC2R1Y2tBc3NldElkARxrZXlJc1JlZ2lzdGVyZWRCeVRvdXJBbmREdWNrAgN0SWQLZHVja0Fzc2V0SWQJALkJAgkAzAgCAiElcyVkJXNfX2lzUmVnaXN0ZXJlZEJ5VG91ckFuZER1Y2sJAMwIAgkApAMBBQN0SWQJAMwIAgULZHVja0Fzc2V0SWQFA25pbAICX18BGWtleUlzQXdhcmRlZEJ5VG91ckFuZER1Y2sCA3RJZAtkdWNrQXNzZXRJZAkAuQkCCQDMCAICHiVzJWQlc19faXNBd2FyZGVkQnlUb3VyQW5kRHVjawkAzAgCCQCkAwEFA3RJZAkAzAgCBQtkdWNrQXNzZXRJZAUDbmlsAgJfXwEba2V5TGFzdEF0dGVtcHRCeVRvdXJBbmREdWNrAgN0SWQLZHVja0Fzc2V0SWQJALkJAgkAzAgCAiAlcyVkJXNfX2xhc3RBdHRlbXB0QnlUb3VyQW5kRHVjawkAzAgCCQCkAwEFA3RJZAkAzAgCBQtkdWNrQXNzZXRJZAUDbmlsAgJfXwEaa2V5QmVzdFJlc3VsdEJ5VG91ckFuZER1Y2sCA3RJZAtkdWNrQXNzZXRJZAkAuQkCCQDMCAICHyVzJWQlc19fYmVzdFJlc3VsdEJ5VG91ckFuZER1Y2sJAMwIAgkApAMBBQN0SWQJAMwIAgULZHVja0Fzc2V0SWQFA25pbAICX18BFmtleUJlc3RUeEJ5VG91ckFuZER1Y2sCA3RJZAtkdWNrQXNzZXRJZAkAuQkCCQDMCAICGyVzJWQlc19fYmVzdFR4QnlUb3VyQW5kRHVjawkAzAgCCQCkAwEFA3RJZAkAzAgCBQtkdWNrQXNzZXRJZAUDbmlsAgJfXwAJaWR4U3RhdGljAAAACmlkeER5bmFtaWMAAQATdFN0YXRpY1JlZ2lzdGVyQ29zdAACABJ0U3RhdGljQXR0ZW1wdENvc3QAAwAMdFN0YXRpY1N0YXJ0AAUACnRTdGF0aWNFbmQABgAQdFN0YXRpY051bUdyYW5kcwAHABB0U3RhdGljUHJpemVGdW5kAAgADHRTdGF0aWNBc3NldAAJAA50RHluYW1pY1N0YXR1cwABAA90RHluYW1pY0xlYWRlcnMAAgARdER5bmFtaWNXaW5SZXN1bHQAAwAVdER5bmFtaWNUb3RhbFJlZ0NvdW50AAQAFXREeW5hbWljVG90YWxBdHRlbXB0cwAFAQtnZXRUb3VyRGF0YQIMdG91ckNvbnRyYWN0A3RJZAQGc3RhdGljCQC1CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQx0b3VyQ29udHJhY3QJARVrZXlUb3VyU3RhdGljRGF0YUJ5SWQBBQN0SWQJAKwCAgkArAICAhlFcnJvciByZWFkaW5nIHRvdXJuYW1lbnQgCQCkAwEFA3RJZAIFIGRhdGECAl9fBAdkeW5hbWljCQC8CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQx0b3VyQ29udHJhY3QJARZrZXlUb3VyRHluYW1pY0RhdGFCeUlkAQUDdElkCQCsAgIJAKwCAgIZRXJyb3IgcmVhZGluZyB0b3VybmFtZW50IAkApAMBBQN0SWQCBSBkYXRhAgJfXwkAzAgCBQZzdGF0aWMJAMwIAgUHZHluYW1pYwUDbmlsAQ5pc0luVG91cm5hbWVudAIMdG91ckNvbnRyYWN0CGxvY2F0aW9uBAZsYXN0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUMdG91ckNvbnRyYWN0BQ1sYXN0VG91cklkS2V5AAAEA2xvYwkAtQkCBQhsb2NhdGlvbgIBXwQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQFdERhdGEJAQtnZXRUb3VyRGF0YQIFDHRvdXJDb250cmFjdAUGbGFzdElkBAZzdGF0aWMJAJEDAgUFdERhdGEFCWlkeFN0YXRpYwQHZHluYW1pYwkAkQMCBQV0RGF0YQUKaWR4RHluYW1pYwMDAwkAAAIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFUCQAAAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2xvYwUPbG9jSWR4Q29udGluZW50BQZsYXN0SWQHCQAAAgkAkQMCBQdkeW5hbWljBQ50RHluYW1pY1N0YXR1cwIKSU5QUk9HUkVTUwcJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBQp0U3RhdGljRW5kBQNub3cHAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQAVZGVmYXVsdFJlc3RBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUFFDdXZGYnZoNExrUFVucm5VMXozam5iQTFwOW0zV05odgMJAAACAQFUBQckbWF0Y2gwAiMzTXVta0dHenRDS0FYcFdEcXhrZGRvZnFYU1VicVFrdlNKeQkAAgECDVVua25vd24gY2hhaW4AA1NFUAICX18BD2dldFN0cmluZ09yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUHYWRkcmVzcwkAzAgCAgEuCQDMCAIFA2tleQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAABFJZHhDZmdTdGFraW5nRGFwcAABAA1JZHhDZmdXbGdEYXBwAAQBCmtleVJlc3RDZmcAAg4lc19fcmVzdENvbmZpZwEOa2V5UmVzdEFkZHJlc3MAAgwlc19fcmVzdEFkZHIBEXJlYWRSZXN0Q2ZnT3JGYWlsAQRyZXN0CQC8CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQRyZXN0CQEKa2V5UmVzdENmZwAFA1NFUAEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgdyZXN0Q2ZnA2lkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUHcmVzdENmZwUDaWR4CQCsAgICKlJlc3QgY2ZnIGRvZXNuJ3QgY29udGFpbiBhZGRyZXNzIGF0IGluZGV4IAkApAMBBQNpZHgADHJlc3RDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEOa2V5UmVzdEFkZHJlc3MABRVkZWZhdWx0UmVzdEFkZHJlc3NTdHIAB3Jlc3RDZmcJARFyZWFkUmVzdENmZ09yRmFpbAEFDHJlc3RDb250cmFjdAAPc3Rha2luZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwURSWR4Q2ZnU3Rha2luZ0RhcHAAC3dsZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUNSWR4Q2ZnV2xnRGFwcAANd2xnQXNzZXRJZEtleQILd2xnX2Fzc2V0SWQACndsZ0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQt3bGdDb250cmFjdAUNd2xnQXNzZXRJZEtleQIYV0xHT0xEIGlzIG5vdCBpc3N1ZWQgeWV0AQhhc1N0cmluZwEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAFAXMJAAIBAhhmYWlsIHRvIGNhc3QgaW50byBTdHJpbmcBBWFzSW50AQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACA0ludAQBbgUHJG1hdGNoMAUBbgkAAgECFWZhaWwgdG8gY2FzdCBpbnRvIEludAEKZml4ZWRQb2ludAIDdmFsCGRlY2ltYWxzBAZ0ZW5Qb3cJAGwGAAoAAAUIZGVjaW1hbHMAAAAABQRET1dOBAdsb3dQYXJ0CQCkAwEJAGoCBQN2YWwFBnRlblBvdwQGemVyb2VzCQCwAgIJAKQDAQUGdGVuUG93CQBkAgABCQCxAgEFB2xvd1BhcnQJAKwCAgkArAICCQCsAgIJAKQDAQkAaQIFA3ZhbAUGdGVuUG93AgEuBQZ6ZXJvZXMFB2xvd1BhcnQBBHBhZEwCA3ZhbANsZW4EBHZhbFMJAKQDAQUDdmFsBAZ6ZXJvZXMJALACAgkApAMBCQBsBgAKAAAJAGUCBQNsZW4JALECAQUEdmFsUwAAAAAFBERPV04AAQkArAICBQZ6ZXJvZXMFBHZhbFMAE01BWFRPVVJOQU1FTlRMRU5HVEgAgMj96QQABEhPVVIAgN3bAQAKYWRtaW5zTGlzdAkAzAgCCQClCAEFBHRoaXMJAMwIAgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAIjM1BFZTJSRUxVSENGQ0JzbVNDTmNCSjhOM1VSTFZRZW5kZTcDCQAAAgEBVAUHJG1hdGNoMAIjM010QmdKVGFMeFBCM0M3VUpEMVVFOHFqa0h0aGZLdkZRWVkJAAIBAg1Vbmtub3duIGNoYWluBQNuaWwBCnN0YXRpY0RhdGEJBHR4SWQMcmVnaXN0ZXJDb3N0C2F0dGVtcHRDb3N0DGNyZWF0aW9uVGltZQlzdGFydFRpbWUHZW5kVGltZQludW1HcmFuZHMJcHJpemVGdW5kCnByaXplQXNzZXQJALkJAgkAzAgCAhIlcyVkJWQlZCVkJWQlZCVkJXMJAMwIAgUEdHhJZAkAzAgCCQCkAwEFDHJlZ2lzdGVyQ29zdAkAzAgCCQCkAwEFC2F0dGVtcHRDb3N0CQDMCAIJAKQDAQUMY3JlYXRpb25UaW1lCQDMCAIJAKQDAQUJc3RhcnRUaW1lCQDMCAIJAKQDAQUHZW5kVGltZQkAzAgCCQCkAwEFCW51bUdyYW5kcwkAzAgCCQCkAwEFCXByaXplRnVuZAkAzAgCBQpwcml6ZUFzc2V0BQNuaWwFA1NFUAELZHluYW1pY0RhdGEFBnN0YXR1cwdsZWFkZXJzCXdpblJlc3VsdAl0b3RhbFJlZ3MNdG90YWxBdHRlbXB0cwkAugkCCQDMCAICCiVzJXMlZCVkJWQJAMwIAgUGc3RhdHVzCQDMCAIFB2xlYWRlcnMJAMwIAgkApAMBBQl3aW5SZXN1bHQJAMwIAgkApAMBBQl0b3RhbFJlZ3MJAMwIAgkApAMBBQ10b3RhbEF0dGVtcHRzBQNuaWwFA1NFUAEGcHJvbG9nAAkBBWFzSW50AQkA/QcEBQ9zdGFraW5nQ29udHJhY3QCCnNhdmVMYXN0VHgFA25pbAUDbmlsAQxkdWNrQnlDYWxsZXIBBmNhbGxlcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBBQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQGAWkBEGNyZWF0ZVRvdXJuYW1lbnQHCXN0YXJ0VGltZQdlbmRUaW1lDHJlZ2lzdGVyQ29zdAthdHRlbXB0Q29zdAludW1HcmFuZHMJcHJpemVGdW5kCnByaXplQXNzZXQEBmNhbGxlcgkApQgBCAUBaQZjYWxsZXIDCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCBQphZG1pbnNMaXN0BQZjYWxsZXIJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQGbGFzdElkCQCfCAEFDWxhc3RUb3VySWRLZXkEA3RJZAMJAQlpc0RlZmluZWQBBQZsYXN0SWQECmxhc3RUb3VySWQJAQV2YWx1ZQEFBmxhc3RJZAQHZHluYW1pYwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARZrZXlUb3VyRHluYW1pY0RhdGFCeUlkAQUKbGFzdFRvdXJJZAkArAICCQCsAgICGUVycm9yIHJlYWRpbmcgdG91cm5hbWVudCAJAKQDAQUKbGFzdFRvdXJJZAIFIGRhdGEEBnN0YXR1cwkAkQMCCQC1CQIFB2R5bmFtaWMFA1NFUAUOdER5bmFtaWNTdGF0dXMDAwkBAiE9AgUGc3RhdHVzAghBUkNISVZFRAkBAiE9AgUGc3RhdHVzAgpQUk9DRVNTSU5HBwkAAgEJAKwCAgIsQ3VycmVudCB0b3VybmVtZW50IGlzIG5vdCBjb21wbGV0ZWQsIHN0YXR1cz0FBnN0YXR1cwkAZAIFCmxhc3RUb3VySWQAAQABBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wAwkAZgIFA25vdwUJc3RhcnRUaW1lCQACAQkArAICCQCsAgIJAKwCAgIKc3RhcnRUaW1lPQkApAMBBQlzdGFydFRpbWUCECA8IGNyZWF0aW9uVGltZT0JAKQDAQUDbm93AwkAZgIFCXN0YXJ0VGltZQUHZW5kVGltZQkAAgEJAKwCAgkArAICCQCsAgICCGVuZFRpbWU9CQCkAwEFB2VuZFRpbWUCDSA8IHN0YXJ0VGltZT0JAKQDAQUJc3RhcnRUaW1lAwkAZgIJAGUCBQdlbmRUaW1lBQlzdGFydFRpbWUFE01BWFRPVVJOQU1FTlRMRU5HVEgJAAIBCQCsAgIJAKwCAgkArAICAh9Ub3VybmFtZW50IHBlcmlvZCBleGNlZWRzIG1heDogCQCkAwEJAGUCBQdlbmRUaW1lBQlzdGFydFRpbWUCAyA+IAkApAMBBRNNQVhUT1VSTkFNRU5UTEVOR1RIAwMJAGYCAAAFDHJlZ2lzdGVyQ29zdAYJAGYCAAAFC2F0dGVtcHRDb3N0CQACAQkArAICCQCsAgIJAKwCAgIkQ29zdCBzaG91bGQgYmUgcG9zaXRpdmUsIGJ1dCBwYXNzZWQgCQCkAwEFDHJlZ2lzdGVyQ29zdAIFIGFuZCAJAKQDAQULYXR0ZW1wdENvc3QDCQBmAgAABQludW1HcmFuZHMJAAIBAi1OdW1iZXIgb2YgR3JhbmQgUHJpemVzIHNob3VsZCBiZSBub24tbmVnYXRpdmUDCQBmAgAABQlwcml6ZUZ1bmQJAAIBAiFQcml6ZSBGdW5kIHNob3VsZCBiZSBub24tbmVnYXRpdmUJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUNbGFzdFRvdXJJZEtleQUDdElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlUb3VyU3RhdGljRGF0YUJ5SWQBBQN0SWQJAQpzdGF0aWNEYXRhCQkA2AQBCAUBaQ10cmFuc2FjdGlvbklkBQxyZWdpc3RlckNvc3QFC2F0dGVtcHRDb3N0BQNub3cFCXN0YXJ0VGltZQUHZW5kVGltZQUJbnVtR3JhbmRzBQlwcml6ZUZ1bmQFCnByaXplQXNzZXQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFmtleVRvdXJEeW5hbWljRGF0YUJ5SWQBBQN0SWQJAQtkeW5hbWljRGF0YQUCB0NSRUFURUQCASAAAAAAAAAFA25pbAUDdElkAWkBCHJlZ2lzdGVyAAQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAQGbGFzdElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUNbGFzdFRvdXJJZEtleQIVTm8gYWN0aXZlIHRvdXJuYW1lbnRzBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAV0RGF0YQkBC2dldFRvdXJEYXRhAgUEdGhpcwUGbGFzdElkBAZzdGF0aWMJAJEDAgUFdERhdGEFCWlkeFN0YXRpYwQHZHluYW1pYwkAkQMCBQV0RGF0YQUKaWR4RHluYW1pYwQGc3RhdHVzCQCRAwIFB2R5bmFtaWMFDnREeW5hbWljU3RhdHVzAwkBASEBAwMDCQAAAgUGc3RhdHVzAgdDUkVBVEVECQBmAgUDbm93CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBQx0U3RhdGljU3RhcnQHCQBmAgkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZzdGF0aWMFCnRTdGF0aWNFbmQFBEhPVVIFA25vdwcGAwkAAAIFBnN0YXR1cwIKSU5QUk9HUkVTUwkAZgIJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBQp0U3RhdGljRW5kBQRIT1VSBQNub3cHCQACAQITQ2Fubm90IHJlZ2lzdGVyIG5vdwQHcmVnQ29zdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnN0YXRpYwUTdFN0YXRpY1JlZ2lzdGVyQ29zdAQHYXNzZXRJZAMJAGYCCQCQAwEFBnN0YXRpYwUMdFN0YXRpY0Fzc2V0CQDZBAEJAJEDAgUGc3RhdGljBQx0U3RhdGljQXNzZXQFCndsZ0Fzc2V0SWQEA25mbwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFB2Fzc2V0SWQCFk5vIGFzc2V0SW5mbyBhdmFpbGFibGUECWFzc2V0TmFtZQgFA25mbwRuYW1lBA1hc3NldERlY2ltYWxzCAUDbmZvCGRlY2ltYWxzBAZyZWdBbXQDCQBmAgUHcmVnQ29zdAAAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAADAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQdhc3NldElkCQACAQkArAICBQlhc3NldE5hbWUCDyBwYXltZW50cyBvbmx5IQgFA3BtdAZhbW91bnQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAAAAwkBAiE9AgUGcmVnQW10BQdyZWdDb3N0CQACAQkArAICCQCsAgIJAKwCAgIQTmVlZCBwYXltZW50IG9mIAkBCmZpeGVkUG9pbnQCBQdyZWdDb3N0BQ1hc3NldERlY2ltYWxzAgEgBQlhc3NldE5hbWUEC2R1Y2tBc3NldElkCQEMZHVja0J5Q2FsbGVyAQgFAWkMb3JpZ2luQ2FsbGVyBAhzY29yZUtleQkBE2tleVNjb3JlQm9hcmRCeVRvdXIBBQZsYXN0SWQEDW9sZFNjb3JlQm9hcmQJAQt2YWx1ZU9yRWxzZQIJAKIIAQUIc2NvcmVLZXkCAAMDCQELdmFsdWVPckVsc2UCCQCgCAEJARxrZXlJc1JlZ2lzdGVyZWRCeVRvdXJBbmREdWNrAgUGbGFzdElkBQtkdWNrQXNzZXRJZAcGCQEIY29udGFpbnMCBQ1vbGRTY29yZUJvYXJkBQtkdWNrQXNzZXRJZAkAAgEJAKwCAgkArAICCQCsAgICCllvdXIgZHVjayAFC2R1Y2tBc3NldElkAiUgaXMgYWxyZWFkeSByZWdpc3RlcmVkIGF0IHRvdXJuYW1lbnQgCQCkAwEFBmxhc3RJZAQSdXBkYXRlZER5bmFtaWNEYXRhCQELZHluYW1pY0RhdGEFAgpJTlBST0dSRVNTCQCRAwIFB2R5bmFtaWMFD3REeW5hbWljTGVhZGVycwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB2R5bmFtaWMFEXREeW5hbWljV2luUmVzdWx0CQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB2R5bmFtaWMFFXREeW5hbWljVG90YWxSZWdDb3VudAABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHZHluYW1pYwUVdER5bmFtaWNUb3RhbEF0dGVtcHRzCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARtrZXlMYXN0UmVnaXN0ZXJlZFRvdXJCeUR1Y2sBBQtkdWNrQXNzZXRJZAUGbGFzdElkCQDMCAIJAQxCb29sZWFuRW50cnkCCQEca2V5SXNSZWdpc3RlcmVkQnlUb3VyQW5kRHVjawIFBmxhc3RJZAULZHVja0Fzc2V0SWQGCQDMCAIJAQtTdHJpbmdFbnRyeQIFCHNjb3JlS2V5AwkAAAIFDW9sZFNjb3JlQm9hcmQCAAkArAICBQtkdWNrQXNzZXRJZAIEOjAwMAkArAICCQCsAgIJAKwCAgUNb2xkU2NvcmVCb2FyZAIBXwULZHVja0Fzc2V0SWQCBDowMDAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFmtleVRvdXJEeW5hbWljRGF0YUJ5SWQBBQZsYXN0SWQFEnVwZGF0ZWREeW5hbWljRGF0YQUDbmlsBQxwcm9sb2dSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKbmV3QXR0ZW1wdAAEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwADCQAAAgUMcHJvbG9nUmVzdWx0BQxwcm9sb2dSZXN1bHQEC2R1Y2tBc3NldElkCQEMZHVja0J5Q2FsbGVyAQgFAWkMb3JpZ2luQ2FsbGVyBAZsYXN0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQ1sYXN0VG91cklkS2V5AhVObyBhY3RpdmUgdG91cm5hbWVudHMEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEBXREYXRhCQELZ2V0VG91ckRhdGECBQR0aGlzBQZsYXN0SWQEBnN0YXRpYwkAkQMCBQV0RGF0YQUJaWR4U3RhdGljBAdkeW5hbWljCQCRAwIFBXREYXRhBQppZHhEeW5hbWljBAZzdGF0dXMJAJEDAgUHZHluYW1pYwUOdER5bmFtaWNTdGF0dXMDCQEBIQEDCQAAAgUGc3RhdHVzAgpJTlBST0dSRVNTCQBmAgkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZzdGF0aWMFCnRTdGF0aWNFbmQFBEhPVVIFA25vdwcJAAIBAhdBdHRlbXB0IGlzIG5vdCBwb3NzaWJsZQMJAQEhAQkBC3ZhbHVlT3JFbHNlAgkAoAgBCQEca2V5SXNSZWdpc3RlcmVkQnlUb3VyQW5kRHVjawIFBmxhc3RJZAULZHVja0Fzc2V0SWQHCQACAQkArAICCQCsAgIJAKwCAgIKWW91ciBkdWNrIAULZHVja0Fzc2V0SWQCISBpcyBub3QgcmVnaXN0ZXJlZCBhdCB0b3VybmFtZW50IAkApAMBBQZsYXN0SWQEE2F0dGVtcHRzSXRlcmF0b3JLZXkJARtrZXlMYXN0QXR0ZW1wdEJ5VG91ckFuZER1Y2sCBQZsYXN0SWQFC2R1Y2tBc3NldElkBAtsYXN0QXR0ZW1wdAkAnwgBBRNhdHRlbXB0c0l0ZXJhdG9yS2V5BAskdDA2NzQ5NzYxNAMJAQEhAQkBCWlzRGVmaW5lZAEFC2xhc3RBdHRlbXB0CQCUCgIAAAAAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEB2Fzc2V0SWQDCQBmAgkAkAMBBQZzdGF0aWMFDHRTdGF0aWNBc3NldAkA2QQBCQCRAwIFBnN0YXRpYwUMdFN0YXRpY0Fzc2V0BQp3bGdBc3NldElkBANuZm8JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQdhc3NldElkAhZObyBhc3NldEluZm8gYXZhaWxhYmxlBAlhc3NldE5hbWUIBQNuZm8EbmFtZQQNYXNzZXREZWNpbWFscwgFA25mbwhkZWNpbWFscwQDYW10CAUDcG10BmFtb3VudAMDCQEBIQEJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQGCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQFB2Fzc2V0SWQJAAIBCQCsAgIFCWFzc2V0TmFtZQIPIHBheW1lbnRzIG9ubHkhBAdhdHRDb3N0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBRJ0U3RhdGljQXR0ZW1wdENvc3QDCQECIT0CBQNhbXQFB2F0dENvc3QJAAIBCQCsAgIJAKwCAgkArAICAhBOZWVkIHBheW1lbnQgb2YgCQEKZml4ZWRQb2ludAIFB2F0dENvc3QFDWFzc2V0RGVjaW1hbHMCASAFCWFzc2V0TmFtZQkAlAoCCQBkAgkBBXZhbHVlAQULbGFzdEF0dGVtcHQAAQABBA1wYXllZEF0dGVtcHRzCAULJHQwNjc0OTc2MTQCXzEECWluY3JlbWVudAgFCyR0MDY3NDk3NjE0Al8yBBJ1cGRhdGVkRHluYW1pY0RhdGEJAQtkeW5hbWljRGF0YQUCCklOUFJPR1JFU1MJAJEDAgUHZHluYW1pYwUPdER5bmFtaWNMZWFkZXJzCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHZHluYW1pYwURdER5bmFtaWNXaW5SZXN1bHQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdkeW5hbWljBRV0RHluYW1pY1RvdGFsUmVnQ291bnQJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHZHluYW1pYwUVdER5bmFtaWNUb3RhbEF0dGVtcHRzBQlpbmNyZW1lbnQEB3RvdXJMb2MJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhNpbml0RHVja1RvdXJBdHRlbXB0CQDMCAIFC2R1Y2tBc3NldElkBQNuaWwFA25pbAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNhdHRlbXB0c0l0ZXJhdG9yS2V5BQ1wYXllZEF0dGVtcHRzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARZrZXlUb3VyRHluYW1pY0RhdGFCeUlkAQUGbGFzdElkBRJ1cGRhdGVkRHluYW1pY0RhdGEFA25pbAkAzAgCBQxwcm9sb2dSZXN1bHQJAMwIAgUNcGF5ZWRBdHRlbXB0cwkAzAgCBQd0b3VyTG9jBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEOc2F2ZUR1Y2tSZXN1bHQCC2R1Y2tBc3NldElkC2R1Y2tOZXdCZXN0AwkBAiE9AggFAWkGY2FsbGVyBQ9zdGFraW5nQ29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkBAZsYXN0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQ1sYXN0VG91cklkS2V5AhVObyBhY3RpdmUgdG91cm5hbWVudHMEBXREYXRhCQELZ2V0VG91ckRhdGECBQR0aGlzBQZsYXN0SWQEBnN0YXRpYwkAkQMCBQV0RGF0YQUJaWR4U3RhdGljBAdkeW5hbWljCQCRAwIFBXREYXRhBQppZHhEeW5hbWljBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OBA1iZXN0UmVzdWx0S2V5CQEaa2V5QmVzdFJlc3VsdEJ5VG91ckFuZER1Y2sCBQZsYXN0SWQFC2R1Y2tBc3NldElkBAxzdW1TY29yZXNLZXkJARJrZXlTdW1TY29yZXNCeVRvdXIBBQZsYXN0SWQEDG9sZFN1bVNjb3JlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQxzdW1TY29yZXNLZXkAAAMJAQ5pc0luVG91cm5hbWVudAIFBHRoaXMFC2N1ckxvY2F0aW9uBAtkdWNrT2xkQmVzdAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ1iZXN0UmVzdWx0S2V5AAAECHNjb3JlS2V5CQETa2V5U2NvcmVCb2FyZEJ5VG91cgEFBmxhc3RJZAQNb2xkU2NvcmVCb2FyZAkBC3ZhbHVlT3JFbHNlAgkAoggBBQhzY29yZUtleQIABAwkdDA5MTA3MTAyNjgDCQBmAgULZHVja05ld0Jlc3QFC2R1Y2tPbGRCZXN0AwkBASEBCQEIY29udGFpbnMCBQ1vbGRTY29yZUJvYXJkBQtkdWNrQXNzZXRJZAkAAgEJAKwCAgIcc2NvcmVCb2FyZCBkb2VzIG5vdCBjb250YWluIAULZHVja0Fzc2V0SWQEB29sZEJlc3QJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdkeW5hbWljBRF0RHluYW1pY1dpblJlc3VsdAQHbGVhZGVycwkAkQMCBQdkeW5hbWljBQ90RHluYW1pY0xlYWRlcnMEDm9sZExlYWRlcnNMaXN0AwMJAAACBQdsZWFkZXJzAgAGCQAAAgUHbGVhZGVycwIBIAUDbmlsCQC8CQIFB2xlYWRlcnMCASwEDm5ld0xlYWRlcnNMaXN0AwkAZgIFC2R1Y2tOZXdCZXN0BQdvbGRCZXN0CQDMCAIFC2R1Y2tBc3NldElkBQNuaWwDAwkAZgIFB29sZEJlc3QFC2R1Y2tOZXdCZXN0BgkBD2NvbnRhaW5zRWxlbWVudAIFDm9sZExlYWRlcnNMaXN0BQtkdWNrQXNzZXRJZAUOb2xkTGVhZGVyc0xpc3QJAM0IAgUOb2xkTGVhZGVyc0xpc3QFC2R1Y2tBc3NldElkBBJ1cGRhdGVkRHluYW1pY0RhdGEJAQtkeW5hbWljRGF0YQUCCklOUFJPR1JFU1MJALoJAgUObmV3TGVhZGVyc0xpc3QCASwJAJYDAQkAzAgCBQtkdWNrTmV3QmVzdAkAzAgCBQdvbGRCZXN0BQNuaWwJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdkeW5hbWljBRV0RHluYW1pY1RvdGFsUmVnQ291bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdkeW5hbWljBRV0RHluYW1pY1RvdGFsQXR0ZW1wdHMEBXBhcnRzCQC9CQIFDW9sZFNjb3JlQm9hcmQFC2R1Y2tBc3NldElkCQCVCgMJAKwCAgkArAICCQCsAgIJAKwCAgkAkQMCBQVwYXJ0cwAABQtkdWNrQXNzZXRJZAIBOgkBBHBhZEwCBQtkdWNrTmV3QmVzdAADCQCwAgIJAJEDAgUFcGFydHMAAQAECQBlAgkAZAIFDG9sZFN1bVNjb3JlcwULZHVja05ld0Jlc3QFC2R1Y2tPbGRCZXN0CQDMCAIJAQtTdHJpbmdFbnRyeQIJARZrZXlUb3VyRHluYW1pY0RhdGFCeUlkAQUGbGFzdElkBRJ1cGRhdGVkRHluYW1pY0RhdGEFA25pbAkAlQoDBQ1vbGRTY29yZUJvYXJkBQxvbGRTdW1TY29yZXMFA25pbAQNbmV3U2NvcmVCb2FyZAgFDCR0MDkxMDcxMDI2OAJfMQQMbmV3U3VtU2NvcmVzCAUMJHQwOTEwNzEwMjY4Al8yBA1nbG9iYWxBY3Rpb25zCAUMJHQwOTEwNzEwMjY4Al8zCQCUCgIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUNYmVzdFJlc3VsdEtleQkAlgMBCQDMCAIFC2R1Y2tPbGRCZXN0CQDMCAIFC2R1Y2tOZXdCZXN0BQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIFDHN1bVNjb3Jlc0tleQUMbmV3U3VtU2NvcmVzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARZrZXlCZXN0VHhCeVRvdXJBbmREdWNrAgUGbGFzdElkBQtkdWNrQXNzZXRJZAkA2AQBCAUBaQ10cmFuc2FjdGlvbklkCQDMCAIJAQtTdHJpbmdFbnRyeQIFCHNjb3JlS2V5BQ1uZXdTY29yZUJvYXJkBQNuaWwFDWdsb2JhbEFjdGlvbnMAAAkAlAoCBQNuaWwAAAFpARFwcm9jZXNzVG91cm5hbWVudAEDdElkBAZjYWxsZXIJAKUIAQgFAWkGY2FsbGVyAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgUKYWRtaW5zTGlzdAUGY2FsbGVyCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEBXREYXRhCQELZ2V0VG91ckRhdGECBQR0aGlzBQN0SWQEBnN0YXRpYwkAkQMCBQV0RGF0YQUJaWR4U3RhdGljBAdkeW5hbWljCQCRAwIFBXREYXRhBQppZHhEeW5hbWljBAZzdGF0dXMJAJEDAgUHZHluYW1pYwUOdER5bmFtaWNTdGF0dXMEDXJlZ2lzdHJhdGlvbnMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdkeW5hbWljBRV0RHluYW1pY1RvdGFsUmVnQ291bnQEDHBhaWRBdHRlbXB0cwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB2R5bmFtaWMFFXREeW5hbWljVG90YWxBdHRlbXB0cwQHcmVnQ29zdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnN0YXRpYwUTdFN0YXRpY1JlZ2lzdGVyQ29zdAQHYXR0Q29zdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnN0YXRpYwUSdFN0YXRpY0F0dGVtcHRDb3N0AwkAAAIFBnN0YXR1cwIIQVJDSElWRUQJAAIBCQCsAgIJAKwCAgILVG91cm5hbWVudCAJAKQDAQUDdElkAhQgaXMgYWxyZWFkeSBBUkNISVZFRAMDCQAAAgUGc3RhdHVzAgpJTlBST0dSRVNTCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnN0YXRpYwUKdFN0YXRpY0VuZAUDbm93BwkAAgEJAKwCAgkArAICAgtUb3VybmFtZW50IAkApAMBBQN0SWQCECBpcyBub3Qgb3ZlciB5ZXQEEnVwZGF0ZWREeW5hbWljRGF0YQkBC2R5bmFtaWNEYXRhBQIKUFJPQ0VTU0lORwkAkQMCBQdkeW5hbWljBQ90RHluYW1pY0xlYWRlcnMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdkeW5hbWljBRF0RHluYW1pY1dpblJlc3VsdAUNcmVnaXN0cmF0aW9ucwUMcGFpZEF0dGVtcHRzBAlwcml6ZUZ1bmQDCQBmAgkAkAMBBQZzdGF0aWMFEHRTdGF0aWNQcml6ZUZ1bmQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZzdGF0aWMFEHRTdGF0aWNQcml6ZUZ1bmQAAAQGdW5wYWlkCQBkAgkAaQIJAGQCCQBoAgUNcmVnaXN0cmF0aW9ucwUHcmVnQ29zdAkAaAIFDHBhaWRBdHRlbXB0cwUHYXR0Q29zdAACBQlwcml6ZUZ1bmQJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQEWa2V5VG91ckR5bmFtaWNEYXRhQnlJZAEFA3RJZAUSdXBkYXRlZER5bmFtaWNEYXRhCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5VW5wYWlkUmV3YXJkc0J5VG91cgEFA3RJZAUGdW5wYWlkBQNuaWwAAAFpAQpjbGFpbVByaXplAQN0SWQEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwADCQAAAgUMcHJvbG9nUmVzdWx0BQxwcm9sb2dSZXN1bHQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQFdERhdGEJAQtnZXRUb3VyRGF0YQIFBHRoaXMFA3RJZAQGc3RhdGljCQCRAwIFBXREYXRhBQlpZHhTdGF0aWMEB2R5bmFtaWMJAJEDAgUFdERhdGEFCmlkeER5bmFtaWMEBnN0YXR1cwkAkQMCBQdkeW5hbWljBQ50RHluYW1pY1N0YXR1cwMJAQIhPQIFBnN0YXR1cwIKUFJPQ0VTU0lORwkAAgEJAKwCAgkArAICAgtUb3VybmFtZW50IAkApAMBBQN0SWQCEiBpcyBub3QgUFJPQ0VTU0lORwQNcmVnaXN0cmF0aW9ucwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB2R5bmFtaWMFFXREeW5hbWljVG90YWxSZWdDb3VudAQMcGFpZEF0dGVtcHRzCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHZHluYW1pYwUVdER5bmFtaWNUb3RhbEF0dGVtcHRzBAdyZWdDb3N0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBRN0U3RhdGljUmVnaXN0ZXJDb3N0BAdhdHRDb3N0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBRJ0U3RhdGljQXR0ZW1wdENvc3QECXByaXplRnVuZAMJAGYCCQCQAwEFBnN0YXRpYwUQdFN0YXRpY1ByaXplRnVuZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnN0YXRpYwUQdFN0YXRpY1ByaXplRnVuZAAABAphd2FyZEZ1bmRzCQBkAgkAaQIJAGQCCQBoAgUNcmVnaXN0cmF0aW9ucwUHcmVnQ29zdAkAaAIFDHBhaWRBdHRlbXB0cwUHYXR0Q29zdAACBQlwcml6ZUZ1bmQECXVucGFpZEtleQkBFmtleVVucGFpZFJld2FyZHNCeVRvdXIBBQN0SWQEC3VucGFpZEZ1bmRzCQELdmFsdWVPckVsc2UCCQCfCAEFCXVucGFpZEtleQAABAtkdWNrQXNzZXRJZAkBDGR1Y2tCeUNhbGxlcgEIBQFpDG9yaWdpbkNhbGxlcgMJAQEhAQkBC3ZhbHVlT3JFbHNlAgkAoAgBCQEca2V5SXNSZWdpc3RlcmVkQnlUb3VyQW5kRHVjawIFA3RJZAULZHVja0Fzc2V0SWQHCQACAQkArAICCQCsAgIJAKwCAgIKWW91ciBkdWNrIAULZHVja0Fzc2V0SWQCISBpcyBub3QgcmVnaXN0ZXJlZCBhdCB0b3VybmFtZW50IAkApAMBBQN0SWQEDWJlc3RSZXN1bHRLZXkJARprZXlCZXN0UmVzdWx0QnlUb3VyQW5kRHVjawIFA3RJZAULZHVja0Fzc2V0SWQECGR1Y2tCZXN0CQELdmFsdWVPckVsc2UCCQCfCAEFDWJlc3RSZXN1bHRLZXkAAAMJAAACBQhkdWNrQmVzdAAACQACAQIYWW91ciBkdWNrIGdvdCB6ZXJvIHNjb3JlBAphd2FyZGVkS2V5CQEZa2V5SXNBd2FyZGVkQnlUb3VyQW5kRHVjawIFA3RJZAULZHVja0Fzc2V0SWQDCQELdmFsdWVPckVsc2UCCQCgCAEFCmF3YXJkZWRLZXkHCQACAQkArAICCQCsAgIJAKwCAgIKWW91ciBkdWNrIAULZHVja0Fzc2V0SWQCIiBpcyBhbHJlYWR5IGF3YXJkZWQgYXQgdG91cm5hbWVudCAJAKQDAQUDdElkBAxzdW1TY29yZXNLZXkJARJrZXlTdW1TY29yZXNCeVRvdXIBBQN0SWQECXN1bVNjb3JlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQxzdW1TY29yZXNLZXkAAAQHbGVhZGVycwkAkQMCBQdkeW5hbWljBQ90RHluYW1pY0xlYWRlcnMEC2xlYWRlcnNMaXN0AwMJAAACBQdsZWFkZXJzAgAGCQAAAgUHbGVhZGVycwIBIAUDbmlsCQC8CQIFB2xlYWRlcnMCASwECm51bUxlYWRlcnMJAJADAQULbGVhZGVyc0xpc3QDCQAAAgUKbnVtTGVhZGVycwAACQACAQkArAICAhlObyBsZWFkZXJzIGF0IHRvdXJuYW1lbnQgCQCkAwEFA3RJZAQJbnVtR3JhbmRzCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBRB0U3RhdGljTnVtR3JhbmRzBAl3aW5SZXN1bHQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdkeW5hbWljBRF0RHluYW1pY1dpblJlc3VsdAQPc3VtTGVhZGVyU2NvcmVzAwkAZgIFCm51bUxlYWRlcnMFCW51bUdyYW5kcwAAAwkBD2NvbnRhaW5zRWxlbWVudAIFC2xlYWRlcnNMaXN0BQtkdWNrQXNzZXRJZAkAAgECMEFzIG9uZSBvZiB3aW5uZXJzLCB5b3Ugd2lsbCBiZSBhd2FyZGVkIGJ5IGFkbWlucwkAaAIFCm51bUxlYWRlcnMFCXdpblJlc3VsdAQKeW91ckFtb3VudAkAlwMBCQDMCAIJAGsDBQhkdWNrQmVzdAUKYXdhcmRGdW5kcwkAZQIFCXN1bVNjb3JlcwUPc3VtTGVhZGVyU2NvcmVzCQDMCAIFC3VucGFpZEZ1bmRzBQNuaWwED25ld1VucGFpZEFtb3VudAkAZQIFC3VucGFpZEZ1bmRzBQp5b3VyQW1vdW50BBJ1cGRhdGVkRHluYW1pY0RhdGEJAQtkeW5hbWljRGF0YQUCCEFSQ0hJVkVECQCRAwIFB2R5bmFtaWMFD3REeW5hbWljTGVhZGVycwUJd2luUmVzdWx0BQ1yZWdpc3RyYXRpb25zBQxwYWlkQXR0ZW1wdHMEDWFyY2hpdmVBY3Rpb24DCQBnAgAABQ9uZXdVbnBhaWRBbW91bnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFmtleVRvdXJEeW5hbWljRGF0YUJ5SWQBBQN0SWQFEnVwZGF0ZWREeW5hbWljRGF0YQUDbmlsBQNuaWwEB2Fzc2V0SWQDCQBmAgkAkAMBBQZzdGF0aWMFDHRTdGF0aWNBc3NldAkA2QQBCQCRAwIFBnN0YXRpYwUMdFN0YXRpY0Fzc2V0BQp3bGdBc3NldElkBANsb2MJALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfBAxicmVha0FjdGlvbnMDAwkAAAIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFUCQAAAgkAkQMCCQCRAwIJAQtnZXRUb3VyRGF0YQIFBHRoaXMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNsb2MFD2xvY0lkeENvbnRpbmVudAUKaWR4RHluYW1pYwUOdER5bmFtaWNTdGF0dXMCClBST0NFU1NJTkcHCQD8BwQFD3N0YWtpbmdDb250cmFjdAIUYnJlYWtBdHRlbXB0Q2FsbGJhY2sFA25pbAUDbmlsBQR1bml0CQCUCgIJAM4IAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFCnlvdXJBbW91bnQFB2Fzc2V0SWQJAMwIAgkBDEJvb2xlYW5FbnRyeQIFCmF3YXJkZWRLZXkGCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQl1bnBhaWRLZXkFD25ld1VucGFpZEFtb3VudAUDbmlsBQ1hcmNoaXZlQWN0aW9uBQxicmVha0FjdGlvbnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4A3LbeLw==", "height": 2856325, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EbqdnZkud8gMSFxzk7VkShd3ueK5rto52aVPgKMwes6N Next: GMDENNUJ4RGF6CpPjrJ5Zr3c85fBWe3acXFGVD6m8PL1 Diff:
OldNewDifferences
166166 }
167167
168168
169-func as (ao) = {
170- let U = ao
171- if ($isInstanceOf(U, "Boolean"))
172- then {
173- let ap = U
174- ap
175- }
176- else throw("fail to cast into Boolean")
169+func as (at,au) = {
170+ let av = pow(10, 0, au, 0, 0, DOWN)
171+ let aw = toString((at % av))
172+ let ax = drop(toString(av), (1 + size(aw)))
173+ (((toString((at / av)) + ".") + ax) + aw)
177174 }
178175
179176
180-func at (au,av) = {
181- let aw = pow(10, 0, av, 0, 0, DOWN)
182- let ax = toString((au % aw))
183- let ay = drop(toString(aw), (1 + size(ax)))
184- (((toString((au / aw)) + ".") + ay) + ax)
177+func ay (at,az) = {
178+ let aA = toString(at)
179+ let ax = drop(toString(pow(10, 0, (az - size(aA)), 0, 0, DOWN)), 1)
180+ (ax + aA)
185181 }
186182
187183
188-func az (au,aA) = {
189- let aB = toString(au)
190- let ay = drop(toString(pow(10, 0, (aA - size(aB)), 0, 0, DOWN)), 1)
191- (ay + aB)
192- }
184+let aB = 1296000000
193185
186+let aC = 3600000
194187
195-let aC = 1296000000
196-
197-let aD = 3600000
198-
199-let aE = [toString(this), {
188+let aD = [toString(this), {
200189 let U = S
201190 if ((base58'2W' == U))
202191 then "3PEe2RELUHCFCBsmSCNcBJ8N3URLVQende7"
205194 else throw("Unknown chain")
206195 }]
207196
208-func aF (aG,aH,aI,aJ,aK,aL,aM,aN,aO) = makeString(["%s%d%d%d%d%d%d%d%s", aG, toString(aH), toString(aI), toString(aJ), toString(aK), toString(aL), toString(aM), toString(aN), aO], V)
197+func aE (aF,aG,aH,aI,aJ,aK,aL,aM,aN) = makeString(["%s%d%d%d%d%d%d%d%s", aF, toString(aG), toString(aH), toString(aI), toString(aJ), toString(aK), toString(aL), toString(aM), aN], V)
209198
210199
211-func aP (aQ,aR,aS,aT,aU) = makeString_2C(["%s%s%d%d%d", aQ, aR, toString(aS), toString(aT), toString(aU)], V)
200+func aO (aP,aQ,aR,aS,aT) = makeString_2C(["%s%s%d%d%d", aP, aQ, toString(aR), toString(aS), toString(aT)], V)
212201
213202
214-func aV () = aq(reentrantInvoke(aj, "saveLastTx", nil, nil))
203+func aU () = aq(reentrantInvoke(aj, "saveLastTx", nil, nil))
215204
216205
217-func aW (aX) = valueOrErrorMessage(getString(aj, d(toString(aX))), "You don't have a duck staked")
206+func aV (aW) = valueOrErrorMessage(getString(aj, d(toString(aW))), "You don't have a duck staked")
218207
219208
220-@Callable(aY)
221-func createTournament (aK,aL,aH,aI,aM,aN,aO) = {
222- let aX = toString(aY.caller)
223- if (!(containsElement(aE, aX)))
209+@Callable(aX)
210+func createTournament (aJ,aK,aG,aH,aL,aM,aN) = {
211+ let aW = toString(aX.caller)
212+ if (!(containsElement(aD, aW)))
224213 then throw("Permission denied")
225214 else {
226215 let O = getInteger(h)
227216 let j = if (isDefined(O))
228217 then {
229- let aZ = value(O)
230- let L = valueOrErrorMessage(getString(k(aZ)), (("Error reading tournament " + toString(aZ)) + " data"))
231- let aQ = split(L, V)[D]
232- if (if ((aQ != "ARCHIVED"))
233- then (aQ != "PROCESSING")
218+ let aY = value(O)
219+ let L = valueOrErrorMessage(getString(k(aY)), (("Error reading tournament " + toString(aY)) + " data"))
220+ let aP = split(L, V)[D]
221+ if (if ((aP != "ARCHIVED"))
222+ then (aP != "PROCESSING")
234223 else false)
235- then throw(("Current tournement is not completed, status=" + aQ))
236- else (aZ + 1)
224+ then throw(("Current tournement is not completed, status=" + aP))
225+ else (aY + 1)
237226 }
238227 else 1
239228 let Q = lastBlock.timestamp
240- if ((Q > aK))
241- then throw(((("startTime=" + toString(aK)) + " < creationTime=") + toString(Q)))
242- else if ((aK > aL))
243- then throw(((("endTime=" + toString(aL)) + " < startTime=") + toString(aK)))
244- else if (((aL - aK) > aC))
245- then throw(((("Tournament period exceeds max: " + toString((aL - aK))) + " > ") + toString(aC)))
246- else if (if ((0 > aH))
229+ if ((Q > aJ))
230+ then throw(((("startTime=" + toString(aJ)) + " < creationTime=") + toString(Q)))
231+ else if ((aJ > aK))
232+ then throw(((("endTime=" + toString(aK)) + " < startTime=") + toString(aJ)))
233+ else if (((aK - aJ) > aB))
234+ then throw(((("Tournament period exceeds max: " + toString((aK - aJ))) + " > ") + toString(aB)))
235+ else if (if ((0 > aG))
247236 then true
248- else (0 > aI))
249- then throw(((("Cost should be positive, but passed " + toString(aH)) + " and ") + toString(aI)))
250- else if ((0 > aM))
237+ else (0 > aH))
238+ then throw(((("Cost should be positive, but passed " + toString(aG)) + " and ") + toString(aH)))
239+ else if ((0 > aL))
251240 then throw("Number of Grand Prizes should be non-negative")
252- else if ((0 > aN))
241+ else if ((0 > aM))
253242 then throw("Prize Fund should be non-negative")
254- else $Tuple2([IntegerEntry(h, j), StringEntry(i(j), aF(toBase58String(aY.transactionId), aH, aI, Q, aK, aL, aM, aN, aO)), StringEntry(k(j), aP("CREATED", " ", 0, 0, 0))], j)
243+ else $Tuple2([IntegerEntry(h, j), StringEntry(i(j), aE(toBase58String(aX.transactionId), aG, aH, Q, aJ, aK, aL, aM, aN)), StringEntry(k(j), aO("CREATED", " ", 0, 0, 0))], j)
255244 }
256245 }
257246
258247
259248
260-@Callable(aY)
249+@Callable(aX)
261250 func register () = {
262- let ba = aV()
263- if ((ba == ba))
251+ let aZ = aU()
252+ if ((aZ == aZ))
264253 then {
265254 let O = valueOrErrorMessage(getInteger(h), "No active tournaments")
266255 let Q = lastBlock.timestamp
267256 let R = I(this, O)
268257 let K = R[u]
269258 let L = R[v]
270- let aQ = L[D]
271- if (!(if (if (if ((aQ == "CREATED"))
259+ let aP = L[D]
260+ if (!(if (if (if ((aP == "CREATED"))
272261 then (Q > parseIntValue(K[y]))
273262 else false)
274- then ((parseIntValue(K[z]) - aD) > Q)
263+ then ((parseIntValue(K[z]) - aC) > Q)
275264 else false)
276265 then true
277- else if ((aQ == "INPROGRESS"))
278- then ((parseIntValue(K[z]) - aD) > Q)
266+ else if ((aP == "INPROGRESS"))
267+ then ((parseIntValue(K[z]) - aC) > Q)
279268 else false))
280269 then throw("Cannot register now")
281270 else {
282- let bb = parseIntValue(K[w])
283- let bc = if ((size(K) > C))
271+ let ba = parseIntValue(K[w])
272+ let bb = if ((size(K) > C))
284273 then fromBase58String(K[C])
285274 else am
286- let bd = valueOrErrorMessage(assetInfo(bc), "No assetInfo available")
287- let be = bd.name
288- let bf = bd.decimals
289- let bg = if ((bb > 0))
290- then if ((size(aY.payments) != 1))
275+ let bc = valueOrErrorMessage(assetInfo(bb), "No assetInfo available")
276+ let bd = bc.name
277+ let be = bc.decimals
278+ let bf = if ((ba > 0))
279+ then if ((size(aX.payments) != 1))
291280 then throw("exactly 1 payment must be attached")
292281 else {
293- let bh = aY.payments[0]
294- if (if (!(isDefined(bh.assetId)))
282+ let bg = aX.payments[0]
283+ if (if (!(isDefined(bg.assetId)))
295284 then true
296- else (value(bh.assetId) != bc))
297- then throw((be + " payments only!"))
298- else bh.amount
285+ else (value(bg.assetId) != bb))
286+ then throw((bd + " payments only!"))
287+ else bg.amount
299288 }
300- else if ((size(aY.payments) != 0))
289+ else if ((size(aX.payments) != 0))
301290 then throw("No payments required")
302291 else 0
303- if ((bg != bb))
304- then throw(((("Need payment of " + at(bb, bf)) + " ") + be))
292+ if ((bf != ba))
293+ then throw(((("Need payment of " + as(ba, be)) + " ") + bd))
305294 else {
306- let g = aW(aY.originCaller)
307- let bi = l(O)
308- let bj = valueOrElse(getString(bi), "")
295+ let g = aV(aX.originCaller)
296+ let bh = l(O)
297+ let bi = valueOrElse(getString(bh), "")
309298 if (if (valueOrElse(getBoolean(p(O, g)), false))
310299 then true
311- else contains(bj, g))
300+ else contains(bi, g))
312301 then throw(((("Your duck " + g) + " is already registered at tournament ") + toString(O)))
313302 else {
314- let bk = aP("INPROGRESS", L[E], parseIntValue(L[F]), (parseIntValue(L[G]) + 1), parseIntValue(L[H]))
315- $Tuple2([IntegerEntry(o(g), O), BooleanEntry(p(O, g), true), StringEntry(bi, if ((bj == ""))
303+ let bj = aO("INPROGRESS", L[E], parseIntValue(L[F]), (parseIntValue(L[G]) + 1), parseIntValue(L[H]))
304+ $Tuple2([IntegerEntry(o(g), O), BooleanEntry(p(O, g), true), StringEntry(bh, if ((bi == ""))
316305 then (g + ":000")
317- else (((bj + "_") + g) + ":000")), StringEntry(k(O), bk)], ba)
306+ else (((bi + "_") + g) + ":000")), StringEntry(k(O), bj)], aZ)
318307 }
319308 }
320309 }
324313
325314
326315
327-@Callable(aY)
316+@Callable(aX)
328317 func newAttempt () = {
329- let ba = aV()
330- if ((ba == ba))
318+ let aZ = aU()
319+ if ((aZ == aZ))
331320 then {
332- let g = aW(aY.originCaller)
333- let bl = as(invoke(aj, "checkDeliveryCallback", [g], nil))
334- if (bl)
335- then throw("newAttempt_checkDelivery")
336- else {
337- let O = valueOrErrorMessage(getInteger(h), "No active tournaments")
338- let Q = lastBlock.timestamp
339- let R = I(this, O)
340- let K = R[u]
341- let L = R[v]
342- let aQ = L[D]
343- if (!(if ((aQ == "INPROGRESS"))
344- then ((parseIntValue(K[z]) - aD) > Q)
345- else false))
346- then throw("Attempt is not possible")
347- else if (!(valueOrElse(getBoolean(p(O, g)), false)))
348- then throw(((("Your duck " + g) + " is not registered at tournament ") + toString(O)))
349- else {
350- let bm = r(O, g)
351- let bn = getInteger(bm)
352- let bo = if (!(isDefined(bn)))
353- then $Tuple2(0, 0)
354- else if ((size(aY.payments) != 1))
355- then throw("exactly 1 payment must be attached")
321+ let g = aV(aX.originCaller)
322+ let O = valueOrErrorMessage(getInteger(h), "No active tournaments")
323+ let Q = lastBlock.timestamp
324+ let R = I(this, O)
325+ let K = R[u]
326+ let L = R[v]
327+ let aP = L[D]
328+ if (!(if ((aP == "INPROGRESS"))
329+ then ((parseIntValue(K[z]) - aC) > Q)
330+ else false))
331+ then throw("Attempt is not possible")
332+ else if (!(valueOrElse(getBoolean(p(O, g)), false)))
333+ then throw(((("Your duck " + g) + " is not registered at tournament ") + toString(O)))
334+ else {
335+ let bk = r(O, g)
336+ let bl = getInteger(bk)
337+ let bm = if (!(isDefined(bl)))
338+ then $Tuple2(0, 0)
339+ else if ((size(aX.payments) != 1))
340+ then throw("exactly 1 payment must be attached")
341+ else {
342+ let bg = aX.payments[0]
343+ let bb = if ((size(K) > C))
344+ then fromBase58String(K[C])
345+ else am
346+ let bc = valueOrErrorMessage(assetInfo(bb), "No assetInfo available")
347+ let bd = bc.name
348+ let be = bc.decimals
349+ let bn = bg.amount
350+ if (if (!(isDefined(bg.assetId)))
351+ then true
352+ else (value(bg.assetId) != bb))
353+ then throw((bd + " payments only!"))
356354 else {
357- let bh = aY.payments[0]
358- let bc = if ((size(K) > C))
359- then fromBase58String(K[C])
360- else am
361- let bd = valueOrErrorMessage(assetInfo(bc), "No assetInfo available")
362- let be = bd.name
363- let bf = bd.decimals
364- let bp = bh.amount
365- if (if (!(isDefined(bh.assetId)))
366- then true
367- else (value(bh.assetId) != bc))
368- then throw((be + " payments only!"))
369- else {
370- let bq = parseIntValue(K[x])
371- if ((bp != bq))
372- then throw(((("Need payment of " + at(bq, bf)) + " ") + be))
373- else $Tuple2((value(bn) + 1), 1)
374- }
355+ let bo = parseIntValue(K[x])
356+ if ((bn != bo))
357+ then throw(((("Need payment of " + as(bo, be)) + " ") + bd))
358+ else $Tuple2((value(bl) + 1), 1)
375359 }
376- let br = bo._1
377- let bs = bo._2
378- let bk = aP("INPROGRESS", L[E], parseIntValue(L[F]), parseIntValue(L[G]), (parseIntValue(L[H]) + bs))
379- let bt = an(invoke(aj, "initDuckTourAttempt", [g], nil))
380- $Tuple2([IntegerEntry(bm, br), StringEntry(k(O), bk)], [ba, br, bt])
381- }
382- }
360+ }
361+ let bp = bm._1
362+ let bq = bm._2
363+ let bj = aO("INPROGRESS", L[E], parseIntValue(L[F]), parseIntValue(L[G]), (parseIntValue(L[H]) + bq))
364+ let br = an(invoke(aj, "initDuckTourAttempt", [g], nil))
365+ $Tuple2([IntegerEntry(bk, bp), StringEntry(k(O), bj)], [aZ, bp, br])
366+ }
383367 }
384368 else throw("Strict value is not equal to itself.")
385369 }
386370
387371
388372
389-@Callable(aY)
390-func saveDuckResult (g,bu) = if ((aY.caller != aj))
373+@Callable(aX)
374+func saveDuckResult (g,bs) = if ((aX.caller != aj))
391375 then throw("Access denied")
392376 else {
393377 let O = valueOrErrorMessage(getInteger(h), "No active tournaments")
394378 let R = I(this, O)
395379 let K = R[u]
396380 let L = R[v]
397- let bv = valueOrElse(getString(aj, f(g)), a)
398- let bw = s(O, g)
399- let bx = m(O)
400- let by = valueOrElse(getInteger(bx), 0)
401- if (M(this, bv))
381+ let bt = valueOrElse(getString(aj, f(g)), a)
382+ let bu = s(O, g)
383+ let bv = m(O)
384+ let bw = valueOrElse(getInteger(bv), 0)
385+ if (M(this, bt))
402386 then {
403- let bz = valueOrElse(getInteger(bw), 0)
404- let bi = l(O)
405- let bj = valueOrElse(getString(bi), "")
406- let bA = if ((bu > bz))
407- then if (!(contains(bj, g)))
387+ let bx = valueOrElse(getInteger(bu), 0)
388+ let bh = l(O)
389+ let bi = valueOrElse(getString(bh), "")
390+ let by = if ((bs > bx))
391+ then if (!(contains(bi, g)))
408392 then throw(("scoreBoard does not contain " + g))
409393 else {
410- let bB = parseIntValue(L[F])
411- let aR = L[E]
412- let bC = if (if ((aR == ""))
394+ let bz = parseIntValue(L[F])
395+ let aQ = L[E]
396+ let bA = if (if ((aQ == ""))
413397 then true
414- else (aR == " "))
398+ else (aQ == " "))
415399 then nil
416- else split_4C(aR, ",")
417- let bD = if ((bu > bB))
400+ else split_4C(aQ, ",")
401+ let bB = if ((bs > bz))
418402 then [g]
419- else if (if ((bB > bu))
403+ else if (if ((bz > bs))
420404 then true
421- else containsElement(bC, g))
422- then bC
423- else (bC :+ g)
424- let bk = aP("INPROGRESS", makeString_2C(bD, ","), max([bu, bB]), parseIntValue(L[G]), parseIntValue(L[H]))
425- let bE = split_51C(bj, g)
426- $Tuple3(((((bE[0] + g) + ":") + az(bu, 3)) + drop(bE[1], 4)), ((by + bu) - bz), [StringEntry(k(O), bk)])
405+ else containsElement(bA, g))
406+ then bA
407+ else (bA :+ g)
408+ let bj = aO("INPROGRESS", makeString_2C(bB, ","), max([bs, bz]), parseIntValue(L[G]), parseIntValue(L[H]))
409+ let bC = split_51C(bi, g)
410+ $Tuple3(((((bC[0] + g) + ":") + ay(bs, 3)) + drop(bC[1], 4)), ((bw + bs) - bx), [StringEntry(k(O), bj)])
427411 }
428- else $Tuple3(bj, by, nil)
429- let bF = bA._1
430- let bG = bA._2
431- let bH = bA._3
432- $Tuple2(([IntegerEntry(bw, max([bz, bu])), IntegerEntry(bx, bG), StringEntry(t(O, g), toBase58String(aY.transactionId)), StringEntry(bi, bF)] ++ bH), 0)
412+ else $Tuple3(bi, bw, nil)
413+ let bD = by._1
414+ let bE = by._2
415+ let bF = by._3
416+ $Tuple2(([IntegerEntry(bu, max([bx, bs])), IntegerEntry(bv, bE), StringEntry(t(O, g), toBase58String(aX.transactionId)), StringEntry(bh, bD)] ++ bF), 0)
433417 }
434418 else $Tuple2(nil, 0)
435419 }
436420
437421
438422
439-@Callable(aY)
423+@Callable(aX)
440424 func processTournament (j) = {
441- let aX = toString(aY.caller)
442- if (!(containsElement(aE, aX)))
425+ let aW = toString(aX.caller)
426+ if (!(containsElement(aD, aW)))
443427 then throw("Permission denied")
444428 else {
445429 let Q = lastBlock.timestamp
446430 let R = I(this, j)
447431 let K = R[u]
448432 let L = R[v]
449- let aQ = L[D]
450- let bI = parseIntValue(L[G])
451- let bJ = parseIntValue(L[H])
452- let bb = parseIntValue(K[w])
453- let bq = parseIntValue(K[x])
454- if ((aQ == "ARCHIVED"))
433+ let aP = L[D]
434+ let bG = parseIntValue(L[G])
435+ let bH = parseIntValue(L[H])
436+ let ba = parseIntValue(K[w])
437+ let bo = parseIntValue(K[x])
438+ if ((aP == "ARCHIVED"))
455439 then throw((("Tournament " + toString(j)) + " is already ARCHIVED"))
456- else if (if ((aQ == "INPROGRESS"))
440+ else if (if ((aP == "INPROGRESS"))
457441 then (parseIntValue(K[z]) > Q)
458442 else false)
459443 then throw((("Tournament " + toString(j)) + " is not over yet"))
460444 else {
461- let bk = aP("PROCESSING", L[E], parseIntValue(L[F]), bI, bJ)
462- let aN = if ((size(K) > B))
445+ let bj = aO("PROCESSING", L[E], parseIntValue(L[F]), bG, bH)
446+ let aM = if ((size(K) > B))
463447 then parseIntValue(K[B])
464448 else 0
465- let bK = ((((bI * bb) + (bJ * bq)) / 2) + aN)
466- $Tuple2([StringEntry(k(j), bk), IntegerEntry(n(j), bK)], 0)
449+ let bI = ((((bG * ba) + (bH * bo)) / 2) + aM)
450+ $Tuple2([StringEntry(k(j), bj), IntegerEntry(n(j), bI)], 0)
467451 }
468452 }
469453 }
470454
471455
472456
473-@Callable(aY)
457+@Callable(aX)
474458 func claimPrize (j) = {
475- let ba = aV()
476- if ((ba == ba))
477- then if ((size(aY.payments) != 0))
459+ let aZ = aU()
460+ if ((aZ == aZ))
461+ then if ((size(aX.payments) != 0))
478462 then throw("No payments required")
479463 else {
480464 let R = I(this, j)
481465 let K = R[u]
482466 let L = R[v]
483- let aQ = L[D]
484- if ((aQ != "PROCESSING"))
467+ let aP = L[D]
468+ if ((aP != "PROCESSING"))
485469 then throw((("Tournament " + toString(j)) + " is not PROCESSING"))
486470 else {
487- let bI = parseIntValue(L[G])
488- let bJ = parseIntValue(L[H])
489- let bb = parseIntValue(K[w])
490- let bq = parseIntValue(K[x])
491- let aN = if ((size(K) > B))
471+ let bG = parseIntValue(L[G])
472+ let bH = parseIntValue(L[H])
473+ let ba = parseIntValue(K[w])
474+ let bo = parseIntValue(K[x])
475+ let aM = if ((size(K) > B))
492476 then parseIntValue(K[B])
493477 else 0
494- let bL = ((((bI * bb) + (bJ * bq)) / 2) + aN)
495- let bM = n(j)
496- let bN = valueOrElse(getInteger(bM), 0)
497- let g = aW(aY.originCaller)
478+ let bJ = ((((bG * ba) + (bH * bo)) / 2) + aM)
479+ let bK = n(j)
480+ let bL = valueOrElse(getInteger(bK), 0)
481+ let g = aV(aX.originCaller)
498482 if (!(valueOrElse(getBoolean(p(j, g)), false)))
499483 then throw(((("Your duck " + g) + " is not registered at tournament ") + toString(j)))
500484 else {
501- let bw = s(j, g)
502- let bO = valueOrElse(getInteger(bw), 0)
503- if ((bO == 0))
485+ let bu = s(j, g)
486+ let bM = valueOrElse(getInteger(bu), 0)
487+ if ((bM == 0))
504488 then throw("Your duck got zero score")
505489 else {
506- let bP = q(j, g)
507- if (valueOrElse(getBoolean(bP), false))
490+ let bN = q(j, g)
491+ if (valueOrElse(getBoolean(bN), false))
508492 then throw(((("Your duck " + g) + " is already awarded at tournament ") + toString(j)))
509493 else {
510- let bx = m(j)
511- let bQ = valueOrElse(getInteger(bx), 0)
512- let aR = L[E]
513- let bR = if (if ((aR == ""))
494+ let bv = m(j)
495+ let bO = valueOrElse(getInteger(bv), 0)
496+ let aQ = L[E]
497+ let bP = if (if ((aQ == ""))
514498 then true
515- else (aR == " "))
499+ else (aQ == " "))
516500 then nil
517- else split_4C(aR, ",")
518- let bS = size(bR)
519- if ((bS == 0))
501+ else split_4C(aQ, ",")
502+ let bQ = size(bP)
503+ if ((bQ == 0))
520504 then throw(("No leaders at tournament " + toString(j)))
521505 else {
522- let aM = parseIntValue(K[A])
523- let aS = parseIntValue(L[F])
524- let bT = if ((bS > aM))
506+ let aL = parseIntValue(K[A])
507+ let aR = parseIntValue(L[F])
508+ let bR = if ((bQ > aL))
525509 then 0
526- else if (containsElement(bR, g))
510+ else if (containsElement(bP, g))
527511 then throw("As one of winners, you will be awarded by admins")
528- else (bS * aS)
529- let bU = min([fraction(bO, bL, (bQ - bT)), bN])
530- let bV = (bN - bU)
531- let bk = aP("ARCHIVED", L[E], aS, bI, bJ)
532- let bW = if ((0 >= bV))
533- then [StringEntry(k(j), bk)]
512+ else (bQ * aR)
513+ let bS = min([fraction(bM, bJ, (bO - bR)), bL])
514+ let bT = (bL - bS)
515+ let bj = aO("ARCHIVED", L[E], aR, bG, bH)
516+ let bU = if ((0 >= bT))
517+ then [StringEntry(k(j), bj)]
534518 else nil
535- let bc = if ((size(K) > C))
519+ let bb = if ((size(K) > C))
536520 then fromBase58String(K[C])
537521 else am
538522 let P = split(valueOrElse(getString(aj, f(g)), a), "_")
539- let bX = if (if ((P[c] == "T"))
523+ let bV = if (if ((P[c] == "T"))
540524 then (I(this, parseIntValue(P[b]))[v][D] == "PROCESSING")
541525 else false)
542526 then invoke(aj, "breakAttemptCallback", nil, nil)
543527 else unit
544- $Tuple2(([ScriptTransfer(aY.caller, bU, bc), BooleanEntry(bP, true), IntegerEntry(bM, bV)] ++ bW), bX)
528+ $Tuple2(([ScriptTransfer(aX.caller, bS, bb), BooleanEntry(bN, true), IntegerEntry(bK, bT)] ++ bU), bV)
545529 }
546530 }
547531 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "Africa_F_Africa"
55
66 let b = 0
77
88 let c = 1
99
1010 func d (e) = ("stakedDuckByOwner_" + e)
1111
1212
1313 func f (g) = ("duckLocation_" + g)
1414
1515
1616 let h = "%s__lastTourId"
1717
1818 func i (j) = ("%s%d__tourStaticData__" + toString(j))
1919
2020
2121 func k (j) = ("%s%d__tourDynamicData__" + toString(j))
2222
2323
2424 func l (j) = ("%s%d__scoreBoard__" + toString(j))
2525
2626
2727 func m (j) = ("%s%d__sumScores__" + toString(j))
2828
2929
3030 func n (j) = ("%s%d__unpaidRewards__" + toString(j))
3131
3232
3333 func o (g) = ("%s%s__lastRegisteredTourByDuck__" + g)
3434
3535
3636 func p (j,g) = makeString(["%s%d%s__isRegisteredByTourAndDuck", toString(j), g], "__")
3737
3838
3939 func q (j,g) = makeString(["%s%d%s__isAwardedByTourAndDuck", toString(j), g], "__")
4040
4141
4242 func r (j,g) = makeString(["%s%d%s__lastAttemptByTourAndDuck", toString(j), g], "__")
4343
4444
4545 func s (j,g) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(j), g], "__")
4646
4747
4848 func t (j,g) = makeString(["%s%d%s__bestTxByTourAndDuck", toString(j), g], "__")
4949
5050
5151 let u = 0
5252
5353 let v = 1
5454
5555 let w = 2
5656
5757 let x = 3
5858
5959 let y = 5
6060
6161 let z = 6
6262
6363 let A = 7
6464
6565 let B = 8
6666
6767 let C = 9
6868
6969 let D = 1
7070
7171 let E = 2
7272
7373 let F = 3
7474
7575 let G = 4
7676
7777 let H = 5
7878
7979 func I (J,j) = {
8080 let K = split(valueOrErrorMessage(getString(J, i(j)), (("Error reading tournament " + toString(j)) + " data")), "__")
8181 let L = split_4C(valueOrErrorMessage(getString(J, k(j)), (("Error reading tournament " + toString(j)) + " data")), "__")
8282 [K, L]
8383 }
8484
8585
8686 func M (J,N) = {
8787 let O = valueOrElse(getInteger(J, h), 0)
8888 let P = split(N, "_")
8989 let Q = lastBlock.timestamp
9090 let R = I(J, O)
9191 let K = R[u]
9292 let L = R[v]
9393 if (if (if ((P[c] == "T"))
9494 then (parseIntValue(P[b]) == O)
9595 else false)
9696 then (L[D] == "INPROGRESS")
9797 else false)
9898 then (parseIntValue(K[z]) > Q)
9999 else false
100100 }
101101
102102
103103 let S = take(drop(this.bytes, 1), 1)
104104
105105 let T = {
106106 let U = S
107107 if ((base58'2W' == U))
108108 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
109109 else if ((base58'2T' == U))
110110 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
111111 else throw("Unknown chain")
112112 }
113113
114114 let V = "__"
115115
116116 func W (X,Y) = valueOrErrorMessage(getString(X, Y), makeString(["mandatory ", toString(X), ".", Y, " is not defined"], ""))
117117
118118
119119 let Z = 1
120120
121121 let aa = 4
122122
123123 func ab () = "%s__restConfig"
124124
125125
126126 func ac () = "%s__restAddr"
127127
128128
129129 func ad (ae) = split_4C(W(ae, ab()), V)
130130
131131
132132 func af (ag,ah) = valueOrErrorMessage(addressFromString(ag[ah]), ("Rest cfg doesn't contain address at index " + toString(ah)))
133133
134134
135135 let ai = addressFromStringValue(valueOrElse(getString(this, ac()), T))
136136
137137 let ag = ad(ai)
138138
139139 let aj = af(ag, Z)
140140
141141 let ak = af(ag, aa)
142142
143143 let al = "wlg_assetId"
144144
145145 let am = valueOrErrorMessage(getBinary(ak, al), "WLGOLD is not issued yet")
146146
147147 func an (ao) = {
148148 let U = ao
149149 if ($isInstanceOf(U, "String"))
150150 then {
151151 let ap = U
152152 ap
153153 }
154154 else throw("fail to cast into String")
155155 }
156156
157157
158158 func aq (ao) = {
159159 let U = ao
160160 if ($isInstanceOf(U, "Int"))
161161 then {
162162 let ar = U
163163 ar
164164 }
165165 else throw("fail to cast into Int")
166166 }
167167
168168
169-func as (ao) = {
170- let U = ao
171- if ($isInstanceOf(U, "Boolean"))
172- then {
173- let ap = U
174- ap
175- }
176- else throw("fail to cast into Boolean")
169+func as (at,au) = {
170+ let av = pow(10, 0, au, 0, 0, DOWN)
171+ let aw = toString((at % av))
172+ let ax = drop(toString(av), (1 + size(aw)))
173+ (((toString((at / av)) + ".") + ax) + aw)
177174 }
178175
179176
180-func at (au,av) = {
181- let aw = pow(10, 0, av, 0, 0, DOWN)
182- let ax = toString((au % aw))
183- let ay = drop(toString(aw), (1 + size(ax)))
184- (((toString((au / aw)) + ".") + ay) + ax)
177+func ay (at,az) = {
178+ let aA = toString(at)
179+ let ax = drop(toString(pow(10, 0, (az - size(aA)), 0, 0, DOWN)), 1)
180+ (ax + aA)
185181 }
186182
187183
188-func az (au,aA) = {
189- let aB = toString(au)
190- let ay = drop(toString(pow(10, 0, (aA - size(aB)), 0, 0, DOWN)), 1)
191- (ay + aB)
192- }
184+let aB = 1296000000
193185
186+let aC = 3600000
194187
195-let aC = 1296000000
196-
197-let aD = 3600000
198-
199-let aE = [toString(this), {
188+let aD = [toString(this), {
200189 let U = S
201190 if ((base58'2W' == U))
202191 then "3PEe2RELUHCFCBsmSCNcBJ8N3URLVQende7"
203192 else if ((base58'2T' == U))
204193 then "3MtBgJTaLxPB3C7UJD1UE8qjkHthfKvFQYY"
205194 else throw("Unknown chain")
206195 }]
207196
208-func aF (aG,aH,aI,aJ,aK,aL,aM,aN,aO) = makeString(["%s%d%d%d%d%d%d%d%s", aG, toString(aH), toString(aI), toString(aJ), toString(aK), toString(aL), toString(aM), toString(aN), aO], V)
197+func aE (aF,aG,aH,aI,aJ,aK,aL,aM,aN) = makeString(["%s%d%d%d%d%d%d%d%s", aF, toString(aG), toString(aH), toString(aI), toString(aJ), toString(aK), toString(aL), toString(aM), aN], V)
209198
210199
211-func aP (aQ,aR,aS,aT,aU) = makeString_2C(["%s%s%d%d%d", aQ, aR, toString(aS), toString(aT), toString(aU)], V)
200+func aO (aP,aQ,aR,aS,aT) = makeString_2C(["%s%s%d%d%d", aP, aQ, toString(aR), toString(aS), toString(aT)], V)
212201
213202
214-func aV () = aq(reentrantInvoke(aj, "saveLastTx", nil, nil))
203+func aU () = aq(reentrantInvoke(aj, "saveLastTx", nil, nil))
215204
216205
217-func aW (aX) = valueOrErrorMessage(getString(aj, d(toString(aX))), "You don't have a duck staked")
206+func aV (aW) = valueOrErrorMessage(getString(aj, d(toString(aW))), "You don't have a duck staked")
218207
219208
220-@Callable(aY)
221-func createTournament (aK,aL,aH,aI,aM,aN,aO) = {
222- let aX = toString(aY.caller)
223- if (!(containsElement(aE, aX)))
209+@Callable(aX)
210+func createTournament (aJ,aK,aG,aH,aL,aM,aN) = {
211+ let aW = toString(aX.caller)
212+ if (!(containsElement(aD, aW)))
224213 then throw("Permission denied")
225214 else {
226215 let O = getInteger(h)
227216 let j = if (isDefined(O))
228217 then {
229- let aZ = value(O)
230- let L = valueOrErrorMessage(getString(k(aZ)), (("Error reading tournament " + toString(aZ)) + " data"))
231- let aQ = split(L, V)[D]
232- if (if ((aQ != "ARCHIVED"))
233- then (aQ != "PROCESSING")
218+ let aY = value(O)
219+ let L = valueOrErrorMessage(getString(k(aY)), (("Error reading tournament " + toString(aY)) + " data"))
220+ let aP = split(L, V)[D]
221+ if (if ((aP != "ARCHIVED"))
222+ then (aP != "PROCESSING")
234223 else false)
235- then throw(("Current tournement is not completed, status=" + aQ))
236- else (aZ + 1)
224+ then throw(("Current tournement is not completed, status=" + aP))
225+ else (aY + 1)
237226 }
238227 else 1
239228 let Q = lastBlock.timestamp
240- if ((Q > aK))
241- then throw(((("startTime=" + toString(aK)) + " < creationTime=") + toString(Q)))
242- else if ((aK > aL))
243- then throw(((("endTime=" + toString(aL)) + " < startTime=") + toString(aK)))
244- else if (((aL - aK) > aC))
245- then throw(((("Tournament period exceeds max: " + toString((aL - aK))) + " > ") + toString(aC)))
246- else if (if ((0 > aH))
229+ if ((Q > aJ))
230+ then throw(((("startTime=" + toString(aJ)) + " < creationTime=") + toString(Q)))
231+ else if ((aJ > aK))
232+ then throw(((("endTime=" + toString(aK)) + " < startTime=") + toString(aJ)))
233+ else if (((aK - aJ) > aB))
234+ then throw(((("Tournament period exceeds max: " + toString((aK - aJ))) + " > ") + toString(aB)))
235+ else if (if ((0 > aG))
247236 then true
248- else (0 > aI))
249- then throw(((("Cost should be positive, but passed " + toString(aH)) + " and ") + toString(aI)))
250- else if ((0 > aM))
237+ else (0 > aH))
238+ then throw(((("Cost should be positive, but passed " + toString(aG)) + " and ") + toString(aH)))
239+ else if ((0 > aL))
251240 then throw("Number of Grand Prizes should be non-negative")
252- else if ((0 > aN))
241+ else if ((0 > aM))
253242 then throw("Prize Fund should be non-negative")
254- else $Tuple2([IntegerEntry(h, j), StringEntry(i(j), aF(toBase58String(aY.transactionId), aH, aI, Q, aK, aL, aM, aN, aO)), StringEntry(k(j), aP("CREATED", " ", 0, 0, 0))], j)
243+ else $Tuple2([IntegerEntry(h, j), StringEntry(i(j), aE(toBase58String(aX.transactionId), aG, aH, Q, aJ, aK, aL, aM, aN)), StringEntry(k(j), aO("CREATED", " ", 0, 0, 0))], j)
255244 }
256245 }
257246
258247
259248
260-@Callable(aY)
249+@Callable(aX)
261250 func register () = {
262- let ba = aV()
263- if ((ba == ba))
251+ let aZ = aU()
252+ if ((aZ == aZ))
264253 then {
265254 let O = valueOrErrorMessage(getInteger(h), "No active tournaments")
266255 let Q = lastBlock.timestamp
267256 let R = I(this, O)
268257 let K = R[u]
269258 let L = R[v]
270- let aQ = L[D]
271- if (!(if (if (if ((aQ == "CREATED"))
259+ let aP = L[D]
260+ if (!(if (if (if ((aP == "CREATED"))
272261 then (Q > parseIntValue(K[y]))
273262 else false)
274- then ((parseIntValue(K[z]) - aD) > Q)
263+ then ((parseIntValue(K[z]) - aC) > Q)
275264 else false)
276265 then true
277- else if ((aQ == "INPROGRESS"))
278- then ((parseIntValue(K[z]) - aD) > Q)
266+ else if ((aP == "INPROGRESS"))
267+ then ((parseIntValue(K[z]) - aC) > Q)
279268 else false))
280269 then throw("Cannot register now")
281270 else {
282- let bb = parseIntValue(K[w])
283- let bc = if ((size(K) > C))
271+ let ba = parseIntValue(K[w])
272+ let bb = if ((size(K) > C))
284273 then fromBase58String(K[C])
285274 else am
286- let bd = valueOrErrorMessage(assetInfo(bc), "No assetInfo available")
287- let be = bd.name
288- let bf = bd.decimals
289- let bg = if ((bb > 0))
290- then if ((size(aY.payments) != 1))
275+ let bc = valueOrErrorMessage(assetInfo(bb), "No assetInfo available")
276+ let bd = bc.name
277+ let be = bc.decimals
278+ let bf = if ((ba > 0))
279+ then if ((size(aX.payments) != 1))
291280 then throw("exactly 1 payment must be attached")
292281 else {
293- let bh = aY.payments[0]
294- if (if (!(isDefined(bh.assetId)))
282+ let bg = aX.payments[0]
283+ if (if (!(isDefined(bg.assetId)))
295284 then true
296- else (value(bh.assetId) != bc))
297- then throw((be + " payments only!"))
298- else bh.amount
285+ else (value(bg.assetId) != bb))
286+ then throw((bd + " payments only!"))
287+ else bg.amount
299288 }
300- else if ((size(aY.payments) != 0))
289+ else if ((size(aX.payments) != 0))
301290 then throw("No payments required")
302291 else 0
303- if ((bg != bb))
304- then throw(((("Need payment of " + at(bb, bf)) + " ") + be))
292+ if ((bf != ba))
293+ then throw(((("Need payment of " + as(ba, be)) + " ") + bd))
305294 else {
306- let g = aW(aY.originCaller)
307- let bi = l(O)
308- let bj = valueOrElse(getString(bi), "")
295+ let g = aV(aX.originCaller)
296+ let bh = l(O)
297+ let bi = valueOrElse(getString(bh), "")
309298 if (if (valueOrElse(getBoolean(p(O, g)), false))
310299 then true
311- else contains(bj, g))
300+ else contains(bi, g))
312301 then throw(((("Your duck " + g) + " is already registered at tournament ") + toString(O)))
313302 else {
314- let bk = aP("INPROGRESS", L[E], parseIntValue(L[F]), (parseIntValue(L[G]) + 1), parseIntValue(L[H]))
315- $Tuple2([IntegerEntry(o(g), O), BooleanEntry(p(O, g), true), StringEntry(bi, if ((bj == ""))
303+ let bj = aO("INPROGRESS", L[E], parseIntValue(L[F]), (parseIntValue(L[G]) + 1), parseIntValue(L[H]))
304+ $Tuple2([IntegerEntry(o(g), O), BooleanEntry(p(O, g), true), StringEntry(bh, if ((bi == ""))
316305 then (g + ":000")
317- else (((bj + "_") + g) + ":000")), StringEntry(k(O), bk)], ba)
306+ else (((bi + "_") + g) + ":000")), StringEntry(k(O), bj)], aZ)
318307 }
319308 }
320309 }
321310 }
322311 else throw("Strict value is not equal to itself.")
323312 }
324313
325314
326315
327-@Callable(aY)
316+@Callable(aX)
328317 func newAttempt () = {
329- let ba = aV()
330- if ((ba == ba))
318+ let aZ = aU()
319+ if ((aZ == aZ))
331320 then {
332- let g = aW(aY.originCaller)
333- let bl = as(invoke(aj, "checkDeliveryCallback", [g], nil))
334- if (bl)
335- then throw("newAttempt_checkDelivery")
336- else {
337- let O = valueOrErrorMessage(getInteger(h), "No active tournaments")
338- let Q = lastBlock.timestamp
339- let R = I(this, O)
340- let K = R[u]
341- let L = R[v]
342- let aQ = L[D]
343- if (!(if ((aQ == "INPROGRESS"))
344- then ((parseIntValue(K[z]) - aD) > Q)
345- else false))
346- then throw("Attempt is not possible")
347- else if (!(valueOrElse(getBoolean(p(O, g)), false)))
348- then throw(((("Your duck " + g) + " is not registered at tournament ") + toString(O)))
349- else {
350- let bm = r(O, g)
351- let bn = getInteger(bm)
352- let bo = if (!(isDefined(bn)))
353- then $Tuple2(0, 0)
354- else if ((size(aY.payments) != 1))
355- then throw("exactly 1 payment must be attached")
321+ let g = aV(aX.originCaller)
322+ let O = valueOrErrorMessage(getInteger(h), "No active tournaments")
323+ let Q = lastBlock.timestamp
324+ let R = I(this, O)
325+ let K = R[u]
326+ let L = R[v]
327+ let aP = L[D]
328+ if (!(if ((aP == "INPROGRESS"))
329+ then ((parseIntValue(K[z]) - aC) > Q)
330+ else false))
331+ then throw("Attempt is not possible")
332+ else if (!(valueOrElse(getBoolean(p(O, g)), false)))
333+ then throw(((("Your duck " + g) + " is not registered at tournament ") + toString(O)))
334+ else {
335+ let bk = r(O, g)
336+ let bl = getInteger(bk)
337+ let bm = if (!(isDefined(bl)))
338+ then $Tuple2(0, 0)
339+ else if ((size(aX.payments) != 1))
340+ then throw("exactly 1 payment must be attached")
341+ else {
342+ let bg = aX.payments[0]
343+ let bb = if ((size(K) > C))
344+ then fromBase58String(K[C])
345+ else am
346+ let bc = valueOrErrorMessage(assetInfo(bb), "No assetInfo available")
347+ let bd = bc.name
348+ let be = bc.decimals
349+ let bn = bg.amount
350+ if (if (!(isDefined(bg.assetId)))
351+ then true
352+ else (value(bg.assetId) != bb))
353+ then throw((bd + " payments only!"))
356354 else {
357- let bh = aY.payments[0]
358- let bc = if ((size(K) > C))
359- then fromBase58String(K[C])
360- else am
361- let bd = valueOrErrorMessage(assetInfo(bc), "No assetInfo available")
362- let be = bd.name
363- let bf = bd.decimals
364- let bp = bh.amount
365- if (if (!(isDefined(bh.assetId)))
366- then true
367- else (value(bh.assetId) != bc))
368- then throw((be + " payments only!"))
369- else {
370- let bq = parseIntValue(K[x])
371- if ((bp != bq))
372- then throw(((("Need payment of " + at(bq, bf)) + " ") + be))
373- else $Tuple2((value(bn) + 1), 1)
374- }
355+ let bo = parseIntValue(K[x])
356+ if ((bn != bo))
357+ then throw(((("Need payment of " + as(bo, be)) + " ") + bd))
358+ else $Tuple2((value(bl) + 1), 1)
375359 }
376- let br = bo._1
377- let bs = bo._2
378- let bk = aP("INPROGRESS", L[E], parseIntValue(L[F]), parseIntValue(L[G]), (parseIntValue(L[H]) + bs))
379- let bt = an(invoke(aj, "initDuckTourAttempt", [g], nil))
380- $Tuple2([IntegerEntry(bm, br), StringEntry(k(O), bk)], [ba, br, bt])
381- }
382- }
360+ }
361+ let bp = bm._1
362+ let bq = bm._2
363+ let bj = aO("INPROGRESS", L[E], parseIntValue(L[F]), parseIntValue(L[G]), (parseIntValue(L[H]) + bq))
364+ let br = an(invoke(aj, "initDuckTourAttempt", [g], nil))
365+ $Tuple2([IntegerEntry(bk, bp), StringEntry(k(O), bj)], [aZ, bp, br])
366+ }
383367 }
384368 else throw("Strict value is not equal to itself.")
385369 }
386370
387371
388372
389-@Callable(aY)
390-func saveDuckResult (g,bu) = if ((aY.caller != aj))
373+@Callable(aX)
374+func saveDuckResult (g,bs) = if ((aX.caller != aj))
391375 then throw("Access denied")
392376 else {
393377 let O = valueOrErrorMessage(getInteger(h), "No active tournaments")
394378 let R = I(this, O)
395379 let K = R[u]
396380 let L = R[v]
397- let bv = valueOrElse(getString(aj, f(g)), a)
398- let bw = s(O, g)
399- let bx = m(O)
400- let by = valueOrElse(getInteger(bx), 0)
401- if (M(this, bv))
381+ let bt = valueOrElse(getString(aj, f(g)), a)
382+ let bu = s(O, g)
383+ let bv = m(O)
384+ let bw = valueOrElse(getInteger(bv), 0)
385+ if (M(this, bt))
402386 then {
403- let bz = valueOrElse(getInteger(bw), 0)
404- let bi = l(O)
405- let bj = valueOrElse(getString(bi), "")
406- let bA = if ((bu > bz))
407- then if (!(contains(bj, g)))
387+ let bx = valueOrElse(getInteger(bu), 0)
388+ let bh = l(O)
389+ let bi = valueOrElse(getString(bh), "")
390+ let by = if ((bs > bx))
391+ then if (!(contains(bi, g)))
408392 then throw(("scoreBoard does not contain " + g))
409393 else {
410- let bB = parseIntValue(L[F])
411- let aR = L[E]
412- let bC = if (if ((aR == ""))
394+ let bz = parseIntValue(L[F])
395+ let aQ = L[E]
396+ let bA = if (if ((aQ == ""))
413397 then true
414- else (aR == " "))
398+ else (aQ == " "))
415399 then nil
416- else split_4C(aR, ",")
417- let bD = if ((bu > bB))
400+ else split_4C(aQ, ",")
401+ let bB = if ((bs > bz))
418402 then [g]
419- else if (if ((bB > bu))
403+ else if (if ((bz > bs))
420404 then true
421- else containsElement(bC, g))
422- then bC
423- else (bC :+ g)
424- let bk = aP("INPROGRESS", makeString_2C(bD, ","), max([bu, bB]), parseIntValue(L[G]), parseIntValue(L[H]))
425- let bE = split_51C(bj, g)
426- $Tuple3(((((bE[0] + g) + ":") + az(bu, 3)) + drop(bE[1], 4)), ((by + bu) - bz), [StringEntry(k(O), bk)])
405+ else containsElement(bA, g))
406+ then bA
407+ else (bA :+ g)
408+ let bj = aO("INPROGRESS", makeString_2C(bB, ","), max([bs, bz]), parseIntValue(L[G]), parseIntValue(L[H]))
409+ let bC = split_51C(bi, g)
410+ $Tuple3(((((bC[0] + g) + ":") + ay(bs, 3)) + drop(bC[1], 4)), ((bw + bs) - bx), [StringEntry(k(O), bj)])
427411 }
428- else $Tuple3(bj, by, nil)
429- let bF = bA._1
430- let bG = bA._2
431- let bH = bA._3
432- $Tuple2(([IntegerEntry(bw, max([bz, bu])), IntegerEntry(bx, bG), StringEntry(t(O, g), toBase58String(aY.transactionId)), StringEntry(bi, bF)] ++ bH), 0)
412+ else $Tuple3(bi, bw, nil)
413+ let bD = by._1
414+ let bE = by._2
415+ let bF = by._3
416+ $Tuple2(([IntegerEntry(bu, max([bx, bs])), IntegerEntry(bv, bE), StringEntry(t(O, g), toBase58String(aX.transactionId)), StringEntry(bh, bD)] ++ bF), 0)
433417 }
434418 else $Tuple2(nil, 0)
435419 }
436420
437421
438422
439-@Callable(aY)
423+@Callable(aX)
440424 func processTournament (j) = {
441- let aX = toString(aY.caller)
442- if (!(containsElement(aE, aX)))
425+ let aW = toString(aX.caller)
426+ if (!(containsElement(aD, aW)))
443427 then throw("Permission denied")
444428 else {
445429 let Q = lastBlock.timestamp
446430 let R = I(this, j)
447431 let K = R[u]
448432 let L = R[v]
449- let aQ = L[D]
450- let bI = parseIntValue(L[G])
451- let bJ = parseIntValue(L[H])
452- let bb = parseIntValue(K[w])
453- let bq = parseIntValue(K[x])
454- if ((aQ == "ARCHIVED"))
433+ let aP = L[D]
434+ let bG = parseIntValue(L[G])
435+ let bH = parseIntValue(L[H])
436+ let ba = parseIntValue(K[w])
437+ let bo = parseIntValue(K[x])
438+ if ((aP == "ARCHIVED"))
455439 then throw((("Tournament " + toString(j)) + " is already ARCHIVED"))
456- else if (if ((aQ == "INPROGRESS"))
440+ else if (if ((aP == "INPROGRESS"))
457441 then (parseIntValue(K[z]) > Q)
458442 else false)
459443 then throw((("Tournament " + toString(j)) + " is not over yet"))
460444 else {
461- let bk = aP("PROCESSING", L[E], parseIntValue(L[F]), bI, bJ)
462- let aN = if ((size(K) > B))
445+ let bj = aO("PROCESSING", L[E], parseIntValue(L[F]), bG, bH)
446+ let aM = if ((size(K) > B))
463447 then parseIntValue(K[B])
464448 else 0
465- let bK = ((((bI * bb) + (bJ * bq)) / 2) + aN)
466- $Tuple2([StringEntry(k(j), bk), IntegerEntry(n(j), bK)], 0)
449+ let bI = ((((bG * ba) + (bH * bo)) / 2) + aM)
450+ $Tuple2([StringEntry(k(j), bj), IntegerEntry(n(j), bI)], 0)
467451 }
468452 }
469453 }
470454
471455
472456
473-@Callable(aY)
457+@Callable(aX)
474458 func claimPrize (j) = {
475- let ba = aV()
476- if ((ba == ba))
477- then if ((size(aY.payments) != 0))
459+ let aZ = aU()
460+ if ((aZ == aZ))
461+ then if ((size(aX.payments) != 0))
478462 then throw("No payments required")
479463 else {
480464 let R = I(this, j)
481465 let K = R[u]
482466 let L = R[v]
483- let aQ = L[D]
484- if ((aQ != "PROCESSING"))
467+ let aP = L[D]
468+ if ((aP != "PROCESSING"))
485469 then throw((("Tournament " + toString(j)) + " is not PROCESSING"))
486470 else {
487- let bI = parseIntValue(L[G])
488- let bJ = parseIntValue(L[H])
489- let bb = parseIntValue(K[w])
490- let bq = parseIntValue(K[x])
491- let aN = if ((size(K) > B))
471+ let bG = parseIntValue(L[G])
472+ let bH = parseIntValue(L[H])
473+ let ba = parseIntValue(K[w])
474+ let bo = parseIntValue(K[x])
475+ let aM = if ((size(K) > B))
492476 then parseIntValue(K[B])
493477 else 0
494- let bL = ((((bI * bb) + (bJ * bq)) / 2) + aN)
495- let bM = n(j)
496- let bN = valueOrElse(getInteger(bM), 0)
497- let g = aW(aY.originCaller)
478+ let bJ = ((((bG * ba) + (bH * bo)) / 2) + aM)
479+ let bK = n(j)
480+ let bL = valueOrElse(getInteger(bK), 0)
481+ let g = aV(aX.originCaller)
498482 if (!(valueOrElse(getBoolean(p(j, g)), false)))
499483 then throw(((("Your duck " + g) + " is not registered at tournament ") + toString(j)))
500484 else {
501- let bw = s(j, g)
502- let bO = valueOrElse(getInteger(bw), 0)
503- if ((bO == 0))
485+ let bu = s(j, g)
486+ let bM = valueOrElse(getInteger(bu), 0)
487+ if ((bM == 0))
504488 then throw("Your duck got zero score")
505489 else {
506- let bP = q(j, g)
507- if (valueOrElse(getBoolean(bP), false))
490+ let bN = q(j, g)
491+ if (valueOrElse(getBoolean(bN), false))
508492 then throw(((("Your duck " + g) + " is already awarded at tournament ") + toString(j)))
509493 else {
510- let bx = m(j)
511- let bQ = valueOrElse(getInteger(bx), 0)
512- let aR = L[E]
513- let bR = if (if ((aR == ""))
494+ let bv = m(j)
495+ let bO = valueOrElse(getInteger(bv), 0)
496+ let aQ = L[E]
497+ let bP = if (if ((aQ == ""))
514498 then true
515- else (aR == " "))
499+ else (aQ == " "))
516500 then nil
517- else split_4C(aR, ",")
518- let bS = size(bR)
519- if ((bS == 0))
501+ else split_4C(aQ, ",")
502+ let bQ = size(bP)
503+ if ((bQ == 0))
520504 then throw(("No leaders at tournament " + toString(j)))
521505 else {
522- let aM = parseIntValue(K[A])
523- let aS = parseIntValue(L[F])
524- let bT = if ((bS > aM))
506+ let aL = parseIntValue(K[A])
507+ let aR = parseIntValue(L[F])
508+ let bR = if ((bQ > aL))
525509 then 0
526- else if (containsElement(bR, g))
510+ else if (containsElement(bP, g))
527511 then throw("As one of winners, you will be awarded by admins")
528- else (bS * aS)
529- let bU = min([fraction(bO, bL, (bQ - bT)), bN])
530- let bV = (bN - bU)
531- let bk = aP("ARCHIVED", L[E], aS, bI, bJ)
532- let bW = if ((0 >= bV))
533- then [StringEntry(k(j), bk)]
512+ else (bQ * aR)
513+ let bS = min([fraction(bM, bJ, (bO - bR)), bL])
514+ let bT = (bL - bS)
515+ let bj = aO("ARCHIVED", L[E], aR, bG, bH)
516+ let bU = if ((0 >= bT))
517+ then [StringEntry(k(j), bj)]
534518 else nil
535- let bc = if ((size(K) > C))
519+ let bb = if ((size(K) > C))
536520 then fromBase58String(K[C])
537521 else am
538522 let P = split(valueOrElse(getString(aj, f(g)), a), "_")
539- let bX = if (if ((P[c] == "T"))
523+ let bV = if (if ((P[c] == "T"))
540524 then (I(this, parseIntValue(P[b]))[v][D] == "PROCESSING")
541525 else false)
542526 then invoke(aj, "breakAttemptCallback", nil, nil)
543527 else unit
544- $Tuple2(([ScriptTransfer(aY.caller, bU, bc), BooleanEntry(bP, true), IntegerEntry(bM, bV)] ++ bW), bX)
528+ $Tuple2(([ScriptTransfer(aX.caller, bS, bb), BooleanEntry(bN, true), IntegerEntry(bK, bT)] ++ bU), bV)
545529 }
546530 }
547531 }
548532 }
549533 }
550534 }
551535 else throw("Strict value is not equal to itself.")
552536 }
553537
554538

github/deemru/w8io/169f3d6 
159.78 ms