tx · 61aJ2Bnc23ZpFD4MrqreeD5nm4foeQtb4kPV4Z43CxFG

3N5V44AAww1zE6Eb9TnJ3LBbJp9XzNkxB4a:  -0.02000000 Waves

2023.01.30 12:10 [2427687] smart account 3N5V44AAww1zE6Eb9TnJ3LBbJp9XzNkxB4a > SELF 0.00000000 Waves

{ "type": 13, "id": "61aJ2Bnc23ZpFD4MrqreeD5nm4foeQtb4kPV4Z43CxFG", "fee": 2000000, "feeAssetId": null, "timestamp": 1675080749907, "version": 2, "chainId": 84, "sender": "3N5V44AAww1zE6Eb9TnJ3LBbJp9XzNkxB4a", "senderPublicKey": "FdBAJSP4WaWUkAzitoyP9FLTP1CP4GNeToRb7L8DcZq", "proofs": [ "5gKnKDdvwb3tDgmwcXb1oxntQc9sAeFhgkcbYPVeeum7ZyFC3ayyT4c64caTqbyWjLjs5dz4XGPGFuGYmNmKs8NY" ], "script": "base64:BgJkCAISBAoCCAgSCAoGCAgICAgIEgkKBwgICAgICAgSAwoBCBIECgIICBIGCgQICAgIEgoKCAgICAEBAQEBEgsKCQgICAgBAQEBARIFCgMICAQSBAoCCAgSBQoDCAgIEgASAwoBCDYAB1ZFUlNJT04CBTEuMC4wAQ5nZXRTdHJpbmdCeUtleQEDa2V5CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFA2tleQIAAAh1c2VyRGFwcAkBBXZhbHVlAQkApggBCQEOZ2V0U3RyaW5nQnlLZXkBAg9jb25mX3VzZXJzX2RhcHAAC2ZlZVJlY2VpdmVyCQEOZ2V0U3RyaW5nQnlLZXkBAhFjb25mX2ZlZV9yZWNlaXZlcgALc2lnbkFzc2V0SWQJANkEAQkBDmdldFN0cmluZ0J5S2V5AQIYY29uZl9hY2NlcHRlZF9hc3NldF9TSUdOAAVjaHJpcwkBDmdldFN0cmluZ0J5S2V5AQIMY29uZl9hZG1pbl8xAQ9nZXRJbnRlZ2VyQnlLZXkBA2tleQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkAAAEPZ2V0Qm9vbGVhbkJ5S2V5AQNrZXkJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUDa2V5BwALZGFwcFJ1bm5pbmcJAQt2YWx1ZU9yRWxzZQIJAJsIAgUIdXNlckRhcHACFGNvbmZfZGFwcF9pc19ydW5uaW5nBgAObWFpbnRlbmFuY2VNU0cJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUIdXNlckRhcHACFGNvbmZfbWFpbnRlbmFuY2VfbXNnAgAADXVzZXJTdXNwZW5kZWQCCVNVU1BFTkRFRAAQdXNlclVucmVnaXN0ZXJlZAIMVU5SRUdJU1RFUkVEAQt2YWxpZGF0ZUNJRAEDY2lkAwkBCGNvbnRhaW5zAgUDY2lkAgEvAwMJAGYCAEwJALECAQUDY2lkCQAAAgkAsQIBCQCRAwIJALUJAgUDY2lkAgEvAAAAOwcJAGYCABAJALECAQkAkQMCCQC1CQIFA2NpZAIBLwABBwcAB3NpZ25DdXQAAgENa2V5VXNlclN0YXR1cwEGY2FsbGVyCQCsAgICDHVzZXJfc3RhdHVzXwUGY2FsbGVyARZrZXlFdmVudE93bmVyQnlFdmVudElkAQdldmVudElkCQCsAgICEGdldF9ldmVudF9vd25lcl8FB2V2ZW50SWQBEWtleUV2ZW50QWRkZWREYXRlAgZjYWxsZXIHZXZlbnRJZAkArAICCQCsAgIJAKwCAgIQZXZlbnRfYWRkZWREYXRlXwUHZXZlbnRJZAIBXwUGY2FsbGVyAQxrZXlFdmVudERhdGUCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAgtldmVudF9kYXRlXwUHZXZlbnRJZAIBXwUGY2FsbGVyAQxrZXlFdmVudE5hbWUCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAgtldmVudF9uYW1lXwUHZXZlbnRJZAIBXwUGY2FsbGVyAQxrZXlFdmVudERlc2MCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAgtldmVudF9kZXNjXwUHZXZlbnRJZAIBXwUGY2FsbGVyARJrZXlFdmVudERpc3BsYXlDaWQCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAhFldmVudF9kaXNwbGF5Q2lkXwUHZXZlbnRJZAIBXwUGY2FsbGVyAQxrZXlFdmVudFRhZ3MCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAgtldmVudF90YWdzXwUHZXZlbnRJZAIBXwUGY2FsbGVyAQxrZXlFdmVudEZsYWcCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAgtldmVudF9mbGFnXwUHZXZlbnRJZAIBXwUGY2FsbGVyAQxrZXlFdmVudE5vdGUCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAgtldmVudF9ub3RlXwUHZXZlbnRJZAIBXwUGY2FsbGVyAQ9rZXlFdmVudENyYXdsZXICBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAhFldmVudF9jcmF3bGVyQ2lkXwUHZXZlbnRJZAIBXwUGY2FsbGVyARhrZXlFdmVudFRvdGFsVGlja2V0VHlwZXMCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAhdldmVudF90b3RhbFRpY2tldFR5cGVzXwUHZXZlbnRJZAIBXwUGY2FsbGVyARprZXlFdmVudFRvdGFsVGlja2V0c0lzc3VlZAIGY2FsbGVyB2V2ZW50SWQJAKwCAgkArAICCQCsAgICEmV2ZW50X3RvdGFsSXNzdWVkXwUHZXZlbnRJZAIBXwUGY2FsbGVyARBrZXlFdmVudENhbmNlbGVkAgZjYWxsZXIHZXZlbnRJZAkArAICCQCsAgIJAKwCAgIPZXZlbnRfY2FuY2VsZWRfBQdldmVudElkAgFfBQZjYWxsZXIBFmtleUV2ZW50Q2FuY2VsZWRSZWFzb24CBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAhVldmVudF9jYW5jZWxlZFJlYXNvbl8FB2V2ZW50SWQCAV8FBmNhbGxlcgEVa2V5RXZlbnRTdGFydGluZ1ByaWNlAgZjYWxsZXIHZXZlbnRJZAkArAICCQCsAgIJAKwCAgIUZXZlbnRfc3RhcnRpbmdQcmljZV8FB2V2ZW50SWQCAV8FBmNhbGxlcgENa2V5VGlja2V0TmFtZQMGY2FsbGVyB2V2ZW50SWQIdGlja2V0SWQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgx0aWNrZXRfbmFtZV8FB2V2ZW50SWQCAV8FBmNhbGxlcgIBXwUIdGlja2V0SWQBDWtleVRpY2tldERlc2MDBmNhbGxlcgdldmVudElkCHRpY2tldElkCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIMdGlja2V0X2Rlc2NfBQdldmVudElkAgFfBQZjYWxsZXICAV8FCHRpY2tldElkAQ5rZXlUaWNrZXRQcmljZQMGY2FsbGVyB2V2ZW50SWQIdGlja2V0SWQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg10aWNrZXRfcHJpY2VfBQdldmVudElkAgFfBQZjYWxsZXICAV8FCHRpY2tldElkAQ1rZXlUaWNrZXREYXRlAwZjYWxsZXIHZXZlbnRJZAh0aWNrZXRJZAkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDHRpY2tldF9kYXRlXwUHZXZlbnRJZAIBXwUGY2FsbGVyAgFfBQh0aWNrZXRJZAEZa2V5VGlja2V0UmVzZWxsTGltaXRhdGlvbgMGY2FsbGVyB2V2ZW50SWQIdGlja2V0SWQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhh0aWNrZXRfcmVzZWxsTGltaXRhdGlvbl8FB2V2ZW50SWQCAV8FBmNhbGxlcgIBXwUIdGlja2V0SWQBFWtleVRpY2tldE1heEF2YWlsYWJsZQMGY2FsbGVyB2V2ZW50SWQIdGlja2V0SWQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhR0aWNrZXRfbWF4QXZhaWxhYmxlXwUHZXZlbnRJZAIBXwUGY2FsbGVyAgFfBQh0aWNrZXRJZAEPa2V5VGlja2V0T25TYWxlAwZjYWxsZXIHZXZlbnRJZAh0aWNrZXRJZAkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDnRpY2tldF9vblNhbGVfBQdldmVudElkAgFfBQZjYWxsZXICAV8FCHRpY2tldElkARNrZXlUaWNrZXRBbW91bnRVc2VkBAZjYWxsZXIHZXZlbnRJZAh0aWNrZXRJZAVuZnRJZAkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhJ0aWNrZXRfYW1vdW50VXNlZF8FB2V2ZW50SWQCAV8FBmNhbGxlcgIBXwUIdGlja2V0SWQCAV8FBW5mdElkARRrZXlUaWNrZXRIaXN0b3J5VXNlZAUGY2FsbGVyB2V2ZW50SWQIdGlja2V0SWQFbmZ0SWQKdXNhZ2VJbmRleAkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgITdGlja2V0X2hpc3RvcnlVc2VkXwUHZXZlbnRJZAIBXwUGY2FsbGVyAgFfBQh0aWNrZXRJZAIBXwUFbmZ0SWQCAV8FCnVzYWdlSW5kZXgBD2tleVRpY2tldE1heFVzZQMGY2FsbGVyB2V2ZW50SWQIdGlja2V0SWQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg50aWNrZXRfbWF4VXNlXwUHZXZlbnRJZAIBXwUGY2FsbGVyAgFfBQh0aWNrZXRJZAEUa2V5VGlja2V0VG90YWxJc3N1ZWQDBmNhbGxlcgdldmVudElkCHRpY2tldElkCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgITdGlja2V0X3RvdGFsSXNzdWVkXwUHZXZlbnRJZAIBXwUGY2FsbGVyAgFfBQh0aWNrZXRJZAEQa2V5VGlja2V0Um95YWx0eQMGY2FsbGVyB2V2ZW50SWQIdGlja2V0SWQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhF0aWNrZXRfcm95YWx0aWVzXwUHZXZlbnRJZAIBXwUGY2FsbGVyAgFfBQh0aWNrZXRJZAEOdmFsaWRhdGVTdHJpbmcCA3N0cgNtYXgDCQAAAgkAsQIBBQNzdHIAAAkAAgECGEZpZWxkIGNhbm5vdCBiZSBpcyBlbXB0eQMJAGYCCQCxAgEFA3N0cgUDbWF4CQACAQkArAICBQNzdHICDCBpcyB0b28gbG9uZwYBC3ZhbGlkYXRlSW50AQNudW0JAGYCAAAFA251bQEWZ2V0RXZlbnRPd25lckJ5RXZlbnRJZAEHZXZlbnRJZAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEWa2V5RXZlbnRPd25lckJ5RXZlbnRJZAEFB2V2ZW50SWQCAAEMdmFsaWRhdGVVc2VyAQZjYWxsZXIECnVzZXJTdGF0dXMJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUIdXNlckRhcHAJAQ1rZXlVc2VyU3RhdHVzAQUGY2FsbGVyBRB1c2VyVW5yZWdpc3RlcmVkAwkAAAIFCnVzZXJTdGF0dXMFEHVzZXJVbnJlZ2lzdGVyZWQCLlJlZ2lzdGVyIHRoaXMgYWNjb3VudCBmaXJzdCB3aXRoICJBY2NvdW50IiB0YWIDCQAAAgUKdXNlclN0YXR1cwUNdXNlclN1c3BlbmRlZAIRQWNjb3VudCBzdXNwZW5kZWQCAAERdmFsaWRhdGVFdmVudERhdGEGBmNhbGxlcgpjaWREaXNwbGF5BG5hbWULZGVzY3JpcHRpb24EdGFncwRkYXRlBAljaGVja1VzZXIJAQx2YWxpZGF0ZVVzZXIBBQZjYWxsZXIDCQECIT0CBQljaGVja1VzZXICAAkAAgEFCWNoZWNrVXNlcgMJAAACCQCxAgEFCmNpZERpc3BsYXkAAAkAAgECG0Rpc3BsYXkgQ0lEIGNhbm5vdCBiZSBlbXB0eQMJAQEhAQkBC3ZhbGlkYXRlQ0lEAQUKY2lkRGlzcGxheQkAAgECEFByb2JsZW0gd2l0aCBDSUQDCQEBIQEJAQ52YWxpZGF0ZVN0cmluZwIFBG5hbWUArAIJAAIBAhIzMDAgQ2hhci4gbWF4IG5hbWUDCQEBIQEJAQ52YWxpZGF0ZVN0cmluZwIFC2Rlc2NyaXB0aW9uALgXCQACAQIaMzAwMCBDaGFyLiBtYXggZGVzY3JpcHRpb24DCQEBIQEJAQ52YWxpZGF0ZVN0cmluZwIFBGRhdGUA6AcJAAIBAhMxMDAwIENoYXIuIG1heCBkYXRlAwkAZgIJAJADAQkAtQkCBQR0YWdzAgEsAAUJAAIBAgs1IHRhZ3MgbWF4LgIAARJ2YWxpZGF0ZVRpY2tldERhdGEIB2V2ZW50SWQGY2FsbGVyBG5hbWULZGVzY3JpcHRpb24FcHJpY2UMbWF4QXZhaWxhYmxlBm1heFVzZRByZXNlbGxMaW1pdGF0aW9uBAljaGVja1VzZXIJAQx2YWxpZGF0ZVVzZXIBBQZjYWxsZXIDCQECIT0CBQljaGVja1VzZXICAAkAAgEFCWNoZWNrVXNlcgMJAQEhAQkBDnZhbGlkYXRlU3RyaW5nAgUEbmFtZQDIAQkAAgECEjEwMCBDaGFyLiBtYXggbmFtZQMJAQEhAQkBDnZhbGlkYXRlU3RyaW5nAgULZGVzY3JpcHRpb24A6AcJAAIBAhoxMDAwIENoYXIuIG1heCBkZXNjcmlwdGlvbgMDAwMJAQt2YWxpZGF0ZUludAEFBXByaWNlBgkBC3ZhbGlkYXRlSW50AQUGbWF4VXNlBgkBC3ZhbGlkYXRlSW50AQUMbWF4QXZhaWxhYmxlBgkBC3ZhbGlkYXRlSW50AQUQcmVzZWxsTGltaXRhdGlvbgkAAgECFFBvc2l0aXZlIGFtb3VudCBvbmx5AwkBASEBCQEOdmFsaWRhdGVTdHJpbmcCBQtkZXNjcmlwdGlvbgDoBwkAAgECGjEwMDAgQ2hhci4gbWF4IGRlc2NyaXB0aW9uAgABDGlkQ2FsbGVyRGF0ZQEBaQMJAQEhAQULZGFwcFJ1bm5pbmcJAAIBBQ5tYWludGVuYW5jZU1TRwkAlQoDCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQJANgEAQgIBQFpBmNhbGxlcgVieXRlcwgFCWxhc3RCbG9jawl0aW1lc3RhbXABCWlzUGF5bWVudAEBaQMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhNObyBwYXltZW50IGF0dGFjaGVkBAdwYXltZW50CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEBmFtb3VudAkBBXZhbHVlAQgFB3BheW1lbnQGYW1vdW50CQCUCgIFB3BheW1lbnQFBmFtb3VudAEUdmFsaWRhdGVQcmljZUFzc2V0SWQDAWkMcHJpY2VBc3NldElkDGFydHdvcmtQcmljZQQLJHQwNzAxMzcwNDkJAQlpc1BheW1lbnQBBQFpBAdwYXltZW50CAULJHQwNzAxMzcwNDkCXzEEBmFtb3VudAgFCyR0MDcwMTM3MDQ5Al8yAwkBASEBCQEJaXNEZWZpbmVkAQgFB3BheW1lbnQHYXNzZXRJZAkAAgECFFdyb25nIGFzc2V0IGF0dGFjaGVkBAdhc3NldElkAwMJAGYCCQCxAgEFDHByaWNlQXNzZXRJZAAACQAAAgkA2AQBCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkBQxwcmljZUFzc2V0SWQHCAUHcGF5bWVudAdhc3NldElkCQACAQIUV3JvbmcgYXNzZXQgYXR0YWNoZWQDCQECIT0CBQxhcnR3b3JrUHJpY2UFBmFtb3VudAkAAgECGlBheW1lbnQgYW1vdW50IGRvbid0IG1hdGNoCQCUCgIFBmFtb3VudAUHYXNzZXRJZAEMaXNFdmVudE93bmVyAgdldmVudElkBmNhbGxlcgQKZXZlbnRPd25lcgkBFmdldEV2ZW50T3duZXJCeUV2ZW50SWQBBQdldmVudElkAwkAAAIFCmV2ZW50T3duZXICAAkAAgECD0V2ZW50IG5vdCBmb3VuZAkAAAIFCmV2ZW50T3duZXIFBmNhbGxlcgELdGlja2V0RXhpc3QDBmNhbGxlcgdldmVudElkCHRpY2tldElkBAZ0aWNrZXQJAQ5nZXRTdHJpbmdCeUtleQEJAQ1rZXlUaWNrZXROYW1lAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAkBAiE9AgkAsQIBBQZ0aWNrZXQAAAEPZXZlbnRJc0NhbmNlbGVkAgZpc3N1ZXIHZXZlbnRJZAkBD2dldEJvb2xlYW5CeUtleQEJARBrZXlFdmVudENhbmNlbGVkAgUGaXNzdWVyBQdldmVudElkDQZpbnZva2UBB3NldENvbmYCA2tleQN2YWwEBmNhbGxlcgkApQgBCAUGaW52b2tlBmNhbGxlcgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFBWNocmlzCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQZjYWxsZXIDCQEIY29udGFpbnMCBQNrZXkCBWNvbmZfCQDMCAIJAQtTdHJpbmdFbnRyeQIFA2tleQUDdmFsBQNuaWwJAAIBAiBFbnRyaWVzIHN0YXJ0aW5nIHdpdGggY29uZl8gb25seQkAAgECIllvdSBhcmUgbm90IGFsbG93ZWQgdG8gY2hhbmdlIHRoaXMBaQEIYWRkRXZlbnQGBG5hbWULZGVzY3JpcHRpb24EdGFncwpjaWREaXNwbGF5B2NyYXdsZXIEZGF0ZQQLJHQwODM3ODg0MjgJAQxpZENhbGxlckRhdGUBBQFpBAdldmVudElkCAULJHQwODM3ODg0MjgCXzEEBmNhbGxlcggFCyR0MDgzNzg4NDI4Al8yBAlhZGRlZERhdGUIBQskdDA4Mzc4ODQyOAJfMwQJY2hlY2tVc2VyCQEMdmFsaWRhdGVVc2VyAQUGY2FsbGVyAwkBAiE9AgUJY2hlY2tVc2VyAgAJAAIBBQljaGVja1VzZXIEDXZhbGlkYXRlRXZlbnQJARF2YWxpZGF0ZUV2ZW50RGF0YQYFBmNhbGxlcgUKY2lkRGlzcGxheQUEbmFtZQULZGVzY3JpcHRpb24FBHRhZ3MFBGRhdGUDCQECIT0CBQ12YWxpZGF0ZUV2ZW50AgAJAAIBAhVTb21ldGhpbmcgd2VudCB3cm9uZyEJAMwIAgkBDEludGVnZXJFbnRyeQIJARFrZXlFdmVudEFkZGVkRGF0ZQIFBmNhbGxlcgUHZXZlbnRJZAUJYWRkZWREYXRlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlFdmVudERhdGUCBQZjYWxsZXIFB2V2ZW50SWQFBGRhdGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUV2ZW50TmFtZQIFBmNhbGxlcgUHZXZlbnRJZAUEbmFtZQkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXZlbnREZXNjAgUGY2FsbGVyBQdldmVudElkBQtkZXNjcmlwdGlvbgkAzAgCCQELU3RyaW5nRW50cnkCCQESa2V5RXZlbnREaXNwbGF5Q2lkAgUGY2FsbGVyBQdldmVudElkBQpjaWREaXNwbGF5CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlFdmVudFRhZ3MCBQZjYWxsZXIFB2V2ZW50SWQFBHRhZ3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD2tleUV2ZW50Q3Jhd2xlcgIFBmNhbGxlcgUHZXZlbnRJZAUHY3Jhd2xlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGmtleUV2ZW50VG90YWxUaWNrZXRzSXNzdWVkAgUGY2FsbGVyBQdldmVudElkAAAJAMwIAgkBDEJvb2xlYW5FbnRyeQIJARBrZXlFdmVudENhbmNlbGVkAgUGY2FsbGVyBQdldmVudElkBwkAzAgCCQELU3RyaW5nRW50cnkCCQEWa2V5RXZlbnRPd25lckJ5RXZlbnRJZAEFB2V2ZW50SWQFBmNhbGxlcgUDbmlsAWkBCWVkaXRFdmVudAcHZXZlbnRJZARuYW1lC2Rlc2NyaXB0aW9uBHRhZ3MKY2lkRGlzcGxheQdjcmF3bGVyBGRhdGUDCQEBIQEFC2RhcHBSdW5uaW5nCQACAQUObWFpbnRlbmFuY2VNU0cEBmNhbGxlcgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBAljaGVja1VzZXIJAQx2YWxpZGF0ZVVzZXIBBQZjYWxsZXIDCQECIT0CBQljaGVja1VzZXICAAkAAgEFCWNoZWNrVXNlcgQNdmFsaWRhdGVFdmVudAkBEXZhbGlkYXRlRXZlbnREYXRhBgUGY2FsbGVyBQpjaWREaXNwbGF5BQRuYW1lBQtkZXNjcmlwdGlvbgUEdGFncwUEZGF0ZQMJAQIhPQIFDXZhbGlkYXRlRXZlbnQCAAkAAgECFVNvbWV0aGluZyB3ZW50IHdyb25nIQQKZW50cnlFeGlzdAkBDmdldFN0cmluZ0J5S2V5AQkBDGtleUV2ZW50TmFtZQIFBmNhbGxlcgUHZXZlbnRJZAMJAAACBQplbnRyeUV4aXN0AgAJAAIBAg9FbnRyeSBub3QgZm91bmQEBGZsYWcJAQ5nZXRTdHJpbmdCeUtleQEJAQxrZXlFdmVudEZsYWcCBQZjYWxsZXIFB2V2ZW50SWQDCQAAAgUEZmxhZwIHSUxMRUdBTAkAAgECG0Nhbm5vdCB1cGRhdGUgSUxMRUdBTCBFdmVudAkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXZlbnROYW1lAgUGY2FsbGVyBQdldmVudElkBQRuYW1lCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlFdmVudERhdGUCBQZjYWxsZXIFB2V2ZW50SWQFBGRhdGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUV2ZW50RGVzYwIFBmNhbGxlcgUHZXZlbnRJZAULZGVzY3JpcHRpb24JAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUV2ZW50VGFncwIFBmNhbGxlcgUHZXZlbnRJZAUEdGFncwkAzAgCCQELU3RyaW5nRW50cnkCCQESa2V5RXZlbnREaXNwbGF5Q2lkAgUGY2FsbGVyBQdldmVudElkBQpjaWREaXNwbGF5CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9rZXlFdmVudENyYXdsZXICBQZjYWxsZXIFB2V2ZW50SWQFB2NyYXdsZXIFA25pbAFpAQtkZWxldGVFdmVudAEHZXZlbnRJZAQNJHQwMTA3MjgxMDc3MwkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMTA3MjgxMDc3MwJfMQQGY2FsbGVyCAUNJHQwMTA3MjgxMDc3MwJfMgQJYWRkZWREYXRlCAUNJHQwMTA3MjgxMDc3MwJfMwQJY2hlY2tVc2VyCQEMdmFsaWRhdGVVc2VyAQUGY2FsbGVyAwkBAiE9AgUJY2hlY2tVc2VyAgAJAAIBBQljaGVja1VzZXIDCQEBIQEJAQxpc0V2ZW50T3duZXICBQdldmVudElkBQZjYWxsZXIJAAIBAiNZb3UgYXJlIG5vdCB0aGUgb3duZXIgb2YgdGhpcyBldmVudAQNZXZlbnRUb3RhbE5GVAkBD2dldEludGVnZXJCeUtleQEJARprZXlFdmVudFRvdGFsVGlja2V0c0lzc3VlZAIFBmNhbGxlcgUHZXZlbnRJZAMJAQIhPQIFDWV2ZW50VG90YWxORlQAAAkAAgECLUNhbm5vdCBkZWxldGUgZXZlbnQgd2l0aCBhbHJlYWR5IHNvbGQgdGlja2V0cwQXdG90YWxUaWNrZXRUeXBlRm9yRXZlbnQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEYa2V5RXZlbnRUb3RhbFRpY2tldFR5cGVzAgUGY2FsbGVyBQdldmVudElkAwkAZgIFF3RvdGFsVGlja2V0VHlwZUZvckV2ZW50AAAJAAIBAhhEZWxldGUgYWxsIHRpY2tldHMgZmlyc3QJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBEWtleUV2ZW50QWRkZWREYXRlAgUGY2FsbGVyBQdldmVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQxrZXlFdmVudERhdGUCBQZjYWxsZXIFB2V2ZW50SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDGtleUV2ZW50TmFtZQIFBmNhbGxlcgUHZXZlbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEMa2V5RXZlbnREZXNjAgUGY2FsbGVyBQdldmVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARJrZXlFdmVudERpc3BsYXlDaWQCBQZjYWxsZXIFB2V2ZW50SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDGtleUV2ZW50VGFncwIFBmNhbGxlcgUHZXZlbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEPa2V5RXZlbnRDcmF3bGVyAgUGY2FsbGVyBQdldmVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARprZXlFdmVudFRvdGFsVGlja2V0c0lzc3VlZAIFBmNhbGxlcgUHZXZlbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEQa2V5RXZlbnRDYW5jZWxlZAIFBmNhbGxlcgUHZXZlbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5RXZlbnRPd25lckJ5RXZlbnRJZAEFB2V2ZW50SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGGtleUV2ZW50VG90YWxUaWNrZXRUeXBlcwIFBmNhbGxlcgUHZXZlbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5RXZlbnRDYW5jZWxlZFJlYXNvbgIFBmNhbGxlcgUHZXZlbnRJZAUDbmlsAWkBC2NhbmNlbEV2ZW50AgdldmVudElkBnJlYXNvbgQNJHQwMTIxNzYxMjIyMQkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMTIxNzYxMjIyMQJfMQQGY2FsbGVyCAUNJHQwMTIxNzYxMjIyMQJfMgQJYWRkZWREYXRlCAUNJHQwMTIxNzYxMjIyMQJfMwQJY2hlY2tVc2VyCQEMdmFsaWRhdGVVc2VyAQUGY2FsbGVyAwkBAiE9AgUJY2hlY2tVc2VyAgAJAAIBBQljaGVja1VzZXIDCQEBIQEJAQxpc0V2ZW50T3duZXICBQdldmVudElkBQZjYWxsZXIJAAIBAiNZb3UgYXJlIG5vdCB0aGUgb3duZXIgb2YgdGhpcyBldmVudAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBEGtleUV2ZW50Q2FuY2VsZWQCBQZjYWxsZXIFB2V2ZW50SWQGCQDMCAIJAQtTdHJpbmdFbnRyeQIJARZrZXlFdmVudENhbmNlbGVkUmVhc29uAgUGY2FsbGVyBQdldmVudElkBQZyZWFzb24FA25pbAFpAQlmbGFnRXZlbnQEB2V2ZW50SWQEYWRkcgRmbGFnBG5vdGUEDSR0MDEyNjU2MTI2OTAJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDEyNjU2MTI2OTACXzEEBmNhbGxlcggFDSR0MDEyNjU2MTI2OTACXzIDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQVjaHJpcwkAzAgCCQClCAEFBHRoaXMFA25pbAUGY2FsbGVyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgIACQDMCAICD0NIQU5HRV9SRVFVSVJFRAkAzAgCAgdGTEFHR0VECQDMCAICB0lMTEVHQUwFA25pbAUEZmxhZwkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXZlbnRGbGFnAgUEYWRkcgUHZXZlbnRJZAUEZmxhZwkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXZlbnROb3RlAgUEYWRkcgUHZXZlbnRJZAUEbm90ZQUDbmlsCQACAQkArAICAg5Vbmtub3cgc3RhdHVzIAUEZmxhZwkAAgECE1lvdSBhcmUgbm90IGFsbG93ZWQBaQEJYWRkVGlja2V0CAdldmVudElkBG5hbWULZGVzY3JpcHRpb24FcHJpY2UMbWF4QXZhaWxhYmxlBk1heFVzZQlSb3lhbHRpZXMQcmVzZWxsTGltaXRhdGlvbgQNJHQwMTMyMzAxMzI3MAkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMTMyMzAxMzI3MAJfMQQGY2FsbGVyCAUNJHQwMTMyMzAxMzI3MAJfMgQEZGF0ZQgFDSR0MDEzMjMwMTMyNzACXzMECWNoZWNrVXNlcgkBDHZhbGlkYXRlVXNlcgEFBmNhbGxlcgMJAQIhPQIFCWNoZWNrVXNlcgIACQACAQUJY2hlY2tVc2VyAwkBD2V2ZW50SXNDYW5jZWxlZAIFBmNhbGxlcgUHZXZlbnRJZAkAAgECGEV2ZW50IGhhdmUgYmVlbiBjYW5jZWxlZAMJAQEhAQkBDGlzRXZlbnRPd25lcgIFB2V2ZW50SWQFBmNhbGxlcgkAAgECI1lvdSBhcmUgbm90IHRoZSBvd25lciBvZiB0aGlzIGV2ZW50BA52YWxpZGF0ZVRpY2tldAkBEnZhbGlkYXRlVGlja2V0RGF0YQgFB2V2ZW50SWQFBmNhbGxlcgUEbmFtZQULZGVzY3JpcHRpb24FBXByaWNlBQxtYXhBdmFpbGFibGUFBk1heFVzZQUQcmVzZWxsTGltaXRhdGlvbgMJAQIhPQIFDnZhbGlkYXRlVGlja2V0AgAJAAIBAhVTb21ldGhpbmcgd2VudCB3cm9uZyEEF3RvdGFsVGlja2V0VHlwZUZvckV2ZW50CQEPZ2V0SW50ZWdlckJ5S2V5AQkBGGtleUV2ZW50VG90YWxUaWNrZXRUeXBlcwIFBmNhbGxlcgUHZXZlbnRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQENa2V5VGlja2V0TmFtZQMFBmNhbGxlcgUHZXZlbnRJZAUCaWQFBG5hbWUJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ1rZXlUaWNrZXREYXRlAwUGY2FsbGVyBQdldmVudElkBQJpZAUEZGF0ZQkAzAgCCQELU3RyaW5nRW50cnkCCQENa2V5VGlja2V0RGVzYwMFBmNhbGxlcgUHZXZlbnRJZAUCaWQFC2Rlc2NyaXB0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOa2V5VGlja2V0UHJpY2UDBQZjYWxsZXIFB2V2ZW50SWQFAmlkBQVwcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFWtleVRpY2tldE1heEF2YWlsYWJsZQMFBmNhbGxlcgUHZXZlbnRJZAUCaWQFDG1heEF2YWlsYWJsZQkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBD2tleVRpY2tldE9uU2FsZQMFBmNhbGxlcgUHZXZlbnRJZAUCaWQGCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEPa2V5VGlja2V0TWF4VXNlAwUGY2FsbGVyBQdldmVudElkBQJpZAUGTWF4VXNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEUa2V5VGlja2V0VG90YWxJc3N1ZWQDBQZjYWxsZXIFB2V2ZW50SWQFAmlkAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJARhrZXlFdmVudFRvdGFsVGlja2V0VHlwZXMCBQZjYWxsZXIFB2V2ZW50SWQJAGQCBRd0b3RhbFRpY2tldFR5cGVGb3JFdmVudAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEQa2V5VGlja2V0Um95YWx0eQMFBmNhbGxlcgUHZXZlbnRJZAUCaWQFCVJveWFsdGllcwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGWtleVRpY2tldFJlc2VsbExpbWl0YXRpb24DBQZjYWxsZXIFB2V2ZW50SWQFAmlkBRByZXNlbGxMaW1pdGF0aW9uBQNuaWwBaQEKZWRpdFRpY2tldAkIdGlja2V0SWQHZXZlbnRJZARuYW1lC2Rlc2NyaXB0aW9uBXByaWNlDG1heEF2YWlsYWJsZQZtYXhVc2UJUm95YWx0aWVzEHJlc2VsbExpbWl0YXRpb24EDSR0MDE0OTk0MTUwMzQJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDE0OTk0MTUwMzQCXzEEBmNhbGxlcggFDSR0MDE0OTk0MTUwMzQCXzIEBGRhdGUIBQ0kdDAxNDk5NDE1MDM0Al8zBAljaGVja1VzZXIJAQx2YWxpZGF0ZVVzZXIBBQZjYWxsZXIDCQECIT0CBQljaGVja1VzZXICAAkAAgEFCWNoZWNrVXNlcgMJAQEhAQkBDGlzRXZlbnRPd25lcgIFB2V2ZW50SWQFBmNhbGxlcgkAAgECI1lvdSBhcmUgbm90IHRoZSBvd25lciBvZiB0aGlzIGV2ZW50AwkBASEBCQELdGlja2V0RXhpc3QDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkCQACAQIQVGlja2V0IG5vdCBmb3VuZAQOdmFsaWRhdGVUaWNrZXQJARJ2YWxpZGF0ZVRpY2tldERhdGEIBQdldmVudElkBQZjYWxsZXIFBG5hbWUFC2Rlc2NyaXB0aW9uBQVwcmljZQUMbWF4QXZhaWxhYmxlBQZtYXhVc2UFEHJlc2VsbExpbWl0YXRpb24DCQECIT0CBQ52YWxpZGF0ZVRpY2tldAIACQACAQIVU29tZXRoaW5nIHdlbnQgd3JvbmchBAp0aWNrZXRTb2xkCQELdmFsdWVPckVsc2UCCQCfCAEJARRrZXlUaWNrZXRUb3RhbElzc3VlZAMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQAAAMJAGYCBQp0aWNrZXRTb2xkBQxtYXhBdmFpbGFibGUJAAIBAj5NYXggdGlja2V0cyBhdmFpbGFibGUgY2Fubm90IGJlIGxvd2VyIHRoYW4gYW1vdW50IGFscmVhZHkgc29sZAkAzAgCCQELU3RyaW5nRW50cnkCCQENa2V5VGlja2V0TmFtZQMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQFBG5hbWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleVRpY2tldERlc2MDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkBQtkZXNjcmlwdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDmtleVRpY2tldFByaWNlAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAUFcHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJARVrZXlUaWNrZXRNYXhBdmFpbGFibGUDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkBQxtYXhBdmFpbGFibGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ9rZXlUaWNrZXRNYXhVc2UDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkBQZtYXhVc2UJAMwIAgkBDEludGVnZXJFbnRyeQIJARBrZXlUaWNrZXRSb3lhbHR5AwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAUJUm95YWx0aWVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEZa2V5VGlja2V0UmVzZWxsTGltaXRhdGlvbgMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQFEHJlc2VsbExpbWl0YXRpb24FA25pbAFpAQ9wYXVzZVRpY2tldFNhbGUDB2V2ZW50SWQIdGlja2V0SWQGc3RhdHVzBA0kdDAxNjM2NTE2NDA1CQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAxNjM2NTE2NDA1Al8xBAZjYWxsZXIIBQ0kdDAxNjM2NTE2NDA1Al8yBARkYXRlCAUNJHQwMTYzNjUxNjQwNQJfMwQJY2hlY2tVc2VyCQEMdmFsaWRhdGVVc2VyAQUGY2FsbGVyAwkBAiE9AgUJY2hlY2tVc2VyAgAJAAIBBQljaGVja1VzZXIDCQEBIQEJAQxpc0V2ZW50T3duZXICBQdldmVudElkBQZjYWxsZXIJAAIBAiNZb3UgYXJlIG5vdCB0aGUgb3duZXIgb2YgdGhpcyBldmVudAMJAQEhAQkBC3RpY2tldEV4aXN0AwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAkAAgECEFRpY2tldCBub3QgZm91bmQJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQ9rZXlUaWNrZXRPblNhbGUDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkBQZzdGF0dXMFA25pbAFpAQxkZWxldGVUaWNrZXQCCHRpY2tldElkB2V2ZW50SWQEDSR0MDE2ODY4MTY5MDgJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDE2ODY4MTY5MDgCXzEEBmNhbGxlcggFDSR0MDE2ODY4MTY5MDgCXzIEBGRhdGUIBQ0kdDAxNjg2ODE2OTA4Al8zBAljaGVja1VzZXIJAQx2YWxpZGF0ZVVzZXIBBQZjYWxsZXIDCQECIT0CBQljaGVja1VzZXICAAkAAgEFCWNoZWNrVXNlcgMJAQEhAQkBDGlzRXZlbnRPd25lcgIFB2V2ZW50SWQFBmNhbGxlcgkAAgECI1lvdSBhcmUgbm90IHRoZSBvd25lciBvZiB0aGlzIGV2ZW50AwkBASEBCQELdGlja2V0RXhpc3QDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkCQACAQIQVGlja2V0IG5vdCBmb3VuZAQKYW1vdW50U29sZAkBD2dldEludGVnZXJCeUtleQEJARRrZXlUaWNrZXRUb3RhbElzc3VlZAMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQDCQECIT0CBQphbW91bnRTb2xkAAAJAAIBAiZDYW5ub3QgZGVsZXRlIHRpY2tldCB0aGF0IHNvbGQgYWxyZWFkeQQXdG90YWxUaWNrZXRUeXBlRm9yRXZlbnQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEYa2V5RXZlbnRUb3RhbFRpY2tldFR5cGVzAgUGY2FsbGVyBQdldmVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ1rZXlUaWNrZXROYW1lAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQENa2V5VGlja2V0RGF0ZQMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDWtleVRpY2tldERlc2MDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ5rZXlUaWNrZXRQcmljZQMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFWtleVRpY2tldE1heEF2YWlsYWJsZQMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBD2tleVRpY2tldE9uU2FsZQMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBD2tleVRpY2tldE1heFVzZQMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFGtleVRpY2tldFRvdGFsSXNzdWVkAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEQa2V5VGlja2V0Um95YWx0eQMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGWtleVRpY2tldFJlc2VsbExpbWl0YXRpb24DBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEYa2V5RXZlbnRUb3RhbFRpY2tldFR5cGVzAgUGY2FsbGVyBQdldmVudElkCQBlAgUXdG90YWxUaWNrZXRUeXBlRm9yRXZlbnQAAQUDbmlsAWkBCWJ1eVRpY2tldAMIdGlja2V0SWQHZXZlbnRJZAZpc3N1ZXIEDSR0MDE4Mjc2MTgzMTYJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDE4Mjc2MTgzMTYCXzEEBmNhbGxlcggFDSR0MDE4Mjc2MTgzMTYCXzIEBGRhdGUIBQ0kdDAxODI3NjE4MzE2Al8zBAh0b3RhbE5GVAkBC3ZhbHVlT3JFbHNlAgkBD2dldEludGVnZXJCeUtleQECFHRvdGFsX3RpY2tldHNfaXNzdWVkAAADCQEBIQEJAQxpc0V2ZW50T3duZXICBQdldmVudElkBQZpc3N1ZXIJAAIBAh9FdmVudCBJRCBhbmQgSXNzdWVyIGRvbid0IG1hdGNoAwkBASEBCQELdGlja2V0RXhpc3QDBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkCQACAQIQVGlja2V0IG5vdCBmb3VuZAQJZXZlbnROYW1lCQEOZ2V0U3RyaW5nQnlLZXkBCQEMa2V5RXZlbnROYW1lAgUGaXNzdWVyBQdldmVudElkAwkAAAIFCWV2ZW50TmFtZQIACQACAQIRQXJ0IGRvZXNuJ3QgZXhpc3QDCQEPZXZlbnRJc0NhbmNlbGVkAgUGaXNzdWVyBQdldmVudElkCQACAQIYRXZlbnQgaGF2ZSBiZWVuIGNhbmNlbGVkBAhpc09uU2FsZQkBD2dldEJvb2xlYW5CeUtleQEJAQ9rZXlUaWNrZXRPblNhbGUDBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkAwkBASEBBQhpc09uU2FsZQkAAgECFFRpY2tldHMgbm90IGZvciBzYWxlBAphbW91bnRTb2xkCQEPZ2V0SW50ZWdlckJ5S2V5AQkBFGtleVRpY2tldFRvdGFsSXNzdWVkAwUGaXNzdWVyBQdldmVudElkBQh0aWNrZXRJZAQLdGlja2V0UHJpY2UJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEOa2V5VGlja2V0UHJpY2UDBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkBAxwcmljZUFzc2V0SWQJANgEAQULc2lnbkFzc2V0SWQEDSR0MDE5MTY5MTkyNDMJARR2YWxpZGF0ZVByaWNlQXNzZXRJZAMFAWkFDHByaWNlQXNzZXRJZAULdGlja2V0UHJpY2UEBmFtb3VudAgFDSR0MDE5MTY5MTkyNDMCXzEEB2Fzc2V0SWQIBQ0kdDAxOTE2OTE5MjQzAl8yBAptYXhDYW5TZWxsCQEPZ2V0SW50ZWdlckJ5S2V5AQkBFWtleVRpY2tldE1heEF2YWlsYWJsZQMFBmlzc3VlcgUHZXZlbnRJZAUIdGlja2V0SWQEDWFtb3VudEZvclNpZ24JAGsDBQZhbW91bnQFB3NpZ25DdXQAZAQSYW1vdW50Rm9yT3JnYW5pemVyCQBlAgUGYW1vdW50BQ1hbW91bnRGb3JTaWduAwkAAAIFCmFtb3VudFNvbGQFCm1heENhblNlbGwJAAIBAgxBcnQgc29sZCBvdXQEDW5ld0Ftb3VudFNvbGQJAGQCBQphbW91bnRTb2xkAAEECWlzc3VlTWV0YQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICC09yZ2FuaXplcjogBQZpc3N1ZXICDCwKIEV2ZW50SUQ6IAUHZXZlbnRJZAINLAogVGlja2V0SUQ6IAUIdGlja2V0SWQCDiwKIEV2ZW50TmFtZTogBQlldmVudE5hbWUCCiwKIElzc3VlOiAJAKQDAQUNbmV3QW1vdW50U29sZAIBLwkApAMBBQptYXhDYW5TZWxsBAhpc3N1ZU5GVAkAwggFCQCsAgICA1NUXwkApAMBCQBkAgUIdG90YWxORlQAAQUJaXNzdWVNZXRhAAEAAAcEBWlkTkZUCQC4CAEFCGlzc3VlTkZUBApzZWxsU3RhdHVzAwkAAAIFDW5ld0Ftb3VudFNvbGQFCm1heENhblNlbGwHBgQKcmVjZWl2ZU5GVAgFAWkGY2FsbGVyBAdzb2xkS2V5CQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIMdGlja2V0X3NvbGRfCQCkAwEFDW5ld0Ftb3VudFNvbGQCBF9vZl8JAKQDAQUKbWF4Q2FuU2VsbAIBXwUIdGlja2V0SWQCAV8FB2V2ZW50SWQCAV8FBmlzc3VlcgIBXwkA2AQBBQVpZE5GVAQJc29sZFZhbHVlCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBBQpyZWNlaXZlTkZUAgFfCQCkAwEFBGRhdGUCAV8FAmlkAgFfCQCkAwEFBmFtb3VudAIBXwkA2AQBBQVpZE5GVAQIc29sZERhdGEJAQtTdHJpbmdFbnRyeQIFB3NvbGRLZXkFCXNvbGRWYWx1ZQQNZXZlbnRUb3RhbE5GVAkBD2dldEludGVnZXJCeUtleQEJARprZXlFdmVudFRvdGFsVGlja2V0c0lzc3VlZAIFBmlzc3VlcgUHZXZlbnRJZAQOdGlja2V0VG90YWxORlQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEUa2V5VGlja2V0VG90YWxJc3N1ZWQDBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkBAZidXlSZXMJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICAgRuZnRfCQDYBAEFBWlkTkZUBQdzb2xkS2V5CQDMCAIJAQxJbnRlZ2VyRW50cnkCAhR0b3RhbF90aWNrZXRzX2lzc3VlZAkAZAIFCHRvdGFsTkZUAAEJAMwIAgkBDEludGVnZXJFbnRyeQIJARprZXlFdmVudFRvdGFsVGlja2V0c0lzc3VlZAIFBmlzc3VlcgUHZXZlbnRJZAkAZAIFDWV2ZW50VG90YWxORlQAAQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFGtleVRpY2tldFRvdGFsSXNzdWVkAwUGaXNzdWVyBQdldmVudElkBQh0aWNrZXRJZAUNbmV3QW1vdW50U29sZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIDU1RfCQCkAwEJAGQCBQh0b3RhbE5GVAABAghfYXNzZXRJZAkArAICCQCsAgIFCHRpY2tldElkAgFfCQDYBAEFBWlkTkZUCQDMCAIJAQxCb29sZWFuRW50cnkCCQEPa2V5VGlja2V0T25TYWxlAwUGaXNzdWVyBQdldmVudElkBQh0aWNrZXRJZAUKc2VsbFN0YXR1cwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBE2tleVRpY2tldEFtb3VudFVzZWQEBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkCQDYBAEFBWlkTkZUAAAJAMwIAgUIaXNzdWVORlQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFBmlzc3VlcgUSYW1vdW50Rm9yT3JnYW5pemVyBQdhc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCnJlY2VpdmVORlQAAQUFaWRORlQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFC2ZlZVJlY2VpdmVyBQ1hbW91bnRGb3JTaWduBQdhc3NldElkBQNuaWwJAMwIAgUIc29sZERhdGEFBmJ1eVJlcwFpAQl1c2VUaWNrZXQABA0kdDAyMTQwMzIxNDQzCQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAyMTQwMzIxNDQzAl8xBAZjYWxsZXIIBQ0kdDAyMTQwMzIxNDQzAl8yBARkYXRlCAUNJHQwMjE0MDMyMTQ0MwJfMwQNJHQwMjE0NDkyMTQ4NQkBCWlzUGF5bWVudAEFAWkEB3BheW1lbnQIBQ0kdDAyMTQ0OTIxNDg1Al8xBAZhbW91bnQIBQ0kdDAyMTQ0OTIxNDg1Al8yAwkBASEBCQEJaXNEZWZpbmVkAQgFB3BheW1lbnQHYXNzZXRJZAkAAgECFFdyb25nIGFzc2V0IGF0dGFjaGVkBAlldmVudERhdGEJAQ5nZXRTdHJpbmdCeUtleQEJAKwCAgIEbmZ0XwkA2AQBCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkAwkAAAIJALECAQUJZXZlbnREYXRhAAAJAAIBAhRTb21ldGhpbmcgd2VudCB3cm9uZwQMZXZlbnREYXRhQXJyCQC1CQIFCWV2ZW50RGF0YQIBXwQGaXNzdWVyCQCRAwIFDGV2ZW50RGF0YUFycgAHBAdldmVudElkCQCRAwIFDGV2ZW50RGF0YUFycgAGBAh0aWNrZXRJZAkAkQMCBQxldmVudERhdGFBcnIABQMJAQEhAQkBC3RpY2tldEV4aXN0AwUGaXNzdWVyBQdldmVudElkBQh0aWNrZXRJZAkAAgECEFRpY2tldCBub3QgZm91bmQECmFtb3VudFVzZWQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQETa2V5VGlja2V0QW1vdW50VXNlZAQFBmlzc3VlcgUHZXZlbnRJZAUIdGlja2V0SWQJANgEAQkBBXZhbHVlAQgFB3BheW1lbnQHYXNzZXRJZAQMbWF4VXNpbmdUaW1lCQEPZ2V0SW50ZWdlckJ5S2V5AQkBD2tleVRpY2tldE1heFVzZQMFBmlzc3VlcgUHZXZlbnRJZAUIdGlja2V0SWQDCQAAAgUMbWF4VXNpbmdUaW1lBQphbW91bnRVc2VkCQACAQkArAICCQCsAgICDFRpY2tldCB1c2VkIAkApAMBBQphbW91bnRVc2VkAg4gdGltZXMgYWxyZWFkeQQLaW5pdFVzZURhdGEJAQ5nZXRTdHJpbmdCeUtleQEJARRrZXlUaWNrZXRIaXN0b3J5VXNlZAUFBmlzc3VlcgUHZXZlbnRJZAUIdGlja2V0SWQJANgEAQkBBXZhbHVlAQgFB3BheW1lbnQHYXNzZXRJZAIBMQQMZmlyc3RVc2VBZGRyAwMDCQBmAgUMbWF4VXNpbmdUaW1lAAEJAGcCBQphbW91bnRVc2VkAAEHCQECIT0CBQtpbml0VXNlRGF0YQIABwkAkQMCCQC1CQIFC2luaXRVc2VEYXRhAgFfAAEFBmNhbGxlcgMJAQIhPQIFDGZpcnN0VXNlQWRkcgUGY2FsbGVyCQACAQItWW91IGFyZSBub3QgdGhlIGluaXRpYWwgdXNlciBvZiB0aGlzIHRpY2tldC4gCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQETa2V5VGlja2V0QW1vdW50VXNlZAQFBmlzc3VlcgUHZXZlbnRJZAUIdGlja2V0SWQJANgEAQkBBXZhbHVlAQgFB3BheW1lbnQHYXNzZXRJZAkAZAIFCmFtb3VudFVzZWQAAQkAzAgCCQELU3RyaW5nRW50cnkCCQEUa2V5VGlja2V0SGlzdG9yeVVzZWQFBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkCQDYBAEJAQV2YWx1ZQEIBQdwYXltZW50B2Fzc2V0SWQJAKQDAQkAZAIFCmFtb3VudFVzZWQAAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUCaWQCAV8FBmNhbGxlcgIBXwkApAMBBQRkYXRlAgFfCQCkAwEJAGQCBQphbW91bnRVc2VkAAEJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFBmNhbGxlcgABCAUHcGF5bWVudAdhc3NldElkBQNuaWwBaQELZGVsZXRlRW50cnkBBWVudHJ5BAZjYWxsZXIJAKUIAQgFAWkGY2FsbGVyAwkAAAIFBmNhbGxlcgUFY2hyaXMJAMwIAgkBC0RlbGV0ZUVudHJ5AQUFZW50cnkFA25pbAkAAgECAm5vAMGBRwE=", "height": 2427687, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3XnnHeREGbmunZGQWgmqroBHdCKQbLquQc7PgHvqWun3 Next: none Diff:
OldNewDifferences
252252
253253 @Callable(i)
254254 func addEvent (name,description,tags,cidDisplay,crawler,date) = {
255- let $t083788427 = idCallerDate(i)
256- let eventId = $t083788427._1
257- let caller = $t083788427._2
258- let addedDate = $t083788427._3
255+ let $t083788428 = idCallerDate(i)
256+ let eventId = $t083788428._1
257+ let caller = $t083788428._2
258+ let addedDate = $t083788428._3
259259 let checkUser = validateUser(caller)
260260 if ((checkUser != ""))
261261 then throw(checkUser)
299299
300300 @Callable(i)
301301 func deleteEvent (eventId) = {
302- let $t01071910763 = idCallerDate(i)
303- let id = $t01071910763._1
304- let caller = $t01071910763._2
305- let addedDate = $t01071910763._3
302+ let $t01072810773 = idCallerDate(i)
303+ let id = $t01072810773._1
304+ let caller = $t01072810773._2
305+ let addedDate = $t01072810773._3
306306 let checkUser = validateUser(caller)
307307 if ((checkUser != ""))
308308 then throw(checkUser)
316316 let totalTicketTypeForEvent = getIntegerByKey(keyEventTotalTicketTypes(caller, eventId))
317317 if ((totalTicketTypeForEvent > 0))
318318 then throw("Delete all tickets first")
319- 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))]
319+ 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)), DeleteEntry(keyEventCanceledReason(caller, eventId))]
320320 }
321321 }
322322 }
325325
326326 @Callable(i)
327327 func cancelEvent (eventId,reason) = {
328- let $t01210412148 = idCallerDate(i)
329- let id = $t01210412148._1
330- let caller = $t01210412148._2
331- let addedDate = $t01210412148._3
328+ let $t01217612221 = idCallerDate(i)
329+ let id = $t01217612221._1
330+ let caller = $t01217612221._2
331+ let addedDate = $t01217612221._3
332332 let checkUser = validateUser(caller)
333333 if ((checkUser != ""))
334334 then throw(checkUser)
341341
342342 @Callable(i)
343343 func flagEvent (eventId,addr,flag,note) = {
344- let $t01258312616 = idCallerDate(i)
345- let id = $t01258312616._1
346- let caller = $t01258312616._2
344+ let $t01265612690 = idCallerDate(i)
345+ let id = $t01265612690._1
346+ let caller = $t01265612690._2
347347 if (containsElement([chris, toString(this)], caller))
348348 then if (containsElement(["", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
349349 then [StringEntry(keyEventFlag(addr, eventId), flag), StringEntry(keyEventNote(addr, eventId), note)]
355355
356356 @Callable(i)
357357 func addTicket (eventId,name,description,price,maxAvailable,MaxUse,Royalties,resellLimitation) = {
358- let $t01315613196 = idCallerDate(i)
359- let id = $t01315613196._1
360- let caller = $t01315613196._2
361- let date = $t01315613196._3
358+ let $t01323013270 = idCallerDate(i)
359+ let id = $t01323013270._1
360+ let caller = $t01323013270._2
361+ let date = $t01323013270._3
362362 let checkUser = validateUser(caller)
363363 if ((checkUser != ""))
364364 then throw(checkUser)
381381
382382 @Callable(i)
383383 func editTicket (ticketId,eventId,name,description,price,maxAvailable,maxUse,Royalties,resellLimitation) = {
384- let $t01492014960 = idCallerDate(i)
385- let id = $t01492014960._1
386- let caller = $t01492014960._2
387- let date = $t01492014960._3
384+ let $t01499415034 = idCallerDate(i)
385+ let id = $t01499415034._1
386+ let caller = $t01499415034._2
387+ let date = $t01499415034._3
388388 let checkUser = validateUser(caller)
389389 if ((checkUser != ""))
390390 then throw(checkUser)
409409
410410 @Callable(i)
411411 func pauseTicketSale (eventId,ticketId,status) = {
412- let $t01629116331 = idCallerDate(i)
413- let id = $t01629116331._1
414- let caller = $t01629116331._2
415- let date = $t01629116331._3
412+ let $t01636516405 = idCallerDate(i)
413+ let id = $t01636516405._1
414+ let caller = $t01636516405._2
415+ let date = $t01636516405._3
416416 let checkUser = validateUser(caller)
417417 if ((checkUser != ""))
418418 then throw(checkUser)
427427
428428 @Callable(i)
429429 func deleteTicket (ticketId,eventId) = {
430- let $t01679416834 = idCallerDate(i)
431- let id = $t01679416834._1
432- let caller = $t01679416834._2
433- let date = $t01679416834._3
430+ let $t01686816908 = idCallerDate(i)
431+ let id = $t01686816908._1
432+ let caller = $t01686816908._2
433+ let date = $t01686816908._3
434434 let checkUser = validateUser(caller)
435435 if ((checkUser != ""))
436436 then throw(checkUser)
453453
454454 @Callable(i)
455455 func buyTicket (ticketId,eventId,issuer) = {
456- let $t01820218240 = idCallerDate(i)
457- let id = $t01820218240._1
458- let caller = $t01820218240._2
459- let date = $t01820218240._3
456+ let $t01827618316 = idCallerDate(i)
457+ let id = $t01827618316._1
458+ let caller = $t01827618316._2
459+ let date = $t01827618316._3
460460 let totalNFT = valueOrElse(getIntegerByKey("total_tickets_issued"), 0)
461461 if (!(isEventOwner(eventId, issuer)))
462462 then throw("Event ID and Issuer don't match")
476476 let amountSold = getIntegerByKey(keyTicketTotalIssued(issuer, eventId, ticketId))
477477 let ticketPrice = getIntegerByKey(keyTicketPrice(issuer, eventId, ticketId))
478478 let priceAssetId = toBase58String(signAssetId)
479- let $t01909319167 = validatePriceAssetId(i, priceAssetId, ticketPrice)
480- let amount = $t01909319167._1
481- let assetId = $t01909319167._2
479+ let $t01916919243 = validatePriceAssetId(i, priceAssetId, ticketPrice)
480+ let amount = $t01916919243._1
481+ let assetId = $t01916919243._2
482482 let maxCanSell = getIntegerByKey(keyTicketMaxAvailable(issuer, eventId, ticketId))
483483 let amountForSign = fraction(amount, signCut, 100)
484484 let amountForOrganizer = (amount - amountForSign)
514514
515515 @Callable(i)
516516 func useTicket () = {
517- let $t02132721365 = idCallerDate(i)
518- let id = $t02132721365._1
519- let caller = $t02132721365._2
520- let date = $t02132721365._3
521- let $t02137121407 = isPayment(i)
522- let payment = $t02137121407._1
523- let amount = $t02137121407._2
517+ let $t02140321443 = idCallerDate(i)
518+ let id = $t02140321443._1
519+ let caller = $t02140321443._2
520+ let date = $t02140321443._3
521+ let $t02144921485 = isPayment(i)
522+ let payment = $t02144921485._1
523+ let amount = $t02144921485._2
524524 if (!(isDefined(payment.assetId)))
525525 then throw("Wrong asset attached")
526526 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 keyEventStartingPrice (caller,eventId) = ((("event_startingPrice_" + eventId) + "_") + caller)
8888
8989
9090 func keyTicketName (caller,eventId,ticketId) = ((((("ticket_name_" + eventId) + "_") + caller) + "_") + ticketId)
9191
9292
9393 func keyTicketDesc (caller,eventId,ticketId) = ((((("ticket_desc_" + eventId) + "_") + caller) + "_") + ticketId)
9494
9595
9696 func keyTicketPrice (caller,eventId,ticketId) = ((((("ticket_price_" + eventId) + "_") + caller) + "_") + ticketId)
9797
9898
9999 func keyTicketDate (caller,eventId,ticketId) = ((((("ticket_date_" + eventId) + "_") + caller) + "_") + ticketId)
100100
101101
102102 func keyTicketResellLimitation (caller,eventId,ticketId) = ((((("ticket_resellLimitation_" + eventId) + "_") + caller) + "_") + ticketId)
103103
104104
105105 func keyTicketMaxAvailable (caller,eventId,ticketId) = ((((("ticket_maxAvailable_" + eventId) + "_") + caller) + "_") + ticketId)
106106
107107
108108 func keyTicketOnSale (caller,eventId,ticketId) = ((((("ticket_onSale_" + eventId) + "_") + caller) + "_") + ticketId)
109109
110110
111111 func keyTicketAmountUsed (caller,eventId,ticketId,nftId) = ((((((("ticket_amountUsed_" + eventId) + "_") + caller) + "_") + ticketId) + "_") + nftId)
112112
113113
114114 func keyTicketHistoryUsed (caller,eventId,ticketId,nftId,usageIndex) = ((((((((("ticket_historyUsed_" + eventId) + "_") + caller) + "_") + ticketId) + "_") + nftId) + "_") + usageIndex)
115115
116116
117117 func keyTicketMaxUse (caller,eventId,ticketId) = ((((("ticket_maxUse_" + eventId) + "_") + caller) + "_") + ticketId)
118118
119119
120120 func keyTicketTotalIssued (caller,eventId,ticketId) = ((((("ticket_totalIssued_" + eventId) + "_") + caller) + "_") + ticketId)
121121
122122
123123 func keyTicketRoyalty (caller,eventId,ticketId) = ((((("ticket_royalties_" + eventId) + "_") + caller) + "_") + ticketId)
124124
125125
126126 func validateString (str,max) = if ((size(str) == 0))
127127 then throw("Field cannot be is empty")
128128 else if ((size(str) > max))
129129 then throw((str + " is too long"))
130130 else true
131131
132132
133133 func validateInt (num) = (0 > num)
134134
135135
136136 func getEventOwnerByEventId (eventId) = valueOrElse(getString(this, keyEventOwnerByEventId(eventId)), "")
137137
138138
139139 func validateUser (caller) = {
140140 let userStatus = valueOrElse(getString(userDapp, keyUserStatus(caller)), userUnregistered)
141141 if ((userStatus == userUnregistered))
142142 then "Register this account first with \"Account\" tab"
143143 else if ((userStatus == userSuspended))
144144 then "Account suspended"
145145 else ""
146146 }
147147
148148
149149 func validateEventData (caller,cidDisplay,name,description,tags,date) = {
150150 let checkUser = validateUser(caller)
151151 if ((checkUser != ""))
152152 then throw(checkUser)
153153 else if ((size(cidDisplay) == 0))
154154 then throw("Display CID cannot be empty")
155155 else if (!(validateCID(cidDisplay)))
156156 then throw("Problem with CID")
157157 else if (!(validateString(name, 300)))
158158 then throw("300 Char. max name")
159159 else if (!(validateString(description, 3000)))
160160 then throw("3000 Char. max description")
161161 else if (!(validateString(date, 1000)))
162162 then throw("1000 Char. max date")
163163 else if ((size(split(tags, ",")) > 5))
164164 then throw("5 tags max.")
165165 else ""
166166 }
167167
168168
169169 func validateTicketData (eventId,caller,name,description,price,maxAvailable,maxUse,resellLimitation) = {
170170 let checkUser = validateUser(caller)
171171 if ((checkUser != ""))
172172 then throw(checkUser)
173173 else if (!(validateString(name, 200)))
174174 then throw("100 Char. max name")
175175 else if (!(validateString(description, 1000)))
176176 then throw("1000 Char. max description")
177177 else if (if (if (if (validateInt(price))
178178 then true
179179 else validateInt(maxUse))
180180 then true
181181 else validateInt(maxAvailable))
182182 then true
183183 else validateInt(resellLimitation))
184184 then throw("Positive amount only")
185185 else if (!(validateString(description, 1000)))
186186 then throw("1000 Char. max description")
187187 else ""
188188 }
189189
190190
191191 func idCallerDate (i) = if (!(dappRunning))
192192 then throw(maintenanceMSG)
193193 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
194194
195195
196196 func isPayment (i) = if ((size(i.payments) == 0))
197197 then throw("No payment attached")
198198 else {
199199 let payment = value(i.payments[0])
200200 let amount = value(payment.amount)
201201 $Tuple2(payment, amount)
202202 }
203203
204204
205205 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
206206 let $t070137049 = isPayment(i)
207207 let payment = $t070137049._1
208208 let amount = $t070137049._2
209209 if (!(isDefined(payment.assetId)))
210210 then throw("Wrong asset attached")
211211 else {
212212 let assetId = if (if ((size(priceAssetId) > 0))
213213 then (toBase58String(value(payment.assetId)) == priceAssetId)
214214 else false)
215215 then payment.assetId
216216 else throw("Wrong asset attached")
217217 if ((artworkPrice != amount))
218218 then throw("Payment amount don't match")
219219 else $Tuple2(amount, assetId)
220220 }
221221 }
222222
223223
224224 func isEventOwner (eventId,caller) = {
225225 let eventOwner = getEventOwnerByEventId(eventId)
226226 if ((eventOwner == ""))
227227 then throw("Event not found")
228228 else (eventOwner == caller)
229229 }
230230
231231
232232 func ticketExist (caller,eventId,ticketId) = {
233233 let ticket = getStringByKey(keyTicketName(caller, eventId, ticketId))
234234 (size(ticket) != 0)
235235 }
236236
237237
238238 func eventIsCanceled (issuer,eventId) = getBooleanByKey(keyEventCanceled(issuer, eventId))
239239
240240
241241 @Callable(invoke)
242242 func setConf (key,val) = {
243243 let caller = toString(invoke.caller)
244244 if (containsElement([chris, toString(this)], caller))
245245 then if (contains(key, "conf_"))
246246 then [StringEntry(key, val)]
247247 else throw("Entries starting with conf_ only")
248248 else throw("You are not allowed to change this")
249249 }
250250
251251
252252
253253 @Callable(i)
254254 func addEvent (name,description,tags,cidDisplay,crawler,date) = {
255- let $t083788427 = idCallerDate(i)
256- let eventId = $t083788427._1
257- let caller = $t083788427._2
258- let addedDate = $t083788427._3
255+ let $t083788428 = idCallerDate(i)
256+ let eventId = $t083788428._1
257+ let caller = $t083788428._2
258+ let addedDate = $t083788428._3
259259 let checkUser = validateUser(caller)
260260 if ((checkUser != ""))
261261 then throw(checkUser)
262262 else {
263263 let validateEvent = validateEventData(caller, cidDisplay, name, description, tags, date)
264264 if ((validateEvent != ""))
265265 then throw("Something went wrong!")
266266 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)]
267267 }
268268 }
269269
270270
271271
272272 @Callable(i)
273273 func editEvent (eventId,name,description,tags,cidDisplay,crawler,date) = if (!(dappRunning))
274274 then throw(maintenanceMSG)
275275 else {
276276 let caller = toBase58String(i.caller.bytes)
277277 let checkUser = validateUser(caller)
278278 if ((checkUser != ""))
279279 then throw(checkUser)
280280 else {
281281 let validateEvent = validateEventData(caller, cidDisplay, name, description, tags, date)
282282 if ((validateEvent != ""))
283283 then throw("Something went wrong!")
284284 else {
285285 let entryExist = getStringByKey(keyEventName(caller, eventId))
286286 if ((entryExist == ""))
287287 then throw("Entry not found")
288288 else {
289289 let flag = getStringByKey(keyEventFlag(caller, eventId))
290290 if ((flag == "ILLEGAL"))
291291 then throw("Cannot update ILLEGAL Event")
292292 else [StringEntry(keyEventName(caller, eventId), name), StringEntry(keyEventDate(caller, eventId), date), StringEntry(keyEventDesc(caller, eventId), description), StringEntry(keyEventTags(caller, eventId), tags), StringEntry(keyEventDisplayCid(caller, eventId), cidDisplay), StringEntry(keyEventCrawler(caller, eventId), crawler)]
293293 }
294294 }
295295 }
296296 }
297297
298298
299299
300300 @Callable(i)
301301 func deleteEvent (eventId) = {
302- let $t01071910763 = idCallerDate(i)
303- let id = $t01071910763._1
304- let caller = $t01071910763._2
305- let addedDate = $t01071910763._3
302+ let $t01072810773 = idCallerDate(i)
303+ let id = $t01072810773._1
304+ let caller = $t01072810773._2
305+ let addedDate = $t01072810773._3
306306 let checkUser = validateUser(caller)
307307 if ((checkUser != ""))
308308 then throw(checkUser)
309309 else if (!(isEventOwner(eventId, caller)))
310310 then throw("You are not the owner of this event")
311311 else {
312312 let eventTotalNFT = getIntegerByKey(keyEventTotalTicketsIssued(caller, eventId))
313313 if ((eventTotalNFT != 0))
314314 then throw("Cannot delete event with already sold tickets")
315315 else {
316316 let totalTicketTypeForEvent = getIntegerByKey(keyEventTotalTicketTypes(caller, eventId))
317317 if ((totalTicketTypeForEvent > 0))
318318 then throw("Delete all tickets first")
319- 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))]
319+ 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)), DeleteEntry(keyEventCanceledReason(caller, eventId))]
320320 }
321321 }
322322 }
323323
324324
325325
326326 @Callable(i)
327327 func cancelEvent (eventId,reason) = {
328- let $t01210412148 = idCallerDate(i)
329- let id = $t01210412148._1
330- let caller = $t01210412148._2
331- let addedDate = $t01210412148._3
328+ let $t01217612221 = idCallerDate(i)
329+ let id = $t01217612221._1
330+ let caller = $t01217612221._2
331+ let addedDate = $t01217612221._3
332332 let checkUser = validateUser(caller)
333333 if ((checkUser != ""))
334334 then throw(checkUser)
335335 else if (!(isEventOwner(eventId, caller)))
336336 then throw("You are not the owner of this event")
337337 else [BooleanEntry(keyEventCanceled(caller, eventId), true), StringEntry(keyEventCanceledReason(caller, eventId), reason)]
338338 }
339339
340340
341341
342342 @Callable(i)
343343 func flagEvent (eventId,addr,flag,note) = {
344- let $t01258312616 = idCallerDate(i)
345- let id = $t01258312616._1
346- let caller = $t01258312616._2
344+ let $t01265612690 = idCallerDate(i)
345+ let id = $t01265612690._1
346+ let caller = $t01265612690._2
347347 if (containsElement([chris, toString(this)], caller))
348348 then if (containsElement(["", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
349349 then [StringEntry(keyEventFlag(addr, eventId), flag), StringEntry(keyEventNote(addr, eventId), note)]
350350 else throw(("Unknow status " + flag))
351351 else throw("You are not allowed")
352352 }
353353
354354
355355
356356 @Callable(i)
357357 func addTicket (eventId,name,description,price,maxAvailable,MaxUse,Royalties,resellLimitation) = {
358- let $t01315613196 = idCallerDate(i)
359- let id = $t01315613196._1
360- let caller = $t01315613196._2
361- let date = $t01315613196._3
358+ let $t01323013270 = idCallerDate(i)
359+ let id = $t01323013270._1
360+ let caller = $t01323013270._2
361+ let date = $t01323013270._3
362362 let checkUser = validateUser(caller)
363363 if ((checkUser != ""))
364364 then throw(checkUser)
365365 else if (eventIsCanceled(caller, eventId))
366366 then throw("Event have been canceled")
367367 else if (!(isEventOwner(eventId, caller)))
368368 then throw("You are not the owner of this event")
369369 else {
370370 let validateTicket = validateTicketData(eventId, caller, name, description, price, maxAvailable, MaxUse, resellLimitation)
371371 if ((validateTicket != ""))
372372 then throw("Something went wrong!")
373373 else {
374374 let totalTicketTypeForEvent = getIntegerByKey(keyEventTotalTicketTypes(caller, eventId))
375375 [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), IntegerEntry(keyTicketResellLimitation(caller, eventId, id), resellLimitation)]
376376 }
377377 }
378378 }
379379
380380
381381
382382 @Callable(i)
383383 func editTicket (ticketId,eventId,name,description,price,maxAvailable,maxUse,Royalties,resellLimitation) = {
384- let $t01492014960 = idCallerDate(i)
385- let id = $t01492014960._1
386- let caller = $t01492014960._2
387- let date = $t01492014960._3
384+ let $t01499415034 = idCallerDate(i)
385+ let id = $t01499415034._1
386+ let caller = $t01499415034._2
387+ let date = $t01499415034._3
388388 let checkUser = validateUser(caller)
389389 if ((checkUser != ""))
390390 then throw(checkUser)
391391 else if (!(isEventOwner(eventId, caller)))
392392 then throw("You are not the owner of this event")
393393 else if (!(ticketExist(caller, eventId, ticketId)))
394394 then throw("Ticket not found")
395395 else {
396396 let validateTicket = validateTicketData(eventId, caller, name, description, price, maxAvailable, maxUse, resellLimitation)
397397 if ((validateTicket != ""))
398398 then throw("Something went wrong!")
399399 else {
400400 let ticketSold = valueOrElse(getInteger(keyTicketTotalIssued(caller, eventId, ticketId)), 0)
401401 if ((ticketSold > maxAvailable))
402402 then throw("Max tickets available cannot be lower than amount already sold")
403403 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, ticketId), Royalties), IntegerEntry(keyTicketResellLimitation(caller, eventId, ticketId), resellLimitation)]
404404 }
405405 }
406406 }
407407
408408
409409
410410 @Callable(i)
411411 func pauseTicketSale (eventId,ticketId,status) = {
412- let $t01629116331 = idCallerDate(i)
413- let id = $t01629116331._1
414- let caller = $t01629116331._2
415- let date = $t01629116331._3
412+ let $t01636516405 = idCallerDate(i)
413+ let id = $t01636516405._1
414+ let caller = $t01636516405._2
415+ let date = $t01636516405._3
416416 let checkUser = validateUser(caller)
417417 if ((checkUser != ""))
418418 then throw(checkUser)
419419 else if (!(isEventOwner(eventId, caller)))
420420 then throw("You are not the owner of this event")
421421 else if (!(ticketExist(caller, eventId, ticketId)))
422422 then throw("Ticket not found")
423423 else [BooleanEntry(keyTicketOnSale(caller, eventId, ticketId), status)]
424424 }
425425
426426
427427
428428 @Callable(i)
429429 func deleteTicket (ticketId,eventId) = {
430- let $t01679416834 = idCallerDate(i)
431- let id = $t01679416834._1
432- let caller = $t01679416834._2
433- let date = $t01679416834._3
430+ let $t01686816908 = idCallerDate(i)
431+ let id = $t01686816908._1
432+ let caller = $t01686816908._2
433+ let date = $t01686816908._3
434434 let checkUser = validateUser(caller)
435435 if ((checkUser != ""))
436436 then throw(checkUser)
437437 else if (!(isEventOwner(eventId, caller)))
438438 then throw("You are not the owner of this event")
439439 else if (!(ticketExist(caller, eventId, ticketId)))
440440 then throw("Ticket not found")
441441 else {
442442 let amountSold = getIntegerByKey(keyTicketTotalIssued(caller, eventId, ticketId))
443443 if ((amountSold != 0))
444444 then throw("Cannot delete ticket that sold already")
445445 else {
446446 let totalTicketTypeForEvent = getIntegerByKey(keyEventTotalTicketTypes(caller, eventId))
447447 [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)), DeleteEntry(keyTicketResellLimitation(caller, eventId, ticketId)), IntegerEntry(keyEventTotalTicketTypes(caller, eventId), (totalTicketTypeForEvent - 1))]
448448 }
449449 }
450450 }
451451
452452
453453
454454 @Callable(i)
455455 func buyTicket (ticketId,eventId,issuer) = {
456- let $t01820218240 = idCallerDate(i)
457- let id = $t01820218240._1
458- let caller = $t01820218240._2
459- let date = $t01820218240._3
456+ let $t01827618316 = idCallerDate(i)
457+ let id = $t01827618316._1
458+ let caller = $t01827618316._2
459+ let date = $t01827618316._3
460460 let totalNFT = valueOrElse(getIntegerByKey("total_tickets_issued"), 0)
461461 if (!(isEventOwner(eventId, issuer)))
462462 then throw("Event ID and Issuer don't match")
463463 else if (!(ticketExist(issuer, eventId, ticketId)))
464464 then throw("Ticket not found")
465465 else {
466466 let eventName = getStringByKey(keyEventName(issuer, eventId))
467467 if ((eventName == ""))
468468 then throw("Art doesn't exist")
469469 else if (eventIsCanceled(issuer, eventId))
470470 then throw("Event have been canceled")
471471 else {
472472 let isOnSale = getBooleanByKey(keyTicketOnSale(issuer, eventId, ticketId))
473473 if (!(isOnSale))
474474 then throw("Tickets not for sale")
475475 else {
476476 let amountSold = getIntegerByKey(keyTicketTotalIssued(issuer, eventId, ticketId))
477477 let ticketPrice = getIntegerByKey(keyTicketPrice(issuer, eventId, ticketId))
478478 let priceAssetId = toBase58String(signAssetId)
479- let $t01909319167 = validatePriceAssetId(i, priceAssetId, ticketPrice)
480- let amount = $t01909319167._1
481- let assetId = $t01909319167._2
479+ let $t01916919243 = validatePriceAssetId(i, priceAssetId, ticketPrice)
480+ let amount = $t01916919243._1
481+ let assetId = $t01916919243._2
482482 let maxCanSell = getIntegerByKey(keyTicketMaxAvailable(issuer, eventId, ticketId))
483483 let amountForSign = fraction(amount, signCut, 100)
484484 let amountForOrganizer = (amount - amountForSign)
485485 if ((amountSold == maxCanSell))
486486 then throw("Art sold out")
487487 else {
488488 let newAmountSold = (amountSold + 1)
489489 let issueMeta = ((((((((((("Organizer: " + issuer) + ",
490490 EventID: ") + eventId) + ",
491491 TicketID: ") + ticketId) + ",
492492 EventName: ") + eventName) + ",
493493 Issue: ") + toString(newAmountSold)) + "/") + toString(maxCanSell))
494494 let issueNFT = Issue(("ST_" + toString((totalNFT + 1))), issueMeta, 1, 0, false)
495495 let idNFT = calculateAssetId(issueNFT)
496496 let sellStatus = if ((newAmountSold == maxCanSell))
497497 then false
498498 else true
499499 let receiveNFT = i.caller
500500 let soldKey = ((((((((((("ticket_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + ticketId) + "_") + eventId) + "_") + issuer) + "_") + toBase58String(idNFT))
501501 let soldValue = ((((((((toString(receiveNFT) + "_") + toString(date)) + "_") + id) + "_") + toString(amount)) + "_") + toBase58String(idNFT))
502502 let soldData = StringEntry(soldKey, soldValue)
503503 let eventTotalNFT = getIntegerByKey(keyEventTotalTicketsIssued(issuer, eventId))
504504 let ticketTotalNFT = getIntegerByKey(keyTicketTotalIssued(issuer, eventId, ticketId))
505505 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)]
506506 soldData :: buyRes
507507 }
508508 }
509509 }
510510 }
511511 }
512512
513513
514514
515515 @Callable(i)
516516 func useTicket () = {
517- let $t02132721365 = idCallerDate(i)
518- let id = $t02132721365._1
519- let caller = $t02132721365._2
520- let date = $t02132721365._3
521- let $t02137121407 = isPayment(i)
522- let payment = $t02137121407._1
523- let amount = $t02137121407._2
517+ let $t02140321443 = idCallerDate(i)
518+ let id = $t02140321443._1
519+ let caller = $t02140321443._2
520+ let date = $t02140321443._3
521+ let $t02144921485 = isPayment(i)
522+ let payment = $t02144921485._1
523+ let amount = $t02144921485._2
524524 if (!(isDefined(payment.assetId)))
525525 then throw("Wrong asset attached")
526526 else {
527527 let eventData = getStringByKey(("nft_" + toBase58String(value(payment.assetId))))
528528 if ((size(eventData) == 0))
529529 then throw("Something went wrong")
530530 else {
531531 let eventDataArr = split(eventData, "_")
532532 let issuer = eventDataArr[7]
533533 let eventId = eventDataArr[6]
534534 let ticketId = eventDataArr[5]
535535 if (!(ticketExist(issuer, eventId, ticketId)))
536536 then throw("Ticket not found")
537537 else {
538538 let amountUsed = getIntegerByKey(keyTicketAmountUsed(issuer, eventId, ticketId, toBase58String(value(payment.assetId))))
539539 let maxUsingTime = getIntegerByKey(keyTicketMaxUse(issuer, eventId, ticketId))
540540 if ((maxUsingTime == amountUsed))
541541 then throw((("Ticket used " + toString(amountUsed)) + " times already"))
542542 else {
543543 let initUseData = getStringByKey(keyTicketHistoryUsed(issuer, eventId, ticketId, toBase58String(value(payment.assetId)), "1"))
544544 let firstUseAddr = if (if (if ((maxUsingTime > 1))
545545 then (amountUsed >= 1)
546546 else false)
547547 then (initUseData != "")
548548 else false)
549549 then split(initUseData, "_")[1]
550550 else caller
551551 if ((firstUseAddr != caller))
552552 then throw("You are not the initial user of this ticket. ")
553553 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)]
554554 }
555555 }
556556 }
557557 }
558558 }
559559
560560
561561
562562 @Callable(i)
563563 func deleteEntry (entry) = {
564564 let caller = toString(i.caller)
565565 if ((caller == chris))
566566 then [DeleteEntry(entry)]
567567 else throw("no")
568568 }
569569
570570

github/deemru/w8io/169f3d6 
80.52 ms