tx · 8Cphk7Sag4JAxsVZvoae7dF4LmFeDAwvg2dfhrVTKxRD

3NAkaTXEn5ksi5J9kQdwmS6RdUhH8vvLjPi:  -0.01900000 Waves

2022.11.05 04:41 [2303154] smart account 3NAkaTXEn5ksi5J9kQdwmS6RdUhH8vvLjPi > SELF 0.00000000 Waves

{ "type": 13, "id": "8Cphk7Sag4JAxsVZvoae7dF4LmFeDAwvg2dfhrVTKxRD", "fee": 1900000, "feeAssetId": null, "timestamp": 1667612512027, "version": 2, "chainId": 84, "sender": "3NAkaTXEn5ksi5J9kQdwmS6RdUhH8vvLjPi", "senderPublicKey": "FE9WhnvegU85r27QvN7xPQbDk62VjxubEV8SvUXrMcT6", "proofs": [ "2XBfzNKvGvW5Vn83bN1mj3uW3KRNCwqhYmoLcjjj4YqrLYHSF7oGMGpoRX8rExH1nZakyxRJrWrbPHpVPQdKsiRi" ], "script": "base64:BgJiCAISBAoCCAgSCAoGCAgICAgIEgkKBwgICAgICAgSAwoBCBIECgIICBIGCgQICAgIEgkKBwgICAEBAQESCgoICAgICAEBAQESBQoDCAgEEgQKAggIEgUKAwgICBIAEgMKAQg0AAdWRVJTSU9OAgUxLjAuMAEOZ2V0U3RyaW5nQnlLZXkBA2tleQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQNrZXkCAAAIdXNlckRhcHAJAQV2YWx1ZQEJAKYIAQkBDmdldFN0cmluZ0J5S2V5AQIPY29uZl91c2Vyc19kYXBwAAtmZWVSZWNlaXZlcgkBDmdldFN0cmluZ0J5S2V5AQIRY29uZl9mZWVfcmVjZWl2ZXIAC3NpZ25Bc3NldElkCQDZBAEJAQ5nZXRTdHJpbmdCeUtleQECGGNvbmZfYWNjZXB0ZWRfYXNzZXRfU0lHTgAFY2hyaXMJAQ5nZXRTdHJpbmdCeUtleQECDGNvbmZfYWRtaW5fMQEPZ2V0SW50ZWdlckJ5S2V5AQNrZXkJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUDa2V5AAABD2dldEJvb2xlYW5CeUtleQEDa2V5CQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFA2tleQcAC2RhcHBSdW5uaW5nCQELdmFsdWVPckVsc2UCCQCbCAIFCHVzZXJEYXBwAhRjb25mX2RhcHBfaXNfcnVubmluZwYADm1haW50ZW5hbmNlTVNHCQELdmFsdWVPckVsc2UCCQCdCAIFCHVzZXJEYXBwAhRjb25mX21haW50ZW5hbmNlX21zZwIAAA11c2VyU3VzcGVuZGVkAglTVVNQRU5ERUQAEHVzZXJVbnJlZ2lzdGVyZWQCDFVOUkVHSVNURVJFRAELdmFsaWRhdGVDSUQBA2NpZAMJAQhjb250YWlucwIFA2NpZAIBLwMDCQBmAgBMCQCxAgEFA2NpZAkAAAIJALECAQkAkQMCCQC1CQIFA2NpZAIBLwAAADsHCQBmAgAQCQCxAgEJAJEDAgkAtQkCBQNjaWQCAS8AAQcHAAdzaWduQ3V0AAIBDWtleVVzZXJTdGF0dXMBBmNhbGxlcgkArAICAgx1c2VyX3N0YXR1c18FBmNhbGxlcgEWa2V5RXZlbnRPd25lckJ5RXZlbnRJZAEHZXZlbnRJZAkArAICAhBnZXRfZXZlbnRfb3duZXJfBQdldmVudElkARFrZXlFdmVudEFkZGVkRGF0ZQIGY2FsbGVyB2V2ZW50SWQJAKwCAgkArAICCQCsAgICEGV2ZW50X2FkZGVkRGF0ZV8FB2V2ZW50SWQCAV8FBmNhbGxlcgEMa2V5RXZlbnREYXRlAgZjYWxsZXIHZXZlbnRJZAkArAICCQCsAgIJAKwCAgILZXZlbnRfZGF0ZV8FB2V2ZW50SWQCAV8FBmNhbGxlcgEMa2V5RXZlbnROYW1lAgZjYWxsZXIHZXZlbnRJZAkArAICCQCsAgIJAKwCAgILZXZlbnRfbmFtZV8FB2V2ZW50SWQCAV8FBmNhbGxlcgEMa2V5RXZlbnREZXNjAgZjYWxsZXIHZXZlbnRJZAkArAICCQCsAgIJAKwCAgILZXZlbnRfZGVzY18FB2V2ZW50SWQCAV8FBmNhbGxlcgESa2V5RXZlbnREaXNwbGF5Q2lkAgZjYWxsZXIHZXZlbnRJZAkArAICCQCsAgIJAKwCAgIRZXZlbnRfZGlzcGxheUNpZF8FB2V2ZW50SWQCAV8FBmNhbGxlcgEMa2V5RXZlbnRUYWdzAgZjYWxsZXIHZXZlbnRJZAkArAICCQCsAgIJAKwCAgILZXZlbnRfdGFnc18FB2V2ZW50SWQCAV8FBmNhbGxlcgEMa2V5RXZlbnRGbGFnAgZjYWxsZXIHZXZlbnRJZAkArAICCQCsAgIJAKwCAgILZXZlbnRfZmxhZ18FB2V2ZW50SWQCAV8FBmNhbGxlcgEMa2V5RXZlbnROb3RlAgZjYWxsZXIHZXZlbnRJZAkArAICCQCsAgIJAKwCAgILZXZlbnRfbm90ZV8FB2V2ZW50SWQCAV8FBmNhbGxlcgEPa2V5RXZlbnRDcmF3bGVyAgZjYWxsZXIHZXZlbnRJZAkArAICCQCsAgIJAKwCAgIRZXZlbnRfY3Jhd2xlckNpZF8FB2V2ZW50SWQCAV8FBmNhbGxlcgEYa2V5RXZlbnRUb3RhbFRpY2tldFR5cGVzAgZjYWxsZXIHZXZlbnRJZAkArAICCQCsAgIJAKwCAgIXZXZlbnRfdG90YWxUaWNrZXRUeXBlc18FB2V2ZW50SWQCAV8FBmNhbGxlcgEaa2V5RXZlbnRUb3RhbFRpY2tldHNJc3N1ZWQCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAhJldmVudF90b3RhbElzc3VlZF8FB2V2ZW50SWQCAV8FBmNhbGxlcgEQa2V5RXZlbnRDYW5jZWxlZAIGY2FsbGVyB2V2ZW50SWQJAKwCAgkArAICCQCsAgICD2V2ZW50X2NhbmNlbGVkXwUHZXZlbnRJZAIBXwUGY2FsbGVyARZrZXlFdmVudENhbmNlbGVkUmVhc29uAgZjYWxsZXIHZXZlbnRJZAkArAICCQCsAgIJAKwCAgIVZXZlbnRfY2FuY2VsZWRSZWFzb25fBQdldmVudElkAgFfBQZjYWxsZXIBDWtleVRpY2tldE5hbWUDBmNhbGxlcgdldmVudElkCHRpY2tldElkCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIMdGlja2V0X25hbWVfBQdldmVudElkAgFfBQZjYWxsZXICAV8FCHRpY2tldElkAQ1rZXlUaWNrZXREZXNjAwZjYWxsZXIHZXZlbnRJZAh0aWNrZXRJZAkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDHRpY2tldF9kZXNjXwUHZXZlbnRJZAIBXwUGY2FsbGVyAgFfBQh0aWNrZXRJZAEOa2V5VGlja2V0UHJpY2UDBmNhbGxlcgdldmVudElkCHRpY2tldElkCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgINdGlja2V0X3ByaWNlXwUHZXZlbnRJZAIBXwUGY2FsbGVyAgFfBQh0aWNrZXRJZAENa2V5VGlja2V0RGF0ZQMGY2FsbGVyB2V2ZW50SWQIdGlja2V0SWQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgx0aWNrZXRfZGF0ZV8FB2V2ZW50SWQCAV8FBmNhbGxlcgIBXwUIdGlja2V0SWQBFWtleVRpY2tldE1heEF2YWlsYWJsZQMGY2FsbGVyB2V2ZW50SWQIdGlja2V0SWQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhR0aWNrZXRfbWF4QXZhaWxhYmxlXwUHZXZlbnRJZAIBXwUGY2FsbGVyAgFfBQh0aWNrZXRJZAEPa2V5VGlja2V0T25TYWxlAwZjYWxsZXIHZXZlbnRJZAh0aWNrZXRJZAkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDnRpY2tldF9vblNhbGVfBQdldmVudElkAgFfBQZjYWxsZXICAV8FCHRpY2tldElkARNrZXlUaWNrZXRBbW91bnRVc2VkBAZjYWxsZXIHZXZlbnRJZAh0aWNrZXRJZAVuZnRJZAkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhJ0aWNrZXRfYW1vdW50VXNlZF8FB2V2ZW50SWQCAV8FBmNhbGxlcgIBXwUIdGlja2V0SWQCAV8FBW5mdElkARRrZXlUaWNrZXRIaXN0b3J5VXNlZAUGY2FsbGVyB2V2ZW50SWQIdGlja2V0SWQFbmZ0SWQKdXNhZ2VJbmRleAkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgITdGlja2V0X2hpc3RvcnlVc2VkXwUHZXZlbnRJZAIBXwUGY2FsbGVyAgFfBQh0aWNrZXRJZAIBXwUFbmZ0SWQCAV8FCnVzYWdlSW5kZXgBD2tleVRpY2tldE1heFVzZQMGY2FsbGVyB2V2ZW50SWQIdGlja2V0SWQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg50aWNrZXRfbWF4VXNlXwUHZXZlbnRJZAIBXwUGY2FsbGVyAgFfBQh0aWNrZXRJZAEUa2V5VGlja2V0VG90YWxJc3N1ZWQDBmNhbGxlcgdldmVudElkCHRpY2tldElkCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgITdGlja2V0X3RvdGFsSXNzdWVkXwUHZXZlbnRJZAIBXwUGY2FsbGVyAgFfBQh0aWNrZXRJZAEQa2V5VGlja2V0Um95YWx0eQMGY2FsbGVyB2V2ZW50SWQIdGlja2V0SWQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg90aWNrZXRfcm95YWx0eV8FB2V2ZW50SWQCAV8FBmNhbGxlcgIBXwUIdGlja2V0SWQBDnZhbGlkYXRlU3RyaW5nAgNzdHIDbWF4AwkAAAIJALECAQUDc3RyAAAJAAIBAhhGaWVsZCBjYW5ub3QgYmUgaXMgZW1wdHkDCQBmAgkAsQIBBQNzdHIFA21heAkAAgEJAKwCAgUDc3RyAgwgaXMgdG9vIGxvbmcGAQt2YWxpZGF0ZUludAEDbnVtCQBmAgAABQNudW0BFmdldEV2ZW50T3duZXJCeUV2ZW50SWQBB2V2ZW50SWQJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBFmtleUV2ZW50T3duZXJCeUV2ZW50SWQBBQdldmVudElkAgABDHZhbGlkYXRlVXNlcgEGY2FsbGVyBAp1c2VyU3RhdHVzCQELdmFsdWVPckVsc2UCCQCdCAIFCHVzZXJEYXBwCQENa2V5VXNlclN0YXR1cwEFBmNhbGxlcgUQdXNlclVucmVnaXN0ZXJlZAMJAAACBQp1c2VyU3RhdHVzBRB1c2VyVW5yZWdpc3RlcmVkAi5SZWdpc3RlciB0aGlzIGFjY291bnQgZmlyc3Qgd2l0aCAiQWNjb3VudCIgdGFiAwkAAAIFCnVzZXJTdGF0dXMFDXVzZXJTdXNwZW5kZWQCEUFjY291bnQgc3VzcGVuZGVkAgABEXZhbGlkYXRlRXZlbnREYXRhBgZjYWxsZXIKY2lkRGlzcGxheQRuYW1lC2Rlc2NyaXB0aW9uBHRhZ3MEZGF0ZQQJY2hlY2tVc2VyCQEMdmFsaWRhdGVVc2VyAQUGY2FsbGVyAwkBAiE9AgUJY2hlY2tVc2VyAgAJAAIBBQljaGVja1VzZXIDCQAAAgkAsQIBBQpjaWREaXNwbGF5AAAJAAIBAhtEaXNwbGF5IENJRCBjYW5ub3QgYmUgZW1wdHkDCQEBIQEJAQt2YWxpZGF0ZUNJRAEFCmNpZERpc3BsYXkJAAIBAhBQcm9ibGVtIHdpdGggQ0lEAwkBASEBCQEOdmFsaWRhdGVTdHJpbmcCBQRuYW1lAKwCCQACAQISMzAwIENoYXIuIG1heCBuYW1lAwkBASEBCQEOdmFsaWRhdGVTdHJpbmcCBQtkZXNjcmlwdGlvbgC4FwkAAgECGjMwMDAgQ2hhci4gbWF4IGRlc2NyaXB0aW9uAwkBASEBCQEOdmFsaWRhdGVTdHJpbmcCBQRkYXRlAOgHCQACAQITMTAwMCBDaGFyLiBtYXggZGF0ZQMJAGYCCQCQAwEJALUJAgUEdGFncwIBLAAFCQACAQILNSB0YWdzIG1heC4CAAESdmFsaWRhdGVUaWNrZXREYXRhBwdldmVudElkBmNhbGxlcgRuYW1lC2Rlc2NyaXB0aW9uBXByaWNlDG1heEF2YWlsYWJsZQZtYXhVc2UECWNoZWNrVXNlcgkBDHZhbGlkYXRlVXNlcgEFBmNhbGxlcgMJAQIhPQIFCWNoZWNrVXNlcgIACQACAQUJY2hlY2tVc2VyAwkBASEBCQEOdmFsaWRhdGVTdHJpbmcCBQRuYW1lAMgBCQACAQISMTAwIENoYXIuIG1heCBuYW1lAwkBASEBCQEOdmFsaWRhdGVTdHJpbmcCBQtkZXNjcmlwdGlvbgDoBwkAAgECGjEwMDAgQ2hhci4gbWF4IGRlc2NyaXB0aW9uAwMDCQELdmFsaWRhdGVJbnQBBQVwcmljZQYJAQt2YWxpZGF0ZUludAEFBm1heFVzZQYJAQt2YWxpZGF0ZUludAEFDG1heEF2YWlsYWJsZQkAAgECFFBvc2l0aXZlIGFtb3VudCBvbmx5AwkBASEBCQEOdmFsaWRhdGVTdHJpbmcCBQtkZXNjcmlwdGlvbgDoBwkAAgECGjEwMDAgQ2hhci4gbWF4IGRlc2NyaXB0aW9uAgABDGlkQ2FsbGVyRGF0ZQEBaQMJAQEhAQULZGFwcFJ1bm5pbmcJAAIBBQ5tYWludGVuYW5jZU1TRwkAlQoDCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQJANgEAQgIBQFpBmNhbGxlcgVieXRlcwgFCWxhc3RCbG9jawl0aW1lc3RhbXABCWlzUGF5bWVudAEBaQMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhNObyBwYXltZW50IGF0dGFjaGVkBAdwYXltZW50CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEBmFtb3VudAkBBXZhbHVlAQgFB3BheW1lbnQGYW1vdW50CQCUCgIFB3BheW1lbnQFBmFtb3VudAEUdmFsaWRhdGVQcmljZUFzc2V0SWQDAWkMcHJpY2VBc3NldElkDGFydHdvcmtQcmljZQQLJHQwNjcwNjY3NDIJAQlpc1BheW1lbnQBBQFpBAdwYXltZW50CAULJHQwNjcwNjY3NDICXzEEBmFtb3VudAgFCyR0MDY3MDY2NzQyAl8yAwkBASEBCQEJaXNEZWZpbmVkAQgFB3BheW1lbnQHYXNzZXRJZAkAAgECFFdyb25nIGFzc2V0IGF0dGFjaGVkBAdhc3NldElkAwMJAGYCCQCxAgEFDHByaWNlQXNzZXRJZAAACQAAAgkA2AQBCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkBQxwcmljZUFzc2V0SWQHCAUHcGF5bWVudAdhc3NldElkCQACAQIUV3JvbmcgYXNzZXQgYXR0YWNoZWQDCQECIT0CBQxhcnR3b3JrUHJpY2UFBmFtb3VudAkAAgECGlBheW1lbnQgYW1vdW50IGRvbid0IG1hdGNoCQCUCgIFBmFtb3VudAUHYXNzZXRJZAEMaXNFdmVudE93bmVyAgdldmVudElkBmNhbGxlcgQKZXZlbnRPd25lcgkBFmdldEV2ZW50T3duZXJCeUV2ZW50SWQBBQdldmVudElkAwkAAAIFCmV2ZW50T3duZXICAAkAAgECD0V2ZW50IG5vdCBmb3VuZAkAAAIFCmV2ZW50T3duZXIFBmNhbGxlcgELdGlja2V0RXhpc3QDBmNhbGxlcgdldmVudElkCHRpY2tldElkBAZ0aWNrZXQJAQ5nZXRTdHJpbmdCeUtleQEJAQ1rZXlUaWNrZXROYW1lAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAkBAiE9AgkAsQIBBQZ0aWNrZXQAAAEPZXZlbnRJc0NhbmNlbGVkAgZpc3N1ZXIHZXZlbnRJZAkBD2dldEJvb2xlYW5CeUtleQEJARBrZXlFdmVudENhbmNlbGVkAgUGaXNzdWVyBQdldmVudElkDQZpbnZva2UBB3NldENvbmYCA2tleQN2YWwEBmNhbGxlcgkApQgBCAUGaW52b2tlBmNhbGxlcgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFBWNocmlzCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQZjYWxsZXIDCQEIY29udGFpbnMCBQNrZXkCBWNvbmZfCQDMCAIJAQtTdHJpbmdFbnRyeQIFA2tleQUDdmFsBQNuaWwJAAIBAiBFbnRyaWVzIHN0YXJ0aW5nIHdpdGggY29uZl8gb25seQkAAgECIllvdSBhcmUgbm90IGFsbG93ZWQgdG8gY2hhbmdlIHRoaXMBaQEIYWRkRXZlbnQGBG5hbWULZGVzY3JpcHRpb24EdGFncwpjaWREaXNwbGF5B2NyYXdsZXIEZGF0ZQQLJHQwODA3MTgxMjAJAQxpZENhbGxlckRhdGUBBQFpBAdldmVudElkCAULJHQwODA3MTgxMjACXzEEBmNhbGxlcggFCyR0MDgwNzE4MTIwAl8yBAlhZGRlZERhdGUIBQskdDA4MDcxODEyMAJfMwQJY2hlY2tVc2VyCQEMdmFsaWRhdGVVc2VyAQUGY2FsbGVyAwkBAiE9AgUJY2hlY2tVc2VyAgAJAAIBBQljaGVja1VzZXIEDXZhbGlkYXRlRXZlbnQJARF2YWxpZGF0ZUV2ZW50RGF0YQYFBmNhbGxlcgUKY2lkRGlzcGxheQUEbmFtZQULZGVzY3JpcHRpb24FBHRhZ3MFBGRhdGUDCQECIT0CBQ12YWxpZGF0ZUV2ZW50AgAJAAIBAhVTb21ldGhpbmcgd2VudCB3cm9uZyEJAMwIAgkBDEludGVnZXJFbnRyeQIJARFrZXlFdmVudEFkZGVkRGF0ZQIFBmNhbGxlcgUHZXZlbnRJZAUJYWRkZWREYXRlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlFdmVudERhdGUCBQZjYWxsZXIFB2V2ZW50SWQFBGRhdGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUV2ZW50TmFtZQIFBmNhbGxlcgUHZXZlbnRJZAUEbmFtZQkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXZlbnREZXNjAgUGY2FsbGVyBQdldmVudElkBQtkZXNjcmlwdGlvbgkAzAgCCQELU3RyaW5nRW50cnkCCQESa2V5RXZlbnREaXNwbGF5Q2lkAgUGY2FsbGVyBQdldmVudElkBQpjaWREaXNwbGF5CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlFdmVudFRhZ3MCBQZjYWxsZXIFB2V2ZW50SWQFBHRhZ3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD2tleUV2ZW50Q3Jhd2xlcgIFBmNhbGxlcgUHZXZlbnRJZAUHY3Jhd2xlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGmtleUV2ZW50VG90YWxUaWNrZXRzSXNzdWVkAgUGY2FsbGVyBQdldmVudElkAAAJAMwIAgkBDEJvb2xlYW5FbnRyeQIJARBrZXlFdmVudENhbmNlbGVkAgUGY2FsbGVyBQdldmVudElkBwkAzAgCCQELU3RyaW5nRW50cnkCCQEWa2V5RXZlbnRPd25lckJ5RXZlbnRJZAEFB2V2ZW50SWQFBmNhbGxlcgUDbmlsAWkBCWVkaXRFdmVudAcHZXZlbnRJZARuYW1lC2Rlc2NyaXB0aW9uBHRhZ3MKY2lkRGlzcGxheQdjcmF3bGVyBGRhdGUDCQEBIQEFC2RhcHBSdW5uaW5nCQACAQUObWFpbnRlbmFuY2VNU0cEBmNhbGxlcgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBAljaGVja1VzZXIJAQx2YWxpZGF0ZVVzZXIBBQZjYWxsZXIDCQECIT0CBQljaGVja1VzZXICAAkAAgEFCWNoZWNrVXNlcgQNdmFsaWRhdGVFdmVudAkBEXZhbGlkYXRlRXZlbnREYXRhBgUGY2FsbGVyBQpjaWREaXNwbGF5BQRuYW1lBQtkZXNjcmlwdGlvbgUEdGFncwUEZGF0ZQMJAQIhPQIFDXZhbGlkYXRlRXZlbnQCAAkAAgECFVNvbWV0aGluZyB3ZW50IHdyb25nIQQKZW50cnlFeGlzdAkBDmdldFN0cmluZ0J5S2V5AQkBDGtleUV2ZW50TmFtZQIFBmNhbGxlcgUHZXZlbnRJZAMJAAACBQplbnRyeUV4aXN0AgAJAAIBAg9FbnRyeSBub3QgZm91bmQEBGZsYWcJAQ5nZXRTdHJpbmdCeUtleQEJAQxrZXlFdmVudEZsYWcCBQZjYWxsZXIFB2V2ZW50SWQDCQAAAgUEZmxhZwIHSUxMRUdBTAkAAgECG0Nhbm5vdCB1cGRhdGUgSUxMRUdBTCBFdmVudAkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXZlbnROYW1lAgUGY2FsbGVyBQdldmVudElkBQRuYW1lCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlFdmVudERhdGUCBQZjYWxsZXIFB2V2ZW50SWQFBGRhdGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUV2ZW50RGVzYwIFBmNhbGxlcgUHZXZlbnRJZAULZGVzY3JpcHRpb24JAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUV2ZW50VGFncwIFBmNhbGxlcgUHZXZlbnRJZAUEdGFncwkAzAgCCQELU3RyaW5nRW50cnkCCQEPa2V5RXZlbnRDcmF3bGVyAgUGY2FsbGVyBQdldmVudElkBQdjcmF3bGVyBQNuaWwBaQELZGVsZXRlRXZlbnQBB2V2ZW50SWQEDSR0MDEwMzQwMTAzODQJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDEwMzQwMTAzODQCXzEEBmNhbGxlcggFDSR0MDEwMzQwMTAzODQCXzIECWFkZGVkRGF0ZQgFDSR0MDEwMzQwMTAzODQCXzMECWNoZWNrVXNlcgkBDHZhbGlkYXRlVXNlcgEFBmNhbGxlcgMJAQIhPQIFCWNoZWNrVXNlcgIACQACAQUJY2hlY2tVc2VyAwkBASEBCQEMaXNFdmVudE93bmVyAgUHZXZlbnRJZAUGY2FsbGVyCQACAQIjWW91IGFyZSBub3QgdGhlIG93bmVyIG9mIHRoaXMgZXZlbnQEDWV2ZW50VG90YWxORlQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEaa2V5RXZlbnRUb3RhbFRpY2tldHNJc3N1ZWQCBQZjYWxsZXIFB2V2ZW50SWQDCQECIT0CBQ1ldmVudFRvdGFsTkZUAAAJAAIBAi1DYW5ub3QgZGVsZXRlIGV2ZW50IHdpdGggYWxyZWFkeSBzb2xkIHRpY2tldHMEF3RvdGFsVGlja2V0VHlwZUZvckV2ZW50CQEPZ2V0SW50ZWdlckJ5S2V5AQkBGGtleUV2ZW50VG90YWxUaWNrZXRUeXBlcwIFBmNhbGxlcgUHZXZlbnRJZAMJAGYCBRd0b3RhbFRpY2tldFR5cGVGb3JFdmVudAAACQACAQIYRGVsZXRlIGFsbCB0aWNrZXRzIGZpcnN0CQDMCAIJAQtEZWxldGVFbnRyeQEJARFrZXlFdmVudEFkZGVkRGF0ZQIFBmNhbGxlcgUHZXZlbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEMa2V5RXZlbnREYXRlAgUGY2FsbGVyBQdldmVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQxrZXlFdmVudE5hbWUCBQZjYWxsZXIFB2V2ZW50SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDGtleUV2ZW50RGVzYwIFBmNhbGxlcgUHZXZlbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQESa2V5RXZlbnREaXNwbGF5Q2lkAgUGY2FsbGVyBQdldmVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQxrZXlFdmVudFRhZ3MCBQZjYWxsZXIFB2V2ZW50SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBD2tleUV2ZW50Q3Jhd2xlcgIFBmNhbGxlcgUHZXZlbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5RXZlbnRUb3RhbFRpY2tldHNJc3N1ZWQCBQZjYWxsZXIFB2V2ZW50SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBEGtleUV2ZW50Q2FuY2VsZWQCBQZjYWxsZXIFB2V2ZW50SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFmtleUV2ZW50T3duZXJCeUV2ZW50SWQBBQdldmVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARhrZXlFdmVudFRvdGFsVGlja2V0VHlwZXMCBQZjYWxsZXIFB2V2ZW50SWQFA25pbAFpAQtjYW5jZWxFdmVudAIHZXZlbnRJZAZyZWFzb24EDSR0MDExNzI1MTE3NjkJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDExNzI1MTE3NjkCXzEEBmNhbGxlcggFDSR0MDExNzI1MTE3NjkCXzIECWFkZGVkRGF0ZQgFDSR0MDExNzI1MTE3NjkCXzMECWNoZWNrVXNlcgkBDHZhbGlkYXRlVXNlcgEFBmNhbGxlcgMJAQIhPQIFCWNoZWNrVXNlcgIACQACAQUJY2hlY2tVc2VyAwkBASEBCQEMaXNFdmVudE93bmVyAgUHZXZlbnRJZAUGY2FsbGVyCQACAQIjWW91IGFyZSBub3QgdGhlIG93bmVyIG9mIHRoaXMgZXZlbnQJAMwIAgkBDEJvb2xlYW5FbnRyeQIJARBrZXlFdmVudENhbmNlbGVkAgUGY2FsbGVyBQdldmVudElkBgkAzAgCCQELU3RyaW5nRW50cnkCCQEWa2V5RXZlbnRDYW5jZWxlZFJlYXNvbgIFBmNhbGxlcgUHZXZlbnRJZAUGcmVhc29uBQNuaWwBaQEJZmxhZ0V2ZW50BAdldmVudElkBGFkZHIEZmxhZwRub3RlBA0kdDAxMjIwNDEyMjM3CQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAxMjIwNDEyMjM3Al8xBAZjYWxsZXIIBQ0kdDAxMjIwNDEyMjM3Al8yAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUFY2hyaXMJAMwIAgkApQgBBQR0aGlzBQNuaWwFBmNhbGxlcgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAICAAkAzAgCAg9DSEFOR0VfUkVRVUlSRUQJAMwIAgIHRkxBR0dFRAkAzAgCAgdJTExFR0FMBQNuaWwFBGZsYWcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUV2ZW50RmxhZwIFBGFkZHIFB2V2ZW50SWQFBGZsYWcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUV2ZW50Tm90ZQIFBGFkZHIFB2V2ZW50SWQFBG5vdGUFA25pbAkAAgEJAKwCAgIOVW5rbm93IHN0YXR1cyAFBGZsYWcJAAIBAhNZb3UgYXJlIG5vdCBhbGxvd2VkAWkBCWFkZFRpY2tldAcHZXZlbnRJZARuYW1lC2Rlc2NyaXB0aW9uBXByaWNlDG1heEF2YWlsYWJsZQZNYXhVc2UJUm95YWx0aWVzBA0kdDAxMjc1NDEyNzk0CQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAxMjc1NDEyNzk0Al8xBAZjYWxsZXIIBQ0kdDAxMjc1NDEyNzk0Al8yBARkYXRlCAUNJHQwMTI3NTQxMjc5NAJfMwQJY2hlY2tVc2VyCQEMdmFsaWRhdGVVc2VyAQUGY2FsbGVyAwkBAiE9AgUJY2hlY2tVc2VyAgAJAAIBBQljaGVja1VzZXIDCQEPZXZlbnRJc0NhbmNlbGVkAgUGY2FsbGVyBQdldmVudElkCQACAQIYRXZlbnQgaGF2ZSBiZWVuIGNhbmNlbGVkAwkBASEBCQEMaXNFdmVudE93bmVyAgUHZXZlbnRJZAUGY2FsbGVyCQACAQIjWW91IGFyZSBub3QgdGhlIG93bmVyIG9mIHRoaXMgZXZlbnQEDnZhbGlkYXRlVGlja2V0CQESdmFsaWRhdGVUaWNrZXREYXRhBwUHZXZlbnRJZAUGY2FsbGVyBQRuYW1lBQtkZXNjcmlwdGlvbgUFcHJpY2UFDG1heEF2YWlsYWJsZQUGTWF4VXNlAwkBAiE9AgUOdmFsaWRhdGVUaWNrZXQCAAkAAgECFVNvbWV0aGluZyB3ZW50IHdyb25nIQQXdG90YWxUaWNrZXRUeXBlRm9yRXZlbnQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEYa2V5RXZlbnRUb3RhbFRpY2tldFR5cGVzAgUGY2FsbGVyBQdldmVudElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlUaWNrZXROYW1lAwUGY2FsbGVyBQdldmVudElkBQJpZAUEbmFtZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDWtleVRpY2tldERhdGUDBQZjYWxsZXIFB2V2ZW50SWQFAmlkBQRkYXRlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlUaWNrZXREZXNjAwUGY2FsbGVyBQdldmVudElkBQJpZAULZGVzY3JpcHRpb24JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ5rZXlUaWNrZXRQcmljZQMFBmNhbGxlcgUHZXZlbnRJZAUCaWQFBXByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEVa2V5VGlja2V0TWF4QXZhaWxhYmxlAwUGY2FsbGVyBQdldmVudElkBQJpZAUMbWF4QXZhaWxhYmxlCQDMCAIJAQxCb29sZWFuRW50cnkCCQEPa2V5VGlja2V0T25TYWxlAwUGY2FsbGVyBQdldmVudElkBQJpZAYJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ9rZXlUaWNrZXRNYXhVc2UDBQZjYWxsZXIFB2V2ZW50SWQFAmlkBQZNYXhVc2UJAMwIAgkBDEludGVnZXJFbnRyeQIJARRrZXlUaWNrZXRUb3RhbElzc3VlZAMFBmNhbGxlcgUHZXZlbnRJZAUCaWQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGGtleUV2ZW50VG90YWxUaWNrZXRUeXBlcwIFBmNhbGxlcgUHZXZlbnRJZAkAZAIFF3RvdGFsVGlja2V0VHlwZUZvckV2ZW50AAEJAMwIAgkBDEludGVnZXJFbnRyeQIJARBrZXlUaWNrZXRSb3lhbHR5AwUGY2FsbGVyBQdldmVudElkBQJpZAUJUm95YWx0aWVzBQNuaWwBaQEKZWRpdFRpY2tldAgIdGlja2V0SWQHZXZlbnRJZARuYW1lC2Rlc2NyaXB0aW9uBXByaWNlDG1heEF2YWlsYWJsZQZtYXhVc2UJUm95YWx0aWVzBA0kdDAxNDM5MjE0NDMyCQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAxNDM5MjE0NDMyAl8xBAZjYWxsZXIIBQ0kdDAxNDM5MjE0NDMyAl8yBARkYXRlCAUNJHQwMTQzOTIxNDQzMgJfMwQJY2hlY2tVc2VyCQEMdmFsaWRhdGVVc2VyAQUGY2FsbGVyAwkBAiE9AgUJY2hlY2tVc2VyAgAJAAIBBQljaGVja1VzZXIDCQEBIQEJAQxpc0V2ZW50T3duZXICBQdldmVudElkBQZjYWxsZXIJAAIBAiNZb3UgYXJlIG5vdCB0aGUgb3duZXIgb2YgdGhpcyBldmVudAMJAQEhAQkBC3RpY2tldEV4aXN0AwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAkAAgECEFRpY2tldCBub3QgZm91bmQEDnZhbGlkYXRlVGlja2V0CQESdmFsaWRhdGVUaWNrZXREYXRhBwUHZXZlbnRJZAUGY2FsbGVyBQRuYW1lBQtkZXNjcmlwdGlvbgUFcHJpY2UFDG1heEF2YWlsYWJsZQUGbWF4VXNlAwkBAiE9AgUOdmFsaWRhdGVUaWNrZXQCAAkAAgECFVNvbWV0aGluZyB3ZW50IHdyb25nIQQKdGlja2V0U29sZAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEUa2V5VGlja2V0VG90YWxJc3N1ZWQDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkAAADCQBmAgUKdGlja2V0U29sZAUMbWF4QXZhaWxhYmxlCQACAQI+TWF4IHRpY2tldHMgYXZhaWxhYmxlIGNhbm5vdCBiZSBsb3dlciB0aGFuIGFtb3VudCBhbHJlYWR5IHNvbGQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleVRpY2tldE5hbWUDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkBQRuYW1lCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlUaWNrZXREZXNjAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAULZGVzY3JpcHRpb24JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ5rZXlUaWNrZXRQcmljZQMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQFBXByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEVa2V5VGlja2V0TWF4QXZhaWxhYmxlAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAUMbWF4QXZhaWxhYmxlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEPa2V5VGlja2V0TWF4VXNlAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAUGbWF4VXNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEQa2V5VGlja2V0Um95YWx0eQMFBmNhbGxlcgUHZXZlbnRJZAUCaWQFCVJveWFsdGllcwUDbmlsAWkBD3BhdXNlVGlja2V0U2FsZQMHZXZlbnRJZAh0aWNrZXRJZAZzdGF0dXMEDSR0MDE1NjQ3MTU2ODcJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDE1NjQ3MTU2ODcCXzEEBmNhbGxlcggFDSR0MDE1NjQ3MTU2ODcCXzIEBGRhdGUIBQ0kdDAxNTY0NzE1Njg3Al8zBAljaGVja1VzZXIJAQx2YWxpZGF0ZVVzZXIBBQZjYWxsZXIDCQECIT0CBQljaGVja1VzZXICAAkAAgEFCWNoZWNrVXNlcgMJAQEhAQkBDGlzRXZlbnRPd25lcgIFB2V2ZW50SWQFBmNhbGxlcgkAAgECI1lvdSBhcmUgbm90IHRoZSBvd25lciBvZiB0aGlzIGV2ZW50AwkBASEBCQELdGlja2V0RXhpc3QDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkCQACAQIQVGlja2V0IG5vdCBmb3VuZAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBD2tleVRpY2tldE9uU2FsZQMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQFBnN0YXR1cwUDbmlsAWkBDGRlbGV0ZVRpY2tldAIIdGlja2V0SWQHZXZlbnRJZAQNJHQwMTYxNTAxNjE5MAkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMTYxNTAxNjE5MAJfMQQGY2FsbGVyCAUNJHQwMTYxNTAxNjE5MAJfMgQEZGF0ZQgFDSR0MDE2MTUwMTYxOTACXzMECWNoZWNrVXNlcgkBDHZhbGlkYXRlVXNlcgEFBmNhbGxlcgMJAQIhPQIFCWNoZWNrVXNlcgIACQACAQUJY2hlY2tVc2VyAwkBASEBCQEMaXNFdmVudE93bmVyAgUHZXZlbnRJZAUGY2FsbGVyCQACAQIjWW91IGFyZSBub3QgdGhlIG93bmVyIG9mIHRoaXMgZXZlbnQDCQEBIQEJAQt0aWNrZXRFeGlzdAMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQJAAIBAhBUaWNrZXQgbm90IGZvdW5kBAphbW91bnRTb2xkCQEPZ2V0SW50ZWdlckJ5S2V5AQkBFGtleVRpY2tldFRvdGFsSXNzdWVkAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAMJAQIhPQIFCmFtb3VudFNvbGQAAAkAAgECJkNhbm5vdCBkZWxldGUgdGlja2V0IHRoYXQgc29sZCBhbHJlYWR5BBd0b3RhbFRpY2tldFR5cGVGb3JFdmVudAkBD2dldEludGVnZXJCeUtleQEJARhrZXlFdmVudFRvdGFsVGlja2V0VHlwZXMCBQZjYWxsZXIFB2V2ZW50SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDWtleVRpY2tldE5hbWUDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ1rZXlUaWNrZXREYXRlAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQENa2V5VGlja2V0RGVzYwMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDmtleVRpY2tldFByaWNlAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEVa2V5VGlja2V0TWF4QXZhaWxhYmxlAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEPa2V5VGlja2V0T25TYWxlAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEPa2V5VGlja2V0TWF4VXNlAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEUa2V5VGlja2V0VG90YWxJc3N1ZWQDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARBrZXlUaWNrZXRSb3lhbHR5AwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGGtleUV2ZW50VG90YWxUaWNrZXRUeXBlcwIFBmNhbGxlcgUHZXZlbnRJZAkAZQIFF3RvdGFsVGlja2V0VHlwZUZvckV2ZW50AAEFA25pbAFpAQlidXlUaWNrZXQDCHRpY2tldElkB2V2ZW50SWQGaXNzdWVyBA0kdDAxNzQ5MTE3NTI5CQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAxNzQ5MTE3NTI5Al8xBAZjYWxsZXIIBQ0kdDAxNzQ5MTE3NTI5Al8yBARkYXRlCAUNJHQwMTc0OTExNzUyOQJfMwQIdG90YWxORlQJAQt2YWx1ZU9yRWxzZQIJAQ9nZXRJbnRlZ2VyQnlLZXkBAhR0b3RhbF90aWNrZXRzX2lzc3VlZAAAAwkBASEBCQEMaXNFdmVudE93bmVyAgUHZXZlbnRJZAUGaXNzdWVyCQACAQIfRXZlbnQgSUQgYW5kIElzc3VlciBkb24ndCBtYXRjaAMJAQEhAQkBC3RpY2tldEV4aXN0AwUGaXNzdWVyBQdldmVudElkBQh0aWNrZXRJZAkAAgECEFRpY2tldCBub3QgZm91bmQECWV2ZW50TmFtZQkBDmdldFN0cmluZ0J5S2V5AQkBDGtleUV2ZW50TmFtZQIFBmlzc3VlcgUHZXZlbnRJZAMJAAACBQlldmVudE5hbWUCAAkAAgECEUFydCBkb2Vzbid0IGV4aXN0AwkBD2V2ZW50SXNDYW5jZWxlZAIFBmlzc3VlcgUHZXZlbnRJZAkAAgECGEV2ZW50IGhhdmUgYmVlbiBjYW5jZWxlZAQIaXNPblNhbGUJAQ9nZXRCb29sZWFuQnlLZXkBCQEPa2V5VGlja2V0T25TYWxlAwUGaXNzdWVyBQdldmVudElkBQh0aWNrZXRJZAMJAQEhAQUIaXNPblNhbGUJAAIBAhRUaWNrZXRzIG5vdCBmb3Igc2FsZQQKYW1vdW50U29sZAkBD2dldEludGVnZXJCeUtleQEJARRrZXlUaWNrZXRUb3RhbElzc3VlZAMFBmlzc3VlcgUHZXZlbnRJZAUIdGlja2V0SWQEC3RpY2tldFByaWNlCQEPZ2V0SW50ZWdlckJ5S2V5AQkBDmtleVRpY2tldFByaWNlAwUGaXNzdWVyBQdldmVudElkBQh0aWNrZXRJZAQMcHJpY2VBc3NldElkCQDYBAEFC3NpZ25Bc3NldElkBA0kdDAxODM4MjE4NDU2CQEUdmFsaWRhdGVQcmljZUFzc2V0SWQDBQFpBQxwcmljZUFzc2V0SWQFC3RpY2tldFByaWNlBAZhbW91bnQIBQ0kdDAxODM4MjE4NDU2Al8xBAdhc3NldElkCAUNJHQwMTgzODIxODQ1NgJfMgQKbWF4Q2FuU2VsbAkBD2dldEludGVnZXJCeUtleQEJARVrZXlUaWNrZXRNYXhBdmFpbGFibGUDBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkBA1hbW91bnRGb3JTaWduCQBrAwUGYW1vdW50BQdzaWduQ3V0AGQEEmFtb3VudEZvck9yZ2FuaXplcgkAZQIFBmFtb3VudAUNYW1vdW50Rm9yU2lnbgMJAAACBQphbW91bnRTb2xkBQptYXhDYW5TZWxsCQACAQIMQXJ0IHNvbGQgb3V0BA1uZXdBbW91bnRTb2xkCQBkAgUKYW1vdW50U29sZAABBAlpc3N1ZU1ldGEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgtPcmdhbml6ZXI6IAUGaXNzdWVyAgwsCiBFdmVudElEOiAFB2V2ZW50SWQCDSwKIFRpY2tldElEOiAFCHRpY2tldElkAg4sCiBFdmVudE5hbWU6IAUJZXZlbnROYW1lAgosCiBJc3N1ZTogCQCkAwEFDW5ld0Ftb3VudFNvbGQCAS8JAKQDAQUKbWF4Q2FuU2VsbAQIaXNzdWVORlQJAMIIBQkArAICAgNTVF8JAKQDAQkAZAIFCHRvdGFsTkZUAAEFCWlzc3VlTWV0YQABAAAHBAVpZE5GVAkAuAgBBQhpc3N1ZU5GVAQKc2VsbFN0YXR1cwMJAAACBQ1uZXdBbW91bnRTb2xkBQptYXhDYW5TZWxsBwYECnJlY2VpdmVORlQIBQFpBmNhbGxlcgQHc29sZEtleQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDHRpY2tldF9zb2xkXwkApAMBBQ1uZXdBbW91bnRTb2xkAgRfb2ZfCQCkAwEFCm1heENhblNlbGwCAV8FCHRpY2tldElkAgFfBQdldmVudElkAgFfBQZpc3N1ZXICAV8JANgEAQUFaWRORlQECXNvbGRWYWx1ZQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKUIAQUKcmVjZWl2ZU5GVAIBXwkApAMBBQRkYXRlAgFfBQJpZAIBXwkApAMBBQZhbW91bnQCAV8JANgEAQUFaWRORlQECHNvbGREYXRhCQELU3RyaW5nRW50cnkCBQdzb2xkS2V5BQlzb2xkVmFsdWUEDWV2ZW50VG90YWxORlQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEaa2V5RXZlbnRUb3RhbFRpY2tldHNJc3N1ZWQCBQZpc3N1ZXIFB2V2ZW50SWQEDnRpY2tldFRvdGFsTkZUCQEPZ2V0SW50ZWdlckJ5S2V5AQkBFGtleVRpY2tldFRvdGFsSXNzdWVkAwUGaXNzdWVyBQdldmVudElkBQh0aWNrZXRJZAQGYnV5UmVzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgIEbmZ0XwkA2AQBBQVpZE5GVAUHc29sZEtleQkAzAgCCQEMSW50ZWdlckVudHJ5AgIUdG90YWxfdGlja2V0c19pc3N1ZWQJAGQCBQh0b3RhbE5GVAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEaa2V5RXZlbnRUb3RhbFRpY2tldHNJc3N1ZWQCBQZpc3N1ZXIFB2V2ZW50SWQJAGQCBQ1ldmVudFRvdGFsTkZUAAEJAMwIAgkBDEludGVnZXJFbnRyeQIJARRrZXlUaWNrZXRUb3RhbElzc3VlZAMFBmlzc3VlcgUHZXZlbnRJZAUIdGlja2V0SWQFDW5ld0Ftb3VudFNvbGQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgICA1NUXwkApAMBCQBkAgUIdG90YWxORlQAAQIIX2Fzc2V0SWQJAKwCAgkArAICBQh0aWNrZXRJZAIBXwkA2AQBBQVpZE5GVAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBD2tleVRpY2tldE9uU2FsZQMFBmlzc3VlcgUHZXZlbnRJZAUIdGlja2V0SWQFCnNlbGxTdGF0dXMJAMwIAgkBDEludGVnZXJFbnRyeQIJARNrZXlUaWNrZXRBbW91bnRVc2VkBAUGaXNzdWVyBQdldmVudElkBQh0aWNrZXRJZAkA2AQBBQVpZE5GVAAACQDMCAIFCGlzc3VlTkZUCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQZpc3N1ZXIFEmFtb3VudEZvck9yZ2FuaXplcgUHYXNzZXRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQpyZWNlaXZlTkZUAAEFBWlkTkZUCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQtmZWVSZWNlaXZlcgUNYW1vdW50Rm9yU2lnbgUHYXNzZXRJZAUDbmlsCQDMCAIFCHNvbGREYXRhBQZidXlSZXMBaQEJdXNlVGlja2V0AAQNJHQwMjA2MTYyMDY1NAkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMjA2MTYyMDY1NAJfMQQGY2FsbGVyCAUNJHQwMjA2MTYyMDY1NAJfMgQEZGF0ZQgFDSR0MDIwNjE2MjA2NTQCXzMEDSR0MDIwNjYwMjA2OTYJAQlpc1BheW1lbnQBBQFpBAdwYXltZW50CAUNJHQwMjA2NjAyMDY5NgJfMQQGYW1vdW50CAUNJHQwMjA2NjAyMDY5NgJfMgMJAQEhAQkBCWlzRGVmaW5lZAEIBQdwYXltZW50B2Fzc2V0SWQJAAIBAhRXcm9uZyBhc3NldCBhdHRhY2hlZAQJZXZlbnREYXRhCQEOZ2V0U3RyaW5nQnlLZXkBCQCsAgICBG5mdF8JANgEAQkBBXZhbHVlAQgFB3BheW1lbnQHYXNzZXRJZAMJAAACCQCxAgEFCWV2ZW50RGF0YQAACQACAQIUU29tZXRoaW5nIHdlbnQgd3JvbmcEDGV2ZW50RGF0YUFycgkAtQkCBQlldmVudERhdGECAV8EBmlzc3VlcgkAkQMCBQxldmVudERhdGFBcnIABgQHZXZlbnRJZAkAkQMCBQxldmVudERhdGFBcnIABQQIdGlja2V0SWQJAJEDAgUMZXZlbnREYXRhQXJyAAcDCQEBIQEJAQt0aWNrZXRFeGlzdAMFBmlzc3VlcgUHZXZlbnRJZAUIdGlja2V0SWQJAAIBAhBUaWNrZXQgbm90IGZvdW5kBAphbW91bnRVc2VkCQEPZ2V0SW50ZWdlckJ5S2V5AQkBE2tleVRpY2tldEFtb3VudFVzZWQEBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkCQDYBAEJAQV2YWx1ZQEIBQdwYXltZW50B2Fzc2V0SWQEDG1heFVzaW5nVGltZQkBD2dldEludGVnZXJCeUtleQEJAQ9rZXlUaWNrZXRNYXhVc2UDBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkAwkAAAIFDG1heFVzaW5nVGltZQUKYW1vdW50VXNlZAkAAgEJAKwCAgkArAICAgxUaWNrZXQgdXNlZCAJAKQDAQUKYW1vdW50VXNlZAIOIHRpbWVzIGFscmVhZHkJAMwIAgkBDEludGVnZXJFbnRyeQIJARNrZXlUaWNrZXRBbW91bnRVc2VkBAUGaXNzdWVyBQdldmVudElkBQh0aWNrZXRJZAkA2AQBCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkCQBkAgUKYW1vdW50VXNlZAABCQDMCAIJAQtTdHJpbmdFbnRyeQIJARRrZXlUaWNrZXRIaXN0b3J5VXNlZAUFBmlzc3VlcgUHZXZlbnRJZAUIdGlja2V0SWQJANgEAQkBBXZhbHVlAQgFB3BheW1lbnQHYXNzZXRJZAkApAMBCQBkAgUKYW1vdW50VXNlZAABCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQJpZAIBXwUGY2FsbGVyAgFfCQCkAwEFBGRhdGUCAV8JAKQDAQkAZAIFCmFtb3VudFVzZWQAAQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUGY2FsbGVyAAEIBQdwYXltZW50B2Fzc2V0SWQFA25pbAFpAQtkZWxldGVFbnRyeQEFZW50cnkEBmNhbGxlcgkApQgBCAUBaQZjYWxsZXIDCQAAAgUGY2FsbGVyBQVjaHJpcwkAzAgCCQELRGVsZXRlRW50cnkBBQVlbnRyeQUDbmlsCQACAQICbm8AQSFueQ==", "height": 2303154, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 66hhriTNkPzoHNTfvyNrJKUcjGyB8nXW2Utmsf1zzsRK Next: At4nBG6X8rf7Xr8EmwahMGmGreMVsRugxrdgjPGCX44i Diff:
OldNewDifferences
114114 func keyTicketTotalIssued (caller,eventId,ticketId) = ((((("ticket_totalIssued_" + eventId) + "_") + caller) + "_") + ticketId)
115115
116116
117+func keyTicketRoyalty (caller,eventId,ticketId) = ((((("ticket_royalty_" + eventId) + "_") + caller) + "_") + ticketId)
118+
119+
117120 func validateString (str,max) = if ((size(str) == 0))
118121 then throw("Field cannot be is empty")
119122 else if ((size(str) > max))
192195
193196
194197 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
195- let $t065826618 = isPayment(i)
196- let payment = $t065826618._1
197- let amount = $t065826618._2
198+ let $t067066742 = isPayment(i)
199+ let payment = $t067066742._1
200+ let amount = $t067066742._2
198201 if (!(isDefined(payment.assetId)))
199202 then throw("Wrong asset attached")
200203 else {
241244
242245 @Callable(i)
243246 func addEvent (name,description,tags,cidDisplay,crawler,date) = {
244- let $t079477996 = idCallerDate(i)
245- let eventId = $t079477996._1
246- let caller = $t079477996._2
247- let addedDate = $t079477996._3
247+ let $t080718120 = idCallerDate(i)
248+ let eventId = $t080718120._1
249+ let caller = $t080718120._2
250+ let addedDate = $t080718120._3
248251 let checkUser = validateUser(caller)
249252 if ((checkUser != ""))
250253 then throw(checkUser)
288291
289292 @Callable(i)
290293 func deleteEvent (eventId) = {
291- let $t01021610260 = idCallerDate(i)
292- let id = $t01021610260._1
293- let caller = $t01021610260._2
294- let addedDate = $t01021610260._3
294+ let $t01034010384 = idCallerDate(i)
295+ let id = $t01034010384._1
296+ let caller = $t01034010384._2
297+ let addedDate = $t01034010384._3
295298 let checkUser = validateUser(caller)
296299 if ((checkUser != ""))
297300 then throw(checkUser)
314317
315318 @Callable(i)
316319 func cancelEvent (eventId,reason) = {
317- let $t01160111645 = idCallerDate(i)
318- let id = $t01160111645._1
319- let caller = $t01160111645._2
320- let addedDate = $t01160111645._3
320+ let $t01172511769 = idCallerDate(i)
321+ let id = $t01172511769._1
322+ let caller = $t01172511769._2
323+ let addedDate = $t01172511769._3
321324 let checkUser = validateUser(caller)
322325 if ((checkUser != ""))
323326 then throw(checkUser)
330333
331334 @Callable(i)
332335 func flagEvent (eventId,addr,flag,note) = {
333- let $t01208012113 = idCallerDate(i)
334- let id = $t01208012113._1
335- let caller = $t01208012113._2
336+ let $t01220412237 = idCallerDate(i)
337+ let id = $t01220412237._1
338+ let caller = $t01220412237._2
336339 if (containsElement([chris, toString(this)], caller))
337340 then if (containsElement(["", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
338341 then [StringEntry(keyEventFlag(addr, eventId), flag), StringEntry(keyEventNote(addr, eventId), note)]
343346
344347
345348 @Callable(i)
346-func addTicket (eventId,name,description,price,maxAvailable,MaxUse) = {
347- let $t01261412654 = idCallerDate(i)
348- let id = $t01261412654._1
349- let caller = $t01261412654._2
350- let date = $t01261412654._3
349+func addTicket (eventId,name,description,price,maxAvailable,MaxUse,Royalties) = {
350+ let $t01275412794 = idCallerDate(i)
351+ let id = $t01275412794._1
352+ let caller = $t01275412794._2
353+ let date = $t01275412794._3
351354 let checkUser = validateUser(caller)
352355 if ((checkUser != ""))
353356 then throw(checkUser)
361364 then throw("Something went wrong!")
362365 else {
363366 let totalTicketTypeForEvent = getIntegerByKey(keyEventTotalTicketTypes(caller, eventId))
364-[StringEntry(keyTicketName(caller, eventId, id), name), IntegerEntry(keyTicketDate(caller, eventId, id), date), StringEntry(keyTicketDesc(caller, eventId, id), description), IntegerEntry(keyTicketPrice(caller, eventId, id), price), IntegerEntry(keyTicketMaxAvailable(caller, eventId, id), maxAvailable), BooleanEntry(keyTicketOnSale(caller, eventId, id), true), IntegerEntry(keyTicketMaxUse(caller, eventId, id), MaxUse), IntegerEntry(keyTicketTotalIssued(caller, eventId, id), 0), IntegerEntry(keyEventTotalTicketTypes(caller, eventId), (totalTicketTypeForEvent + 1))]
367+[StringEntry(keyTicketName(caller, eventId, id), name), IntegerEntry(keyTicketDate(caller, eventId, id), date), StringEntry(keyTicketDesc(caller, eventId, id), description), IntegerEntry(keyTicketPrice(caller, eventId, id), price), IntegerEntry(keyTicketMaxAvailable(caller, eventId, id), maxAvailable), BooleanEntry(keyTicketOnSale(caller, eventId, id), true), IntegerEntry(keyTicketMaxUse(caller, eventId, id), MaxUse), IntegerEntry(keyTicketTotalIssued(caller, eventId, id), 0), IntegerEntry(keyEventTotalTicketTypes(caller, eventId), (totalTicketTypeForEvent + 1)), IntegerEntry(keyTicketRoyalty(caller, eventId, id), Royalties)]
365368 }
366369 }
367370 }
369372
370373
371374 @Callable(i)
372-func editTicket (ticketId,eventId,name,description,price,maxAvailable,maxUse) = {
373- let $t01416614206 = idCallerDate(i)
374- let id = $t01416614206._1
375- let caller = $t01416614206._2
376- let date = $t01416614206._3
375+func editTicket (ticketId,eventId,name,description,price,maxAvailable,maxUse,Royalties) = {
376+ let $t01439214432 = idCallerDate(i)
377+ let id = $t01439214432._1
378+ let caller = $t01439214432._2
379+ let date = $t01439214432._3
377380 let checkUser = validateUser(caller)
378381 if ((checkUser != ""))
379382 then throw(checkUser)
389392 let ticketSold = valueOrElse(getInteger(keyTicketTotalIssued(caller, eventId, ticketId)), 0)
390393 if ((ticketSold > maxAvailable))
391394 then throw("Max tickets available cannot be lower than amount already sold")
392- else [StringEntry(keyTicketName(caller, eventId, ticketId), name), StringEntry(keyTicketDesc(caller, eventId, ticketId), description), IntegerEntry(keyTicketPrice(caller, eventId, ticketId), price), IntegerEntry(keyTicketMaxAvailable(caller, eventId, ticketId), maxAvailable), IntegerEntry(keyTicketMaxUse(caller, eventId, ticketId), maxUse)]
395+ else [StringEntry(keyTicketName(caller, eventId, ticketId), name), StringEntry(keyTicketDesc(caller, eventId, ticketId), description), IntegerEntry(keyTicketPrice(caller, eventId, ticketId), price), IntegerEntry(keyTicketMaxAvailable(caller, eventId, ticketId), maxAvailable), IntegerEntry(keyTicketMaxUse(caller, eventId, ticketId), maxUse), IntegerEntry(keyTicketRoyalty(caller, eventId, id), Royalties)]
393396 }
394397 }
395398 }
398401
399402 @Callable(i)
400403 func pauseTicketSale (eventId,ticketId,status) = {
401- let $t01535115391 = idCallerDate(i)
402- let id = $t01535115391._1
403- let caller = $t01535115391._2
404- let date = $t01535115391._3
404+ let $t01564715687 = idCallerDate(i)
405+ let id = $t01564715687._1
406+ let caller = $t01564715687._2
407+ let date = $t01564715687._3
405408 let checkUser = validateUser(caller)
406409 if ((checkUser != ""))
407410 then throw(checkUser)
416419
417420 @Callable(i)
418421 func deleteTicket (ticketId,eventId) = {
419- let $t01585415894 = idCallerDate(i)
420- let id = $t01585415894._1
421- let caller = $t01585415894._2
422- let date = $t01585415894._3
422+ let $t01615016190 = idCallerDate(i)
423+ let id = $t01615016190._1
424+ let caller = $t01615016190._2
425+ let date = $t01615016190._3
423426 let checkUser = validateUser(caller)
424427 if ((checkUser != ""))
425428 then throw(checkUser)
433436 then throw("Cannot delete ticket that sold already")
434437 else {
435438 let totalTicketTypeForEvent = getIntegerByKey(keyEventTotalTicketTypes(caller, eventId))
436-[DeleteEntry(keyTicketName(caller, eventId, ticketId)), DeleteEntry(keyTicketDate(caller, eventId, ticketId)), DeleteEntry(keyTicketDesc(caller, eventId, ticketId)), DeleteEntry(keyTicketPrice(caller, eventId, ticketId)), DeleteEntry(keyTicketMaxAvailable(caller, eventId, ticketId)), DeleteEntry(keyTicketOnSale(caller, eventId, ticketId)), DeleteEntry(keyTicketMaxUse(caller, eventId, ticketId)), DeleteEntry(keyTicketTotalIssued(caller, eventId, ticketId)), IntegerEntry(keyEventTotalTicketTypes(caller, eventId), (totalTicketTypeForEvent - 1))]
439+[DeleteEntry(keyTicketName(caller, eventId, ticketId)), DeleteEntry(keyTicketDate(caller, eventId, ticketId)), DeleteEntry(keyTicketDesc(caller, eventId, ticketId)), DeleteEntry(keyTicketPrice(caller, eventId, ticketId)), DeleteEntry(keyTicketMaxAvailable(caller, eventId, ticketId)), DeleteEntry(keyTicketOnSale(caller, eventId, ticketId)), DeleteEntry(keyTicketMaxUse(caller, eventId, ticketId)), DeleteEntry(keyTicketTotalIssued(caller, eventId, ticketId)), DeleteEntry(keyTicketRoyalty(caller, eventId, ticketId)), IntegerEntry(keyEventTotalTicketTypes(caller, eventId), (totalTicketTypeForEvent - 1))]
437440 }
438441 }
439442 }
442445
443446 @Callable(i)
444447 func buyTicket (ticketId,eventId,issuer) = {
445- let $t01712517163 = idCallerDate(i)
446- let id = $t01712517163._1
447- let caller = $t01712517163._2
448- let date = $t01712517163._3
448+ let $t01749117529 = idCallerDate(i)
449+ let id = $t01749117529._1
450+ let caller = $t01749117529._2
451+ let date = $t01749117529._3
449452 let totalNFT = valueOrElse(getIntegerByKey("total_tickets_issued"), 0)
450453 if (!(isEventOwner(eventId, issuer)))
451454 then throw("Event ID and Issuer don't match")
465468 let amountSold = getIntegerByKey(keyTicketTotalIssued(issuer, eventId, ticketId))
466469 let ticketPrice = getIntegerByKey(keyTicketPrice(issuer, eventId, ticketId))
467470 let priceAssetId = toBase58String(signAssetId)
468- let $t01801618090 = validatePriceAssetId(i, priceAssetId, ticketPrice)
469- let amount = $t01801618090._1
470- let assetId = $t01801618090._2
471+ let $t01838218456 = validatePriceAssetId(i, priceAssetId, ticketPrice)
472+ let amount = $t01838218456._1
473+ let assetId = $t01838218456._2
471474 let maxCanSell = getIntegerByKey(keyTicketMaxAvailable(issuer, eventId, ticketId))
472475 let amountForSign = fraction(amount, signCut, 100)
473476 let amountForOrganizer = (amount - amountForSign)
503506
504507 @Callable(i)
505508 func useTicket () = {
506- let $t02025020288 = idCallerDate(i)
507- let id = $t02025020288._1
508- let caller = $t02025020288._2
509- let date = $t02025020288._3
510- let $t02029420330 = isPayment(i)
511- let payment = $t02029420330._1
512- let amount = $t02029420330._2
509+ let $t02061620654 = idCallerDate(i)
510+ let id = $t02061620654._1
511+ let caller = $t02061620654._2
512+ let date = $t02061620654._3
513+ let $t02066020696 = isPayment(i)
514+ let payment = $t02066020696._1
515+ let amount = $t02066020696._2
513516 if (!(isDefined(payment.assetId)))
514517 then throw("Wrong asset attached")
515518 else {
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let VERSION = "1.0.0"
55
66 func getStringByKey (key) = valueOrElse(getString(this, key), "")
77
88
99 let userDapp = value(addressFromString(getStringByKey("conf_users_dapp")))
1010
1111 let feeReceiver = getStringByKey("conf_fee_receiver")
1212
1313 let signAssetId = fromBase58String(getStringByKey("conf_accepted_asset_SIGN"))
1414
1515 let chris = getStringByKey("conf_admin_1")
1616
1717 func getIntegerByKey (key) = valueOrElse(getInteger(this, key), 0)
1818
1919
2020 func getBooleanByKey (key) = valueOrElse(getBoolean(this, key), false)
2121
2222
2323 let dappRunning = valueOrElse(getBoolean(userDapp, "conf_dapp_is_running"), true)
2424
2525 let maintenanceMSG = valueOrElse(getString(userDapp, "conf_maintenance_msg"), "")
2626
2727 let userSuspended = "SUSPENDED"
2828
2929 let userUnregistered = "UNREGISTERED"
3030
3131 func validateCID (cid) = if (contains(cid, "/"))
3232 then if (if ((76 > size(cid)))
3333 then (size(split(cid, "/")[0]) == 59)
3434 else false)
3535 then (16 > size(split(cid, "/")[1]))
3636 else false
3737 else false
3838
3939
4040 let signCut = 2
4141
4242 func keyUserStatus (caller) = ("user_status_" + caller)
4343
4444
4545 func keyEventOwnerByEventId (eventId) = ("get_event_owner_" + eventId)
4646
4747
4848 func keyEventAddedDate (caller,eventId) = ((("event_addedDate_" + eventId) + "_") + caller)
4949
5050
5151 func keyEventDate (caller,eventId) = ((("event_date_" + eventId) + "_") + caller)
5252
5353
5454 func keyEventName (caller,eventId) = ((("event_name_" + eventId) + "_") + caller)
5555
5656
5757 func keyEventDesc (caller,eventId) = ((("event_desc_" + eventId) + "_") + caller)
5858
5959
6060 func keyEventDisplayCid (caller,eventId) = ((("event_displayCid_" + eventId) + "_") + caller)
6161
6262
6363 func keyEventTags (caller,eventId) = ((("event_tags_" + eventId) + "_") + caller)
6464
6565
6666 func keyEventFlag (caller,eventId) = ((("event_flag_" + eventId) + "_") + caller)
6767
6868
6969 func keyEventNote (caller,eventId) = ((("event_note_" + eventId) + "_") + caller)
7070
7171
7272 func keyEventCrawler (caller,eventId) = ((("event_crawlerCid_" + eventId) + "_") + caller)
7373
7474
7575 func keyEventTotalTicketTypes (caller,eventId) = ((("event_totalTicketTypes_" + eventId) + "_") + caller)
7676
7777
7878 func keyEventTotalTicketsIssued (caller,eventId) = ((("event_totalIssued_" + eventId) + "_") + caller)
7979
8080
8181 func keyEventCanceled (caller,eventId) = ((("event_canceled_" + eventId) + "_") + caller)
8282
8383
8484 func keyEventCanceledReason (caller,eventId) = ((("event_canceledReason_" + eventId) + "_") + caller)
8585
8686
8787 func keyTicketName (caller,eventId,ticketId) = ((((("ticket_name_" + eventId) + "_") + caller) + "_") + ticketId)
8888
8989
9090 func keyTicketDesc (caller,eventId,ticketId) = ((((("ticket_desc_" + eventId) + "_") + caller) + "_") + ticketId)
9191
9292
9393 func keyTicketPrice (caller,eventId,ticketId) = ((((("ticket_price_" + eventId) + "_") + caller) + "_") + ticketId)
9494
9595
9696 func keyTicketDate (caller,eventId,ticketId) = ((((("ticket_date_" + eventId) + "_") + caller) + "_") + ticketId)
9797
9898
9999 func keyTicketMaxAvailable (caller,eventId,ticketId) = ((((("ticket_maxAvailable_" + eventId) + "_") + caller) + "_") + ticketId)
100100
101101
102102 func keyTicketOnSale (caller,eventId,ticketId) = ((((("ticket_onSale_" + eventId) + "_") + caller) + "_") + ticketId)
103103
104104
105105 func keyTicketAmountUsed (caller,eventId,ticketId,nftId) = ((((((("ticket_amountUsed_" + eventId) + "_") + caller) + "_") + ticketId) + "_") + nftId)
106106
107107
108108 func keyTicketHistoryUsed (caller,eventId,ticketId,nftId,usageIndex) = ((((((((("ticket_historyUsed_" + eventId) + "_") + caller) + "_") + ticketId) + "_") + nftId) + "_") + usageIndex)
109109
110110
111111 func keyTicketMaxUse (caller,eventId,ticketId) = ((((("ticket_maxUse_" + eventId) + "_") + caller) + "_") + ticketId)
112112
113113
114114 func keyTicketTotalIssued (caller,eventId,ticketId) = ((((("ticket_totalIssued_" + eventId) + "_") + caller) + "_") + ticketId)
115115
116116
117+func keyTicketRoyalty (caller,eventId,ticketId) = ((((("ticket_royalty_" + eventId) + "_") + caller) + "_") + ticketId)
118+
119+
117120 func validateString (str,max) = if ((size(str) == 0))
118121 then throw("Field cannot be is empty")
119122 else if ((size(str) > max))
120123 then throw((str + " is too long"))
121124 else true
122125
123126
124127 func validateInt (num) = (0 > num)
125128
126129
127130 func getEventOwnerByEventId (eventId) = valueOrElse(getString(this, keyEventOwnerByEventId(eventId)), "")
128131
129132
130133 func validateUser (caller) = {
131134 let userStatus = valueOrElse(getString(userDapp, keyUserStatus(caller)), userUnregistered)
132135 if ((userStatus == userUnregistered))
133136 then "Register this account first with \"Account\" tab"
134137 else if ((userStatus == userSuspended))
135138 then "Account suspended"
136139 else ""
137140 }
138141
139142
140143 func validateEventData (caller,cidDisplay,name,description,tags,date) = {
141144 let checkUser = validateUser(caller)
142145 if ((checkUser != ""))
143146 then throw(checkUser)
144147 else if ((size(cidDisplay) == 0))
145148 then throw("Display CID cannot be empty")
146149 else if (!(validateCID(cidDisplay)))
147150 then throw("Problem with CID")
148151 else if (!(validateString(name, 300)))
149152 then throw("300 Char. max name")
150153 else if (!(validateString(description, 3000)))
151154 then throw("3000 Char. max description")
152155 else if (!(validateString(date, 1000)))
153156 then throw("1000 Char. max date")
154157 else if ((size(split(tags, ",")) > 5))
155158 then throw("5 tags max.")
156159 else ""
157160 }
158161
159162
160163 func validateTicketData (eventId,caller,name,description,price,maxAvailable,maxUse) = {
161164 let checkUser = validateUser(caller)
162165 if ((checkUser != ""))
163166 then throw(checkUser)
164167 else if (!(validateString(name, 200)))
165168 then throw("100 Char. max name")
166169 else if (!(validateString(description, 1000)))
167170 then throw("1000 Char. max description")
168171 else if (if (if (validateInt(price))
169172 then true
170173 else validateInt(maxUse))
171174 then true
172175 else validateInt(maxAvailable))
173176 then throw("Positive amount only")
174177 else if (!(validateString(description, 1000)))
175178 then throw("1000 Char. max description")
176179 else ""
177180 }
178181
179182
180183 func idCallerDate (i) = if (!(dappRunning))
181184 then throw(maintenanceMSG)
182185 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
183186
184187
185188 func isPayment (i) = if ((size(i.payments) == 0))
186189 then throw("No payment attached")
187190 else {
188191 let payment = value(i.payments[0])
189192 let amount = value(payment.amount)
190193 $Tuple2(payment, amount)
191194 }
192195
193196
194197 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
195- let $t065826618 = isPayment(i)
196- let payment = $t065826618._1
197- let amount = $t065826618._2
198+ let $t067066742 = isPayment(i)
199+ let payment = $t067066742._1
200+ let amount = $t067066742._2
198201 if (!(isDefined(payment.assetId)))
199202 then throw("Wrong asset attached")
200203 else {
201204 let assetId = if (if ((size(priceAssetId) > 0))
202205 then (toBase58String(value(payment.assetId)) == priceAssetId)
203206 else false)
204207 then payment.assetId
205208 else throw("Wrong asset attached")
206209 if ((artworkPrice != amount))
207210 then throw("Payment amount don't match")
208211 else $Tuple2(amount, assetId)
209212 }
210213 }
211214
212215
213216 func isEventOwner (eventId,caller) = {
214217 let eventOwner = getEventOwnerByEventId(eventId)
215218 if ((eventOwner == ""))
216219 then throw("Event not found")
217220 else (eventOwner == caller)
218221 }
219222
220223
221224 func ticketExist (caller,eventId,ticketId) = {
222225 let ticket = getStringByKey(keyTicketName(caller, eventId, ticketId))
223226 (size(ticket) != 0)
224227 }
225228
226229
227230 func eventIsCanceled (issuer,eventId) = getBooleanByKey(keyEventCanceled(issuer, eventId))
228231
229232
230233 @Callable(invoke)
231234 func setConf (key,val) = {
232235 let caller = toString(invoke.caller)
233236 if (containsElement([chris, toString(this)], caller))
234237 then if (contains(key, "conf_"))
235238 then [StringEntry(key, val)]
236239 else throw("Entries starting with conf_ only")
237240 else throw("You are not allowed to change this")
238241 }
239242
240243
241244
242245 @Callable(i)
243246 func addEvent (name,description,tags,cidDisplay,crawler,date) = {
244- let $t079477996 = idCallerDate(i)
245- let eventId = $t079477996._1
246- let caller = $t079477996._2
247- let addedDate = $t079477996._3
247+ let $t080718120 = idCallerDate(i)
248+ let eventId = $t080718120._1
249+ let caller = $t080718120._2
250+ let addedDate = $t080718120._3
248251 let checkUser = validateUser(caller)
249252 if ((checkUser != ""))
250253 then throw(checkUser)
251254 else {
252255 let validateEvent = validateEventData(caller, cidDisplay, name, description, tags, date)
253256 if ((validateEvent != ""))
254257 then throw("Something went wrong!")
255258 else [IntegerEntry(keyEventAddedDate(caller, eventId), addedDate), StringEntry(keyEventDate(caller, eventId), date), StringEntry(keyEventName(caller, eventId), name), StringEntry(keyEventDesc(caller, eventId), description), StringEntry(keyEventDisplayCid(caller, eventId), cidDisplay), StringEntry(keyEventTags(caller, eventId), tags), StringEntry(keyEventCrawler(caller, eventId), crawler), IntegerEntry(keyEventTotalTicketsIssued(caller, eventId), 0), BooleanEntry(keyEventCanceled(caller, eventId), false), StringEntry(keyEventOwnerByEventId(eventId), caller)]
256259 }
257260 }
258261
259262
260263
261264 @Callable(i)
262265 func editEvent (eventId,name,description,tags,cidDisplay,crawler,date) = if (!(dappRunning))
263266 then throw(maintenanceMSG)
264267 else {
265268 let caller = toBase58String(i.caller.bytes)
266269 let checkUser = validateUser(caller)
267270 if ((checkUser != ""))
268271 then throw(checkUser)
269272 else {
270273 let validateEvent = validateEventData(caller, cidDisplay, name, description, tags, date)
271274 if ((validateEvent != ""))
272275 then throw("Something went wrong!")
273276 else {
274277 let entryExist = getStringByKey(keyEventName(caller, eventId))
275278 if ((entryExist == ""))
276279 then throw("Entry not found")
277280 else {
278281 let flag = getStringByKey(keyEventFlag(caller, eventId))
279282 if ((flag == "ILLEGAL"))
280283 then throw("Cannot update ILLEGAL Event")
281284 else [StringEntry(keyEventName(caller, eventId), name), StringEntry(keyEventDate(caller, eventId), date), StringEntry(keyEventDesc(caller, eventId), description), StringEntry(keyEventTags(caller, eventId), tags), StringEntry(keyEventCrawler(caller, eventId), crawler)]
282285 }
283286 }
284287 }
285288 }
286289
287290
288291
289292 @Callable(i)
290293 func deleteEvent (eventId) = {
291- let $t01021610260 = idCallerDate(i)
292- let id = $t01021610260._1
293- let caller = $t01021610260._2
294- let addedDate = $t01021610260._3
294+ let $t01034010384 = idCallerDate(i)
295+ let id = $t01034010384._1
296+ let caller = $t01034010384._2
297+ let addedDate = $t01034010384._3
295298 let checkUser = validateUser(caller)
296299 if ((checkUser != ""))
297300 then throw(checkUser)
298301 else if (!(isEventOwner(eventId, caller)))
299302 then throw("You are not the owner of this event")
300303 else {
301304 let eventTotalNFT = getIntegerByKey(keyEventTotalTicketsIssued(caller, eventId))
302305 if ((eventTotalNFT != 0))
303306 then throw("Cannot delete event with already sold tickets")
304307 else {
305308 let totalTicketTypeForEvent = getIntegerByKey(keyEventTotalTicketTypes(caller, eventId))
306309 if ((totalTicketTypeForEvent > 0))
307310 then throw("Delete all tickets first")
308311 else [DeleteEntry(keyEventAddedDate(caller, eventId)), DeleteEntry(keyEventDate(caller, eventId)), DeleteEntry(keyEventName(caller, eventId)), DeleteEntry(keyEventDesc(caller, eventId)), DeleteEntry(keyEventDisplayCid(caller, eventId)), DeleteEntry(keyEventTags(caller, eventId)), DeleteEntry(keyEventCrawler(caller, eventId)), DeleteEntry(keyEventTotalTicketsIssued(caller, eventId)), DeleteEntry(keyEventCanceled(caller, eventId)), DeleteEntry(keyEventOwnerByEventId(eventId)), DeleteEntry(keyEventTotalTicketTypes(caller, eventId))]
309312 }
310313 }
311314 }
312315
313316
314317
315318 @Callable(i)
316319 func cancelEvent (eventId,reason) = {
317- let $t01160111645 = idCallerDate(i)
318- let id = $t01160111645._1
319- let caller = $t01160111645._2
320- let addedDate = $t01160111645._3
320+ let $t01172511769 = idCallerDate(i)
321+ let id = $t01172511769._1
322+ let caller = $t01172511769._2
323+ let addedDate = $t01172511769._3
321324 let checkUser = validateUser(caller)
322325 if ((checkUser != ""))
323326 then throw(checkUser)
324327 else if (!(isEventOwner(eventId, caller)))
325328 then throw("You are not the owner of this event")
326329 else [BooleanEntry(keyEventCanceled(caller, eventId), true), StringEntry(keyEventCanceledReason(caller, eventId), reason)]
327330 }
328331
329332
330333
331334 @Callable(i)
332335 func flagEvent (eventId,addr,flag,note) = {
333- let $t01208012113 = idCallerDate(i)
334- let id = $t01208012113._1
335- let caller = $t01208012113._2
336+ let $t01220412237 = idCallerDate(i)
337+ let id = $t01220412237._1
338+ let caller = $t01220412237._2
336339 if (containsElement([chris, toString(this)], caller))
337340 then if (containsElement(["", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
338341 then [StringEntry(keyEventFlag(addr, eventId), flag), StringEntry(keyEventNote(addr, eventId), note)]
339342 else throw(("Unknow status " + flag))
340343 else throw("You are not allowed")
341344 }
342345
343346
344347
345348 @Callable(i)
346-func addTicket (eventId,name,description,price,maxAvailable,MaxUse) = {
347- let $t01261412654 = idCallerDate(i)
348- let id = $t01261412654._1
349- let caller = $t01261412654._2
350- let date = $t01261412654._3
349+func addTicket (eventId,name,description,price,maxAvailable,MaxUse,Royalties) = {
350+ let $t01275412794 = idCallerDate(i)
351+ let id = $t01275412794._1
352+ let caller = $t01275412794._2
353+ let date = $t01275412794._3
351354 let checkUser = validateUser(caller)
352355 if ((checkUser != ""))
353356 then throw(checkUser)
354357 else if (eventIsCanceled(caller, eventId))
355358 then throw("Event have been canceled")
356359 else if (!(isEventOwner(eventId, caller)))
357360 then throw("You are not the owner of this event")
358361 else {
359362 let validateTicket = validateTicketData(eventId, caller, name, description, price, maxAvailable, MaxUse)
360363 if ((validateTicket != ""))
361364 then throw("Something went wrong!")
362365 else {
363366 let totalTicketTypeForEvent = getIntegerByKey(keyEventTotalTicketTypes(caller, eventId))
364-[StringEntry(keyTicketName(caller, eventId, id), name), IntegerEntry(keyTicketDate(caller, eventId, id), date), StringEntry(keyTicketDesc(caller, eventId, id), description), IntegerEntry(keyTicketPrice(caller, eventId, id), price), IntegerEntry(keyTicketMaxAvailable(caller, eventId, id), maxAvailable), BooleanEntry(keyTicketOnSale(caller, eventId, id), true), IntegerEntry(keyTicketMaxUse(caller, eventId, id), MaxUse), IntegerEntry(keyTicketTotalIssued(caller, eventId, id), 0), IntegerEntry(keyEventTotalTicketTypes(caller, eventId), (totalTicketTypeForEvent + 1))]
367+[StringEntry(keyTicketName(caller, eventId, id), name), IntegerEntry(keyTicketDate(caller, eventId, id), date), StringEntry(keyTicketDesc(caller, eventId, id), description), IntegerEntry(keyTicketPrice(caller, eventId, id), price), IntegerEntry(keyTicketMaxAvailable(caller, eventId, id), maxAvailable), BooleanEntry(keyTicketOnSale(caller, eventId, id), true), IntegerEntry(keyTicketMaxUse(caller, eventId, id), MaxUse), IntegerEntry(keyTicketTotalIssued(caller, eventId, id), 0), IntegerEntry(keyEventTotalTicketTypes(caller, eventId), (totalTicketTypeForEvent + 1)), IntegerEntry(keyTicketRoyalty(caller, eventId, id), Royalties)]
365368 }
366369 }
367370 }
368371
369372
370373
371374 @Callable(i)
372-func editTicket (ticketId,eventId,name,description,price,maxAvailable,maxUse) = {
373- let $t01416614206 = idCallerDate(i)
374- let id = $t01416614206._1
375- let caller = $t01416614206._2
376- let date = $t01416614206._3
375+func editTicket (ticketId,eventId,name,description,price,maxAvailable,maxUse,Royalties) = {
376+ let $t01439214432 = idCallerDate(i)
377+ let id = $t01439214432._1
378+ let caller = $t01439214432._2
379+ let date = $t01439214432._3
377380 let checkUser = validateUser(caller)
378381 if ((checkUser != ""))
379382 then throw(checkUser)
380383 else if (!(isEventOwner(eventId, caller)))
381384 then throw("You are not the owner of this event")
382385 else if (!(ticketExist(caller, eventId, ticketId)))
383386 then throw("Ticket not found")
384387 else {
385388 let validateTicket = validateTicketData(eventId, caller, name, description, price, maxAvailable, maxUse)
386389 if ((validateTicket != ""))
387390 then throw("Something went wrong!")
388391 else {
389392 let ticketSold = valueOrElse(getInteger(keyTicketTotalIssued(caller, eventId, ticketId)), 0)
390393 if ((ticketSold > maxAvailable))
391394 then throw("Max tickets available cannot be lower than amount already sold")
392- else [StringEntry(keyTicketName(caller, eventId, ticketId), name), StringEntry(keyTicketDesc(caller, eventId, ticketId), description), IntegerEntry(keyTicketPrice(caller, eventId, ticketId), price), IntegerEntry(keyTicketMaxAvailable(caller, eventId, ticketId), maxAvailable), IntegerEntry(keyTicketMaxUse(caller, eventId, ticketId), maxUse)]
395+ else [StringEntry(keyTicketName(caller, eventId, ticketId), name), StringEntry(keyTicketDesc(caller, eventId, ticketId), description), IntegerEntry(keyTicketPrice(caller, eventId, ticketId), price), IntegerEntry(keyTicketMaxAvailable(caller, eventId, ticketId), maxAvailable), IntegerEntry(keyTicketMaxUse(caller, eventId, ticketId), maxUse), IntegerEntry(keyTicketRoyalty(caller, eventId, id), Royalties)]
393396 }
394397 }
395398 }
396399
397400
398401
399402 @Callable(i)
400403 func pauseTicketSale (eventId,ticketId,status) = {
401- let $t01535115391 = idCallerDate(i)
402- let id = $t01535115391._1
403- let caller = $t01535115391._2
404- let date = $t01535115391._3
404+ let $t01564715687 = idCallerDate(i)
405+ let id = $t01564715687._1
406+ let caller = $t01564715687._2
407+ let date = $t01564715687._3
405408 let checkUser = validateUser(caller)
406409 if ((checkUser != ""))
407410 then throw(checkUser)
408411 else if (!(isEventOwner(eventId, caller)))
409412 then throw("You are not the owner of this event")
410413 else if (!(ticketExist(caller, eventId, ticketId)))
411414 then throw("Ticket not found")
412415 else [BooleanEntry(keyTicketOnSale(caller, eventId, ticketId), status)]
413416 }
414417
415418
416419
417420 @Callable(i)
418421 func deleteTicket (ticketId,eventId) = {
419- let $t01585415894 = idCallerDate(i)
420- let id = $t01585415894._1
421- let caller = $t01585415894._2
422- let date = $t01585415894._3
422+ let $t01615016190 = idCallerDate(i)
423+ let id = $t01615016190._1
424+ let caller = $t01615016190._2
425+ let date = $t01615016190._3
423426 let checkUser = validateUser(caller)
424427 if ((checkUser != ""))
425428 then throw(checkUser)
426429 else if (!(isEventOwner(eventId, caller)))
427430 then throw("You are not the owner of this event")
428431 else if (!(ticketExist(caller, eventId, ticketId)))
429432 then throw("Ticket not found")
430433 else {
431434 let amountSold = getIntegerByKey(keyTicketTotalIssued(caller, eventId, ticketId))
432435 if ((amountSold != 0))
433436 then throw("Cannot delete ticket that sold already")
434437 else {
435438 let totalTicketTypeForEvent = getIntegerByKey(keyEventTotalTicketTypes(caller, eventId))
436-[DeleteEntry(keyTicketName(caller, eventId, ticketId)), DeleteEntry(keyTicketDate(caller, eventId, ticketId)), DeleteEntry(keyTicketDesc(caller, eventId, ticketId)), DeleteEntry(keyTicketPrice(caller, eventId, ticketId)), DeleteEntry(keyTicketMaxAvailable(caller, eventId, ticketId)), DeleteEntry(keyTicketOnSale(caller, eventId, ticketId)), DeleteEntry(keyTicketMaxUse(caller, eventId, ticketId)), DeleteEntry(keyTicketTotalIssued(caller, eventId, ticketId)), IntegerEntry(keyEventTotalTicketTypes(caller, eventId), (totalTicketTypeForEvent - 1))]
439+[DeleteEntry(keyTicketName(caller, eventId, ticketId)), DeleteEntry(keyTicketDate(caller, eventId, ticketId)), DeleteEntry(keyTicketDesc(caller, eventId, ticketId)), DeleteEntry(keyTicketPrice(caller, eventId, ticketId)), DeleteEntry(keyTicketMaxAvailable(caller, eventId, ticketId)), DeleteEntry(keyTicketOnSale(caller, eventId, ticketId)), DeleteEntry(keyTicketMaxUse(caller, eventId, ticketId)), DeleteEntry(keyTicketTotalIssued(caller, eventId, ticketId)), DeleteEntry(keyTicketRoyalty(caller, eventId, ticketId)), IntegerEntry(keyEventTotalTicketTypes(caller, eventId), (totalTicketTypeForEvent - 1))]
437440 }
438441 }
439442 }
440443
441444
442445
443446 @Callable(i)
444447 func buyTicket (ticketId,eventId,issuer) = {
445- let $t01712517163 = idCallerDate(i)
446- let id = $t01712517163._1
447- let caller = $t01712517163._2
448- let date = $t01712517163._3
448+ let $t01749117529 = idCallerDate(i)
449+ let id = $t01749117529._1
450+ let caller = $t01749117529._2
451+ let date = $t01749117529._3
449452 let totalNFT = valueOrElse(getIntegerByKey("total_tickets_issued"), 0)
450453 if (!(isEventOwner(eventId, issuer)))
451454 then throw("Event ID and Issuer don't match")
452455 else if (!(ticketExist(issuer, eventId, ticketId)))
453456 then throw("Ticket not found")
454457 else {
455458 let eventName = getStringByKey(keyEventName(issuer, eventId))
456459 if ((eventName == ""))
457460 then throw("Art doesn't exist")
458461 else if (eventIsCanceled(issuer, eventId))
459462 then throw("Event have been canceled")
460463 else {
461464 let isOnSale = getBooleanByKey(keyTicketOnSale(issuer, eventId, ticketId))
462465 if (!(isOnSale))
463466 then throw("Tickets not for sale")
464467 else {
465468 let amountSold = getIntegerByKey(keyTicketTotalIssued(issuer, eventId, ticketId))
466469 let ticketPrice = getIntegerByKey(keyTicketPrice(issuer, eventId, ticketId))
467470 let priceAssetId = toBase58String(signAssetId)
468- let $t01801618090 = validatePriceAssetId(i, priceAssetId, ticketPrice)
469- let amount = $t01801618090._1
470- let assetId = $t01801618090._2
471+ let $t01838218456 = validatePriceAssetId(i, priceAssetId, ticketPrice)
472+ let amount = $t01838218456._1
473+ let assetId = $t01838218456._2
471474 let maxCanSell = getIntegerByKey(keyTicketMaxAvailable(issuer, eventId, ticketId))
472475 let amountForSign = fraction(amount, signCut, 100)
473476 let amountForOrganizer = (amount - amountForSign)
474477 if ((amountSold == maxCanSell))
475478 then throw("Art sold out")
476479 else {
477480 let newAmountSold = (amountSold + 1)
478481 let issueMeta = ((((((((((("Organizer: " + issuer) + ",
479482 EventID: ") + eventId) + ",
480483 TicketID: ") + ticketId) + ",
481484 EventName: ") + eventName) + ",
482485 Issue: ") + toString(newAmountSold)) + "/") + toString(maxCanSell))
483486 let issueNFT = Issue(("ST_" + toString((totalNFT + 1))), issueMeta, 1, 0, false)
484487 let idNFT = calculateAssetId(issueNFT)
485488 let sellStatus = if ((newAmountSold == maxCanSell))
486489 then false
487490 else true
488491 let receiveNFT = i.caller
489492 let soldKey = ((((((((((("ticket_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + ticketId) + "_") + eventId) + "_") + issuer) + "_") + toBase58String(idNFT))
490493 let soldValue = ((((((((toString(receiveNFT) + "_") + toString(date)) + "_") + id) + "_") + toString(amount)) + "_") + toBase58String(idNFT))
491494 let soldData = StringEntry(soldKey, soldValue)
492495 let eventTotalNFT = getIntegerByKey(keyEventTotalTicketsIssued(issuer, eventId))
493496 let ticketTotalNFT = getIntegerByKey(keyTicketTotalIssued(issuer, eventId, ticketId))
494497 let buyRes = [StringEntry(("nft_" + toBase58String(idNFT)), soldKey), IntegerEntry("total_tickets_issued", (totalNFT + 1)), IntegerEntry(keyEventTotalTicketsIssued(issuer, eventId), (eventTotalNFT + 1)), IntegerEntry(keyTicketTotalIssued(issuer, eventId, ticketId), newAmountSold), StringEntry((("ST_" + toString((totalNFT + 1))) + "_assetId"), ((ticketId + "_") + toBase58String(idNFT))), BooleanEntry(keyTicketOnSale(issuer, eventId, ticketId), sellStatus), IntegerEntry(keyTicketAmountUsed(issuer, eventId, ticketId, toBase58String(idNFT)), 0), issueNFT, ScriptTransfer(Address(fromBase58String(issuer)), amountForOrganizer, assetId), ScriptTransfer(receiveNFT, 1, idNFT), ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId)]
495498 soldData :: buyRes
496499 }
497500 }
498501 }
499502 }
500503 }
501504
502505
503506
504507 @Callable(i)
505508 func useTicket () = {
506- let $t02025020288 = idCallerDate(i)
507- let id = $t02025020288._1
508- let caller = $t02025020288._2
509- let date = $t02025020288._3
510- let $t02029420330 = isPayment(i)
511- let payment = $t02029420330._1
512- let amount = $t02029420330._2
509+ let $t02061620654 = idCallerDate(i)
510+ let id = $t02061620654._1
511+ let caller = $t02061620654._2
512+ let date = $t02061620654._3
513+ let $t02066020696 = isPayment(i)
514+ let payment = $t02066020696._1
515+ let amount = $t02066020696._2
513516 if (!(isDefined(payment.assetId)))
514517 then throw("Wrong asset attached")
515518 else {
516519 let eventData = getStringByKey(("nft_" + toBase58String(value(payment.assetId))))
517520 if ((size(eventData) == 0))
518521 then throw("Something went wrong")
519522 else {
520523 let eventDataArr = split(eventData, "_")
521524 let issuer = eventDataArr[6]
522525 let eventId = eventDataArr[5]
523526 let ticketId = eventDataArr[7]
524527 if (!(ticketExist(issuer, eventId, ticketId)))
525528 then throw("Ticket not found")
526529 else {
527530 let amountUsed = getIntegerByKey(keyTicketAmountUsed(issuer, eventId, ticketId, toBase58String(value(payment.assetId))))
528531 let maxUsingTime = getIntegerByKey(keyTicketMaxUse(issuer, eventId, ticketId))
529532 if ((maxUsingTime == amountUsed))
530533 then throw((("Ticket used " + toString(amountUsed)) + " times already"))
531534 else [IntegerEntry(keyTicketAmountUsed(issuer, eventId, ticketId, toBase58String(value(payment.assetId))), (amountUsed + 1)), StringEntry(keyTicketHistoryUsed(issuer, eventId, ticketId, toBase58String(value(payment.assetId)), toString((amountUsed + 1))), ((((((id + "_") + caller) + "_") + toString(date)) + "_") + toString((amountUsed + 1)))), ScriptTransfer(Address(fromBase58String(caller)), 1, payment.assetId)]
532535 }
533536 }
534537 }
535538 }
536539
537540
538541
539542 @Callable(i)
540543 func deleteEntry (entry) = {
541544 let caller = toString(i.caller)
542545 if ((caller == chris))
543546 then [DeleteEntry(entry)]
544547 else throw("no")
545548 }
546549
547550

github/deemru/w8io/3ef1775 
125.38 ms