2022.12.31 12:18 [3449752] smart account 3PAZv9tgK1PX7dKR7b4kchq5qdpUS3G5sYT > SELF 0.00000000 Waves

{ "type": 13, "id": "CxRfKXFLXxuujk4SB2D59HhyvCQeXy4WdMeKvNvpuwGo", "fee": 2400000, "feeAssetId": null, "timestamp": 1672478325728, "version": 1, "sender": "3PAZv9tgK1PX7dKR7b4kchq5qdpUS3G5sYT", "senderPublicKey": "2cFG5wZimjVSeCT8ZCRybx7Mzo5tJF879aw2b31uLRmR", "proofs": [ "3cs52LRqkgdbpWQPPcJW62Tn2htYFE8ZCKAVLtEXwWx7inrv2sEZ8D6rJb7jMtNskwoKRGg4Ayvbj3NnHzLRikkq" ], "script": "base64:BgKRAQgCEgMKAQgSBAoCCAQSBQoDCAQIEgMKAQgSBAoCCAESABIAEgQKAggBEgQKAggBEgMKAQgSBAoCCAESAwoBCBIECgIIARIECgIIARIECgIIARIECgIBBBIFCgMIAQQSBAoCBAQSAwoBCBIECgIBBBIAEgQKAggEEgASBAoCCAESAwoBCBIAEgQKAggIEgMKAQg4AAtmYWN0b3JzQmFzZQDoBwEDZkNpAwV2YWx1ZQludW1lcmF0b3ILZGVub21pbmF0b3IEBGNhbmQJAGsDBQV2YWx1ZQUJbnVtZXJhdG9yBQtkZW5vbWluYXRvcgQBRACz5pOoCwQFZXhhY3QJAAACCQBqAgkAaAIJAGoCBQRjYW5kBQFECQBqAgULZGVub21pbmF0b3IFAUQFAUQJAGoCCQBoAgkAagIFBXZhbHVlBQFECQBqAgUJbnVtZXJhdG9yBQFEBQFEAwUFZXhhY3QFBGNhbmQJAGQCBQRjYW5kAAEBC3B1cmVBc3NldElkAQdhc3NldElkBAFpCQCRAwIJALUJAgUHYXNzZXRJZAIBXwAAAwkAAAIFAWkCBVdBVkVTBQR1bml0CQDZBAEFAWkBEHdyaXRlQ29uc3RTdHJpbmcCA2tleQV2YWx1ZQMJAQEhAQkBCWlzRGVmaW5lZAEJAJ0IAgUEdGhpcwUDa2V5CQELU3RyaW5nRW50cnkCBQNrZXkFBXZhbHVlCQACAQkArAICAhVhbHJlYWR5IGluaXRpYWxpemVkOiAFA2tleQEFYXNJbnQBBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAgNJbnQEA2ludAUHJG1hdGNoMAUDaW50CQACAQIDbToxAQZhc0ludDMBBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAg8oSW50LCBJbnQsIEludCkEAXgFByRtYXRjaDAFAXgEAXQFByRtYXRjaDAJAAIBAgEyARFhc1VzZXJCYWxhbmNlRGF0YQEFdmFsdWUEByRtYXRjaDAFBXZhbHVlAwkAAQIFByRtYXRjaDACIihJbnQsIEludCwgSW50LCBJbnQsIEludCwgQm9vbGVhbikEAXgFByRtYXRjaDAFAXgEAXQFByRtYXRjaDAJAAIBAgEzAAtjb25maWdTdG9yZQIGY29uZmlnAAVhVElkUwIIYVRva2VuSWQABGFJZFMCB2Fzc2V0SWQADWNvbmZpZ0FkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFC2NvbmZpZ1N0b3JlAAZsb2NrZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUNY29uZmlnQWRkcmVzcwIJbHBfbG9ja2VyAh5ubyBscF9sb2NrZXIgYWRkcmVzcyBpbiBjb25maWcCH2JhZCBscF9sb2NrZXIgYWRkcmVzcyBpbiBjb25maWcAC3Jlc2VydmVzU3RyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUNY29uZmlnQWRkcmVzcwIQcHJpbWFyeV9yZXNlcnZlcwIWbm8gcmVzZXJ2ZXMgcmVnaXN0ZXJlZAAIcmVzZXJ2ZXMJALwJAgULcmVzZXJ2ZXNTdHICAXwAA2ViUgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDWNvbmZpZ0FkZHJlc3MCCmViX3Jld2FyZHMCDW5vIGViX3Jld2FyZHMAC3ZpcmVzTWludGVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDWNvbmZpZ0FkZHJlc3MCDHZpcmVzX21pbnRlcgIUbWFpbjogbm8gdmlyZXNNaW50ZXICCmJhZCBtaW50ZXIAB21heWJldlMJAJ0IAgUNY29uZmlnQWRkcmVzcwIMdmlyZXNfc3Rha2VyAAJ2UwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBQdtYXliZXZTAg9ubyB2aXJlc19zdGFrZXIAAmRDCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDWNvbmZpZ0FkZHJlc3MCEmRpdmlkZW5kc19jb250cmFjdAIVbm8gZGl2aWRlbmRzX2NvbnRyYWN0AgdiYWQgZGl2AANtVkQEByRtYXRjaDAJAJ0IAgUNY29uZmlnQWRkcmVzcwIRdmlyZXNfZGlzdHJpYnV0b3IDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFkBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBBQFkBQR1bml0AAJWRAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBQNtVkQCCG5vIGRpc3RyAAdsaW1pdGVyBAckbWF0Y2gwCQCdCAIFDWNvbmZpZ0FkZHJlc3MCB2xpbWl0ZXIDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFkBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBBQFkBQR1bml0ABFtYXliZVZpcmVzQXNzZXRJZAkAnQgCBQt2aXJlc01pbnRlcgUEYUlkUwAMdmlyZXNBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBRFtYXliZVZpcmVzQXNzZXRJZAILbm8gdmlyZXMgaWQCEGludmFsaWQgdmlyZXMgaWQBDHZpcmVzUGF5bWVudAEBaQMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAAAAAMJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUMdmlyZXNBc3NldElkCQACAQIJbm90IHZpcmVzCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAEQYXNzZXRJZE9mUmVzZXJ2ZQEDcnNyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUDcnNyBQRhSWRTAhFubyBhc3NldElkIGluIHJzcgEQY29sbGF0ZXJhbEZhY3RvcgEDcnNyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUNY29uZmlnQWRkcmVzcwkArAICCQEQYXNzZXRJZE9mUmVzZXJ2ZQEFA3JzcgIRX0NvbGxhdGVyYWxGYWN0b3ICBG5vIDEBFGxpcXVpZGF0aW9uVGhyZXNob2xkAQNyc3IJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQ1jb25maWdBZGRyZXNzCQCsAgIJARBhc3NldElkT2ZSZXNlcnZlAQUDcnNyAhVfTGlxdWlkYXRpb25UaHJlc2hvbGQCBG5vIDIAFmFjY291bnRIZWFsdGhUaHJlc2hvbGQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQ1jb25maWdBZGRyZXNzAhhhY2NvdW50X2hlYWx0aF90aHJlc2hvbGQCBG5vIDQAFGFjY291bnRIZWFsdGhPdmVybGFwCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUNY29uZmlnQWRkcmVzcwIWYWNjb3VudF9oZWFsdGhfb3ZlcmxhcAIEbm8gNQALbGlxdWlkYXRvcnMJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUNY29uZmlnQWRkcmVzcwILbGlxdWlkYXRvcnMCAAEJcmVzZXJ2ZUJ5AgVzdG9yZQV2YWx1ZQoBBGZvbGQCAWEBcgQHJG1hdGNoMAUBYQMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAVmb3VuZAUHJG1hdGNoMAUFZm91bmQEA3JzcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFAXICD3JzciBiYWQgYWRkcmVzcwMJAAACCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUDcnNyBQVzdG9yZQkArAICAgtyc3IgaGFzIG5vIAUFc3RvcmUFBXZhbHVlBQNyc3IFBHVuaXQEByRtYXRjaDAKAAIkbAUIcmVzZXJ2ZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQR1bml0CgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQRmb2xkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQDCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQFZm91bmQFByRtYXRjaDAFBWZvdW5kCQACAQkArAICAgh1bmtub3duIAUFc3RvcmUBA3ZsUgEBcgMJAQhjb250YWlucwIFC3Jlc2VydmVzU3RyBQFyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQUBcgINbWFpbjogYmFkIHJzcgkAAgEJAKwCAgIMdW5rbm93biByc3I6BQFyAQt1c2VyQmFsYW5jZQIDcnNyBHVzZXIJARFhc1VzZXJCYWxhbmNlRGF0YQEJAPwHBAUDcnNyAgt1c2VyQmFsYW5jZQkAzAgCBQR1c2VyBQNuaWwFA25pbAAObWF5YmVQcm90ZWN0ZWQEByRtYXRjaDAJAJ0IAgUNY29uZmlnQWRkcmVzcwIRcHJvdGVjdGVkX3Jlc2VydmUDCQABAgUHJG1hdGNoMAIGU3RyaW5nBANwZHMFByRtYXRjaDAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQNwZHMCDWJhZCBwcm90ZWN0ZWQFBHVuaXQAEHByb3RlY3RlZFJlc2VydmUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgUObWF5YmVQcm90ZWN0ZWQCEG5vIHByb3RlY3RlZCByc3IAHHByb2hpYml0ZWRDb2xsYXRlcmFsUmVzZXJ2ZXMEByRtYXRjaDAJAJ0IAgUNY29uZmlnQWRkcmVzcwIccHJvaGliaXRlZENvbGxhdGVyYWxSZXNlcnZlcwMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJALUJAgUBcwIBfAUDbmlsAR1lbnN1cmVOb1Byb2hpYml0ZWRDb2xsYXRlcmFscwEEdXNlcgoBCGZvbGRGdW5jAgFhEXByb2hpYml0ZWRSZXNlcnZlBANhdGIJAQt2YWx1ZU9yRWxzZQIJAJoIAgkBEUBleHRyTmF0aXZlKDEwNjIpAQURcHJvaGliaXRlZFJlc2VydmUJAKwCAgUEdXNlcgIOX2FUb2tlbkJhbGFuY2UAAAMJAGYCBQNhdGIAAQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgImb3BlcmF0aW9uIGRlbmllZDogdXNlciBoYXMgZGVwb3NpdCBpbiAFEXByb2hpYml0ZWRSZXNlcnZlAgI6IAkApAMBBQNhdGICCyhscCB0b2tlbnMpBgQbZW5zdXJlTm9Qcm90ZWN0ZWRVU0ROb3JFVVJOBANhbnkJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFEHByb3RlY3RlZFJlc2VydmUJAKwCAgI4dXNlclNoYXJlc19ERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cF8FBHVzZXIAAAkBC3ZhbHVlT3JFbHNlAgkAmggCBRBwcm90ZWN0ZWRSZXNlcnZlCQCsAgICOHVzZXJTaGFyZXNfRFVrMllUeGhSb0FxTUpMdXM0RzJiM2ZSOGhNSFZoNmVpeUZ4NXIyOVZSNnRfBQR1c2VyAAADCQBmAgUDYW55AAAJAAIBAjBoYXMgbm9uLWJvcnJvd2FibGUgTmV1dHJpbm8gYXNzZXRzIGFzIGNvbGxhdGVyYWwGCgACJGwFHHByb2hpYml0ZWRDb2xsYXRlcmFsUmVzZXJ2ZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBRtlbnN1cmVOb1Byb3RlY3RlZFVTRE5vckVVUk4KAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCGZvbGRGdW5jAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwESZW5zdXJlTm9Qcm9oaWJpdGVkAwR1c2VyA2JwdQdyZXNlcnZlAwMJAAACBQNicHUAAAYJAQlpc0RlZmluZWQBCQDPCAIFHHByb2hpYml0ZWRDb2xsYXRlcmFsUmVzZXJ2ZXMFB3Jlc2VydmUGCQEdZW5zdXJlTm9Qcm9oaWJpdGVkQ29sbGF0ZXJhbHMBBQR1c2VyARFlbnN1cmVOb1Byb3RlY3RlZAEEdXNlcgQDaGFzBAckbWF0Y2gwBQ5tYXliZVByb3RlY3RlZAMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAJwYQUHJG1hdGNoMAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQJwYQkArAICAhVwcm90ZWN0ZWRfY29sbGF0ZXJhbF8FBHVzZXIHBwMFA2hhcwkAAgECCmRpc2FsbG93ZWQFBHVuaXQBC2Vuc3VyZUxpbWl0BAZhY3Rpb24DcnNyBHVzZXIGYW1vdW50BAckbWF0Y2gwBQdsaW1pdGVyAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEAWwFByRtYXRjaDAJAQVhc0ludAEJAPwHBAUBbAINdmFsaWRhdGVMaW1pdAkAzAgCBQZhY3Rpb24JAMwIAgkApQgBBQNyc3IJAMwIAgUEdXNlcgkAzAgCBQZhbW91bnQFA25pbAUDbmlsBgEJdXNlclBvd2VyAQR1c2VyBBBwcm90ZWN0ZWREZXBvc2l0BAckbWF0Y2gwBQ5tYXliZVByb3RlY3RlZAMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAJwYQUHJG1hdGNoMAkBBWFzSW50AQkA/AcEBQJwYQILYm9ycm93UG93ZXIJAMwIAgUEdXNlcgUDbmlsBQNuaWwAAAoBBGZvbGQCBnRvdGFscwFyBAskdDA5MjE3OTI2MwUGdG90YWxzBAZ0b3RhbEQIBQskdDA5MjE3OTI2MwJfMQQGdG90YWxCCAULJHQwOTIxNzkyNjMCXzIED251bWJlck9mQm9ycm93cwgFCyR0MDkyMTc5MjYzAl8zBANyc3IJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQFyAg9yc3IgYmFkIGFkZHJlc3MEAmNmCQEQY29sbGF0ZXJhbEZhY3RvcgEFA3JzcgQCbHQJARRsaXF1aWRhdGlvblRocmVzaG9sZAEFA3JzcgQLJHQwOTQxNzk1MDEJAQt1c2VyQmFsYW5jZQIFA3JzcgUEdXNlcgQFdG9rZW4IBQskdDA5NDE3OTUwMQJfMQQFYXNzZXQIBQskdDA5NDE3OTUwMQJfMgQKZGVwb3NpdFVzZAgFCyR0MDk0MTc5NTAxAl8zBARkZWJ0CAULJHQwOTQxNzk1MDECXzQEB2RlYnRVc2QIBQskdDA5NDE3OTUwMQJfNQQMYXNDb2xsYXRlcmFsCAULJHQwOTQxNzk1MDECXzYEDHRvdGFsQm9ycm93cwkAZAIFD251bWJlck9mQm9ycm93cwMJAGYCBQRkZWJ0AAAAAQAABBNlZmZlY3RpdmVEZXBvc2l0VXNkAwUMYXNDb2xsYXRlcmFsBQpkZXBvc2l0VXNkAAAECm92ZXJsYXBVc2QJAJcDAQkAzAgCBQdkZWJ0VXNkCQDMCAIFE2VmZmVjdGl2ZURlcG9zaXRVc2QFA25pbAQNb3ZlcmxhcENoYXJnZQkBA2ZDaQMFCm92ZXJsYXBVc2QFFGFjY291bnRIZWFsdGhPdmVybGFwBQtmYWN0b3JzQmFzZQMJAGYCBQdkZWJ0VXNkBRNlZmZlY3RpdmVEZXBvc2l0VXNkCQCVCgMFBnRvdGFsRAkAZAIJAGQCBQZ0b3RhbEIJAGsDCQBlAgUHZGVidFVzZAUTZWZmZWN0aXZlRGVwb3NpdFVzZAULZmFjdG9yc0Jhc2UFAmx0BQ1vdmVybGFwQ2hhcmdlBQx0b3RhbEJvcnJvd3MJAJUKAwkAZAIFBnRvdGFsRAkAawMJAGUCBRNlZmZlY3RpdmVEZXBvc2l0VXNkBQdkZWJ0VXNkBQJjZgULZmFjdG9yc0Jhc2UJAGQCBQZ0b3RhbEIFDW92ZXJsYXBDaGFyZ2UFDHRvdGFsQm9ycm93cwQBcgoAAiRsBQhyZXNlcnZlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwUQcHJvdGVjdGVkRGVwb3NpdAAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBGZvbGQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAMDCQBmAgUQcHJvdGVjdGVkRGVwb3NpdAAACQBmAggFAXICXzMABAcJAAIBAh5jYW4ndCBoYXZlIG1vcmUgdGhhbiA0IGJvcnJvd3MFAXIBDWdldFVzZXJIZWFsdGgBB2FjY291bnQEDSR0MDEwMjU2MTAzMDcJAQZhc0ludDMBCQEJdXNlclBvd2VyAQUHYWNjb3VudAQCYnAIBQ0kdDAxMDI1NjEwMzA3Al8xBANicHUIBQ0kdDAxMDI1NjEwMzA3Al8yBAZpZ25vcmUIBQ0kdDAxMDI1NjEwMzA3Al8zCQCsAgIJAKwCAgkArAICAgNicDoJAKQDAQUCYnACBiwgYnB1OgkApAMBBQNicHUBDXZhbGlkYXRlQWZ0ZXICBHVzZXICb3AEDSR0MDEwNDE5MTA0NTAJAQl1c2VyUG93ZXIBBQR1c2VyBAJicAgFDSR0MDEwNDE5MTA0NTACXzEEA2JwdQgFDSR0MDEwNDE5MTA0NTACXzIECWFjY0hlYWx0aAkAaQIJAGgCCQBlAgUCYnAFA2JwdQULZmFjdG9yc0Jhc2UFAmJwAwMJAAACBQJicAAACQAAAgUDYnB1AAAHAAADAwkAAAIFAmJwAAAJAGYCBQNicHUAAAcJAAIBCQCsAgIJAKwCAgUCb3ACLDogYnJlYWNoaW5nIGxpcXVpZGF0aW9uIHRocmVzaG9sZChicD0wLCBicHU9CQCkAwEFA2JwdQMJAGYCBRZhY2NvdW50SGVhbHRoVGhyZXNob2xkBQlhY2NIZWFsdGgJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFAm9wAiU6IGJyZWFjaGluZyBsaXF1aWRhdGlvbiB0aHJlc2hvbGQoYnA9CQCkAwEFAmJwAgYsIGJwdT0JAKQDAQUDYnB1AgksIGhlYWx0aD0JAKQDAQUJYWNjSGVhbHRoAgEpBQNicHUBAnVTBQNyc3IGYWN0aW9uBHVzZXIKdXNlckNoYW5nZQxzdHJlYW1DaGFuZ2UEByRtYXRjaDAFA21WRAMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAFhBQckbWF0Y2gwCQD8BwQFAWECCG9uQWN0aW9uCQDMCAIFA3JzcgkAzAgCBQZhY3Rpb24JAMwIAgUEdXNlcgkAzAgCBQp1c2VyQ2hhbmdlCQDMCAIFDHN0cmVhbUNoYW5nZQUDbmlsBQNuaWwFBHVuaXQBCm1vdmVTdHJlYW0FA3JzcgZhY3Rpb24EZnJvbQZzdHJpbmcDYW10BAckbWF0Y2gwBQNtVkQDCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQBYQUHJG1hdGNoMAkA/AcEBQFhAgRtb3ZlCQDMCAIFA3JzcgkAzAgCBQZhY3Rpb24JAMwIAgUEZnJvbQkAzAgCBQZzdHJpbmcJAMwIAgUDYW10BQNuaWwFA25pbAUEdW5pdAECc1IBA3JzcgQHJG1hdGNoMAUDbVZEAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEAWEFByRtYXRjaDAJAPwHBAUBYQIKc3luY0hlaWdodAkAzAgCBQNyc3IFA25pbAUDbmlsBQR1bml0AQxsb2NrT3JQYXlvdXQDCXJlY2lwaWVudANhbXQEbG9jawMJAQEhAQUEbG9jawkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQlyZWNpcGllbnQFA2FtdAUMdmlyZXNBc3NldElkBQNuaWwEBmRvTG9jawkA/AcEBQJkQwIHbG9ja0ZvcgkAzAgCCQClCAEFCXJlY2lwaWVudAkAzAgCAAEFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUMdmlyZXNBc3NldElkBQNhbXQFA25pbAMJAAACBQZkb0xvY2sFBmRvTG9jawUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQlkb0RlcG9zaXQDAWkDcnNyBWFzQ29sBAR1c2VyCQClCAEIBQFpBmNhbGxlcgQGY2hlY2tzCQERZW5zdXJlTm9Qcm90ZWN0ZWQBBQR1c2VyAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAJzaAkBAnNSAQUDcnNyAwkAAAIFAnNoBQJzaAQGYWN0aW9uCQD8BwQJAQN2bFIBBQNyc3ICCmRlcG9zaXRGb3IJAMwIAgUEdXNlcgkAzAgCBQVhc0NvbAUDbmlsCAUBaQhwYXltZW50cwMJAAACBQZhY3Rpb24FBmFjdGlvbgQDYW10CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQDcFJ3CQECdVMFBQNyc3ICB2RlcG9zaXQFBHVzZXIFA2FtdAUDYW10AwkAAAIFA3BSdwUDcFJ3BAJ2YQMJAQEhAQUFYXNDb2wJAQ12YWxpZGF0ZUFmdGVyAgUEdXNlcgIKZGVwb3NpdGluZwAAAwkAAAIFAnZhBQJ2YQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAA5yZXdhcmRSZXNlcnZlcwkAvAkCCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUNY29uZmlnQWRkcmVzcwITcmV3YXJkYWJsZV9yZXNlcnZlcwIJbm8gc3RyaW5nAgF8ARZjbGFpbUFsbFJld2FyZHNGb3JVc2VyAQR1c2VyBAljbGFpbWVkRWIJAQVhc0ludAEJAPwHBAUDZWJSAhBjbGFpbUViUmV3YXJkRm9yCQDMCAIFBHVzZXIJAMwIAgD///////////8BBQNuaWwFA25pbAMJAAACBQljbGFpbWVkRWIFCWNsYWltZWRFYgoBBGZvbGQCA2FjYwNyc3IEB2NsYWltZWQJAQVhc0ludAEJAPwHBAUCVkQCDmNsYWltUmV3YXJkRm9yCQDMCAIFA3JzcgkAzAgCBQR1c2VyCQDMCAIA////////////AQUDbmlsBQNuaWwDCQAAAgUHY2xhaW1lZAUHY2xhaW1lZAkAZAIFA2FjYwUHY2xhaW1lZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQMY2xhaW1lZFRvdGFsCgACJGwFDnJld2FyZFJlc2VydmVzCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQRmb2xkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQJAGQCBQxjbGFpbWVkVG90YWwFCWNsYWltZWRFYgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEYY2xhaW1BbGxMcFJld2FyZHNGb3JVc2VyAQR1c2VyCgEEZm9sZAIDYWNjA3JzcgQIYVRva2VuSWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCCQERQGV4dHJOYXRpdmUoMTA2MikBBQNyc3IFBWFUSWRTAhZubyBhVG9rZW5JZCBpbiByZXNlcnZlBAdjbGFpbWVkCQEFYXNJbnQBCQD8BwQFBmxvY2tlcgIQY2xhaW1McFJld2FyZEZvcgkAzAgCBQR1c2VyCQDMCAIFCGFUb2tlbklkCQDMCAIA////////////AQUDbmlsBQNuaWwDCQAAAgUHY2xhaW1lZAUHY2xhaW1lZAkAZAIFA2FjYwUHY2xhaW1lZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQMY2xhaW1lZFRvdGFsCgACJGwFDnJld2FyZFJlc2VydmVzCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQRmb2xkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQFDGNsYWltZWRUb3RhbAEObW92ZUNvbGxhdGVyYWwEBGFkZHIIYXNzZXRTdHIDcnNyCnJlc2VydmVTdHIEA2FtdAkBBWFzSW50AQkA/AcEBRBwcm90ZWN0ZWRSZXNlcnZlAg53aXRoZHJhd1RvTWFpbgkAzAgCBQRhZGRyCQDMCAIFCGFzc2V0U3RyBQNuaWwFA25pbAMJAAACBQNhbXQFA2FtdAQDZGVwCQD8BwQFA3JzcgIKZGVwb3NpdEZvcgkAzAgCBQRhZGRyCQDMCAIGBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQtwdXJlQXNzZXRJZAEFCGFzc2V0U3RyBQNhbXQFA25pbAMJAAACBQNkZXAFA2RlcAQEcHJvcAkBAnVTBQUKcmVzZXJ2ZVN0cgIHZGVwb3NpdAUEYWRkcgUDYW10BQNhbXQDCQAAAgUEcHJvcAUEcHJvcAUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEEc3BmcgAJAPwHBAUCZEMCF3NoYXJlUHJvZml0RnJvbVJlc2VydmVzBQNuaWwFA25pbAEKd2RJbnRlcm5hbAQEdXNlcgNyc3IDYW10Am9wBAJzaAkBAnNSAQkApQgBBQNyc3IDCQAAAgUCc2gFAnNoBA93aXRoZHJhd25BbW91bnQJAQVhc0ludAEJAPwHBAUDcnNyBQJvcAkAzAgCBQR1c2VyCQDMCAIFA2FtdAUDbmlsBQNuaWwDCQAAAgUPd2l0aGRyYXduQW1vdW50BQ93aXRoZHJhd25BbW91bnQEA3BSdwkBAnVTBQkApQgBBQNyc3ICB2RlcG9zaXQFBHVzZXIJAQEtAQUPd2l0aGRyYXduQW1vdW50CQEBLQEFD3dpdGhkcmF3bkFtb3VudAMJAAACBQNwUncFA3BSdwQBZQkBC2Vuc3VyZUxpbWl0BAIId2l0aGRyYXcFA3JzcgUEdXNlcgUPd2l0aGRyYXduQW1vdW50AwkAAAIFAWUFAWUFD3dpdGhkcmF3bkFtb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEXcmVwYXlXaXRoQXRva2VuSW50ZXJuYWwCBHVzZXIHcGF5bWVudAQIYVRva2VuSWQJANgEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAUHcGF5bWVudAdhc3NldElkAh5iYWQgYXNzZXRJZDogd2F2ZXMgbm90IGFsbG93ZWQEAXQJAQlyZXNlcnZlQnkCBQVhVElkUwUIYVRva2VuSWQEAnNoCQECc1IBCQClCAEFAXQDCQAAAgUCc2gFAnNoBANhbXQJAQVhc0ludAEJAPwHBAUBdAIecmVwbGVuaXNoRm9yUmVwYXlXaXRoQXRva2VuRm9yCQDMCAIFBHVzZXIFA25pbAkAzAgCBQdwYXltZW50BQNuaWwDCQAAAgUDYW10BQNhbXQEAWMJAQVhc0ludAEJAPwHBAUBdAIRY29sbGFwc2VGb3JBbW91bnQJAMwIAgUEdXNlcgkAzAgCBQNhbXQFA25pbAUDbmlsAwkAAAIFAWMFAWMDCQBmAgUDYW10BQFjCQACAQIRcmVwYXlpbmcgdG9vIG11Y2gEA3BSdwkBAnVTBQkApQgBBQF0AgZib3Jyb3cFBHVzZXIJAQEtAQUBYwkBAS0BBQFjAwkAAAIFA3BSdwUDcFJ3BARwUncyCQECdVMFCQClCAEFAXQCB2RlcG9zaXQFBHVzZXIJAGUCBQNhbXQFAWMJAQEtAQUBYwMJAAACBQRwUncyBQRwUncyBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4cAWkBCmluaXRpYWxpemUBAmNhCQDMCAIJARB3cml0ZUNvbnN0U3RyaW5nAgULY29uZmlnU3RvcmUFAmNhBQNuaWwBaQEHZGVwb3NpdAIDcnNyBWFzQ29sCQEJZG9EZXBvc2l0AwUBaQUDcnNyBQVhc0NvbAFpAQpkZXBvc2l0UmVmAwNyc3IFYXNDb2wDcmVmCQEJZG9EZXBvc2l0AwUBaQUDcnNyBQVhc0NvbAFpAQVyZXBheQEDcnNyBAR1c2VyCQClCAEIBQFpBmNhbGxlcgQCc2gJAQJzUgEFA3JzcgMJAAACBQJzaAUCc2gEBnJlcGFpZAkBBWFzSW50AQkA/AcECQEDdmxSAQUDcnNyAghyZXBheUZvcgkAzAgCBQR1c2VyBQNuaWwIBQFpCHBheW1lbnRzAwkAAAIFBnJlcGFpZAUGcmVwYWlkBANwUncJAQJ1UwUFA3JzcgIGYm9ycm93BQR1c2VyCQEBLQEFBnJlcGFpZAkBAS0BBQZyZXBhaWQDCQAAAgUDcFJ3BQNwUncFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQptaW50QXRva2VuAghhVG9rZW5JZANhbXQEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAF0CQEJcmVzZXJ2ZUJ5AgUFYVRJZFMFCGFUb2tlbklkBAJzaAkBAnNSAQkApQgBBQF0AwkAAAIFAnNoBQJzaAQGYWN0dWFsCQEFYXNJbnQBCQD8BwQFAXQCDW1pbnRBdG9rZW5Gb3IJAMwIAgUEdXNlcgkAzAgCBQNhbXQFA25pbAUDbmlsAwkAAAIFBmFjdHVhbAUGYWN0dWFsBANwUncJAQJ1UwUJAKUIAQUBdAIHZGVwb3NpdAUEdXNlcgkBAS0BBQZhY3R1YWwAAAMJAAACBQNwUncFA3BSdwQDYnB1CQEFYXNJbnQBCQENdmFsaWRhdGVBZnRlcgIFBHVzZXICB21pbnRpbmcDCQAAAgUDYnB1BQNicHUEAnBjCQESZW5zdXJlTm9Qcm9oaWJpdGVkAwUEdXNlcgUDYnB1CQClCAEFAXQDCQAAAgUCcGMFAnBjBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQETcmVwbGVuaXNoV2l0aEF0b2tlbgAEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAZjaGVja3MJARFlbnN1cmVOb1Byb3RlY3RlZAEFBHVzZXIDCQAAAgUGY2hlY2tzBQZjaGVja3MECGFUb2tlbklkCQDYBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkAg5iYWQgYXNzZXRJZCh3KQQDcnNyCQEJcmVzZXJ2ZUJ5AgUFYVRJZFMFCGFUb2tlbklkBAJzaAkBAnNSAQkApQgBBQNyc3IDCQAAAgUCc2gFAnNoBANhbXQJAQVhc0ludAEJAPwHBAUDcnNyAhZyZXBsZW5pc2hXaXRoQXRva2VuRm9yCQDMCAIFBHVzZXIFA25pbAgFAWkIcGF5bWVudHMDCQAAAgUDYW10BQNhbXQEA3BSdwkBAnVTBQkApQgBBQNyc3ICB2RlcG9zaXQFBHVzZXIFA2FtdAAAAwkAAAIFA3BSdwUDcFJ3BAFlCQELZW5zdXJlTGltaXQEAgZpbXBvcnQFA3JzcgUEdXNlcgUDYW10AwkAAAIFAWUFAWUFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ1yZWRlZW1BdG9rZW5zAAQEdXNlcgkApQgBCAUBaQZjYWxsZXIECGFUb2tlbklkCQDYBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkAhJiYWQgYXNzZXRJZDogV0FWRVMEA3JzcgkBCXJlc2VydmVCeQIFBWFUSWRTBQhhVG9rZW5JZAQCc2gJAQJzUgEJAKUIAQUDcnNyAwkAAAIFAnNoBQJzaAQDYW10CQEFYXNJbnQBCQD8BwQFA3JzcgIQcmVkZWVtQXRva2Vuc0ZvcgkAzAgCBQR1c2VyBQNuaWwIBQFpCHBheW1lbnRzAwkAAAIFA2FtdAUDYW10BANwUncJAQJ1UwUJAKUIAQUDcnNyAgdkZXBvc2l0BQR1c2VyAAAJAQEtAQUDYW10AwkAAAIFA3BSdwUDcFJ3BAFlCQELZW5zdXJlTGltaXQEAgZyZWRlZW0FA3JzcgUEdXNlcgUDYW10AwkAAAIFAWUFAWUFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQh3aXRoZHJhdwIHYXNzZXRJZANhbXQEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAFyCQEJcmVzZXJ2ZUJ5AgUEYUlkUwUHYXNzZXRJZAQGcmVzdWx0CQEFYXNJbnQBCQEKd2RJbnRlcm5hbAQFBHVzZXIFAXIFA2FtdAILd2l0aGRyYXdGb3IDCQAAAgUGcmVzdWx0BQZyZXN1bHQEA2JwdQkBBWFzSW50AQkBDXZhbGlkYXRlQWZ0ZXICBQR1c2VyAgt3aXRoZHJhd2luZwMJAAACBQNicHUFA2JwdQQCcGMJARJlbnN1cmVOb1Byb2hpYml0ZWQDBQR1c2VyBQNicHUJAKUIAQUBcgMJAAACBQJwYwUCcGMJAJQKAgUDbmlsBQZyZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEJd2l0aGRyYXcyAgNyc3IDYW10BAR1c2VyCQClCAEIBQFpBmNhbGxlcgQCc2gJAQJzUgEFA3JzcgMJAAACBQJzaAUCc2gEB3JzckFkZHIJAQN2bFIBBQNyc3IEBmFjdHVhbAkBBWFzSW50AQkA/AcEBQdyc3JBZGRyAgt3aXRoZHJhd0ZvcgkAzAgCBQR1c2VyCQDMCAIFA2FtdAUDbmlsBQNuaWwDCQAAAgUGYWN0dWFsBQZhY3R1YWwEA3BSdwkBAnVTBQUDcnNyAgdkZXBvc2l0BQR1c2VyCQEBLQEFBmFjdHVhbAkBAS0BBQZhY3R1YWwDCQAAAgUDcFJ3BQNwUncEA2JwdQMJAQhjb250YWlucwIFC2xpcXVpZGF0b3JzBQR1c2VyAAAEAWUJAQtlbnN1cmVMaW1pdAQCCHdpdGhkcmF3BQdyc3JBZGRyBQR1c2VyBQZhY3R1YWwDCQAAAgUBZQUBZQkBBWFzSW50AQkBDXZhbGlkYXRlQWZ0ZXICBQR1c2VyAgx3aXRoZHJhd2luZzIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EAnBjCQESZW5zdXJlTm9Qcm9oaWJpdGVkAwUEdXNlcgUDYnB1BQNyc3IDCQAAAgUCcGMFAnBjCQCUCgIFA25pbAUGYWN0dWFsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEXByb3RlY3RDb2xsYXRlcmFsAQNyc3IEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAFyCQEDdmxSAQUDcnNyBANhbXQJAQVhc0ludAEJAQp3ZEludGVybmFsBAUEdXNlcgUBcgD///////////8BAg53aXRoZHJhd1RvTWFpbgMJAAACBQNhbXQFA2FtdAQKYXNzZXRJZFN0cgkBEUBleHRyTmF0aXZlKDEwNTMpAgUBcgUEYUlkUwQBcAkA/AcEBRBwcm90ZWN0ZWRSZXNlcnZlAglzdXBwbHlGb3IJAMwIAgUEdXNlcgUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQELcHVyZUFzc2V0SWQBBQphc3NldElkU3RyBQNhbXQFA25pbAMJAAACBQFwBQFwBAJwYwkBEmVuc3VyZU5vUHJvaGliaXRlZAMFBHVzZXIICQEJdXNlclBvd2VyAQUEdXNlcgJfMgUDcnNyAwkAAAIFAnBjBQJwYwkAlAoCBQNuaWwFA2FtdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARt3aXRoZHJhd1Byb3RlY3RlZENvbGxhdGVyYWwCB2Fzc2V0SWQDYW10BAR1c2VyCQClCAEIBQFpBmNhbGxlcgQBYQkBBWFzSW50AQkA/AcECQETdmFsdWVPckVycm9yTWVzc2FnZQIFEHByb3RlY3RlZFJlc2VydmUCE25vIHByb3RlY3RlZFJlc2VydmUCC3dpdGhkcmF3Rm9yCQDMCAIFBHVzZXIJAMwIAgUHYXNzZXRJZAkAzAgCBQNhbXQFA25pbAUDbmlsAwkAAAIFAWEFAWEEAnZhCQENdmFsaWRhdGVBZnRlcgIFBHVzZXICFXdpdGhkcmF3aW5nIHByb3RlY3RlZAMJAAACBQJ2YQUCdmEFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARNub3JtYWxpemVDb2xsYXRlcmFsAQNyc3IEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAJyQQkBA3ZsUgEFA3JzcgMJAAACBQJyQQUCckEEAnNoCQECc1IBBQNyc3IDCQAAAgUCc2gFAnNoBAphc3NldElkU3RyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUCckEFBGFJZFMJAKwCAgITbm8gYXNzZXRJZCBpbiByc3Y6IAUDcnNyBAJtYwkBDm1vdmVDb2xsYXRlcmFsBAUEYWRkcgUKYXNzZXRJZFN0cgUCckEFA3JzcgMJAAACBQJtYwUCbWMFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQZib3Jyb3cCB2Fzc2V0SWQDYW10BAR1c2VyCQClCAEIBQFpBmNhbGxlcgQDcnNyCQEJcmVzZXJ2ZUJ5AgUEYUlkUwUHYXNzZXRJZAQCc2gJAQJzUgEJAKUIAQUDcnNyAwkAAAIFAnNoBQJzaAQBYQkA/AcEBQNyc3ICCWJvcnJvd0ZvcgkAzAgCBQR1c2VyCQDMCAIFA2FtdAUDbmlsBQNuaWwDCQAAAgUBYQUBYQQDcFJ3CQECdVMFCQClCAEFA3JzcgIGYm9ycm93BQR1c2VyBQNhbXQFA2FtdAMJAAACBQNwUncFA3BSdwQBZQkBC2Vuc3VyZUxpbWl0BAIGYm9ycm93BQNyc3IFBHVzZXIFA2FtdAMJAAACBQFlBQFlBANicHUJAQVhc0ludAEJAQ12YWxpZGF0ZUFmdGVyAgUEdXNlcgIJYm9ycm93aW5nAwkAAAIFA2JwdQUDYnB1BAJwYwkBHWVuc3VyZU5vUHJvaGliaXRlZENvbGxhdGVyYWxzAQUEdXNlcgMJAAACBQJwYwUCcGMFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQdib3Jyb3cyAgNyc3IDYW10BAR1c2VyCQClCAEIBQFpBmNhbGxlcgQBcgkBA3ZsUgEFA3JzcgQCc2gJAQJzUgEFA3JzcgMJAAACBQJzaAUCc2gEAWEJAPwHBAUBcgIJYm9ycm93Rm9yCQDMCAIFBHVzZXIJAMwIAgUDYW10BQNuaWwFA25pbAMJAAACBQFhBQFhBANwUncJAQJ1UwUFA3JzcgIGYm9ycm93BQR1c2VyBQNhbXQFA2FtdAMJAAACBQNwUncFA3BSdwQBZQkBC2Vuc3VyZUxpbWl0BAIGYm9ycm93BQFyBQR1c2VyBQNhbXQDCQAAAgUBZQUBZQQDYnB1CQEFYXNJbnQBCQENdmFsaWRhdGVBZnRlcgIFBHVzZXICCWJvcnJvd2luZwMJAAACBQNicHUFA2JwdQQCcGMJAR1lbnN1cmVOb1Byb2hpYml0ZWRDb2xsYXRlcmFscwEFBHVzZXIDCQAAAgUCcGMFAnBjBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEIY29sbGFwc2UCA3JzcgNhbXQEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAJzaAkBAnNSAQUDcnNyAwkAAAIFAnNoBQJzaAQBYwkBBWFzSW50AQkA/AcECQEDdmxSAQUDcnNyAhFjb2xsYXBzZUZvckFtb3VudAkAzAgCBQR1c2VyCQDMCAIFA2FtdAUDbmlsBQNuaWwDCQAAAgUBYwUBYwQDcFJ3CQECdVMFBQNyc3ICBmJvcnJvdwUEdXNlcgkBAS0BBQFjCQEBLQEFAWMDCQAAAgUDcFJ3BQNwUncEBHBSdzIJAQJ1UwUFA3JzcgIHZGVwb3NpdAUEdXNlcgkBAS0BBQFjCQEBLQEFAWMDCQAAAgUEcFJ3MgUEcFJ3MgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDmNsYWltRWJSZXdhcmQyAgNhbXQEbG9jawQEdXNlcgkApQgBCAUBaQZjYWxsZXIEAWMJAQVhc0ludAEJAPwHBAUDZWJSAhBjbGFpbUViUmV3YXJkRm9yCQDMCAIFBHVzZXIJAMwIAgUDYW10BQNuaWwFA25pbAMJAAACBQFjBQFjCQEMbG9ja09yUGF5b3V0AwgFAWkGY2FsbGVyBQFjBQRsb2NrCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDGNsYWltUmV3YXJkMgMDcnNyA2FtdARsb2NrBAF2CQEDdmxSAQUDcnNyAwkAAAIFAXYFAXYEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAFjCQEFYXNJbnQBCQD8BwQFAlZEAg5jbGFpbVJld2FyZEZvcgkAzAgCBQNyc3IJAMwIAgUEdXNlcgkAzAgCBQNhbXQFA25pbAUDbmlsAwkAAAIFAWMFAWMJAQxsb2NrT3JQYXlvdXQDCAUBaQZjYWxsZXIFAWMFBGxvY2sJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEhY2xhaW1BbGxSZXdhcmRzQW5kQWxsRWJBdmFpbGFibGUyAgRsb2NrDXVuc3Rha2VMZWdhY3kEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAJjcgkBFmNsYWltQWxsUmV3YXJkc0ZvclVzZXIBBQR1c2VyAwkAAAIFAmNyBQJjcgQEY3JMcAkBGGNsYWltQWxsTHBSZXdhcmRzRm9yVXNlcgEFBHVzZXIDCQAAAgUEY3JMcAUEY3JMcAQCbEEDBQ11bnN0YWtlTGVnYWN5CQEFYXNJbnQBCQD8BwQFAnZTAhN1bnN0YWtlQWxsVmlyZXNGcm9tCQDMCAIFBHVzZXIFA25pbAUDbmlsAAADCQAAAgUCbEEFAmxBCQEMbG9ja09yUGF5b3V0AwgFAWkGY2FsbGVyCQBkAgkAZAIFAmNyBQRjckxwBQJsQQUEbG9jawkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARZkaXNhYmxlVXNlQXNDb2xsYXRlcmFsAQNyc3IEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAFkCQD8BwQJAQN2bFIBBQNyc3ICGWRpc2FibGVVc2VBc0NvbGxhdGVyYWxGb3IJAMwIAgUEdXNlcgUDbmlsBQNuaWwDCQAAAgUBZAUBZAQCdmEJAQ12YWxpZGF0ZUFmdGVyAgUEdXNlcgIaY2hhbmdpbmcgY29sbGF0ZXJhbCBzdGF0dXMDCQAAAgUCdmEFAnZhBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEJbG9ja1ZpcmVzAgZmYWN0b3IHbWlncmF0ZQQEdXNlcgkApQgBCAUBaQZjYWxsZXIEAWEJAQRzcGZyAAMJAAACBQFhBQFhBA1taWdyYXRlQW1vdW50AwUHbWlncmF0ZQkBBWFzSW50AQkA/AcEBQJ2UwITdW5zdGFrZUFsbFZpcmVzRnJvbQkAzAgCBQR1c2VyBQNuaWwFA25pbAAABAV0b3RhbAkAZAIFDW1pZ3JhdGVBbW91bnQJAQx2aXJlc1BheW1lbnQBBQFpBAFsCQD8BwQFAmRDAgdsb2NrRm9yCQDMCAIFBHVzZXIJAMwIAgUGZmFjdG9yBQNuaWwDCQAAAgUFdG90YWwAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQx2aXJlc0Fzc2V0SWQFBXRvdGFsBQNuaWwDCQAAAgUBbAUBbAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBGHdpdGhkcmF3QWxsUG9zc2libGVWaXJlcwAEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAFhCQEEc3BmcgADCQAAAgUBYQUBYQQRc3Rha2VyVmlyZXNBbW91bnQJAQVhc0ludAEJAPwHBAUCdlMCE3Vuc3Rha2VBbGxWaXJlc0Zyb20JAMwIAgUEdXNlcgUDbmlsBQNuaWwDCQAAAgURc3Rha2VyVmlyZXNBbW91bnQFEXN0YWtlclZpcmVzQW1vdW50BAF1CQD8BwQFAmRDAhN3aXRoZHJhd1VubG9ja2VkRm9yCQDMCAIFBHVzZXIFA25pbAUDbmlsAwkAAAIFAXUFAXUJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBRFzdGFrZXJWaXJlc0Ftb3VudAUMdmlyZXNBc3NldElkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEXY2xhaW1Qcm90b2NvbFByb2ZpdEZyb20CBGZyb20GcmVsb2NrBAR1c2VyCQClCAEIBQFpBmNhbGxlcgQBYQkBBHNwZnIAAwkAAAIFAWEFAWEEAXUJAPwHBAUCZEMCC2NsYWltUHJvZml0CQDMCAIFBGZyb20JAMwIAgUEdXNlcgkAzAgCBQZyZWxvY2sFA25pbAUDbmlsAwkAAAIFAXUFAXUFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARV3aXRoZHJhd1VubG9ja2VkVmlyZXMABAFhCQEEc3BmcgADCQAAAgUBYQUBYQQBdQkA/AcEBQJkQwITd2l0aGRyYXdVbmxvY2tlZEZvcgkAzAgCCQClCAEIBQFpBmNhbGxlcgUDbmlsBQNuaWwDCQAAAgUBdQUBdQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCmxvY2tTdXBwbHkCB3Jlc2VydmUGcGVyaW9kBANyc3IJAQN2bFIBBQdyZXNlcnZlBAR1c2VyCQClCAEIBQFpBmNhbGxlcgQGY2hlY2tzCQERZW5zdXJlTm9Qcm90ZWN0ZWQBBQR1c2VyAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAhhVG9rZW5JZAkBBXZhbHVlAQkBC3B1cmVBc3NldElkAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFA3JzcgIIYVRva2VuSWQCFm5vIGFUb2tlbklkIGluIHJlc2VydmUECW1pZ3JhdGlvbgMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAAFBHVuaXQDCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQhhVG9rZW5JZAUEdW5pdAMJAAACCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQJAQtwdXJlQXNzZXRJZAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQNyc3IFBGFJZFMCFW5vIGFzc2V0SWQgaW4gcmVzZXJ2ZQQCc2gJAQJzUgEFB3Jlc2VydmUDCQAAAgUCc2gFAnNoBAZhY3Rpb24JAPwHBAUDcnNyAgpkZXBvc2l0Rm9yCQDMCAIFBHVzZXIJAMwIAgYFA25pbAgFAWkIcGF5bWVudHMDCQAAAgUGYWN0aW9uBQZhY3Rpb24EA2FtdAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEA3BSdwkBAnVTBQUHcmVzZXJ2ZQIHZGVwb3NpdAUEdXNlcgUDYW10BQNhbXQDCQAAAgUDcFJ3BQNwUncFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAhJiYWQgYXNzZXQgYXR0YWNoZWQDCQAAAgUJbWlncmF0aW9uBQltaWdyYXRpb24EBG1pbnQEAnNoCQECc1IBBQdyZXNlcnZlAwkAAAIFAnNoBQJzaAQGYWN0dWFsCQEFYXNJbnQBCQD8BwQFA3JzcgIPbWludEF0b2tlbkZvclRvCQDMCAIFBHVzZXIJAMwIAgD///////////8BCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQAAAgUGYWN0dWFsBQZhY3R1YWwEA3BSdwkBAnVTBQkApQgBBQNyc3ICB2RlcG9zaXQFBHVzZXIJAQEtAQUGYWN0dWFsAAADCQAAAgUDcFJ3BQNwUncEAnZhCQENdmFsaWRhdGVBZnRlcgIFBHVzZXICDGxvY2stbWludGluZwMJAAACBQJ2YQUCdmEFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQRtaW50BQRtaW50BAdiYWxhbmNlCQDwBwIFBHRoaXMFCGFUb2tlbklkBAFyCQD8BwQFBmxvY2tlcgIGbG9ja0xQCQDMCAIFBHVzZXIJAMwIAgUGcGVyaW9kBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCGFUb2tlbklkBQdiYWxhbmNlBQNuaWwDCQAAAgUBcgUBcgkAlAoCBQNuaWwFB2JhbGFuY2UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEScmVwYXlXaXRoQXRva2VuRm9yAQR1c2VyBAZjaGVja3MDCQEBIQEJAQlpc0RlZmluZWQBCQCmCAEFBHVzZXIJAAIBAghiYWQgdXNlcgYDCQAAAgUGY2hlY2tzBQZjaGVja3MJARdyZXBheVdpdGhBdG9rZW5JbnRlcm5hbAIFBHVzZXIJAJEDAggFAWkIcGF5bWVudHMAAAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ9yZXBheVdpdGhBdG9rZW4ACQEXcmVwYXlXaXRoQXRva2VuSW50ZXJuYWwCCQClCAEIBQFpBmNhbGxlcgkAkQMCCAUBaQhwYXltZW50cwAAAWkBCHJlcGF5Rm9yAgNyc3IEdXNlcgQGY2hlY2tzAwkBASEBCQEJaXNEZWZpbmVkAQkApggBBQR1c2VyCQACAQIIYmFkIHVzZXIGAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAJzaAkBAnNSAQUDcnNyAwkAAAIFAnNoBQJzaAQGcmVwYWlkCQEFYXNJbnQBCQD8BwQJAQN2bFIBBQNyc3ICCHJlcGF5Rm9yCQDMCAIFBHVzZXIFA25pbAgFAWkIcGF5bWVudHMDCQAAAgUGcmVwYWlkBQZyZXBhaWQEA3BSdwkBAnVTBQUDcnNyAgZib3Jyb3cFBHVzZXIJAQEtAQUGcmVwYWlkCQEBLQEFBnJlcGFpZAMJAAACBQNwUncFA3BSdwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCGhlYWx0aE9mAQdhZGRyZXNzBA0kdDAyNDExNjI0MTY3CQEGYXNJbnQzAQkBCXVzZXJQb3dlcgEFB2FkZHJlc3MEAmJwCAUNJHQwMjQxMTYyNDE2NwJfMQQDYnB1CAUNJHQwMjQxMTYyNDE2NwJfMgQGaWdub3JlCAUNJHQwMjQxMTYyNDE2NwJfMwkAlAoCBQNuaWwJAJQKAgUCYnAFA2JwdQAOqIby", "chainId": 87, "height": 3449752, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8mE9Moh8r8tvc8KXAErLDCj5eDwbRtXNfEfGSgxj3CRA Next: 9kmV8eUyEd1DqYUNrJFjZq7D7bxbGwB9F4qbxLn3g4bH Diff:
OldNewDifferences
179179 else true
180180 }
181181
182+ let ensureNoProtectedUSDNorEURN = {
183+ let any = (valueOrElse(getInteger(protectedReserve, ("userShares_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p_" + user)), 0) + valueOrElse(getInteger(protectedReserve, ("userShares_DUk2YTxhRoAqMJLus4G2b3fR8hMHVh6eiyFx5r29VR6t_" + user)), 0))
184+ if ((any > 0))
185+ then throw("has non-borrowable Neutrino assets as collateral")
186+ else true
187+ }
182188 let $l = prohibitedCollateralReserves
183189 let $s = size($l)
184- let $acc0 = true
190+ let $acc0 = ensureNoProtectedUSDNorEURN
185191 func $f0_1 ($a,$i) = if (($i >= $s))
186192 then $a
187193 else foldFunc($a, $l[$i])
230236 0
231237 }
232238 func fold (totals,r) = {
233- let $t087988844 = totals
234- let totalD = $t087988844._1
235- let totalB = $t087988844._2
236- let numberOfBorrows = $t087988844._3
239+ let $t092179263 = totals
240+ let totalD = $t092179263._1
241+ let totalB = $t092179263._2
242+ let numberOfBorrows = $t092179263._3
237243 let rsr = valueOrErrorMessage(addressFromString(r), "rsr bad address")
238244 let cf = collateralFactor(rsr)
239245 let lt = liquidationThreshold(rsr)
240- let $t089989082 = userBalance(rsr, user)
241- let token = $t089989082._1
242- let asset = $t089989082._2
243- let depositUsd = $t089989082._3
244- let debt = $t089989082._4
245- let debtUsd = $t089989082._5
246- let asCollateral = $t089989082._6
246+ let $t094179501 = userBalance(rsr, user)
247+ let token = $t094179501._1
248+ let asset = $t094179501._2
249+ let depositUsd = $t094179501._3
250+ let debt = $t094179501._4
251+ let debtUsd = $t094179501._5
252+ let asCollateral = $t094179501._6
247253 let totalBorrows = (numberOfBorrows + (if ((debt > 0))
248254 then 1
249255 else 0))
280286
281287
282288 func getUserHealth (account) = {
283- let $t098379888 = asInt3(userPower(account))
284- let bp = $t098379888._1
285- let bpu = $t098379888._2
286- let ignore = $t098379888._3
289+ let $t01025610307 = asInt3(userPower(account))
290+ let bp = $t01025610307._1
291+ let bpu = $t01025610307._2
292+ let ignore = $t01025610307._3
287293 ((("bp:" + toString(bp)) + ", bpu:") + toString(bpu))
288294 }
289295
290296
291297 func validateAfter (user,op) = {
292- let $t01000010031 = userPower(user)
293- let bp = $t01000010031._1
294- let bpu = $t01000010031._2
298+ let $t01041910450 = userPower(user)
299+ let bp = $t01041910450._1
300+ let bpu = $t01041910450._2
295301 let accHealth = (((bp - bpu) * factorsBase) / bp)
296302 if (if ((bp == 0))
297303 then (bpu == 0)
11131119
11141120 @Callable(i)
11151121 func healthOf (address) = {
1116- let $t02369723748 = asInt3(userPower(address))
1117- let bp = $t02369723748._1
1118- let bpu = $t02369723748._2
1119- let ignore = $t02369723748._3
1122+ let $t02411624167 = asInt3(userPower(address))
1123+ let bp = $t02411624167._1
1124+ let bpu = $t02411624167._2
1125+ let ignore = $t02411624167._3
11201126 $Tuple2(nil, $Tuple2(bp, bpu))
11211127 }
11221128
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let factorsBase = 1000
55
66 func fCi (value,numerator,denominator) = {
77 let cand = fraction(value, numerator, denominator)
88 let D = 3037000499
99 let exact = ((((cand % D) * (denominator % D)) % D) == (((value % D) * (numerator % D)) % D))
1010 if (exact)
1111 then cand
1212 else (cand + 1)
1313 }
1414
1515
1616 func pureAssetId (assetId) = {
1717 let i = split(assetId, "_")[0]
1818 if ((i == "WAVES"))
1919 then unit
2020 else fromBase58String(i)
2121 }
2222
2323
2424 func writeConstString (key,value) = if (!(isDefined(getString(this, key))))
2525 then StringEntry(key, value)
2626 else throw(("already initialized: " + key))
2727
2828
2929 func asInt (value) = match value {
3030 case int: Int =>
3131 int
3232 case _ =>
3333 throw("m:1")
3434 }
3535
3636
3737 func asInt3 (value) = match value {
3838 case x: (Int, Int, Int) =>
3939 x
4040 case t =>
4141 throw("2")
4242 }
4343
4444
4545 func asUserBalanceData (value) = match value {
4646 case x: (Int, Int, Int, Int, Int, Boolean) =>
4747 x
4848 case t =>
4949 throw("3")
5050 }
5151
5252
5353 let configStore = "config"
5454
5555 let aTIdS = "aTokenId"
5656
5757 let aIdS = "assetId"
5858
5959 let configAddress = addressFromStringValue(getStringValue(this, configStore))
6060
6161 let locker = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "lp_locker"), "no lp_locker address in config")), "bad lp_locker address in config")
6262
6363 let reservesStr = valueOrErrorMessage(getString(configAddress, "primary_reserves"), "no reserves registered")
6464
6565 let reserves = split_4C(reservesStr, "|")
6666
6767 let ebR = addressFromStringValue(valueOrErrorMessage(getString(configAddress, "eb_rewards"), "no eb_rewards"))
6868
6969 let viresMinter = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "vires_minter"), "main: no viresMinter")), "bad minter")
7070
7171 let maybevS = getString(configAddress, "vires_staker")
7272
7373 let vS = addressFromStringValue(valueOrErrorMessage(maybevS, "no vires_staker"))
7474
7575 let dC = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "dividends_contract"), "no dividends_contract")), "bad div")
7676
7777 let mVD = match getString(configAddress, "vires_distributor") {
7878 case d: String =>
7979 addressFromStringValue(d)
8080 case _ =>
8181 unit
8282 }
8383
8484 let VD = valueOrErrorMessage(mVD, "no distr")
8585
8686 let limiter = match getString(configAddress, "limiter") {
8787 case d: String =>
8888 addressFromStringValue(d)
8989 case _ =>
9090 unit
9191 }
9292
9393 let maybeViresAssetId = getString(viresMinter, aIdS)
9494
9595 let viresAssetId = valueOrErrorMessage(fromBase58String(valueOrErrorMessage(maybeViresAssetId, "no vires id")), "invalid vires id")
9696
9797 func viresPayment (i) = if ((size(i.payments) == 0))
9898 then 0
9999 else if ((i.payments[0].assetId != viresAssetId))
100100 then throw("not vires")
101101 else i.payments[0].amount
102102
103103
104104 func assetIdOfReserve (rsr) = valueOrErrorMessage(getString(rsr, aIdS), "no assetId in rsr")
105105
106106
107107 func collateralFactor (rsr) = valueOrErrorMessage(getInteger(configAddress, (assetIdOfReserve(rsr) + "_CollateralFactor")), "no 1")
108108
109109
110110 func liquidationThreshold (rsr) = valueOrErrorMessage(getInteger(configAddress, (assetIdOfReserve(rsr) + "_LiquidationThreshold")), "no 2")
111111
112112
113113 let accountHealthThreshold = valueOrErrorMessage(getInteger(configAddress, "account_health_threshold"), "no 4")
114114
115115 let accountHealthOverlap = valueOrErrorMessage(getInteger(configAddress, "account_health_overlap"), "no 5")
116116
117117 let liquidators = valueOrElse(getString(configAddress, "liquidators"), "")
118118
119119 func reserveBy (store,value) = {
120120 func fold (a,r) = match a {
121121 case found: Address =>
122122 found
123123 case _ =>
124124 let rsr = valueOrErrorMessage(addressFromString(r), "rsr bad address")
125125 if ((valueOrErrorMessage(getString(rsr, store), ("rsr has no " + store)) == value))
126126 then rsr
127127 else unit
128128 }
129129
130130 match let $l = reserves
131131 let $s = size($l)
132132 let $acc0 = unit
133133 func $f0_1 ($a,$i) = if (($i >= $s))
134134 then $a
135135 else fold($a, $l[$i])
136136
137137 func $f0_2 ($a,$i) = if (($i >= $s))
138138 then $a
139139 else throw("List size exceeds 20")
140140
141141 $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($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20) {
142142 case found: Address =>
143143 found
144144 case _ =>
145145 throw(("unknown " + store))
146146 }
147147 }
148148
149149
150150 func vlR (r) = if (contains(reservesStr, r))
151151 then valueOrErrorMessage(addressFromString(r), "main: bad rsr")
152152 else throw(("unknown rsr:" + r))
153153
154154
155155 func userBalance (rsr,user) = asUserBalanceData(invoke(rsr, "userBalance", [user], nil))
156156
157157
158158 let maybeProtected = match getString(configAddress, "protected_reserve") {
159159 case pds: String =>
160160 valueOrErrorMessage(addressFromString(pds), "bad protected")
161161 case _ =>
162162 unit
163163 }
164164
165165 let protectedReserve = valueOrErrorMessage(maybeProtected, "no protected rsr")
166166
167167 let prohibitedCollateralReserves = match getString(configAddress, "prohibitedCollateralReserves") {
168168 case s: String =>
169169 split(s, "|")
170170 case _ =>
171171 nil
172172 }
173173
174174 func ensureNoProhibitedCollaterals (user) = {
175175 func foldFunc (a,prohibitedReserve) = {
176176 let atb = valueOrElse(getInteger(addressFromStringValue(prohibitedReserve), (user + "_aTokenBalance")), 0)
177177 if ((atb > 1))
178178 then throw((((("operation denied: user has deposit in " + prohibitedReserve) + ": ") + toString(atb)) + "(lp tokens)"))
179179 else true
180180 }
181181
182+ let ensureNoProtectedUSDNorEURN = {
183+ let any = (valueOrElse(getInteger(protectedReserve, ("userShares_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p_" + user)), 0) + valueOrElse(getInteger(protectedReserve, ("userShares_DUk2YTxhRoAqMJLus4G2b3fR8hMHVh6eiyFx5r29VR6t_" + user)), 0))
184+ if ((any > 0))
185+ then throw("has non-borrowable Neutrino assets as collateral")
186+ else true
187+ }
182188 let $l = prohibitedCollateralReserves
183189 let $s = size($l)
184- let $acc0 = true
190+ let $acc0 = ensureNoProtectedUSDNorEURN
185191 func $f0_1 ($a,$i) = if (($i >= $s))
186192 then $a
187193 else foldFunc($a, $l[$i])
188194
189195 func $f0_2 ($a,$i) = if (($i >= $s))
190196 then $a
191197 else throw("List size exceeds 15")
192198
193199 $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($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
194200 }
195201
196202
197203 func ensureNoProhibited (user,bpu,reserve) = if (if ((bpu == 0))
198204 then true
199205 else isDefined(indexOf(prohibitedCollateralReserves, reserve)))
200206 then true
201207 else ensureNoProhibitedCollaterals(user)
202208
203209
204210 func ensureNoProtected (user) = {
205211 let has = match maybeProtected {
206212 case pa: Address =>
207213 valueOrElse(getBoolean(pa, ("protected_collateral_" + user)), false)
208214 case _ =>
209215 false
210216 }
211217 if (has)
212218 then throw("disallowed")
213219 else unit
214220 }
215221
216222
217223 func ensureLimit (action,rsr,user,amount) = match limiter {
218224 case l: Address =>
219225 asInt(invoke(l, "validateLimit", [action, toString(rsr), user, amount], nil))
220226 case _ =>
221227 true
222228 }
223229
224230
225231 func userPower (user) = {
226232 let protectedDeposit = match maybeProtected {
227233 case pa: Address =>
228234 asInt(invoke(pa, "borrowPower", [user], nil))
229235 case _ =>
230236 0
231237 }
232238 func fold (totals,r) = {
233- let $t087988844 = totals
234- let totalD = $t087988844._1
235- let totalB = $t087988844._2
236- let numberOfBorrows = $t087988844._3
239+ let $t092179263 = totals
240+ let totalD = $t092179263._1
241+ let totalB = $t092179263._2
242+ let numberOfBorrows = $t092179263._3
237243 let rsr = valueOrErrorMessage(addressFromString(r), "rsr bad address")
238244 let cf = collateralFactor(rsr)
239245 let lt = liquidationThreshold(rsr)
240- let $t089989082 = userBalance(rsr, user)
241- let token = $t089989082._1
242- let asset = $t089989082._2
243- let depositUsd = $t089989082._3
244- let debt = $t089989082._4
245- let debtUsd = $t089989082._5
246- let asCollateral = $t089989082._6
246+ let $t094179501 = userBalance(rsr, user)
247+ let token = $t094179501._1
248+ let asset = $t094179501._2
249+ let depositUsd = $t094179501._3
250+ let debt = $t094179501._4
251+ let debtUsd = $t094179501._5
252+ let asCollateral = $t094179501._6
247253 let totalBorrows = (numberOfBorrows + (if ((debt > 0))
248254 then 1
249255 else 0))
250256 let effectiveDepositUsd = if (asCollateral)
251257 then depositUsd
252258 else 0
253259 let overlapUsd = min([debtUsd, effectiveDepositUsd])
254260 let overlapCharge = fCi(overlapUsd, accountHealthOverlap, factorsBase)
255261 if ((debtUsd > effectiveDepositUsd))
256262 then $Tuple3(totalD, ((totalB + fraction((debtUsd - effectiveDepositUsd), factorsBase, lt)) + overlapCharge), totalBorrows)
257263 else $Tuple3((totalD + fraction((effectiveDepositUsd - debtUsd), cf, factorsBase)), (totalB + overlapCharge), totalBorrows)
258264 }
259265
260266 let r = {
261267 let $l = reserves
262268 let $s = size($l)
263269 let $acc0 = $Tuple3(protectedDeposit, 0, 0)
264270 func $f0_1 ($a,$i) = if (($i >= $s))
265271 then $a
266272 else fold($a, $l[$i])
267273
268274 func $f0_2 ($a,$i) = if (($i >= $s))
269275 then $a
270276 else throw("List size exceeds 20")
271277
272278 $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($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
273279 }
274280 if (if ((protectedDeposit > 0))
275281 then (r._3 > 4)
276282 else false)
277283 then throw("can't have more than 4 borrows")
278284 else r
279285 }
280286
281287
282288 func getUserHealth (account) = {
283- let $t098379888 = asInt3(userPower(account))
284- let bp = $t098379888._1
285- let bpu = $t098379888._2
286- let ignore = $t098379888._3
289+ let $t01025610307 = asInt3(userPower(account))
290+ let bp = $t01025610307._1
291+ let bpu = $t01025610307._2
292+ let ignore = $t01025610307._3
287293 ((("bp:" + toString(bp)) + ", bpu:") + toString(bpu))
288294 }
289295
290296
291297 func validateAfter (user,op) = {
292- let $t01000010031 = userPower(user)
293- let bp = $t01000010031._1
294- let bpu = $t01000010031._2
298+ let $t01041910450 = userPower(user)
299+ let bp = $t01041910450._1
300+ let bpu = $t01041910450._2
295301 let accHealth = (((bp - bpu) * factorsBase) / bp)
296302 if (if ((bp == 0))
297303 then (bpu == 0)
298304 else false)
299305 then 0
300306 else if (if ((bp == 0))
301307 then (bpu > 0)
302308 else false)
303309 then throw(((op + ": breaching liquidation threshold(bp=0, bpu=") + toString(bpu)))
304310 else if ((accountHealthThreshold > accHealth))
305311 then throw((((((((op + ": breaching liquidation threshold(bp=") + toString(bp)) + ", bpu=") + toString(bpu)) + ", health=") + toString(accHealth)) + ")"))
306312 else bpu
307313 }
308314
309315
310316 func uS (rsr,action,user,userChange,streamChange) = match mVD {
311317 case a: Address =>
312318 invoke(a, "onAction", [rsr, action, user, userChange, streamChange], nil)
313319 case _ =>
314320 unit
315321 }
316322
317323
318324 func moveStream (rsr,action,from,string,amt) = match mVD {
319325 case a: Address =>
320326 invoke(a, "move", [rsr, action, from, string, amt], nil)
321327 case _ =>
322328 unit
323329 }
324330
325331
326332 func sR (rsr) = match mVD {
327333 case a: Address =>
328334 invoke(a, "syncHeight", [rsr], nil)
329335 case _ =>
330336 unit
331337 }
332338
333339
334340 func lockOrPayout (recipient,amt,lock) = if (!(lock))
335341 then [ScriptTransfer(recipient, amt, viresAssetId)]
336342 else {
337343 let doLock = invoke(dC, "lockFor", [toString(recipient), 1], [AttachedPayment(viresAssetId, amt)])
338344 if ((doLock == doLock))
339345 then nil
340346 else throw("Strict value is not equal to itself.")
341347 }
342348
343349
344350 func doDeposit (i,rsr,asCol) = {
345351 let user = toString(i.caller)
346352 let checks = ensureNoProtected(user)
347353 if ((checks == checks))
348354 then {
349355 let sh = sR(rsr)
350356 if ((sh == sh))
351357 then {
352358 let action = invoke(vlR(rsr), "depositFor", [user, asCol], i.payments)
353359 if ((action == action))
354360 then {
355361 let amt = i.payments[0].amount
356362 let pRw = uS(rsr, "deposit", user, amt, amt)
357363 if ((pRw == pRw))
358364 then {
359365 let va = if (!(asCol))
360366 then validateAfter(user, "depositing")
361367 else 0
362368 if ((va == va))
363369 then nil
364370 else throw("Strict value is not equal to itself.")
365371 }
366372 else throw("Strict value is not equal to itself.")
367373 }
368374 else throw("Strict value is not equal to itself.")
369375 }
370376 else throw("Strict value is not equal to itself.")
371377 }
372378 else throw("Strict value is not equal to itself.")
373379 }
374380
375381
376382 let rewardReserves = split_4C(valueOrErrorMessage(getString(configAddress, "rewardable_reserves"), "no string"), "|")
377383
378384 func claimAllRewardsForUser (user) = {
379385 let claimedEb = asInt(invoke(ebR, "claimEbRewardFor", [user, -1], nil))
380386 if ((claimedEb == claimedEb))
381387 then {
382388 func fold (acc,rsr) = {
383389 let claimed = asInt(invoke(VD, "claimRewardFor", [rsr, user, -1], nil))
384390 if ((claimed == claimed))
385391 then (acc + claimed)
386392 else throw("Strict value is not equal to itself.")
387393 }
388394
389395 let claimedTotal = {
390396 let $l = rewardReserves
391397 let $s = size($l)
392398 let $acc0 = 0
393399 func $f0_1 ($a,$i) = if (($i >= $s))
394400 then $a
395401 else fold($a, $l[$i])
396402
397403 func $f0_2 ($a,$i) = if (($i >= $s))
398404 then $a
399405 else throw("List size exceeds 20")
400406
401407 $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($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
402408 }
403409 (claimedTotal + claimedEb)
404410 }
405411 else throw("Strict value is not equal to itself.")
406412 }
407413
408414
409415 func claimAllLpRewardsForUser (user) = {
410416 func fold (acc,rsr) = {
411417 let aTokenId = valueOrErrorMessage(getString(addressFromStringValue(rsr), aTIdS), "no aTokenId in reserve")
412418 let claimed = asInt(invoke(locker, "claimLpRewardFor", [user, aTokenId, -1], nil))
413419 if ((claimed == claimed))
414420 then (acc + claimed)
415421 else throw("Strict value is not equal to itself.")
416422 }
417423
418424 let claimedTotal = {
419425 let $l = rewardReserves
420426 let $s = size($l)
421427 let $acc0 = 0
422428 func $f0_1 ($a,$i) = if (($i >= $s))
423429 then $a
424430 else fold($a, $l[$i])
425431
426432 func $f0_2 ($a,$i) = if (($i >= $s))
427433 then $a
428434 else throw("List size exceeds 20")
429435
430436 $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($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
431437 }
432438 claimedTotal
433439 }
434440
435441
436442 func moveCollateral (addr,assetStr,rsr,reserveStr) = {
437443 let amt = asInt(invoke(protectedReserve, "withdrawToMain", [addr, assetStr], nil))
438444 if ((amt == amt))
439445 then {
440446 let dep = invoke(rsr, "depositFor", [addr, true], [AttachedPayment(pureAssetId(assetStr), amt)])
441447 if ((dep == dep))
442448 then {
443449 let prop = uS(reserveStr, "deposit", addr, amt, amt)
444450 if ((prop == prop))
445451 then unit
446452 else throw("Strict value is not equal to itself.")
447453 }
448454 else throw("Strict value is not equal to itself.")
449455 }
450456 else throw("Strict value is not equal to itself.")
451457 }
452458
453459
454460 func spfr () = invoke(dC, "shareProfitFromReserves", nil, nil)
455461
456462
457463 func wdInternal (user,rsr,amt,op) = {
458464 let sh = sR(toString(rsr))
459465 if ((sh == sh))
460466 then {
461467 let withdrawnAmount = asInt(invoke(rsr, op, [user, amt], nil))
462468 if ((withdrawnAmount == withdrawnAmount))
463469 then {
464470 let pRw = uS(toString(rsr), "deposit", user, -(withdrawnAmount), -(withdrawnAmount))
465471 if ((pRw == pRw))
466472 then {
467473 let e = ensureLimit("withdraw", rsr, user, withdrawnAmount)
468474 if ((e == e))
469475 then withdrawnAmount
470476 else throw("Strict value is not equal to itself.")
471477 }
472478 else throw("Strict value is not equal to itself.")
473479 }
474480 else throw("Strict value is not equal to itself.")
475481 }
476482 else throw("Strict value is not equal to itself.")
477483 }
478484
479485
480486 func repayWithAtokenInternal (user,payment) = {
481487 let aTokenId = toBase58String(valueOrErrorMessage(payment.assetId, "bad assetId: waves not allowed"))
482488 let t = reserveBy(aTIdS, aTokenId)
483489 let sh = sR(toString(t))
484490 if ((sh == sh))
485491 then {
486492 let amt = asInt(invoke(t, "replenishForRepayWithAtokenFor", [user], [payment]))
487493 if ((amt == amt))
488494 then {
489495 let c = asInt(invoke(t, "collapseForAmount", [user, amt], nil))
490496 if ((c == c))
491497 then if ((amt > c))
492498 then throw("repaying too much")
493499 else {
494500 let pRw = uS(toString(t), "borrow", user, -(c), -(c))
495501 if ((pRw == pRw))
496502 then {
497503 let pRw2 = uS(toString(t), "deposit", user, (amt - c), -(c))
498504 if ((pRw2 == pRw2))
499505 then nil
500506 else throw("Strict value is not equal to itself.")
501507 }
502508 else throw("Strict value is not equal to itself.")
503509 }
504510 else throw("Strict value is not equal to itself.")
505511 }
506512 else throw("Strict value is not equal to itself.")
507513 }
508514 else throw("Strict value is not equal to itself.")
509515 }
510516
511517
512518 @Callable(i)
513519 func initialize (ca) = [writeConstString(configStore, ca)]
514520
515521
516522
517523 @Callable(i)
518524 func deposit (rsr,asCol) = doDeposit(i, rsr, asCol)
519525
520526
521527
522528 @Callable(i)
523529 func depositRef (rsr,asCol,ref) = doDeposit(i, rsr, asCol)
524530
525531
526532
527533 @Callable(i)
528534 func repay (rsr) = {
529535 let user = toString(i.caller)
530536 let sh = sR(rsr)
531537 if ((sh == sh))
532538 then {
533539 let repaid = asInt(invoke(vlR(rsr), "repayFor", [user], i.payments))
534540 if ((repaid == repaid))
535541 then {
536542 let pRw = uS(rsr, "borrow", user, -(repaid), -(repaid))
537543 if ((pRw == pRw))
538544 then nil
539545 else throw("Strict value is not equal to itself.")
540546 }
541547 else throw("Strict value is not equal to itself.")
542548 }
543549 else throw("Strict value is not equal to itself.")
544550 }
545551
546552
547553
548554 @Callable(i)
549555 func mintAtoken (aTokenId,amt) = {
550556 let user = toString(i.caller)
551557 let t = reserveBy(aTIdS, aTokenId)
552558 let sh = sR(toString(t))
553559 if ((sh == sh))
554560 then {
555561 let actual = asInt(invoke(t, "mintAtokenFor", [user, amt], nil))
556562 if ((actual == actual))
557563 then {
558564 let pRw = uS(toString(t), "deposit", user, -(actual), 0)
559565 if ((pRw == pRw))
560566 then {
561567 let bpu = asInt(validateAfter(user, "minting"))
562568 if ((bpu == bpu))
563569 then {
564570 let pc = ensureNoProhibited(user, bpu, toString(t))
565571 if ((pc == pc))
566572 then nil
567573 else throw("Strict value is not equal to itself.")
568574 }
569575 else throw("Strict value is not equal to itself.")
570576 }
571577 else throw("Strict value is not equal to itself.")
572578 }
573579 else throw("Strict value is not equal to itself.")
574580 }
575581 else throw("Strict value is not equal to itself.")
576582 }
577583
578584
579585
580586 @Callable(i)
581587 func replenishWithAtoken () = {
582588 let user = toString(i.caller)
583589 let checks = ensureNoProtected(user)
584590 if ((checks == checks))
585591 then {
586592 let aTokenId = toBase58String(valueOrErrorMessage(i.payments[0].assetId, "bad assetId(w)"))
587593 let rsr = reserveBy(aTIdS, aTokenId)
588594 let sh = sR(toString(rsr))
589595 if ((sh == sh))
590596 then {
591597 let amt = asInt(invoke(rsr, "replenishWithAtokenFor", [user], i.payments))
592598 if ((amt == amt))
593599 then {
594600 let pRw = uS(toString(rsr), "deposit", user, amt, 0)
595601 if ((pRw == pRw))
596602 then {
597603 let e = ensureLimit("import", rsr, user, amt)
598604 if ((e == e))
599605 then nil
600606 else throw("Strict value is not equal to itself.")
601607 }
602608 else throw("Strict value is not equal to itself.")
603609 }
604610 else throw("Strict value is not equal to itself.")
605611 }
606612 else throw("Strict value is not equal to itself.")
607613 }
608614 else throw("Strict value is not equal to itself.")
609615 }
610616
611617
612618
613619 @Callable(i)
614620 func redeemAtokens () = {
615621 let user = toString(i.caller)
616622 let aTokenId = toBase58String(valueOrErrorMessage(i.payments[0].assetId, "bad assetId: WAVES"))
617623 let rsr = reserveBy(aTIdS, aTokenId)
618624 let sh = sR(toString(rsr))
619625 if ((sh == sh))
620626 then {
621627 let amt = asInt(invoke(rsr, "redeemAtokensFor", [user], i.payments))
622628 if ((amt == amt))
623629 then {
624630 let pRw = uS(toString(rsr), "deposit", user, 0, -(amt))
625631 if ((pRw == pRw))
626632 then {
627633 let e = ensureLimit("redeem", rsr, user, amt)
628634 if ((e == e))
629635 then nil
630636 else throw("Strict value is not equal to itself.")
631637 }
632638 else throw("Strict value is not equal to itself.")
633639 }
634640 else throw("Strict value is not equal to itself.")
635641 }
636642 else throw("Strict value is not equal to itself.")
637643 }
638644
639645
640646
641647 @Callable(i)
642648 func withdraw (assetId,amt) = {
643649 let user = toString(i.caller)
644650 let r = reserveBy(aIdS, assetId)
645651 let result = asInt(wdInternal(user, r, amt, "withdrawFor"))
646652 if ((result == result))
647653 then {
648654 let bpu = asInt(validateAfter(user, "withdrawing"))
649655 if ((bpu == bpu))
650656 then {
651657 let pc = ensureNoProhibited(user, bpu, toString(r))
652658 if ((pc == pc))
653659 then $Tuple2(nil, result)
654660 else throw("Strict value is not equal to itself.")
655661 }
656662 else throw("Strict value is not equal to itself.")
657663 }
658664 else throw("Strict value is not equal to itself.")
659665 }
660666
661667
662668
663669 @Callable(i)
664670 func withdraw2 (rsr,amt) = {
665671 let user = toString(i.caller)
666672 let sh = sR(rsr)
667673 if ((sh == sh))
668674 then {
669675 let rsrAddr = vlR(rsr)
670676 let actual = asInt(invoke(rsrAddr, "withdrawFor", [user, amt], nil))
671677 if ((actual == actual))
672678 then {
673679 let pRw = uS(rsr, "deposit", user, -(actual), -(actual))
674680 if ((pRw == pRw))
675681 then {
676682 let bpu = if (contains(liquidators, user))
677683 then 0
678684 else {
679685 let e = ensureLimit("withdraw", rsrAddr, user, actual)
680686 if ((e == e))
681687 then asInt(validateAfter(user, "withdrawing2"))
682688 else throw("Strict value is not equal to itself.")
683689 }
684690 let pc = ensureNoProhibited(user, bpu, rsr)
685691 if ((pc == pc))
686692 then $Tuple2(nil, actual)
687693 else throw("Strict value is not equal to itself.")
688694 }
689695 else throw("Strict value is not equal to itself.")
690696 }
691697 else throw("Strict value is not equal to itself.")
692698 }
693699 else throw("Strict value is not equal to itself.")
694700 }
695701
696702
697703
698704 @Callable(i)
699705 func protectCollateral (rsr) = {
700706 let user = toString(i.caller)
701707 let r = vlR(rsr)
702708 let amt = asInt(wdInternal(user, r, -1, "withdrawToMain"))
703709 if ((amt == amt))
704710 then {
705711 let assetIdStr = getStringValue(r, aIdS)
706712 let p = invoke(protectedReserve, "supplyFor", [user], [AttachedPayment(pureAssetId(assetIdStr), amt)])
707713 if ((p == p))
708714 then {
709715 let pc = ensureNoProhibited(user, userPower(user)._2, rsr)
710716 if ((pc == pc))
711717 then $Tuple2(nil, amt)
712718 else throw("Strict value is not equal to itself.")
713719 }
714720 else throw("Strict value is not equal to itself.")
715721 }
716722 else throw("Strict value is not equal to itself.")
717723 }
718724
719725
720726
721727 @Callable(i)
722728 func withdrawProtectedCollateral (assetId,amt) = {
723729 let user = toString(i.caller)
724730 let a = asInt(invoke(valueOrErrorMessage(protectedReserve, "no protectedReserve"), "withdrawFor", [user, assetId, amt], nil))
725731 if ((a == a))
726732 then {
727733 let va = validateAfter(user, "withdrawing protected")
728734 if ((va == va))
729735 then nil
730736 else throw("Strict value is not equal to itself.")
731737 }
732738 else throw("Strict value is not equal to itself.")
733739 }
734740
735741
736742
737743 @Callable(i)
738744 func normalizeCollateral (rsr) = {
739745 let addr = toString(i.caller)
740746 let rA = vlR(rsr)
741747 if ((rA == rA))
742748 then {
743749 let sh = sR(rsr)
744750 if ((sh == sh))
745751 then {
746752 let assetIdStr = valueOrErrorMessage(getString(rA, aIdS), ("no assetId in rsv: " + rsr))
747753 let mc = moveCollateral(addr, assetIdStr, rA, rsr)
748754 if ((mc == mc))
749755 then nil
750756 else throw("Strict value is not equal to itself.")
751757 }
752758 else throw("Strict value is not equal to itself.")
753759 }
754760 else throw("Strict value is not equal to itself.")
755761 }
756762
757763
758764
759765 @Callable(i)
760766 func borrow (assetId,amt) = {
761767 let user = toString(i.caller)
762768 let rsr = reserveBy(aIdS, assetId)
763769 let sh = sR(toString(rsr))
764770 if ((sh == sh))
765771 then {
766772 let a = invoke(rsr, "borrowFor", [user, amt], nil)
767773 if ((a == a))
768774 then {
769775 let pRw = uS(toString(rsr), "borrow", user, amt, amt)
770776 if ((pRw == pRw))
771777 then {
772778 let e = ensureLimit("borrow", rsr, user, amt)
773779 if ((e == e))
774780 then {
775781 let bpu = asInt(validateAfter(user, "borrowing"))
776782 if ((bpu == bpu))
777783 then {
778784 let pc = ensureNoProhibitedCollaterals(user)
779785 if ((pc == pc))
780786 then nil
781787 else throw("Strict value is not equal to itself.")
782788 }
783789 else throw("Strict value is not equal to itself.")
784790 }
785791 else throw("Strict value is not equal to itself.")
786792 }
787793 else throw("Strict value is not equal to itself.")
788794 }
789795 else throw("Strict value is not equal to itself.")
790796 }
791797 else throw("Strict value is not equal to itself.")
792798 }
793799
794800
795801
796802 @Callable(i)
797803 func borrow2 (rsr,amt) = {
798804 let user = toString(i.caller)
799805 let r = vlR(rsr)
800806 let sh = sR(rsr)
801807 if ((sh == sh))
802808 then {
803809 let a = invoke(r, "borrowFor", [user, amt], nil)
804810 if ((a == a))
805811 then {
806812 let pRw = uS(rsr, "borrow", user, amt, amt)
807813 if ((pRw == pRw))
808814 then {
809815 let e = ensureLimit("borrow", r, user, amt)
810816 if ((e == e))
811817 then {
812818 let bpu = asInt(validateAfter(user, "borrowing"))
813819 if ((bpu == bpu))
814820 then {
815821 let pc = ensureNoProhibitedCollaterals(user)
816822 if ((pc == pc))
817823 then nil
818824 else throw("Strict value is not equal to itself.")
819825 }
820826 else throw("Strict value is not equal to itself.")
821827 }
822828 else throw("Strict value is not equal to itself.")
823829 }
824830 else throw("Strict value is not equal to itself.")
825831 }
826832 else throw("Strict value is not equal to itself.")
827833 }
828834 else throw("Strict value is not equal to itself.")
829835 }
830836
831837
832838
833839 @Callable(i)
834840 func collapse (rsr,amt) = {
835841 let user = toString(i.caller)
836842 let sh = sR(rsr)
837843 if ((sh == sh))
838844 then {
839845 let c = asInt(invoke(vlR(rsr), "collapseForAmount", [user, amt], nil))
840846 if ((c == c))
841847 then {
842848 let pRw = uS(rsr, "borrow", user, -(c), -(c))
843849 if ((pRw == pRw))
844850 then {
845851 let pRw2 = uS(rsr, "deposit", user, -(c), -(c))
846852 if ((pRw2 == pRw2))
847853 then nil
848854 else throw("Strict value is not equal to itself.")
849855 }
850856 else throw("Strict value is not equal to itself.")
851857 }
852858 else throw("Strict value is not equal to itself.")
853859 }
854860 else throw("Strict value is not equal to itself.")
855861 }
856862
857863
858864
859865 @Callable(i)
860866 func claimEbReward2 (amt,lock) = {
861867 let user = toString(i.caller)
862868 let c = asInt(invoke(ebR, "claimEbRewardFor", [user, amt], nil))
863869 if ((c == c))
864870 then lockOrPayout(i.caller, c, lock)
865871 else throw("Strict value is not equal to itself.")
866872 }
867873
868874
869875
870876 @Callable(i)
871877 func claimReward2 (rsr,amt,lock) = {
872878 let v = vlR(rsr)
873879 if ((v == v))
874880 then {
875881 let user = toString(i.caller)
876882 let c = asInt(invoke(VD, "claimRewardFor", [rsr, user, amt], nil))
877883 if ((c == c))
878884 then lockOrPayout(i.caller, c, lock)
879885 else throw("Strict value is not equal to itself.")
880886 }
881887 else throw("Strict value is not equal to itself.")
882888 }
883889
884890
885891
886892 @Callable(i)
887893 func claimAllRewardsAndAllEbAvailable2 (lock,unstakeLegacy) = {
888894 let user = toString(i.caller)
889895 let cr = claimAllRewardsForUser(user)
890896 if ((cr == cr))
891897 then {
892898 let crLp = claimAllLpRewardsForUser(user)
893899 if ((crLp == crLp))
894900 then {
895901 let lA = if (unstakeLegacy)
896902 then asInt(invoke(vS, "unstakeAllViresFrom", [user], nil))
897903 else 0
898904 if ((lA == lA))
899905 then lockOrPayout(i.caller, ((cr + crLp) + lA), lock)
900906 else throw("Strict value is not equal to itself.")
901907 }
902908 else throw("Strict value is not equal to itself.")
903909 }
904910 else throw("Strict value is not equal to itself.")
905911 }
906912
907913
908914
909915 @Callable(i)
910916 func disableUseAsCollateral (rsr) = {
911917 let user = toString(i.caller)
912918 let d = invoke(vlR(rsr), "disableUseAsCollateralFor", [user], nil)
913919 if ((d == d))
914920 then {
915921 let va = validateAfter(user, "changing collateral status")
916922 if ((va == va))
917923 then nil
918924 else throw("Strict value is not equal to itself.")
919925 }
920926 else throw("Strict value is not equal to itself.")
921927 }
922928
923929
924930
925931 @Callable(i)
926932 func lockVires (factor,migrate) = {
927933 let user = toString(i.caller)
928934 let a = spfr()
929935 if ((a == a))
930936 then {
931937 let migrateAmount = if (migrate)
932938 then asInt(invoke(vS, "unstakeAllViresFrom", [user], nil))
933939 else 0
934940 let total = (migrateAmount + viresPayment(i))
935941 let l = invoke(dC, "lockFor", [user, factor], if ((total == 0))
936942 then nil
937943 else [AttachedPayment(viresAssetId, total)])
938944 if ((l == l))
939945 then nil
940946 else throw("Strict value is not equal to itself.")
941947 }
942948 else throw("Strict value is not equal to itself.")
943949 }
944950
945951
946952
947953 @Callable(i)
948954 func withdrawAllPossibleVires () = {
949955 let user = toString(i.caller)
950956 let a = spfr()
951957 if ((a == a))
952958 then {
953959 let stakerViresAmount = asInt(invoke(vS, "unstakeAllViresFrom", [user], nil))
954960 if ((stakerViresAmount == stakerViresAmount))
955961 then {
956962 let u = invoke(dC, "withdrawUnlockedFor", [user], nil)
957963 if ((u == u))
958964 then [ScriptTransfer(i.caller, stakerViresAmount, viresAssetId)]
959965 else throw("Strict value is not equal to itself.")
960966 }
961967 else throw("Strict value is not equal to itself.")
962968 }
963969 else throw("Strict value is not equal to itself.")
964970 }
965971
966972
967973
968974 @Callable(i)
969975 func claimProtocolProfitFrom (from,relock) = {
970976 let user = toString(i.caller)
971977 let a = spfr()
972978 if ((a == a))
973979 then {
974980 let u = invoke(dC, "claimProfit", [from, user, relock], nil)
975981 if ((u == u))
976982 then nil
977983 else throw("Strict value is not equal to itself.")
978984 }
979985 else throw("Strict value is not equal to itself.")
980986 }
981987
982988
983989
984990 @Callable(i)
985991 func withdrawUnlockedVires () = {
986992 let a = spfr()
987993 if ((a == a))
988994 then {
989995 let u = invoke(dC, "withdrawUnlockedFor", [toString(i.caller)], nil)
990996 if ((u == u))
991997 then nil
992998 else throw("Strict value is not equal to itself.")
993999 }
9941000 else throw("Strict value is not equal to itself.")
9951001 }
9961002
9971003
9981004
9991005 @Callable(i)
10001006 func lockSupply (reserve,period) = {
10011007 let rsr = vlR(reserve)
10021008 let user = toString(i.caller)
10031009 let checks = ensureNoProtected(user)
10041010 if ((checks == checks))
10051011 then {
10061012 let aTokenId = value(pureAssetId(valueOrErrorMessage(getString(rsr, "aTokenId"), "no aTokenId in reserve")))
10071013 let migration = if ((size(i.payments) == 0))
10081014 then unit
10091015 else if ((i.payments[0].assetId == aTokenId))
10101016 then unit
10111017 else if ((i.payments[0].assetId == pureAssetId(valueOrErrorMessage(getString(rsr, aIdS), "no assetId in reserve"))))
10121018 then {
10131019 let sh = sR(reserve)
10141020 if ((sh == sh))
10151021 then {
10161022 let action = invoke(rsr, "depositFor", [user, true], i.payments)
10171023 if ((action == action))
10181024 then {
10191025 let amt = i.payments[0].amount
10201026 let pRw = uS(reserve, "deposit", user, amt, amt)
10211027 if ((pRw == pRw))
10221028 then unit
10231029 else throw("Strict value is not equal to itself.")
10241030 }
10251031 else throw("Strict value is not equal to itself.")
10261032 }
10271033 else throw("Strict value is not equal to itself.")
10281034 }
10291035 else throw("bad asset attached")
10301036 if ((migration == migration))
10311037 then {
10321038 let mint = {
10331039 let sh = sR(reserve)
10341040 if ((sh == sh))
10351041 then {
10361042 let actual = asInt(invoke(rsr, "mintAtokenForTo", [user, -1, toString(this)], nil))
10371043 if ((actual == actual))
10381044 then {
10391045 let pRw = uS(toString(rsr), "deposit", user, -(actual), 0)
10401046 if ((pRw == pRw))
10411047 then {
10421048 let va = validateAfter(user, "lock-minting")
10431049 if ((va == va))
10441050 then nil
10451051 else throw("Strict value is not equal to itself.")
10461052 }
10471053 else throw("Strict value is not equal to itself.")
10481054 }
10491055 else throw("Strict value is not equal to itself.")
10501056 }
10511057 else throw("Strict value is not equal to itself.")
10521058 }
10531059 if ((mint == mint))
10541060 then {
10551061 let balance = assetBalance(this, aTokenId)
10561062 let r = invoke(locker, "lockLP", [user, period], [AttachedPayment(aTokenId, balance)])
10571063 if ((r == r))
10581064 then $Tuple2(nil, balance)
10591065 else throw("Strict value is not equal to itself.")
10601066 }
10611067 else throw("Strict value is not equal to itself.")
10621068 }
10631069 else throw("Strict value is not equal to itself.")
10641070 }
10651071 else throw("Strict value is not equal to itself.")
10661072 }
10671073
10681074
10691075
10701076 @Callable(i)
10711077 func repayWithAtokenFor (user) = {
10721078 let checks = if (!(isDefined(addressFromString(user))))
10731079 then throw("bad user")
10741080 else true
10751081 if ((checks == checks))
10761082 then repayWithAtokenInternal(user, i.payments[0])
10771083 else throw("Strict value is not equal to itself.")
10781084 }
10791085
10801086
10811087
10821088 @Callable(i)
10831089 func repayWithAtoken () = repayWithAtokenInternal(toString(i.caller), i.payments[0])
10841090
10851091
10861092
10871093 @Callable(i)
10881094 func repayFor (rsr,user) = {
10891095 let checks = if (!(isDefined(addressFromString(user))))
10901096 then throw("bad user")
10911097 else true
10921098 if ((checks == checks))
10931099 then {
10941100 let sh = sR(rsr)
10951101 if ((sh == sh))
10961102 then {
10971103 let repaid = asInt(invoke(vlR(rsr), "repayFor", [user], i.payments))
10981104 if ((repaid == repaid))
10991105 then {
11001106 let pRw = uS(rsr, "borrow", user, -(repaid), -(repaid))
11011107 if ((pRw == pRw))
11021108 then nil
11031109 else throw("Strict value is not equal to itself.")
11041110 }
11051111 else throw("Strict value is not equal to itself.")
11061112 }
11071113 else throw("Strict value is not equal to itself.")
11081114 }
11091115 else throw("Strict value is not equal to itself.")
11101116 }
11111117
11121118
11131119
11141120 @Callable(i)
11151121 func healthOf (address) = {
1116- let $t02369723748 = asInt3(userPower(address))
1117- let bp = $t02369723748._1
1118- let bpu = $t02369723748._2
1119- let ignore = $t02369723748._3
1122+ let $t02411624167 = asInt3(userPower(address))
1123+ let bp = $t02411624167._1
1124+ let bpu = $t02411624167._2
1125+ let ignore = $t02411624167._3
11201126 $Tuple2(nil, $Tuple2(bp, bpu))
11211127 }
11221128
11231129

github/deemru/w8io/786bc32 
99.31 ms