tx · 54wS4axAjpc1ynRcuyfVNHfJCpfKCw7WQLhvQdgs24Jc

3PBLPmkM3ThytNj6QeJyLTX154if8S6Cea5:  -0.02300000 Waves

2023.11.20 15:26 [3917582] smart account 3PBLPmkM3ThytNj6QeJyLTX154if8S6Cea5 > SELF 0.00000000 Waves

{ "type": 13, "id": "54wS4axAjpc1ynRcuyfVNHfJCpfKCw7WQLhvQdgs24Jc", "fee": 2300000, "feeAssetId": null, "timestamp": 1700483220769, "version": 1, "sender": "3PBLPmkM3ThytNj6QeJyLTX154if8S6Cea5", "senderPublicKey": "4EgWP2ePsBhKdAXQtnLEV8kwUiDaJmz4McAiVAS4CVjo", "proofs": [ "323QwCmgT4qxY1qWtky6x26ViLHBsY232SV9K3kpGTcnwmHPWNiXbDypVH7GHMGVUmgdtJJM99mtZAPoJmeqZGSe" ], "script": "base64:BgJ4CAISDAoKCAEBAQEBAQgICBIECgIIARIECgIICBIECgIICBIECgIICBIFCgMICAESAwoBCBIDCgEIEgMKAQgSBQoDCAEBEgMKAQgSBAoCCAESBAoCCAgSAwoBCBIDCgEIEgQKAggIEgQKAggIEgMKAQgSAwoBCBIAOQEQd3JpdGVDb25zdFN0cmluZwIDa2V5BXZhbHVlAwkBASEBCQEJaXNEZWZpbmVkAQkAnQgCBQR0aGlzBQNrZXkJAQtTdHJpbmdFbnRyeQIFA2tleQUFdmFsdWUJAAIBCQCsAgICFWFscmVhZHkgaW5pdGlhbGl6ZWQ6IAUDa2V5AQh3cml0ZUludAIDa2V5BXZhbHVlAwkAZgIAAAUFdmFsdWUJAAIBCQCsAgIJAKwCAgkArAICAhd3cml0aW5nIG5lZ2F0aXZlIHZhbHVlIAkApAMBBQV2YWx1ZQIJIGZvciBrZXkgBQNrZXkJAQxJbnRlZ2VyRW50cnkCBQNrZXkFBXZhbHVlAQhjaGFuZ2VCeQIDa2V5BXZhbHVlCQEId3JpdGVJbnQCBQNrZXkJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFA2tleQAABQV2YWx1ZQEFYXNJbnQBBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAgNJbnQEA2ludAUHJG1hdGNoMAUDaW50CQACAQIZd3JvbmcgdHlwZSwgZXhwZWN0ZWQ6IEludAEHYXNzZXRJZAEDc3RyAwkAAAIFA3N0cgIFV0FWRVMFBHVuaXQJANkEAQUDc3RyABJjb25maWdBZGRyZXNzU3RvcmUCBmNvbmZpZwANY29uZmlnQWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBRJjb25maWdBZGRyZXNzU3RvcmUCImNoaWxkcmVuOiBjb25maWcgYWRkcmVzcyBub3QgZm91bmQCFmludmFsaWQgY29uZmlnIGFkZHJlc3MBB2FsbG93ZWQBAm9wCQD8BwQFDWNvbmZpZ0FkZHJlc3MCCW9wQWxsb3dlZAkAzAgCBQJvcAUDbmlsBQNuaWwABkhFSUdIVAUGaGVpZ2h0AApwd3JBc3NldElkCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ1jb25maWdBZGRyZXNzAgxwb3dlckFzc2V0SWQCFnB3ciBhc3NldCBpZCBub3QgZm91bmQACHNsYXNoZXJzCQELdmFsdWVPckVsc2UCCQCdCAIFDWNvbmZpZ0FkZHJlc3MJAKwCAgkApQgBBQR0aGlzAglfc2xhc2hlcnMCAAANbWFpbkFkZHJlc3NlcwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ1jb25maWdBZGRyZXNzAg5tYWluX2FkZHJlc3NlcwIAAQtwZXJpb2RTdG9yZQEFY2hpbGQJAKwCAgIHcGVyaW9kXwUFY2hpbGQBBnBlcmlvZAEFY2hpbGQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBC3BlcmlvZFN0b3JlAQUFY2hpbGQAAAEKb3duZXJTdG9yZQEFY2hpbGQJAKwCAgIGb3duZXJfBQVjaGlsZAENdHJlYXN1cnlTdG9yZQEFY2hpbGQJAKwCAgIJdHJlYXN1cnlfBQVjaGlsZAENbG9ja1RpbWVTdG9yZQEFY2hpbGQJAKwCAgIJbG9ja1RpbWVfBQVjaGlsZAETcGVyaW9kTG9ja1RpbWVTdG9yZQIFY2hpbGQGcGVyaW9kCQCsAgIJAKwCAgkArAICAgdwZXJpb2RfCQCkAwEFBnBlcmlvZAIKX2xvY2tUaW1lXwUFY2hpbGQBEXNraW5SZXF1aXJlZFN0b3JlAQVjaGlsZAkArAICAg5za2luX3JlcXVpcmVkXwUFY2hpbGQBDHNraW5NYXhTdG9yZQEFY2hpbGQJAKwCAgIJc2tpbl9tYXhfBQVjaGlsZAETaW52ZXN0bWVudHNNYXhTdG9yZQEFY2hpbGQJAKwCAgIQaW52ZXN0bWVudHNfbWF4XwUFY2hpbGQBEm1pbkNvbW1pdG1lbnRTdG9yZQEFY2hpbGQJAKwCAgIObWluX2NvbW1pdG1lbnQFBWNoaWxkAQ5za2luVG90YWxTdG9yZQEFY2hpbGQJAKwCAgILc2tpbl90b3RhbF8FBWNoaWxkAA1wd3JUb3RhbFN0b3JlAglwd3JfdG90YWwBGGludmVzdG1lbnRzUmVxdWlyZWRTdG9yZQEFY2hpbGQJAKwCAgIVaW52ZXN0bWVudHNfcmVxdWlyZWRfBQVjaGlsZAEVaW52ZXN0bWVudHNUb3RhbFN0b3JlAQVjaGlsZAkArAICAhJpbnZlc3RtZW50c190b3RhbF8FBWNoaWxkARtpbnZlc3RtZW50c1BlcmlvZFRvdGFsU3RvcmUBBWNoaWxkCQCsAgIJAKwCAgkArAICAgdwZXJpb2RfCQCkAwEJAQZwZXJpb2QBBQVjaGlsZAITX2ludmVzdG1lbnRzX3RvdGFsXwUFY2hpbGQBFWludmVzdG1lbnRzVG9rZW5TdG9yZQEFY2hpbGQJAKwCAgISaW52ZXN0bWVudHNfdG9rZW5fBQVjaGlsZAEQY29tbWl0bWVudHNTdG9yZQEFY2hpbGQJAKwCAgIMY29tbWl0bWVudHNfBQVjaGlsZAERY3JlYXRlSGVpZ2h0U3RvcmUBBWNoaWxkCQCsAgICDmNyZWF0ZV9oZWlnaHRfBQVjaGlsZAEQc3RhcnRIZWlnaHRTdG9yZQEFY2hpbGQJAKwCAgINc3RhcnRfaGVpZ2h0XwUFY2hpbGQBFnN0YXJ0UGVyaW9kSGVpZ2h0U3RvcmUCBWNoaWxkBnBlcmlvZAkArAICCQCsAgIJAKwCAgIHcGVyaW9kXwkApAMBBQZwZXJpb2QCDl9zdGFydF9oZWlnaHRfBQVjaGlsZAEbc3RhcnRQZXJpb2RBZnRlckhlaWdodFN0b3JlAgVjaGlsZAZwZXJpb2QJAKwCAgkArAICCQCsAgICB3BlcmlvZF8JAKQDAQUGcGVyaW9kAhRfc3RhcnRfYWZ0ZXJfaGVpZ2h0XwUFY2hpbGQBHXN0YXJ0Q3VycmVudFBlcmlvZEhlaWdodFN0b3JlAQVjaGlsZAkBFnN0YXJ0UGVyaW9kSGVpZ2h0U3RvcmUCBQVjaGlsZAkBBnBlcmlvZAEFBWNoaWxkARFjYW5jZWxIZWlnaHRTdG9yZQEFY2hpbGQJAKwCAgIOY2FuY2VsX2hlaWdodF8FBWNoaWxkARBpbnZlc3RtZW50c1Rva2VuAQVjaGlsZAkBB2Fzc2V0SWQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWludmVzdG1lbnRzVG9rZW5TdG9yZQEFBWNoaWxkAh5pbnZlc3RtZW50cyBhc3NldCBpZCBub3QgZm91bmQBDXVzZXJTa2luU3RvcmUCBWNoaWxkBHVzZXIJAKwCAgkArAICCQCsAgICBXNraW5fBQVjaGlsZAIBXwUEdXNlcgEZdXNlclNraW5VbmxvY2tQZXJpb2RTdG9yZQIFY2hpbGQEdXNlcgkArAICCQCsAgIJAKwCAgITc2tpbl91bmxvY2tfcGVyaW9kXwUFY2hpbGQCAV8FBHVzZXIBG3VzZXJTa2luRXhpdGVkSW5QZXJpb2RTdG9yZQMFY2hpbGQEdXNlcgZwZXJpb2QJAKwCAgkArAICCQCsAgIJAQ11c2VyU2tpblN0b3JlAgUFY2hpbGQFBHVzZXICCF9wZXJpb2RfCQCkAwEFBnBlcmlvZAIHX2V4aXRlZAENaW52ZXN0b3JTdG9yZQIFY2hpbGQIaW52ZXN0b3IJAKwCAgkArAICCQCsAgICCWludmVzdG9yXwUFY2hpbGQCAV8FCGludmVzdG9yARljb21taXRBZnRlckFkZHJlc3Nlc1N0b3JlAQVjaGlsZAkArAICAhdjb21taXRfYWZ0ZXJfYWRkcmVzc2VzXwUFY2hpbGQBFWludmVzdEFmdGVyU3RhcnRTdG9yZQEFY2hpbGQJAKwCAgIXY2FuX2ludmVzdF9hZnRlcl9zdGFydF8FBWNoaWxkARBhc3NlcnROb3RTdGFydGVkAQVjaGlsZAMJAQlpc0RlZmluZWQBCQCfCAEJARBzdGFydEhlaWdodFN0b3JlAQUFY2hpbGQJAAIBAg9hbHJlYWR5IHN0YXJ0ZWQHAQ9hc3NlcnRJc1N0YXJ0ZWQBBWNoaWxkAwkAAAIJAQlpc0RlZmluZWQBCQCfCAEJARBzdGFydEhlaWdodFN0b3JlAQUFY2hpbGQHCQACAQIPbm90IHlldCBzdGFydGVkBwESYXNzZXJ0Tm90Q2FuY2VsbGVkAQVjaGlsZAMJAQlpc0RlZmluZWQBCQCfCAEJARFjYW5jZWxIZWlnaHRTdG9yZQEFBWNoaWxkCQACAQIQYWxyZWFkeSBjYW5jZWxlZAcBFmFzc2VydE5vdFN0YXJ0ZWRQZXJpb2QBBWNoaWxkAwkAAAIJAQZwZXJpb2QBBQVjaGlsZAAACQEQYXNzZXJ0Tm90U3RhcnRlZAEFBWNoaWxkAwkBCWlzRGVmaW5lZAEJAJ8IAQkBHXN0YXJ0Q3VycmVudFBlcmlvZEhlaWdodFN0b3JlAQUFY2hpbGQJAAIBAhZwZXJpb2QgYWxyZWFkeSBzdGFydGVkBwEOdXNlckNvbW1pdG1lbnQCBWNoaWxkBHVzZXIJAJ8IAQkBDXVzZXJTa2luU3RvcmUCBQVjaGlsZAUEdXNlcgEPY3VycmVudFVzZXJTa2luAgVjaGlsZAR1c2VyCQELdmFsdWVPckVsc2UCCQEOdXNlckNvbW1pdG1lbnQCBQVjaGlsZAUEdXNlcgAAAQhsb2NrVGltZQIFY2hpbGQGcGVyaW9kCQELdmFsdWVPckVsc2UCCQCfCAEJARNwZXJpb2RMb2NrVGltZVN0b3JlAgUFY2hpbGQFBnBlcmlvZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEJAQ1sb2NrVGltZVN0b3JlAQUFY2hpbGQCEW5vIGNoaWxkIGxvY2tUaW1lAQ9jb21wbGV0ZWRQZXJpb2QBBWNoaWxkBAFwCQEGcGVyaW9kAQUFY2hpbGQDCQAAAgUBcAAAAAAEC3BlcmlvZFN0YXJ0CQCfCAEJARZzdGFydFBlcmlvZEhlaWdodFN0b3JlAgUFY2hpbGQFAXADCQEJaXNEZWZpbmVkAQULcGVyaW9kU3RhcnQFAXAJAGUCBQFwAAEBDHVubG9ja0hlaWdodAEFY2hpbGQEAXAJAQ9jb21wbGV0ZWRQZXJpb2QBBQVjaGlsZAQKY2hpbGRTdGFydAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEJARBzdGFydEhlaWdodFN0b3JlAQUFY2hpbGQCFW5vIGNoaWxkIHN0YXJ0IGhlaWdodAkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFnN0YXJ0UGVyaW9kSGVpZ2h0U3RvcmUCBQVjaGlsZAUBcAUKY2hpbGRTdGFydAkBCGxvY2tUaW1lAgUFY2hpbGQFAXABCHRyZWFzdXJ5AQVjaGlsZAkBC3ZhbHVlT3JFbHNlAgkAoggBCQENdHJlYXN1cnlTdG9yZQEFBWNoaWxkBQVjaGlsZAEDaW50AQNrZXkJAKQDAQkBC3ZhbHVlT3JFbHNlAgkAnwgBBQNrZXkAAAEDc3RyAQNrZXkJAQt2YWx1ZU9yRWxzZQIJAKIIAQUDa2V5AgABDWFkdmlzZVByb2plY3QBBWNoaWxkBAFwCQEGcGVyaW9kAQUFY2hpbGQECXBlcmlvZFN0cgkApAMBBQFwCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAghoZWlnaHQ6IAkApAMBBQZIRUlHSFQCCywgcHJvamVjdDogBQVjaGlsZAIJLCBvd25lcjogCQEDc3RyAQkBCm93bmVyU3RvcmUBBQVjaGlsZAIMLCB0cmVhc3VyeTogCQEIdHJlYXN1cnkBBQVjaGlsZAINLCBsb2NrX3RpbWU6IAkBA2ludAEJAQ1sb2NrVGltZVN0b3JlAQUFY2hpbGQCESwgc2tpbl9yZXF1aXJlZDogCQEDaW50AQkBEXNraW5SZXF1aXJlZFN0b3JlAQUFY2hpbGQCDCwgc2tpbl9tYXg6IAkBA2ludAEJAQxza2luTWF4U3RvcmUBBQVjaGlsZAISLCBtaW5fY29tbWl0bWVudDogCQEDaW50AQkBEm1pbkNvbW1pdG1lbnRTdG9yZQEFBWNoaWxkAg4sIHNraW5fdG90YWw6IAkBA2ludAEJAQ5za2luVG90YWxTdG9yZQEFBWNoaWxkAhgsIGludmVzdG1lbnRzX3JlcXVpcmVkOiAJAQNpbnQBCQEYaW52ZXN0bWVudHNSZXF1aXJlZFN0b3JlAQUFY2hpbGQCEywgaW52ZXN0bWVudHNfbWF4OiAJAQNpbnQBCQETaW52ZXN0bWVudHNNYXhTdG9yZQEFBWNoaWxkAhUsIGludmVzdG1lbnRzX3RvdGFsOiAJAQNpbnQBCQEVaW52ZXN0bWVudHNUb3RhbFN0b3JlAQUFY2hpbGQCFSwgaW52ZXN0bWVudHNfdG9rZW46IAkBA3N0cgEJARVpbnZlc3RtZW50c1Rva2VuU3RvcmUBBQVjaGlsZAIPLCBjb21taXRtZW50czogCQEDc3RyAQkBEGNvbW1pdG1lbnRzU3RvcmUBBQVjaGlsZAIRLCBjcmVhdGVfaGVpZ2h0OiAJAQNpbnQBCQERY3JlYXRlSGVpZ2h0U3RvcmUBBQVjaGlsZAIQLCBzdGFydF9oZWlnaHQ6IAkApAMBCQELdmFsdWVPckVsc2UCCQCfCAEJARBzdGFydEhlaWdodFN0b3JlAQUFY2hpbGQA////////////AQIRLCBjYW5jZWxfaGVpZ2h0OiAJAKQDAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQERY2FuY2VsSGVpZ2h0U3RvcmUBBQVjaGlsZAD///////////8BAgosIHBlcmlvZDogBQlwZXJpb2RTdHICCSwgcGVyaW9kXwUJcGVyaW9kU3RyAhVfc3RhcnRfYWZ0ZXJfaGVpZ2h0OiAJAKQDAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEbc3RhcnRQZXJpb2RBZnRlckhlaWdodFN0b3JlAgUFY2hpbGQFAXAA////////////AQIJLCBwZXJpb2RfBQlwZXJpb2RTdHICD19zdGFydF9oZWlnaHQ6IAkApAMBCQELdmFsdWVPckVsc2UCCQCfCAEJAR1zdGFydEN1cnJlbnRQZXJpb2RIZWlnaHRTdG9yZQEFBWNoaWxkAP///////////wECCSwgcGVyaW9kXwUJcGVyaW9kU3RyAgxfbG9ja190aW1lOiAJAKQDAQkBCGxvY2tUaW1lAgUFY2hpbGQFAXACESwgdW5sb2NrX2hlaWdodDogCQCkAwEJAQx1bmxvY2tIZWlnaHQBBQVjaGlsZAIcLCBwZXJpb2RfaW52ZXN0bWVudHNfdG90YWw6IAkBA2ludAEJARtpbnZlc3RtZW50c1BlcmlvZFRvdGFsU3RvcmUBBQVjaGlsZAERYWR2aXNlVXNlclByb2plY3QCBWNoaWxkBHVzZXIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCGhlaWdodDogCQCkAwEFBkhFSUdIVAILLCBwcm9qZWN0OiAFBWNoaWxkAgcsIHNraW46CQCkAwEJAQ9jdXJyZW50VXNlclNraW4CBQVjaGlsZAUEdXNlcgIILCBwb3dlcjoJAKQDAQkBC3ZhbHVlT3JFbHNlAgkBDnVzZXJDb21taXRtZW50AgUFY2hpbGQFBHVzZXIAAAIPLCBpbnZlc3RtZW50czogCQEDaW50AQkBDWludmVzdG9yU3RvcmUCBQVjaGlsZAUEdXNlcgEbY29tbWl0QWZ0ZXJTdGFydEZvckludGVybmFsBAFpBWNoaWxkB2FkZHJlc3MUYWRkaXRpb25hbExvY2tSb3VuZHMEAWEJAQdhbGxvd2VkAQITY29tbWl0QWZ0ZXJTdGFydEZvcgMJAAACBQFhBQFhAwkAZgIAAAUUYWRkaXRpb25hbExvY2tSb3VuZHMJAAIBAhxpbnZhbGlkIGFkZGl0aW9uYWxMb2NrUm91bmRzAwkBASEBCQEIY29udGFpbnMCCQELdmFsdWVPckVsc2UCCQCiCAEJARljb21taXRBZnRlckFkZHJlc3Nlc1N0b3JlAQUFY2hpbGQCAAkApQgBCAUBaQZjYWxsZXIJAAIBAiNjb21taXRBZnRlclN0YXJ0Rm9ySW50ZXJuYWwuIGRlbmllZAQBcAkAkQMCCAUBaQhwYXltZW50cwAAAwMJAQIhPQIIBQFwB2Fzc2V0SWQFCnB3ckFzc2V0SWQGCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAippbnZhbGlkIHBheW1lbnRzOiBvbmx5ICRQV1IgdG9rZW4gZXhwZWN0ZWQECmNvbW1pdG1lbnQIBQFwBmFtb3VudAQEY21kcwkAzAgCCQEIY2hhbmdlQnkCCQENdXNlclNraW5TdG9yZQIFBWNoaWxkBQdhZGRyZXNzBQpjb21taXRtZW50CQDMCAIJAQhjaGFuZ2VCeQIJAQ5za2luVG90YWxTdG9yZQEFBWNoaWxkBQpjb21taXRtZW50CQDMCAIJAQhjaGFuZ2VCeQIFDXB3clRvdGFsU3RvcmUFCmNvbW1pdG1lbnQFA25pbAMJAGYCBRRhZGRpdGlvbmFsTG9ja1JvdW5kcwAABAt1bmxvY2tSb3VuZAkAZAIJAQZwZXJpb2QBBQVjaGlsZAUUYWRkaXRpb25hbExvY2tSb3VuZHMJAMwIAgkBDEludGVnZXJFbnRyeQIJARl1c2VyU2tpblVubG9ja1BlcmlvZFN0b3JlAgUFY2hpbGQFB2FkZHJlc3MFC3VubG9ja1JvdW5kBQRjbWRzBQRjbWRzCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuFAFpAQpwcm9qZWN0Rm9yCgVvd25lcgRza2luB21heFNraW4NbWluQ29tbWl0bWVudAhsb2NrVGltZQtpbnZlc3RtZW50cw5tYXhJbnZlc3RtZW50cxBpbnZlc3RtZW50c1Rva2VuC2NvbW1pdG1lbnRzBWNoaWxkBAFhCQEHYWxsb3dlZAECCnByb2plY3RGb3IDCQAAAgUBYQUBYQMJAQEhAQkBCGNvbnRhaW5zAgUNbWFpbkFkZHJlc3NlcwkApQgBCAUBaQZjYWxsZXIJAAIBAgZkZW5pZWQEAXQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQVjaGlsZAIYaW52YWxpZCB0cmVhc3VyeSBhZGRyZXNzAwkAAAIFAXQFAXQEBXRva2VuCQEHYXNzZXRJZAEFEGludmVzdG1lbnRzVG9rZW4DCQAAAgUFdG9rZW4FBXRva2VuAwMJAGYCBQdtYXhTa2luAAAJAGYCBQRza2luBQdtYXhTa2luBwkAAgECD2ludmFsaWQgbWF4U2tpbgMDCQBmAgUObWF4SW52ZXN0bWVudHMAAAkAZgIFC2ludmVzdG1lbnRzBQ5tYXhJbnZlc3RtZW50cwcJAAIBAhZpbnZhbGlkIG1heEludmVzdG1lbnRzCQDMCAIJARB3cml0ZUNvbnN0U3RyaW5nAgkBCm93bmVyU3RvcmUBBQVjaGlsZAUFb3duZXIJAMwIAgkBCHdyaXRlSW50AgkBEWNyZWF0ZUhlaWdodFN0b3JlAQUFY2hpbGQFBkhFSUdIVAkAzAgCCQEId3JpdGVJbnQCCQERc2tpblJlcXVpcmVkU3RvcmUBBQVjaGlsZAUEc2tpbgkAzAgCCQEId3JpdGVJbnQCCQEMc2tpbk1heFN0b3JlAQUFY2hpbGQFB21heFNraW4JAMwIAgkBCHdyaXRlSW50AgkBEm1pbkNvbW1pdG1lbnRTdG9yZQEFBWNoaWxkBQ1taW5Db21taXRtZW50CQDMCAIJAQh3cml0ZUludAIJAQ1sb2NrVGltZVN0b3JlAQUFY2hpbGQFCGxvY2tUaW1lCQDMCAIJAQh3cml0ZUludAIJARhpbnZlc3RtZW50c1JlcXVpcmVkU3RvcmUBBQVjaGlsZAULaW52ZXN0bWVudHMJAMwIAgkBEHdyaXRlQ29uc3RTdHJpbmcCCQEVaW52ZXN0bWVudHNUb2tlblN0b3JlAQUFY2hpbGQFEGludmVzdG1lbnRzVG9rZW4JAMwIAgkBEHdyaXRlQ29uc3RTdHJpbmcCCQEQY29tbWl0bWVudHNTdG9yZQEFBWNoaWxkBQtjb21taXRtZW50cwkAzAgCCQEQd3JpdGVDb25zdFN0cmluZwIJAQ10cmVhc3VyeVN0b3JlAQUFY2hpbGQFBWNoaWxkCQDMCAIJAQh3cml0ZUludAIJARNpbnZlc3RtZW50c01heFN0b3JlAQUFY2hpbGQFDm1heEludmVzdG1lbnRzBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQENaW5jcmVyYXNlU2tpbgIFY2hpbGQNc2tpbkluY3JlbWVudAQBYQkBB2FsbG93ZWQBAg1pbmNyZXJhc2VTa2luAwkAAAIFAWEFAWEEAXMDCQEQYXNzZXJ0Tm90U3RhcnRlZAEFBWNoaWxkCQESYXNzZXJ0Tm90Q2FuY2VsbGVkAQUFY2hpbGQHAwkAAAIFAXMFAXMDCQBnAgAABQ1za2luSW5jcmVtZW50CQACAQIyaW52YWxpZCBhcmd1bWVudDogc2tpbkluY3JlbWVudCBzaG91bGQgYmUgcG9zaXRpdmUEBW93bmVyCQERQGV4dHJOYXRpdmUoMTA1OCkBCQEKb3duZXJTdG9yZQEFBWNoaWxkAwkBAiE9AgkApQgBCAUBaQZjYWxsZXIFBW93bmVyCQACAQIGZGVuaWVkCQDMCAIJAQhjaGFuZ2VCeQIJARFza2luUmVxdWlyZWRTdG9yZQEFBWNoaWxkBQ1za2luSW5jcmVtZW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEJY29tbWl0Rm9yAgVjaGlsZAdhZGRyZXNzBAFhCQEHYWxsb3dlZAECCWNvbW1pdEZvcgMJAAACBQFhBQFhBAFzCQEWYXNzZXJ0Tm90U3RhcnRlZFBlcmlvZAEFBWNoaWxkAwkAAAIFAXMFAXMEAXAJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQFwB2Fzc2V0SWQFCnB3ckFzc2V0SWQJAAIBAi9pbnZhbGlkIGF0dGFjaGVkIHBheW1lbnQ6ICRwb3dlciB0b2tlbiBleHBlY3RlZAQKY29tbWl0bWVudAgFAXAGYW1vdW50BA1taW5Db21taXRtZW50CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQkBEm1pbkNvbW1pdG1lbnRTdG9yZQEFBWNoaWxkAhNDaGlsZCBEQU8gbm90IGZvdW5kAwkAZgIFDW1pbkNvbW1pdG1lbnQFCmNvbW1pdG1lbnQJAAIBCQCsAgICE01pbi4gY29tbWl0bWVudCBpcyAJAKQDAQUNbWluQ29tbWl0bWVudAQPc2tpblRvdGFsU3RvcmUxCQEOc2tpblRvdGFsU3RvcmUBBQVjaGlsZAQMbmV3U2tpblRvdGFsCQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ9za2luVG90YWxTdG9yZTEAAAUKY29tbWl0bWVudAQHc2tpbk1heAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMc2tpbk1heFN0b3JlAQUFY2hpbGQAAAMDCQBmAgUHc2tpbk1heAAACQBmAgUMbmV3U2tpblRvdGFsBQdza2luTWF4BwkAAgEJAKwCAgIcVG90YWwgbWF4LiBza2luIGlzIHJlYWNoZWQ6IAkApAMBBQdza2luTWF4CQDMCAIJAQhjaGFuZ2VCeQIJAQ11c2VyU2tpblN0b3JlAgUFY2hpbGQFB2FkZHJlc3MFCmNvbW1pdG1lbnQJAMwIAgkBDEludGVnZXJFbnRyeQIFD3NraW5Ub3RhbFN0b3JlMQUMbmV3U2tpblRvdGFsCQDMCAIJAQhjaGFuZ2VCeQIFDXB3clRvdGFsU3RvcmUFCmNvbW1pdG1lbnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ5jb21taXRGb3JNaW5lcgIFY2hpbGQHYWRkcmVzcwQBYQkBB2FsbG93ZWQBAg5jb21taXRGb3JNaW5lcgMJAAACBQFhBQFhAwkBASEBCQEIY29udGFpbnMCBQ1tYWluQWRkcmVzc2VzCQClCAEIBQFpBmNhbGxlcgkAAgECBmRlbmllZAQBcAkAkQMCCAUBaQhwYXltZW50cwAAAwMJAQIhPQIIBQFwB2Fzc2V0SWQFCnB3ckFzc2V0SWQGCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAippbnZhbGlkIHBheW1lbnRzOiBvbmx5ICRQV1IgdG9rZW4gZXhwZWN0ZWQECmNvbW1pdG1lbnQIBQFwBmFtb3VudAkAzAgCCQEIY2hhbmdlQnkCCQENdXNlclNraW5TdG9yZQIFBWNoaWxkBQdhZGRyZXNzBQpjb21taXRtZW50CQDMCAIJAQhjaGFuZ2VCeQIJAQ5za2luVG90YWxTdG9yZQEFBWNoaWxkBQpjb21taXRtZW50CQDMCAIJAQhjaGFuZ2VCeQIFDXB3clRvdGFsU3RvcmUFCmNvbW1pdG1lbnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARNjb21taXRBZnRlclN0YXJ0Rm9yAgVjaGlsZAdhZGRyZXNzCQEbY29tbWl0QWZ0ZXJTdGFydEZvckludGVybmFsBAUBaQUFY2hpbGQFB2FkZHJlc3MAAAFpASBjb21taXRBZnRlclN0YXJ0V2l0aExvY2tSb3VuZEZvcgMFY2hpbGQHYWRkcmVzcxRhZGRpdGlvbmFsTG9ja1JvdW5kcwkBG2NvbW1pdEFmdGVyU3RhcnRGb3JJbnRlcm5hbAQFAWkFBWNoaWxkBQdhZGRyZXNzBRRhZGRpdGlvbmFsTG9ja1JvdW5kcwFpAQZpbnZlc3QBBWNoaWxkBAFhCQEHYWxsb3dlZAECBmludmVzdAMJAAACBQFhBQFhBAFzCQEWYXNzZXJ0Tm90U3RhcnRlZFBlcmlvZAEFBWNoaWxkAwkAAAIFAXMFAXMEBXRva2VuCQEQaW52ZXN0bWVudHNUb2tlbgEFBWNoaWxkAwkBAiE9AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQV0b2tlbgkAAgECHGludmFsaWQgaW52ZXN0bWVudHMgYXNzZXQgaWQEBmFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEB21heGltdW0JAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBE2ludmVzdG1lbnRzTWF4U3RvcmUBBQVjaGlsZAAACgEFZGF0YXMBAWEJAMwIAgkBCGNoYW5nZUJ5AgkBDWludmVzdG9yU3RvcmUCBQVjaGlsZAkApQgBCAUBaQZjYWxsZXIFAWEJAMwIAgkBCGNoYW5nZUJ5AgkBFWludmVzdG1lbnRzVG90YWxTdG9yZQEFBWNoaWxkBQFhCQDMCAIJAQhjaGFuZ2VCeQIJARtpbnZlc3RtZW50c1BlcmlvZFRvdGFsU3RvcmUBBQVjaGlsZAUBYQUDbmlsAwkAZgIFB21heGltdW0AAAQKdG90YWxTdG9yZQkBFWludmVzdG1lbnRzVG90YWxTdG9yZQEFBWNoaWxkBAV0b3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQp0b3RhbFN0b3JlAAAECmludmVzdG1lbnMJAJcDAQkAzAgCBQZhbW91bnQJAMwIAgkAZQIFB21heGltdW0FBXRvdGFsBQNuaWwDCQBnAgAABQppbnZlc3RtZW5zCQACAQkArAICAiNUb3RhbCBtYXguIGludmVzdG1lbnRzIGlzIHJlYWNoZWQ6IAkApAMBBQdtYXhpbXVtBApjaGFyZ2VCYWNrCQBlAgUGYW1vdW50BQppbnZlc3RtZW5zAwkAZgIFCmNoYXJnZUJhY2sAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFCmNoYXJnZUJhY2sFBXRva2VuCQEFZGF0YXMBBQppbnZlc3RtZW5zCQEFZGF0YXMBBQppbnZlc3RtZW5zCQEFZGF0YXMBBQZhbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEQaW52ZXN0QWZ0ZXJTdGFydAEFY2hpbGQEAWEJAQdhbGxvd2VkAQIQaW52ZXN0QWZ0ZXJTdGFydAMJAAACBQFhBQFhAwkAAAIJAQt2YWx1ZU9yRWxzZQIJAKAIAQkBFWludmVzdEFmdGVyU3RhcnRTdG9yZQEFBWNoaWxkBwcJAAIBAhlkZW5pZWQgKGludmVzdEFmdGVyU3RhcnQpBAFzCQEPYXNzZXJ0SXNTdGFydGVkAQUFY2hpbGQDCQAAAgUBcwUBcwMJAGYCCQEGcGVyaW9kAQUFY2hpbGQAAAkAAgECFmluaXRpYWwgcm91bmQgaXMgZW5kZWQEBXRva2VuCQEQaW52ZXN0bWVudHNUb2tlbgEFBWNoaWxkAwkBAiE9AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQV0b2tlbgkAAgECHGludmFsaWQgaW52ZXN0bWVudHMgYXNzZXQgaWQEBmFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQJAMwIAgkBCGNoYW5nZUJ5AgkBDWludmVzdG9yU3RvcmUCBQVjaGlsZAkApQgBCAUBaQZjYWxsZXIFBmFtb3VudAkAzAgCCQEIY2hhbmdlQnkCCQEVaW52ZXN0bWVudHNUb3RhbFN0b3JlAQUFY2hpbGQFBmFtb3VudAkAzAgCCQEIY2hhbmdlQnkCCQEbaW52ZXN0bWVudHNQZXJpb2RUb3RhbFN0b3JlAQUFY2hpbGQFBmFtb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBCQEIdHJlYXN1cnkBBQVjaGlsZAUGYW1vdW50CQEQaW52ZXN0bWVudHNUb2tlbgEFBWNoaWxkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEFc3RhcnQBBWNoaWxkBAZwYXVzZWQJAQdhbGxvd2VkAQIFc3RhcnQDCQAAAgUGcGF1c2VkBQZwYXVzZWQEAXMDCQEQYXNzZXJ0Tm90U3RhcnRlZAEFBWNoaWxkCQESYXNzZXJ0Tm90Q2FuY2VsbGVkAQUFY2hpbGQHAwkAAAIFAXMFAXMECXRvdGFsU2tpbgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEOc2tpblRvdGFsU3RvcmUBBQVjaGlsZAAABAxza2luUmVxdWlyZWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBCQERc2tpblJlcXVpcmVkU3RvcmUBBQVjaGlsZAIUY2hpbGQgbm90IHJlZ2lzdGVyZWQDCQBmAgUMc2tpblJlcXVpcmVkBQl0b3RhbFNraW4JAAIBAhtub3QgZW5vdWdoIHNraW4gaW4gdGhlIGdhbWUEEHRvdGFsSW52ZXN0bWVudHMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFWludmVzdG1lbnRzVG90YWxTdG9yZQEFBWNoaWxkAAADCQBmAgkBEUBleHRyTmF0aXZlKDEwNTUpAQkBGGludmVzdG1lbnRzUmVxdWlyZWRTdG9yZQEFBWNoaWxkBRB0b3RhbEludmVzdG1lbnRzCQACAQIWbm90IGVub3VnaCBpbnZlc3RtZW50cwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEHN0YXJ0SGVpZ2h0U3RvcmUBBQVjaGlsZAUGSEVJR0hUCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQh0cmVhc3VyeQEFBWNoaWxkBRB0b3RhbEludmVzdG1lbnRzCQEQaW52ZXN0bWVudHNUb2tlbgEFBWNoaWxkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEOaW5pdE5leHRQZXJpb2QDBWNoaWxkE2Jsb2NrQmV0d2VlblBlcmlvZHMIbG9ja1RpbWUEBnBhdXNlZAkBB2FsbG93ZWQBAg5pbml0TmV4dFBlcmlvZAMJAAACBQZwYXVzZWQFBnBhdXNlZAMDCQECIT0CCQClCAEIBQFpBmNhbGxlcgkBEUBleHRyTmF0aXZlKDEwNTgpAQkBCm93bmVyU3RvcmUBBQVjaGlsZAkBAiE9AggFAWkGY2FsbGVyBQR0aGlzBwkAAgECBmRlbmllZAMJAGYCAAAFE2Jsb2NrQmV0d2VlblBlcmlvZHMJAAIBAi5ibG9ja0JldHdlZW5QZXJpb2RzIHNob3VsZCBiZSBwb3NpdGl2ZSBvciB6ZXJvAwkAZgIAAQUIbG9ja1RpbWUJAAIBAhtsb2NrVGltZSBzaG91bGQgYmUgcG9zaXRpdmUEDXVubG9ja0hlaWdodF8JAQx1bmxvY2tIZWlnaHQBBQVjaGlsZAMJAGYCBQ11bmxvY2tIZWlnaHRfBQZIRUlHSFQJAAIBAh5jdXJyZW50IHBlcmlvZCBpcyBzdGlsbCBhY3RpdmUEAXAJAQZwZXJpb2QBBQVjaGlsZAMDCQBmAgUBcAAACQEBIQEJAQlpc0RlZmluZWQBCQEWc3RhcnRQZXJpb2RIZWlnaHRTdG9yZQIFBWNoaWxkBQFwBwkAAgECH25leHQgcGVyaW9kIGFscmVhZHkgaW5pdGlhbGl6ZWQECW5ld1BlcmlvZAkAZAIFAXAAAQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBC3BlcmlvZFN0b3JlAQUFY2hpbGQFCW5ld1BlcmlvZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBG3N0YXJ0UGVyaW9kQWZ0ZXJIZWlnaHRTdG9yZQIFBWNoaWxkBQluZXdQZXJpb2QJAGQCBQ11bmxvY2tIZWlnaHRfBRNibG9ja0JldHdlZW5QZXJpb2RzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQETcGVyaW9kTG9ja1RpbWVTdG9yZQIFBWNoaWxkBQluZXdQZXJpb2QFCGxvY2tUaW1lBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQELc3RhcnRQZXJpb2QBBWNoaWxkBAZwYXVzZWQJAQdhbGxvd2VkAQILc3RhcnRQZXJpb2QDCQAAAgUGcGF1c2VkBQZwYXVzZWQEAXMJARZhc3NlcnROb3RTdGFydGVkUGVyaW9kAQUFY2hpbGQDCQAAAgUBcwUBcwQHcGVyaW9kXwkBBnBlcmlvZAEFBWNoaWxkBA9zdGFydEFmdGVyU3RvcmUJARtzdGFydFBlcmlvZEFmdGVySGVpZ2h0U3RvcmUCBQVjaGlsZAUHcGVyaW9kXwQKc3RhcnRBZnRlcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFD3N0YXJ0QWZ0ZXJTdG9yZQkArAICAg9rZXkgbm90IGZvdW5kOiAFD3N0YXJ0QWZ0ZXJTdG9yZQMJAGYCBQpzdGFydEFmdGVyBQZIRUlHSFQJAAIBAgl0b28gZWFybHkECXRvdGFsU2tpbgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEOc2tpblRvdGFsU3RvcmUBBQVjaGlsZAAABAxza2luUmVxdWlyZWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBCQERc2tpblJlcXVpcmVkU3RvcmUBBQVjaGlsZAIUY2hpbGQgbm90IHJlZ2lzdGVyZWQDCQBmAgUMc2tpblJlcXVpcmVkBQl0b3RhbFNraW4JAAIBAhtub3QgZW5vdWdoIHNraW4gaW4gdGhlIGdhbWUEEXBlcmlvZEludmVzdG1lbnRzCQELdmFsdWVPckVsc2UCCQCfCAEJARtpbnZlc3RtZW50c1BlcmlvZFRvdGFsU3RvcmUBBQVjaGlsZAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEdc3RhcnRDdXJyZW50UGVyaW9kSGVpZ2h0U3RvcmUBBQVjaGlsZAUGSEVJR0hUCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBWNoaWxkBRFwZXJpb2RJbnZlc3RtZW50cwkBEGludmVzdG1lbnRzVG9rZW4BBQVjaGlsZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBXNsYXNoAgVjaGlsZAZhbW91bnQEBnBhdXNlZAkBB2FsbG93ZWQBAgEvAwkAAAIFBnBhdXNlZAUGcGF1c2VkAwkBASEBCQEIY29udGFpbnMCBQhzbGFzaGVycwkApQgBCAUBaQZjYWxsZXIJAAIBAgZkZW5pZWQDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEJARBzdGFydEhlaWdodFN0b3JlAQUFY2hpbGQJAAIBAgtub3Qgc3RhcnRlZAkAzAgCCQEIY2hhbmdlQnkCCQEOc2tpblRvdGFsU3RvcmUBBQVjaGlsZAkBAS0BBQZhbW91bnQJAMwIAgkBBEJ1cm4CBQpwd3JBc3NldElkBQZhbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQtjb21wbGV0ZUZvcgIFY2hpbGQEdXNlcgMJAQEhAQkBCGNvbnRhaW5zAgUNbWFpbkFkZHJlc3NlcwkApQgBCAUBaQZjYWxsZXIJAAIBAgZkZW5pZWQEDXVubG9ja0hlaWdodF8JAQx1bmxvY2tIZWlnaHQBBQVjaGlsZAMJAGYCBQ11bmxvY2tIZWlnaHRfBQZIRUlHSFQJAAIBAgxzdGlsbCBsb2NrZWQEC2VuZGVkUGVyaW9kCQEPY29tcGxldGVkUGVyaW9kAQUFY2hpbGQEC3VubG9ja1JvdW5kCQELdmFsdWVPckVsc2UCCQCfCAEJARl1c2VyU2tpblVubG9ja1BlcmlvZFN0b3JlAgUFY2hpbGQFBHVzZXIAAAMJAGYCBQt1bmxvY2tSb3VuZAULZW5kZWRQZXJpb2QJAAIBCQCsAgIJAKwCAgISeW91IGNhbiB1bmxvY2sgb24gCQCkAwEFC3VubG9ja1JvdW5kAgYgcm91bmQEBHNraW4JAQ9jdXJyZW50VXNlclNraW4CBQVjaGlsZAUEdXNlcgMJAAACBQRza2luAAAJAAIBAht5b3UgaGFkIG5vIHNraW4gaW4gdGhlIGdhbWUJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFBHNraW4FCnB3ckFzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDXVzZXJTa2luU3RvcmUCBQVjaGlsZAUEdXNlcgkAzAgCCQEIY2hhbmdlQnkCCQEOc2tpblRvdGFsU3RvcmUBBQVjaGlsZAkBAS0BBQRza2luCQDMCAIJAQhjaGFuZ2VCeQIFDXB3clRvdGFsU3RvcmUJAQEtAQUEc2tpbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBG3VzZXJTa2luRXhpdGVkSW5QZXJpb2RTdG9yZQMFBWNoaWxkBQR1c2VyBQtlbmRlZFBlcmlvZAUEc2tpbgUDbmlsBQRza2luAWkBBmNhbmNlbAEFY2hpbGQEBnBhdXNlZAkBB2FsbG93ZWQBAgZjYW5jZWwDCQAAAgUGcGF1c2VkBQZwYXVzZWQEAXMDCQEQYXNzZXJ0Tm90U3RhcnRlZAEFBWNoaWxkBgkBEmFzc2VydE5vdENhbmNlbGxlZAEFBWNoaWxkAwkAAAIFAXMFAXMDCQECIT0CCQClCAEIBQFpBmNhbGxlcgkBEUBleHRyTmF0aXZlKDEwNTgpAQkBCm93bmVyU3RvcmUBBQVjaGlsZAkAAgECFGRlbmllZC4gbm90IGFuIG93bmVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQERY2FuY2VsSGVpZ2h0U3RvcmUBBQVjaGlsZAUGSEVJR0hUBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKdW5kb0ludmVzdAEFY2hpbGQEBnBhdXNlZAkBB2FsbG93ZWQBAgp1bmRvSW52ZXN0AwkAAAIFBnBhdXNlZAUGcGF1c2VkBAFzCQEQYXNzZXJ0Tm90U3RhcnRlZAEFBWNoaWxkAwkAAAIFAXMFAXMEEWludmVzdG1lbnRzU3RvcmUxCQENaW52ZXN0b3JTdG9yZQIFBWNoaWxkCQClCAEIBQFpBmNhbGxlcgQLaW52ZXN0bWVudHMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQURaW52ZXN0bWVudHNTdG9yZTEAAAMJAAACBQtpbnZlc3RtZW50cwAACQACAQIObm8gaW52ZXN0bWVudHMJAMwIAgkBC0RlbGV0ZUVudHJ5AQURaW52ZXN0bWVudHNTdG9yZTEJAMwIAgkBCGNoYW5nZUJ5AgkBFWludmVzdG1lbnRzVG90YWxTdG9yZQEFBWNoaWxkCQEBLQEFC2ludmVzdG1lbnRzCQDMCAIJAQhjaGFuZ2VCeQIJARtpbnZlc3RtZW50c1BlcmlvZFRvdGFsU3RvcmUBBQVjaGlsZAkBAS0BBQtpbnZlc3RtZW50cwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFC2ludmVzdG1lbnRzCQEQaW52ZXN0bWVudHNUb2tlbgEFBWNoaWxkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQENdW5kb0NvbW1pdEZvcgIFY2hpbGQHYWRkcmVzcwQGcGF1c2VkCQEHYWxsb3dlZAECDXVuZG9Db21taXRGb3IDCQAAAgUGcGF1c2VkBQZwYXVzZWQDCQEBIQEJAQhjb250YWlucwIFDW1haW5BZGRyZXNzZXMJAKUIAQgFAWkGY2FsbGVyCQACAQIGZGVuaWVkBAFzCQEQYXNzZXJ0Tm90U3RhcnRlZAEFBWNoaWxkAwkAAAIFAXMFAXMEDnVzZXJTa2luU3RvcmUxCQENdXNlclNraW5TdG9yZQIFBWNoaWxkBQdhZGRyZXNzBARza2luCQELdmFsdWVPckVsc2UCCQCfCAEFDnVzZXJTa2luU3RvcmUxAAADCQAAAgUEc2tpbgAACQACAQIHbm8gc2tpbgkAlAoCCQDMCAIJAQtEZWxldGVFbnRyeQEFDnVzZXJTa2luU3RvcmUxCQDMCAIJAQhjaGFuZ2VCeQIJAQ5za2luVG90YWxTdG9yZQEFBWNoaWxkCQEBLQEFBHNraW4JAMwIAgkBCGNoYW5nZUJ5AgUNcHdyVG90YWxTdG9yZQkBAS0BBQRza2luCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUEc2tpbgUKcHdyQXNzZXRJZAUDbmlsBQRza2luCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCXVzZXJQb3dlcgIFY2hpbGQEdXNlcgkAlAoCBQNuaWwJAQt2YWx1ZU9yRWxzZQIJAQ51c2VyQ29tbWl0bWVudAIFBWNoaWxkBQR1c2VyAAABaQEKdG90YWxQb3dlcgEFY2hpbGQJAJQKAgUDbmlsCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQkBDnNraW5Ub3RhbFN0b3JlAQUFY2hpbGQCG3RvdGFsUG93ZXI6IGNoaWxkIG5vdCBmb3VuZAFpAQRpbml0AQRjb25mCQDMCAIJARB3cml0ZUNvbnN0U3RyaW5nAgUSY29uZmlnQWRkcmVzc1N0b3JlBQRjb25mBQNuaWwBaQENcHdyVG9NYW5hZ2VycwADCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAgZkZW5pZWQEDWFtYmFzc2Fkb3JEQU8CIzNQNDhqV0dNYkNTNE5hTGg5eEpuRWhhRFluRllwb0FHaEVUBAhtYW5hZ2VycwkAzAgCAiMzUDRpeXg1Z01weEhwcFphTnpBUHBHUXlrVmdGQXdua0xDQgkAzAgCAiMzUENDSmh1TTFxUGFEUzlybUdXOTh4Tlp0RzI3Q2VvZzZyagkAzAgCAiMzUDZlcE1DSlZmWm82eTV4cVl6UVJlejI5eUZpQ1pYY01xSgkAzAgCAiMzUENHQWlZaUc0Z25SdWdhRDJvVzQ0dlFYMTRZVkt0bWt4agkAzAgCAiMzUFBSeUJNcFQyejZKUFBUQjc5TUNLM2JHa1NEVXJHdDREUQkAzAgCAiMzUFB6VktnaUZZTUdSZGtGN3RwN3M1QUNLbVhmM2dQeU1FdwkAzAgCAiMzUDRBVlR6b0JHVmV6QmFheE16Z2lTUG9QWmpvVXBVaUg2OAkAzAgCAiMzUDJqUEg2R1pyUFlVVkFXdmJxWEtkR3BNaGhUNVp6MzFDYwkAzAgCAiMzUDJvd3c0anB1N0haeG1obzZXUHh5enJaaUx0NVExelUzTgkAzAgCAiMzUEV0cnFTUDh2S0xaODI1SG9zRzRubWdVbjdBNnJLQkdHQgkAzAgCAiMzUDZaRmJwMllGRWZuZVc4QllXOFRTZkUycG1Mb0tGR1FUdwkAzAgCAiMzUDJMdzN2UXZwWG5jZVFRalBuTGdRQ3VBd2JoYmdoaTZYVAkAzAgCAiMzUE5jeWd0YnpISlM2S1BnNzlmeEc3aGdRNWJYOVRmUm5FUgkAzAgCAiMzUDJ6VzFVZkgxVTdHRkd1cmtNWkI0Slczbm4xRm5hMTVUSwkAzAgCAiMzUEtrdWl5eDJTU3BkUko1R1U2MllvRnpDNVpVTnNUUlpETQkAzAgCAiMzUDNyY0s5WkN2dEw4dWRiTHUydXdDY2JIcFFvcVJXTWNUUwkAzAgCAiMzUDJzb2JpSmVNZHFXaVVWTFFralhNVDNyU005UGlGWU5idAkAzAgCAiMzUFBOMzZUYkZVcXlaUkZWY1BFdERWQmN1MnAyck41Q2JScQkAzAgCAiMzUFFRRFBEVVk2ZGkyZ3VCdWl4RDc0WVVSOUprTVlVUUtGRgkAzAgCAiMzUFE0N3lXUUd2VnFIYWFzYnlUWEdqRkxZazJnN0UzeVpmOAkAzAgCAiMzUDZQMnppZGlIRmNBTmh3OGlFdDF6TmREcVpLRG1qbmJFNgkAzAgCAiMzUEtFeGVuSFNMTXZvNjJpRVBHbk15MkhuRWUzSGN5ZnhzUgkAzAgCAiMzUEhycjJnZkdWcHNvMjdhWDRxekJreVpaYmM4aXFBWTVMZwkAzAgCAiMzUE02Nzc1eEtKNTNkQjlZUzZuZTFFWnN1WHdUMzF5UXNGVwkAzAgCAiMzUFF3ZFZSejdaa2lSTENxaWFZcXVqeWF6Qjhta3p2cmhRdQkAzAgCAiMzUDc0dFpuZTZNUnd2RTNlM1o3eUhidmZCa1JOemJ6YXhlTgkAzAgCAiMzUFFYcUQxOFZ3ZEZrNllFU2lUV1ZBNkxaVGdwRlpiWFdtbwkAzAgCAiMzUDhiUTRmZkxCYTJiWjlmRzhDSzdOUHN0YkFndXhGZkt5cAkAzAgCAiMzUE5xWVF2V2prY1UzSGpZWFYxdmdqYXhQUGs4eUxHdDVBNQkAzAgCAiMzUExYZjdEa21qSFp3ZjhaWDhhNUpMc0h2cFdVQ0dzUGpCWQkAzAgCAiMzUEVpMWJiWTNiR3I4a0Nqb3pnNTJ4QmRkckVEa1JjY0xvbQkAzAgCAiMzUDhXZTVoSm1IdGRMZ2JDbUZ6U2c2NVdKWXRYcVB3a0ZVMgkAzAgCAiMzUEFGMjRKRXo5YlM2WDRpc3BzNkNjd0YxckRwd1pCanViWgkAzAgCAiMzUEdOWUdTRHBqRHlKQTNQTmh2NWFoRWhRV2lCYkhIZEZUZgkAzAgCAiMzUEtwR0xoclBqYm10c0htRmdRR1ZzQ3dkQ0FSYVp2Q1ZFNgkAzAgCAiMzUFFhRktUYXRYS1Z6UFVabXVqUlB0RFdUWlZvVjZwbTMzNwkAzAgCAiMzUEZnNTdrVWVUZURHNzhoTkduUlQ4anM2UWN4eU5BVUd6bwkAzAgCAiMzUEo1MmNjYnJDY2tqNHplZjd4eG9NNEdHMVRpUHpBV3dWWAkAzAgCAiMzUDdUM29BNGpjQ2RMMnNHazhuQ2JSQUNZTGFmNWRucEU3dwkAzAgCAiMzUDl2RkZDYWNBZjRacldpUm5UNWV3V3E5REIzbndWY3NKaAkAzAgCAiMzUDJmblhjczQ0eVNaaDJ5eXhCOEtVZFd5cDZYcmhSclNjRwkAzAgCAiMzUE1VeGlINFdndjZFQlBnY3VoS0prZlFCaHM1aXRwNnVYagkAzAgCAiMzUFJCTTl6bmFDdDhvWU1lVndueWE3ZW9rRDl6ZUZHTTVTMQkAzAgCAiMzUFA0aWJURU5wNWo0MzZyZ0xEb2tvallKRGlBcVMyc2FmTQkAzAgCAiMzUDIxYzNMU1Z5ZGhGeG1FdHhKdFR5NXdqNTdQUnA3RGh6eQkAzAgCAiMzUDh6Mjh0azRuWXBQeGN1NXZKWkVXd0ZGcTVNVDFOR0NGaQkAzAgCAiMzUDhWZ1VReGdBZ3lXVDU1V0w0YlJFaURERm82OVE4WTdLQQkAzAgCAiMzUENNdnVEWmlTQjVSclhRS3k5M1l3NURzajRKUTJuZ20zUwkAzAgCAiMzUDQ1M1hEaEhNOEZQZ3d6dU55NVU0ZHF6OWFtSkNSenljQQkAzAgCAiMzUDlxTTVpSHpiemNiTXB1ZVZvMlVUWnFEM0hlQkVvNVdlVAkAzAgCAiMzUDJoOXk5amlVcndQdERVZFJYUDVuV01OTjFUaHpoQ0xYMQkAzAgCAiMzUEJTWWc4OFQ0Qk1OWGVuR01lWWprV0xLYkgzNWVyaWU1dQkAzAgCAiMzUDJDZ0d5cXdicm50SGk1WlFKRFhwNHo4Z2RRdGZrelg2agkAzAgCAiMzUEw2ZXhBRzV3VmFUYzh3NWh5QW9ZY1JvaXI5YXFUM0hmSwkAzAgCAiMzUEpWNjVyQmpWSkFtaFRmOXd5MUhmc0I0MzNvZnJpbjhXRgkAzAgCAiMzUE1wSHp6dTRwbzlGYjNmYTNENXdRNFN5cUNNV0dvOUhOdgkAzAgCAiMzUEZVTDdQQnR3eVU2QVViUDFDaUY3dTQ4eTluRHBrSzZnVgkAzAgCAiMzUEs4WGE4V1J3aHV0cER3V2VMS1RTa3RxSnBjaWd6clVIWQkAzAgCAiMzUE1xdEhadXVCWFJiWVdCczZHM3dBMlV5eHNxNWJmTHNzTQkAzAgCAiMzUE5HakpNdEFZRUNyc3lYY2VHV2pURUVBdWlUUFNCblBDdgkAzAgCAiMzUERLWlBtUVMxVWVhWnYxMWZGU24zY293b0RwVlNZbXlxTQkAzAgCAiMzUENNVm1RUThiVGVua2drbm4yVjlSckZyNXdYTXRiaGR1YwkAzAgCAiMzUDlGRzRDQXVFM2ptVldua2JYbVdMc0YyZGo4WHVNVFZ0UAkAzAgCAiMzUEJrd1pLMm5rYUtCbUhNcVd6Q05rUEZ2ZFBDZlVnQVdpaQkAzAgCAiMzUEROcFV5RVJrb29yMlF0Mmt2bVc0eDhRM29DRE11N1BoRQkAzAgCAiMzUEJnMTlQbjc3SmdFeXZ1NG5BQmpwcTNrYWJkcXVxZWI0egkAzAgCAiMzUEpHWkFWcWppOXNLR2pQcUYxQTlNY281Rlg5dTQ4OFgzaAkAzAgCAiMzUEhRUzRFUXpOb0dQaGV5NzhYVjVoNUphdDE0S3lUaGphbgkAzAgCAiMzUEc1U3BXWE45VVoxZTQxa2lUSlpSU1FCR0ZTYmR4bVlqRAkAzAgCAiMzUE1zVnFGVnlQUmZxNndtWTJrRGtFR3NWbzVYd25yZGRndwkAzAgCAiMzUDI2OWdxblJZUUF1RmNzSlBkVmFUR3Z4TFVLS0pQelFUSAkAzAgCAiMzUENEVTVER2MyV3VCUHIxZ0pBcmJTWVVMOEN6QThYNFU0QgkAzAgCAiMzUEg4QTM2RVNwRjZKUFhwVFVubmM1b3Roa3FOTERORjNZWQkAzAgCAiMzUEx5NzRIVkRuUjFWbTRYNjFjTFJDSlVTUXo5dW9FTnN1bwkAzAgCAiMzUEI0dWlVQlNoWkRaNmhycVVGSnppZXdTb3daSERxdGFkOQkAzAgCAiMzUDVLWHd1WWZ1ZXY2dzJ5ZnlGaW52aDlKNUVid0NtWDV2QwkAzAgCAiMzUEZYWTlQRHdLWHpLb2kxTXBnZ1hGdkdZck1HVHR1eWYzYwkAzAgCAiMzUDRxQVhTRXB0YlhLeFBueUpxQ2tKWDJjcWVIQjJxYW9keAkAzAgCAiMzUDlqMUFLcXZoZXA5OUx2YmhmUDJQbUJ0aVg1bTVqNzdaeAUDbmlsBBB0b3RhbEFtYmFzc2Fkb3JzCQCQAwEFCG1hbmFnZXJzBApwd3JSZXdhcmRzAMCEPQoBBGZvbGQCBGNtZHMKYW1iYXNzYWRvcgkAzAgCCQEIY2hhbmdlQnkCCQENdXNlclNraW5TdG9yZQIFDWFtYmFzc2Fkb3JEQU8FCmFtYmFzc2Fkb3IFCnB3clJld2FyZHMFBGNtZHMJAMwIAgkBCGNoYW5nZUJ5AgkBDnNraW5Ub3RhbFN0b3JlAQUNYW1iYXNzYWRvckRBTwkAaAIFCnB3clJld2FyZHMFEHRvdGFsQW1iYXNzYWRvcnMKAAIkbAUIbWFuYWdlcnMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBGZvbGQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFUxpc3Qgc2l6ZSBleGNlZWRzIDEwMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4APwBAAEEAQgBDAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF8AYABhAGIAYwBkALoIhj0=", "chainId": 87, "height": 3917582, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CvBDxxAj5JPy8SGENEtrrtpXwRv1S7fmF1SR7bwtCro5 Next: 1p1BT9LS4jad6bhwKX41KrEskgwyZmJDTEafsATwBiy Diff:
OldNewDifferences
629629 then throw("denied")
630630 else {
631631 let ambassadorDAO = "3P48jWGMbCS4NaLh9xJnEhaDYnFYpoAGhET"
632- let managers = ["3PPshLjQiPXyqX5EPxeNQMVRgQ92EM2949n", "3PLMfVFMB7d6NjmU4FrMWocBjmE4Zs28wmd", "3PHEWmijmyaimJBPT4nbmqPWfiXo7XY4FqY", "3PGoajk2tfkyRTGmsQB3KKV3h6Ux5oXx3Rf", "3PQqSFPZEi9Qp326hCZ8dnNRvYSnjRhmjNj", "3P2njkX641B2SxcNYPuHxB4vdYf2JdgVFaK", "3PDxh4xFdZDjUJxJ6qArCsTpWe3w4njmpjf", "3PQp1cAoSxVXrLb7Xh6xLtESoDhXCJAxQjD", "3PHe5jHM5EPEJhjte5z2gjG7yaAjym9uRSX", "3PAtmRKeiVC7wFLT4VkokFyisUHnE2QDu3y", "3PDxjS6qGwmKcuNz1yXDA1LojCGVGAsP6Nj", "3P6mnktfCAddt88RmkkCaHYBmTLNCjxT4vm", "3PMcGiGcJWxhfpfVpAj3dkNwsPA222vHVXy", "3PNuv3mCqoJYfdGmTGMVWoBGrCNeQ8VfZK3", "3PR86LJEAvKRcJAT4QDYSKkNNBd8W3WGiF5", "3P1yyYLmezkFUH2tu6sRo6ZYpnyV9e6YaQW", "3P94jbNHfuMJaGx24SmzzqZN6AfRy5GGTWX", "3P527KuE1E2C9aCcm7oXU1MauPZmRETLLAe", "3PAUmjxU2D7mAdqHdFoZVtZgXUCgBauXSD7", "3PM7tqtVQu1F7SNNmCuyV5KcYQRomBQbHbg", "3PLqsXPM1uwEZ4BHNSa1EZnoVVAMybez3gi", "3PJxzZk2umypA9J57cpnL2UpbZHK8KdWjeu", "3P3jDgFDA7oBqVMvbUEPHdwVVTKBQqJKWwH", "3PD6SUGnf4ywQdGM3z57yX9Se5PS5fnZJtY", "3PHN8QgZNJm4AY3Do8UJZ85ZmXsr8ywf1zi", "3P7YxdBKVpGrv38coUochY7MfTkoSSQ7vDM", "3PPStMjodj2eiVsjAWiFM27NNV18ehN6UdR", "3P2QVWdwKmA8fc96fPViwu437jWhTg7T3pA", "3PQHXMYdNu1SKLUcvqQNWbsxzbx2zJ3N4hN", "3PGZxQuosgZ5y1ALdWqhDFA2arjG4Cn9hHH", "3P51VU81e9iMKTDgzDm41RydXsLKqc89u2q", "3PEabRdNwXT7RXrtVWhNZLYHdudL25Sr28D", "3PLmdKE9FTckAHL9XmeoqwUZNeEazXGu5JN", "3PRCCa4GATKWhq46y6ZJuK3xWFkBnEjkm5H", "3PE4GMqo6MD3UQL4ZBgEVpt2RtUjsPcwXUz", "3PLnmwERbeFXx5yQY8fiGv3Q7zqgSqx1bna", "3PDLoPMNiWidiBLs3E4jAR6e5a4eGwWsEw2", "3P4ezpAnUcz1RuWLcrxz5fcXv6XJEqsPAvP", "3P6aR1tmvhXEeFQHPEcahBmRP2izeoUi4wP", "3P5n5oTYnAtGq1i4dMQAWnyc24QLiaciC4c"]
632+ let managers = ["3P4iyx5gMpxHppZaNzAPpGQykVgFAwnkLCB", "3PCCJhuM1qPaDS9rmGW98xNZtG27Ceog6rj", "3P6epMCJVfZo6y5xqYzQRez29yFiCZXcMqJ", "3PCGAiYiG4gnRugaD2oW44vQX14YVKtmkxj", "3PPRyBMpT2z6JPPTB79MCK3bGkSDUrGt4DQ", "3PPzVKgiFYMGRdkF7tp7s5ACKmXf3gPyMEw", "3P4AVTzoBGVezBaaxMzgiSPoPZjoUpUiH68", "3P2jPH6GZrPYUVAWvbqXKdGpMhhT5Zz31Cc", "3P2oww4jpu7HZxmho6WPxyzrZiLt5Q1zU3N", "3PEtrqSP8vKLZ825HosG4nmgUn7A6rKBGGB", "3P6ZFbp2YFEfneW8BYW8TSfE2pmLoKFGQTw", "3P2Lw3vQvpXnceQQjPnLgQCuAwbhbghi6XT", "3PNcygtbzHJS6KPg79fxG7hgQ5bX9TfRnER", "3P2zW1UfH1U7GFGurkMZB4JW3nn1Fna15TK", "3PKkuiyx2SSpdRJ5GU62YoFzC5ZUNsTRZDM", "3P3rcK9ZCvtL8udbLu2uwCcbHpQoqRWMcTS", "3P2sobiJeMdqWiUVLQkjXMT3rSM9PiFYNbt", "3PPN36TbFUqyZRFVcPEtDVBcu2p2rN5CbRq", "3PQQDPDUY6di2guBuixD74YUR9JkMYUQKFF", "3PQ47yWQGvVqHaasbyTXGjFLYk2g7E3yZf8", "3P6P2zidiHFcANhw8iEt1zNdDqZKDmjnbE6", "3PKExenHSLMvo62iEPGnMy2HnEe3HcyfxsR", "3PHrr2gfGVpso27aX4qzBkyZZbc8iqAY5Lg", "3PM6775xKJ53dB9YS6ne1EZsuXwT31yQsFW", "3PQwdVRz7ZkiRLCqiaYqujyazB8mkzvrhQu", "3P74tZne6MRwvE3e3Z7yHbvfBkRNzbzaxeN", "3PQXqD18VwdFk6YESiTWVA6LZTgpFZbXWmo", "3P8bQ4ffLBa2bZ9fG8CK7NPstbAguxFfKyp", "3PNqYQvWjkcU3HjYXV1vgjaxPPk8yLGt5A5", "3PLXf7DkmjHZwf8ZX8a5JLsHvpWUCGsPjBY", "3PEi1bbY3bGr8kCjozg52xBddrEDkRccLom", "3P8We5hJmHtdLgbCmFzSg65WJYtXqPwkFU2", "3PAF24JEz9bS6X4isps6CcwF1rDpwZBjubZ", "3PGNYGSDpjDyJA3PNhv5ahEhQWiBbHHdFTf", "3PKpGLhrPjbmtsHmFgQGVsCwdCARaZvCVE6", "3PQaFKTatXKVzPUZmujRPtDWTZVoV6pm337", "3PFg57kUeTeDG78hNGnRT8js6QcxyNAUGzo", "3PJ52ccbrCckj4zef7xxoM4GG1TiPzAWwVX", "3P7T3oA4jcCdL2sGk8nCbRACYLaf5dnpE7w", "3P9vFFCacAf4ZrWiRnT5ewWq9DB3nwVcsJh", "3P2fnXcs44ySZh2yyxB8KUdWyp6XrhRrScG", "3PMUxiH4Wgv6EBPgcuhKJkfQBhs5itp6uXj", "3PRBM9znaCt8oYMeVwnya7eokD9zeFGM5S1", "3PP4ibTENp5j436rgLDokojYJDiAqS2safM", "3P21c3LSVydhFxmEtxJtTy5wj57PRp7Dhzy", "3P8z28tk4nYpPxcu5vJZEWwFFq5MT1NGCFi", "3P8VgUQxgAgyWT55WL4bREiDDFo69Q8Y7KA", "3PCMvuDZiSB5RrXQKy93Yw5Dsj4JQ2ngm3S", "3P453XDhHM8FPgwzuNy5U4dqz9amJCRzycA", "3P9qM5iHzbzcbMpueVo2UTZqD3HeBEo5WeT", "3P2h9y9jiUrwPtDUdRXP5nWMNN1ThzhCLX1", "3PBSYg88T4BMNXenGMeYjkWLKbH35erie5u", "3P2CgGyqwbrntHi5ZQJDXp4z8gdQtfkzX6j", "3PL6exAG5wVaTc8w5hyAoYcRoir9aqT3HfK", "3PJV65rBjVJAmhTf9wy1HfsB433ofrin8WF", "3PMpHzzu4po9Fb3fa3D5wQ4SyqCMWGo9HNv", "3PFUL7PBtwyU6AUbP1CiF7u48y9nDpkK6gV", "3PK8Xa8WRwhutpDwWeLKTSktqJpcigzrUHY", "3PMqtHZuuBXRbYWBs6G3wA2Uyxsq5bfLssM", "3PNGjJMtAYECrsyXceGWjTEEAuiTPSBnPCv", "3PDKZPmQS1UeaZv11fFSn3cowoDpVSYmyqM", "3PCMVmQQ8bTenkgknn2V9RrFr5wXMtbhduc", "3P9FG4CAuE3jmVWnkbXmWLsF2dj8XuMTVtP", "3PBkwZK2nkaKBmHMqWzCNkPFvdPCfUgAWii", "3PDNpUyERkoor2Qt2kvmW4x8Q3oCDMu7PhE", "3PBg19Pn77JgEyvu4nABjpq3kabdquqeb4z", "3PJGZAVqji9sKGjPqF1A9Mco5FX9u488X3h", "3PHQS4EQzNoGPhey78XV5h5Jat14KyThjan", "3PG5SpWXN9UZ1e41kiTJZRSQBGFSbdxmYjD", "3PMsVqFVyPRfq6wmY2kDkEGsVo5Xwnrddgw", "3P269gqnRYQAuFcsJPdVaTGvxLUKKJPzQTH", "3PCDU5DGc2WuBPr1gJArbSYUL8CzA8X4U4B", "3PH8A36ESpF6JPXpTUnnc5othkqNLDNF3YY", "3PLy74HVDnR1Vm4X61cLRCJUSQz9uoENsuo", "3PB4uiUBShZDZ6hrqUFJziewSowZHDqtad9", "3P5KXwuYfuev6w2yfyFinvh9J5EbwCmX5vC", "3PFXY9PDwKXzKoi1MpggXFvGYrMGTtuyf3c", "3P4qAXSEptbXKxPnyJqCkJX2cqeHB2qaodx", "3P9j1AKqvhep99LvbhfP2PmBtiX5m5j77Zx"]
633633 let totalAmbassadors = size(managers)
634634 let pwrRewards = 1000000
635635 func fold (cmds,ambassador) = changeBy(userSkinStore(ambassadorDAO, ambassador), pwrRewards) :: cmds
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func writeConstString (key,value) = if (!(isDefined(getString(this, key))))
55 then StringEntry(key, value)
66 else throw(("already initialized: " + key))
77
88
99 func writeInt (key,value) = if ((0 > value))
1010 then throw(((("writing negative value " + toString(value)) + " for key ") + key))
1111 else IntegerEntry(key, value)
1212
1313
1414 func changeBy (key,value) = writeInt(key, (valueOrElse(getInteger(this, key), 0) + value))
1515
1616
1717 func asInt (value) = match value {
1818 case int: Int =>
1919 int
2020 case _ =>
2121 throw("wrong type, expected: Int")
2222 }
2323
2424
2525 func assetId (str) = if ((str == "WAVES"))
2626 then unit
2727 else fromBase58String(str)
2828
2929
3030 let configAddressStore = "config"
3131
3232 let configAddress = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, configAddressStore), "children: config address not found")), "invalid config address")
3333
3434 func allowed (op) = invoke(configAddress, "opAllowed", [op], nil)
3535
3636
3737 let HEIGHT = height
3838
3939 let pwrAssetId = fromBase58String(valueOrErrorMessage(getString(configAddress, "powerAssetId"), "pwr asset id not found"))
4040
4141 let slashers = valueOrElse(getString(configAddress, (toString(this) + "_slashers")), "")
4242
4343 let mainAddresses = valueOrElse(getString(configAddress, "main_addresses"), "")
4444
4545 func periodStore (child) = ("period_" + child)
4646
4747
4848 func period (child) = valueOrElse(getInteger(periodStore(child)), 0)
4949
5050
5151 func ownerStore (child) = ("owner_" + child)
5252
5353
5454 func treasuryStore (child) = ("treasury_" + child)
5555
5656
5757 func lockTimeStore (child) = ("lockTime_" + child)
5858
5959
6060 func periodLockTimeStore (child,period) = ((("period_" + toString(period)) + "_lockTime_") + child)
6161
6262
6363 func skinRequiredStore (child) = ("skin_required_" + child)
6464
6565
6666 func skinMaxStore (child) = ("skin_max_" + child)
6767
6868
6969 func investmentsMaxStore (child) = ("investments_max_" + child)
7070
7171
7272 func minCommitmentStore (child) = ("min_commitment" + child)
7373
7474
7575 func skinTotalStore (child) = ("skin_total_" + child)
7676
7777
7878 let pwrTotalStore = "pwr_total"
7979
8080 func investmentsRequiredStore (child) = ("investments_required_" + child)
8181
8282
8383 func investmentsTotalStore (child) = ("investments_total_" + child)
8484
8585
8686 func investmentsPeriodTotalStore (child) = ((("period_" + toString(period(child))) + "_investments_total_") + child)
8787
8888
8989 func investmentsTokenStore (child) = ("investments_token_" + child)
9090
9191
9292 func commitmentsStore (child) = ("commitments_" + child)
9393
9494
9595 func createHeightStore (child) = ("create_height_" + child)
9696
9797
9898 func startHeightStore (child) = ("start_height_" + child)
9999
100100
101101 func startPeriodHeightStore (child,period) = ((("period_" + toString(period)) + "_start_height_") + child)
102102
103103
104104 func startPeriodAfterHeightStore (child,period) = ((("period_" + toString(period)) + "_start_after_height_") + child)
105105
106106
107107 func startCurrentPeriodHeightStore (child) = startPeriodHeightStore(child, period(child))
108108
109109
110110 func cancelHeightStore (child) = ("cancel_height_" + child)
111111
112112
113113 func investmentsToken (child) = assetId(valueOrErrorMessage(getString(investmentsTokenStore(child)), "investments asset id not found"))
114114
115115
116116 func userSkinStore (child,user) = ((("skin_" + child) + "_") + user)
117117
118118
119119 func userSkinUnlockPeriodStore (child,user) = ((("skin_unlock_period_" + child) + "_") + user)
120120
121121
122122 func userSkinExitedInPeriodStore (child,user,period) = (((userSkinStore(child, user) + "_period_") + toString(period)) + "_exited")
123123
124124
125125 func investorStore (child,investor) = ((("investor_" + child) + "_") + investor)
126126
127127
128128 func commitAfterAddressesStore (child) = ("commit_after_addresses_" + child)
129129
130130
131131 func investAfterStartStore (child) = ("can_invest_after_start_" + child)
132132
133133
134134 func assertNotStarted (child) = if (isDefined(getInteger(startHeightStore(child))))
135135 then throw("already started")
136136 else false
137137
138138
139139 func assertIsStarted (child) = if ((isDefined(getInteger(startHeightStore(child))) == false))
140140 then throw("not yet started")
141141 else false
142142
143143
144144 func assertNotCancelled (child) = if (isDefined(getInteger(cancelHeightStore(child))))
145145 then throw("already canceled")
146146 else false
147147
148148
149149 func assertNotStartedPeriod (child) = if ((period(child) == 0))
150150 then assertNotStarted(child)
151151 else if (isDefined(getInteger(startCurrentPeriodHeightStore(child))))
152152 then throw("period already started")
153153 else false
154154
155155
156156 func userCommitment (child,user) = getInteger(userSkinStore(child, user))
157157
158158
159159 func currentUserSkin (child,user) = valueOrElse(userCommitment(child, user), 0)
160160
161161
162162 func lockTime (child,period) = valueOrElse(getInteger(periodLockTimeStore(child, period)), valueOrErrorMessage(getInteger(lockTimeStore(child)), "no child lockTime"))
163163
164164
165165 func completedPeriod (child) = {
166166 let p = period(child)
167167 if ((p == 0))
168168 then 0
169169 else {
170170 let periodStart = getInteger(startPeriodHeightStore(child, p))
171171 if (isDefined(periodStart))
172172 then p
173173 else (p - 1)
174174 }
175175 }
176176
177177
178178 func unlockHeight (child) = {
179179 let p = completedPeriod(child)
180180 let childStart = valueOrErrorMessage(getInteger(startHeightStore(child)), "no child start height")
181181 (valueOrElse(getInteger(startPeriodHeightStore(child, p)), childStart) + lockTime(child, p))
182182 }
183183
184184
185185 func treasury (child) = valueOrElse(getString(treasuryStore(child)), child)
186186
187187
188188 func int (key) = toString(valueOrElse(getInteger(key), 0))
189189
190190
191191 func str (key) = valueOrElse(getString(key), "")
192192
193193
194194 func adviseProject (child) = {
195195 let p = period(child)
196196 let periodStr = toString(p)
197197 ((((((((((((((((((((((((((((((((((((((((((((((((((("height: " + toString(HEIGHT)) + ", project: ") + child) + ", owner: ") + str(ownerStore(child))) + ", treasury: ") + treasury(child)) + ", lock_time: ") + int(lockTimeStore(child))) + ", skin_required: ") + int(skinRequiredStore(child))) + ", skin_max: ") + int(skinMaxStore(child))) + ", min_commitment: ") + int(minCommitmentStore(child))) + ", skin_total: ") + int(skinTotalStore(child))) + ", investments_required: ") + int(investmentsRequiredStore(child))) + ", investments_max: ") + int(investmentsMaxStore(child))) + ", investments_total: ") + int(investmentsTotalStore(child))) + ", investments_token: ") + str(investmentsTokenStore(child))) + ", commitments: ") + str(commitmentsStore(child))) + ", create_height: ") + int(createHeightStore(child))) + ", start_height: ") + toString(valueOrElse(getInteger(startHeightStore(child)), -1))) + ", cancel_height: ") + toString(valueOrElse(getInteger(cancelHeightStore(child)), -1))) + ", period: ") + periodStr) + ", period_") + periodStr) + "_start_after_height: ") + toString(valueOrElse(getInteger(startPeriodAfterHeightStore(child, p)), -1))) + ", period_") + periodStr) + "_start_height: ") + toString(valueOrElse(getInteger(startCurrentPeriodHeightStore(child)), -1))) + ", period_") + periodStr) + "_lock_time: ") + toString(lockTime(child, p))) + ", unlock_height: ") + toString(unlockHeight(child))) + ", period_investments_total: ") + int(investmentsPeriodTotalStore(child)))
198198 }
199199
200200
201201 func adviseUserProject (child,user) = ((((((((("height: " + toString(HEIGHT)) + ", project: ") + child) + ", skin:") + toString(currentUserSkin(child, user))) + ", power:") + toString(valueOrElse(userCommitment(child, user), 0))) + ", investments: ") + int(investorStore(child, user)))
202202
203203
204204 func commitAfterStartForInternal (i,child,address,additionalLockRounds) = {
205205 let a = allowed("commitAfterStartFor")
206206 if ((a == a))
207207 then if ((0 > additionalLockRounds))
208208 then throw("invalid additionalLockRounds")
209209 else if (!(contains(valueOrElse(getString(commitAfterAddressesStore(child)), ""), toString(i.caller))))
210210 then throw("commitAfterStartForInternal. denied")
211211 else {
212212 let p = i.payments[0]
213213 if (if ((p.assetId != pwrAssetId))
214214 then true
215215 else (size(i.payments) != 1))
216216 then throw("invalid payments: only $PWR token expected")
217217 else {
218218 let commitment = p.amount
219219 let cmds = [changeBy(userSkinStore(child, address), commitment), changeBy(skinTotalStore(child), commitment), changeBy(pwrTotalStore, commitment)]
220220 if ((additionalLockRounds > 0))
221221 then {
222222 let unlockRound = (period(child) + additionalLockRounds)
223223 IntegerEntry(userSkinUnlockPeriodStore(child, address), unlockRound) :: cmds
224224 }
225225 else cmds
226226 }
227227 }
228228 else throw("Strict value is not equal to itself.")
229229 }
230230
231231
232232 @Callable(i)
233233 func projectFor (owner,skin,maxSkin,minCommitment,lockTime,investments,maxInvestments,investmentsToken,commitments,child) = {
234234 let a = allowed("projectFor")
235235 if ((a == a))
236236 then if (!(contains(mainAddresses, toString(i.caller))))
237237 then throw("denied")
238238 else {
239239 let t = valueOrErrorMessage(addressFromString(child), "invalid treasury address")
240240 if ((t == t))
241241 then {
242242 let token = assetId(investmentsToken)
243243 if ((token == token))
244244 then if (if ((maxSkin > 0))
245245 then (skin > maxSkin)
246246 else false)
247247 then throw("invalid maxSkin")
248248 else if (if ((maxInvestments > 0))
249249 then (investments > maxInvestments)
250250 else false)
251251 then throw("invalid maxInvestments")
252252 else [writeConstString(ownerStore(child), owner), writeInt(createHeightStore(child), HEIGHT), writeInt(skinRequiredStore(child), skin), writeInt(skinMaxStore(child), maxSkin), writeInt(minCommitmentStore(child), minCommitment), writeInt(lockTimeStore(child), lockTime), writeInt(investmentsRequiredStore(child), investments), writeConstString(investmentsTokenStore(child), investmentsToken), writeConstString(commitmentsStore(child), commitments), writeConstString(treasuryStore(child), child), writeInt(investmentsMaxStore(child), maxInvestments)]
253253 else throw("Strict value is not equal to itself.")
254254 }
255255 else throw("Strict value is not equal to itself.")
256256 }
257257 else throw("Strict value is not equal to itself.")
258258 }
259259
260260
261261
262262 @Callable(i)
263263 func increraseSkin (child,skinIncrement) = {
264264 let a = allowed("increraseSkin")
265265 if ((a == a))
266266 then {
267267 let s = if (assertNotStarted(child))
268268 then assertNotCancelled(child)
269269 else false
270270 if ((s == s))
271271 then if ((0 >= skinIncrement))
272272 then throw("invalid argument: skinIncrement should be positive")
273273 else {
274274 let owner = getStringValue(ownerStore(child))
275275 if ((toString(i.caller) != owner))
276276 then throw("denied")
277277 else [changeBy(skinRequiredStore(child), skinIncrement)]
278278 }
279279 else throw("Strict value is not equal to itself.")
280280 }
281281 else throw("Strict value is not equal to itself.")
282282 }
283283
284284
285285
286286 @Callable(i)
287287 func commitFor (child,address) = {
288288 let a = allowed("commitFor")
289289 if ((a == a))
290290 then {
291291 let s = assertNotStartedPeriod(child)
292292 if ((s == s))
293293 then {
294294 let p = i.payments[0]
295295 if ((p.assetId != pwrAssetId))
296296 then throw("invalid attached payment: $power token expected")
297297 else {
298298 let commitment = p.amount
299299 let minCommitment = valueOrErrorMessage(getInteger(minCommitmentStore(child)), "Child DAO not found")
300300 if ((minCommitment > commitment))
301301 then throw(("Min. commitment is " + toString(minCommitment)))
302302 else {
303303 let skinTotalStore1 = skinTotalStore(child)
304304 let newSkinTotal = (valueOrElse(getInteger(skinTotalStore1), 0) + commitment)
305305 let skinMax = valueOrElse(getInteger(skinMaxStore(child)), 0)
306306 if (if ((skinMax > 0))
307307 then (newSkinTotal > skinMax)
308308 else false)
309309 then throw(("Total max. skin is reached: " + toString(skinMax)))
310310 else [changeBy(userSkinStore(child, address), commitment), IntegerEntry(skinTotalStore1, newSkinTotal), changeBy(pwrTotalStore, commitment)]
311311 }
312312 }
313313 }
314314 else throw("Strict value is not equal to itself.")
315315 }
316316 else throw("Strict value is not equal to itself.")
317317 }
318318
319319
320320
321321 @Callable(i)
322322 func commitForMiner (child,address) = {
323323 let a = allowed("commitForMiner")
324324 if ((a == a))
325325 then if (!(contains(mainAddresses, toString(i.caller))))
326326 then throw("denied")
327327 else {
328328 let p = i.payments[0]
329329 if (if ((p.assetId != pwrAssetId))
330330 then true
331331 else (size(i.payments) != 1))
332332 then throw("invalid payments: only $PWR token expected")
333333 else {
334334 let commitment = p.amount
335335 [changeBy(userSkinStore(child, address), commitment), changeBy(skinTotalStore(child), commitment), changeBy(pwrTotalStore, commitment)]
336336 }
337337 }
338338 else throw("Strict value is not equal to itself.")
339339 }
340340
341341
342342
343343 @Callable(i)
344344 func commitAfterStartFor (child,address) = commitAfterStartForInternal(i, child, address, 0)
345345
346346
347347
348348 @Callable(i)
349349 func commitAfterStartWithLockRoundFor (child,address,additionalLockRounds) = commitAfterStartForInternal(i, child, address, additionalLockRounds)
350350
351351
352352
353353 @Callable(i)
354354 func invest (child) = {
355355 let a = allowed("invest")
356356 if ((a == a))
357357 then {
358358 let s = assertNotStartedPeriod(child)
359359 if ((s == s))
360360 then {
361361 let token = investmentsToken(child)
362362 if ((i.payments[0].assetId != token))
363363 then throw("invalid investments asset id")
364364 else {
365365 let amount = i.payments[0].amount
366366 let maximum = valueOrElse(getInteger(investmentsMaxStore(child)), 0)
367367 func datas (a) = [changeBy(investorStore(child, toString(i.caller)), a), changeBy(investmentsTotalStore(child), a), changeBy(investmentsPeriodTotalStore(child), a)]
368368
369369 if ((maximum > 0))
370370 then {
371371 let totalStore = investmentsTotalStore(child)
372372 let total = valueOrElse(getInteger(totalStore), 0)
373373 let investmens = min([amount, (maximum - total)])
374374 if ((0 >= investmens))
375375 then throw(("Total max. investments is reached: " + toString(maximum)))
376376 else {
377377 let chargeBack = (amount - investmens)
378378 if ((chargeBack > 0))
379379 then [ScriptTransfer(i.caller, chargeBack, token), datas(investmens)]
380380 else datas(investmens)
381381 }
382382 }
383383 else datas(amount)
384384 }
385385 }
386386 else throw("Strict value is not equal to itself.")
387387 }
388388 else throw("Strict value is not equal to itself.")
389389 }
390390
391391
392392
393393 @Callable(i)
394394 func investAfterStart (child) = {
395395 let a = allowed("investAfterStart")
396396 if ((a == a))
397397 then if ((valueOrElse(getBoolean(investAfterStartStore(child)), false) == false))
398398 then throw("denied (investAfterStart)")
399399 else {
400400 let s = assertIsStarted(child)
401401 if ((s == s))
402402 then if ((period(child) > 0))
403403 then throw("initial round is ended")
404404 else {
405405 let token = investmentsToken(child)
406406 if ((i.payments[0].assetId != token))
407407 then throw("invalid investments asset id")
408408 else {
409409 let amount = i.payments[0].amount
410410 [changeBy(investorStore(child, toString(i.caller)), amount), changeBy(investmentsTotalStore(child), amount), changeBy(investmentsPeriodTotalStore(child), amount), ScriptTransfer(addressFromStringValue(treasury(child)), amount, investmentsToken(child))]
411411 }
412412 }
413413 else throw("Strict value is not equal to itself.")
414414 }
415415 else throw("Strict value is not equal to itself.")
416416 }
417417
418418
419419
420420 @Callable(i)
421421 func start (child) = {
422422 let paused = allowed("start")
423423 if ((paused == paused))
424424 then {
425425 let s = if (assertNotStarted(child))
426426 then assertNotCancelled(child)
427427 else false
428428 if ((s == s))
429429 then {
430430 let totalSkin = valueOrElse(getInteger(skinTotalStore(child)), 0)
431431 let skinRequired = valueOrErrorMessage(getInteger(skinRequiredStore(child)), "child not registered")
432432 if ((skinRequired > totalSkin))
433433 then throw("not enough skin in the game")
434434 else {
435435 let totalInvestments = valueOrElse(getInteger(investmentsTotalStore(child)), 0)
436436 if ((getIntegerValue(investmentsRequiredStore(child)) > totalInvestments))
437437 then throw("not enough investments")
438438 else [IntegerEntry(startHeightStore(child), HEIGHT), ScriptTransfer(addressFromStringValue(treasury(child)), totalInvestments, investmentsToken(child))]
439439 }
440440 }
441441 else throw("Strict value is not equal to itself.")
442442 }
443443 else throw("Strict value is not equal to itself.")
444444 }
445445
446446
447447
448448 @Callable(i)
449449 func initNextPeriod (child,blockBetweenPeriods,lockTime) = {
450450 let paused = allowed("initNextPeriod")
451451 if ((paused == paused))
452452 then if (if ((toString(i.caller) != getStringValue(ownerStore(child))))
453453 then (i.caller != this)
454454 else false)
455455 then throw("denied")
456456 else if ((0 > blockBetweenPeriods))
457457 then throw("blockBetweenPeriods should be positive or zero")
458458 else if ((1 > lockTime))
459459 then throw("lockTime should be positive")
460460 else {
461461 let unlockHeight_ = unlockHeight(child)
462462 if ((unlockHeight_ > HEIGHT))
463463 then throw("current period is still active")
464464 else {
465465 let p = period(child)
466466 if (if ((p > 0))
467467 then !(isDefined(startPeriodHeightStore(child, p)))
468468 else false)
469469 then throw("next period already initialized")
470470 else {
471471 let newPeriod = (p + 1)
472472 [IntegerEntry(periodStore(child), newPeriod), IntegerEntry(startPeriodAfterHeightStore(child, newPeriod), (unlockHeight_ + blockBetweenPeriods)), IntegerEntry(periodLockTimeStore(child, newPeriod), lockTime)]
473473 }
474474 }
475475 }
476476 else throw("Strict value is not equal to itself.")
477477 }
478478
479479
480480
481481 @Callable(i)
482482 func startPeriod (child) = {
483483 let paused = allowed("startPeriod")
484484 if ((paused == paused))
485485 then {
486486 let s = assertNotStartedPeriod(child)
487487 if ((s == s))
488488 then {
489489 let period_ = period(child)
490490 let startAfterStore = startPeriodAfterHeightStore(child, period_)
491491 let startAfter = valueOrErrorMessage(getInteger(startAfterStore), ("key not found: " + startAfterStore))
492492 if ((startAfter > HEIGHT))
493493 then throw("too early")
494494 else {
495495 let totalSkin = valueOrElse(getInteger(skinTotalStore(child)), 0)
496496 let skinRequired = valueOrErrorMessage(getInteger(skinRequiredStore(child)), "child not registered")
497497 if ((skinRequired > totalSkin))
498498 then throw("not enough skin in the game")
499499 else {
500500 let periodInvestments = valueOrElse(getInteger(investmentsPeriodTotalStore(child)), 0)
501501 [IntegerEntry(startCurrentPeriodHeightStore(child), HEIGHT), ScriptTransfer(addressFromStringValue(child), periodInvestments, investmentsToken(child))]
502502 }
503503 }
504504 }
505505 else throw("Strict value is not equal to itself.")
506506 }
507507 else throw("Strict value is not equal to itself.")
508508 }
509509
510510
511511
512512 @Callable(i)
513513 func slash (child,amount) = {
514514 let paused = allowed("/")
515515 if ((paused == paused))
516516 then if (!(contains(slashers, toString(i.caller))))
517517 then throw("denied")
518518 else if (!(isDefined(getInteger(startHeightStore(child)))))
519519 then throw("not started")
520520 else [changeBy(skinTotalStore(child), -(amount)), Burn(pwrAssetId, amount)]
521521 else throw("Strict value is not equal to itself.")
522522 }
523523
524524
525525
526526 @Callable(i)
527527 func completeFor (child,user) = if (!(contains(mainAddresses, toString(i.caller))))
528528 then throw("denied")
529529 else {
530530 let unlockHeight_ = unlockHeight(child)
531531 if ((unlockHeight_ > HEIGHT))
532532 then throw("still locked")
533533 else {
534534 let endedPeriod = completedPeriod(child)
535535 let unlockRound = valueOrElse(getInteger(userSkinUnlockPeriodStore(child, user)), 0)
536536 if ((unlockRound > endedPeriod))
537537 then throw((("you can unlock on " + toString(unlockRound)) + " round"))
538538 else {
539539 let skin = currentUserSkin(child, user)
540540 if ((skin == 0))
541541 then throw("you had no skin in the game")
542542 else $Tuple2([ScriptTransfer(i.caller, skin, pwrAssetId), DeleteEntry(userSkinStore(child, user)), changeBy(skinTotalStore(child), -(skin)), changeBy(pwrTotalStore, -(skin)), IntegerEntry(userSkinExitedInPeriodStore(child, user, endedPeriod), skin)], skin)
543543 }
544544 }
545545 }
546546
547547
548548
549549 @Callable(i)
550550 func cancel (child) = {
551551 let paused = allowed("cancel")
552552 if ((paused == paused))
553553 then {
554554 let s = if (assertNotStarted(child))
555555 then true
556556 else assertNotCancelled(child)
557557 if ((s == s))
558558 then if ((toString(i.caller) != getStringValue(ownerStore(child))))
559559 then throw("denied. not an owner")
560560 else [IntegerEntry(cancelHeightStore(child), HEIGHT)]
561561 else throw("Strict value is not equal to itself.")
562562 }
563563 else throw("Strict value is not equal to itself.")
564564 }
565565
566566
567567
568568 @Callable(i)
569569 func undoInvest (child) = {
570570 let paused = allowed("undoInvest")
571571 if ((paused == paused))
572572 then {
573573 let s = assertNotStarted(child)
574574 if ((s == s))
575575 then {
576576 let investmentsStore1 = investorStore(child, toString(i.caller))
577577 let investments = valueOrElse(getInteger(investmentsStore1), 0)
578578 if ((investments == 0))
579579 then throw("no investments")
580580 else [DeleteEntry(investmentsStore1), changeBy(investmentsTotalStore(child), -(investments)), changeBy(investmentsPeriodTotalStore(child), -(investments)), ScriptTransfer(i.caller, investments, investmentsToken(child))]
581581 }
582582 else throw("Strict value is not equal to itself.")
583583 }
584584 else throw("Strict value is not equal to itself.")
585585 }
586586
587587
588588
589589 @Callable(i)
590590 func undoCommitFor (child,address) = {
591591 let paused = allowed("undoCommitFor")
592592 if ((paused == paused))
593593 then if (!(contains(mainAddresses, toString(i.caller))))
594594 then throw("denied")
595595 else {
596596 let s = assertNotStarted(child)
597597 if ((s == s))
598598 then {
599599 let userSkinStore1 = userSkinStore(child, address)
600600 let skin = valueOrElse(getInteger(userSkinStore1), 0)
601601 if ((skin == 0))
602602 then throw("no skin")
603603 else $Tuple2([DeleteEntry(userSkinStore1), changeBy(skinTotalStore(child), -(skin)), changeBy(pwrTotalStore, -(skin)), ScriptTransfer(i.caller, skin, pwrAssetId)], skin)
604604 }
605605 else throw("Strict value is not equal to itself.")
606606 }
607607 else throw("Strict value is not equal to itself.")
608608 }
609609
610610
611611
612612 @Callable(i)
613613 func userPower (child,user) = $Tuple2(nil, valueOrElse(userCommitment(child, user), 0))
614614
615615
616616
617617 @Callable(i)
618618 func totalPower (child) = $Tuple2(nil, valueOrErrorMessage(getInteger(skinTotalStore(child)), "totalPower: child not found"))
619619
620620
621621
622622 @Callable(i)
623623 func init (conf) = [writeConstString(configAddressStore, conf)]
624624
625625
626626
627627 @Callable(i)
628628 func pwrToManagers () = if ((i.caller != this))
629629 then throw("denied")
630630 else {
631631 let ambassadorDAO = "3P48jWGMbCS4NaLh9xJnEhaDYnFYpoAGhET"
632- let managers = ["3PPshLjQiPXyqX5EPxeNQMVRgQ92EM2949n", "3PLMfVFMB7d6NjmU4FrMWocBjmE4Zs28wmd", "3PHEWmijmyaimJBPT4nbmqPWfiXo7XY4FqY", "3PGoajk2tfkyRTGmsQB3KKV3h6Ux5oXx3Rf", "3PQqSFPZEi9Qp326hCZ8dnNRvYSnjRhmjNj", "3P2njkX641B2SxcNYPuHxB4vdYf2JdgVFaK", "3PDxh4xFdZDjUJxJ6qArCsTpWe3w4njmpjf", "3PQp1cAoSxVXrLb7Xh6xLtESoDhXCJAxQjD", "3PHe5jHM5EPEJhjte5z2gjG7yaAjym9uRSX", "3PAtmRKeiVC7wFLT4VkokFyisUHnE2QDu3y", "3PDxjS6qGwmKcuNz1yXDA1LojCGVGAsP6Nj", "3P6mnktfCAddt88RmkkCaHYBmTLNCjxT4vm", "3PMcGiGcJWxhfpfVpAj3dkNwsPA222vHVXy", "3PNuv3mCqoJYfdGmTGMVWoBGrCNeQ8VfZK3", "3PR86LJEAvKRcJAT4QDYSKkNNBd8W3WGiF5", "3P1yyYLmezkFUH2tu6sRo6ZYpnyV9e6YaQW", "3P94jbNHfuMJaGx24SmzzqZN6AfRy5GGTWX", "3P527KuE1E2C9aCcm7oXU1MauPZmRETLLAe", "3PAUmjxU2D7mAdqHdFoZVtZgXUCgBauXSD7", "3PM7tqtVQu1F7SNNmCuyV5KcYQRomBQbHbg", "3PLqsXPM1uwEZ4BHNSa1EZnoVVAMybez3gi", "3PJxzZk2umypA9J57cpnL2UpbZHK8KdWjeu", "3P3jDgFDA7oBqVMvbUEPHdwVVTKBQqJKWwH", "3PD6SUGnf4ywQdGM3z57yX9Se5PS5fnZJtY", "3PHN8QgZNJm4AY3Do8UJZ85ZmXsr8ywf1zi", "3P7YxdBKVpGrv38coUochY7MfTkoSSQ7vDM", "3PPStMjodj2eiVsjAWiFM27NNV18ehN6UdR", "3P2QVWdwKmA8fc96fPViwu437jWhTg7T3pA", "3PQHXMYdNu1SKLUcvqQNWbsxzbx2zJ3N4hN", "3PGZxQuosgZ5y1ALdWqhDFA2arjG4Cn9hHH", "3P51VU81e9iMKTDgzDm41RydXsLKqc89u2q", "3PEabRdNwXT7RXrtVWhNZLYHdudL25Sr28D", "3PLmdKE9FTckAHL9XmeoqwUZNeEazXGu5JN", "3PRCCa4GATKWhq46y6ZJuK3xWFkBnEjkm5H", "3PE4GMqo6MD3UQL4ZBgEVpt2RtUjsPcwXUz", "3PLnmwERbeFXx5yQY8fiGv3Q7zqgSqx1bna", "3PDLoPMNiWidiBLs3E4jAR6e5a4eGwWsEw2", "3P4ezpAnUcz1RuWLcrxz5fcXv6XJEqsPAvP", "3P6aR1tmvhXEeFQHPEcahBmRP2izeoUi4wP", "3P5n5oTYnAtGq1i4dMQAWnyc24QLiaciC4c"]
632+ let managers = ["3P4iyx5gMpxHppZaNzAPpGQykVgFAwnkLCB", "3PCCJhuM1qPaDS9rmGW98xNZtG27Ceog6rj", "3P6epMCJVfZo6y5xqYzQRez29yFiCZXcMqJ", "3PCGAiYiG4gnRugaD2oW44vQX14YVKtmkxj", "3PPRyBMpT2z6JPPTB79MCK3bGkSDUrGt4DQ", "3PPzVKgiFYMGRdkF7tp7s5ACKmXf3gPyMEw", "3P4AVTzoBGVezBaaxMzgiSPoPZjoUpUiH68", "3P2jPH6GZrPYUVAWvbqXKdGpMhhT5Zz31Cc", "3P2oww4jpu7HZxmho6WPxyzrZiLt5Q1zU3N", "3PEtrqSP8vKLZ825HosG4nmgUn7A6rKBGGB", "3P6ZFbp2YFEfneW8BYW8TSfE2pmLoKFGQTw", "3P2Lw3vQvpXnceQQjPnLgQCuAwbhbghi6XT", "3PNcygtbzHJS6KPg79fxG7hgQ5bX9TfRnER", "3P2zW1UfH1U7GFGurkMZB4JW3nn1Fna15TK", "3PKkuiyx2SSpdRJ5GU62YoFzC5ZUNsTRZDM", "3P3rcK9ZCvtL8udbLu2uwCcbHpQoqRWMcTS", "3P2sobiJeMdqWiUVLQkjXMT3rSM9PiFYNbt", "3PPN36TbFUqyZRFVcPEtDVBcu2p2rN5CbRq", "3PQQDPDUY6di2guBuixD74YUR9JkMYUQKFF", "3PQ47yWQGvVqHaasbyTXGjFLYk2g7E3yZf8", "3P6P2zidiHFcANhw8iEt1zNdDqZKDmjnbE6", "3PKExenHSLMvo62iEPGnMy2HnEe3HcyfxsR", "3PHrr2gfGVpso27aX4qzBkyZZbc8iqAY5Lg", "3PM6775xKJ53dB9YS6ne1EZsuXwT31yQsFW", "3PQwdVRz7ZkiRLCqiaYqujyazB8mkzvrhQu", "3P74tZne6MRwvE3e3Z7yHbvfBkRNzbzaxeN", "3PQXqD18VwdFk6YESiTWVA6LZTgpFZbXWmo", "3P8bQ4ffLBa2bZ9fG8CK7NPstbAguxFfKyp", "3PNqYQvWjkcU3HjYXV1vgjaxPPk8yLGt5A5", "3PLXf7DkmjHZwf8ZX8a5JLsHvpWUCGsPjBY", "3PEi1bbY3bGr8kCjozg52xBddrEDkRccLom", "3P8We5hJmHtdLgbCmFzSg65WJYtXqPwkFU2", "3PAF24JEz9bS6X4isps6CcwF1rDpwZBjubZ", "3PGNYGSDpjDyJA3PNhv5ahEhQWiBbHHdFTf", "3PKpGLhrPjbmtsHmFgQGVsCwdCARaZvCVE6", "3PQaFKTatXKVzPUZmujRPtDWTZVoV6pm337", "3PFg57kUeTeDG78hNGnRT8js6QcxyNAUGzo", "3PJ52ccbrCckj4zef7xxoM4GG1TiPzAWwVX", "3P7T3oA4jcCdL2sGk8nCbRACYLaf5dnpE7w", "3P9vFFCacAf4ZrWiRnT5ewWq9DB3nwVcsJh", "3P2fnXcs44ySZh2yyxB8KUdWyp6XrhRrScG", "3PMUxiH4Wgv6EBPgcuhKJkfQBhs5itp6uXj", "3PRBM9znaCt8oYMeVwnya7eokD9zeFGM5S1", "3PP4ibTENp5j436rgLDokojYJDiAqS2safM", "3P21c3LSVydhFxmEtxJtTy5wj57PRp7Dhzy", "3P8z28tk4nYpPxcu5vJZEWwFFq5MT1NGCFi", "3P8VgUQxgAgyWT55WL4bREiDDFo69Q8Y7KA", "3PCMvuDZiSB5RrXQKy93Yw5Dsj4JQ2ngm3S", "3P453XDhHM8FPgwzuNy5U4dqz9amJCRzycA", "3P9qM5iHzbzcbMpueVo2UTZqD3HeBEo5WeT", "3P2h9y9jiUrwPtDUdRXP5nWMNN1ThzhCLX1", "3PBSYg88T4BMNXenGMeYjkWLKbH35erie5u", "3P2CgGyqwbrntHi5ZQJDXp4z8gdQtfkzX6j", "3PL6exAG5wVaTc8w5hyAoYcRoir9aqT3HfK", "3PJV65rBjVJAmhTf9wy1HfsB433ofrin8WF", "3PMpHzzu4po9Fb3fa3D5wQ4SyqCMWGo9HNv", "3PFUL7PBtwyU6AUbP1CiF7u48y9nDpkK6gV", "3PK8Xa8WRwhutpDwWeLKTSktqJpcigzrUHY", "3PMqtHZuuBXRbYWBs6G3wA2Uyxsq5bfLssM", "3PNGjJMtAYECrsyXceGWjTEEAuiTPSBnPCv", "3PDKZPmQS1UeaZv11fFSn3cowoDpVSYmyqM", "3PCMVmQQ8bTenkgknn2V9RrFr5wXMtbhduc", "3P9FG4CAuE3jmVWnkbXmWLsF2dj8XuMTVtP", "3PBkwZK2nkaKBmHMqWzCNkPFvdPCfUgAWii", "3PDNpUyERkoor2Qt2kvmW4x8Q3oCDMu7PhE", "3PBg19Pn77JgEyvu4nABjpq3kabdquqeb4z", "3PJGZAVqji9sKGjPqF1A9Mco5FX9u488X3h", "3PHQS4EQzNoGPhey78XV5h5Jat14KyThjan", "3PG5SpWXN9UZ1e41kiTJZRSQBGFSbdxmYjD", "3PMsVqFVyPRfq6wmY2kDkEGsVo5Xwnrddgw", "3P269gqnRYQAuFcsJPdVaTGvxLUKKJPzQTH", "3PCDU5DGc2WuBPr1gJArbSYUL8CzA8X4U4B", "3PH8A36ESpF6JPXpTUnnc5othkqNLDNF3YY", "3PLy74HVDnR1Vm4X61cLRCJUSQz9uoENsuo", "3PB4uiUBShZDZ6hrqUFJziewSowZHDqtad9", "3P5KXwuYfuev6w2yfyFinvh9J5EbwCmX5vC", "3PFXY9PDwKXzKoi1MpggXFvGYrMGTtuyf3c", "3P4qAXSEptbXKxPnyJqCkJX2cqeHB2qaodx", "3P9j1AKqvhep99LvbhfP2PmBtiX5m5j77Zx"]
633633 let totalAmbassadors = size(managers)
634634 let pwrRewards = 1000000
635635 func fold (cmds,ambassador) = changeBy(userSkinStore(ambassadorDAO, ambassador), pwrRewards) :: cmds
636636
637637 [changeBy(skinTotalStore(ambassadorDAO), (pwrRewards * totalAmbassadors)), {
638638 let $l = managers
639639 let $s = size($l)
640640 let $acc0 = nil
641641 func $f0_1 ($a,$i) = if (($i >= $s))
642642 then $a
643643 else fold($a, $l[$i])
644644
645645 func $f0_2 ($a,$i) = if (($i >= $s))
646646 then $a
647647 else throw("List size exceeds 100")
648648
649649 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
650650 }]
651651 }
652652
653653

github/deemru/w8io/3ef1775 
146.48 ms