tx · 2x1A7Fhbat8D1mqPEkMks2CJitbPc9tTewpwXW2g1hgd

3Mu5kJR7ECoKqV4RjdtjBkeKaQoTgR1WBZc:  -0.02400000 Waves

2023.04.17 12:16 [2538371] smart account 3Mu5kJR7ECoKqV4RjdtjBkeKaQoTgR1WBZc > SELF 0.00000000 Waves

{ "type": 13, "id": "2x1A7Fhbat8D1mqPEkMks2CJitbPc9tTewpwXW2g1hgd", "fee": 2400000, "feeAssetId": null, "timestamp": 1681722999413, "version": 2, "chainId": 84, "sender": "3Mu5kJR7ECoKqV4RjdtjBkeKaQoTgR1WBZc", "senderPublicKey": "242mibE5dTci8wD6vghuCGxjDZdnNJr88H7gcWWehpEX", "proofs": [ "3Noa92i1HgnybGDsZBUG9evk75CL1CxP9LcwvrovVwBCcj6NXkcCD9gJXqToWfrActW3Rvfpd2r7fre2Kw8p62SZ" ], "script": "base64:BgI1CAISBwoFCAEBAQESBAoCAQESBwoFCAgBARgSBwoFCAgBARgSAwoBARIDCgEBEgASBAoCAQhcAAtyZXZpc2lvbk51bQIAAANTRVACAl9fAAdMSVNUU0VQAgE6AA1ERUZBVUxUUVVPUlVNAKDCHgAKVVJMUEFUVEVSTgIaaHR0cHM6Ly9mb3J1bS5uZXV0cmluby5hdC8ACE1BWFRJVExFAPoBAAZNQVhVUkwA+gEADU1BWFZPVElOR1RJTUUAgJDkwAQABU1VTFQ2AMCEPQAOREVGQVVMVFBBWU1FTlQAgJTr3AMAFERFRkFVTFRDUkVBVElPTkdOU0JUAICU69wDAApQQVNUTUFSR0lOAIC6twMADEZVVFVSRU1BUkdJTgDAy8kCABRERUZBVUxURklSU1RQUk9QT1NBTABvABJnb3ZJZHhQcm9wb3NhbFR4SWQAAQAKZ292SWR4VHlwZQACAAxnb3ZJZHhBdXRob3IAAwAJZ292SWR4VXJsAAQAC2dvdklkeFRpdGxlAAUAEmdvdklkeENyZWF0aW9uVGltZQAGAAtnb3ZJZHhTdGFydAAHAAlnb3ZJZHhFbmQACAALZ292SWR4VHhJZHMACQAMZ292SWR4UXVvcnVtAAoADWdvdklkeE9wdGlvbnMACwATZ292U3RhdHVzSWR4SXNWYWxpZAABABJnb3ZTdGF0dXNJZHhXaW5PcHQAAgAUZ292U3RhdHVzSWR4V2luVm90ZXMAAwAWZ292U3RhdHVzSWR4VG90YWxWb3RlcwAEABVnb3ZTdGF0dXNJZHhTY0FwcGxpZWQABQASZ292U3RhdHVzSWR4U2NUaW1lAAYAFmdvdlN0YXR1c0lkeElzQ2FuY2VsZWQABwAWZ292U3RhdHVzSWR4SW1wbFN0YXR1cwAIAQ9nZXRTdHJpbmdPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgIBLgkAzAgCBQNrZXkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAEMZ2V0SW50T3JFbHNlAgNrZXkKZGVmYXVsdFZhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkFCmRlZmF1bHRWYWwAGUlkeENvbnRyb2xDZmdOZXV0cmlub0RhcHAAAQAYSWR4Q29udHJvbENmZ0F1Y3Rpb25EYXBwAAIAFElkeENvbnRyb2xDZmdScGREYXBwAAMAFUlkeENvbnRyb2xDZmdNYXRoRGFwcAAEABxJZHhDb250cm9sQ2ZnTGlxdWlkYXRpb25EYXBwAAUAFUlkeENvbnRyb2xDZmdSZXN0RGFwcAAGAB1JZHhDb250cm9sQ2ZnTm9kZVJlZ2lzdHJ5RGFwcAAHABxJZHhDb250cm9sQ2ZnTnNidFN0YWtpbmdEYXBwAAgAGUlkeENvbnRyb2xDZmdNZWRpYXRvckRhcHAACQAcSWR4Q29udHJvbENmZ1N1cmZTdGFraW5nRGFwcAAKACBJZHhDb250cm9sQ2ZnR25zYnRDb250cm9sbGVyRGFwcAALABdJZHhDb250cm9sQ2ZnUmVzdFYyRGFwcAAMABtJZHhDb250cm9sQ2ZnR292ZXJuYW5jZURhcHAADQERa2V5Q29udHJvbEFkZHJlc3MAAhwlcyVzX19jb25maWdfX2NvbnRyb2xBZGRyZXNzAQ1rZXlDb250cm9sQ2ZnAAIRJXNfX2NvbnRyb2xDb25maWcBFHJlYWRDb250cm9sQ2ZnT3JGYWlsAQdjb250cm9sCQC8CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQdjb250cm9sCQENa2V5Q29udHJvbENmZwAFA1NFUAEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgpjb250cm9sQ2ZnA2lkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUKY29udHJvbENmZwUDaWR4CQCsAgICLUNvbnRyb2wgY2ZnIGRvZXNuJ3QgY29udGFpbiBhZGRyZXNzIGF0IGluZGV4IAkApAMBBQNpZHgAD2NvbnRyb2xDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQERa2V5Q29udHJvbEFkZHJlc3MAAiMzTjROUzdkNEpvOWE2RjE0TGlGVUtLWVZkVWtrZjJlUDRaeAAKY29udHJvbENmZwkBFHJlYWRDb250cm9sQ2ZnT3JGYWlsAQUPY29udHJvbENvbnRyYWN0ABBuZXV0cmlub0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUKY29udHJvbENmZwUZSWR4Q29udHJvbENmZ05ldXRyaW5vRGFwcAAXZ25zYnRDb250cm9sbGVyQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQpjb250cm9sQ2ZnBSBJZHhDb250cm9sQ2ZnR25zYnRDb250cm9sbGVyRGFwcAATc3VyZlN0YWtpbmdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFCmNvbnRyb2xDZmcFHElkeENvbnRyb2xDZmdTdXJmU3Rha2luZ0RhcHABFWtleUxhc3RCYXNlNThQcm9wb3NhbAACFiVzX19sYXN0QmFzZTU4UHJvcG9zYWwBGGtleVF1b3J1bVJlcXVpcmVkUGVyY2VudAEEdHlwZQkArAICAhYlcyVzX19xdW9ydW1SZXF1aXJlZF9fBQR0eXBlARJrZXlQYXltZW50UmVxdWlyZWQAAhMlc19fcGF5bWVudFJlcXVpcmVkARBrZXlHbnNidFJlcXVpcmVkAAIRJXNfX2dOc2J0UmVxdWlyZWQBEWtleUxhc3RQcm9wb3NhbElkAAIOJXNfX3Byb3Bvc2FsSWQBEmtleUZpcnN0UHJvcG9zYWxJZAACEyVzX19maXJzdFByb3Bvc2FsSWQBFGtleUxhc3RVcGRhdGVWZXJzaW9uAAIRJXNfX3VwZGF0ZVZlcnNpb24BGWtleVByb3Bvc2FsU3RhdHVzRGF0YUJ5SWQBCnByb3Bvc2FsSWQJAKwCAgIaJXMlZF9fcHJvcG9zYWxTdGF0dXNEYXRhX18JAKQDAQUKcHJvcG9zYWxJZAETa2V5UHJvcG9zYWxEYXRhQnlJZAEKcHJvcG9zYWxJZAkArAICAhQlcyVkX19wcm9wb3NhbERhdGFfXwkApAMBBQpwcm9wb3NhbElkAR1rZXlQcm9wb3NhbFZvdGVzQnlJZEFuZE9wdGlvbgIKcHJvcG9zYWxJZANvcHQJALkJAgkAzAgCAgYlcyVkJWQJAMwIAgIKdm90ZXNCeU9wdAkAzAgCCQCkAwEFCnByb3Bvc2FsSWQJAMwIAgkApAMBBQNvcHQFA25pbAUDU0VQARtrZXlQcm9wb3NhbFZvdGVzQnlJZEFuZFVzZXICCnByb3Bvc2FsSWQIdXNlckFkZHIJALkJAgkAzAgCAgYlcyVkJXMJAMwIAgILdm90ZXNCeVVzZXIJAMwIAgkApAMBBQpwcm9wb3NhbElkCQDMCAIFCHVzZXJBZGRyBQNuaWwFA1NFUAEca2V5UHJvcG9zYWxDaG9pY2VCeUlkQW5kVXNlcgIKcHJvcG9zYWxJZAh1c2VyQWRkcgkAuQkCCQDMCAICBiVzJWQlcwkAzAgCAgxvcHRpb25CeVVzZXIJAMwIAgkApAMBBQpwcm9wb3NhbElkCQDMCAIFCHVzZXJBZGRyBQNuaWwFA1NFUAESa2V5QXBwbHlJblByb2dyZXNzAAITJXNfX2FwcGx5SW5Qcm9ncmVzcwEWa2V5UHJvcG9zYWxJZEJ5VG9waWNJZAEHdG9waWNJZAkArAICAhslcyVkX19wcm9wb3NhbElkQnlUb3BpY0lkX18JAKQDAQUHdG9waWNJZAEXa2V5VXNlckduc2J0UmVsZWFzZVRpbWUBCHVzZXJBZGRyCQCsAgICGyVzJXNfdXNlckduc2J0UmVsZWFzZVRpbWVfXwUIdXNlckFkZHIBHmtleU51bVVuaXF1ZVZvdGVyc0J5UHJvcG9zYWxJZAEKcHJvcG9zYWxJZAkArAICAhElcyVkX19udW1Wb3RlcnNfXwkApAMBBQpwcm9wb3NhbElkARhrZXlTdGF0c0F2ZXJVbmlxdWVWb3RlcnMAAiAlcyVzJXNfX3N0YXRzX19hdmdfX3VuaXF1ZVZvdGVycwEWa2V5U3RhdHNBdmVyR25zYnRWb3RlZAACHiVzJXMlc19fc3RhdHNfX2F2Z19fZ25zYnRWb3RlZAEVa2V5U3RhdHNVbmlxdWVBdXRob3JzAAIaJXMlc19fc3RhdHNfX3VuaXF1ZUF1dGhvcnMBF2tleU51bVByb3Bvc2Fsc0J5QXV0aG9yAQphZGRyZXNzU3RyCQCsAgICHCVzJXNfX251bVByb3Bvc2Fsc0J5QXV0aG9yX18FCmFkZHJlc3NTdHIBD2tleUFwcGx5SGlzdG9yeQEJdGltZXN0YW1wCQCsAgICFCVzJWRfX2FwcGx5SGlzdG9yeV9fCQCkAwEFCXRpbWVzdGFtcAEJYXNBbnlMaXN0AQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACCUxpc3RbQW55XQQBbAUHJG1hdGNoMAUBbAkAAgECG2ZhaWwgdG8gY2FzdCBpbnRvIExpc3RbQW55XQEFYXNJbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIDSW50BAFpBQckbWF0Y2gwBQFpCQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQpzdGF0dXNEYXRhCA1pc1ZvdGluZ1ZhbGlkCXdpbk9wdGlvbg53aW5PcHRpb25Wb3Rlcwp0b3RhbFZvdGVzEWFyZVNjcmlwdHNBcHBsaWVkEHNjcmlwdHNUaW1lc3RhbXAOY2FuY2VsZWRCeVRlYW0KaW1wbFN0YXR1cwkAuQkCCQDMCAICECViJWQlZCVkJWIlZCViJXMJAMwIAgkApQMBBQ1pc1ZvdGluZ1ZhbGlkCQDMCAIJAKQDAQUJd2luT3B0aW9uCQDMCAIJAKQDAQUOd2luT3B0aW9uVm90ZXMJAMwIAgkApAMBBQp0b3RhbFZvdGVzCQDMCAIJAKUDAQURYXJlU2NyaXB0c0FwcGxpZWQJAMwIAgkApAMBBRBzY3JpcHRzVGltZXN0YW1wCQDMCAIJAKUDAQUOY2FuY2VsZWRCeVRlYW0JAMwIAgUKaW1wbFN0YXR1cwUDbmlsBQNTRVABDHByb3Bvc2FsRGF0YQsMcHJvcG9zYWxUeElkBHR5cGUGYXV0aG9yCWZvcnVtTGluawV0aXRsZQxwcm9wb3NhbFRpbWUPdm90aW5nU3RhcnRUaW1lDXZvdGluZ0VuZFRpbWUFdHhJZHMNcXVvcnVtSW5HbnNidAdvcHRpb25zCQC5CQIJAMwIAgIWJXMlcyVzJXMlcyVkJWQlZCVzJWQlcwkAzAgCBQxwcm9wb3NhbFR4SWQJAMwIAgUEdHlwZQkAzAgCBQZhdXRob3IJAMwIAgUJZm9ydW1MaW5rCQDMCAIFBXRpdGxlCQDMCAIJAKQDAQUMcHJvcG9zYWxUaW1lCQDMCAIJAKQDAQUPdm90aW5nU3RhcnRUaW1lCQDMCAIJAKQDAQUNdm90aW5nRW5kVGltZQkAzAgCBQV0eElkcwkAzAgCCQCkAwEFDXF1b3J1bUluR25zYnQJAMwIAgUHb3B0aW9ucwUDbmlsBQNTRVABC2NoZWNrVHhMaXN0AQZ0eExpc3QDCQBmAgkAkAMBBQZ0eExpc3QAFAkAAgEJAKwCAgIXVG9vIG1hbnkgdHJhbnNhY3Rpb25zOiAJAKQDAQkAkAMBBQZ0eExpc3QKAQhjb21iaW5lcgIDYWNjAnR4AwkBAiE9AgkAyAEBCQDZBAEFAnR4ACAJAAIBCQCsAgICDFdyb25nIHR4SWQ6IAUCdHgDCQAAAgUDYWNjAgAFAnR4CQCsAgIJAKwCAgUDYWNjBQdMSVNUU0VQBQJ0eAoAAiRsBQZ0eExpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwAgAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCGNvbWJpbmVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAC0lkeEVmZlRvdGFsAAAACklkeEVmZlVzZXIAAQERZ2V0RWZmZWN0aXZlR25zYnQBEnVzZXJBZGRyU3RyT3JFbXB0eQQDdXBkAwkBCWlzRGVmaW5lZAEJAKYIAQUSdXNlckFkZHJTdHJPckVtcHR5CQD8BwQFE3N1cmZTdGFraW5nQ29udHJhY3QCEXVwZGF0ZVZvdGluZ1Bvd2VyCQDMCAIFEnVzZXJBZGRyU3RyT3JFbXB0eQUDbmlsBQNuaWwFBHVuaXQDCQAAAgUDdXBkBQN1cGQECWduc2J0RGF0YQkBCWFzQW55TGlzdAEJAPwHBAUXZ25zYnRDb250cm9sbGVyQ29udHJhY3QCFGduc2J0SW5mb1NZU1JFQURPTkxZCQDMCAIFEnVzZXJBZGRyU3RyT3JFbXB0eQkAzAgCAAAJAMwIAgAABQNuaWwFA25pbAQIbnNidERhdGEJAQlhc0FueUxpc3QBCQCRAwIFCWduc2J0RGF0YQACBAx1c2VyRnJvbU5zYnQJAQVhc0ludAEJAJEDAgUIbnNidERhdGEAAgQNdG90YWxGcm9tTnNidAkBBWFzSW50AQkAkQMCBQhuc2J0RGF0YQADBBJ1c2VyTWF0dXJlRnJvbVN1cmYJAQVhc0ludAEJAJEDAgUJZ25zYnREYXRhAAkEE3RvdGFsTWF0dXJlRnJvbVN1cmYJAQVhc0ludAEJAJEDAgUJZ25zYnREYXRhAAYJAMwIAgkAZAIFDXRvdGFsRnJvbU5zYnQFE3RvdGFsTWF0dXJlRnJvbVN1cmYJAMwIAgkAZAIFDHVzZXJGcm9tTnNidAUSdXNlck1hdHVyZUZyb21TdXJmBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDHZhbGlkYXRlTGluawEDdXJsAwkBAiE9AgkBBXZhbHVlAQkAswkCBQN1cmwFClVSTFBBVFRFUk4AAAkAAgECC0ludmFsaWQgdXJsAwkAZgIJALECAQUDdXJsBQZNQVhVUkwJAAIBAg1VcmwgdG9vIGxvbmchBAd0b3BpY0lkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAsAICBQN1cmwJAGQCCQEFdmFsdWUBCQC3CQIFA3VybAIBLwABAg1Xcm9uZyB0b3BpY0lkBAxyZWdpc3RlcmVkSWQJAJ8IAQkBFmtleVByb3Bvc2FsSWRCeVRvcGljSWQBBQd0b3BpY0lkAwkBCWlzRGVmaW5lZAEFDHJlZ2lzdGVyZWRJZAkAAgEJAKwCAgI4Vm90aW5nIHdpdGggc3VjaCBmb3J1bSBsaW5rIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBieSBpZD0JAKQDAQkBBXZhbHVlAQUMcmVnaXN0ZXJlZElkBQd0b3BpY0lkAQ5pbml0aWF0ZVZvdGluZwsHcGF5bWVudAxwcm9wb3NhbFR4SWQEdHlwZQZhdXRob3IJZm9ydW1MaW5rBXRpdGxlD3ZvdGluZ1N0YXJ0VGltZQ12b3RpbmdFbmRUaW1lBnN0YXR1cwZ0eExpc3QLb3B0aW9uc0xpc3QDCQECIT0CCAUHcGF5bWVudAdhc3NldElkBQR1bml0CQACAQIbQWxsb3dlZCBXQVZFUyBwYXltZW50IG9ubHkhBAZwbXRSZXEJAQxnZXRJbnRPckVsc2UCCQESa2V5UGF5bWVudFJlcXVpcmVkAAUOREVGQVVMVFBBWU1FTlQDCQBmAgUGcG10UmVxCAUHcGF5bWVudAZhbW91bnQJAAIBCQCsAgICJFBheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIGF0IGxlYXN0IAkApAMBBQZwbXRSZXEEB3RvcGljSWQJAQx2YWxpZGF0ZUxpbmsBBQlmb3J1bUxpbmsDCQAAAgUFdGl0bGUCAAkAAgECDlRpdGxlIGlzIGVtcHR5AwkAZgIJALECAQUFdGl0bGUFCE1BWFRJVExFCQACAQIOVG9vIGxvbmcgdGl0bGUEDHByb3Bvc2FsVGltZQgFCWxhc3RCbG9jawl0aW1lc3RhbXADCQBmAgUMcHJvcG9zYWxUaW1lBQ92b3RpbmdTdGFydFRpbWUJAAIBCQCsAgIJAKwCAgkArAICAhB2b3RpbmdTdGFydFRpbWU9CQCkAwEFD3ZvdGluZ1N0YXJ0VGltZQIQIDwgcHJvcG9zYWxUaW1lPQkApAMBBQxwcm9wb3NhbFRpbWUDCQBmAgUPdm90aW5nU3RhcnRUaW1lBQ12b3RpbmdFbmRUaW1lCQACAQkArAICCQCsAgIJAKwCAgIOdm90aW5nRW5kVGltZT0JAKQDAQUNdm90aW5nRW5kVGltZQITIDwgdm90aW5nU3RhcnRUaW1lPQkApAMBBQ92b3RpbmdTdGFydFRpbWUDCQBmAgkAZQIFDXZvdGluZ0VuZFRpbWUFD3ZvdGluZ1N0YXJ0VGltZQUNTUFYVk9USU5HVElNRQkAAgEJAKwCAgkArAICCQCsAgICG1ZvdGluZyBwZXJpb2QgZXhjZWVkcyBtYXg6IAkApAMBCQBlAgUNdm90aW5nRW5kVGltZQUPdm90aW5nU3RhcnRUaW1lAgMgPiAJAKQDAQUNTUFYVk9USU5HVElNRQQFdHhJZHMDCQAAAgUEdHlwZQIESURFQQIACQELY2hlY2tUeExpc3QBBQZ0eExpc3QDCQBnAgABCQCQAwEFC29wdGlvbnNMaXN0CQACAQIXVG9vIGZldyBjaG9pY2VzIHRvIHZvdGUEA2VmZgkBEWdldEVmZmVjdGl2ZUduc2J0AQUGYXV0aG9yBApnbnNidFRvdGFsCQCRAwIFA2VmZgULSWR4RWZmVG90YWwECWdOc2J0VXNlcgkAkQMCBQNlZmYFCklkeEVmZlVzZXIECGduc2J0UmVxCQEMZ2V0SW50T3JFbHNlAgkBEGtleUduc2J0UmVxdWlyZWQABRRERUZBVUxUQ1JFQVRJT05HTlNCVAMJAGYCBQhnbnNidFJlcQUJZ05zYnRVc2VyCQACAQkArAICCQCsAgICEllvdSBuZWVkIGF0IGxlYXN0IAkApAMBBQhnbnNidFJlcQIXIGdOc2J0IHRvIGNyZWF0ZSB2b3RpbmcEDGFtb3VudExlYXNlZAkA/AcEBRBuZXV0cmlub0NvbnRyYWN0AgthY2NlcHRXYXZlcwUDbmlsCQDMCAIFB3BheW1lbnQFA25pbAMJAAACBQxhbW91bnRMZWFzZWQFDGFtb3VudExlYXNlZAQGcXVvcnVtCQEMZ2V0SW50T3JFbHNlAgkBGGtleVF1b3J1bVJlcXVpcmVkUGVyY2VudAEFBHR5cGUFDURFRkFVTFRRVU9SVU0EDXF1b3J1bUluR25zYnQJAGsDBQZxdW9ydW0FCmduc2J0VG90YWwFBU1VTFQ2BApwcm9wb3NhbElkCQBkAgkBDGdldEludE9yRWxzZQIJARFrZXlMYXN0UHJvcG9zYWxJZAAAAAABBBRudW1Qcm9wb3NhbHNCeUF1dGhvcgkAZAIJAQxnZXRJbnRPckVsc2UCCQEXa2V5TnVtUHJvcG9zYWxzQnlBdXRob3IBBQZhdXRob3IAAAABBAt1bmlxQXV0aG9ycwkAZAIJAQxnZXRJbnRPckVsc2UCCQEVa2V5U3RhdHNVbmlxdWVBdXRob3JzAAAAAwkAAAIFFG51bVByb3Bvc2Fsc0J5QXV0aG9yAAEAAQAABApvcHRpb25zU3RyCQC5CQIFC29wdGlvbnNMaXN0BQdMSVNUU0VQBBJsYXN0QmFzZTU4UHJvcG9zYWwJAJ8IAQkBFWtleUxhc3RCYXNlNThQcm9wb3NhbAAEGm9wdGlvbmFsbGFzdEJhc2U1OFByb3Bvc2FsAwkBAiE9AgUSbGFzdEJhc2U1OFByb3Bvc2FsBQR1bml0BQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIJARVrZXlMYXN0QmFzZTU4UHJvcG9zYWwACQBlAgUKcHJvcG9zYWxJZAABBQNuaWwJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQERa2V5TGFzdFByb3Bvc2FsSWQABQpwcm9wb3NhbElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5UHJvcG9zYWxJZEJ5VG9waWNJZAEFB3RvcGljSWQFCnByb3Bvc2FsSWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBGWtleVByb3Bvc2FsU3RhdHVzRGF0YUJ5SWQBBQpwcm9wb3NhbElkCQEKc3RhdHVzRGF0YQgHAAAAAAAABwUNdm90aW5nRW5kVGltZQcCBkFDVElWRQkAzAgCCQELU3RyaW5nRW50cnkCCQETa2V5UHJvcG9zYWxEYXRhQnlJZAEFCnByb3Bvc2FsSWQJAQxwcm9wb3NhbERhdGELBQxwcm9wb3NhbFR4SWQFBHR5cGUFBmF1dGhvcgkA3AQBCQCbAwEFCWZvcnVtTGluawkA3AQBCQCbAwEFBXRpdGxlBQxwcm9wb3NhbFRpbWUFD3ZvdGluZ1N0YXJ0VGltZQUNdm90aW5nRW5kVGltZQUFdHhJZHMFDXF1b3J1bUluR25zYnQFCm9wdGlvbnNTdHIJAMwIAgkBDEludGVnZXJFbnRyeQIJARdrZXlOdW1Qcm9wb3NhbHNCeUF1dGhvcgEFBmF1dGhvcgUUbnVtUHJvcG9zYWxzQnlBdXRob3IJAMwIAgkBDEludGVnZXJFbnRyeQIJARVrZXlTdGF0c1VuaXF1ZUF1dGhvcnMABQt1bmlxQXV0aG9ycwUDbmlsBRpvcHRpb25hbGxhc3RCYXNlNThQcm9wb3NhbAUMcHJvcG9zYWxUeElkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ1jYWxjV2luT3B0aW9uBwpwcm9wb3NhbElkC29wdGlvbnNMaXN0DmlzUHJldk9wdGlvbmFsCW9sZENob2ljZRBvcHRpb25hbFRvdGFsT2xkCW5ld0Nob2ljZRNuZXdUb3RhbEJ5TmV3Q2hvaWNlCgEIZmluZEJlc3QCA2FjYwRlbGVtBANpZHgJAQV2YWx1ZQEJAM8IAgULb3B0aW9uc0xpc3QFBGVsZW0EA3ZhbAMFDmlzUHJldk9wdGlvbmFsAwkAAAIFA2lkeAUJbmV3Q2hvaWNlBRNuZXdUb3RhbEJ5TmV3Q2hvaWNlCQEMZ2V0SW50T3JFbHNlAgkBHWtleVByb3Bvc2FsVm90ZXNCeUlkQW5kT3B0aW9uAgUKcHJvcG9zYWxJZAUDaWR4AAADCQAAAgUDaWR4CQEFdmFsdWUBBQlvbGRDaG9pY2UFEG9wdGlvbmFsVG90YWxPbGQDCQAAAgUDaWR4BQluZXdDaG9pY2UFE25ld1RvdGFsQnlOZXdDaG9pY2UJAQxnZXRJbnRPckVsc2UCCQEda2V5UHJvcG9zYWxWb3Rlc0J5SWRBbmRPcHRpb24CBQpwcm9wb3NhbElkBQNpZHgAAAMJAGYCCAUDYWNjAl8yBQN2YWwFA2FjYwkAlAoCBQNpZHgFA3ZhbAoAAiRsBQtvcHRpb25zTGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCGZpbmRCZXN0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKARB1cGRhdGVTdGF0dXNEYXRhBAdvbGREYXRhB2lzVmFsaWQJbmV3V2luT3B0DW5ld1RvdGFsVm90ZXMJALkJAgkAzAgCAhAlYiVkJWQlZCViJWQlYiVzCQDMCAIJAKUDAQUHaXNWYWxpZAkAzAgCCQCkAwEIBQluZXdXaW5PcHQCXzEJAMwIAgkApAMBCAUJbmV3V2luT3B0Al8yCQDMCAIJAKQDAQUNbmV3VG90YWxWb3RlcwkAzAgCCQCRAwIFB29sZERhdGEFFWdvdlN0YXR1c0lkeFNjQXBwbGllZAkAzAgCCQCRAwIFB29sZERhdGEFEmdvdlN0YXR1c0lkeFNjVGltZQkAzAgCCQCRAwIFB29sZERhdGEFFmdvdlN0YXR1c0lkeElzQ2FuY2VsZWQJAMwIAgkAkQMCBQdvbGREYXRhBRZnb3ZTdGF0dXNJZHhJbXBsU3RhdHVzBQNuaWwFA1NFUAERc3RhdHVzQXBwbHlTY3JpcHQBB29sZERhdGEJALkJAgkAzAgCAhAlYiVkJWQlZCViJWQlYiVzCQDMCAIJAJEDAgUHb2xkRGF0YQUTZ292U3RhdHVzSWR4SXNWYWxpZAkAzAgCCQCRAwIFB29sZERhdGEFEmdvdlN0YXR1c0lkeFdpbk9wdAkAzAgCCQCRAwIFB29sZERhdGEFFGdvdlN0YXR1c0lkeFdpblZvdGVzCQDMCAIJAJEDAgUHb2xkRGF0YQUWZ292U3RhdHVzSWR4VG90YWxWb3RlcwkAzAgCAgR0cnVlCQDMCAIJAJEDAgUHb2xkRGF0YQUSZ292U3RhdHVzSWR4U2NUaW1lCQDMCAIJAJEDAgUHb2xkRGF0YQUWZ292U3RhdHVzSWR4SXNDYW5jZWxlZAkAzAgCCQCRAwIFB29sZERhdGEFFmdvdlN0YXR1c0lkeEltcGxTdGF0dXMFA25pbAUDU0VQARBFeGVjdXRpb25IaXN0b3J5BA11cGRhdGVWZXJzaW9uBXRpdGxlA3VybApwcm9wb3NhbElkBApnbnNidFRvdGFsCQCRAwIJARFnZXRFZmZlY3RpdmVHbnNidAECAAULSWR4RWZmVG90YWwEB3R1cm5vdXQAoMIeCQELU3RyaW5nRW50cnkCCQEPa2V5QXBwbHlIaXN0b3J5AQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJALkJAgkAzAgCAgwlZCVkJWQlcyVzJWQJAMwIAgkApAMBBQ11cGRhdGVWZXJzaW9uCQDMCAIJAKQDAQUKZ25zYnRUb3RhbAkAzAgCCQCkAwEFB3R1cm5vdXQJAMwIAgUFdGl0bGUJAMwIAgUDdXJsCQDMCAIJAKQDAQUKcHJvcG9zYWxJZAUDbmlsBQNTRVAIAWkBDWNvbnN0cnVjdG9yVjEFC2NvbnRyb2xBZGRyDmdOc2J0UmVxVG9Jbml0DndhdmVzUmVxVG9Jbml0EXF1b3J1bVJlcVBlcmNJZGVhE3F1b3J1bVJlcVBlcmNVcGRhdGUDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5Q29udHJvbEFkZHJlc3MABQtjb250cm9sQWRkcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEGtleUduc2J0UmVxdWlyZWQABQ5nTnNidFJlcVRvSW5pdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmtleVBheW1lbnRSZXF1aXJlZAAFDndhdmVzUmVxVG9Jbml0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEYa2V5UXVvcnVtUmVxdWlyZWRQZXJjZW50AQIESURFQQURcXVvcnVtUmVxUGVyY0lkZWEJAMwIAgkBDEludGVnZXJFbnRyeQIJARhrZXlRdW9ydW1SZXF1aXJlZFBlcmNlbnQBAgZVUERBVEUFE3F1b3J1bVJlcVBlcmNVcGRhdGUFA25pbAFpAQhjYXN0Vm90ZQIKcHJvcG9zYWxJZAZjaG9pY2UEDnVzZXJBZGRyZXNzU3RyCQClCAEIBQFpBmNhbGxlcgQLZHluYW1pY0RhdGEJALUJAgkBD2dldFN0cmluZ09yRmFpbAIFBHRoaXMJARlrZXlQcm9wb3NhbFN0YXR1c0RhdGFCeUlkAQUKcHJvcG9zYWxJZAUDU0VQAwkAAAIJAJEDAgULZHluYW1pY0RhdGEFFmdvdlN0YXR1c0lkeElzQ2FuY2VsZWQCBHRydWUJAAIBAhpWb3RpbmcgaXMgY2FuY2VsZWQgYnkgdGVhbQQIcHJvcERhdGEJALUJAgkBD2dldFN0cmluZ09yRmFpbAIFBHRoaXMJARNrZXlQcm9wb3NhbERhdGFCeUlkAQUKcHJvcG9zYWxJZAUDU0VQBAVzdGFydAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb3BEYXRhBQtnb3ZJZHhTdGFydAQDZW5kCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvcERhdGEFCWdvdklkeEVuZAQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAMJAGYCBQVzdGFydAUDbm93CQACAQIWVm90aW5nIG5vdCBzdGFydGVkIHlldAMJAGcCBQNub3cFA2VuZAkAAgECF1ZvdGluZyBhbHJlYWR5IGZpbmlzaGVkBBBhdmFpbGFibGVPcHRpb25zCQC1CQIJAJEDAgUIcHJvcERhdGEFDWdvdklkeE9wdGlvbnMFB0xJU1RTRVAECm51bU9wdGlvbnMJAJADAQUQYXZhaWxhYmxlT3B0aW9ucwMJAGcCAAEFCm51bU9wdGlvbnMJAAIBAhdUb28gZmV3IGNob2ljZXMgdG8gdm90ZQMJAGcCBQZjaG9pY2UFCm51bU9wdGlvbnMJAAIBCQCsAgICG1Vua25vd24gY2hvaWNlISBNdXN0IGJlIDAuLgkApAMBCQBlAgUKbnVtT3B0aW9ucwABBANlZmYJARFnZXRFZmZlY3RpdmVHbnNidAEFDnVzZXJBZGRyZXNzU3RyBAhnbnNidEFtdAkAkQMCBQNlZmYFCklkeEVmZlVzZXIDCQBnAgAABQhnbnNidEFtdAkAAgECEG5vIGduc2J0IHRvIHZvdGUECmduc2J0VG90YWwJAJEDAgUDZWZmBQtJZHhFZmZUb3RhbAQJb2xkQ2hvaWNlCQCfCAEJARxrZXlQcm9wb3NhbENob2ljZUJ5SWRBbmRVc2VyAgUKcHJvcG9zYWxJZAUOdXNlckFkZHJlc3NTdHIEDG9sZFVzZXJWb3RlcwMJAQEhAQkBCWlzRGVmaW5lZAEFCW9sZENob2ljZQAACQEMZ2V0SW50T3JFbHNlAgkBG2tleVByb3Bvc2FsVm90ZXNCeUlkQW5kVXNlcgIFCnByb3Bvc2FsSWQFDnVzZXJBZGRyZXNzU3RyAAAEE29sZFRvdGFsQnlPbGRDaG9pY2UDCQEJaXNEZWZpbmVkAQUJb2xkQ2hvaWNlCQEMZ2V0SW50T3JFbHNlAgkBHWtleVByb3Bvc2FsVm90ZXNCeUlkQW5kT3B0aW9uAgUKcHJvcG9zYWxJZAkBBXZhbHVlAQUJb2xkQ2hvaWNlAAAAAAQTb2xkVG90YWxCeU5ld0Nob2ljZQkBDGdldEludE9yRWxzZQIJAR1rZXlQcm9wb3NhbFZvdGVzQnlJZEFuZE9wdGlvbgIFCnByb3Bvc2FsSWQFBmNob2ljZQAABAhvbGRUb3RhbAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC2R5bmFtaWNEYXRhBRZnb3ZTdGF0dXNJZHhUb3RhbFZvdGVzBBNuZXdUb3RhbEJ5T2xkQ2hvaWNlAwkBASEBCQEJaXNEZWZpbmVkAQUJb2xkQ2hvaWNlAAAJAGQCCQBlAgUTb2xkVG90YWxCeU9sZENob2ljZQUMb2xkVXNlclZvdGVzAwkAAAIJAQV2YWx1ZQEFCW9sZENob2ljZQUGY2hvaWNlBQhnbnNidEFtdAAABBNuZXdUb3RhbEJ5TmV3Q2hvaWNlAwMJAQlpc0RlZmluZWQBBQlvbGRDaG9pY2UJAAACCQEFdmFsdWUBBQlvbGRDaG9pY2UFBmNob2ljZQcFE25ld1RvdGFsQnlPbGRDaG9pY2UJAGQCBRNvbGRUb3RhbEJ5TmV3Q2hvaWNlBQhnbnNidEFtdAQIbmV3VG90YWwJAGQCCQBlAgUIb2xkVG90YWwFDG9sZFVzZXJWb3RlcwUIZ25zYnRBbXQED2lzUXVvcnVtUmVhY2hlZAkAZwIFCG5ld1RvdGFsCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvcERhdGEFDGdvdklkeFF1b3J1bQQVbnVtVm90ZXJzQnlQcm9wb3NhbElkCQEMZ2V0SW50T3JFbHNlAgkBHmtleU51bVVuaXF1ZVZvdGVyc0J5UHJvcG9zYWxJZAEFCnByb3Bvc2FsSWQAAAQUb2xkQXZlclVuaXF1ZVZvdGVyczYJAQxnZXRJbnRPckVsc2UCCQEYa2V5U3RhdHNBdmVyVW5pcXVlVm90ZXJzAAAABAxudW1Qcm9wb3NhbHMJAGQCCQBlAgkBEUBleHRyTmF0aXZlKDEwNTUpAQkBEWtleUxhc3RQcm9wb3NhbElkAAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQESa2V5Rmlyc3RQcm9wb3NhbElkAAUUREVGQVVMVEZJUlNUUFJPUE9TQUwAAQQKdW5pcXVlRGlmZgMJAAACBQxvbGRVc2VyVm90ZXMAAAABAAAEFG5ld0F2ZXJVbmlxdWVWb3RlcnM2CQBkAgUUb2xkQXZlclVuaXF1ZVZvdGVyczYJAGsDBQp1bmlxdWVEaWZmBQVNVUxUNgUMbnVtUHJvcG9zYWxzBAxvbGRBdmVyR25zYnQJAQxnZXRJbnRPckVsc2UCCQEWa2V5U3RhdHNBdmVyR25zYnRWb3RlZAAAAAQMbmV3QXZlckduc2J0CQBkAgUMb2xkQXZlckduc2J0CQBpAgkAZQIFCGduc2J0QW10BQxvbGRVc2VyVm90ZXMFDG51bVByb3Bvc2FscwQOaXNQcmV2T3B0aW9uYWwDCQEBIQEJAQlpc0RlZmluZWQBBQlvbGRDaG9pY2UGCQAAAgkBBXZhbHVlAQUJb2xkQ2hvaWNlBQZjaG9pY2UEEG9wdGlvbmFsVG90YWxPbGQDBQ5pc1ByZXZPcHRpb25hbAUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEda2V5UHJvcG9zYWxWb3Rlc0J5SWRBbmRPcHRpb24CBQpwcm9wb3NhbElkCQEFdmFsdWUBBQlvbGRDaG9pY2UFE25ld1RvdGFsQnlPbGRDaG9pY2UFA25pbAQGd2luT3B0CQENY2FsY1dpbk9wdGlvbgcFCnByb3Bvc2FsSWQFEGF2YWlsYWJsZU9wdGlvbnMFDmlzUHJldk9wdGlvbmFsBQlvbGRDaG9pY2UFE25ld1RvdGFsQnlPbGRDaG9pY2UFBmNob2ljZQUTbmV3VG90YWxCeU5ld0Nob2ljZQQLcmVsZWFzZVRpbWUJAJYDAQkAzAgCBQNlbmQJAMwIAgkBDGdldEludE9yRWxzZQIJARdrZXlVc2VyR25zYnRSZWxlYXNlVGltZQEFDnVzZXJBZGRyZXNzU3RyAAAFA25pbAkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJARxrZXlQcm9wb3NhbENob2ljZUJ5SWRBbmRVc2VyAgUKcHJvcG9zYWxJZAUOdXNlckFkZHJlc3NTdHIFBmNob2ljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBG2tleVByb3Bvc2FsVm90ZXNCeUlkQW5kVXNlcgIFCnByb3Bvc2FsSWQFDnVzZXJBZGRyZXNzU3RyBQhnbnNidEFtdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHWtleVByb3Bvc2FsVm90ZXNCeUlkQW5kT3B0aW9uAgUKcHJvcG9zYWxJZAUGY2hvaWNlBRNuZXdUb3RhbEJ5TmV3Q2hvaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5TnVtVW5pcXVlVm90ZXJzQnlQcm9wb3NhbElkAQUKcHJvcG9zYWxJZAkAZAIFFW51bVZvdGVyc0J5UHJvcG9zYWxJZAUKdW5pcXVlRGlmZgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBF2tleVVzZXJHbnNidFJlbGVhc2VUaW1lAQUOdXNlckFkZHJlc3NTdHIFC3JlbGVhc2VUaW1lCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEYa2V5U3RhdHNBdmVyVW5pcXVlVm90ZXJzAAUUbmV3QXZlclVuaXF1ZVZvdGVyczYJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlTdGF0c0F2ZXJHbnNidFZvdGVkAAUMbmV3QXZlckduc2J0CQDMCAIJAQtTdHJpbmdFbnRyeQIJARlrZXlQcm9wb3NhbFN0YXR1c0RhdGFCeUlkAQUKcHJvcG9zYWxJZAkBEHVwZGF0ZVN0YXR1c0RhdGEEBQtkeW5hbWljRGF0YQUPaXNRdW9ydW1SZWFjaGVkBQZ3aW5PcHQFCG5ld1RvdGFsBQNuaWwFEG9wdGlvbmFsVG90YWxPbGQFBHVuaXQBaQESaW5pdGlhdGVJZGVhVm90aW5nBQlmb3J1bUxpbmsFdGl0bGUPdm90aW5nU3RhcnRUaW1lDXZvdGluZ0VuZFRpbWULb3B0aW9uc0xpc3QDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkAwkBAiE9AgkAkAMBBQtvcHRpb25zTGlzdAACCQACAQIrRXhhY3RseSAyIG9wdGlvbiBbJ05PJywgJ1lFUyddIGFyZSBleHBlY3RlZAMJAQIhPQIJAJEDAgULb3B0aW9uc0xpc3QAAAICTk8JAAIBAh1PcHRpb24gTk8gc2hvdWxkIGJlIHRoZSBmaXJzdAMJAQIhPQIJAJEDAgULb3B0aW9uc0xpc3QAAQIDWUVTCQACAQIfT3B0aW9uIFlFUyBzaG91bGQgYmUgdGhlIHNlY29uZAkBDmluaXRpYXRlVm90aW5nCwkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAACQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQCBElERUEJAKUIAQgFAWkGY2FsbGVyBQlmb3J1bUxpbmsFBXRpdGxlBQ92b3RpbmdTdGFydFRpbWUFDXZvdGluZ0VuZFRpbWUCB1BFTkRJTkcFA25pbAULb3B0aW9uc0xpc3QBaQEUaW5pdGlhdGVVcGRhdGVWb3RpbmcFCWZvcnVtTGluawV0aXRsZQ92b3RpbmdTdGFydFRpbWUNdm90aW5nRW5kVGltZQZ0eExpc3QDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkAwkAZgIAAQkAkAMBBQZ0eExpc3QJAAIBAhpUcmFuc2FjdGlvbnMgbGlzdCBpcyBlbXB0eQMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECDm5vdCBhdXRob3JpemVkCQEOaW5pdGlhdGVWb3RpbmcLCQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAIGVVBEQVRFCQClCAEIBQFpBmNhbGxlcgUJZm9ydW1MaW5rBQV0aXRsZQUPdm90aW5nU3RhcnRUaW1lBQ12b3RpbmdFbmRUaW1lAgdQRU5ESU5HBQZ0eExpc3QJAMwIAgICTk8JAMwIAgIDWUVTBQNuaWwBaQEMY2FuY2VsVm90aW5nAQpwcm9wb3NhbElkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIObm90IGF1dGhvcml6ZWQEC2N1cnJlbnREYXRhCQEPZ2V0U3RyaW5nT3JGYWlsAgUEdGhpcwkBGWtleVByb3Bvc2FsU3RhdHVzRGF0YUJ5SWQBBQpwcm9wb3NhbElkBAt1cGRhdGVkRGF0YQkArAICCQCsAgIJAK8CAgULY3VycmVudERhdGEJAQV2YWx1ZQEJALcJAgULY3VycmVudERhdGEFA1NFUAUDU0VQAgR0cnVlCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBGWtleVByb3Bvc2FsU3RhdHVzRGF0YUJ5SWQBBQpwcm9wb3NhbElkBQt1cGRhdGVkRGF0YQUDbmlsBQR1bml0AWkBC2FwcGx5VXBkYXRlAQpwcm9wb3NhbElkBAhwcm9wRGF0YQkAtQkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUEdGhpcwkBE2tleVByb3Bvc2FsRGF0YUJ5SWQBBQpwcm9wb3NhbElkBQNTRVAEA2VuZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb3BEYXRhBQlnb3ZJZHhFbmQEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXADCQBmAgUDZW5kBQNub3cJAAIBAhpWb3RpbmcgaXMgbm90IGZpbmlzaGVkIHlldAMJAQIhPQICBlVQREFURQkAkQMCBQhwcm9wRGF0YQUKZ292SWR4VHlwZQkAAgECH09ubHkgVVBEQVRFIHR5cGUgY2FuIGJlIGFwcGxpZWQEC2R5bmFtaWNEYXRhCQC1CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQR0aGlzCQEZa2V5UHJvcG9zYWxTdGF0dXNEYXRhQnlJZAEFCnByb3Bvc2FsSWQFA1NFUAMJAAACCQCRAwIFC2R5bmFtaWNEYXRhBRZnb3ZTdGF0dXNJZHhJc0NhbmNlbGVkAgR0cnVlCQACAQISVm90aW5nIGlzIGNhbmNlbGVkAwkBAiE9AgkAkQMCBQtkeW5hbWljRGF0YQUTZ292U3RhdHVzSWR4SXNWYWxpZAIEdHJ1ZQkAAgECFVZvdGluZyBzdGF0dXMgaW52YWxpZAMJAQIhPQIJAJEDAgULZHluYW1pY0RhdGEFEmdvdlN0YXR1c0lkeFdpbk9wdAIBMQkAAgECIVdpbm5lciBpcyAnTk8nIC0gbm90aGluZyB0byBhcHBseQMJAAACCQCRAwIFC2R5bmFtaWNEYXRhBRVnb3ZTdGF0dXNJZHhTY0FwcGxpZWQCBHRydWUJAAIBAhtTY3JpcHRzIGFyZSBhbHJlYWR5IGFwcGxpZWQECnNjcmlwdFRpbWUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtkeW5hbWljRGF0YQUSZ292U3RhdHVzSWR4U2NUaW1lAwkAZgIJAGUCBQNub3cFClBBU1RNQVJHSU4FCnNjcmlwdFRpbWUJAAIBCQCsAgIJAKwCAgISU2NyaXB0cyB0aW1lc3RhbXA9CQCkAwEFCnNjcmlwdFRpbWUCKiBpcyB0b28gZmFyIGluIHRoZSBwYXN0LCBtYXggMiBocnMgYWxsb3dlZAMJAGYCBQpzY3JpcHRUaW1lCQBkAgUDbm93BQxGVVRVUkVNQVJHSU4JAAIBCQCsAgIJAKwCAgISU2NyaXB0cyB0aW1lc3RhbXA9CQCkAwEFCnNjcmlwdFRpbWUCLiBpcyB0b28gZmFyIGluIHRoZSBmdXR1cmUsIG1heCAxLjUgaHJzIGFsbG93ZWQEDGluUHJvZ3Jlc3NJZAkBDGdldEludE9yRWxzZQIJARJrZXlBcHBseUluUHJvZ3Jlc3MAAP///////////wEDCQECIT0CBQxpblByb2dyZXNzSWQA////////////AQkAAgEJAKwCAgkArAICAgtwcm9wb3NhbElkPQkApAMBBQxpblByb2dyZXNzSWQCKyBpcyBhbHJlYWR5IGJlaW5nIGFwcGxpZWQuIEZpbmlzaCBpdCBmaXJzdCEECHNodXRkb3duCQD8BwQFD2NvbnRyb2xDb250cmFjdAIVY2FsbEVtZXJnZW5jeVNodXRkb3duCQDMCAICGkFwcGx5aW5nIEdvdmVybmFuY2UgVVBEQVRFBQNuaWwFA25pbAMJAAACBQhzaHV0ZG93bgUIc2h1dGRvd24JAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmtleUFwcGx5SW5Qcm9ncmVzcwAFCnByb3Bvc2FsSWQFA25pbAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQtmaW5pc2hBcHBseQAECnByb3Bvc2FsSWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBCQESa2V5QXBwbHlJblByb2dyZXNzAAInTm8gYXBwbHkgaW4gcHJvZ3Jlc3MsIG5vdGhpbmcgdG8gZmluaXNoBAhwcm9wRGF0YQkAtQkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUEdGhpcwkBE2tleVByb3Bvc2FsRGF0YUJ5SWQBBQpwcm9wb3NhbElkBQNTRVAEBnR4TGlzdAkAtQkCCQCRAwIFCHByb3BEYXRhBQtnb3ZJZHhUeElkcwUHTElTVFNFUAQLZHluYW1pY0RhdGEJALUJAgkBD2dldFN0cmluZ09yRmFpbAIFBHRoaXMJARlrZXlQcm9wb3NhbFN0YXR1c0RhdGFCeUlkAQUKcHJvcG9zYWxJZAUDU0VQAwkAAAIJAJEDAgULZHluYW1pY0RhdGEFFWdvdlN0YXR1c0lkeFNjQXBwbGllZAIEdHJ1ZQkAAgECG1NjcmlwdHMgYXJlIGFscmVhZHkgYXBwbGllZAoBB2NoZWNrZXICA2FjYwJ0eAMJAQEhAQkBCWlzRGVmaW5lZAEJAOkHAQkA2QQBBQJ0eAkAAgEJAKwCAgISTk9UIGFwcGxpZWQgdHhJZDogBQJ0eAUEdW5pdAQHaWdub3JlZAoAAiRsBQZ0eExpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQR1bml0CgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdjaGVja2VyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQEB3ZlcnNpb24JAGQCCQEMZ2V0SW50T3JFbHNlAgkBFGtleUxhc3RVcGRhdGVWZXJzaW9uAAAAAAEJAJQKAgkAzAgCCQELRGVsZXRlRW50cnkBCQESa2V5QXBwbHlJblByb2dyZXNzAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFGtleUxhc3RVcGRhdGVWZXJzaW9uAAUHdmVyc2lvbgkAzAgCCQELU3RyaW5nRW50cnkCCQEZa2V5UHJvcG9zYWxTdGF0dXNEYXRhQnlJZAEFCnByb3Bvc2FsSWQJARFzdGF0dXNBcHBseVNjcmlwdAEFC2R5bmFtaWNEYXRhCQDMCAIJARBFeGVjdXRpb25IaXN0b3J5BAUHdmVyc2lvbgkAkQMCBQhwcm9wRGF0YQULZ292SWR4VGl0bGUJAJEDAgUIcHJvcERhdGEFCWdvdklkeFVybAUKcHJvcG9zYWxJZAUDbmlsBQdpZ25vcmVkAWkBEGNoYW5nZUltcGxTdGF0dXMCCnByb3Bvc2FsSWQJbmV3U3RhdHVzAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIObm90IGF1dGhvcml6ZWQDAwkBAiE9AgUJbmV3U3RhdHVzAgZBQ1RJVkUJAQIhPQIFCW5ld1N0YXR1cwIIT1VUREFURUQHCQACAQIdVW5rbm93biBpbXBsZW1lbnRhdGlvbiBzdGF0dXMEC2R5bmFtaWNEYXRhCQC1CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQR0aGlzCQEZa2V5UHJvcG9zYWxTdGF0dXNEYXRhQnlJZAEFCnByb3Bvc2FsSWQFA1NFUAQHdXBkYXRlZAkAuQkCCQDMCAICECViJWQlZCVkJWIlZCViJXMJAMwIAgkAkQMCBQtkeW5hbWljRGF0YQUTZ292U3RhdHVzSWR4SXNWYWxpZAkAzAgCCQCRAwIFC2R5bmFtaWNEYXRhBRJnb3ZTdGF0dXNJZHhXaW5PcHQJAMwIAgkAkQMCBQtkeW5hbWljRGF0YQUUZ292U3RhdHVzSWR4V2luVm90ZXMJAMwIAgkAkQMCBQtkeW5hbWljRGF0YQUWZ292U3RhdHVzSWR4VG90YWxWb3RlcwkAzAgCCQCRAwIFC2R5bmFtaWNEYXRhBRVnb3ZTdGF0dXNJZHhTY0FwcGxpZWQJAMwIAgkAkQMCBQtkeW5hbWljRGF0YQUSZ292U3RhdHVzSWR4U2NUaW1lCQDMCAIJAJEDAgULZHluYW1pY0RhdGEFFmdvdlN0YXR1c0lkeElzQ2FuY2VsZWQJAMwIAgUJbmV3U3RhdHVzBQNuaWwFA1NFUAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJARlrZXlQcm9wb3NhbFN0YXR1c0RhdGFCeUlkAQUKcHJvcG9zYWxJZAUHdXBkYXRlZAUDbmlsBQR1bml0AArXuE8=", "height": 2538371, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HNJmBSHk97nTaoUTQXxd6zLHJHMRMsDekYngWvH9Zk8b Next: BLkGpTER364v5dYwS5DP78cGnj4hCKtceNRnMcWRupXv Diff:
OldNewDifferences
111111 func ad (ae,af) = valueOrErrorMessage(addressFromString(ae[af]), ("Control cfg doesn't contain address at index " + toString(af)))
112112
113113
114-let ag = addressFromStringValue(valueOrElse(getString(this, Z()), "3P5Bfd58PPfNvBM2Hy8QfbcDqMeNtzg7KfP"))
114+let ag = addressFromStringValue(valueOrElse(getString(this, Z()), "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx"))
115115
116116 let ae = ab(ag)
117117
121121
122122 let aj = ad(ae, V)
123123
124-func ak (al) = ("%s%s__quorumRequired__" + al)
124+func ak () = "%s__lastBase58Proposal"
125125
126126
127-func am () = "%s__paymentRequired"
127+func al (am) = ("%s%s__quorumRequired__" + am)
128128
129129
130-func an () = "%s__gNsbtRequired"
130+func an () = "%s__paymentRequired"
131131
132132
133-func ao () = "%s__proposalId"
133+func ao () = "%s__gNsbtRequired"
134134
135135
136-func ap () = "%s__firstProposalId"
136+func ap () = "%s__proposalId"
137137
138138
139-func aq () = "%s__updateVersion"
139+func aq () = "%s__firstProposalId"
140140
141141
142-func ar (as) = ("%s%d__proposalStatusData__" + toString(as))
142+func ar () = "%s__updateVersion"
143143
144144
145-func at (as) = ("%s%d__proposalData__" + toString(as))
145+func as (at) = ("%s%d__proposalStatusData__" + toString(at))
146146
147147
148-func au (as,av) = makeString(["%s%d%d", "votesByOpt", toString(as), toString(av)], b)
148+func au (at) = ("%s%d__proposalData__" + toString(at))
149149
150150
151-func aw (as,ax) = makeString(["%s%d%s", "votesByUser", toString(as), ax], b)
151+func av (at,aw) = makeString(["%s%d%d", "votesByOpt", toString(at), toString(aw)], b)
152152
153153
154-func ay (as,ax) = makeString(["%s%d%s", "optionByUser", toString(as), ax], b)
154+func ax (at,ay) = makeString(["%s%d%s", "votesByUser", toString(at), ay], b)
155155
156156
157-func az () = "%s__applyInProgress"
157+func az (at,ay) = makeString(["%s%d%s", "optionByUser", toString(at), ay], b)
158158
159159
160-func aA (aB) = ("%s%d__proposalIdByTopicId__" + toString(aB))
160+func aA () = "%s__applyInProgress"
161161
162162
163-func aC (ax) = ("%s%s_userGnsbtReleaseTime__" + ax)
163+func aB (aC) = ("%s%d__proposalIdByTopicId__" + toString(aC))
164164
165165
166-func aD (as) = ("%s%d__numVoters__" + toString(as))
166+func aD (ay) = ("%s%s_userGnsbtReleaseTime__" + ay)
167167
168168
169-func aE () = "%s%s%s__stats__avg__uniqueVoters"
169+func aE (at) = ("%s%d__numVoters__" + toString(at))
170170
171171
172-func aF () = "%s%s%s__stats__avg__gnsbtVoted"
172+func aF () = "%s%s%s__stats__avg__uniqueVoters"
173173
174174
175-func aG () = "%s%s__stats__uniqueAuthors"
175+func aG () = "%s%s%s__stats__avg__gnsbtVoted"
176176
177177
178-func aH (aI) = ("%s%s__numProposalsByAuthor__" + aI)
178+func aH () = "%s%s__stats__uniqueAuthors"
179179
180180
181-func aJ (aK) = ("%s%d__applyHistory__" + toString(aK))
181+func aI (aJ) = ("%s%s__numProposalsByAuthor__" + aJ)
182182
183183
184-func aL (aM) = {
185- let aN = aM
186- if ($isInstanceOf(aN, "List[Any]"))
184+func aK (aL) = ("%s%d__applyHistory__" + toString(aL))
185+
186+
187+func aM (aN) = {
188+ let aO = aN
189+ if ($isInstanceOf(aO, "List[Any]"))
187190 then {
188- let aO = aN
189- aO
191+ let aP = aO
192+ aP
190193 }
191194 else throw("fail to cast into List[Any]")
192195 }
193196
194197
195-func aP (aM) = {
196- let aN = aM
197- if ($isInstanceOf(aN, "Int"))
198+func aQ (aN) = {
199+ let aO = aN
200+ if ($isInstanceOf(aO, "Int"))
198201 then {
199- let aQ = aN
200- aQ
202+ let aR = aO
203+ aR
201204 }
202205 else throw("fail to cast into Int")
203206 }
204207
205208
206-func aR (aS,aT,aU,aV,aW,aX,aY,aZ) = makeString(["%b%d%d%d%b%d%b%s", toString(aS), toString(aT), toString(aU), toString(aV), toString(aW), toString(aX), toString(aY), aZ], b)
209+func aS (aT,aU,aV,aW,aX,aY,aZ,ba) = makeString(["%b%d%d%d%b%d%b%s", toString(aT), toString(aU), toString(aV), toString(aW), toString(aX), toString(aY), toString(aZ), ba], b)
207210
208211
209-func ba (bb,al,bc,bd,be,bf,bg,bh,bi,bj,bk) = makeString(["%s%s%s%s%s%d%d%d%s%d%s", bb, al, bc, bd, be, toString(bf), toString(bg), toString(bh), bi, toString(bj), bk], b)
212+func bb (bc,am,bd,be,bf,bg,bh,bi,bj,bk,bl) = makeString(["%s%s%s%s%s%d%d%d%s%d%s", bc, am, bd, be, bf, toString(bg), toString(bh), toString(bi), bj, toString(bk), bl], b)
210213
211214
212-func bl (bm) = if ((size(bm) > 20))
213- then throw(("Too many transactions: " + toString(size(bm))))
215+func bm (bn) = if ((size(bn) > 20))
216+ then throw(("Too many transactions: " + toString(size(bn))))
214217 else {
215- func bn (bo,bp) = if ((size(fromBase58String(bp)) != 32))
216- then throw(("Wrong txId: " + bp))
217- else if ((bo == ""))
218- then bp
219- else ((bo + c) + bp)
218+ func bo (bp,bq) = if ((size(fromBase58String(bq)) != 32))
219+ then throw(("Wrong txId: " + bq))
220+ else if ((bp == ""))
221+ then bq
222+ else ((bp + c) + bq)
220223
221- let bq = bm
222- let br = size(bq)
223- let bs = ""
224- func bt (bu,bv) = if ((bv >= br))
225- then bu
226- else bn(bu, bq[bv])
224+ let br = bn
225+ let bs = size(br)
226+ let bt = ""
227+ func bu (bv,bw) = if ((bw >= bs))
228+ then bv
229+ else bo(bv, br[bw])
227230
228- func bw (bu,bv) = if ((bv >= br))
229- then bu
231+ func bx (bv,bw) = if ((bw >= bs))
232+ then bv
230233 else throw("List size exceeds 20")
231234
232- bw(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bs, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
235+ bx(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bt, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
233236 }
234237
235238
236-let bx = 0
239+let by = 0
237240
238-let by = 1
241+let bz = 1
239242
240-func bz (bA) = {
241- let bB = if (isDefined(addressFromString(bA)))
242- then invoke(aj, "updateVotingPower", [bA], nil)
243+func bA (bB) = {
244+ let bC = if (isDefined(addressFromString(bB)))
245+ then invoke(aj, "updateVotingPower", [bB], nil)
243246 else unit
244- if ((bB == bB))
247+ if ((bC == bC))
245248 then {
246- let bC = aL(invoke(ai, "gnsbtInfoSYSREADONLY", [bA, 0, 0], nil))
247- let bD = aL(bC[2])
248- let bE = aP(bD[2])
249- let bF = aP(bD[3])
250- let bG = aP(bC[9])
251- let bH = aP(bC[6])
252-[(bF + bH), (bE + bG)]
249+ let bD = aM(invoke(ai, "gnsbtInfoSYSREADONLY", [bB, 0, 0], nil))
250+ let bE = aM(bD[2])
251+ let bF = aQ(bE[2])
252+ let bG = aQ(bE[3])
253+ let bH = aQ(bD[9])
254+ let bI = aQ(bD[6])
255+[(bG + bI), (bF + bH)]
253256 }
254257 else throw("Strict value is not equal to itself.")
255258 }
256259
257260
258-func bI (bJ) = if ((value(indexOf(bJ, e)) != 0))
261+func bJ (bK) = if ((value(indexOf(bK, e)) != 0))
259262 then throw("Invalid url")
260- else if ((size(bJ) > g))
263+ else if ((size(bK) > g))
261264 then throw("Url too long!")
262265 else {
263- let aB = valueOrErrorMessage(parseInt(drop(bJ, (value(lastIndexOf(bJ, "/")) + 1))), "Wrong topicId")
264- let bK = getInteger(aA(aB))
265- if (isDefined(bK))
266- then throw(("Voting with such forum link is already registered by id=" + toString(value(bK))))
267- else aB
266+ let aC = valueOrErrorMessage(parseInt(drop(bK, (value(lastIndexOf(bK, "/")) + 1))), "Wrong topicId")
267+ let bL = getInteger(aB(aC))
268+ if (isDefined(bL))
269+ then throw(("Voting with such forum link is already registered by id=" + toString(value(bL))))
270+ else aC
268271 }
269272
270273
271-func bL (bM,bb,al,bc,bd,be,bg,bh,bN,bm,bO) = if ((bM.assetId != unit))
274+func bM (bN,bc,am,bd,be,bf,bh,bi,bO,bn,bP) = if ((bN.assetId != unit))
272275 then throw("Allowed WAVES payment only!")
273276 else {
274- let bP = K(am(), j)
275- if ((bP > bM.amount))
276- then throw(("Payment attached should be at least " + toString(bP)))
277+ let bQ = K(an(), j)
278+ if ((bQ > bN.amount))
279+ then throw(("Payment attached should be at least " + toString(bQ)))
277280 else {
278- let aB = bI(bd)
279- if ((be == ""))
281+ let aC = bJ(be)
282+ if ((bf == ""))
280283 then throw("Title is empty")
281- else if ((size(be) > f))
284+ else if ((size(bf) > f))
282285 then throw("Too long title")
283286 else {
284- let bf = lastBlock.timestamp
285- if ((bf > bg))
286- then throw(((("votingStartTime=" + toString(bg)) + " < proposalTime=") + toString(bf)))
287- else if ((bg > bh))
288- then throw(((("votingEndTime=" + toString(bh)) + " < votingStartTime=") + toString(bg)))
289- else if (((bh - bg) > h))
290- then throw(((("Voting period exceeds max: " + toString((bh - bg))) + " > ") + toString(h)))
287+ let bg = lastBlock.timestamp
288+ if ((bg > bh))
289+ then throw(((("votingStartTime=" + toString(bh)) + " < proposalTime=") + toString(bg)))
290+ else if ((bh > bi))
291+ then throw(((("votingEndTime=" + toString(bi)) + " < votingStartTime=") + toString(bh)))
292+ else if (((bi - bh) > h))
293+ then throw(((("Voting period exceeds max: " + toString((bi - bh))) + " > ") + toString(h)))
291294 else {
292- let bi = if ((al == "IDEA"))
295+ let bj = if ((am == "IDEA"))
293296 then ""
294- else bl(bm)
295- if ((1 >= size(bO)))
297+ else bm(bn)
298+ if ((1 >= size(bP)))
296299 then throw("Too few choices to vote")
297300 else {
298- let bQ = bz(bc)
299- let bR = bQ[bx]
300- let bS = bQ[by]
301- let bT = K(an(), k)
302- if ((bT > bS))
303- then throw((("You need at least " + toString(bT)) + " gNsbt to create voting"))
301+ let bR = bA(bd)
302+ let bS = bR[by]
303+ let bT = bR[bz]
304+ let bU = K(ao(), k)
305+ if ((bU > bT))
306+ then throw((("You need at least " + toString(bU)) + " gNsbt to create voting"))
304307 else {
305- let bU = invoke(ah, "acceptWaves", nil, [bM])
306- if ((bU == bU))
308+ let bV = invoke(ah, "acceptWaves", nil, [bN])
309+ if ((bV == bV))
307310 then {
308- let bV = K(ak(al), d)
309- let bj = fraction(bV, bR, i)
310- let as = (K(ao(), 0) + 1)
311- let bW = (K(aH(bc), 0) + 1)
312- let bX = (K(aG(), 0) + (if ((bW == 1))
311+ let bW = K(al(am), d)
312+ let bk = fraction(bW, bS, i)
313+ let at = (K(ap(), 0) + 1)
314+ let bX = (K(aI(bd), 0) + 1)
315+ let bY = (K(aH(), 0) + (if ((bX == 1))
313316 then 1
314317 else 0))
315- let bY = makeString(bO, c)
316- $Tuple2([IntegerEntry(ao(), as), IntegerEntry(aA(aB), as), StringEntry(ar(as), aR(false, 0, 0, 0, false, bh, false, "ACTIVE")), StringEntry(at(as), ba(bb, al, bc, toBase58String(toBytes(bd)), toBase58String(toBytes(be)), bf, bg, bh, bi, bj, bY)), IntegerEntry(aH(bc), bW), IntegerEntry(aG(), bX)], bb)
318+ let bZ = makeString(bP, c)
319+ let ca = getInteger(ak())
320+ let cb = if ((ca != unit))
321+ then nil
322+ else [IntegerEntry(ak(), (at - 1))]
323+ $Tuple2(([IntegerEntry(ap(), at), IntegerEntry(aB(aC), at), StringEntry(as(at), aS(false, 0, 0, 0, false, bi, false, "ACTIVE")), StringEntry(au(at), bb(bc, am, bd, toBase16String(toBytes(be)), toBase16String(toBytes(bf)), bg, bh, bi, bj, bk, bZ)), IntegerEntry(aI(bd), bX), IntegerEntry(aH(), bY)] ++ cb), bc)
317324 }
318325 else throw("Strict value is not equal to itself.")
319326 }
324331 }
325332
326333
327-func bZ (as,bO,ca,cb,cc,cd,ce) = {
328- func cf (bo,cg) = {
329- let af = value(indexOf(bO, cg))
330- let ch = if (ca)
331- then if ((af == cd))
332- then ce
333- else K(au(as, af), 0)
334- else if ((af == value(cb)))
335- then cc
336- else if ((af == cd))
337- then ce
338- else K(au(as, af), 0)
339- if ((bo._2 > ch))
340- then bo
341- else $Tuple2(af, ch)
334+func cc (at,bP,cd,ce,cf,cg,ch) = {
335+ func ci (bp,cj) = {
336+ let af = value(indexOf(bP, cj))
337+ let ck = if (cd)
338+ then if ((af == cg))
339+ then ch
340+ else K(av(at, af), 0)
341+ else if ((af == value(ce)))
342+ then cf
343+ else if ((af == cg))
344+ then ch
345+ else K(av(at, af), 0)
346+ if ((bp._2 > ck))
347+ then bp
348+ else $Tuple2(af, ck)
342349 }
343350
344- let bq = bO
345- let br = size(bq)
346- let bs = $Tuple2(0, 0)
347- func bt (bu,bv) = if ((bv >= br))
348- then bu
349- else cf(bu, bq[bv])
351+ let br = bP
352+ let bs = size(br)
353+ let bt = $Tuple2(0, 0)
354+ func bu (bv,bw) = if ((bw >= bs))
355+ then bv
356+ else ci(bv, br[bw])
350357
351- func bw (bu,bv) = if ((bv >= br))
352- then bu
358+ func bx (bv,bw) = if ((bw >= bs))
359+ then bv
353360 else throw("List size exceeds 10")
354361
355- bw(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bs, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
362+ bx(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bt, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
356363 }
357364
358365
359-func ci (cj,ck,cl,cm) = makeString(["%b%d%d%d%b%d%b%s", toString(ck), toString(cl._1), toString(cl._2), toString(cm), cj[D], cj[E], cj[F], cj[G]], b)
366+func cl (cm,cn,co,cp) = makeString(["%b%d%d%d%b%d%b%s", toString(cn), toString(co._1), toString(co._2), toString(cp), cm[D], cm[E], cm[F], cm[G]], b)
360367
361368
362-func cn (cj) = makeString(["%b%d%d%d%b%d%b%s", cj[z], cj[A], cj[B], cj[C], "true", cj[E], cj[F], cj[G]], b)
369+func cq (cm) = makeString(["%b%d%d%d%b%d%b%s", cm[z], cm[A], cm[B], cm[C], "true", cm[E], cm[F], cm[G]], b)
363370
364371
365-func co (cp,be,bJ,as) = {
366- let bR = bz("")[bx]
367- let cq = 500000
368- StringEntry(aJ(lastBlock.timestamp), makeString(["%d%d%d%s%s%d", toString(cp), toString(bR), toString(cq), be, bJ, toString(as)], b))
372+func cr (cs,bf,bK,at) = {
373+ let bS = bA("")[by]
374+ let ct = 500000
375+ StringEntry(aK(lastBlock.timestamp), makeString(["%d%d%d%s%s%d", toString(cs), toString(bS), toString(ct), bf, bK, toString(at)], b))
369376 }
370377
371378
372-@Callable(aQ)
373-func constructorV1 (cr,cs,ct,cu,cv) = if ((aQ.caller != this))
379+@Callable(aR)
380+func constructorV1 (cu,cv,cw,cx,cy) = if ((aR.caller != this))
374381 then throw("Permission denied")
375- else [StringEntry(Z(), cr), IntegerEntry(an(), cs), IntegerEntry(am(), ct), IntegerEntry(ak("IDEA"), cu), IntegerEntry(ak("UPDATE"), cv)]
382+ else [StringEntry(Z(), cu), IntegerEntry(ao(), cv), IntegerEntry(an(), cw), IntegerEntry(al("IDEA"), cx), IntegerEntry(al("UPDATE"), cy)]
376383
377384
378385
379-@Callable(aQ)
380-func castVote (as,cw) = {
381- let cx = toString(aQ.caller)
382- let cy = split(H(this, ar(as)), b)
383- if ((cy[F] == "true"))
386+@Callable(aR)
387+func castVote (at,cz) = {
388+ let cA = toString(aR.caller)
389+ let cB = split(H(this, as(at)), b)
390+ if ((cB[F] == "true"))
384391 then throw("Voting is canceled by team")
385392 else {
386- let cz = split(H(this, at(as)), b)
387- let cA = parseIntValue(cz[u])
388- let cB = parseIntValue(cz[v])
389- let cC = lastBlock.timestamp
390- if ((cA > cC))
393+ let cC = split(H(this, au(at)), b)
394+ let cD = parseIntValue(cC[u])
395+ let cE = parseIntValue(cC[v])
396+ let cF = lastBlock.timestamp
397+ if ((cD > cF))
391398 then throw("Voting not started yet")
392- else if ((cC >= cB))
399+ else if ((cF >= cE))
393400 then throw("Voting already finished")
394401 else {
395- let cD = split(cz[y], c)
396- let cE = size(cD)
397- if ((1 >= cE))
402+ let cG = split(cC[y], c)
403+ let cH = size(cG)
404+ if ((1 >= cH))
398405 then throw("Too few choices to vote")
399- else if ((cw >= cE))
400- then throw(("Unknown choice! Must be 0.." + toString((cE - 1))))
406+ else if ((cz >= cH))
407+ then throw(("Unknown choice! Must be 0.." + toString((cH - 1))))
401408 else {
402- let bQ = bz(cx)
403- let cF = bQ[by]
404- if ((0 >= cF))
409+ let bR = bA(cA)
410+ let cI = bR[bz]
411+ if ((0 >= cI))
405412 then throw("no gnsbt to vote")
406413 else {
407- let bR = bQ[bx]
408- let cb = getInteger(ay(as, cx))
409- let cG = if (!(isDefined(cb)))
414+ let bS = bR[by]
415+ let ce = getInteger(az(at, cA))
416+ let cJ = if (!(isDefined(ce)))
410417 then 0
411- else K(aw(as, cx), 0)
412- let cH = if (isDefined(cb))
413- then K(au(as, value(cb)), 0)
418+ else K(ax(at, cA), 0)
419+ let cK = if (isDefined(ce))
420+ then K(av(at, value(ce)), 0)
414421 else 0
415- let cI = K(au(as, cw), 0)
416- let cJ = parseIntValue(cy[C])
417- let cK = if (!(isDefined(cb)))
422+ let cL = K(av(at, cz), 0)
423+ let cM = parseIntValue(cB[C])
424+ let cN = if (!(isDefined(ce)))
418425 then 0
419- else ((cH - cG) + (if ((value(cb) == cw))
420- then cF
426+ else ((cK - cJ) + (if ((value(ce) == cz))
427+ then cI
421428 else 0))
422- let ce = if (if (isDefined(cb))
423- then (value(cb) == cw)
429+ let ch = if (if (isDefined(ce))
430+ then (value(ce) == cz)
424431 else false)
425- then cK
426- else (cI + cF)
427- let cL = ((cJ - cG) + cF)
428- let cM = (cL >= parseIntValue(cz[x]))
429- let cN = K(aD(as), 0)
430- let cO = K(aE(), 0)
431- let cP = ((getIntegerValue(ao()) - valueOrElse(getInteger(ap()), n)) + 1)
432- let cQ = if ((cG == 0))
432+ then cN
433+ else (cL + cI)
434+ let cO = ((cM - cJ) + cI)
435+ let cP = (cO >= parseIntValue(cC[x]))
436+ let cQ = K(aE(at), 0)
437+ let cR = K(aF(), 0)
438+ let cS = ((getIntegerValue(ap()) - valueOrElse(getInteger(aq()), n)) + 1)
439+ let cT = if ((cJ == 0))
433440 then 1
434441 else 0
435- let cR = (cO + fraction(cQ, i, cP))
436- let cS = K(aF(), 0)
437- let cT = (cS + ((cF - cG) / cP))
438- let ca = if (!(isDefined(cb)))
442+ let cU = (cR + fraction(cT, i, cS))
443+ let cV = K(aG(), 0)
444+ let cW = (cV + ((cI - cJ) / cS))
445+ let cd = if (!(isDefined(ce)))
439446 then true
440- else (value(cb) == cw)
441- let cc = if (ca)
447+ else (value(ce) == cz)
448+ let cf = if (cd)
442449 then nil
443- else [IntegerEntry(au(as, value(cb)), cK)]
444- let cU = bZ(as, cD, ca, cb, cK, cw, ce)
445- let cV = max([cB, K(aC(cx), 0)])
446- $Tuple2(([IntegerEntry(ay(as, cx), cw), IntegerEntry(aw(as, cx), cF), IntegerEntry(au(as, cw), ce), IntegerEntry(aD(as), (cN + cQ)), IntegerEntry(aC(cx), cV), IntegerEntry(aE(), cR), IntegerEntry(aF(), cT), StringEntry(ar(as), ci(cy, cM, cU, cL))] ++ cc), unit)
450+ else [IntegerEntry(av(at, value(ce)), cN)]
451+ let cX = cc(at, cG, cd, ce, cN, cz, ch)
452+ let cY = max([cE, K(aD(cA), 0)])
453+ $Tuple2(([IntegerEntry(az(at, cA), cz), IntegerEntry(ax(at, cA), cI), IntegerEntry(av(at, cz), ch), IntegerEntry(aE(at), (cQ + cT)), IntegerEntry(aD(cA), cY), IntegerEntry(aF(), cU), IntegerEntry(aG(), cW), StringEntry(as(at), cl(cB, cP, cX, cO))] ++ cf), unit)
447454 }
448455 }
449456 }
452459
453460
454461
455-@Callable(aQ)
456-func initiateIdeaVoting (bd,be,bg,bh,bO) = if ((size(aQ.payments) != 1))
462+@Callable(aR)
463+func initiateIdeaVoting (be,bf,bh,bi,bP) = if ((size(aR.payments) != 1))
457464 then throw("Exactly one payment required")
458- else if ((size(bO) != 2))
465+ else if ((size(bP) != 2))
459466 then throw("Exactly 2 option ['NO', 'YES'] are expected")
460- else if ((bO[0] != "NO"))
467+ else if ((bP[0] != "NO"))
461468 then throw("Option NO should be the first")
462- else if ((bO[1] != "YES"))
469+ else if ((bP[1] != "YES"))
463470 then throw("Option YES should be the second")
464- else bL(value(aQ.payments[0]), toBase58String(aQ.transactionId), "IDEA", toString(aQ.caller), bd, be, bg, bh, "PENDING", nil, bO)
471+ else bM(value(aR.payments[0]), toBase58String(aR.transactionId), "IDEA", toString(aR.caller), be, bf, bh, bi, "PENDING", nil, bP)
465472
466473
467474
468-@Callable(aQ)
469-func initiateUpdateVoting (bd,be,bg,bh,bm) = if ((size(aQ.payments) != 1))
475+@Callable(aR)
476+func initiateUpdateVoting (be,bf,bh,bi,bn) = if ((size(aR.payments) != 1))
470477 then throw("Exactly one payment required")
471- else if ((1 > size(bm)))
478+ else if ((1 > size(bn)))
472479 then throw("Transactions list is empty")
473- else if ((aQ.caller != this))
480+ else if ((aR.caller != this))
474481 then throw("not authorized")
475- else bL(value(aQ.payments[0]), toBase58String(aQ.transactionId), "UPDATE", toString(aQ.caller), bd, be, bg, bh, "PENDING", bm, ["NO", "YES"])
482+ else bM(value(aR.payments[0]), toBase58String(aR.transactionId), "UPDATE", toString(aR.caller), be, bf, bh, bi, "PENDING", bn, ["NO", "YES"])
476483
477484
478485
479-@Callable(aQ)
480-func cancelVoting (as) = if ((aQ.caller != this))
486+@Callable(aR)
487+func cancelVoting (at) = if ((aR.caller != this))
481488 then throw("not authorized")
482489 else {
483- let cW = H(this, ar(as))
484- let cX = ((take(cW, value(lastIndexOf(cW, b))) + b) + "true")
485- $Tuple2([StringEntry(ar(as), cX)], unit)
490+ let cZ = H(this, as(at))
491+ let da = ((take(cZ, value(lastIndexOf(cZ, b))) + b) + "true")
492+ $Tuple2([StringEntry(as(at), da)], unit)
486493 }
487494
488495
489496
490-@Callable(aQ)
491-func applyUpdate (as) = {
492- let cz = split(H(this, at(as)), b)
493- let cB = parseIntValue(cz[v])
494- let cC = lastBlock.timestamp
495- if ((cB > cC))
497+@Callable(aR)
498+func applyUpdate (at) = {
499+ let cC = split(H(this, au(at)), b)
500+ let cE = parseIntValue(cC[v])
501+ let cF = lastBlock.timestamp
502+ if ((cE > cF))
496503 then throw("Voting is not finished yet")
497- else if (("UPDATE" != cz[p]))
504+ else if (("UPDATE" != cC[p]))
498505 then throw("Only UPDATE type can be applied")
499506 else {
500- let cy = split(H(this, ar(as)), b)
501- if ((cy[F] == "true"))
507+ let cB = split(H(this, as(at)), b)
508+ if ((cB[F] == "true"))
502509 then throw("Voting is canceled")
503- else if ((cy[z] != "true"))
510+ else if ((cB[z] != "true"))
504511 then throw("Voting status invalid")
505- else if ((cy[A] != "1"))
512+ else if ((cB[A] != "1"))
506513 then throw("Winner is 'NO' - nothing to apply")
507- else if ((cy[D] == "true"))
514+ else if ((cB[D] == "true"))
508515 then throw("Scripts are already applied")
509516 else {
510- let cY = parseIntValue(cy[E])
511- if (((cC - l) > cY))
512- then throw((("Scripts timestamp=" + toString(cY)) + " is too far in the past, max 2 hrs allowed"))
513- else if ((cY > (cC + m)))
514- then throw((("Scripts timestamp=" + toString(cY)) + " is too far in the future, max 1.5 hrs allowed"))
517+ let db = parseIntValue(cB[E])
518+ if (((cF - l) > db))
519+ then throw((("Scripts timestamp=" + toString(db)) + " is too far in the past, max 2 hrs allowed"))
520+ else if ((db > (cF + m)))
521+ then throw((("Scripts timestamp=" + toString(db)) + " is too far in the future, max 1.5 hrs allowed"))
515522 else {
516- let cZ = K(az(), -1)
517- if ((cZ != -1))
518- then throw((("proposalId=" + toString(cZ)) + " is already being applied. Finish it first!"))
523+ let dc = K(aA(), -1)
524+ if ((dc != -1))
525+ then throw((("proposalId=" + toString(dc)) + " is already being applied. Finish it first!"))
519526 else {
520- let da = invoke(ag, "callEmergencyShutdown", ["Applying Governance UPDATE"], nil)
521- if ((da == da))
522- then $Tuple2([IntegerEntry(az(), as)], unit)
527+ let dd = invoke(ag, "callEmergencyShutdown", ["Applying Governance UPDATE"], nil)
528+ if ((dd == dd))
529+ then $Tuple2([IntegerEntry(aA(), at)], unit)
523530 else throw("Strict value is not equal to itself.")
524531 }
525532 }
529536
530537
531538
532-@Callable(aQ)
539+@Callable(aR)
533540 func finishApply () = {
534- let as = valueOrErrorMessage(getInteger(az()), "No apply in progress, nothing to finish")
535- let cz = split(H(this, at(as)), b)
536- let bm = split(cz[w], c)
537- let cy = split(H(this, ar(as)), b)
538- if ((cy[D] == "true"))
541+ let at = valueOrErrorMessage(getInteger(aA()), "No apply in progress, nothing to finish")
542+ let cC = split(H(this, au(at)), b)
543+ let bn = split(cC[w], c)
544+ let cB = split(H(this, as(at)), b)
545+ if ((cB[D] == "true"))
539546 then throw("Scripts are already applied")
540547 else {
541- func db (bo,bp) = if (!(isDefined(transactionHeightById(fromBase58String(bp)))))
542- then throw(("NOT applied txId: " + bp))
548+ func de (bp,bq) = if (!(isDefined(transactionHeightById(fromBase58String(bq)))))
549+ then throw(("NOT applied txId: " + bq))
543550 else unit
544551
545- let dc = {
546- let bq = bm
547- let br = size(bq)
548- let bs = unit
549- func bt (bu,bv) = if ((bv >= br))
550- then bu
551- else db(bu, bq[bv])
552+ let df = {
553+ let br = bn
554+ let bs = size(br)
555+ let bt = unit
556+ func bu (bv,bw) = if ((bw >= bs))
557+ then bv
558+ else de(bv, br[bw])
552559
553- func bw (bu,bv) = if ((bv >= br))
554- then bu
560+ func bx (bv,bw) = if ((bw >= bs))
561+ then bv
555562 else throw("List size exceeds 20")
556563
557- bw(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bs, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
564+ bx(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bt, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
558565 }
559- let dd = (K(aq(), 0) + 1)
560- $Tuple2([DeleteEntry(az()), IntegerEntry(aq(), dd), StringEntry(ar(as), cn(cy)), co(dd, cz[s], cz[r], as)], dc)
566+ let dg = (K(ar(), 0) + 1)
567+ $Tuple2([DeleteEntry(aA()), IntegerEntry(ar(), dg), StringEntry(as(at), cq(cB)), cr(dg, cC[s], cC[r], at)], df)
561568 }
562569 }
563570
564571
565572
566-@Callable(aQ)
567-func changeImplStatus (as,de) = if ((aQ.caller != this))
573+@Callable(aR)
574+func changeImplStatus (at,dh) = if ((aR.caller != this))
568575 then throw("not authorized")
569- else if (if ((de != "ACTIVE"))
570- then (de != "OUTDATED")
576+ else if (if ((dh != "ACTIVE"))
577+ then (dh != "OUTDATED")
571578 else false)
572579 then throw("Unknown implementation status")
573580 else {
574- let cy = split(H(this, ar(as)), b)
575- let df = makeString(["%b%d%d%d%b%d%b%s", cy[z], cy[A], cy[B], cy[C], cy[D], cy[E], cy[F], de], b)
576- $Tuple2([StringEntry(ar(as), df)], unit)
581+ let cB = split(H(this, as(at)), b)
582+ let di = makeString(["%b%d%d%d%b%d%b%s", cB[z], cB[A], cB[B], cB[C], cB[D], cB[E], cB[F], dh], b)
583+ $Tuple2([StringEntry(as(at), di)], unit)
577584 }
578585
579586
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = ""
55
66 let b = "__"
77
88 let c = ":"
99
1010 let d = 500000
1111
1212 let e = "https://forum.neutrino.at/"
1313
1414 let f = 250
1515
1616 let g = 250
1717
1818 let h = 1209600000
1919
2020 let i = 1000000
2121
2222 let j = 1000000000
2323
2424 let k = 1000000000
2525
2626 let l = 7200000
2727
2828 let m = 5400000
2929
3030 let n = 111
3131
3232 let o = 1
3333
3434 let p = 2
3535
3636 let q = 3
3737
3838 let r = 4
3939
4040 let s = 5
4141
4242 let t = 6
4343
4444 let u = 7
4545
4646 let v = 8
4747
4848 let w = 9
4949
5050 let x = 10
5151
5252 let y = 11
5353
5454 let z = 1
5555
5656 let A = 2
5757
5858 let B = 3
5959
6060 let C = 4
6161
6262 let D = 5
6363
6464 let E = 6
6565
6666 let F = 7
6767
6868 let G = 8
6969
7070 func H (I,J) = valueOrErrorMessage(getString(I, J), makeString(["mandatory ", toString(I), ".", J, " is not defined"], ""))
7171
7272
7373 func K (J,L) = valueOrElse(getInteger(this, J), L)
7474
7575
7676 let M = 1
7777
7878 let N = 2
7979
8080 let O = 3
8181
8282 let P = 4
8383
8484 let Q = 5
8585
8686 let R = 6
8787
8888 let S = 7
8989
9090 let T = 8
9191
9292 let U = 9
9393
9494 let V = 10
9595
9696 let W = 11
9797
9898 let X = 12
9999
100100 let Y = 13
101101
102102 func Z () = "%s%s__config__controlAddress"
103103
104104
105105 func aa () = "%s__controlConfig"
106106
107107
108108 func ab (ac) = split_4C(H(ac, aa()), b)
109109
110110
111111 func ad (ae,af) = valueOrErrorMessage(addressFromString(ae[af]), ("Control cfg doesn't contain address at index " + toString(af)))
112112
113113
114-let ag = addressFromStringValue(valueOrElse(getString(this, Z()), "3P5Bfd58PPfNvBM2Hy8QfbcDqMeNtzg7KfP"))
114+let ag = addressFromStringValue(valueOrElse(getString(this, Z()), "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx"))
115115
116116 let ae = ab(ag)
117117
118118 let ah = ad(ae, M)
119119
120120 let ai = ad(ae, W)
121121
122122 let aj = ad(ae, V)
123123
124-func ak (al) = ("%s%s__quorumRequired__" + al)
124+func ak () = "%s__lastBase58Proposal"
125125
126126
127-func am () = "%s__paymentRequired"
127+func al (am) = ("%s%s__quorumRequired__" + am)
128128
129129
130-func an () = "%s__gNsbtRequired"
130+func an () = "%s__paymentRequired"
131131
132132
133-func ao () = "%s__proposalId"
133+func ao () = "%s__gNsbtRequired"
134134
135135
136-func ap () = "%s__firstProposalId"
136+func ap () = "%s__proposalId"
137137
138138
139-func aq () = "%s__updateVersion"
139+func aq () = "%s__firstProposalId"
140140
141141
142-func ar (as) = ("%s%d__proposalStatusData__" + toString(as))
142+func ar () = "%s__updateVersion"
143143
144144
145-func at (as) = ("%s%d__proposalData__" + toString(as))
145+func as (at) = ("%s%d__proposalStatusData__" + toString(at))
146146
147147
148-func au (as,av) = makeString(["%s%d%d", "votesByOpt", toString(as), toString(av)], b)
148+func au (at) = ("%s%d__proposalData__" + toString(at))
149149
150150
151-func aw (as,ax) = makeString(["%s%d%s", "votesByUser", toString(as), ax], b)
151+func av (at,aw) = makeString(["%s%d%d", "votesByOpt", toString(at), toString(aw)], b)
152152
153153
154-func ay (as,ax) = makeString(["%s%d%s", "optionByUser", toString(as), ax], b)
154+func ax (at,ay) = makeString(["%s%d%s", "votesByUser", toString(at), ay], b)
155155
156156
157-func az () = "%s__applyInProgress"
157+func az (at,ay) = makeString(["%s%d%s", "optionByUser", toString(at), ay], b)
158158
159159
160-func aA (aB) = ("%s%d__proposalIdByTopicId__" + toString(aB))
160+func aA () = "%s__applyInProgress"
161161
162162
163-func aC (ax) = ("%s%s_userGnsbtReleaseTime__" + ax)
163+func aB (aC) = ("%s%d__proposalIdByTopicId__" + toString(aC))
164164
165165
166-func aD (as) = ("%s%d__numVoters__" + toString(as))
166+func aD (ay) = ("%s%s_userGnsbtReleaseTime__" + ay)
167167
168168
169-func aE () = "%s%s%s__stats__avg__uniqueVoters"
169+func aE (at) = ("%s%d__numVoters__" + toString(at))
170170
171171
172-func aF () = "%s%s%s__stats__avg__gnsbtVoted"
172+func aF () = "%s%s%s__stats__avg__uniqueVoters"
173173
174174
175-func aG () = "%s%s__stats__uniqueAuthors"
175+func aG () = "%s%s%s__stats__avg__gnsbtVoted"
176176
177177
178-func aH (aI) = ("%s%s__numProposalsByAuthor__" + aI)
178+func aH () = "%s%s__stats__uniqueAuthors"
179179
180180
181-func aJ (aK) = ("%s%d__applyHistory__" + toString(aK))
181+func aI (aJ) = ("%s%s__numProposalsByAuthor__" + aJ)
182182
183183
184-func aL (aM) = {
185- let aN = aM
186- if ($isInstanceOf(aN, "List[Any]"))
184+func aK (aL) = ("%s%d__applyHistory__" + toString(aL))
185+
186+
187+func aM (aN) = {
188+ let aO = aN
189+ if ($isInstanceOf(aO, "List[Any]"))
187190 then {
188- let aO = aN
189- aO
191+ let aP = aO
192+ aP
190193 }
191194 else throw("fail to cast into List[Any]")
192195 }
193196
194197
195-func aP (aM) = {
196- let aN = aM
197- if ($isInstanceOf(aN, "Int"))
198+func aQ (aN) = {
199+ let aO = aN
200+ if ($isInstanceOf(aO, "Int"))
198201 then {
199- let aQ = aN
200- aQ
202+ let aR = aO
203+ aR
201204 }
202205 else throw("fail to cast into Int")
203206 }
204207
205208
206-func aR (aS,aT,aU,aV,aW,aX,aY,aZ) = makeString(["%b%d%d%d%b%d%b%s", toString(aS), toString(aT), toString(aU), toString(aV), toString(aW), toString(aX), toString(aY), aZ], b)
209+func aS (aT,aU,aV,aW,aX,aY,aZ,ba) = makeString(["%b%d%d%d%b%d%b%s", toString(aT), toString(aU), toString(aV), toString(aW), toString(aX), toString(aY), toString(aZ), ba], b)
207210
208211
209-func ba (bb,al,bc,bd,be,bf,bg,bh,bi,bj,bk) = makeString(["%s%s%s%s%s%d%d%d%s%d%s", bb, al, bc, bd, be, toString(bf), toString(bg), toString(bh), bi, toString(bj), bk], b)
212+func bb (bc,am,bd,be,bf,bg,bh,bi,bj,bk,bl) = makeString(["%s%s%s%s%s%d%d%d%s%d%s", bc, am, bd, be, bf, toString(bg), toString(bh), toString(bi), bj, toString(bk), bl], b)
210213
211214
212-func bl (bm) = if ((size(bm) > 20))
213- then throw(("Too many transactions: " + toString(size(bm))))
215+func bm (bn) = if ((size(bn) > 20))
216+ then throw(("Too many transactions: " + toString(size(bn))))
214217 else {
215- func bn (bo,bp) = if ((size(fromBase58String(bp)) != 32))
216- then throw(("Wrong txId: " + bp))
217- else if ((bo == ""))
218- then bp
219- else ((bo + c) + bp)
218+ func bo (bp,bq) = if ((size(fromBase58String(bq)) != 32))
219+ then throw(("Wrong txId: " + bq))
220+ else if ((bp == ""))
221+ then bq
222+ else ((bp + c) + bq)
220223
221- let bq = bm
222- let br = size(bq)
223- let bs = ""
224- func bt (bu,bv) = if ((bv >= br))
225- then bu
226- else bn(bu, bq[bv])
224+ let br = bn
225+ let bs = size(br)
226+ let bt = ""
227+ func bu (bv,bw) = if ((bw >= bs))
228+ then bv
229+ else bo(bv, br[bw])
227230
228- func bw (bu,bv) = if ((bv >= br))
229- then bu
231+ func bx (bv,bw) = if ((bw >= bs))
232+ then bv
230233 else throw("List size exceeds 20")
231234
232- bw(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bs, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
235+ bx(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bt, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
233236 }
234237
235238
236-let bx = 0
239+let by = 0
237240
238-let by = 1
241+let bz = 1
239242
240-func bz (bA) = {
241- let bB = if (isDefined(addressFromString(bA)))
242- then invoke(aj, "updateVotingPower", [bA], nil)
243+func bA (bB) = {
244+ let bC = if (isDefined(addressFromString(bB)))
245+ then invoke(aj, "updateVotingPower", [bB], nil)
243246 else unit
244- if ((bB == bB))
247+ if ((bC == bC))
245248 then {
246- let bC = aL(invoke(ai, "gnsbtInfoSYSREADONLY", [bA, 0, 0], nil))
247- let bD = aL(bC[2])
248- let bE = aP(bD[2])
249- let bF = aP(bD[3])
250- let bG = aP(bC[9])
251- let bH = aP(bC[6])
252-[(bF + bH), (bE + bG)]
249+ let bD = aM(invoke(ai, "gnsbtInfoSYSREADONLY", [bB, 0, 0], nil))
250+ let bE = aM(bD[2])
251+ let bF = aQ(bE[2])
252+ let bG = aQ(bE[3])
253+ let bH = aQ(bD[9])
254+ let bI = aQ(bD[6])
255+[(bG + bI), (bF + bH)]
253256 }
254257 else throw("Strict value is not equal to itself.")
255258 }
256259
257260
258-func bI (bJ) = if ((value(indexOf(bJ, e)) != 0))
261+func bJ (bK) = if ((value(indexOf(bK, e)) != 0))
259262 then throw("Invalid url")
260- else if ((size(bJ) > g))
263+ else if ((size(bK) > g))
261264 then throw("Url too long!")
262265 else {
263- let aB = valueOrErrorMessage(parseInt(drop(bJ, (value(lastIndexOf(bJ, "/")) + 1))), "Wrong topicId")
264- let bK = getInteger(aA(aB))
265- if (isDefined(bK))
266- then throw(("Voting with such forum link is already registered by id=" + toString(value(bK))))
267- else aB
266+ let aC = valueOrErrorMessage(parseInt(drop(bK, (value(lastIndexOf(bK, "/")) + 1))), "Wrong topicId")
267+ let bL = getInteger(aB(aC))
268+ if (isDefined(bL))
269+ then throw(("Voting with such forum link is already registered by id=" + toString(value(bL))))
270+ else aC
268271 }
269272
270273
271-func bL (bM,bb,al,bc,bd,be,bg,bh,bN,bm,bO) = if ((bM.assetId != unit))
274+func bM (bN,bc,am,bd,be,bf,bh,bi,bO,bn,bP) = if ((bN.assetId != unit))
272275 then throw("Allowed WAVES payment only!")
273276 else {
274- let bP = K(am(), j)
275- if ((bP > bM.amount))
276- then throw(("Payment attached should be at least " + toString(bP)))
277+ let bQ = K(an(), j)
278+ if ((bQ > bN.amount))
279+ then throw(("Payment attached should be at least " + toString(bQ)))
277280 else {
278- let aB = bI(bd)
279- if ((be == ""))
281+ let aC = bJ(be)
282+ if ((bf == ""))
280283 then throw("Title is empty")
281- else if ((size(be) > f))
284+ else if ((size(bf) > f))
282285 then throw("Too long title")
283286 else {
284- let bf = lastBlock.timestamp
285- if ((bf > bg))
286- then throw(((("votingStartTime=" + toString(bg)) + " < proposalTime=") + toString(bf)))
287- else if ((bg > bh))
288- then throw(((("votingEndTime=" + toString(bh)) + " < votingStartTime=") + toString(bg)))
289- else if (((bh - bg) > h))
290- then throw(((("Voting period exceeds max: " + toString((bh - bg))) + " > ") + toString(h)))
287+ let bg = lastBlock.timestamp
288+ if ((bg > bh))
289+ then throw(((("votingStartTime=" + toString(bh)) + " < proposalTime=") + toString(bg)))
290+ else if ((bh > bi))
291+ then throw(((("votingEndTime=" + toString(bi)) + " < votingStartTime=") + toString(bh)))
292+ else if (((bi - bh) > h))
293+ then throw(((("Voting period exceeds max: " + toString((bi - bh))) + " > ") + toString(h)))
291294 else {
292- let bi = if ((al == "IDEA"))
295+ let bj = if ((am == "IDEA"))
293296 then ""
294- else bl(bm)
295- if ((1 >= size(bO)))
297+ else bm(bn)
298+ if ((1 >= size(bP)))
296299 then throw("Too few choices to vote")
297300 else {
298- let bQ = bz(bc)
299- let bR = bQ[bx]
300- let bS = bQ[by]
301- let bT = K(an(), k)
302- if ((bT > bS))
303- then throw((("You need at least " + toString(bT)) + " gNsbt to create voting"))
301+ let bR = bA(bd)
302+ let bS = bR[by]
303+ let bT = bR[bz]
304+ let bU = K(ao(), k)
305+ if ((bU > bT))
306+ then throw((("You need at least " + toString(bU)) + " gNsbt to create voting"))
304307 else {
305- let bU = invoke(ah, "acceptWaves", nil, [bM])
306- if ((bU == bU))
308+ let bV = invoke(ah, "acceptWaves", nil, [bN])
309+ if ((bV == bV))
307310 then {
308- let bV = K(ak(al), d)
309- let bj = fraction(bV, bR, i)
310- let as = (K(ao(), 0) + 1)
311- let bW = (K(aH(bc), 0) + 1)
312- let bX = (K(aG(), 0) + (if ((bW == 1))
311+ let bW = K(al(am), d)
312+ let bk = fraction(bW, bS, i)
313+ let at = (K(ap(), 0) + 1)
314+ let bX = (K(aI(bd), 0) + 1)
315+ let bY = (K(aH(), 0) + (if ((bX == 1))
313316 then 1
314317 else 0))
315- let bY = makeString(bO, c)
316- $Tuple2([IntegerEntry(ao(), as), IntegerEntry(aA(aB), as), StringEntry(ar(as), aR(false, 0, 0, 0, false, bh, false, "ACTIVE")), StringEntry(at(as), ba(bb, al, bc, toBase58String(toBytes(bd)), toBase58String(toBytes(be)), bf, bg, bh, bi, bj, bY)), IntegerEntry(aH(bc), bW), IntegerEntry(aG(), bX)], bb)
318+ let bZ = makeString(bP, c)
319+ let ca = getInteger(ak())
320+ let cb = if ((ca != unit))
321+ then nil
322+ else [IntegerEntry(ak(), (at - 1))]
323+ $Tuple2(([IntegerEntry(ap(), at), IntegerEntry(aB(aC), at), StringEntry(as(at), aS(false, 0, 0, 0, false, bi, false, "ACTIVE")), StringEntry(au(at), bb(bc, am, bd, toBase16String(toBytes(be)), toBase16String(toBytes(bf)), bg, bh, bi, bj, bk, bZ)), IntegerEntry(aI(bd), bX), IntegerEntry(aH(), bY)] ++ cb), bc)
317324 }
318325 else throw("Strict value is not equal to itself.")
319326 }
320327 }
321328 }
322329 }
323330 }
324331 }
325332
326333
327-func bZ (as,bO,ca,cb,cc,cd,ce) = {
328- func cf (bo,cg) = {
329- let af = value(indexOf(bO, cg))
330- let ch = if (ca)
331- then if ((af == cd))
332- then ce
333- else K(au(as, af), 0)
334- else if ((af == value(cb)))
335- then cc
336- else if ((af == cd))
337- then ce
338- else K(au(as, af), 0)
339- if ((bo._2 > ch))
340- then bo
341- else $Tuple2(af, ch)
334+func cc (at,bP,cd,ce,cf,cg,ch) = {
335+ func ci (bp,cj) = {
336+ let af = value(indexOf(bP, cj))
337+ let ck = if (cd)
338+ then if ((af == cg))
339+ then ch
340+ else K(av(at, af), 0)
341+ else if ((af == value(ce)))
342+ then cf
343+ else if ((af == cg))
344+ then ch
345+ else K(av(at, af), 0)
346+ if ((bp._2 > ck))
347+ then bp
348+ else $Tuple2(af, ck)
342349 }
343350
344- let bq = bO
345- let br = size(bq)
346- let bs = $Tuple2(0, 0)
347- func bt (bu,bv) = if ((bv >= br))
348- then bu
349- else cf(bu, bq[bv])
351+ let br = bP
352+ let bs = size(br)
353+ let bt = $Tuple2(0, 0)
354+ func bu (bv,bw) = if ((bw >= bs))
355+ then bv
356+ else ci(bv, br[bw])
350357
351- func bw (bu,bv) = if ((bv >= br))
352- then bu
358+ func bx (bv,bw) = if ((bw >= bs))
359+ then bv
353360 else throw("List size exceeds 10")
354361
355- bw(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bs, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
362+ bx(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bt, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
356363 }
357364
358365
359-func ci (cj,ck,cl,cm) = makeString(["%b%d%d%d%b%d%b%s", toString(ck), toString(cl._1), toString(cl._2), toString(cm), cj[D], cj[E], cj[F], cj[G]], b)
366+func cl (cm,cn,co,cp) = makeString(["%b%d%d%d%b%d%b%s", toString(cn), toString(co._1), toString(co._2), toString(cp), cm[D], cm[E], cm[F], cm[G]], b)
360367
361368
362-func cn (cj) = makeString(["%b%d%d%d%b%d%b%s", cj[z], cj[A], cj[B], cj[C], "true", cj[E], cj[F], cj[G]], b)
369+func cq (cm) = makeString(["%b%d%d%d%b%d%b%s", cm[z], cm[A], cm[B], cm[C], "true", cm[E], cm[F], cm[G]], b)
363370
364371
365-func co (cp,be,bJ,as) = {
366- let bR = bz("")[bx]
367- let cq = 500000
368- StringEntry(aJ(lastBlock.timestamp), makeString(["%d%d%d%s%s%d", toString(cp), toString(bR), toString(cq), be, bJ, toString(as)], b))
372+func cr (cs,bf,bK,at) = {
373+ let bS = bA("")[by]
374+ let ct = 500000
375+ StringEntry(aK(lastBlock.timestamp), makeString(["%d%d%d%s%s%d", toString(cs), toString(bS), toString(ct), bf, bK, toString(at)], b))
369376 }
370377
371378
372-@Callable(aQ)
373-func constructorV1 (cr,cs,ct,cu,cv) = if ((aQ.caller != this))
379+@Callable(aR)
380+func constructorV1 (cu,cv,cw,cx,cy) = if ((aR.caller != this))
374381 then throw("Permission denied")
375- else [StringEntry(Z(), cr), IntegerEntry(an(), cs), IntegerEntry(am(), ct), IntegerEntry(ak("IDEA"), cu), IntegerEntry(ak("UPDATE"), cv)]
382+ else [StringEntry(Z(), cu), IntegerEntry(ao(), cv), IntegerEntry(an(), cw), IntegerEntry(al("IDEA"), cx), IntegerEntry(al("UPDATE"), cy)]
376383
377384
378385
379-@Callable(aQ)
380-func castVote (as,cw) = {
381- let cx = toString(aQ.caller)
382- let cy = split(H(this, ar(as)), b)
383- if ((cy[F] == "true"))
386+@Callable(aR)
387+func castVote (at,cz) = {
388+ let cA = toString(aR.caller)
389+ let cB = split(H(this, as(at)), b)
390+ if ((cB[F] == "true"))
384391 then throw("Voting is canceled by team")
385392 else {
386- let cz = split(H(this, at(as)), b)
387- let cA = parseIntValue(cz[u])
388- let cB = parseIntValue(cz[v])
389- let cC = lastBlock.timestamp
390- if ((cA > cC))
393+ let cC = split(H(this, au(at)), b)
394+ let cD = parseIntValue(cC[u])
395+ let cE = parseIntValue(cC[v])
396+ let cF = lastBlock.timestamp
397+ if ((cD > cF))
391398 then throw("Voting not started yet")
392- else if ((cC >= cB))
399+ else if ((cF >= cE))
393400 then throw("Voting already finished")
394401 else {
395- let cD = split(cz[y], c)
396- let cE = size(cD)
397- if ((1 >= cE))
402+ let cG = split(cC[y], c)
403+ let cH = size(cG)
404+ if ((1 >= cH))
398405 then throw("Too few choices to vote")
399- else if ((cw >= cE))
400- then throw(("Unknown choice! Must be 0.." + toString((cE - 1))))
406+ else if ((cz >= cH))
407+ then throw(("Unknown choice! Must be 0.." + toString((cH - 1))))
401408 else {
402- let bQ = bz(cx)
403- let cF = bQ[by]
404- if ((0 >= cF))
409+ let bR = bA(cA)
410+ let cI = bR[bz]
411+ if ((0 >= cI))
405412 then throw("no gnsbt to vote")
406413 else {
407- let bR = bQ[bx]
408- let cb = getInteger(ay(as, cx))
409- let cG = if (!(isDefined(cb)))
414+ let bS = bR[by]
415+ let ce = getInteger(az(at, cA))
416+ let cJ = if (!(isDefined(ce)))
410417 then 0
411- else K(aw(as, cx), 0)
412- let cH = if (isDefined(cb))
413- then K(au(as, value(cb)), 0)
418+ else K(ax(at, cA), 0)
419+ let cK = if (isDefined(ce))
420+ then K(av(at, value(ce)), 0)
414421 else 0
415- let cI = K(au(as, cw), 0)
416- let cJ = parseIntValue(cy[C])
417- let cK = if (!(isDefined(cb)))
422+ let cL = K(av(at, cz), 0)
423+ let cM = parseIntValue(cB[C])
424+ let cN = if (!(isDefined(ce)))
418425 then 0
419- else ((cH - cG) + (if ((value(cb) == cw))
420- then cF
426+ else ((cK - cJ) + (if ((value(ce) == cz))
427+ then cI
421428 else 0))
422- let ce = if (if (isDefined(cb))
423- then (value(cb) == cw)
429+ let ch = if (if (isDefined(ce))
430+ then (value(ce) == cz)
424431 else false)
425- then cK
426- else (cI + cF)
427- let cL = ((cJ - cG) + cF)
428- let cM = (cL >= parseIntValue(cz[x]))
429- let cN = K(aD(as), 0)
430- let cO = K(aE(), 0)
431- let cP = ((getIntegerValue(ao()) - valueOrElse(getInteger(ap()), n)) + 1)
432- let cQ = if ((cG == 0))
432+ then cN
433+ else (cL + cI)
434+ let cO = ((cM - cJ) + cI)
435+ let cP = (cO >= parseIntValue(cC[x]))
436+ let cQ = K(aE(at), 0)
437+ let cR = K(aF(), 0)
438+ let cS = ((getIntegerValue(ap()) - valueOrElse(getInteger(aq()), n)) + 1)
439+ let cT = if ((cJ == 0))
433440 then 1
434441 else 0
435- let cR = (cO + fraction(cQ, i, cP))
436- let cS = K(aF(), 0)
437- let cT = (cS + ((cF - cG) / cP))
438- let ca = if (!(isDefined(cb)))
442+ let cU = (cR + fraction(cT, i, cS))
443+ let cV = K(aG(), 0)
444+ let cW = (cV + ((cI - cJ) / cS))
445+ let cd = if (!(isDefined(ce)))
439446 then true
440- else (value(cb) == cw)
441- let cc = if (ca)
447+ else (value(ce) == cz)
448+ let cf = if (cd)
442449 then nil
443- else [IntegerEntry(au(as, value(cb)), cK)]
444- let cU = bZ(as, cD, ca, cb, cK, cw, ce)
445- let cV = max([cB, K(aC(cx), 0)])
446- $Tuple2(([IntegerEntry(ay(as, cx), cw), IntegerEntry(aw(as, cx), cF), IntegerEntry(au(as, cw), ce), IntegerEntry(aD(as), (cN + cQ)), IntegerEntry(aC(cx), cV), IntegerEntry(aE(), cR), IntegerEntry(aF(), cT), StringEntry(ar(as), ci(cy, cM, cU, cL))] ++ cc), unit)
450+ else [IntegerEntry(av(at, value(ce)), cN)]
451+ let cX = cc(at, cG, cd, ce, cN, cz, ch)
452+ let cY = max([cE, K(aD(cA), 0)])
453+ $Tuple2(([IntegerEntry(az(at, cA), cz), IntegerEntry(ax(at, cA), cI), IntegerEntry(av(at, cz), ch), IntegerEntry(aE(at), (cQ + cT)), IntegerEntry(aD(cA), cY), IntegerEntry(aF(), cU), IntegerEntry(aG(), cW), StringEntry(as(at), cl(cB, cP, cX, cO))] ++ cf), unit)
447454 }
448455 }
449456 }
450457 }
451458 }
452459
453460
454461
455-@Callable(aQ)
456-func initiateIdeaVoting (bd,be,bg,bh,bO) = if ((size(aQ.payments) != 1))
462+@Callable(aR)
463+func initiateIdeaVoting (be,bf,bh,bi,bP) = if ((size(aR.payments) != 1))
457464 then throw("Exactly one payment required")
458- else if ((size(bO) != 2))
465+ else if ((size(bP) != 2))
459466 then throw("Exactly 2 option ['NO', 'YES'] are expected")
460- else if ((bO[0] != "NO"))
467+ else if ((bP[0] != "NO"))
461468 then throw("Option NO should be the first")
462- else if ((bO[1] != "YES"))
469+ else if ((bP[1] != "YES"))
463470 then throw("Option YES should be the second")
464- else bL(value(aQ.payments[0]), toBase58String(aQ.transactionId), "IDEA", toString(aQ.caller), bd, be, bg, bh, "PENDING", nil, bO)
471+ else bM(value(aR.payments[0]), toBase58String(aR.transactionId), "IDEA", toString(aR.caller), be, bf, bh, bi, "PENDING", nil, bP)
465472
466473
467474
468-@Callable(aQ)
469-func initiateUpdateVoting (bd,be,bg,bh,bm) = if ((size(aQ.payments) != 1))
475+@Callable(aR)
476+func initiateUpdateVoting (be,bf,bh,bi,bn) = if ((size(aR.payments) != 1))
470477 then throw("Exactly one payment required")
471- else if ((1 > size(bm)))
478+ else if ((1 > size(bn)))
472479 then throw("Transactions list is empty")
473- else if ((aQ.caller != this))
480+ else if ((aR.caller != this))
474481 then throw("not authorized")
475- else bL(value(aQ.payments[0]), toBase58String(aQ.transactionId), "UPDATE", toString(aQ.caller), bd, be, bg, bh, "PENDING", bm, ["NO", "YES"])
482+ else bM(value(aR.payments[0]), toBase58String(aR.transactionId), "UPDATE", toString(aR.caller), be, bf, bh, bi, "PENDING", bn, ["NO", "YES"])
476483
477484
478485
479-@Callable(aQ)
480-func cancelVoting (as) = if ((aQ.caller != this))
486+@Callable(aR)
487+func cancelVoting (at) = if ((aR.caller != this))
481488 then throw("not authorized")
482489 else {
483- let cW = H(this, ar(as))
484- let cX = ((take(cW, value(lastIndexOf(cW, b))) + b) + "true")
485- $Tuple2([StringEntry(ar(as), cX)], unit)
490+ let cZ = H(this, as(at))
491+ let da = ((take(cZ, value(lastIndexOf(cZ, b))) + b) + "true")
492+ $Tuple2([StringEntry(as(at), da)], unit)
486493 }
487494
488495
489496
490-@Callable(aQ)
491-func applyUpdate (as) = {
492- let cz = split(H(this, at(as)), b)
493- let cB = parseIntValue(cz[v])
494- let cC = lastBlock.timestamp
495- if ((cB > cC))
497+@Callable(aR)
498+func applyUpdate (at) = {
499+ let cC = split(H(this, au(at)), b)
500+ let cE = parseIntValue(cC[v])
501+ let cF = lastBlock.timestamp
502+ if ((cE > cF))
496503 then throw("Voting is not finished yet")
497- else if (("UPDATE" != cz[p]))
504+ else if (("UPDATE" != cC[p]))
498505 then throw("Only UPDATE type can be applied")
499506 else {
500- let cy = split(H(this, ar(as)), b)
501- if ((cy[F] == "true"))
507+ let cB = split(H(this, as(at)), b)
508+ if ((cB[F] == "true"))
502509 then throw("Voting is canceled")
503- else if ((cy[z] != "true"))
510+ else if ((cB[z] != "true"))
504511 then throw("Voting status invalid")
505- else if ((cy[A] != "1"))
512+ else if ((cB[A] != "1"))
506513 then throw("Winner is 'NO' - nothing to apply")
507- else if ((cy[D] == "true"))
514+ else if ((cB[D] == "true"))
508515 then throw("Scripts are already applied")
509516 else {
510- let cY = parseIntValue(cy[E])
511- if (((cC - l) > cY))
512- then throw((("Scripts timestamp=" + toString(cY)) + " is too far in the past, max 2 hrs allowed"))
513- else if ((cY > (cC + m)))
514- then throw((("Scripts timestamp=" + toString(cY)) + " is too far in the future, max 1.5 hrs allowed"))
517+ let db = parseIntValue(cB[E])
518+ if (((cF - l) > db))
519+ then throw((("Scripts timestamp=" + toString(db)) + " is too far in the past, max 2 hrs allowed"))
520+ else if ((db > (cF + m)))
521+ then throw((("Scripts timestamp=" + toString(db)) + " is too far in the future, max 1.5 hrs allowed"))
515522 else {
516- let cZ = K(az(), -1)
517- if ((cZ != -1))
518- then throw((("proposalId=" + toString(cZ)) + " is already being applied. Finish it first!"))
523+ let dc = K(aA(), -1)
524+ if ((dc != -1))
525+ then throw((("proposalId=" + toString(dc)) + " is already being applied. Finish it first!"))
519526 else {
520- let da = invoke(ag, "callEmergencyShutdown", ["Applying Governance UPDATE"], nil)
521- if ((da == da))
522- then $Tuple2([IntegerEntry(az(), as)], unit)
527+ let dd = invoke(ag, "callEmergencyShutdown", ["Applying Governance UPDATE"], nil)
528+ if ((dd == dd))
529+ then $Tuple2([IntegerEntry(aA(), at)], unit)
523530 else throw("Strict value is not equal to itself.")
524531 }
525532 }
526533 }
527534 }
528535 }
529536
530537
531538
532-@Callable(aQ)
539+@Callable(aR)
533540 func finishApply () = {
534- let as = valueOrErrorMessage(getInteger(az()), "No apply in progress, nothing to finish")
535- let cz = split(H(this, at(as)), b)
536- let bm = split(cz[w], c)
537- let cy = split(H(this, ar(as)), b)
538- if ((cy[D] == "true"))
541+ let at = valueOrErrorMessage(getInteger(aA()), "No apply in progress, nothing to finish")
542+ let cC = split(H(this, au(at)), b)
543+ let bn = split(cC[w], c)
544+ let cB = split(H(this, as(at)), b)
545+ if ((cB[D] == "true"))
539546 then throw("Scripts are already applied")
540547 else {
541- func db (bo,bp) = if (!(isDefined(transactionHeightById(fromBase58String(bp)))))
542- then throw(("NOT applied txId: " + bp))
548+ func de (bp,bq) = if (!(isDefined(transactionHeightById(fromBase58String(bq)))))
549+ then throw(("NOT applied txId: " + bq))
543550 else unit
544551
545- let dc = {
546- let bq = bm
547- let br = size(bq)
548- let bs = unit
549- func bt (bu,bv) = if ((bv >= br))
550- then bu
551- else db(bu, bq[bv])
552+ let df = {
553+ let br = bn
554+ let bs = size(br)
555+ let bt = unit
556+ func bu (bv,bw) = if ((bw >= bs))
557+ then bv
558+ else de(bv, br[bw])
552559
553- func bw (bu,bv) = if ((bv >= br))
554- then bu
560+ func bx (bv,bw) = if ((bw >= bs))
561+ then bv
555562 else throw("List size exceeds 20")
556563
557- bw(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bs, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
564+ bx(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bu(bt, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
558565 }
559- let dd = (K(aq(), 0) + 1)
560- $Tuple2([DeleteEntry(az()), IntegerEntry(aq(), dd), StringEntry(ar(as), cn(cy)), co(dd, cz[s], cz[r], as)], dc)
566+ let dg = (K(ar(), 0) + 1)
567+ $Tuple2([DeleteEntry(aA()), IntegerEntry(ar(), dg), StringEntry(as(at), cq(cB)), cr(dg, cC[s], cC[r], at)], df)
561568 }
562569 }
563570
564571
565572
566-@Callable(aQ)
567-func changeImplStatus (as,de) = if ((aQ.caller != this))
573+@Callable(aR)
574+func changeImplStatus (at,dh) = if ((aR.caller != this))
568575 then throw("not authorized")
569- else if (if ((de != "ACTIVE"))
570- then (de != "OUTDATED")
576+ else if (if ((dh != "ACTIVE"))
577+ then (dh != "OUTDATED")
571578 else false)
572579 then throw("Unknown implementation status")
573580 else {
574- let cy = split(H(this, ar(as)), b)
575- let df = makeString(["%b%d%d%d%b%d%b%s", cy[z], cy[A], cy[B], cy[C], cy[D], cy[E], cy[F], de], b)
576- $Tuple2([StringEntry(ar(as), df)], unit)
581+ let cB = split(H(this, as(at)), b)
582+ let di = makeString(["%b%d%d%d%b%d%b%s", cB[z], cB[A], cB[B], cB[C], cB[D], cB[E], cB[F], dh], b)
583+ $Tuple2([StringEntry(as(at), di)], unit)
577584 }
578585
579586

github/deemru/w8io/873ac7e 
241.87 ms