tx · 96Bmj119hwHbRa5eShmBtahyEDE4gF8wAHN4T1eJP8WE

3N3nfqFcxXfd3T18V9icDdh58MJ9wQ2k2xx:  -0.01600000 Waves

2023.09.08 00:25 [2745503] smart account 3N3nfqFcxXfd3T18V9icDdh58MJ9wQ2k2xx > SELF 0.00000000 Waves

{ "type": 13, "id": "96Bmj119hwHbRa5eShmBtahyEDE4gF8wAHN4T1eJP8WE", "fee": 1600000, "feeAssetId": null, "timestamp": 1694121923934, "version": 2, "chainId": 84, "sender": "3N3nfqFcxXfd3T18V9icDdh58MJ9wQ2k2xx", "senderPublicKey": "UGqkWsCpv7xRVXkQRXyLd6pWPDtYGXmPip7FxSd1pAu", "proofs": [ "5SSuLWBBHwHQwNehbzroRGTEq8vTLsYQXFci69hPz4ZnoDuhakBHumjxw1DdWW1HGgHtevKCBrEJb9T6xSs8U8iP" ], "script": "base64:BgIkCAISBwoFAQEBAQESABIAEgQKAggBEgMKAQESAwoBARIDCgEBOgAPREVGQVVMVExPQ0FUSU9OAg9BZnJpY2FfRl9BZnJpY2EAD2xvY0lkeENvbnRpbmVudAAAAApsb2NJZHhUeXBlAAEBFGtleVN0YWtlZER1Y2tCeU93bmVyAQlvd25lckFkZHIJAKwCAgISc3Rha2VkRHVja0J5T3duZXJfBQlvd25lckFkZHIBD2tleUR1Y2tMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgINZHVja0xvY2F0aW9uXwULZHVja0Fzc2V0SWQADWxhc3RUb3VySWRLZXkCDiVzX19sYXN0VG91cklkARVrZXlUb3VyU3RhdGljRGF0YUJ5SWQBA3RJZAkArAICAhYlcyVkX190b3VyU3RhdGljRGF0YV9fCQCkAwEFA3RJZAEWa2V5VG91ckR5bmFtaWNEYXRhQnlJZAEDdElkCQCsAgICFyVzJWRfX3RvdXJEeW5hbWljRGF0YV9fCQCkAwEFA3RJZAETa2V5U2NvcmVCb2FyZEJ5VG91cgEDdElkCQCsAgICEiVzJWRfX3Njb3JlQm9hcmRfXwkApAMBBQN0SWQBEmtleVN1bVNjb3Jlc0J5VG91cgEDdElkCQCsAgICESVzJWRfX3N1bVNjb3Jlc19fCQCkAwEFA3RJZAEWa2V5VW5wYWlkUmV3YXJkc0J5VG91cgEDdElkCQCsAgICFSVzJWRfX3VucGFpZFJld2FyZHNfXwkApAMBBQN0SWQBG2tleUxhc3RSZWdpc3RlcmVkVG91ckJ5RHVjawELZHVja0Fzc2V0SWQJAKwCAgIgJXMlc19fbGFzdFJlZ2lzdGVyZWRUb3VyQnlEdWNrX18FC2R1Y2tBc3NldElkARxrZXlJc1JlZ2lzdGVyZWRCeVRvdXJBbmREdWNrAgN0SWQLZHVja0Fzc2V0SWQJALkJAgkAzAgCAiElcyVkJXNfX2lzUmVnaXN0ZXJlZEJ5VG91ckFuZER1Y2sJAMwIAgkApAMBBQN0SWQJAMwIAgULZHVja0Fzc2V0SWQFA25pbAICX18BGWtleUlzQXdhcmRlZEJ5VG91ckFuZER1Y2sCA3RJZAtkdWNrQXNzZXRJZAkAuQkCCQDMCAICHiVzJWQlc19faXNBd2FyZGVkQnlUb3VyQW5kRHVjawkAzAgCCQCkAwEFA3RJZAkAzAgCBQtkdWNrQXNzZXRJZAUDbmlsAgJfXwEba2V5TGFzdEF0dGVtcHRCeVRvdXJBbmREdWNrAgN0SWQLZHVja0Fzc2V0SWQJALkJAgkAzAgCAiAlcyVkJXNfX2xhc3RBdHRlbXB0QnlUb3VyQW5kRHVjawkAzAgCCQCkAwEFA3RJZAkAzAgCBQtkdWNrQXNzZXRJZAUDbmlsAgJfXwEaa2V5QmVzdFJlc3VsdEJ5VG91ckFuZER1Y2sCA3RJZAtkdWNrQXNzZXRJZAkAuQkCCQDMCAICHyVzJWQlc19fYmVzdFJlc3VsdEJ5VG91ckFuZER1Y2sJAMwIAgkApAMBBQN0SWQJAMwIAgULZHVja0Fzc2V0SWQFA25pbAICX18BFmtleUJlc3RUeEJ5VG91ckFuZER1Y2sCA3RJZAtkdWNrQXNzZXRJZAkAuQkCCQDMCAICGyVzJWQlc19fYmVzdFR4QnlUb3VyQW5kRHVjawkAzAgCCQCkAwEFA3RJZAkAzAgCBQtkdWNrQXNzZXRJZAUDbmlsAgJfXwAJaWR4U3RhdGljAAAACmlkeER5bmFtaWMAAQATdFN0YXRpY1JlZ2lzdGVyQ29zdAACABJ0U3RhdGljQXR0ZW1wdENvc3QAAwAMdFN0YXRpY1N0YXJ0AAUACnRTdGF0aWNFbmQABgAQdFN0YXRpY051bUdyYW5kcwAHAA50RHluYW1pY1N0YXR1cwABAA90RHluYW1pY0xlYWRlcnMAAgARdER5bmFtaWNXaW5SZXN1bHQAAwAVdER5bmFtaWNUb3RhbFJlZ0NvdW50AAQAFXREeW5hbWljVG90YWxBdHRlbXB0cwAFAQtnZXRUb3VyRGF0YQIMdG91ckNvbnRyYWN0A3RJZAQGc3RhdGljCQC1CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQx0b3VyQ29udHJhY3QJARVrZXlUb3VyU3RhdGljRGF0YUJ5SWQBBQN0SWQJAKwCAgkArAICAhlFcnJvciByZWFkaW5nIHRvdXJuYW1lbnQgCQCkAwEFA3RJZAIFIGRhdGECAl9fBAdkeW5hbWljCQC8CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQx0b3VyQ29udHJhY3QJARZrZXlUb3VyRHluYW1pY0RhdGFCeUlkAQUDdElkCQCsAgIJAKwCAgIZRXJyb3IgcmVhZGluZyB0b3VybmFtZW50IAkApAMBBQN0SWQCBSBkYXRhAgJfXwkAzAgCBQZzdGF0aWMJAMwIAgUHZHluYW1pYwUDbmlsAQ5pc0luVG91cm5hbWVudAIMdG91ckNvbnRyYWN0CGxvY2F0aW9uBAZsYXN0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUMdG91ckNvbnRyYWN0BQ1sYXN0VG91cklkS2V5AAAEA2xvYwkAtQkCBQhsb2NhdGlvbgIBXwQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQFdERhdGEJAQtnZXRUb3VyRGF0YQIFDHRvdXJDb250cmFjdAUGbGFzdElkBAZzdGF0aWMJAJEDAgUFdERhdGEFCWlkeFN0YXRpYwQHZHluYW1pYwkAkQMCBQV0RGF0YQUKaWR4RHluYW1pYwMDAwkAAAIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFUCQAAAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2xvYwUPbG9jSWR4Q29udGluZW50BQZsYXN0SWQHCQAAAgkAkQMCBQdkeW5hbWljBQ50RHluYW1pY1N0YXR1cwIKSU5QUk9HUkVTUwcJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBQp0U3RhdGljRW5kBQNub3cHAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQAVZGVmYXVsdFJlc3RBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUFFDdXZGYnZoNExrUFVucm5VMXozam5iQTFwOW0zV05odgMJAAACAQFUBQckbWF0Y2gwAiMzTXVta0dHenRDS0FYcFdEcXhrZGRvZnFYU1VicVFrdlNKeQkAAgECDVVua25vd24gY2hhaW4AA1NFUAICX18BD2dldFN0cmluZ09yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUHYWRkcmVzcwkAzAgCAgEuCQDMCAIFA2tleQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAABFJZHhDZmdTdGFraW5nRGFwcAABAA1JZHhDZmdXbGdEYXBwAAQBCmtleVJlc3RDZmcAAg4lc19fcmVzdENvbmZpZwEOa2V5UmVzdEFkZHJlc3MAAgwlc19fcmVzdEFkZHIBEXJlYWRSZXN0Q2ZnT3JGYWlsAQRyZXN0CQC8CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQRyZXN0CQEKa2V5UmVzdENmZwAFA1NFUAEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgdyZXN0Q2ZnA2lkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUHcmVzdENmZwUDaWR4CQCsAgICKlJlc3QgY2ZnIGRvZXNuJ3QgY29udGFpbiBhZGRyZXNzIGF0IGluZGV4IAkApAMBBQNpZHgADHJlc3RDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEOa2V5UmVzdEFkZHJlc3MABRVkZWZhdWx0UmVzdEFkZHJlc3NTdHIAB3Jlc3RDZmcJARFyZWFkUmVzdENmZ09yRmFpbAEFDHJlc3RDb250cmFjdAAPc3Rha2luZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwURSWR4Q2ZnU3Rha2luZ0RhcHAAC3dsZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUNSWR4Q2ZnV2xnRGFwcAANd2xnQXNzZXRJZEtleQILd2xnX2Fzc2V0SWQACndsZ0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQt3bGdDb250cmFjdAUNd2xnQXNzZXRJZEtleQITTm90IGluaXRpYWxpemVkIHlldAEIYXNTdHJpbmcBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzCQACAQIYZmFpbCB0byBjYXN0IGludG8gU3RyaW5nAQVhc0ludAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgNJbnQEAW4FByRtYXRjaDAFAW4JAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBCmZpeGVkUG9pbnQCA3ZhbAhkZWNpbWFscwQGdGVuUG93CQBsBgAKAAAFCGRlY2ltYWxzAAAAAAUERE9XTgQHbG93UGFydAkApAMBCQBqAgUDdmFsBQZ0ZW5Qb3cEBnplcm9lcwkAsAICCQCkAwEFBnRlblBvdwkAZAIAAQkAsQIBBQdsb3dQYXJ0CQCsAgIJAKwCAgkArAICCQCkAwEJAGkCBQN2YWwFBnRlblBvdwIBLgUGemVyb2VzBQdsb3dQYXJ0AQRwYWRMAgN2YWwDbGVuBAR2YWxTCQCkAwEFA3ZhbAQGemVyb2VzCQCwAgIJAKQDAQkAbAYACgAACQBlAgUDbGVuCQCxAgEFBHZhbFMAAAAABQRET1dOAAEJAKwCAgUGemVyb2VzBQR2YWxTABNNQVhUT1VSTkFNRU5UTEVOR1RIAICY/80BAARIT1VSAIDd2wEACmFkbWluc0xpc3QJAMwIAgkApQgBBQR0aGlzCQDMCAIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDACIzNQRWUyUkVMVUhDRkNCc21TQ05jQko4TjNVUkxWUWVuZGU3AwkAAAIBAVQFByRtYXRjaDACIzNNdEJnSlRhTHhQQjNDN1VKRDFVRThxamtIdGhmS3ZGUVlZCQACAQINVW5rbm93biBjaGFpbgUDbmlsAQpzdGF0aWNEYXRhBwR0eElkDHJlZ2lzdGVyQ29zdAthdHRlbXB0Q29zdAxjcmVhdGlvblRpbWUJc3RhcnRUaW1lB2VuZFRpbWUJbnVtR3JhbmRzCQC5CQIJAMwIAgIOJXMlZCVkJWQlZCVkJWQJAMwIAgUEdHhJZAkAzAgCCQCkAwEFDHJlZ2lzdGVyQ29zdAkAzAgCCQCkAwEFC2F0dGVtcHRDb3N0CQDMCAIJAKQDAQUMY3JlYXRpb25UaW1lCQDMCAIJAKQDAQUJc3RhcnRUaW1lCQDMCAIJAKQDAQUHZW5kVGltZQkAzAgCCQCkAwEFCW51bUdyYW5kcwUDbmlsBQNTRVABC2R5bmFtaWNEYXRhBQZzdGF0dXMHbGVhZGVycwl3aW5SZXN1bHQJdG90YWxSZWdzDXRvdGFsQXR0ZW1wdHMJALoJAgkAzAgCAgolcyVzJWQlZCVkCQDMCAIFBnN0YXR1cwkAzAgCBQdsZWFkZXJzCQDMCAIJAKQDAQUJd2luUmVzdWx0CQDMCAIJAKQDAQUJdG90YWxSZWdzCQDMCAIJAKQDAQUNdG90YWxBdHRlbXB0cwUDbmlsBQNTRVABBnByb2xvZwAJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AgpzYXZlTGFzdFR4BQNuaWwFA25pbAEMZHVja0J5Q2FsbGVyAQZjYWxsZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQUGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBwFpARBjcmVhdGVUb3VybmFtZW50BQlzdGFydFRpbWUHZW5kVGltZQxyZWdpc3RlckNvc3QLYXR0ZW1wdENvc3QJbnVtR3JhbmRzBAZjYWxsZXIJAKUIAQgFAWkGY2FsbGVyAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgUKYWRtaW5zTGlzdAUGY2FsbGVyCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEBmxhc3RJZAkAnwgBBQ1sYXN0VG91cklkS2V5BAN0SWQDCQEJaXNEZWZpbmVkAQUGbGFzdElkBApsYXN0VG91cklkCQEFdmFsdWUBBQZsYXN0SWQEB2R5bmFtaWMJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEWa2V5VG91ckR5bmFtaWNEYXRhQnlJZAEFCmxhc3RUb3VySWQJAKwCAgkArAICAhlFcnJvciByZWFkaW5nIHRvdXJuYW1lbnQgCQCkAwEFCmxhc3RUb3VySWQCBSBkYXRhBAZzdGF0dXMJAJEDAgkAtQkCBQdkeW5hbWljBQNTRVAFDnREeW5hbWljU3RhdHVzAwkBAiE9AgUGc3RhdHVzAghBUkNISVZFRAkAAgEJAKwCAgIsQ3VycmVudCB0b3VybmVtZW50IGlzIG5vdCBjb21wbGV0ZWQsIHN0YXR1cz0FBnN0YXR1cwkAZAIFCmxhc3RUb3VySWQAAQABBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wAwkAZgIFA25vdwUJc3RhcnRUaW1lCQACAQkArAICCQCsAgIJAKwCAgIKc3RhcnRUaW1lPQkApAMBBQlzdGFydFRpbWUCECA8IGNyZWF0aW9uVGltZT0JAKQDAQUDbm93AwkAZgIFCXN0YXJ0VGltZQUHZW5kVGltZQkAAgEJAKwCAgkArAICCQCsAgICCGVuZFRpbWU9CQCkAwEFB2VuZFRpbWUCDSA8IHN0YXJ0VGltZT0JAKQDAQUJc3RhcnRUaW1lAwkAZgIJAGUCBQdlbmRUaW1lBQlzdGFydFRpbWUFE01BWFRPVVJOQU1FTlRMRU5HVEgJAAIBCQCsAgIJAKwCAgkArAICAh9Ub3VybmFtZW50IHBlcmlvZCBleGNlZWRzIG1heDogCQCkAwEJAGUCBQdlbmRUaW1lBQlzdGFydFRpbWUCAyA+IAkApAMBBRNNQVhUT1VSTkFNRU5UTEVOR1RIAwMJAGcCAAAFDHJlZ2lzdGVyQ29zdAYJAGcCAAAFC2F0dGVtcHRDb3N0CQACAQkArAICCQCsAgIJAKwCAgIkQ29zdCBzaG91bGQgYmUgcG9zaXRpdmUsIGJ1dCBwYXNzZWQgCQCkAwEFDHJlZ2lzdGVyQ29zdAIFIGFuZCAJAKQDAQULYXR0ZW1wdENvc3QDCQBmAgAABQludW1HcmFuZHMJAAIBAi1OdW1iZXIgb2YgR3JhbmQgUHJpemVzIHNob3VsZCBiZSBub24tbmVnYXRpdmUJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUNbGFzdFRvdXJJZEtleQUDdElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlUb3VyU3RhdGljRGF0YUJ5SWQBBQN0SWQJAQpzdGF0aWNEYXRhBwkA2AQBCAUBaQ10cmFuc2FjdGlvbklkBQxyZWdpc3RlckNvc3QFC2F0dGVtcHRDb3N0BQNub3cFCXN0YXJ0VGltZQUHZW5kVGltZQUJbnVtR3JhbmRzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARZrZXlUb3VyRHluYW1pY0RhdGFCeUlkAQUDdElkCQELZHluYW1pY0RhdGEFAgdDUkVBVEVEAgEgAAAAAAAABQNuaWwFA3RJZAFpAQhyZWdpc3RlcgAEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQGd2xnQW10CAUDcG10BmFtb3VudAQKcG10QXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAUDcG10B2Fzc2V0SWQCFVdMR09MRCBwYXltZW50cyBvbmx5IQMJAQIhPQIFCnBtdEFzc2V0SWQFCndsZ0Fzc2V0SWQJAAIBAhVXTEdPTEQgcGF5bWVudHMgb25seSEEBmxhc3RJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFDWxhc3RUb3VySWRLZXkCFU5vIGFjdGl2ZSB0b3VybmFtZW50cwQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQFdERhdGEJAQtnZXRUb3VyRGF0YQIFBHRoaXMFBmxhc3RJZAQGc3RhdGljCQCRAwIFBXREYXRhBQlpZHhTdGF0aWMEB2R5bmFtaWMJAJEDAgUFdERhdGEFCmlkeER5bmFtaWMEBnN0YXR1cwkAkQMCBQdkeW5hbWljBQ50RHluYW1pY1N0YXR1cwMJAQEhAQMDAwkAAAIFBnN0YXR1cwIHQ1JFQVRFRAkAZgIFA25vdwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnN0YXRpYwUMdFN0YXRpY1N0YXJ0BwkAZgIJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBQp0U3RhdGljRW5kBQRIT1VSBQNub3cHBgMJAAACBQZzdGF0dXMCCklOUFJPR1JFU1MJAGYCCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnN0YXRpYwUKdFN0YXRpY0VuZAUESE9VUgUDbm93BwkAAgECE0Nhbm5vdCByZWdpc3RlciBub3cEB3JlZ0Nvc3QJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZzdGF0aWMFE3RTdGF0aWNSZWdpc3RlckNvc3QDCQECIT0CBQZ3bGdBbXQFB3JlZ0Nvc3QJAAIBCQCsAgIJAKwCAgIQTmVlZCBwYXltZW50IG9mIAkBCmZpeGVkUG9pbnQCBQdyZWdDb3N0AAgCByBXTEdPTEQEC2R1Y2tBc3NldElkCQEMZHVja0J5Q2FsbGVyAQgFAWkMb3JpZ2luQ2FsbGVyBA1vbGRTY29yZUJvYXJkCQELdmFsdWVPckVsc2UCCQCiCAEJARNrZXlTY29yZUJvYXJkQnlUb3VyAQUGbGFzdElkAgADAwkBC3ZhbHVlT3JFbHNlAgkAoAgBCQEca2V5SXNSZWdpc3RlcmVkQnlUb3VyQW5kRHVjawIFBmxhc3RJZAULZHVja0Fzc2V0SWQHBgkBCGNvbnRhaW5zAgUNb2xkU2NvcmVCb2FyZAULZHVja0Fzc2V0SWQJAAIBCQCsAgIJAKwCAgkArAICAgpZb3VyIGR1Y2sgBQtkdWNrQXNzZXRJZAIlIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBhdCB0b3VybmFtZW50IAkApAMBBQZsYXN0SWQEEnVwZGF0ZWREeW5hbWljRGF0YQkBC2R5bmFtaWNEYXRhBQIKSU5QUk9HUkVTUwkAkQMCBQdkeW5hbWljBQ90RHluYW1pY0xlYWRlcnMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdkeW5hbWljBRF0RHluYW1pY1dpblJlc3VsdAkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdkeW5hbWljBRV0RHluYW1pY1RvdGFsUmVnQ291bnQAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB2R5bmFtaWMFFXREeW5hbWljVG90YWxBdHRlbXB0cwkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEba2V5TGFzdFJlZ2lzdGVyZWRUb3VyQnlEdWNrAQULZHVja0Fzc2V0SWQFBmxhc3RJZAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBHGtleUlzUmVnaXN0ZXJlZEJ5VG91ckFuZER1Y2sCBQZsYXN0SWQFC2R1Y2tBc3NldElkBgkAzAgCCQELU3RyaW5nRW50cnkCCQETa2V5U2NvcmVCb2FyZEJ5VG91cgEFBmxhc3RJZAMJAAACBQ1vbGRTY29yZUJvYXJkAgAJAKwCAgULZHVja0Fzc2V0SWQCBDowMDAJAKwCAgkArAICCQCsAgIFDW9sZFNjb3JlQm9hcmQCAV8FC2R1Y2tBc3NldElkAgQ6MDAwCQDMCAIJAQtTdHJpbmdFbnRyeQIJARZrZXlUb3VyRHluYW1pY0RhdGFCeUlkAQUGbGFzdElkBRJ1cGRhdGVkRHluYW1pY0RhdGEFA25pbAUMcHJvbG9nUmVzdWx0AWkBCm5ld0F0dGVtcHQABAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cABAtkdWNrQXNzZXRJZAkBDGR1Y2tCeUNhbGxlcgEIBQFpDG9yaWdpbkNhbGxlcgQGbGFzdElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUNbGFzdFRvdXJJZEtleQIVTm8gYWN0aXZlIHRvdXJuYW1lbnRzBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAV0RGF0YQkBC2dldFRvdXJEYXRhAgUEdGhpcwUGbGFzdElkBAZzdGF0aWMJAJEDAgUFdERhdGEFCWlkeFN0YXRpYwQHZHluYW1pYwkAkQMCBQV0RGF0YQUKaWR4RHluYW1pYwQGc3RhdHVzCQCRAwIFB2R5bmFtaWMFDnREeW5hbWljU3RhdHVzAwkBASEBAwkAAAIFBnN0YXR1cwIKSU5QUk9HUkVTUwkAZgIJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBQp0U3RhdGljRW5kBQRIT1VSBQNub3cHCQACAQIXQXR0ZW1wdCBpcyBub3QgcG9zc2libGUDCQEBIQEJAQt2YWx1ZU9yRWxzZQIJAKAIAQkBHGtleUlzUmVnaXN0ZXJlZEJ5VG91ckFuZER1Y2sCBQZsYXN0SWQFC2R1Y2tBc3NldElkBwkAAgEJAKwCAgkArAICCQCsAgICCllvdXIgZHVjayAFC2R1Y2tBc3NldElkAiEgaXMgbm90IHJlZ2lzdGVyZWQgYXQgdG91cm5hbWVudCAJAKQDAQUGbGFzdElkBBNhdHRlbXB0c0l0ZXJhdG9yS2V5CQEba2V5TGFzdEF0dGVtcHRCeVRvdXJBbmREdWNrAgUGbGFzdElkBQtkdWNrQXNzZXRJZAQLbGFzdEF0dGVtcHQJAJ8IAQUTYXR0ZW1wdHNJdGVyYXRvcktleQQLJHQwNjEwNDY3MzYDCQEBIQEJAQlpc0RlZmluZWQBBQtsYXN0QXR0ZW1wdAkAlAoCAAAAAAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABAZ3bGdBbXQIBQNwbXQGYW1vdW50BApwbXRBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIIBQNwbXQHYXNzZXRJZAIVV0xHT0xEIHBheW1lbnRzIG9ubHkhAwkBAiE9AgUKcG10QXNzZXRJZAUKd2xnQXNzZXRJZAkAAgECFVdMR09MRCBwYXltZW50cyBvbmx5IQQHYXR0Q29zdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnN0YXRpYwUSdFN0YXRpY0F0dGVtcHRDb3N0AwkBAiE9AgUGd2xnQW10BQdhdHRDb3N0CQACAQkArAICCQCsAgICEE5lZWQgcGF5bWVudCBvZiAJAQpmaXhlZFBvaW50AgUHYXR0Q29zdAAIAgcgV0xHT0xECQCUCgIJAGQCCQEFdmFsdWUBBQtsYXN0QXR0ZW1wdAABAAEEDXBheWVkQXR0ZW1wdHMIBQskdDA2MTA0NjczNgJfMQQJaW5jcmVtZW50CAULJHQwNjEwNDY3MzYCXzIEEnVwZGF0ZWREeW5hbWljRGF0YQkBC2R5bmFtaWNEYXRhBQIKSU5QUk9HUkVTUwkAkQMCBQdkeW5hbWljBQ90RHluYW1pY0xlYWRlcnMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdkeW5hbWljBRF0RHluYW1pY1dpblJlc3VsdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB2R5bmFtaWMFFXREeW5hbWljVG90YWxSZWdDb3VudAkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdkeW5hbWljBRV0RHluYW1pY1RvdGFsQXR0ZW1wdHMFCWluY3JlbWVudAQHdG91ckxvYwkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCE2luaXREdWNrVG91ckF0dGVtcHQJAMwIAgULZHVja0Fzc2V0SWQFA25pbAUDbmlsCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFE2F0dGVtcHRzSXRlcmF0b3JLZXkFDXBheWVkQXR0ZW1wdHMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFmtleVRvdXJEeW5hbWljRGF0YUJ5SWQBBQZsYXN0SWQFEnVwZGF0ZWREeW5hbWljRGF0YQUDbmlsCQDMCAIFDHByb2xvZ1Jlc3VsdAkAzAgCBQ1wYXllZEF0dGVtcHRzCQDMCAIFB3RvdXJMb2MFA25pbAFpAQ5zYXZlRHVja1Jlc3VsdAILZHVja0Fzc2V0SWQLZHVja05ld0Jlc3QDCQECIT0CCAUBaQZjYWxsZXIFD3N0YWtpbmdDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQEBmxhc3RJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFDWxhc3RUb3VySWRLZXkCFU5vIGFjdGl2ZSB0b3VybmFtZW50cwQFdERhdGEJAQtnZXRUb3VyRGF0YQIFBHRoaXMFBmxhc3RJZAQGc3RhdGljCQCRAwIFBXREYXRhBQlpZHhTdGF0aWMEB2R5bmFtaWMJAJEDAgUFdERhdGEFCmlkeER5bmFtaWMEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EDWJlc3RSZXN1bHRLZXkJARprZXlCZXN0UmVzdWx0QnlUb3VyQW5kRHVjawIFBmxhc3RJZAULZHVja0Fzc2V0SWQEDHN1bVNjb3Jlc0tleQkBEmtleVN1bVNjb3Jlc0J5VG91cgEFBmxhc3RJZAQMb2xkU3VtU2NvcmVzCQELdmFsdWVPckVsc2UCCQCfCAEFDHN1bVNjb3Jlc0tleQAAAwkBDmlzSW5Ub3VybmFtZW50AgUEdGhpcwULY3VyTG9jYXRpb24EC2R1Y2tPbGRCZXN0CQELdmFsdWVPckVsc2UCCQCfCAEFDWJlc3RSZXN1bHRLZXkAAAQIc2NvcmVLZXkJARNrZXlTY29yZUJvYXJkQnlUb3VyAQUGbGFzdElkBA1vbGRTY29yZUJvYXJkCQELdmFsdWVPckVsc2UCCQCiCAEFCHNjb3JlS2V5AgAECyR0MDgyMjk5MzkwAwkAZgIFC2R1Y2tOZXdCZXN0BQtkdWNrT2xkQmVzdAMJAQEhAQkBCGNvbnRhaW5zAgUNb2xkU2NvcmVCb2FyZAULZHVja0Fzc2V0SWQJAAIBCQCsAgICHHNjb3JlQm9hcmQgZG9lcyBub3QgY29udGFpbiAFC2R1Y2tBc3NldElkBAdvbGRCZXN0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHZHluYW1pYwURdER5bmFtaWNXaW5SZXN1bHQEB2xlYWRlcnMJAJEDAgUHZHluYW1pYwUPdER5bmFtaWNMZWFkZXJzBA5vbGRMZWFkZXJzTGlzdAMDCQAAAgUHbGVhZGVycwIABgkAAAIFB2xlYWRlcnMCASAFA25pbAkAvAkCBQdsZWFkZXJzAgEsBA5uZXdMZWFkZXJzTGlzdAMJAGYCBQtkdWNrTmV3QmVzdAUHb2xkQmVzdAkAzAgCBQtkdWNrQXNzZXRJZAUDbmlsAwMJAGYCBQdvbGRCZXN0BQtkdWNrTmV3QmVzdAYJAQ9jb250YWluc0VsZW1lbnQCBQ5vbGRMZWFkZXJzTGlzdAULZHVja0Fzc2V0SWQFDm9sZExlYWRlcnNMaXN0CQDNCAIFDm9sZExlYWRlcnNMaXN0BQtkdWNrQXNzZXRJZAQSdXBkYXRlZER5bmFtaWNEYXRhCQELZHluYW1pY0RhdGEFAgpJTlBST0dSRVNTCQC6CQIFDm5ld0xlYWRlcnNMaXN0AgEsCQCWAwEJAMwIAgULZHVja05ld0Jlc3QJAMwIAgUHb2xkQmVzdAUDbmlsCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHZHluYW1pYwUVdER5bmFtaWNUb3RhbFJlZ0NvdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHZHluYW1pYwUVdER5bmFtaWNUb3RhbEF0dGVtcHRzBAVwYXJ0cwkAvQkCBQ1vbGRTY29yZUJvYXJkBQtkdWNrQXNzZXRJZAkAlQoDCQCsAgIJAKwCAgkArAICCQCsAgIJAJEDAgUFcGFydHMAAAULZHVja0Fzc2V0SWQCAToJAQRwYWRMAgULZHVja05ld0Jlc3QAAwkAsAICCQCRAwIFBXBhcnRzAAEABAkAZQIJAGQCBQxvbGRTdW1TY29yZXMFC2R1Y2tOZXdCZXN0BQtkdWNrT2xkQmVzdAkAzAgCCQELU3RyaW5nRW50cnkCCQEWa2V5VG91ckR5bmFtaWNEYXRhQnlJZAEFBmxhc3RJZAUSdXBkYXRlZER5bmFtaWNEYXRhBQNuaWwJAJUKAwUNb2xkU2NvcmVCb2FyZAUMb2xkU3VtU2NvcmVzBQNuaWwEDW5ld1Njb3JlQm9hcmQIBQskdDA4MjI5OTM5MAJfMQQMbmV3U3VtU2NvcmVzCAULJHQwODIyOTkzOTACXzIEDWdsb2JhbEFjdGlvbnMIBQskdDA4MjI5OTM5MAJfMwkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFDWJlc3RSZXN1bHRLZXkJAJYDAQkAzAgCBQtkdWNrT2xkQmVzdAkAzAgCBQtkdWNrTmV3QmVzdAUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQxzdW1TY29yZXNLZXkFDG5ld1N1bVNjb3JlcwkAzAgCCQELU3RyaW5nRW50cnkCCQEWa2V5QmVzdFR4QnlUb3VyQW5kRHVjawIFBmxhc3RJZAULZHVja0Fzc2V0SWQJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAkAzAgCCQELU3RyaW5nRW50cnkCBQhzY29yZUtleQUNbmV3U2NvcmVCb2FyZAUDbmlsBQ1nbG9iYWxBY3Rpb25zAAAJAJQKAgUDbmlsAAABaQERcHJvY2Vzc1RvdXJuYW1lbnQBA3RJZAQGY2FsbGVyCQClCAEIBQFpBmNhbGxlcgMJAQEhAQkBD2NvbnRhaW5zRWxlbWVudAIFCmFkbWluc0xpc3QFBmNhbGxlcgkAAgECEVBlcm1pc3Npb24gZGVuaWVkBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAV0RGF0YQkBC2dldFRvdXJEYXRhAgUEdGhpcwUDdElkBAZzdGF0aWMJAJEDAgUFdERhdGEFCWlkeFN0YXRpYwQHZHluYW1pYwkAkQMCBQV0RGF0YQUKaWR4RHluYW1pYwQGc3RhdHVzCQCRAwIFB2R5bmFtaWMFDnREeW5hbWljU3RhdHVzBA1yZWdpc3RyYXRpb25zCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHZHluYW1pYwUVdER5bmFtaWNUb3RhbFJlZ0NvdW50BAxwYWlkQXR0ZW1wdHMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdkeW5hbWljBRV0RHluYW1pY1RvdGFsQXR0ZW1wdHMEB3JlZ0Nvc3QJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZzdGF0aWMFE3RTdGF0aWNSZWdpc3RlckNvc3QEB2F0dENvc3QJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZzdGF0aWMFEnRTdGF0aWNBdHRlbXB0Q29zdAMJAAACBQZzdGF0dXMCCEFSQ0hJVkVECQACAQkArAICCQCsAgICC1RvdXJuYW1lbnQgCQCkAwEFA3RJZAIUIGlzIGFscmVhZHkgQVJDSElWRUQDAwkAAAIFBnN0YXR1cwIKSU5QUk9HUkVTUwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZzdGF0aWMFCnRTdGF0aWNFbmQFA25vdwcJAAIBCQCsAgIJAKwCAgILVG91cm5hbWVudCAJAKQDAQUDdElkAhAgaXMgbm90IG92ZXIgeWV0BBJ1cGRhdGVkRHluYW1pY0RhdGEJAQtkeW5hbWljRGF0YQUCClBST0NFU1NJTkcJAJEDAgUHZHluYW1pYwUPdER5bmFtaWNMZWFkZXJzCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHZHluYW1pYwURdER5bmFtaWNXaW5SZXN1bHQFDXJlZ2lzdHJhdGlvbnMFDHBhaWRBdHRlbXB0cwkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJARZrZXlUb3VyRHluYW1pY0RhdGFCeUlkAQUDdElkBRJ1cGRhdGVkRHluYW1pY0RhdGEJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlVbnBhaWRSZXdhcmRzQnlUb3VyAQUDdElkCQBpAgkAZAIJAGgCBQ1yZWdpc3RyYXRpb25zBQdyZWdDb3N0CQBoAgUMcGFpZEF0dGVtcHRzBQdhdHRDb3N0AAIFA25pbAAAAWkBEGZpbmlzaFRvdXJuYW1lbnQBA3RJZAQGY2FsbGVyCQClCAEIBQFpBmNhbGxlcgMJAQEhAQkBD2NvbnRhaW5zRWxlbWVudAIFCmFkbWluc0xpc3QFBmNhbGxlcgkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAV0RGF0YQkBC2dldFRvdXJEYXRhAgUEdGhpcwUDdElkBAdkeW5hbWljCQCRAwIFBXREYXRhBQppZHhEeW5hbWljBAZzdGF0dXMJAJEDAgUHZHluYW1pYwUOdER5bmFtaWNTdGF0dXMDCQAAAgUGc3RhdHVzAghBUkNISVZFRAkAAgEJAKwCAgkArAICAgtUb3VybmFtZW50IAkApAMBBQN0SWQCFCBpcyBhbHJlYWR5IEFSQ0hJVkVEBBJ1cGRhdGVkRHluYW1pY0RhdGEJAQtkeW5hbWljRGF0YQUCCEFSQ0hJVkVECQCRAwIFB2R5bmFtaWMFD3REeW5hbWljTGVhZGVycwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB2R5bmFtaWMFEXREeW5hbWljV2luUmVzdWx0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHZHluYW1pYwUVdER5bmFtaWNUb3RhbFJlZ0NvdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHZHluYW1pYwUVdER5bmFtaWNUb3RhbEF0dGVtcHRzCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFmtleVRvdXJEeW5hbWljRGF0YUJ5SWQBBQN0SWQFEnVwZGF0ZWREeW5hbWljRGF0YQUDbmlsAAABaQEKY2xhaW1Qcml6ZQEDdElkBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBXREYXRhCQELZ2V0VG91ckRhdGECBQR0aGlzBQN0SWQEBnN0YXRpYwkAkQMCBQV0RGF0YQUJaWR4U3RhdGljBAdkeW5hbWljCQCRAwIFBXREYXRhBQppZHhEeW5hbWljBAZzdGF0dXMJAJEDAgUHZHluYW1pYwUOdER5bmFtaWNTdGF0dXMDCQECIT0CBQZzdGF0dXMCClBST0NFU1NJTkcJAAIBCQCsAgIJAKwCAgILVG91cm5hbWVudCAJAKQDAQUDdElkAhIgaXMgbm90IFBST0NFU1NJTkcEDXJlZ2lzdHJhdGlvbnMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdkeW5hbWljBRV0RHluYW1pY1RvdGFsUmVnQ291bnQEDHBhaWRBdHRlbXB0cwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB2R5bmFtaWMFFXREeW5hbWljVG90YWxBdHRlbXB0cwQHcmVnQ29zdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnN0YXRpYwUTdFN0YXRpY1JlZ2lzdGVyQ29zdAQHYXR0Q29zdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnN0YXRpYwUSdFN0YXRpY0F0dGVtcHRDb3N0BAphd2FyZEZ1bmRzCQBpAgkAZAIJAGgCBQ1yZWdpc3RyYXRpb25zBQdyZWdDb3N0CQBoAgUMcGFpZEF0dGVtcHRzBQdhdHRDb3N0AAIECXVucGFpZEtleQkBFmtleVVucGFpZFJld2FyZHNCeVRvdXIBBQN0SWQEC3VucGFpZEZ1bmRzCQELdmFsdWVPckVsc2UCCQCfCAEFCXVucGFpZEtleQAABAtkdWNrQXNzZXRJZAkBDGR1Y2tCeUNhbGxlcgEIBQFpDG9yaWdpbkNhbGxlcgQKc2NvcmVCb2FyZAkBC3ZhbHVlT3JFbHNlAgkAoggBCQETa2V5U2NvcmVCb2FyZEJ5VG91cgEFA3RJZAIAAwkBASEBCQELdmFsdWVPckVsc2UCCQCgCAEJARxrZXlJc1JlZ2lzdGVyZWRCeVRvdXJBbmREdWNrAgUDdElkBQtkdWNrQXNzZXRJZAcJAAIBCQCsAgIJAKwCAgkArAICAgpZb3VyIGR1Y2sgBQtkdWNrQXNzZXRJZAIhIGlzIG5vdCByZWdpc3RlcmVkIGF0IHRvdXJuYW1lbnQgCQCkAwEFA3RJZAQNYmVzdFJlc3VsdEtleQkBGmtleUJlc3RSZXN1bHRCeVRvdXJBbmREdWNrAgUDdElkBQtkdWNrQXNzZXRJZAQIZHVja0Jlc3QJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUNYmVzdFJlc3VsdEtleQAAAwkAAAIFCGR1Y2tCZXN0AAAJAAIBAhhZb3VyIGR1Y2sgZ290IHplcm8gc2NvcmUECmF3YXJkZWRLZXkJARlrZXlJc0F3YXJkZWRCeVRvdXJBbmREdWNrAgUDdElkBQtkdWNrQXNzZXRJZAMJAQt2YWx1ZU9yRWxzZQIJAKAIAQUKYXdhcmRlZEtleQcJAAIBCQCsAgIJAKwCAgkArAICAgpZb3VyIGR1Y2sgBQtkdWNrQXNzZXRJZAIiIGlzIGFscmVhZHkgYXdhcmRlZCBhdCB0b3VybmFtZW50IAkApAMBBQN0SWQEDHN1bVNjb3Jlc0tleQkBEmtleVN1bVNjb3Jlc0J5VG91cgEFA3RJZAQJc3VtU2NvcmVzCQELdmFsdWVPckVsc2UCCQCfCAEFDHN1bVNjb3Jlc0tleQAABAdsZWFkZXJzCQCRAwIFB2R5bmFtaWMFD3REeW5hbWljTGVhZGVycwQLbGVhZGVyc0xpc3QDAwkAAAIFB2xlYWRlcnMCAAYJAAACBQdsZWFkZXJzAgEgBQNuaWwJALwJAgUHbGVhZGVycwIBLAQKbnVtTGVhZGVycwkAkAMBBQtsZWFkZXJzTGlzdAMJAAACBQpudW1MZWFkZXJzAAAJAAIBCQCsAgICGU5vIGxlYWRlcnMgYXQgdG91cm5hbWVudCAJAKQDAQUDdElkBAludW1HcmFuZHMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZzdGF0aWMFEHRTdGF0aWNOdW1HcmFuZHMECXdpblJlc3VsdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB2R5bmFtaWMFEXREeW5hbWljV2luUmVzdWx0BA9zdW1MZWFkZXJTY29yZXMDCQBmAgUKbnVtTGVhZGVycwUJbnVtR3JhbmRzAAADCQEPY29udGFpbnNFbGVtZW50AgULbGVhZGVyc0xpc3QFC2R1Y2tBc3NldElkCQACAQIwQXMgb25lIG9mIHdpbm5lcnMsIHlvdSB3aWxsIGJlIGF3YXJkZWQgYnkgYWRtaW5zCQBoAgUKbnVtTGVhZGVycwUJd2luUmVzdWx0BAp5b3VyQW1vdW50CQCXAwEJAMwIAgkAawMFCGR1Y2tCZXN0BQphd2FyZEZ1bmRzCQBlAgUJc3VtU2NvcmVzBQ9zdW1MZWFkZXJTY29yZXMJAMwIAgULdW5wYWlkRnVuZHMFA25pbAQPbmV3VW5wYWlkQW1vdW50CQBlAgULdW5wYWlkRnVuZHMFCnlvdXJBbW91bnQEEnVwZGF0ZWREeW5hbWljRGF0YQkBC2R5bmFtaWNEYXRhBQIIQVJDSElWRUQJAJEDAgUHZHluYW1pYwUPdER5bmFtaWNMZWFkZXJzBQl3aW5SZXN1bHQFDXJlZ2lzdHJhdGlvbnMFDHBhaWRBdHRlbXB0cwQNYXJjaGl2ZUFjdGlvbgMJAGcCAAAFD25ld1VucGFpZEFtb3VudAkAzAgCCQELU3RyaW5nRW50cnkCCQEWa2V5VG91ckR5bmFtaWNEYXRhQnlJZAEFA3RJZAUSdXBkYXRlZER5bmFtaWNEYXRhBQNuaWwFA25pbAkAlAoCCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQp5b3VyQW1vdW50BQp3bGdBc3NldElkCQDMCAIJAQxCb29sZWFuRW50cnkCBQphd2FyZGVkS2V5BgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJdW5wYWlkS2V5BQ9uZXdVbnBhaWRBbW91bnQFA25pbAUNYXJjaGl2ZUFjdGlvbgAAAIkF/zA=", "height": 2745503, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BCacf5hMi9hLL11KHiSLFv2k2eMnq8Ujuszg7H8Az7AX Next: 2Lt9XTqmK62tLhMwRwXrXxvMvCPGqqyLGMBZX1v1aSnj Diff:
OldNewDifferences
4545 func s (j,g) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(j), g], "__")
4646
4747
48-let t = 0
48+func t (j,g) = makeString(["%s%d%s__bestTxByTourAndDuck", toString(j), g], "__")
4949
50-let u = 1
5150
52-let v = 2
51+let u = 0
5352
54-let w = 3
53+let v = 1
5554
56-let x = 5
55+let w = 2
5756
58-let y = 6
57+let x = 3
5958
60-let z = 7
59+let y = 5
6160
62-let A = 1
61+let z = 6
6362
64-let B = 2
63+let A = 7
6564
66-let C = 3
65+let B = 1
6766
68-let D = 4
67+let C = 2
6968
70-let E = 5
69+let D = 3
7170
72-func F (G,j) = {
73- let H = split(valueOrErrorMessage(getString(G, i(j)), (("Error reading tournament " + toString(j)) + " data")), "__")
74- let I = split_4C(valueOrErrorMessage(getString(G, k(j)), (("Error reading tournament " + toString(j)) + " data")), "__")
75-[H, I]
71+let E = 4
72+
73+let F = 5
74+
75+func G (H,j) = {
76+ let I = split(valueOrErrorMessage(getString(H, i(j)), (("Error reading tournament " + toString(j)) + " data")), "__")
77+ let J = split_4C(valueOrErrorMessage(getString(H, k(j)), (("Error reading tournament " + toString(j)) + " data")), "__")
78+[I, J]
7679 }
7780
7881
79-func J (G,K) = {
80- let L = valueOrElse(getInteger(G, h), 0)
81- let M = split(K, "_")
82- let N = lastBlock.timestamp
83- let O = F(G, L)
84- let H = O[t]
85- let I = O[u]
86- if (if (if ((M[c] == "T"))
87- then (parseIntValue(M[b]) == L)
82+func K (H,L) = {
83+ let M = valueOrElse(getInteger(H, h), 0)
84+ let N = split(L, "_")
85+ let O = lastBlock.timestamp
86+ let P = G(H, M)
87+ let I = P[u]
88+ let J = P[v]
89+ if (if (if ((N[c] == "T"))
90+ then (parseIntValue(N[b]) == M)
8891 else false)
89- then (I[A] == "INPROGRESS")
92+ then (J[B] == "INPROGRESS")
9093 else false)
91- then (parseIntValue(H[y]) > N)
94+ then (parseIntValue(I[z]) > O)
9295 else false
9396 }
9497
9598
96-let P = take(drop(this.bytes, 1), 1)
99+let Q = take(drop(this.bytes, 1), 1)
97100
98-let Q = {
99- let R = P
100- if ((base58'2W' == R))
101+let R = {
102+ let S = Q
103+ if ((base58'2W' == S))
101104 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
102- else if ((base58'2T' == R))
105+ else if ((base58'2T' == S))
103106 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
104107 else throw("Unknown chain")
105108 }
106109
107-let S = "__"
110+let T = "__"
108111
109-func T (U,V) = valueOrErrorMessage(getString(U, V), makeString(["mandatory ", toString(U), ".", V, " is not defined"], ""))
112+func U (V,W) = valueOrErrorMessage(getString(V, W), makeString(["mandatory ", toString(V), ".", W, " is not defined"], ""))
110113
111114
112-let W = 1
115+let X = 1
113116
114-let X = 4
117+let Y = 4
115118
116-func Y () = "%s__restConfig"
119+func Z () = "%s__restConfig"
117120
118121
119-func Z () = "%s__restAddr"
122+func aa () = "%s__restAddr"
120123
121124
122-func aa (ab) = split_4C(T(ab, Y()), S)
125+func ab (ac) = split_4C(U(ac, Z()), T)
123126
124127
125-func ac (ad,ae) = valueOrErrorMessage(addressFromString(ad[ae]), ("Rest cfg doesn't contain address at index " + toString(ae)))
128+func ad (ae,af) = valueOrErrorMessage(addressFromString(ae[af]), ("Rest cfg doesn't contain address at index " + toString(af)))
126129
127130
128-let af = addressFromStringValue(valueOrElse(getString(this, Z()), Q))
131+let ag = addressFromStringValue(valueOrElse(getString(this, aa()), R))
129132
130-let ad = aa(af)
133+let ae = ab(ag)
131134
132-let ag = ac(ad, W)
135+let ah = ad(ae, X)
133136
134-let ah = ac(ad, X)
137+let ai = ad(ae, Y)
135138
136-let ai = "wlg_assetId"
139+let aj = "wlg_assetId"
137140
138-let aj = valueOrErrorMessage(getBinary(ah, ai), "Not initialized yet")
141+let ak = valueOrErrorMessage(getBinary(ai, aj), "Not initialized yet")
139142
140-func ak (al) = {
141- let R = al
142- if ($isInstanceOf(R, "String"))
143+func al (am) = {
144+ let S = am
145+ if ($isInstanceOf(S, "String"))
143146 then {
144- let am = R
145- am
147+ let an = S
148+ an
146149 }
147150 else throw("fail to cast into String")
148151 }
149152
150153
151-func an (al) = {
152- let R = al
153- if ($isInstanceOf(R, "Int"))
154+func ao (am) = {
155+ let S = am
156+ if ($isInstanceOf(S, "Int"))
154157 then {
155- let ao = R
156- ao
158+ let ap = S
159+ ap
157160 }
158161 else throw("fail to cast into Int")
159162 }
160163
161164
162-func ap (aq,ar) = {
163- let as = pow(10, 0, ar, 0, 0, DOWN)
164- let at = toString((aq % as))
165- let au = drop(toString(as), (1 + size(at)))
166- (((toString((aq / as)) + ".") + au) + at)
165+func aq (ar,as) = {
166+ let at = pow(10, 0, as, 0, 0, DOWN)
167+ let au = toString((ar % at))
168+ let av = drop(toString(at), (1 + size(au)))
169+ (((toString((ar / at)) + ".") + av) + au)
167170 }
168171
169172
170-func av (aq,aw) = {
171- let ax = toString(aq)
172- let au = drop(toString(pow(10, 0, (aw - size(ax)), 0, 0, DOWN)), 1)
173- (au + ax)
173+func aw (ar,ax) = {
174+ let ay = toString(ar)
175+ let av = drop(toString(pow(10, 0, (ax - size(ay)), 0, 0, DOWN)), 1)
176+ (av + ay)
174177 }
175178
176179
177-let ay = 432000000
180+let az = 432000000
178181
179-let az = 3600000
182+let aA = 3600000
180183
181-let aA = [toString(this), {
182- let R = P
183- if ((base58'2W' == R))
184+let aB = [toString(this), {
185+ let S = Q
186+ if ((base58'2W' == S))
184187 then "3PEe2RELUHCFCBsmSCNcBJ8N3URLVQende7"
185- else if ((base58'2T' == R))
188+ else if ((base58'2T' == S))
186189 then "3MtBgJTaLxPB3C7UJD1UE8qjkHthfKvFQYY"
187190 else throw("Unknown chain")
188191 }]
189192
190-func aB (aC,aD,aE,aF,aG,aH,aI) = makeString(["%s%d%d%d%d%d%d", aC, toString(aD), toString(aE), toString(aF), toString(aG), toString(aH), toString(aI)], S)
193+func aC (aD,aE,aF,aG,aH,aI,aJ) = makeString(["%s%d%d%d%d%d%d", aD, toString(aE), toString(aF), toString(aG), toString(aH), toString(aI), toString(aJ)], T)
191194
192195
193-func aJ (aK,aL,aM,aN,aO) = makeString_2C(["%s%s%d%d%d", aK, aL, toString(aM), toString(aN), toString(aO)], S)
196+func aK (aL,aM,aN,aO,aP) = makeString_2C(["%s%s%d%d%d", aL, aM, toString(aN), toString(aO), toString(aP)], T)
194197
195198
196-func aP () = an(invoke(ag, "saveLastTx", nil, nil))
199+func aQ () = ao(invoke(ah, "saveLastTx", nil, nil))
197200
198201
199-func aQ (aR) = valueOrErrorMessage(getString(ag, d(toString(aR))), "You don't have a duck staked")
202+func aR (aS) = valueOrErrorMessage(getString(ah, d(toString(aS))), "You don't have a duck staked")
200203
201204
202-@Callable(aS)
203-func createTournament (aG,aH,aD,aE,aI) = {
204- let aR = toString(aS.caller)
205- if (!(containsElement(aA, aR)))
205+@Callable(aT)
206+func createTournament (aH,aI,aE,aF,aJ) = {
207+ let aS = toString(aT.caller)
208+ if (!(containsElement(aB, aS)))
206209 then throw("Permission denied")
207210 else {
208- let L = getInteger(h)
209- let j = if (isDefined(L))
211+ let M = getInteger(h)
212+ let j = if (isDefined(M))
210213 then {
211- let aT = value(L)
212- let I = valueOrErrorMessage(getString(k(aT)), (("Error reading tournament " + toString(aT)) + " data"))
213- let aK = split(I, S)[A]
214- if ((aK != "ARCHIVED"))
215- then throw(("Current tournement is not completed, status=" + aK))
216- else (aT + 1)
214+ let aU = value(M)
215+ let J = valueOrErrorMessage(getString(k(aU)), (("Error reading tournament " + toString(aU)) + " data"))
216+ let aL = split(J, T)[B]
217+ if ((aL != "ARCHIVED"))
218+ then throw(("Current tournement is not completed, status=" + aL))
219+ else (aU + 1)
217220 }
218221 else 1
219- let N = lastBlock.timestamp
220- if ((N > aG))
221- then throw(((("startTime=" + toString(aG)) + " < creationTime=") + toString(N)))
222- else if ((aG > aH))
223- then throw(((("endTime=" + toString(aH)) + " < startTime=") + toString(aG)))
224- else if (((aH - aG) > ay))
225- then throw(((("Tournament period exceeds max: " + toString((aH - aG))) + " > ") + toString(ay)))
226- else if (if ((0 >= aD))
222+ let O = lastBlock.timestamp
223+ if ((O > aH))
224+ then throw(((("startTime=" + toString(aH)) + " < creationTime=") + toString(O)))
225+ else if ((aH > aI))
226+ then throw(((("endTime=" + toString(aI)) + " < startTime=") + toString(aH)))
227+ else if (((aI - aH) > az))
228+ then throw(((("Tournament period exceeds max: " + toString((aI - aH))) + " > ") + toString(az)))
229+ else if (if ((0 >= aE))
227230 then true
228- else (0 >= aE))
229- then throw(((("Cost should be positive, but passed " + toString(aD)) + " and ") + toString(aE)))
230- else if ((0 > aI))
231+ else (0 >= aF))
232+ then throw(((("Cost should be positive, but passed " + toString(aE)) + " and ") + toString(aF)))
233+ else if ((0 > aJ))
231234 then throw("Number of Grand Prizes should be non-negative")
232- else $Tuple2([IntegerEntry(h, j), StringEntry(i(j), aB(toBase58String(aS.transactionId), aD, aE, N, aG, aH, aI)), StringEntry(k(j), aJ("CREATED", " ", 0, 0, 0))], j)
235+ else $Tuple2([IntegerEntry(h, j), StringEntry(i(j), aC(toBase58String(aT.transactionId), aE, aF, O, aH, aI, aJ)), StringEntry(k(j), aK("CREATED", " ", 0, 0, 0))], j)
233236 }
234237 }
235238
236239
237240
238-@Callable(aS)
241+@Callable(aT)
239242 func register () = {
240- let aU = aP()
241- if ((size(aS.payments) != 1))
243+ let aV = aQ()
244+ if ((size(aT.payments) != 1))
242245 then throw("exactly 1 payment must be attached")
243246 else {
244- let aV = aS.payments[0]
245- let aW = aV.amount
246- let aX = valueOrErrorMessage(aV.assetId, "WLGOLD payments only!")
247- if ((aX != aj))
247+ let aW = aT.payments[0]
248+ let aX = aW.amount
249+ let aY = valueOrErrorMessage(aW.assetId, "WLGOLD payments only!")
250+ if ((aY != ak))
248251 then throw("WLGOLD payments only!")
249252 else {
250- let L = valueOrErrorMessage(getInteger(h), "No active tournaments")
251- let N = lastBlock.timestamp
252- let O = F(this, L)
253- let H = O[t]
254- let I = O[u]
255- let aK = I[A]
256- if (!(if (if (if ((aK == "CREATED"))
257- then (N > parseIntValue(H[x]))
253+ let M = valueOrErrorMessage(getInteger(h), "No active tournaments")
254+ let O = lastBlock.timestamp
255+ let P = G(this, M)
256+ let I = P[u]
257+ let J = P[v]
258+ let aL = J[B]
259+ if (!(if (if (if ((aL == "CREATED"))
260+ then (O > parseIntValue(I[y]))
258261 else false)
259- then ((parseIntValue(H[y]) - az) > N)
262+ then ((parseIntValue(I[z]) - aA) > O)
260263 else false)
261264 then true
262- else if ((aK == "INPROGRESS"))
263- then ((parseIntValue(H[y]) - az) > N)
265+ else if ((aL == "INPROGRESS"))
266+ then ((parseIntValue(I[z]) - aA) > O)
264267 else false))
265268 then throw("Cannot register now")
266269 else {
267- let aY = parseIntValue(H[v])
268- if ((aW != aY))
269- then throw((("Need payment of " + ap(aY, 8)) + " WLGOLD"))
270+ let aZ = parseIntValue(I[w])
271+ if ((aX != aZ))
272+ then throw((("Need payment of " + aq(aZ, 8)) + " WLGOLD"))
270273 else {
271- let g = aQ(aS.originCaller)
272- let aZ = valueOrElse(getString(l(L)), "")
273- if (if (valueOrElse(getBoolean(p(L, g)), false))
274+ let g = aR(aT.originCaller)
275+ let ba = valueOrElse(getString(l(M)), "")
276+ if (if (valueOrElse(getBoolean(p(M, g)), false))
274277 then true
275- else contains(aZ, g))
276- then throw(((("Your duck " + g) + " is already registered at tournament ") + toString(L)))
278+ else contains(ba, g))
279+ then throw(((("Your duck " + g) + " is already registered at tournament ") + toString(M)))
277280 else {
278- let ba = aJ("INPROGRESS", I[B], parseIntValue(I[C]), (parseIntValue(I[D]) + 1), parseIntValue(I[E]))
279- $Tuple2([IntegerEntry(o(g), L), BooleanEntry(p(L, g), true), StringEntry(l(L), if ((aZ == ""))
281+ let bb = aK("INPROGRESS", J[C], parseIntValue(J[D]), (parseIntValue(J[E]) + 1), parseIntValue(J[F]))
282+ $Tuple2([IntegerEntry(o(g), M), BooleanEntry(p(M, g), true), StringEntry(l(M), if ((ba == ""))
280283 then (g + ":000")
281- else (((aZ + "_") + g) + ":000")), StringEntry(k(L), ba)], aU)
284+ else (((ba + "_") + g) + ":000")), StringEntry(k(M), bb)], aV)
282285 }
283286 }
284287 }
288291
289292
290293
291-@Callable(aS)
294+@Callable(aT)
292295 func newAttempt () = {
293- let aU = aP()
294- let g = aQ(aS.originCaller)
295- let L = valueOrErrorMessage(getInteger(h), "No active tournaments")
296- let N = lastBlock.timestamp
297- let O = F(this, L)
298- let H = O[t]
299- let I = O[u]
300- let aK = I[A]
301- if (!(if ((aK == "INPROGRESS"))
302- then ((parseIntValue(H[y]) - az) > N)
296+ let aV = aQ()
297+ let g = aR(aT.originCaller)
298+ let M = valueOrErrorMessage(getInteger(h), "No active tournaments")
299+ let O = lastBlock.timestamp
300+ let P = G(this, M)
301+ let I = P[u]
302+ let J = P[v]
303+ let aL = J[B]
304+ if (!(if ((aL == "INPROGRESS"))
305+ then ((parseIntValue(I[z]) - aA) > O)
303306 else false))
304307 then throw("Attempt is not possible")
305- else if (!(valueOrElse(getBoolean(p(L, g)), false)))
306- then throw(((("Your duck " + g) + " is not registered at tournament ") + toString(L)))
308+ else if (!(valueOrElse(getBoolean(p(M, g)), false)))
309+ then throw(((("Your duck " + g) + " is not registered at tournament ") + toString(M)))
307310 else {
308- let bb = r(L, g)
309- let bc = getInteger(bb)
310- let bd = if (!(isDefined(bc)))
311+ let bc = r(M, g)
312+ let bd = getInteger(bc)
313+ let be = if (!(isDefined(bd)))
311314 then $Tuple2(0, 0)
312- else if ((size(aS.payments) != 1))
315+ else if ((size(aT.payments) != 1))
313316 then throw("exactly 1 payment must be attached")
314317 else {
315- let aV = aS.payments[0]
316- let aW = aV.amount
317- let aX = valueOrErrorMessage(aV.assetId, "WLGOLD payments only!")
318- if ((aX != aj))
318+ let aW = aT.payments[0]
319+ let aX = aW.amount
320+ let aY = valueOrErrorMessage(aW.assetId, "WLGOLD payments only!")
321+ if ((aY != ak))
319322 then throw("WLGOLD payments only!")
320323 else {
321- let be = parseIntValue(H[w])
322- if ((aW != be))
323- then throw((("Need payment of " + ap(be, 8)) + " WLGOLD"))
324- else $Tuple2((value(bc) + 1), 1)
324+ let bf = parseIntValue(I[x])
325+ if ((aX != bf))
326+ then throw((("Need payment of " + aq(bf, 8)) + " WLGOLD"))
327+ else $Tuple2((value(bd) + 1), 1)
325328 }
326329 }
327- let bf = bd._1
328- let bg = bd._2
329- let ba = aJ("INPROGRESS", I[B], parseIntValue(I[C]), parseIntValue(I[D]), (parseIntValue(I[E]) + bg))
330- let bh = ak(invoke(ag, "initDuckTourAttempt", [g], nil))
331- $Tuple2([IntegerEntry(bb, bf), StringEntry(k(L), ba)], [aU, bf, bh])
330+ let bg = be._1
331+ let bh = be._2
332+ let bb = aK("INPROGRESS", J[C], parseIntValue(J[D]), parseIntValue(J[E]), (parseIntValue(J[F]) + bh))
333+ let bi = al(invoke(ah, "initDuckTourAttempt", [g], nil))
334+ $Tuple2([IntegerEntry(bc, bg), StringEntry(k(M), bb)], [aV, bg, bi])
332335 }
333336 }
334337
335338
336339
337-@Callable(aS)
338-func saveDuckResult (g,bi) = if ((aS.caller != ag))
340+@Callable(aT)
341+func saveDuckResult (g,bj) = if ((aT.caller != ah))
339342 then throw("Access denied")
340343 else {
341- let L = valueOrErrorMessage(getInteger(h), "No active tournaments")
342- let O = F(this, L)
343- let H = O[t]
344- let I = O[u]
345- let bj = valueOrElse(getString(ag, f(g)), a)
346- let bk = s(L, g)
347- let bl = m(L)
348- let bm = valueOrElse(getInteger(bl), 0)
349- if (J(this, bj))
344+ let M = valueOrErrorMessage(getInteger(h), "No active tournaments")
345+ let P = G(this, M)
346+ let I = P[u]
347+ let J = P[v]
348+ let bk = valueOrElse(getString(ah, f(g)), a)
349+ let bl = s(M, g)
350+ let bm = m(M)
351+ let bn = valueOrElse(getInteger(bm), 0)
352+ if (K(this, bk))
350353 then {
351- let bn = valueOrElse(getInteger(bk), 0)
352- let bo = l(L)
353- let aZ = valueOrElse(getString(bo), "")
354- let bp = if ((bi > bn))
355- then if (!(contains(aZ, g)))
354+ let bo = valueOrElse(getInteger(bl), 0)
355+ let bp = l(M)
356+ let ba = valueOrElse(getString(bp), "")
357+ let bq = if ((bj > bo))
358+ then if (!(contains(ba, g)))
356359 then throw(("scoreBoard does not contain " + g))
357360 else {
358- let bq = parseIntValue(I[C])
359- let aL = I[B]
360- let br = if (if ((aL == ""))
361+ let br = parseIntValue(J[D])
362+ let aM = J[C]
363+ let bs = if (if ((aM == ""))
361364 then true
362- else (aL == " "))
365+ else (aM == " "))
363366 then nil
364- else split_4C(aL, ",")
365- let bs = if ((bi > bq))
367+ else split_4C(aM, ",")
368+ let bt = if ((bj > br))
366369 then [g]
367- else if (if ((bq > bi))
370+ else if (if ((br > bj))
368371 then true
369- else containsElement(br, g))
370- then br
371- else (br :+ g)
372- let ba = aJ("INPROGRESS", makeString_2C(bs, ","), max([bi, bq]), parseIntValue(I[D]), parseIntValue(I[E]))
373- let bt = split_51C(aZ, g)
374- $Tuple3(((((bt[0] + g) + ":") + av(bi, 3)) + drop(bt[1], 4)), ((bm + bi) - bn), [StringEntry(k(L), ba)])
372+ else containsElement(bs, g))
373+ then bs
374+ else (bs :+ g)
375+ let bb = aK("INPROGRESS", makeString_2C(bt, ","), max([bj, br]), parseIntValue(J[E]), parseIntValue(J[F]))
376+ let bu = split_51C(ba, g)
377+ $Tuple3(((((bu[0] + g) + ":") + aw(bj, 3)) + drop(bu[1], 4)), ((bn + bj) - bo), [StringEntry(k(M), bb)])
375378 }
376- else $Tuple3(aZ, bm, nil)
377- let bu = bp._1
378- let bv = bp._2
379- let bw = bp._3
380- $Tuple2(([IntegerEntry(bk, max([bn, bi])), IntegerEntry(bl, bv), StringEntry(bo, bu)] ++ bw), 0)
379+ else $Tuple3(ba, bn, nil)
380+ let bv = bq._1
381+ let bw = bq._2
382+ let bx = bq._3
383+ $Tuple2(([IntegerEntry(bl, max([bo, bj])), IntegerEntry(bm, bw), StringEntry(t(M, g), toBase58String(aT.transactionId)), StringEntry(bp, bv)] ++ bx), 0)
381384 }
382385 else $Tuple2(nil, 0)
383386 }
384387
385388
386389
387-@Callable(aS)
390+@Callable(aT)
388391 func processTournament (j) = {
389- let aR = toString(aS.caller)
390- if (!(containsElement(aA, aR)))
392+ let aS = toString(aT.caller)
393+ if (!(containsElement(aB, aS)))
391394 then throw("Permission denied")
392395 else {
393- let N = lastBlock.timestamp
394- let O = F(this, j)
395- let H = O[t]
396- let I = O[u]
397- let aK = I[A]
398- let bx = parseIntValue(I[D])
399- let by = parseIntValue(I[E])
400- let aY = parseIntValue(H[v])
401- let be = parseIntValue(H[w])
402- if ((aK == "ARCHIVED"))
396+ let O = lastBlock.timestamp
397+ let P = G(this, j)
398+ let I = P[u]
399+ let J = P[v]
400+ let aL = J[B]
401+ let by = parseIntValue(J[E])
402+ let bz = parseIntValue(J[F])
403+ let aZ = parseIntValue(I[w])
404+ let bf = parseIntValue(I[x])
405+ if ((aL == "ARCHIVED"))
403406 then throw((("Tournament " + toString(j)) + " is already ARCHIVED"))
404- else if (if ((aK == "INPROGRESS"))
405- then (parseIntValue(H[y]) > N)
407+ else if (if ((aL == "INPROGRESS"))
408+ then (parseIntValue(I[z]) > O)
406409 else false)
407410 then throw((("Tournament " + toString(j)) + " is not over yet"))
408411 else {
409- let ba = aJ("PROCESSING", I[B], parseIntValue(I[C]), bx, by)
410- $Tuple2([StringEntry(k(j), ba), IntegerEntry(n(j), (((bx * aY) + (by * be)) / 2))], 0)
412+ let bb = aK("PROCESSING", J[C], parseIntValue(J[D]), by, bz)
413+ $Tuple2([StringEntry(k(j), bb), IntegerEntry(n(j), (((by * aZ) + (bz * bf)) / 2))], 0)
411414 }
412415 }
413416 }
414417
415418
416419
417-@Callable(aS)
420+@Callable(aT)
418421 func finishTournament (j) = {
419- let aR = toString(aS.caller)
420- if (!(containsElement(aA, aR)))
422+ let aS = toString(aT.caller)
423+ if (!(containsElement(aB, aS)))
421424 then throw("Permission denied")
422425 else {
423- let O = F(this, j)
424- let I = O[u]
425- let aK = I[A]
426- if ((aK == "ARCHIVED"))
426+ let P = G(this, j)
427+ let J = P[v]
428+ let aL = J[B]
429+ if ((aL == "ARCHIVED"))
427430 then throw((("Tournament " + toString(j)) + " is already ARCHIVED"))
428431 else {
429- let ba = aJ("ARCHIVED", I[B], parseIntValue(I[C]), parseIntValue(I[D]), parseIntValue(I[E]))
430- $Tuple2([StringEntry(k(j), ba)], 0)
432+ let bb = aK("ARCHIVED", J[C], parseIntValue(J[D]), parseIntValue(J[E]), parseIntValue(J[F]))
433+ $Tuple2([StringEntry(k(j), bb)], 0)
431434 }
432435 }
433436 }
434437
435438
436439
437-@Callable(aS)
440+@Callable(aT)
438441 func claimPrize (j) = {
439- let aU = aP()
440- if ((size(aS.payments) != 0))
442+ let aV = aQ()
443+ if ((size(aT.payments) != 0))
441444 then throw("No payments required")
442445 else {
443- let O = F(this, j)
444- let H = O[t]
445- let I = O[u]
446- let aK = I[A]
447- if ((aK != "PROCESSING"))
446+ let P = G(this, j)
447+ let I = P[u]
448+ let J = P[v]
449+ let aL = J[B]
450+ if ((aL != "PROCESSING"))
448451 then throw((("Tournament " + toString(j)) + " is not PROCESSING"))
449452 else {
450- let bx = parseIntValue(I[D])
451- let by = parseIntValue(I[E])
452- let aY = parseIntValue(H[v])
453- let be = parseIntValue(H[w])
454- let bz = (((bx * aY) + (by * be)) / 2)
455- let bA = n(j)
456- let bB = valueOrElse(getInteger(bA), 0)
457- let g = aQ(aS.originCaller)
458- let bC = valueOrElse(getString(l(j)), "")
453+ let by = parseIntValue(J[E])
454+ let bz = parseIntValue(J[F])
455+ let aZ = parseIntValue(I[w])
456+ let bf = parseIntValue(I[x])
457+ let bA = (((by * aZ) + (bz * bf)) / 2)
458+ let bB = n(j)
459+ let bC = valueOrElse(getInteger(bB), 0)
460+ let g = aR(aT.originCaller)
461+ let bD = valueOrElse(getString(l(j)), "")
459462 if (!(valueOrElse(getBoolean(p(j, g)), false)))
460463 then throw(((("Your duck " + g) + " is not registered at tournament ") + toString(j)))
461464 else {
462- let bk = s(j, g)
463- let bD = valueOrElse(getInteger(bk), 0)
464- if ((bD == 0))
465+ let bl = s(j, g)
466+ let bE = valueOrElse(getInteger(bl), 0)
467+ if ((bE == 0))
465468 then throw("Your duck got zero score")
466469 else {
467- let bE = q(j, g)
468- if (valueOrElse(getBoolean(bE), false))
470+ let bF = q(j, g)
471+ if (valueOrElse(getBoolean(bF), false))
469472 then throw(((("Your duck " + g) + " is already awarded at tournament ") + toString(j)))
470473 else {
471- let bl = m(j)
472- let bF = valueOrElse(getInteger(bl), 0)
473- let aL = I[B]
474- let bG = if (if ((aL == ""))
474+ let bm = m(j)
475+ let bG = valueOrElse(getInteger(bm), 0)
476+ let aM = J[C]
477+ let bH = if (if ((aM == ""))
475478 then true
476- else (aL == " "))
479+ else (aM == " "))
477480 then nil
478- else split_4C(aL, ",")
479- let bH = size(bG)
480- if ((bH == 0))
481+ else split_4C(aM, ",")
482+ let bI = size(bH)
483+ if ((bI == 0))
481484 then throw(("No leaders at tournament " + toString(j)))
482485 else {
483- let aI = parseIntValue(H[z])
484- let aM = parseIntValue(I[C])
485- let bI = if ((bH > aI))
486+ let aJ = parseIntValue(I[A])
487+ let aN = parseIntValue(J[D])
488+ let bJ = if ((bI > aJ))
486489 then 0
487- else if (containsElement(bG, g))
490+ else if (containsElement(bH, g))
488491 then throw("As one of winners, you will be awarded by admins")
489- else (bH * aM)
490- let bJ = min([fraction(bD, bz, (bF - bI)), bB])
491- let bK = (bB - bJ)
492- let ba = aJ("ARCHIVED", I[B], aM, bx, by)
493- let bL = if ((0 >= bK))
494- then [StringEntry(k(j), ba)]
492+ else (bI * aN)
493+ let bK = min([fraction(bE, bA, (bG - bJ)), bC])
494+ let bL = (bC - bK)
495+ let bb = aK("ARCHIVED", J[C], aN, by, bz)
496+ let bM = if ((0 >= bL))
497+ then [StringEntry(k(j), bb)]
495498 else nil
496- $Tuple2(([ScriptTransfer(aS.caller, bJ, aj), BooleanEntry(bE, true), IntegerEntry(bA, bK)] ++ bL), 0)
499+ $Tuple2(([ScriptTransfer(aT.caller, bK, ak), BooleanEntry(bF, true), IntegerEntry(bB, bL)] ++ bM), 0)
497500 }
498501 }
499502 }
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
48-let t = 0
48+func t (j,g) = makeString(["%s%d%s__bestTxByTourAndDuck", toString(j), g], "__")
4949
50-let u = 1
5150
52-let v = 2
51+let u = 0
5352
54-let w = 3
53+let v = 1
5554
56-let x = 5
55+let w = 2
5756
58-let y = 6
57+let x = 3
5958
60-let z = 7
59+let y = 5
6160
62-let A = 1
61+let z = 6
6362
64-let B = 2
63+let A = 7
6564
66-let C = 3
65+let B = 1
6766
68-let D = 4
67+let C = 2
6968
70-let E = 5
69+let D = 3
7170
72-func F (G,j) = {
73- let H = split(valueOrErrorMessage(getString(G, i(j)), (("Error reading tournament " + toString(j)) + " data")), "__")
74- let I = split_4C(valueOrErrorMessage(getString(G, k(j)), (("Error reading tournament " + toString(j)) + " data")), "__")
75-[H, I]
71+let E = 4
72+
73+let F = 5
74+
75+func G (H,j) = {
76+ let I = split(valueOrErrorMessage(getString(H, i(j)), (("Error reading tournament " + toString(j)) + " data")), "__")
77+ let J = split_4C(valueOrErrorMessage(getString(H, k(j)), (("Error reading tournament " + toString(j)) + " data")), "__")
78+[I, J]
7679 }
7780
7881
79-func J (G,K) = {
80- let L = valueOrElse(getInteger(G, h), 0)
81- let M = split(K, "_")
82- let N = lastBlock.timestamp
83- let O = F(G, L)
84- let H = O[t]
85- let I = O[u]
86- if (if (if ((M[c] == "T"))
87- then (parseIntValue(M[b]) == L)
82+func K (H,L) = {
83+ let M = valueOrElse(getInteger(H, h), 0)
84+ let N = split(L, "_")
85+ let O = lastBlock.timestamp
86+ let P = G(H, M)
87+ let I = P[u]
88+ let J = P[v]
89+ if (if (if ((N[c] == "T"))
90+ then (parseIntValue(N[b]) == M)
8891 else false)
89- then (I[A] == "INPROGRESS")
92+ then (J[B] == "INPROGRESS")
9093 else false)
91- then (parseIntValue(H[y]) > N)
94+ then (parseIntValue(I[z]) > O)
9295 else false
9396 }
9497
9598
96-let P = take(drop(this.bytes, 1), 1)
99+let Q = take(drop(this.bytes, 1), 1)
97100
98-let Q = {
99- let R = P
100- if ((base58'2W' == R))
101+let R = {
102+ let S = Q
103+ if ((base58'2W' == S))
101104 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
102- else if ((base58'2T' == R))
105+ else if ((base58'2T' == S))
103106 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
104107 else throw("Unknown chain")
105108 }
106109
107-let S = "__"
110+let T = "__"
108111
109-func T (U,V) = valueOrErrorMessage(getString(U, V), makeString(["mandatory ", toString(U), ".", V, " is not defined"], ""))
112+func U (V,W) = valueOrErrorMessage(getString(V, W), makeString(["mandatory ", toString(V), ".", W, " is not defined"], ""))
110113
111114
112-let W = 1
115+let X = 1
113116
114-let X = 4
117+let Y = 4
115118
116-func Y () = "%s__restConfig"
119+func Z () = "%s__restConfig"
117120
118121
119-func Z () = "%s__restAddr"
122+func aa () = "%s__restAddr"
120123
121124
122-func aa (ab) = split_4C(T(ab, Y()), S)
125+func ab (ac) = split_4C(U(ac, Z()), T)
123126
124127
125-func ac (ad,ae) = valueOrErrorMessage(addressFromString(ad[ae]), ("Rest cfg doesn't contain address at index " + toString(ae)))
128+func ad (ae,af) = valueOrErrorMessage(addressFromString(ae[af]), ("Rest cfg doesn't contain address at index " + toString(af)))
126129
127130
128-let af = addressFromStringValue(valueOrElse(getString(this, Z()), Q))
131+let ag = addressFromStringValue(valueOrElse(getString(this, aa()), R))
129132
130-let ad = aa(af)
133+let ae = ab(ag)
131134
132-let ag = ac(ad, W)
135+let ah = ad(ae, X)
133136
134-let ah = ac(ad, X)
137+let ai = ad(ae, Y)
135138
136-let ai = "wlg_assetId"
139+let aj = "wlg_assetId"
137140
138-let aj = valueOrErrorMessage(getBinary(ah, ai), "Not initialized yet")
141+let ak = valueOrErrorMessage(getBinary(ai, aj), "Not initialized yet")
139142
140-func ak (al) = {
141- let R = al
142- if ($isInstanceOf(R, "String"))
143+func al (am) = {
144+ let S = am
145+ if ($isInstanceOf(S, "String"))
143146 then {
144- let am = R
145- am
147+ let an = S
148+ an
146149 }
147150 else throw("fail to cast into String")
148151 }
149152
150153
151-func an (al) = {
152- let R = al
153- if ($isInstanceOf(R, "Int"))
154+func ao (am) = {
155+ let S = am
156+ if ($isInstanceOf(S, "Int"))
154157 then {
155- let ao = R
156- ao
158+ let ap = S
159+ ap
157160 }
158161 else throw("fail to cast into Int")
159162 }
160163
161164
162-func ap (aq,ar) = {
163- let as = pow(10, 0, ar, 0, 0, DOWN)
164- let at = toString((aq % as))
165- let au = drop(toString(as), (1 + size(at)))
166- (((toString((aq / as)) + ".") + au) + at)
165+func aq (ar,as) = {
166+ let at = pow(10, 0, as, 0, 0, DOWN)
167+ let au = toString((ar % at))
168+ let av = drop(toString(at), (1 + size(au)))
169+ (((toString((ar / at)) + ".") + av) + au)
167170 }
168171
169172
170-func av (aq,aw) = {
171- let ax = toString(aq)
172- let au = drop(toString(pow(10, 0, (aw - size(ax)), 0, 0, DOWN)), 1)
173- (au + ax)
173+func aw (ar,ax) = {
174+ let ay = toString(ar)
175+ let av = drop(toString(pow(10, 0, (ax - size(ay)), 0, 0, DOWN)), 1)
176+ (av + ay)
174177 }
175178
176179
177-let ay = 432000000
180+let az = 432000000
178181
179-let az = 3600000
182+let aA = 3600000
180183
181-let aA = [toString(this), {
182- let R = P
183- if ((base58'2W' == R))
184+let aB = [toString(this), {
185+ let S = Q
186+ if ((base58'2W' == S))
184187 then "3PEe2RELUHCFCBsmSCNcBJ8N3URLVQende7"
185- else if ((base58'2T' == R))
188+ else if ((base58'2T' == S))
186189 then "3MtBgJTaLxPB3C7UJD1UE8qjkHthfKvFQYY"
187190 else throw("Unknown chain")
188191 }]
189192
190-func aB (aC,aD,aE,aF,aG,aH,aI) = makeString(["%s%d%d%d%d%d%d", aC, toString(aD), toString(aE), toString(aF), toString(aG), toString(aH), toString(aI)], S)
193+func aC (aD,aE,aF,aG,aH,aI,aJ) = makeString(["%s%d%d%d%d%d%d", aD, toString(aE), toString(aF), toString(aG), toString(aH), toString(aI), toString(aJ)], T)
191194
192195
193-func aJ (aK,aL,aM,aN,aO) = makeString_2C(["%s%s%d%d%d", aK, aL, toString(aM), toString(aN), toString(aO)], S)
196+func aK (aL,aM,aN,aO,aP) = makeString_2C(["%s%s%d%d%d", aL, aM, toString(aN), toString(aO), toString(aP)], T)
194197
195198
196-func aP () = an(invoke(ag, "saveLastTx", nil, nil))
199+func aQ () = ao(invoke(ah, "saveLastTx", nil, nil))
197200
198201
199-func aQ (aR) = valueOrErrorMessage(getString(ag, d(toString(aR))), "You don't have a duck staked")
202+func aR (aS) = valueOrErrorMessage(getString(ah, d(toString(aS))), "You don't have a duck staked")
200203
201204
202-@Callable(aS)
203-func createTournament (aG,aH,aD,aE,aI) = {
204- let aR = toString(aS.caller)
205- if (!(containsElement(aA, aR)))
205+@Callable(aT)
206+func createTournament (aH,aI,aE,aF,aJ) = {
207+ let aS = toString(aT.caller)
208+ if (!(containsElement(aB, aS)))
206209 then throw("Permission denied")
207210 else {
208- let L = getInteger(h)
209- let j = if (isDefined(L))
211+ let M = getInteger(h)
212+ let j = if (isDefined(M))
210213 then {
211- let aT = value(L)
212- let I = valueOrErrorMessage(getString(k(aT)), (("Error reading tournament " + toString(aT)) + " data"))
213- let aK = split(I, S)[A]
214- if ((aK != "ARCHIVED"))
215- then throw(("Current tournement is not completed, status=" + aK))
216- else (aT + 1)
214+ let aU = value(M)
215+ let J = valueOrErrorMessage(getString(k(aU)), (("Error reading tournament " + toString(aU)) + " data"))
216+ let aL = split(J, T)[B]
217+ if ((aL != "ARCHIVED"))
218+ then throw(("Current tournement is not completed, status=" + aL))
219+ else (aU + 1)
217220 }
218221 else 1
219- let N = lastBlock.timestamp
220- if ((N > aG))
221- then throw(((("startTime=" + toString(aG)) + " < creationTime=") + toString(N)))
222- else if ((aG > aH))
223- then throw(((("endTime=" + toString(aH)) + " < startTime=") + toString(aG)))
224- else if (((aH - aG) > ay))
225- then throw(((("Tournament period exceeds max: " + toString((aH - aG))) + " > ") + toString(ay)))
226- else if (if ((0 >= aD))
222+ let O = lastBlock.timestamp
223+ if ((O > aH))
224+ then throw(((("startTime=" + toString(aH)) + " < creationTime=") + toString(O)))
225+ else if ((aH > aI))
226+ then throw(((("endTime=" + toString(aI)) + " < startTime=") + toString(aH)))
227+ else if (((aI - aH) > az))
228+ then throw(((("Tournament period exceeds max: " + toString((aI - aH))) + " > ") + toString(az)))
229+ else if (if ((0 >= aE))
227230 then true
228- else (0 >= aE))
229- then throw(((("Cost should be positive, but passed " + toString(aD)) + " and ") + toString(aE)))
230- else if ((0 > aI))
231+ else (0 >= aF))
232+ then throw(((("Cost should be positive, but passed " + toString(aE)) + " and ") + toString(aF)))
233+ else if ((0 > aJ))
231234 then throw("Number of Grand Prizes should be non-negative")
232- else $Tuple2([IntegerEntry(h, j), StringEntry(i(j), aB(toBase58String(aS.transactionId), aD, aE, N, aG, aH, aI)), StringEntry(k(j), aJ("CREATED", " ", 0, 0, 0))], j)
235+ else $Tuple2([IntegerEntry(h, j), StringEntry(i(j), aC(toBase58String(aT.transactionId), aE, aF, O, aH, aI, aJ)), StringEntry(k(j), aK("CREATED", " ", 0, 0, 0))], j)
233236 }
234237 }
235238
236239
237240
238-@Callable(aS)
241+@Callable(aT)
239242 func register () = {
240- let aU = aP()
241- if ((size(aS.payments) != 1))
243+ let aV = aQ()
244+ if ((size(aT.payments) != 1))
242245 then throw("exactly 1 payment must be attached")
243246 else {
244- let aV = aS.payments[0]
245- let aW = aV.amount
246- let aX = valueOrErrorMessage(aV.assetId, "WLGOLD payments only!")
247- if ((aX != aj))
247+ let aW = aT.payments[0]
248+ let aX = aW.amount
249+ let aY = valueOrErrorMessage(aW.assetId, "WLGOLD payments only!")
250+ if ((aY != ak))
248251 then throw("WLGOLD payments only!")
249252 else {
250- let L = valueOrErrorMessage(getInteger(h), "No active tournaments")
251- let N = lastBlock.timestamp
252- let O = F(this, L)
253- let H = O[t]
254- let I = O[u]
255- let aK = I[A]
256- if (!(if (if (if ((aK == "CREATED"))
257- then (N > parseIntValue(H[x]))
253+ let M = valueOrErrorMessage(getInteger(h), "No active tournaments")
254+ let O = lastBlock.timestamp
255+ let P = G(this, M)
256+ let I = P[u]
257+ let J = P[v]
258+ let aL = J[B]
259+ if (!(if (if (if ((aL == "CREATED"))
260+ then (O > parseIntValue(I[y]))
258261 else false)
259- then ((parseIntValue(H[y]) - az) > N)
262+ then ((parseIntValue(I[z]) - aA) > O)
260263 else false)
261264 then true
262- else if ((aK == "INPROGRESS"))
263- then ((parseIntValue(H[y]) - az) > N)
265+ else if ((aL == "INPROGRESS"))
266+ then ((parseIntValue(I[z]) - aA) > O)
264267 else false))
265268 then throw("Cannot register now")
266269 else {
267- let aY = parseIntValue(H[v])
268- if ((aW != aY))
269- then throw((("Need payment of " + ap(aY, 8)) + " WLGOLD"))
270+ let aZ = parseIntValue(I[w])
271+ if ((aX != aZ))
272+ then throw((("Need payment of " + aq(aZ, 8)) + " WLGOLD"))
270273 else {
271- let g = aQ(aS.originCaller)
272- let aZ = valueOrElse(getString(l(L)), "")
273- if (if (valueOrElse(getBoolean(p(L, g)), false))
274+ let g = aR(aT.originCaller)
275+ let ba = valueOrElse(getString(l(M)), "")
276+ if (if (valueOrElse(getBoolean(p(M, g)), false))
274277 then true
275- else contains(aZ, g))
276- then throw(((("Your duck " + g) + " is already registered at tournament ") + toString(L)))
278+ else contains(ba, g))
279+ then throw(((("Your duck " + g) + " is already registered at tournament ") + toString(M)))
277280 else {
278- let ba = aJ("INPROGRESS", I[B], parseIntValue(I[C]), (parseIntValue(I[D]) + 1), parseIntValue(I[E]))
279- $Tuple2([IntegerEntry(o(g), L), BooleanEntry(p(L, g), true), StringEntry(l(L), if ((aZ == ""))
281+ let bb = aK("INPROGRESS", J[C], parseIntValue(J[D]), (parseIntValue(J[E]) + 1), parseIntValue(J[F]))
282+ $Tuple2([IntegerEntry(o(g), M), BooleanEntry(p(M, g), true), StringEntry(l(M), if ((ba == ""))
280283 then (g + ":000")
281- else (((aZ + "_") + g) + ":000")), StringEntry(k(L), ba)], aU)
284+ else (((ba + "_") + g) + ":000")), StringEntry(k(M), bb)], aV)
282285 }
283286 }
284287 }
285288 }
286289 }
287290 }
288291
289292
290293
291-@Callable(aS)
294+@Callable(aT)
292295 func newAttempt () = {
293- let aU = aP()
294- let g = aQ(aS.originCaller)
295- let L = valueOrErrorMessage(getInteger(h), "No active tournaments")
296- let N = lastBlock.timestamp
297- let O = F(this, L)
298- let H = O[t]
299- let I = O[u]
300- let aK = I[A]
301- if (!(if ((aK == "INPROGRESS"))
302- then ((parseIntValue(H[y]) - az) > N)
296+ let aV = aQ()
297+ let g = aR(aT.originCaller)
298+ let M = valueOrErrorMessage(getInteger(h), "No active tournaments")
299+ let O = lastBlock.timestamp
300+ let P = G(this, M)
301+ let I = P[u]
302+ let J = P[v]
303+ let aL = J[B]
304+ if (!(if ((aL == "INPROGRESS"))
305+ then ((parseIntValue(I[z]) - aA) > O)
303306 else false))
304307 then throw("Attempt is not possible")
305- else if (!(valueOrElse(getBoolean(p(L, g)), false)))
306- then throw(((("Your duck " + g) + " is not registered at tournament ") + toString(L)))
308+ else if (!(valueOrElse(getBoolean(p(M, g)), false)))
309+ then throw(((("Your duck " + g) + " is not registered at tournament ") + toString(M)))
307310 else {
308- let bb = r(L, g)
309- let bc = getInteger(bb)
310- let bd = if (!(isDefined(bc)))
311+ let bc = r(M, g)
312+ let bd = getInteger(bc)
313+ let be = if (!(isDefined(bd)))
311314 then $Tuple2(0, 0)
312- else if ((size(aS.payments) != 1))
315+ else if ((size(aT.payments) != 1))
313316 then throw("exactly 1 payment must be attached")
314317 else {
315- let aV = aS.payments[0]
316- let aW = aV.amount
317- let aX = valueOrErrorMessage(aV.assetId, "WLGOLD payments only!")
318- if ((aX != aj))
318+ let aW = aT.payments[0]
319+ let aX = aW.amount
320+ let aY = valueOrErrorMessage(aW.assetId, "WLGOLD payments only!")
321+ if ((aY != ak))
319322 then throw("WLGOLD payments only!")
320323 else {
321- let be = parseIntValue(H[w])
322- if ((aW != be))
323- then throw((("Need payment of " + ap(be, 8)) + " WLGOLD"))
324- else $Tuple2((value(bc) + 1), 1)
324+ let bf = parseIntValue(I[x])
325+ if ((aX != bf))
326+ then throw((("Need payment of " + aq(bf, 8)) + " WLGOLD"))
327+ else $Tuple2((value(bd) + 1), 1)
325328 }
326329 }
327- let bf = bd._1
328- let bg = bd._2
329- let ba = aJ("INPROGRESS", I[B], parseIntValue(I[C]), parseIntValue(I[D]), (parseIntValue(I[E]) + bg))
330- let bh = ak(invoke(ag, "initDuckTourAttempt", [g], nil))
331- $Tuple2([IntegerEntry(bb, bf), StringEntry(k(L), ba)], [aU, bf, bh])
330+ let bg = be._1
331+ let bh = be._2
332+ let bb = aK("INPROGRESS", J[C], parseIntValue(J[D]), parseIntValue(J[E]), (parseIntValue(J[F]) + bh))
333+ let bi = al(invoke(ah, "initDuckTourAttempt", [g], nil))
334+ $Tuple2([IntegerEntry(bc, bg), StringEntry(k(M), bb)], [aV, bg, bi])
332335 }
333336 }
334337
335338
336339
337-@Callable(aS)
338-func saveDuckResult (g,bi) = if ((aS.caller != ag))
340+@Callable(aT)
341+func saveDuckResult (g,bj) = if ((aT.caller != ah))
339342 then throw("Access denied")
340343 else {
341- let L = valueOrErrorMessage(getInteger(h), "No active tournaments")
342- let O = F(this, L)
343- let H = O[t]
344- let I = O[u]
345- let bj = valueOrElse(getString(ag, f(g)), a)
346- let bk = s(L, g)
347- let bl = m(L)
348- let bm = valueOrElse(getInteger(bl), 0)
349- if (J(this, bj))
344+ let M = valueOrErrorMessage(getInteger(h), "No active tournaments")
345+ let P = G(this, M)
346+ let I = P[u]
347+ let J = P[v]
348+ let bk = valueOrElse(getString(ah, f(g)), a)
349+ let bl = s(M, g)
350+ let bm = m(M)
351+ let bn = valueOrElse(getInteger(bm), 0)
352+ if (K(this, bk))
350353 then {
351- let bn = valueOrElse(getInteger(bk), 0)
352- let bo = l(L)
353- let aZ = valueOrElse(getString(bo), "")
354- let bp = if ((bi > bn))
355- then if (!(contains(aZ, g)))
354+ let bo = valueOrElse(getInteger(bl), 0)
355+ let bp = l(M)
356+ let ba = valueOrElse(getString(bp), "")
357+ let bq = if ((bj > bo))
358+ then if (!(contains(ba, g)))
356359 then throw(("scoreBoard does not contain " + g))
357360 else {
358- let bq = parseIntValue(I[C])
359- let aL = I[B]
360- let br = if (if ((aL == ""))
361+ let br = parseIntValue(J[D])
362+ let aM = J[C]
363+ let bs = if (if ((aM == ""))
361364 then true
362- else (aL == " "))
365+ else (aM == " "))
363366 then nil
364- else split_4C(aL, ",")
365- let bs = if ((bi > bq))
367+ else split_4C(aM, ",")
368+ let bt = if ((bj > br))
366369 then [g]
367- else if (if ((bq > bi))
370+ else if (if ((br > bj))
368371 then true
369- else containsElement(br, g))
370- then br
371- else (br :+ g)
372- let ba = aJ("INPROGRESS", makeString_2C(bs, ","), max([bi, bq]), parseIntValue(I[D]), parseIntValue(I[E]))
373- let bt = split_51C(aZ, g)
374- $Tuple3(((((bt[0] + g) + ":") + av(bi, 3)) + drop(bt[1], 4)), ((bm + bi) - bn), [StringEntry(k(L), ba)])
372+ else containsElement(bs, g))
373+ then bs
374+ else (bs :+ g)
375+ let bb = aK("INPROGRESS", makeString_2C(bt, ","), max([bj, br]), parseIntValue(J[E]), parseIntValue(J[F]))
376+ let bu = split_51C(ba, g)
377+ $Tuple3(((((bu[0] + g) + ":") + aw(bj, 3)) + drop(bu[1], 4)), ((bn + bj) - bo), [StringEntry(k(M), bb)])
375378 }
376- else $Tuple3(aZ, bm, nil)
377- let bu = bp._1
378- let bv = bp._2
379- let bw = bp._3
380- $Tuple2(([IntegerEntry(bk, max([bn, bi])), IntegerEntry(bl, bv), StringEntry(bo, bu)] ++ bw), 0)
379+ else $Tuple3(ba, bn, nil)
380+ let bv = bq._1
381+ let bw = bq._2
382+ let bx = bq._3
383+ $Tuple2(([IntegerEntry(bl, max([bo, bj])), IntegerEntry(bm, bw), StringEntry(t(M, g), toBase58String(aT.transactionId)), StringEntry(bp, bv)] ++ bx), 0)
381384 }
382385 else $Tuple2(nil, 0)
383386 }
384387
385388
386389
387-@Callable(aS)
390+@Callable(aT)
388391 func processTournament (j) = {
389- let aR = toString(aS.caller)
390- if (!(containsElement(aA, aR)))
392+ let aS = toString(aT.caller)
393+ if (!(containsElement(aB, aS)))
391394 then throw("Permission denied")
392395 else {
393- let N = lastBlock.timestamp
394- let O = F(this, j)
395- let H = O[t]
396- let I = O[u]
397- let aK = I[A]
398- let bx = parseIntValue(I[D])
399- let by = parseIntValue(I[E])
400- let aY = parseIntValue(H[v])
401- let be = parseIntValue(H[w])
402- if ((aK == "ARCHIVED"))
396+ let O = lastBlock.timestamp
397+ let P = G(this, j)
398+ let I = P[u]
399+ let J = P[v]
400+ let aL = J[B]
401+ let by = parseIntValue(J[E])
402+ let bz = parseIntValue(J[F])
403+ let aZ = parseIntValue(I[w])
404+ let bf = parseIntValue(I[x])
405+ if ((aL == "ARCHIVED"))
403406 then throw((("Tournament " + toString(j)) + " is already ARCHIVED"))
404- else if (if ((aK == "INPROGRESS"))
405- then (parseIntValue(H[y]) > N)
407+ else if (if ((aL == "INPROGRESS"))
408+ then (parseIntValue(I[z]) > O)
406409 else false)
407410 then throw((("Tournament " + toString(j)) + " is not over yet"))
408411 else {
409- let ba = aJ("PROCESSING", I[B], parseIntValue(I[C]), bx, by)
410- $Tuple2([StringEntry(k(j), ba), IntegerEntry(n(j), (((bx * aY) + (by * be)) / 2))], 0)
412+ let bb = aK("PROCESSING", J[C], parseIntValue(J[D]), by, bz)
413+ $Tuple2([StringEntry(k(j), bb), IntegerEntry(n(j), (((by * aZ) + (bz * bf)) / 2))], 0)
411414 }
412415 }
413416 }
414417
415418
416419
417-@Callable(aS)
420+@Callable(aT)
418421 func finishTournament (j) = {
419- let aR = toString(aS.caller)
420- if (!(containsElement(aA, aR)))
422+ let aS = toString(aT.caller)
423+ if (!(containsElement(aB, aS)))
421424 then throw("Permission denied")
422425 else {
423- let O = F(this, j)
424- let I = O[u]
425- let aK = I[A]
426- if ((aK == "ARCHIVED"))
426+ let P = G(this, j)
427+ let J = P[v]
428+ let aL = J[B]
429+ if ((aL == "ARCHIVED"))
427430 then throw((("Tournament " + toString(j)) + " is already ARCHIVED"))
428431 else {
429- let ba = aJ("ARCHIVED", I[B], parseIntValue(I[C]), parseIntValue(I[D]), parseIntValue(I[E]))
430- $Tuple2([StringEntry(k(j), ba)], 0)
432+ let bb = aK("ARCHIVED", J[C], parseIntValue(J[D]), parseIntValue(J[E]), parseIntValue(J[F]))
433+ $Tuple2([StringEntry(k(j), bb)], 0)
431434 }
432435 }
433436 }
434437
435438
436439
437-@Callable(aS)
440+@Callable(aT)
438441 func claimPrize (j) = {
439- let aU = aP()
440- if ((size(aS.payments) != 0))
442+ let aV = aQ()
443+ if ((size(aT.payments) != 0))
441444 then throw("No payments required")
442445 else {
443- let O = F(this, j)
444- let H = O[t]
445- let I = O[u]
446- let aK = I[A]
447- if ((aK != "PROCESSING"))
446+ let P = G(this, j)
447+ let I = P[u]
448+ let J = P[v]
449+ let aL = J[B]
450+ if ((aL != "PROCESSING"))
448451 then throw((("Tournament " + toString(j)) + " is not PROCESSING"))
449452 else {
450- let bx = parseIntValue(I[D])
451- let by = parseIntValue(I[E])
452- let aY = parseIntValue(H[v])
453- let be = parseIntValue(H[w])
454- let bz = (((bx * aY) + (by * be)) / 2)
455- let bA = n(j)
456- let bB = valueOrElse(getInteger(bA), 0)
457- let g = aQ(aS.originCaller)
458- let bC = valueOrElse(getString(l(j)), "")
453+ let by = parseIntValue(J[E])
454+ let bz = parseIntValue(J[F])
455+ let aZ = parseIntValue(I[w])
456+ let bf = parseIntValue(I[x])
457+ let bA = (((by * aZ) + (bz * bf)) / 2)
458+ let bB = n(j)
459+ let bC = valueOrElse(getInteger(bB), 0)
460+ let g = aR(aT.originCaller)
461+ let bD = valueOrElse(getString(l(j)), "")
459462 if (!(valueOrElse(getBoolean(p(j, g)), false)))
460463 then throw(((("Your duck " + g) + " is not registered at tournament ") + toString(j)))
461464 else {
462- let bk = s(j, g)
463- let bD = valueOrElse(getInteger(bk), 0)
464- if ((bD == 0))
465+ let bl = s(j, g)
466+ let bE = valueOrElse(getInteger(bl), 0)
467+ if ((bE == 0))
465468 then throw("Your duck got zero score")
466469 else {
467- let bE = q(j, g)
468- if (valueOrElse(getBoolean(bE), false))
470+ let bF = q(j, g)
471+ if (valueOrElse(getBoolean(bF), false))
469472 then throw(((("Your duck " + g) + " is already awarded at tournament ") + toString(j)))
470473 else {
471- let bl = m(j)
472- let bF = valueOrElse(getInteger(bl), 0)
473- let aL = I[B]
474- let bG = if (if ((aL == ""))
474+ let bm = m(j)
475+ let bG = valueOrElse(getInteger(bm), 0)
476+ let aM = J[C]
477+ let bH = if (if ((aM == ""))
475478 then true
476- else (aL == " "))
479+ else (aM == " "))
477480 then nil
478- else split_4C(aL, ",")
479- let bH = size(bG)
480- if ((bH == 0))
481+ else split_4C(aM, ",")
482+ let bI = size(bH)
483+ if ((bI == 0))
481484 then throw(("No leaders at tournament " + toString(j)))
482485 else {
483- let aI = parseIntValue(H[z])
484- let aM = parseIntValue(I[C])
485- let bI = if ((bH > aI))
486+ let aJ = parseIntValue(I[A])
487+ let aN = parseIntValue(J[D])
488+ let bJ = if ((bI > aJ))
486489 then 0
487- else if (containsElement(bG, g))
490+ else if (containsElement(bH, g))
488491 then throw("As one of winners, you will be awarded by admins")
489- else (bH * aM)
490- let bJ = min([fraction(bD, bz, (bF - bI)), bB])
491- let bK = (bB - bJ)
492- let ba = aJ("ARCHIVED", I[B], aM, bx, by)
493- let bL = if ((0 >= bK))
494- then [StringEntry(k(j), ba)]
492+ else (bI * aN)
493+ let bK = min([fraction(bE, bA, (bG - bJ)), bC])
494+ let bL = (bC - bK)
495+ let bb = aK("ARCHIVED", J[C], aN, by, bz)
496+ let bM = if ((0 >= bL))
497+ then [StringEntry(k(j), bb)]
495498 else nil
496- $Tuple2(([ScriptTransfer(aS.caller, bJ, aj), BooleanEntry(bE, true), IntegerEntry(bA, bK)] ++ bL), 0)
499+ $Tuple2(([ScriptTransfer(aT.caller, bK, ak), BooleanEntry(bF, true), IntegerEntry(bB, bL)] ++ bM), 0)
497500 }
498501 }
499502 }
500503 }
501504 }
502505 }
503506 }
504507
505508

github/deemru/w8io/169f3d6 
202.17 ms