2022.07.05 18:59 [3192173] smart account 3PAZv9tgK1PX7dKR7b4kchq5qdpUS3G5sYT > SELF 0.00000000 Waves

{ "type": 13, "id": "Hcs5oNEScBSToHQcibFzsRD2AtkhfRK5wzWGmpFWMrww", "fee": 2300000, "feeAssetId": null, "timestamp": 1657036631087, "version": 1, "sender": "3PAZv9tgK1PX7dKR7b4kchq5qdpUS3G5sYT", "senderPublicKey": "2cFG5wZimjVSeCT8ZCRybx7Mzo5tJF879aw2b31uLRmR", "proofs": [ "3cDwpekDwTJo47QdVEY85gJ9RVsyFEpJTVtQ1dEJ9mzb73ib7PorMYgLQsV1ftuJHuPNQQALh1NEXiu9ctXfgfAs" ], "script": "base64:BgKBAQgCEgMKAQgSBAoCCAQSBQoDCAQIEgMKAQgSBAoCCAESABIAEgASBAoCCAESBAoCCAESAwoBCBIECgIIARIDCgEIEgQKAggBEgQKAggBEgQKAggBEgQKAgEEEgUKAwgBBBIECgIEBBIDCgEIEgQKAgEEEgASBAoCCAQSABIECgIIATgAC2ZhY3RvcnNCYXNlAOgHAQNmQ2kDBXZhbHVlCW51bWVyYXRvcgtkZW5vbWluYXRvcgQEY2FuZAkAawMFBXZhbHVlBQludW1lcmF0b3IFC2Rlbm9taW5hdG9yBAFEALPmk6gLBAVleGFjdAkAAAIJAGoCCQBoAgkAagIFBGNhbmQFAUQJAGoCBQtkZW5vbWluYXRvcgUBRAUBRAkAagIJAGgCCQBqAgUFdmFsdWUFAUQJAGoCBQludW1lcmF0b3IFAUQFAUQDBQVleGFjdAUEY2FuZAkAZAIFBGNhbmQAAQEMYXNzZXRTdHJUb0lkAQdhc3NldElkAwkAAAIFB2Fzc2V0SWQCBVdBVkVTBQR1bml0CQDZBAEFB2Fzc2V0SWQBEHdyaXRlQ29uc3RTdHJpbmcCA2tleQV2YWx1ZQMJAQEhAQkBCWlzRGVmaW5lZAEJAJ0IAgUEdGhpcwUDa2V5CQELU3RyaW5nRW50cnkCBQNrZXkFBXZhbHVlCQACAQkArAICAhVhbHJlYWR5IGluaXRpYWxpemVkOiAFA2tleQEFYXNJbnQBBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAgNJbnQEA2ludAUHJG1hdGNoMAUDaW50CQACAQIDbToxAQZhc0ludDMBBXZhbHVlBAckbWF0Y2gwBQV2YWx1ZQMJAAECBQckbWF0Y2gwAg8oSW50LCBJbnQsIEludCkEAXgFByRtYXRjaDAFAXgEAXQFByRtYXRjaDAJAAIBAgEyARFhc1VzZXJCYWxhbmNlRGF0YQEFdmFsdWUEByRtYXRjaDAFBXZhbHVlAwkAAQIFByRtYXRjaDACIihJbnQsIEludCwgSW50LCBJbnQsIEludCwgQm9vbGVhbikEAXgFByRtYXRjaDAFAXgEAXQFByRtYXRjaDAJAAIBAgEzAAtjb25maWdTdG9yZQIGY29uZmlnAA1yZXNlcnZlc1N0b3JlAghyZXNlcnZlcwAFYVRJZFMCCGFUb2tlbklkAARhSWRTAgdhc3NldElkAA1jb25maWdBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQtjb25maWdTdG9yZQAGbG9ja2VyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDWNvbmZpZ0FkZHJlc3MCCWxwX2xvY2tlcgIebm8gbHBfbG9ja2VyIGFkZHJlc3MgaW4gY29uZmlnAh9iYWQgbHBfbG9ja2VyIGFkZHJlc3MgaW4gY29uZmlnAAtyZXNlcnZlc1N0cgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDWNvbmZpZ0FkZHJlc3MCEHByaW1hcnlfcmVzZXJ2ZXMCFm5vIHJlc2VydmVzIHJlZ2lzdGVyZWQACHJlc2VydmVzCQC8CQIFC3Jlc2VydmVzU3RyAgF8AANlYlIJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ1jb25maWdBZGRyZXNzAgplYl9yZXdhcmRzAg1ubyBlYl9yZXdhcmRzAAt2aXJlc01pbnRlcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ1jb25maWdBZGRyZXNzAgx2aXJlc19taW50ZXICFG1haW46IG5vIHZpcmVzTWludGVyAgpiYWQgbWludGVyAAdtYXliZXZTCQCdCAIFDWNvbmZpZ0FkZHJlc3MCDHZpcmVzX3N0YWtlcgACdlMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgUHbWF5YmV2UwIPbm8gdmlyZXNfc3Rha2VyAAJkQwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ1jb25maWdBZGRyZXNzAhJkaXZpZGVuZHNfY29udHJhY3QCFW5vIGRpdmlkZW5kc19jb250cmFjdAIHYmFkIGRpdgADbVZEBAckbWF0Y2gwCQCdCAIFDWNvbmZpZ0FkZHJlc3MCEXZpcmVzX2Rpc3RyaWJ1dG9yAwkAAQIFByRtYXRjaDACBlN0cmluZwQBZAUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQUBZAUEdW5pdAACVkQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgUDbVZEAghubyBkaXN0cgAHbGltaXRlcgQHJG1hdGNoMAkAnQgCBQ1jb25maWdBZGRyZXNzAgdsaW1pdGVyAwkAAQIFByRtYXRjaDACBlN0cmluZwQBZAUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQUBZAUEdW5pdAARbWF5YmVWaXJlc0Fzc2V0SWQJAJ0IAgULdmlyZXNNaW50ZXIFBGFJZFMADHZpcmVzQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgURbWF5YmVWaXJlc0Fzc2V0SWQCC25vIHZpcmVzIGlkAhBpbnZhbGlkIHZpcmVzIGlkAQx2aXJlc1BheW1lbnQBAWkDCQAAAgkAkAMBCAUBaQhwYXltZW50cwAAAAADCQECIT0CCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFDHZpcmVzQXNzZXRJZAkAAgECCW5vdCB2aXJlcwgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQBEGFzc2V0SWRPZlJlc2VydmUBA3JzcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFA3JzcgUEYUlkUwIRbm8gYXNzZXRJZCBpbiByc3IBEGNvbGxhdGVyYWxGYWN0b3IBA3JzcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFDWNvbmZpZ0FkZHJlc3MJAKwCAgkBEGFzc2V0SWRPZlJlc2VydmUBBQNyc3ICEV9Db2xsYXRlcmFsRmFjdG9yAgRubyAxARRsaXF1aWRhdGlvblRocmVzaG9sZAEDcnNyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUNY29uZmlnQWRkcmVzcwkArAICCQEQYXNzZXRJZE9mUmVzZXJ2ZQEFA3JzcgIVX0xpcXVpZGF0aW9uVGhyZXNob2xkAgRubyAyABZhY2NvdW50SGVhbHRoVGhyZXNob2xkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUNY29uZmlnQWRkcmVzcwIYYWNjb3VudF9oZWFsdGhfdGhyZXNob2xkAgRubyA0ABRhY2NvdW50SGVhbHRoT3ZlcmxhcAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFDWNvbmZpZ0FkZHJlc3MCFmFjY291bnRfaGVhbHRoX292ZXJsYXACBG5vIDUAC2xpcXVpZGF0b3JzCQELdmFsdWVPckVsc2UCCQCdCAIFDWNvbmZpZ0FkZHJlc3MCC2xpcXVpZGF0b3JzAgABCXJlc2VydmVCeQIFc3RvcmUFdmFsdWUKAQRmb2xkAgFhAXIEByRtYXRjaDAFAWEDCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQFZm91bmQFByRtYXRjaDAFBWZvdW5kBANyc3IJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQFyAg9yc3IgYmFkIGFkZHJlc3MDCQAAAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFA3JzcgUFc3RvcmUJAKwCAgILcnNyIGhhcyBubyAFBXN0b3JlBQV2YWx1ZQUDcnNyBQR1bml0BAckbWF0Y2gwCgACJGwFCHJlc2VydmVzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUEdW5pdAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEEZm9sZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMjAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEBWZvdW5kBQckbWF0Y2gwBQVmb3VuZAkAAgEJAKwCAgIIdW5rbm93biAFBXN0b3JlAQN2bFIBAXIDCQEIY29udGFpbnMCBQtyZXNlcnZlc1N0cgUBcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFAXICDW1haW46IGJhZCByc3IJAAIBCQCsAgICDHVua25vd24gcnNyOgUBcgELdXNlckJhbGFuY2UCA3JzcgR1c2VyCQERYXNVc2VyQmFsYW5jZURhdGEBCQD8BwQFA3JzcgILdXNlckJhbGFuY2UJAMwIAgUEdXNlcgUDbmlsBQNuaWwADm1heWJlUHJvdGVjdGVkBAckbWF0Y2gwCQCdCAIFDWNvbmZpZ0FkZHJlc3MCEXByb3RlY3RlZF9yZXNlcnZlAwkAAQIFByRtYXRjaDACBlN0cmluZwQDcGRzBQckbWF0Y2gwCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQUDcGRzAg1iYWQgcHJvdGVjdGVkBQR1bml0ABBwcm90ZWN0ZWRSZXNlcnZlCQETdmFsdWVPckVycm9yTWVzc2FnZQIFDm1heWJlUHJvdGVjdGVkAhBubyBwcm90ZWN0ZWQgcnNyABxwcm9oaWJpdGVkQ29sbGF0ZXJhbFJlc2VydmVzBAckbWF0Y2gwCQCdCAIFDWNvbmZpZ0FkZHJlc3MCHHByb2hpYml0ZWRDb2xsYXRlcmFsUmVzZXJ2ZXMDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQC1CQIFAXMCAXwFA25pbAEdZW5zdXJlTm9Qcm9oaWJpdGVkQ29sbGF0ZXJhbHMBBHVzZXIKAQhmb2xkRnVuYwIBYRFwcm9oaWJpdGVkUmVzZXJ2ZQQDYXRiCQELdmFsdWVPckVsc2UCCQCaCAIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFEXByb2hpYml0ZWRSZXNlcnZlCQCsAgIFBHVzZXICDl9hVG9rZW5CYWxhbmNlAAADCQBmAgUDYXRiAAAJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICJm9wZXJhdGlvbiBkZW5pZWQ6IHVzZXIgaGFzIGRlcG9zaXQgaW4gBRFwcm9oaWJpdGVkUmVzZXJ2ZQICOiAJAKQDAQUDYXRiAgsobHAgdG9rZW5zKQYKAAIkbAUccHJvaGliaXRlZENvbGxhdGVyYWxSZXNlcnZlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAGCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQhmb2xkRnVuYwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8BEmVuc3VyZU5vUHJvaGliaXRlZAMEdXNlcgNicHUHcmVzZXJ2ZQMDCQAAAgUDYnB1AAAGCQEJaXNEZWZpbmVkAQkAzwgCBRxwcm9oaWJpdGVkQ29sbGF0ZXJhbFJlc2VydmVzBQdyZXNlcnZlBgkBHWVuc3VyZU5vUHJvaGliaXRlZENvbGxhdGVyYWxzAQUEdXNlcgERZW5zdXJlTm9Qcm90ZWN0ZWQBBHVzZXIEA2hhcwQHJG1hdGNoMAUObWF5YmVQcm90ZWN0ZWQDCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQCcGEFByRtYXRjaDAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUCcGEJAKwCAgIVcHJvdGVjdGVkX2NvbGxhdGVyYWxfBQR1c2VyBwcDBQNoYXMJAAIBAgpkaXNhbGxvd2VkBQR1bml0AQtlbnN1cmVMaW1pdAQGYWN0aW9uA3JzcgR1c2VyBmFtb3VudAQHJG1hdGNoMAUHbGltaXRlcgMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAFsBQckbWF0Y2gwCQEFYXNJbnQBCQD8BwQFAWwCDXZhbGlkYXRlTGltaXQJAMwIAgUGYWN0aW9uCQDMCAIJAKUIAQUDcnNyCQDMCAIFBHVzZXIJAMwIAgUGYW1vdW50BQNuaWwFA25pbAYBCXVzZXJQb3dlcgEEdXNlcgQQcHJvdGVjdGVkRGVwb3NpdAQHJG1hdGNoMAUObWF5YmVQcm90ZWN0ZWQDCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQCcGEFByRtYXRjaDAJAQVhc0ludAEJAPwHBAUCcGECC2JvcnJvd1Bvd2VyCQDMCAIFBHVzZXIFA25pbAUDbmlsAAAKAQRmb2xkAgZ0b3RhbHMBcgQLJHQwODc5NTg4NDEFBnRvdGFscwQGdG90YWxECAULJHQwODc5NTg4NDECXzEEBnRvdGFsQggFCyR0MDg3OTU4ODQxAl8yBA9udW1iZXJPZkJvcnJvd3MIBQskdDA4Nzk1ODg0MQJfMwQDcnNyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQUBcgIPcnNyIGJhZCBhZGRyZXNzBAJjZgkBEGNvbGxhdGVyYWxGYWN0b3IBBQNyc3IEAmx0CQEUbGlxdWlkYXRpb25UaHJlc2hvbGQBBQNyc3IECyR0MDg5OTU5MDc5CQELdXNlckJhbGFuY2UCBQNyc3IFBHVzZXIEBXRva2VuCAULJHQwODk5NTkwNzkCXzEEBWFzc2V0CAULJHQwODk5NTkwNzkCXzIECmRlcG9zaXRVc2QIBQskdDA4OTk1OTA3OQJfMwQEZGVidAgFCyR0MDg5OTU5MDc5Al80BAdkZWJ0VXNkCAULJHQwODk5NTkwNzkCXzUEDGFzQ29sbGF0ZXJhbAgFCyR0MDg5OTU5MDc5Al82BAx0b3RhbEJvcnJvd3MJAGQCBQ9udW1iZXJPZkJvcnJvd3MDCQBmAgUEZGVidAAAAAEAAAQTZWZmZWN0aXZlRGVwb3NpdFVzZAMFDGFzQ29sbGF0ZXJhbAUKZGVwb3NpdFVzZAAABApvdmVybGFwVXNkCQCXAwEJAMwIAgUHZGVidFVzZAkAzAgCBRNlZmZlY3RpdmVEZXBvc2l0VXNkBQNuaWwEDW92ZXJsYXBDaGFyZ2UJAQNmQ2kDBQpvdmVybGFwVXNkBRRhY2NvdW50SGVhbHRoT3ZlcmxhcAULZmFjdG9yc0Jhc2UDCQBmAgUHZGVidFVzZAUTZWZmZWN0aXZlRGVwb3NpdFVzZAkAlQoDBQZ0b3RhbEQJAGQCCQBkAgUGdG90YWxCCQBrAwkAZQIFB2RlYnRVc2QFE2VmZmVjdGl2ZURlcG9zaXRVc2QFC2ZhY3RvcnNCYXNlBQJsdAUNb3ZlcmxhcENoYXJnZQUMdG90YWxCb3Jyb3dzCQCVCgMJAGQCBQZ0b3RhbEQJAGsDCQBlAgUTZWZmZWN0aXZlRGVwb3NpdFVzZAUHZGVidFVzZAUCY2YFC2ZhY3RvcnNCYXNlCQBkAgUGdG90YWxCBQ1vdmVybGFwQ2hhcmdlBQx0b3RhbEJvcnJvd3MEAXIKAAIkbAUIcmVzZXJ2ZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFEHByb3RlY3RlZERlcG9zaXQAAAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQRmb2xkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQDAwkAZgIFEHByb3RlY3RlZERlcG9zaXQAAAkAZgIIBQFyAl8zAAIHCQACAQIeY2FuJ3QgaGF2ZSBtb3JlIHRoYW4gMiBib3Jyb3dzBQFyAQ1nZXRVc2VySGVhbHRoAQdhY2NvdW50BAskdDA5ODM0OTg4NQkBBmFzSW50MwEJAQl1c2VyUG93ZXIBBQdhY2NvdW50BAJicAgFCyR0MDk4MzQ5ODg1Al8xBANicHUIBQskdDA5ODM0OTg4NQJfMgQGaWdub3JlCAULJHQwOTgzNDk4ODUCXzMJAKwCAgkArAICCQCsAgICA2JwOgkApAMBBQJicAIGLCBicHU6CQCkAwEFA2JwdQENdmFsaWRhdGVBZnRlcgIEdXNlcgJvcAQMJHQwOTk5NzEwMDI4CQEJdXNlclBvd2VyAQUEdXNlcgQCYnAIBQwkdDA5OTk3MTAwMjgCXzEEA2JwdQgFDCR0MDk5OTcxMDAyOAJfMgQJYWNjSGVhbHRoCQBpAgkAaAIJAGUCBQJicAUDYnB1BQtmYWN0b3JzQmFzZQUCYnADAwkAAAIFAmJwAAAJAAACBQNicHUAAAcAAAMDCQAAAgUCYnAAAAkAZgIFA2JwdQAABwkAAgEJAKwCAgkArAICBQJvcAIsOiBicmVhY2hpbmcgbGlxdWlkYXRpb24gdGhyZXNob2xkKGJwPTAsIGJwdT0JAKQDAQUDYnB1AwkAZgIFFmFjY291bnRIZWFsdGhUaHJlc2hvbGQFCWFjY0hlYWx0aAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUCb3ACJTogYnJlYWNoaW5nIGxpcXVpZGF0aW9uIHRocmVzaG9sZChicD0JAKQDAQUCYnACBiwgYnB1PQkApAMBBQNicHUCCSwgaGVhbHRoPQkApAMBBQlhY2NIZWFsdGgCASkFA2JwdQECdVMFA3JzcgZhY3Rpb24EdXNlcgp1c2VyQ2hhbmdlDHN0cmVhbUNoYW5nZQQHJG1hdGNoMAUDbVZEAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEAWEFByRtYXRjaDAJAPwHBAUBYQIIb25BY3Rpb24JAMwIAgUDcnNyCQDMCAIFBmFjdGlvbgkAzAgCBQR1c2VyCQDMCAIFCnVzZXJDaGFuZ2UJAMwIAgUMc3RyZWFtQ2hhbmdlBQNuaWwFA25pbAUEdW5pdAEKbW92ZVN0cmVhbQUDcnNyBmFjdGlvbgRmcm9tBnN0cmluZwNhbXQEByRtYXRjaDAFA21WRAMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAFhBQckbWF0Y2gwCQD8BwQFAWECBG1vdmUJAMwIAgUDcnNyCQDMCAIFBmFjdGlvbgkAzAgCBQRmcm9tCQDMCAIFBnN0cmluZwkAzAgCBQNhbXQFA25pbAUDbmlsBQR1bml0AQJzUgEDcnNyBAckbWF0Y2gwBQNtVkQDCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQBYQUHJG1hdGNoMAkA/AcEBQFhAgpzeW5jSGVpZ2h0CQDMCAIFA3JzcgUDbmlsBQNuaWwFBHVuaXQBDGxvY2tPclBheW91dAMJcmVjaXBpZW50A2FtdARsb2NrAwkBASEBBQRsb2NrCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCXJlY2lwaWVudAUDYW10BQx2aXJlc0Fzc2V0SWQFA25pbAQGZG9Mb2NrCQD8BwQFAmRDAgdsb2NrRm9yCQDMCAIJAKUIAQUJcmVjaXBpZW50CQDMCAIAAQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQx2aXJlc0Fzc2V0SWQFA2FtdAUDbmlsAwkAAAIFBmRvTG9jawUGZG9Mb2NrBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BCWRvRGVwb3NpdAMBaQNyc3IFYXNDb2wEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAZjaGVja3MJARFlbnN1cmVOb1Byb3RlY3RlZAEFBHVzZXIDCQAAAgUGY2hlY2tzBQZjaGVja3MEAnNoCQECc1IBBQNyc3IDCQAAAgUCc2gFAnNoBAZhY3Rpb24JAPwHBAkBA3ZsUgEFA3JzcgIKZGVwb3NpdEZvcgkAzAgCBQR1c2VyCQDMCAIFBWFzQ29sBQNuaWwIBQFpCHBheW1lbnRzAwkAAAIFBmFjdGlvbgUGYWN0aW9uBANhbXQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BANwUncJAQJ1UwUFA3JzcgIHZGVwb3NpdAUEdXNlcgUDYW10BQNhbXQDCQAAAgUDcFJ3BQNwUncEAnZhAwkBASEBBQVhc0NvbAkBDXZhbGlkYXRlQWZ0ZXICBQR1c2VyAgpkZXBvc2l0aW5nAAADCQAAAgUCdmEFAnZhBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4ADnJld2FyZFJlc2VydmVzCQC8CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ1jb25maWdBZGRyZXNzAhNyZXdhcmRhYmxlX3Jlc2VydmVzAglubyBzdHJpbmcCAXwBFmNsYWltQWxsUmV3YXJkc0ZvclVzZXIBBHVzZXIECWNsYWltZWRFYgkBBWFzSW50AQkA/AcEBQNlYlICEGNsYWltRWJSZXdhcmRGb3IJAMwIAgUEdXNlcgkAzAgCAP///////////wEFA25pbAUDbmlsAwkAAAIFCWNsYWltZWRFYgUJY2xhaW1lZEViCgEEZm9sZAIDYWNjA3JzcgQHY2xhaW1lZAkBBWFzSW50AQkA/AcEBQJWRAIOY2xhaW1SZXdhcmRGb3IJAMwIAgUDcnNyCQDMCAIFBHVzZXIJAMwIAgD///////////8BBQNuaWwFA25pbAMJAAACBQdjbGFpbWVkBQdjbGFpbWVkCQBkAgUDYWNjBQdjbGFpbWVkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAxjbGFpbWVkVG90YWwKAAIkbAUOcmV3YXJkUmVzZXJ2ZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBGZvbGQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAkAZAIFDGNsYWltZWRUb3RhbAUJY2xhaW1lZEViCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARhjbGFpbUFsbExwUmV3YXJkc0ZvclVzZXIBBHVzZXIKAQRmb2xkAgNhY2MDcnNyBAhhVG9rZW5JZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFA3JzcgUFYVRJZFMCFm5vIGFUb2tlbklkIGluIHJlc2VydmUEB2NsYWltZWQJAQVhc0ludAEJAPwHBAUGbG9ja2VyAhBjbGFpbUxwUmV3YXJkRm9yCQDMCAIFBHVzZXIJAMwIAgUIYVRva2VuSWQJAMwIAgD///////////8BBQNuaWwFA25pbAMJAAACBQdjbGFpbWVkBQdjbGFpbWVkCQBkAgUDYWNjBQdjbGFpbWVkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAxjbGFpbWVkVG90YWwKAAIkbAUOcmV3YXJkUmVzZXJ2ZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBGZvbGQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAUMY2xhaW1lZFRvdGFsAQ5tb3ZlQ29sbGF0ZXJhbAQEYWRkcghhc3NldFN0cgNyc3IKcmVzZXJ2ZVN0cgQDYW10CQEFYXNJbnQBCQD8BwQFEHByb3RlY3RlZFJlc2VydmUCDndpdGhkcmF3VG9NYWluCQDMCAIFBGFkZHIJAMwIAgUIYXNzZXRTdHIFA25pbAUDbmlsAwkAAAIFA2FtdAUDYW10BAdhc3NldElkAwkAAAIFCGFzc2V0U3RyAgVXQVZFUwUEdW5pdAkA2QQBBQhhc3NldFN0cgQDZGVwCQD8BwQFA3JzcgIKZGVwb3NpdEZvcgkAzAgCBQRhZGRyCQDMCAIGBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFB2Fzc2V0SWQFA2FtdAUDbmlsAwkAAAIFA2RlcAUDZGVwBARwcm9wCQECdVMFBQpyZXNlcnZlU3RyAgdkZXBvc2l0BQRhZGRyBQNhbXQFA2FtdAMJAAACBQRwcm9wBQRwcm9wBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQRzcGZyAAkA/AcEBQJkQwIXc2hhcmVQcm9maXRGcm9tUmVzZXJ2ZXMFA25pbAUDbmlsAQp3ZEludGVybmFsBAR1c2VyA3JzcgNhbXQCb3AEAnNoCQECc1IBCQClCAEFA3JzcgMJAAACBQJzaAUCc2gED3dpdGhkcmF3bkFtb3VudAkBBWFzSW50AQkA/AcEBQNyc3IFAm9wCQDMCAIFBHVzZXIJAMwIAgUDYW10BQNuaWwFA25pbAMJAAACBQ93aXRoZHJhd25BbW91bnQFD3dpdGhkcmF3bkFtb3VudAQDcFJ3CQECdVMFCQClCAEFA3JzcgIHZGVwb3NpdAUEdXNlcgkBAS0BBQ93aXRoZHJhd25BbW91bnQJAQEtAQUPd2l0aGRyYXduQW1vdW50AwkAAAIFA3BSdwUDcFJ3BAFlCQELZW5zdXJlTGltaXQEAgh3aXRoZHJhdwUDcnNyBQR1c2VyBQ93aXRoZHJhd25BbW91bnQDCQAAAgUBZQUBZQUPd2l0aGRyYXduQW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuGQFpAQppbml0aWFsaXplAQJjYQkAzAgCCQEQd3JpdGVDb25zdFN0cmluZwIFC2NvbmZpZ1N0b3JlBQJjYQUDbmlsAWkBB2RlcG9zaXQCA3JzcgVhc0NvbAkBCWRvRGVwb3NpdAMFAWkFA3JzcgUFYXNDb2wBaQEKZGVwb3NpdFJlZgMDcnNyBWFzQ29sA3JlZgkBCWRvRGVwb3NpdAMFAWkFA3JzcgUFYXNDb2wBaQEFcmVwYXkBA3JzcgQEdXNlcgkApQgBCAUBaQZjYWxsZXIEAnNoCQECc1IBBQNyc3IDCQAAAgUCc2gFAnNoBAZyZXBhaWQJAQVhc0ludAEJAPwHBAkBA3ZsUgEFA3JzcgIIcmVwYXlGb3IJAMwIAgUEdXNlcgUDbmlsCAUBaQhwYXltZW50cwMJAAACBQZyZXBhaWQFBnJlcGFpZAQDcFJ3CQECdVMFBQNyc3ICBmJvcnJvdwUEdXNlcgkBAS0BBQZyZXBhaWQJAQEtAQUGcmVwYWlkAwkAAAIFA3BSdwUDcFJ3BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKbWludEF0b2tlbgIIYVRva2VuSWQDYW10BAR1c2VyCQClCAEIBQFpBmNhbGxlcgQBdAkBCXJlc2VydmVCeQIFBWFUSWRTBQhhVG9rZW5JZAQCc2gJAQJzUgEJAKUIAQUBdAMJAAACBQJzaAUCc2gEBmFjdHVhbAkBBWFzSW50AQkA/AcEBQF0Ag1taW50QXRva2VuRm9yCQDMCAIFBHVzZXIJAMwIAgUDYW10BQNuaWwFA25pbAMJAAACBQZhY3R1YWwFBmFjdHVhbAQDcFJ3CQECdVMFCQClCAEFAXQCB2RlcG9zaXQFBHVzZXIJAQEtAQUGYWN0dWFsAAADCQAAAgUDcFJ3BQNwUncEA2JwdQkBBWFzSW50AQkBDXZhbGlkYXRlQWZ0ZXICBQR1c2VyAgdtaW50aW5nAwkAAAIFA2JwdQUDYnB1BAJwYwkBEmVuc3VyZU5vUHJvaGliaXRlZAMFBHVzZXIFA2JwdQkApQgBBQF0AwkAAAIFAnBjBQJwYwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBE3JlcGxlbmlzaFdpdGhBdG9rZW4ABAR1c2VyCQClCAEIBQFpBmNhbGxlcgQGY2hlY2tzCQERZW5zdXJlTm9Qcm90ZWN0ZWQBBQR1c2VyAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAhhVG9rZW5JZAkA2AQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAIOYmFkIGFzc2V0SWQodykEA3JzcgkBCXJlc2VydmVCeQIFBWFUSWRTBQhhVG9rZW5JZAQCc2gJAQJzUgEJAKUIAQUDcnNyAwkAAAIFAnNoBQJzaAQDYW10CQEFYXNJbnQBCQD8BwQFA3JzcgIWcmVwbGVuaXNoV2l0aEF0b2tlbkZvcgkAzAgCBQR1c2VyBQNuaWwIBQFpCHBheW1lbnRzAwkAAAIFA2FtdAUDYW10BANwUncJAQJ1UwUJAKUIAQUDcnNyAgdkZXBvc2l0BQR1c2VyBQNhbXQAAAMJAAACBQNwUncFA3BSdwQBZQkBC2Vuc3VyZUxpbWl0BAIGaW1wb3J0BQNyc3IFBHVzZXIFA2FtdAMJAAACBQFlBQFlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEPcmVwYXlXaXRoQXRva2VuAAQEdXNlcgkApQgBCAUBaQZjYWxsZXIECGFUb2tlbklkCQDYBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkAh5iYWQgYXNzZXRJZDogd2F2ZXMgbm90IGFsbG93ZWQEAXQJAQlyZXNlcnZlQnkCBQVhVElkUwUIYVRva2VuSWQEAnNoCQECc1IBCQClCAEFAXQDCQAAAgUCc2gFAnNoBANhbXQJAQVhc0ludAEJAPwHBAUBdAIecmVwbGVuaXNoRm9yUmVwYXlXaXRoQXRva2VuRm9yCQDMCAIFBHVzZXIFA25pbAgFAWkIcGF5bWVudHMDCQAAAgUDYW10BQNhbXQEAWMJAQVhc0ludAEJAPwHBAUBdAIRY29sbGFwc2VGb3JBbW91bnQJAMwIAgUEdXNlcgkAzAgCBQNhbXQFA25pbAUDbmlsAwkAAAIFAWMFAWMDCQBmAgUDYW10BQFjCQACAQIRcmVwYXlpbmcgdG9vIG11Y2gEA3BSdwkBAnVTBQkApQgBBQF0AgZib3Jyb3cFBHVzZXIJAQEtAQUBYwkBAS0BBQFjAwkAAAIFA3BSdwUDcFJ3BARwUncyCQECdVMFCQClCAEFAXQCB2RlcG9zaXQFBHVzZXIJAGUCBQNhbXQFAWMJAQEtAQUBYwMJAAACBQRwUncyBQRwUncyBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQENcmVkZWVtQXRva2VucwAEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAhhVG9rZW5JZAkA2AQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAISYmFkIGFzc2V0SWQ6IFdBVkVTBANyc3IJAQlyZXNlcnZlQnkCBQVhVElkUwUIYVRva2VuSWQEAnNoCQECc1IBCQClCAEFA3JzcgMJAAACBQJzaAUCc2gEA2FtdAkBBWFzSW50AQkA/AcEBQNyc3ICEHJlZGVlbUF0b2tlbnNGb3IJAMwIAgUEdXNlcgUDbmlsCAUBaQhwYXltZW50cwMJAAACBQNhbXQFA2FtdAQDcFJ3CQECdVMFCQClCAEFA3JzcgIHZGVwb3NpdAUEdXNlcgAACQEBLQEFA2FtdAMJAAACBQNwUncFA3BSdwQBZQkBC2Vuc3VyZUxpbWl0BAIGcmVkZWVtBQNyc3IFBHVzZXIFA2FtdAMJAAACBQFlBQFlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEId2l0aGRyYXcCB2Fzc2V0SWQDYW10BAR1c2VyCQClCAEIBQFpBmNhbGxlcgQBcgkBCXJlc2VydmVCeQIFBGFJZFMFB2Fzc2V0SWQEBnJlc3VsdAkBBWFzSW50AQkBCndkSW50ZXJuYWwEBQR1c2VyBQFyBQNhbXQCC3dpdGhkcmF3Rm9yAwkAAAIFBnJlc3VsdAUGcmVzdWx0BANicHUJAQVhc0ludAEJAQ12YWxpZGF0ZUFmdGVyAgUEdXNlcgILd2l0aGRyYXdpbmcDCQAAAgUDYnB1BQNicHUEAnBjCQESZW5zdXJlTm9Qcm9oaWJpdGVkAwUEdXNlcgUDYnB1CQClCAEFAXIDCQAAAgUCcGMFAnBjCQCUCgIFA25pbAUGcmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCXdpdGhkcmF3MgIDcnNyA2FtdAQEdXNlcgkApQgBCAUBaQZjYWxsZXIEAnNoCQECc1IBBQNyc3IDCQAAAgUCc2gFAnNoBAdyc3JBZGRyCQEDdmxSAQUDcnNyBAZhY3R1YWwJAQVhc0ludAEJAPwHBAUHcnNyQWRkcgILd2l0aGRyYXdGb3IJAMwIAgUEdXNlcgkAzAgCBQNhbXQFA25pbAUDbmlsAwkAAAIFBmFjdHVhbAUGYWN0dWFsBANwUncJAQJ1UwUFA3JzcgIHZGVwb3NpdAUEdXNlcgkBAS0BBQZhY3R1YWwJAQEtAQUGYWN0dWFsAwkAAAIFA3BSdwUDcFJ3BANicHUDCQEIY29udGFpbnMCBQtsaXF1aWRhdG9ycwUEdXNlcgAABAFlCQELZW5zdXJlTGltaXQEAgh3aXRoZHJhdwUHcnNyQWRkcgUEdXNlcgUGYWN0dWFsAwkAAAIFAWUFAWUJAQVhc0ludAEJAQ12YWxpZGF0ZUFmdGVyAgUEdXNlcgIMd2l0aGRyYXdpbmcyCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAJwYwkBEmVuc3VyZU5vUHJvaGliaXRlZAMFBHVzZXIFA2JwdQUDcnNyAwkAAAIFAnBjBQJwYwkAlAoCBQNuaWwFBmFjdHVhbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARFwcm90ZWN0Q29sbGF0ZXJhbAEDcnNyBAR1c2VyCQClCAEIBQFpBmNhbGxlcgQBcgkBA3ZsUgEFA3JzcgQDYW10CQEFYXNJbnQBCQEKd2RJbnRlcm5hbAQFBHVzZXIFAXIA////////////AQIOd2l0aGRyYXdUb01haW4DCQAAAgUDYW10BQNhbXQEB2Fzc2V0SWQJAQxhc3NldFN0clRvSWQBCQERQGV4dHJOYXRpdmUoMTA1MykCBQFyBQRhSWRTBAFwCQD8BwQFEHByb3RlY3RlZFJlc2VydmUCCXN1cHBseUZvcgkAzAgCBQR1c2VyBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFB2Fzc2V0SWQFA2FtdAUDbmlsAwkAAAIFAXAFAXAEAnBjCQESZW5zdXJlTm9Qcm9oaWJpdGVkAwUEdXNlcggJAQl1c2VyUG93ZXIBBQR1c2VyAl8yBQNyc3IDCQAAAgUCcGMFAnBjCQCUCgIFA25pbAUDYW10CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBG3dpdGhkcmF3UHJvdGVjdGVkQ29sbGF0ZXJhbAIHYXNzZXRJZANhbXQEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAFhCQEFYXNJbnQBCQD8BwQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgUQcHJvdGVjdGVkUmVzZXJ2ZQITbm8gcHJvdGVjdGVkUmVzZXJ2ZQILd2l0aGRyYXdGb3IJAMwIAgUEdXNlcgkAzAgCBQdhc3NldElkCQDMCAIFA2FtdAUDbmlsBQNuaWwDCQAAAgUBYQUBYQQCdmEJAQ12YWxpZGF0ZUFmdGVyAgUEdXNlcgIVd2l0aGRyYXdpbmcgcHJvdGVjdGVkAwkAAAIFAnZhBQJ2YQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBE25vcm1hbGl6ZUNvbGxhdGVyYWwBA3JzcgQEYWRkcgkApQgBCAUBaQZjYWxsZXIEAnJBCQEDdmxSAQUDcnNyAwkAAAIFAnJBBQJyQQQCc2gJAQJzUgEFA3JzcgMJAAACBQJzaAUCc2gECmFzc2V0SWRTdHIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQJyQQUEYUlkUwkArAICAhNubyBhc3NldElkIGluIHJzdjogBQNyc3IEAm1jCQEObW92ZUNvbGxhdGVyYWwEBQRhZGRyBQphc3NldElkU3RyBQJyQQUDcnNyAwkAAAIFAm1jBQJtYwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBmJvcnJvdwIHYXNzZXRJZANhbXQEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBANyc3IJAQlyZXNlcnZlQnkCBQRhSWRTBQdhc3NldElkBAJzaAkBAnNSAQkApQgBBQNyc3IDCQAAAgUCc2gFAnNoBAFhCQD8BwQFA3JzcgIJYm9ycm93Rm9yCQDMCAIFBHVzZXIJAMwIAgUDYW10BQNuaWwFA25pbAMJAAACBQFhBQFhBANwUncJAQJ1UwUJAKUIAQUDcnNyAgZib3Jyb3cFBHVzZXIFA2FtdAUDYW10AwkAAAIFA3BSdwUDcFJ3BAFlCQELZW5zdXJlTGltaXQEAgZib3Jyb3cFA3JzcgUEdXNlcgUDYW10AwkAAAIFAWUFAWUEA2JwdQkBBWFzSW50AQkBDXZhbGlkYXRlQWZ0ZXICBQR1c2VyAglib3Jyb3dpbmcDCQAAAgUDYnB1BQNicHUEAnBjCQEdZW5zdXJlTm9Qcm9oaWJpdGVkQ29sbGF0ZXJhbHMBBQR1c2VyAwkAAAIFAnBjBQJwYwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBB2JvcnJvdzICA3JzcgNhbXQEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAFyCQEDdmxSAQUDcnNyBAJzaAkBAnNSAQUDcnNyAwkAAAIFAnNoBQJzaAQBYQkA/AcEBQFyAglib3Jyb3dGb3IJAMwIAgUEdXNlcgkAzAgCBQNhbXQFA25pbAUDbmlsAwkAAAIFAWEFAWEEA3BSdwkBAnVTBQUDcnNyAgZib3Jyb3cFBHVzZXIFA2FtdAUDYW10AwkAAAIFA3BSdwUDcFJ3BAFlCQELZW5zdXJlTGltaXQEAgZib3Jyb3cFAXIFBHVzZXIFA2FtdAMJAAACBQFlBQFlBANicHUJAQVhc0ludAEJAQ12YWxpZGF0ZUFmdGVyAgUEdXNlcgIJYm9ycm93aW5nAwkAAAIFA2JwdQUDYnB1BAJwYwkBHWVuc3VyZU5vUHJvaGliaXRlZENvbGxhdGVyYWxzAQUEdXNlcgMJAAACBQJwYwUCcGMFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQhjb2xsYXBzZQIDcnNyA2FtdAQEdXNlcgkApQgBCAUBaQZjYWxsZXIEAnNoCQECc1IBBQNyc3IDCQAAAgUCc2gFAnNoBAFjCQEFYXNJbnQBCQD8BwQJAQN2bFIBBQNyc3ICEWNvbGxhcHNlRm9yQW1vdW50CQDMCAIFBHVzZXIJAMwIAgUDYW10BQNuaWwFA25pbAMJAAACBQFjBQFjBANwUncJAQJ1UwUFA3JzcgIGYm9ycm93BQR1c2VyCQEBLQEFAWMJAQEtAQUBYwMJAAACBQNwUncFA3BSdwQEcFJ3MgkBAnVTBQUDcnNyAgdkZXBvc2l0BQR1c2VyCQEBLQEFAWMJAQEtAQUBYwMJAAACBQRwUncyBQRwUncyBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEOY2xhaW1FYlJld2FyZDICA2FtdARsb2NrBAR1c2VyCQClCAEIBQFpBmNhbGxlcgQBYwkBBWFzSW50AQkA/AcEBQNlYlICEGNsYWltRWJSZXdhcmRGb3IJAMwIAgUEdXNlcgkAzAgCBQNhbXQFA25pbAUDbmlsAwkAAAIFAWMFAWMJAQxsb2NrT3JQYXlvdXQDCAUBaQZjYWxsZXIFAWMFBGxvY2sJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMY2xhaW1SZXdhcmQyAwNyc3IDYW10BGxvY2sEAXYJAQN2bFIBBQNyc3IDCQAAAgUBdgUBdgQEdXNlcgkApQgBCAUBaQZjYWxsZXIEAWMJAQVhc0ludAEJAPwHBAUCVkQCDmNsYWltUmV3YXJkRm9yCQDMCAIFA3JzcgkAzAgCBQR1c2VyCQDMCAIFA2FtdAUDbmlsBQNuaWwDCQAAAgUBYwUBYwkBDGxvY2tPclBheW91dAMIBQFpBmNhbGxlcgUBYwUEbG9jawkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpASFjbGFpbUFsbFJld2FyZHNBbmRBbGxFYkF2YWlsYWJsZTICBGxvY2sNdW5zdGFrZUxlZ2FjeQQEdXNlcgkApQgBCAUBaQZjYWxsZXIEAmNyCQEWY2xhaW1BbGxSZXdhcmRzRm9yVXNlcgEFBHVzZXIDCQAAAgUCY3IFAmNyBARjckxwCQEYY2xhaW1BbGxMcFJld2FyZHNGb3JVc2VyAQUEdXNlcgMJAAACBQRjckxwBQRjckxwBAJsQQMFDXVuc3Rha2VMZWdhY3kJAQVhc0ludAEJAPwHBAUCdlMCE3Vuc3Rha2VBbGxWaXJlc0Zyb20JAMwIAgUEdXNlcgUDbmlsBQNuaWwAAAMJAAACBQJsQQUCbEEJAQxsb2NrT3JQYXlvdXQDCAUBaQZjYWxsZXIJAGQCCQBkAgUCY3IFBGNyTHAFAmxBBQRsb2NrCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFmRpc2FibGVVc2VBc0NvbGxhdGVyYWwBA3JzcgQEdXNlcgkApQgBCAUBaQZjYWxsZXIEAWQJAPwHBAkBA3ZsUgEFA3JzcgIZZGlzYWJsZVVzZUFzQ29sbGF0ZXJhbEZvcgkAzAgCBQR1c2VyBQNuaWwFA25pbAMJAAACBQFkBQFkBAJ2YQkBDXZhbGlkYXRlQWZ0ZXICBQR1c2VyAhpjaGFuZ2luZyBjb2xsYXRlcmFsIHN0YXR1cwMJAAACBQJ2YQUCdmEFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQlsb2NrVmlyZXMCBmZhY3RvcgdtaWdyYXRlBAR1c2VyCQClCAEIBQFpBmNhbGxlcgQBYQkBBHNwZnIAAwkAAAIFAWEFAWEEDW1pZ3JhdGVBbW91bnQDBQdtaWdyYXRlCQEFYXNJbnQBCQD8BwQFAnZTAhN1bnN0YWtlQWxsVmlyZXNGcm9tCQDMCAIFBHVzZXIFA25pbAUDbmlsAAAEBXRvdGFsCQBkAgUNbWlncmF0ZUFtb3VudAkBDHZpcmVzUGF5bWVudAEFAWkEAWwJAPwHBAUCZEMCB2xvY2tGb3IJAMwIAgUEdXNlcgkAzAgCBQZmYWN0b3IFA25pbAMJAAACBQV0b3RhbAAABQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFDHZpcmVzQXNzZXRJZAUFdG90YWwFA25pbAMJAAACBQFsBQFsBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEYd2l0aGRyYXdBbGxQb3NzaWJsZVZpcmVzAAQEdXNlcgkApQgBCAUBaQZjYWxsZXIEAWEJAQRzcGZyAAMJAAACBQFhBQFhBBFzdGFrZXJWaXJlc0Ftb3VudAkBBWFzSW50AQkA/AcEBQJ2UwITdW5zdGFrZUFsbFZpcmVzRnJvbQkAzAgCBQR1c2VyBQNuaWwFA25pbAMJAAACBRFzdGFrZXJWaXJlc0Ftb3VudAURc3Rha2VyVmlyZXNBbW91bnQEAXUJAPwHBAUCZEMCE3dpdGhkcmF3VW5sb2NrZWRGb3IJAMwIAgUEdXNlcgUDbmlsBQNuaWwDCQAAAgUBdQUBdQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFEXN0YWtlclZpcmVzQW1vdW50BQx2aXJlc0Fzc2V0SWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARdjbGFpbVByb3RvY29sUHJvZml0RnJvbQIEZnJvbQZyZWxvY2sEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAFhCQEEc3BmcgADCQAAAgUBYQUBYQQBdQkA/AcEBQJkQwILY2xhaW1Qcm9maXQJAMwIAgUEZnJvbQkAzAgCBQR1c2VyCQDMCAIFBnJlbG9jawUDbmlsBQNuaWwDCQAAAgUBdQUBdQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFXdpdGhkcmF3VW5sb2NrZWRWaXJlcwAEAWEJAQRzcGZyAAMJAAACBQFhBQFhBAF1CQD8BwQFAmRDAhN3aXRoZHJhd1VubG9ja2VkRm9yCQDMCAIJAKUIAQgFAWkGY2FsbGVyBQNuaWwFA25pbAMJAAACBQF1BQF1BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKbG9ja1N1cHBseQIHcmVzZXJ2ZQZwZXJpb2QEA3JzcgkBA3ZsUgEFB3Jlc2VydmUEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAZjaGVja3MJARFlbnN1cmVOb1Byb3RlY3RlZAEFBHVzZXIDCQAAAgUGY2hlY2tzBQZjaGVja3MECGFUb2tlbklkCQEFdmFsdWUBCQEMYXNzZXRTdHJUb0lkAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFA3JzcgIIYVRva2VuSWQCFm5vIGFUb2tlbklkIGluIHJlc2VydmUECW1pZ3JhdGlvbgMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAAFBHVuaXQDCQAAAggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQhhVG9rZW5JZAUEdW5pdAMJAAACCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQJAQxhc3NldFN0clRvSWQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUDcnNyAgdhc3NldElkAhVubyBhc3NldElkIGluIHJlc2VydmUEAnNoCQECc1IBBQdyZXNlcnZlAwkAAAIFAnNoBQJzaAQGYWN0aW9uCQD8BwQFA3JzcgIKZGVwb3NpdEZvcgkAzAgCBQR1c2VyCQDMCAIGBQNuaWwIBQFpCHBheW1lbnRzAwkAAAIFBmFjdGlvbgUGYWN0aW9uBANhbXQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BANwUncJAQJ1UwUFB3Jlc2VydmUCB2RlcG9zaXQFBHVzZXIFA2FtdAUDYW10AwkAAAIFA3BSdwUDcFJ3BQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQISYmFkIGFzc2V0IGF0dGFjaGVkAwkAAAIFCW1pZ3JhdGlvbgUJbWlncmF0aW9uBARtaW50BAJzaAkBAnNSAQUHcmVzZXJ2ZQMJAAACBQJzaAUCc2gEBmFjdHVhbAkBBWFzSW50AQkA/AcEBQNyc3ICD21pbnRBdG9rZW5Gb3JUbwkAzAgCBQR1c2VyCQDMCAIA////////////AQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAAIFBmFjdHVhbAUGYWN0dWFsBANwUncJAQJ1UwUJAKUIAQUDcnNyAgdkZXBvc2l0BQR1c2VyCQEBLQEFBmFjdHVhbAAAAwkAAAIFA3BSdwUDcFJ3BAJ2YQkBDXZhbGlkYXRlQWZ0ZXICBQR1c2VyAgxsb2NrLW1pbnRpbmcDCQAAAgUCdmEFAnZhBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUEbWludAUEbWludAQHYmFsYW5jZQkA8AcCBQR0aGlzBQhhVG9rZW5JZAQBcgkA/AcEBQZsb2NrZXICBmxvY2tMUAkAzAgCBQR1c2VyCQDMCAIFBnBlcmlvZAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQhhVG9rZW5JZAUHYmFsYW5jZQUDbmlsAwkAAAIFAXIFAXIJAJQKAgUDbmlsBQdiYWxhbmNlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAHfL0ls=", "chainId": 87, "height": 3192173, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BqiakJKL8mHw7XyCPpd8FQwPShrfEKHY1qgDUNRF3KZC Next: FZniNb4zdWo1D1PGgUXqTsHnkPeXJG7fehrtyDx9UHac Diff:
OldNewDifferences
1-{-# STDLIB_VERSION 5 #-}
1+{-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let factorsBase = 1000
2727 case int: Int =>
2828 int
2929 case _ =>
30- throw("1")
30+ throw("m:1")
3131 }
3232
3333
6161
6262 let reservesStr = valueOrErrorMessage(getString(configAddress, "primary_reserves"), "no reserves registered")
6363
64-let reserves = split(reservesStr, "|")
64+let reserves = split_4C(reservesStr, "|")
6565
6666 let ebR = addressFromStringValue(valueOrErrorMessage(getString(configAddress, "eb_rewards"), "no eb_rewards"))
6767
135135
136136 func $f0_2 ($a,$i) = if (($i >= $s))
137137 then $a
138- else throw("List size exceeds 7")
138+ else throw("List size exceeds 20")
139139
140- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7) {
140+ $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) {
141141 case found: Address =>
142142 found
143143 case _ =>
162162 }
163163
164164 let protectedReserve = valueOrErrorMessage(maybeProtected, "no protected rsr")
165+
166+let prohibitedCollateralReserves = match getString(configAddress, "prohibitedCollateralReserves") {
167+ case s: String =>
168+ split(s, "|")
169+ case _ =>
170+ nil
171+}
172+
173+func ensureNoProhibitedCollaterals (user) = {
174+ func foldFunc (a,prohibitedReserve) = {
175+ let atb = valueOrElse(getInteger(addressFromStringValue(prohibitedReserve), (user + "_aTokenBalance")), 0)
176+ if ((atb > 0))
177+ then throw((((("operation denied: user has deposit in " + prohibitedReserve) + ": ") + toString(atb)) + "(lp tokens)"))
178+ else true
179+ }
180+
181+ let $l = prohibitedCollateralReserves
182+ let $s = size($l)
183+ let $acc0 = true
184+ func $f0_1 ($a,$i) = if (($i >= $s))
185+ then $a
186+ else foldFunc($a, $l[$i])
187+
188+ func $f0_2 ($a,$i) = if (($i >= $s))
189+ then $a
190+ else throw("List size exceeds 15")
191+
192+ $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)
193+ }
194+
195+
196+func ensureNoProhibited (user,bpu,reserve) = if (if ((bpu == 0))
197+ then true
198+ else isDefined(indexOf(prohibitedCollateralReserves, reserve)))
199+ then true
200+ else ensureNoProhibitedCollaterals(user)
201+
165202
166203 func ensureNoProtected (user) = {
167204 let has = match maybeProtected {
192229 0
193230 }
194231 func fold (totals,r) = {
195- let $t052465292 = totals
196- let totalD = $t052465292._1
197- let totalB = $t052465292._2
198- let numberOfBorrows = $t052465292._3
232+ let $t087958841 = totals
233+ let totalD = $t087958841._1
234+ let totalB = $t087958841._2
235+ let numberOfBorrows = $t087958841._3
199236 let rsr = valueOrErrorMessage(addressFromString(r), "rsr bad address")
200237 let cf = collateralFactor(rsr)
201238 let lt = liquidationThreshold(rsr)
202- let $t054465530 = userBalance(rsr, user)
203- let token = $t054465530._1
204- let asset = $t054465530._2
205- let depositUsd = $t054465530._3
206- let debt = $t054465530._4
207- let debtUsd = $t054465530._5
208- let asCollateral = $t054465530._6
239+ let $t089959079 = userBalance(rsr, user)
240+ let token = $t089959079._1
241+ let asset = $t089959079._2
242+ let depositUsd = $t089959079._3
243+ let debt = $t089959079._4
244+ let debtUsd = $t089959079._5
245+ let asCollateral = $t089959079._6
209246 let totalBorrows = (numberOfBorrows + (if ((debt > 0))
210247 then 1
211248 else 0))
229266
230267 func $f0_2 ($a,$i) = if (($i >= $s))
231268 then $a
232- else throw("List size exceeds 7")
269+ else throw("List size exceeds 20")
233270
234- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7)
271+ $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)
235272 }
236273 if (if ((protectedDeposit > 0))
237274 then (r._3 > 2)
242279
243280
244281 func getUserHealth (account) = {
245- let $t062846335 = asInt3(userPower(account))
246- let bp = $t062846335._1
247- let bpu = $t062846335._2
248- let ignore = $t062846335._3
282+ let $t098349885 = asInt3(userPower(account))
283+ let bp = $t098349885._1
284+ let bpu = $t098349885._2
285+ let ignore = $t098349885._3
249286 ((("bp:" + toString(bp)) + ", bpu:") + toString(bpu))
250287 }
251288
252289
253290 func validateAfter (user,op) = {
254- let $t064466477 = userPower(user)
255- let bp = $t064466477._1
256- let bpu = $t064466477._2
291+ let $t0999710028 = userPower(user)
292+ let bp = $t0999710028._1
293+ let bpu = $t0999710028._2
257294 let accHealth = (((bp - bpu) * factorsBase) / bp)
258295 if (if ((bp == 0))
259296 then (bpu == 0)
260297 else false)
261- then nil
298+ then 0
262299 else if (if ((bp == 0))
263300 then (bpu > 0)
264301 else false)
265302 then throw(((op + ": breaching liquidation threshold(bp=0, bpu=") + toString(bpu)))
266303 else if ((accountHealthThreshold > accHealth))
267304 then throw((((((((op + ": breaching liquidation threshold(bp=") + toString(bp)) + ", bpu=") + toString(bpu)) + ", health=") + toString(accHealth)) + ")"))
268- else nil
305+ else bpu
269306 }
270307
271308
317354 let amt = i.payments[0].amount
318355 let pRw = uS(rsr, "deposit", user, amt, amt)
319356 if ((pRw == pRw))
320- then if (!(asCol))
321- then validateAfter(user, "depositing")
322- else nil
357+ then {
358+ let va = if (!(asCol))
359+ then validateAfter(user, "depositing")
360+ else 0
361+ if ((va == va))
362+ then nil
363+ else throw("Strict value is not equal to itself.")
364+ }
323365 else throw("Strict value is not equal to itself.")
324366 }
325367 else throw("Strict value is not equal to itself.")
330372 }
331373
332374
375+let rewardReserves = split_4C(valueOrErrorMessage(getString(configAddress, "rewardable_reserves"), "no string"), "|")
376+
333377 func claimAllRewardsForUser (user) = {
334378 let claimedEb = asInt(invoke(ebR, "claimEbRewardFor", [user, -1], nil))
335379 if ((claimedEb == claimedEb))
336380 then {
337- let rewardReserves = split(valueOrErrorMessage(getString(configAddress, "rewardable_reserves"), "no string"), "|")
338381 func fold (acc,rsr) = {
339382 let claimed = asInt(invoke(VD, "claimRewardFor", [rsr, user, -1], nil))
340383 if ((claimed == claimed))
352395
353396 func $f0_2 ($a,$i) = if (($i >= $s))
354397 then $a
355- else throw("List size exceeds 7")
398+ else throw("List size exceeds 20")
356399
357- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7)
400+ $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)
358401 }
359402 (claimedTotal + claimedEb)
360403 }
363406
364407
365408 func claimAllLpRewardsForUser (user) = {
366- let rewardReserves = split(valueOrErrorMessage(getString(configAddress, "rewardable_reserves"), "no string"), "|")
367409 func fold (acc,rsr) = {
368410 let aTokenId = valueOrErrorMessage(getString(addressFromStringValue(rsr), aTIdS), "no aTokenId in reserve")
369411 let claimed = asInt(invoke(locker, "claimLpRewardFor", [user, aTokenId, -1], nil))
382424
383425 func $f0_2 ($a,$i) = if (($i >= $s))
384426 then $a
385- else throw("List size exceeds 7")
427+ else throw("List size exceeds 20")
386428
387- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7)
429+ $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)
388430 }
389431 claimedTotal
390432 }
485527 then {
486528 let pRw = uS(toString(t), "deposit", user, -(actual), 0)
487529 if ((pRw == pRw))
488- then validateAfter(user, "minting")
530+ then {
531+ let bpu = asInt(validateAfter(user, "minting"))
532+ if ((bpu == bpu))
533+ then {
534+ let pc = ensureNoProhibited(user, bpu, toString(t))
535+ if ((pc == pc))
536+ then nil
537+ else throw("Strict value is not equal to itself.")
538+ }
539+ else throw("Strict value is not equal to itself.")
540+ }
489541 else throw("Strict value is not equal to itself.")
490542 }
491543 else throw("Strict value is not equal to itself.")
594646 @Callable(i)
595647 func withdraw (assetId,amt) = {
596648 let user = toString(i.caller)
597- let result = asInt(wdInternal(user, reserveBy(aIdS, assetId), amt, "withdrawFor"))
649+ let r = reserveBy(aIdS, assetId)
650+ let result = asInt(wdInternal(user, r, amt, "withdrawFor"))
598651 if ((result == result))
599- then $Tuple2(validateAfter(user, "withdrawing"), result)
652+ then {
653+ let bpu = asInt(validateAfter(user, "withdrawing"))
654+ if ((bpu == bpu))
655+ then {
656+ let pc = ensureNoProhibited(user, bpu, toString(r))
657+ if ((pc == pc))
658+ then $Tuple2(nil, result)
659+ else throw("Strict value is not equal to itself.")
660+ }
661+ else throw("Strict value is not equal to itself.")
662+ }
600663 else throw("Strict value is not equal to itself.")
601664 }
602665
615678 let pRw = uS(rsr, "deposit", user, -(actual), -(actual))
616679 if ((pRw == pRw))
617680 then {
618- let e = ensureLimit("withdraw", rsrAddr, user, actual)
619- if ((e == e))
620- then if (contains(liquidators, user))
621- then nil
622- else validateAfter(user, "withdrawing2")
681+ let bpu = if (contains(liquidators, user))
682+ then 0
683+ else {
684+ let e = ensureLimit("withdraw", rsrAddr, user, actual)
685+ if ((e == e))
686+ then asInt(validateAfter(user, "withdrawing2"))
687+ else throw("Strict value is not equal to itself.")
688+ }
689+ let pc = ensureNoProhibited(user, bpu, rsr)
690+ if ((pc == pc))
691+ then $Tuple2(nil, actual)
623692 else throw("Strict value is not equal to itself.")
624693 }
625694 else throw("Strict value is not equal to itself.")
641710 let assetId = assetStrToId(getStringValue(r, aIdS))
642711 let p = invoke(protectedReserve, "supplyFor", [user], [AttachedPayment(assetId, amt)])
643712 if ((p == p))
644- then $Tuple2(nil, amt)
713+ then {
714+ let pc = ensureNoProhibited(user, userPower(user)._2, rsr)
715+ if ((pc == pc))
716+ then $Tuple2(nil, amt)
717+ else throw("Strict value is not equal to itself.")
718+ }
645719 else throw("Strict value is not equal to itself.")
646720 }
647721 else throw("Strict value is not equal to itself.")
654728 let user = toString(i.caller)
655729 let a = asInt(invoke(valueOrErrorMessage(protectedReserve, "no protectedReserve"), "withdrawFor", [user, assetId, amt], nil))
656730 if ((a == a))
657- then validateAfter(user, "withdrawing protected")
731+ then {
732+ let va = validateAfter(user, "withdrawing protected")
733+ if ((va == va))
734+ then nil
735+ else throw("Strict value is not equal to itself.")
736+ }
658737 else throw("Strict value is not equal to itself.")
659738 }
660739
697776 then {
698777 let e = ensureLimit("borrow", rsr, user, amt)
699778 if ((e == e))
700- then validateAfter(user, "borrowing")
779+ then {
780+ let bpu = asInt(validateAfter(user, "borrowing"))
781+ if ((bpu == bpu))
782+ then {
783+ let pc = ensureNoProhibitedCollaterals(user)
784+ if ((pc == pc))
785+ then nil
786+ else throw("Strict value is not equal to itself.")
787+ }
788+ else throw("Strict value is not equal to itself.")
789+ }
701790 else throw("Strict value is not equal to itself.")
702791 }
703792 else throw("Strict value is not equal to itself.")
724813 then {
725814 let e = ensureLimit("borrow", r, user, amt)
726815 if ((e == e))
727- then validateAfter(user, "borrowing")
816+ then {
817+ let bpu = asInt(validateAfter(user, "borrowing"))
818+ if ((bpu == bpu))
819+ then {
820+ let pc = ensureNoProhibitedCollaterals(user)
821+ if ((pc == pc))
822+ then nil
823+ else throw("Strict value is not equal to itself.")
824+ }
825+ else throw("Strict value is not equal to itself.")
826+ }
728827 else throw("Strict value is not equal to itself.")
729828 }
730829 else throw("Strict value is not equal to itself.")
817916 let user = toString(i.caller)
818917 let d = invoke(vlR(rsr), "disableUseAsCollateralFor", [user], nil)
819918 if ((d == d))
820- then validateAfter(user, "changing collateral status")
919+ then {
920+ let va = validateAfter(user, "changing collateral status")
921+ if ((va == va))
922+ then nil
923+ else throw("Strict value is not equal to itself.")
924+ }
821925 else throw("Strict value is not equal to itself.")
822926 }
823927
9391043 then {
9401044 let pRw = uS(toString(rsr), "deposit", user, -(actual), 0)
9411045 if ((pRw == pRw))
942- then validateAfter(user, "lock-minting")
1046+ then {
1047+ let va = validateAfter(user, "lock-minting")
1048+ if ((va == va))
1049+ then nil
1050+ else throw("Strict value is not equal to itself.")
1051+ }
9431052 else throw("Strict value is not equal to itself.")
9441053 }
9451054 else throw("Strict value is not equal to itself.")
Full:
OldNewDifferences
1-{-# STDLIB_VERSION 5 #-}
1+{-# 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 assetStrToId (assetId) = if ((assetId == "WAVES"))
1717 then unit
1818 else fromBase58String(assetId)
1919
2020
2121 func writeConstString (key,value) = if (!(isDefined(getString(this, key))))
2222 then StringEntry(key, value)
2323 else throw(("already initialized: " + key))
2424
2525
2626 func asInt (value) = match value {
2727 case int: Int =>
2828 int
2929 case _ =>
30- throw("1")
30+ throw("m:1")
3131 }
3232
3333
3434 func asInt3 (value) = match value {
3535 case x: (Int, Int, Int) =>
3636 x
3737 case t =>
3838 throw("2")
3939 }
4040
4141
4242 func asUserBalanceData (value) = match value {
4343 case x: (Int, Int, Int, Int, Int, Boolean) =>
4444 x
4545 case t =>
4646 throw("3")
4747 }
4848
4949
5050 let configStore = "config"
5151
5252 let reservesStore = "reserves"
5353
5454 let aTIdS = "aTokenId"
5555
5656 let aIdS = "assetId"
5757
5858 let configAddress = addressFromStringValue(getStringValue(this, configStore))
5959
6060 let locker = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "lp_locker"), "no lp_locker address in config")), "bad lp_locker address in config")
6161
6262 let reservesStr = valueOrErrorMessage(getString(configAddress, "primary_reserves"), "no reserves registered")
6363
64-let reserves = split(reservesStr, "|")
64+let reserves = split_4C(reservesStr, "|")
6565
6666 let ebR = addressFromStringValue(valueOrErrorMessage(getString(configAddress, "eb_rewards"), "no eb_rewards"))
6767
6868 let viresMinter = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "vires_minter"), "main: no viresMinter")), "bad minter")
6969
7070 let maybevS = getString(configAddress, "vires_staker")
7171
7272 let vS = addressFromStringValue(valueOrErrorMessage(maybevS, "no vires_staker"))
7373
7474 let dC = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "dividends_contract"), "no dividends_contract")), "bad div")
7575
7676 let mVD = match getString(configAddress, "vires_distributor") {
7777 case d: String =>
7878 addressFromStringValue(d)
7979 case _ =>
8080 unit
8181 }
8282
8383 let VD = valueOrErrorMessage(mVD, "no distr")
8484
8585 let limiter = match getString(configAddress, "limiter") {
8686 case d: String =>
8787 addressFromStringValue(d)
8888 case _ =>
8989 unit
9090 }
9191
9292 let maybeViresAssetId = getString(viresMinter, aIdS)
9393
9494 let viresAssetId = valueOrErrorMessage(fromBase58String(valueOrErrorMessage(maybeViresAssetId, "no vires id")), "invalid vires id")
9595
9696 func viresPayment (i) = if ((size(i.payments) == 0))
9797 then 0
9898 else if ((i.payments[0].assetId != viresAssetId))
9999 then throw("not vires")
100100 else i.payments[0].amount
101101
102102
103103 func assetIdOfReserve (rsr) = valueOrErrorMessage(getString(rsr, aIdS), "no assetId in rsr")
104104
105105
106106 func collateralFactor (rsr) = valueOrErrorMessage(getInteger(configAddress, (assetIdOfReserve(rsr) + "_CollateralFactor")), "no 1")
107107
108108
109109 func liquidationThreshold (rsr) = valueOrErrorMessage(getInteger(configAddress, (assetIdOfReserve(rsr) + "_LiquidationThreshold")), "no 2")
110110
111111
112112 let accountHealthThreshold = valueOrErrorMessage(getInteger(configAddress, "account_health_threshold"), "no 4")
113113
114114 let accountHealthOverlap = valueOrErrorMessage(getInteger(configAddress, "account_health_overlap"), "no 5")
115115
116116 let liquidators = valueOrElse(getString(configAddress, "liquidators"), "")
117117
118118 func reserveBy (store,value) = {
119119 func fold (a,r) = match a {
120120 case found: Address =>
121121 found
122122 case _ =>
123123 let rsr = valueOrErrorMessage(addressFromString(r), "rsr bad address")
124124 if ((valueOrErrorMessage(getString(rsr, store), ("rsr has no " + store)) == value))
125125 then rsr
126126 else unit
127127 }
128128
129129 match let $l = reserves
130130 let $s = size($l)
131131 let $acc0 = unit
132132 func $f0_1 ($a,$i) = if (($i >= $s))
133133 then $a
134134 else fold($a, $l[$i])
135135
136136 func $f0_2 ($a,$i) = if (($i >= $s))
137137 then $a
138- else throw("List size exceeds 7")
138+ else throw("List size exceeds 20")
139139
140- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7) {
140+ $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) {
141141 case found: Address =>
142142 found
143143 case _ =>
144144 throw(("unknown " + store))
145145 }
146146 }
147147
148148
149149 func vlR (r) = if (contains(reservesStr, r))
150150 then valueOrErrorMessage(addressFromString(r), "main: bad rsr")
151151 else throw(("unknown rsr:" + r))
152152
153153
154154 func userBalance (rsr,user) = asUserBalanceData(invoke(rsr, "userBalance", [user], nil))
155155
156156
157157 let maybeProtected = match getString(configAddress, "protected_reserve") {
158158 case pds: String =>
159159 valueOrErrorMessage(addressFromString(pds), "bad protected")
160160 case _ =>
161161 unit
162162 }
163163
164164 let protectedReserve = valueOrErrorMessage(maybeProtected, "no protected rsr")
165+
166+let prohibitedCollateralReserves = match getString(configAddress, "prohibitedCollateralReserves") {
167+ case s: String =>
168+ split(s, "|")
169+ case _ =>
170+ nil
171+}
172+
173+func ensureNoProhibitedCollaterals (user) = {
174+ func foldFunc (a,prohibitedReserve) = {
175+ let atb = valueOrElse(getInteger(addressFromStringValue(prohibitedReserve), (user + "_aTokenBalance")), 0)
176+ if ((atb > 0))
177+ then throw((((("operation denied: user has deposit in " + prohibitedReserve) + ": ") + toString(atb)) + "(lp tokens)"))
178+ else true
179+ }
180+
181+ let $l = prohibitedCollateralReserves
182+ let $s = size($l)
183+ let $acc0 = true
184+ func $f0_1 ($a,$i) = if (($i >= $s))
185+ then $a
186+ else foldFunc($a, $l[$i])
187+
188+ func $f0_2 ($a,$i) = if (($i >= $s))
189+ then $a
190+ else throw("List size exceeds 15")
191+
192+ $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)
193+ }
194+
195+
196+func ensureNoProhibited (user,bpu,reserve) = if (if ((bpu == 0))
197+ then true
198+ else isDefined(indexOf(prohibitedCollateralReserves, reserve)))
199+ then true
200+ else ensureNoProhibitedCollaterals(user)
201+
165202
166203 func ensureNoProtected (user) = {
167204 let has = match maybeProtected {
168205 case pa: Address =>
169206 valueOrElse(getBoolean(pa, ("protected_collateral_" + user)), false)
170207 case _ =>
171208 false
172209 }
173210 if (has)
174211 then throw("disallowed")
175212 else unit
176213 }
177214
178215
179216 func ensureLimit (action,rsr,user,amount) = match limiter {
180217 case l: Address =>
181218 asInt(invoke(l, "validateLimit", [action, toString(rsr), user, amount], nil))
182219 case _ =>
183220 true
184221 }
185222
186223
187224 func userPower (user) = {
188225 let protectedDeposit = match maybeProtected {
189226 case pa: Address =>
190227 asInt(invoke(pa, "borrowPower", [user], nil))
191228 case _ =>
192229 0
193230 }
194231 func fold (totals,r) = {
195- let $t052465292 = totals
196- let totalD = $t052465292._1
197- let totalB = $t052465292._2
198- let numberOfBorrows = $t052465292._3
232+ let $t087958841 = totals
233+ let totalD = $t087958841._1
234+ let totalB = $t087958841._2
235+ let numberOfBorrows = $t087958841._3
199236 let rsr = valueOrErrorMessage(addressFromString(r), "rsr bad address")
200237 let cf = collateralFactor(rsr)
201238 let lt = liquidationThreshold(rsr)
202- let $t054465530 = userBalance(rsr, user)
203- let token = $t054465530._1
204- let asset = $t054465530._2
205- let depositUsd = $t054465530._3
206- let debt = $t054465530._4
207- let debtUsd = $t054465530._5
208- let asCollateral = $t054465530._6
239+ let $t089959079 = userBalance(rsr, user)
240+ let token = $t089959079._1
241+ let asset = $t089959079._2
242+ let depositUsd = $t089959079._3
243+ let debt = $t089959079._4
244+ let debtUsd = $t089959079._5
245+ let asCollateral = $t089959079._6
209246 let totalBorrows = (numberOfBorrows + (if ((debt > 0))
210247 then 1
211248 else 0))
212249 let effectiveDepositUsd = if (asCollateral)
213250 then depositUsd
214251 else 0
215252 let overlapUsd = min([debtUsd, effectiveDepositUsd])
216253 let overlapCharge = fCi(overlapUsd, accountHealthOverlap, factorsBase)
217254 if ((debtUsd > effectiveDepositUsd))
218255 then $Tuple3(totalD, ((totalB + fraction((debtUsd - effectiveDepositUsd), factorsBase, lt)) + overlapCharge), totalBorrows)
219256 else $Tuple3((totalD + fraction((effectiveDepositUsd - debtUsd), cf, factorsBase)), (totalB + overlapCharge), totalBorrows)
220257 }
221258
222259 let r = {
223260 let $l = reserves
224261 let $s = size($l)
225262 let $acc0 = $Tuple3(protectedDeposit, 0, 0)
226263 func $f0_1 ($a,$i) = if (($i >= $s))
227264 then $a
228265 else fold($a, $l[$i])
229266
230267 func $f0_2 ($a,$i) = if (($i >= $s))
231268 then $a
232- else throw("List size exceeds 7")
269+ else throw("List size exceeds 20")
233270
234- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7)
271+ $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)
235272 }
236273 if (if ((protectedDeposit > 0))
237274 then (r._3 > 2)
238275 else false)
239276 then throw("can't have more than 2 borrows")
240277 else r
241278 }
242279
243280
244281 func getUserHealth (account) = {
245- let $t062846335 = asInt3(userPower(account))
246- let bp = $t062846335._1
247- let bpu = $t062846335._2
248- let ignore = $t062846335._3
282+ let $t098349885 = asInt3(userPower(account))
283+ let bp = $t098349885._1
284+ let bpu = $t098349885._2
285+ let ignore = $t098349885._3
249286 ((("bp:" + toString(bp)) + ", bpu:") + toString(bpu))
250287 }
251288
252289
253290 func validateAfter (user,op) = {
254- let $t064466477 = userPower(user)
255- let bp = $t064466477._1
256- let bpu = $t064466477._2
291+ let $t0999710028 = userPower(user)
292+ let bp = $t0999710028._1
293+ let bpu = $t0999710028._2
257294 let accHealth = (((bp - bpu) * factorsBase) / bp)
258295 if (if ((bp == 0))
259296 then (bpu == 0)
260297 else false)
261- then nil
298+ then 0
262299 else if (if ((bp == 0))
263300 then (bpu > 0)
264301 else false)
265302 then throw(((op + ": breaching liquidation threshold(bp=0, bpu=") + toString(bpu)))
266303 else if ((accountHealthThreshold > accHealth))
267304 then throw((((((((op + ": breaching liquidation threshold(bp=") + toString(bp)) + ", bpu=") + toString(bpu)) + ", health=") + toString(accHealth)) + ")"))
268- else nil
305+ else bpu
269306 }
270307
271308
272309 func uS (rsr,action,user,userChange,streamChange) = match mVD {
273310 case a: Address =>
274311 invoke(a, "onAction", [rsr, action, user, userChange, streamChange], nil)
275312 case _ =>
276313 unit
277314 }
278315
279316
280317 func moveStream (rsr,action,from,string,amt) = match mVD {
281318 case a: Address =>
282319 invoke(a, "move", [rsr, action, from, string, amt], nil)
283320 case _ =>
284321 unit
285322 }
286323
287324
288325 func sR (rsr) = match mVD {
289326 case a: Address =>
290327 invoke(a, "syncHeight", [rsr], nil)
291328 case _ =>
292329 unit
293330 }
294331
295332
296333 func lockOrPayout (recipient,amt,lock) = if (!(lock))
297334 then [ScriptTransfer(recipient, amt, viresAssetId)]
298335 else {
299336 let doLock = invoke(dC, "lockFor", [toString(recipient), 1], [AttachedPayment(viresAssetId, amt)])
300337 if ((doLock == doLock))
301338 then nil
302339 else throw("Strict value is not equal to itself.")
303340 }
304341
305342
306343 func doDeposit (i,rsr,asCol) = {
307344 let user = toString(i.caller)
308345 let checks = ensureNoProtected(user)
309346 if ((checks == checks))
310347 then {
311348 let sh = sR(rsr)
312349 if ((sh == sh))
313350 then {
314351 let action = invoke(vlR(rsr), "depositFor", [user, asCol], i.payments)
315352 if ((action == action))
316353 then {
317354 let amt = i.payments[0].amount
318355 let pRw = uS(rsr, "deposit", user, amt, amt)
319356 if ((pRw == pRw))
320- then if (!(asCol))
321- then validateAfter(user, "depositing")
322- else nil
357+ then {
358+ let va = if (!(asCol))
359+ then validateAfter(user, "depositing")
360+ else 0
361+ if ((va == va))
362+ then nil
363+ else throw("Strict value is not equal to itself.")
364+ }
323365 else throw("Strict value is not equal to itself.")
324366 }
325367 else throw("Strict value is not equal to itself.")
326368 }
327369 else throw("Strict value is not equal to itself.")
328370 }
329371 else throw("Strict value is not equal to itself.")
330372 }
331373
332374
375+let rewardReserves = split_4C(valueOrErrorMessage(getString(configAddress, "rewardable_reserves"), "no string"), "|")
376+
333377 func claimAllRewardsForUser (user) = {
334378 let claimedEb = asInt(invoke(ebR, "claimEbRewardFor", [user, -1], nil))
335379 if ((claimedEb == claimedEb))
336380 then {
337- let rewardReserves = split(valueOrErrorMessage(getString(configAddress, "rewardable_reserves"), "no string"), "|")
338381 func fold (acc,rsr) = {
339382 let claimed = asInt(invoke(VD, "claimRewardFor", [rsr, user, -1], nil))
340383 if ((claimed == claimed))
341384 then (acc + claimed)
342385 else throw("Strict value is not equal to itself.")
343386 }
344387
345388 let claimedTotal = {
346389 let $l = rewardReserves
347390 let $s = size($l)
348391 let $acc0 = 0
349392 func $f0_1 ($a,$i) = if (($i >= $s))
350393 then $a
351394 else fold($a, $l[$i])
352395
353396 func $f0_2 ($a,$i) = if (($i >= $s))
354397 then $a
355- else throw("List size exceeds 7")
398+ else throw("List size exceeds 20")
356399
357- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7)
400+ $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)
358401 }
359402 (claimedTotal + claimedEb)
360403 }
361404 else throw("Strict value is not equal to itself.")
362405 }
363406
364407
365408 func claimAllLpRewardsForUser (user) = {
366- let rewardReserves = split(valueOrErrorMessage(getString(configAddress, "rewardable_reserves"), "no string"), "|")
367409 func fold (acc,rsr) = {
368410 let aTokenId = valueOrErrorMessage(getString(addressFromStringValue(rsr), aTIdS), "no aTokenId in reserve")
369411 let claimed = asInt(invoke(locker, "claimLpRewardFor", [user, aTokenId, -1], nil))
370412 if ((claimed == claimed))
371413 then (acc + claimed)
372414 else throw("Strict value is not equal to itself.")
373415 }
374416
375417 let claimedTotal = {
376418 let $l = rewardReserves
377419 let $s = size($l)
378420 let $acc0 = 0
379421 func $f0_1 ($a,$i) = if (($i >= $s))
380422 then $a
381423 else fold($a, $l[$i])
382424
383425 func $f0_2 ($a,$i) = if (($i >= $s))
384426 then $a
385- else throw("List size exceeds 7")
427+ else throw("List size exceeds 20")
386428
387- $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7)
429+ $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)
388430 }
389431 claimedTotal
390432 }
391433
392434
393435 func moveCollateral (addr,assetStr,rsr,reserveStr) = {
394436 let amt = asInt(invoke(protectedReserve, "withdrawToMain", [addr, assetStr], nil))
395437 if ((amt == amt))
396438 then {
397439 let assetId = if ((assetStr == "WAVES"))
398440 then unit
399441 else fromBase58String(assetStr)
400442 let dep = invoke(rsr, "depositFor", [addr, true], [AttachedPayment(assetId, amt)])
401443 if ((dep == dep))
402444 then {
403445 let prop = uS(reserveStr, "deposit", addr, amt, amt)
404446 if ((prop == prop))
405447 then unit
406448 else throw("Strict value is not equal to itself.")
407449 }
408450 else throw("Strict value is not equal to itself.")
409451 }
410452 else throw("Strict value is not equal to itself.")
411453 }
412454
413455
414456 func spfr () = invoke(dC, "shareProfitFromReserves", nil, nil)
415457
416458
417459 func wdInternal (user,rsr,amt,op) = {
418460 let sh = sR(toString(rsr))
419461 if ((sh == sh))
420462 then {
421463 let withdrawnAmount = asInt(invoke(rsr, op, [user, amt], nil))
422464 if ((withdrawnAmount == withdrawnAmount))
423465 then {
424466 let pRw = uS(toString(rsr), "deposit", user, -(withdrawnAmount), -(withdrawnAmount))
425467 if ((pRw == pRw))
426468 then {
427469 let e = ensureLimit("withdraw", rsr, user, withdrawnAmount)
428470 if ((e == e))
429471 then withdrawnAmount
430472 else throw("Strict value is not equal to itself.")
431473 }
432474 else throw("Strict value is not equal to itself.")
433475 }
434476 else throw("Strict value is not equal to itself.")
435477 }
436478 else throw("Strict value is not equal to itself.")
437479 }
438480
439481
440482 @Callable(i)
441483 func initialize (ca) = [writeConstString(configStore, ca)]
442484
443485
444486
445487 @Callable(i)
446488 func deposit (rsr,asCol) = doDeposit(i, rsr, asCol)
447489
448490
449491
450492 @Callable(i)
451493 func depositRef (rsr,asCol,ref) = doDeposit(i, rsr, asCol)
452494
453495
454496
455497 @Callable(i)
456498 func repay (rsr) = {
457499 let user = toString(i.caller)
458500 let sh = sR(rsr)
459501 if ((sh == sh))
460502 then {
461503 let repaid = asInt(invoke(vlR(rsr), "repayFor", [user], i.payments))
462504 if ((repaid == repaid))
463505 then {
464506 let pRw = uS(rsr, "borrow", user, -(repaid), -(repaid))
465507 if ((pRw == pRw))
466508 then nil
467509 else throw("Strict value is not equal to itself.")
468510 }
469511 else throw("Strict value is not equal to itself.")
470512 }
471513 else throw("Strict value is not equal to itself.")
472514 }
473515
474516
475517
476518 @Callable(i)
477519 func mintAtoken (aTokenId,amt) = {
478520 let user = toString(i.caller)
479521 let t = reserveBy(aTIdS, aTokenId)
480522 let sh = sR(toString(t))
481523 if ((sh == sh))
482524 then {
483525 let actual = asInt(invoke(t, "mintAtokenFor", [user, amt], nil))
484526 if ((actual == actual))
485527 then {
486528 let pRw = uS(toString(t), "deposit", user, -(actual), 0)
487529 if ((pRw == pRw))
488- then validateAfter(user, "minting")
530+ then {
531+ let bpu = asInt(validateAfter(user, "minting"))
532+ if ((bpu == bpu))
533+ then {
534+ let pc = ensureNoProhibited(user, bpu, toString(t))
535+ if ((pc == pc))
536+ then nil
537+ else throw("Strict value is not equal to itself.")
538+ }
539+ else throw("Strict value is not equal to itself.")
540+ }
489541 else throw("Strict value is not equal to itself.")
490542 }
491543 else throw("Strict value is not equal to itself.")
492544 }
493545 else throw("Strict value is not equal to itself.")
494546 }
495547
496548
497549
498550 @Callable(i)
499551 func replenishWithAtoken () = {
500552 let user = toString(i.caller)
501553 let checks = ensureNoProtected(user)
502554 if ((checks == checks))
503555 then {
504556 let aTokenId = toBase58String(valueOrErrorMessage(i.payments[0].assetId, "bad assetId(w)"))
505557 let rsr = reserveBy(aTIdS, aTokenId)
506558 let sh = sR(toString(rsr))
507559 if ((sh == sh))
508560 then {
509561 let amt = asInt(invoke(rsr, "replenishWithAtokenFor", [user], i.payments))
510562 if ((amt == amt))
511563 then {
512564 let pRw = uS(toString(rsr), "deposit", user, amt, 0)
513565 if ((pRw == pRw))
514566 then {
515567 let e = ensureLimit("import", rsr, user, amt)
516568 if ((e == e))
517569 then nil
518570 else throw("Strict value is not equal to itself.")
519571 }
520572 else throw("Strict value is not equal to itself.")
521573 }
522574 else throw("Strict value is not equal to itself.")
523575 }
524576 else throw("Strict value is not equal to itself.")
525577 }
526578 else throw("Strict value is not equal to itself.")
527579 }
528580
529581
530582
531583 @Callable(i)
532584 func repayWithAtoken () = {
533585 let user = toString(i.caller)
534586 let aTokenId = toBase58String(valueOrErrorMessage(i.payments[0].assetId, "bad assetId: waves not allowed"))
535587 let t = reserveBy(aTIdS, aTokenId)
536588 let sh = sR(toString(t))
537589 if ((sh == sh))
538590 then {
539591 let amt = asInt(invoke(t, "replenishForRepayWithAtokenFor", [user], i.payments))
540592 if ((amt == amt))
541593 then {
542594 let c = asInt(invoke(t, "collapseForAmount", [user, amt], nil))
543595 if ((c == c))
544596 then if ((amt > c))
545597 then throw("repaying too much")
546598 else {
547599 let pRw = uS(toString(t), "borrow", user, -(c), -(c))
548600 if ((pRw == pRw))
549601 then {
550602 let pRw2 = uS(toString(t), "deposit", user, (amt - c), -(c))
551603 if ((pRw2 == pRw2))
552604 then nil
553605 else throw("Strict value is not equal to itself.")
554606 }
555607 else throw("Strict value is not equal to itself.")
556608 }
557609 else throw("Strict value is not equal to itself.")
558610 }
559611 else throw("Strict value is not equal to itself.")
560612 }
561613 else throw("Strict value is not equal to itself.")
562614 }
563615
564616
565617
566618 @Callable(i)
567619 func redeemAtokens () = {
568620 let user = toString(i.caller)
569621 let aTokenId = toBase58String(valueOrErrorMessage(i.payments[0].assetId, "bad assetId: WAVES"))
570622 let rsr = reserveBy(aTIdS, aTokenId)
571623 let sh = sR(toString(rsr))
572624 if ((sh == sh))
573625 then {
574626 let amt = asInt(invoke(rsr, "redeemAtokensFor", [user], i.payments))
575627 if ((amt == amt))
576628 then {
577629 let pRw = uS(toString(rsr), "deposit", user, 0, -(amt))
578630 if ((pRw == pRw))
579631 then {
580632 let e = ensureLimit("redeem", rsr, user, amt)
581633 if ((e == e))
582634 then nil
583635 else throw("Strict value is not equal to itself.")
584636 }
585637 else throw("Strict value is not equal to itself.")
586638 }
587639 else throw("Strict value is not equal to itself.")
588640 }
589641 else throw("Strict value is not equal to itself.")
590642 }
591643
592644
593645
594646 @Callable(i)
595647 func withdraw (assetId,amt) = {
596648 let user = toString(i.caller)
597- let result = asInt(wdInternal(user, reserveBy(aIdS, assetId), amt, "withdrawFor"))
649+ let r = reserveBy(aIdS, assetId)
650+ let result = asInt(wdInternal(user, r, amt, "withdrawFor"))
598651 if ((result == result))
599- then $Tuple2(validateAfter(user, "withdrawing"), result)
652+ then {
653+ let bpu = asInt(validateAfter(user, "withdrawing"))
654+ if ((bpu == bpu))
655+ then {
656+ let pc = ensureNoProhibited(user, bpu, toString(r))
657+ if ((pc == pc))
658+ then $Tuple2(nil, result)
659+ else throw("Strict value is not equal to itself.")
660+ }
661+ else throw("Strict value is not equal to itself.")
662+ }
600663 else throw("Strict value is not equal to itself.")
601664 }
602665
603666
604667
605668 @Callable(i)
606669 func withdraw2 (rsr,amt) = {
607670 let user = toString(i.caller)
608671 let sh = sR(rsr)
609672 if ((sh == sh))
610673 then {
611674 let rsrAddr = vlR(rsr)
612675 let actual = asInt(invoke(rsrAddr, "withdrawFor", [user, amt], nil))
613676 if ((actual == actual))
614677 then {
615678 let pRw = uS(rsr, "deposit", user, -(actual), -(actual))
616679 if ((pRw == pRw))
617680 then {
618- let e = ensureLimit("withdraw", rsrAddr, user, actual)
619- if ((e == e))
620- then if (contains(liquidators, user))
621- then nil
622- else validateAfter(user, "withdrawing2")
681+ let bpu = if (contains(liquidators, user))
682+ then 0
683+ else {
684+ let e = ensureLimit("withdraw", rsrAddr, user, actual)
685+ if ((e == e))
686+ then asInt(validateAfter(user, "withdrawing2"))
687+ else throw("Strict value is not equal to itself.")
688+ }
689+ let pc = ensureNoProhibited(user, bpu, rsr)
690+ if ((pc == pc))
691+ then $Tuple2(nil, actual)
623692 else throw("Strict value is not equal to itself.")
624693 }
625694 else throw("Strict value is not equal to itself.")
626695 }
627696 else throw("Strict value is not equal to itself.")
628697 }
629698 else throw("Strict value is not equal to itself.")
630699 }
631700
632701
633702
634703 @Callable(i)
635704 func protectCollateral (rsr) = {
636705 let user = toString(i.caller)
637706 let r = vlR(rsr)
638707 let amt = asInt(wdInternal(user, r, -1, "withdrawToMain"))
639708 if ((amt == amt))
640709 then {
641710 let assetId = assetStrToId(getStringValue(r, aIdS))
642711 let p = invoke(protectedReserve, "supplyFor", [user], [AttachedPayment(assetId, amt)])
643712 if ((p == p))
644- then $Tuple2(nil, amt)
713+ then {
714+ let pc = ensureNoProhibited(user, userPower(user)._2, rsr)
715+ if ((pc == pc))
716+ then $Tuple2(nil, amt)
717+ else throw("Strict value is not equal to itself.")
718+ }
645719 else throw("Strict value is not equal to itself.")
646720 }
647721 else throw("Strict value is not equal to itself.")
648722 }
649723
650724
651725
652726 @Callable(i)
653727 func withdrawProtectedCollateral (assetId,amt) = {
654728 let user = toString(i.caller)
655729 let a = asInt(invoke(valueOrErrorMessage(protectedReserve, "no protectedReserve"), "withdrawFor", [user, assetId, amt], nil))
656730 if ((a == a))
657- then validateAfter(user, "withdrawing protected")
731+ then {
732+ let va = validateAfter(user, "withdrawing protected")
733+ if ((va == va))
734+ then nil
735+ else throw("Strict value is not equal to itself.")
736+ }
658737 else throw("Strict value is not equal to itself.")
659738 }
660739
661740
662741
663742 @Callable(i)
664743 func normalizeCollateral (rsr) = {
665744 let addr = toString(i.caller)
666745 let rA = vlR(rsr)
667746 if ((rA == rA))
668747 then {
669748 let sh = sR(rsr)
670749 if ((sh == sh))
671750 then {
672751 let assetIdStr = valueOrErrorMessage(getString(rA, aIdS), ("no assetId in rsv: " + rsr))
673752 let mc = moveCollateral(addr, assetIdStr, rA, rsr)
674753 if ((mc == mc))
675754 then nil
676755 else throw("Strict value is not equal to itself.")
677756 }
678757 else throw("Strict value is not equal to itself.")
679758 }
680759 else throw("Strict value is not equal to itself.")
681760 }
682761
683762
684763
685764 @Callable(i)
686765 func borrow (assetId,amt) = {
687766 let user = toString(i.caller)
688767 let rsr = reserveBy(aIdS, assetId)
689768 let sh = sR(toString(rsr))
690769 if ((sh == sh))
691770 then {
692771 let a = invoke(rsr, "borrowFor", [user, amt], nil)
693772 if ((a == a))
694773 then {
695774 let pRw = uS(toString(rsr), "borrow", user, amt, amt)
696775 if ((pRw == pRw))
697776 then {
698777 let e = ensureLimit("borrow", rsr, user, amt)
699778 if ((e == e))
700- then validateAfter(user, "borrowing")
779+ then {
780+ let bpu = asInt(validateAfter(user, "borrowing"))
781+ if ((bpu == bpu))
782+ then {
783+ let pc = ensureNoProhibitedCollaterals(user)
784+ if ((pc == pc))
785+ then nil
786+ else throw("Strict value is not equal to itself.")
787+ }
788+ else throw("Strict value is not equal to itself.")
789+ }
701790 else throw("Strict value is not equal to itself.")
702791 }
703792 else throw("Strict value is not equal to itself.")
704793 }
705794 else throw("Strict value is not equal to itself.")
706795 }
707796 else throw("Strict value is not equal to itself.")
708797 }
709798
710799
711800
712801 @Callable(i)
713802 func borrow2 (rsr,amt) = {
714803 let user = toString(i.caller)
715804 let r = vlR(rsr)
716805 let sh = sR(rsr)
717806 if ((sh == sh))
718807 then {
719808 let a = invoke(r, "borrowFor", [user, amt], nil)
720809 if ((a == a))
721810 then {
722811 let pRw = uS(rsr, "borrow", user, amt, amt)
723812 if ((pRw == pRw))
724813 then {
725814 let e = ensureLimit("borrow", r, user, amt)
726815 if ((e == e))
727- then validateAfter(user, "borrowing")
816+ then {
817+ let bpu = asInt(validateAfter(user, "borrowing"))
818+ if ((bpu == bpu))
819+ then {
820+ let pc = ensureNoProhibitedCollaterals(user)
821+ if ((pc == pc))
822+ then nil
823+ else throw("Strict value is not equal to itself.")
824+ }
825+ else throw("Strict value is not equal to itself.")
826+ }
728827 else throw("Strict value is not equal to itself.")
729828 }
730829 else throw("Strict value is not equal to itself.")
731830 }
732831 else throw("Strict value is not equal to itself.")
733832 }
734833 else throw("Strict value is not equal to itself.")
735834 }
736835
737836
738837
739838 @Callable(i)
740839 func collapse (rsr,amt) = {
741840 let user = toString(i.caller)
742841 let sh = sR(rsr)
743842 if ((sh == sh))
744843 then {
745844 let c = asInt(invoke(vlR(rsr), "collapseForAmount", [user, amt], nil))
746845 if ((c == c))
747846 then {
748847 let pRw = uS(rsr, "borrow", user, -(c), -(c))
749848 if ((pRw == pRw))
750849 then {
751850 let pRw2 = uS(rsr, "deposit", user, -(c), -(c))
752851 if ((pRw2 == pRw2))
753852 then nil
754853 else throw("Strict value is not equal to itself.")
755854 }
756855 else throw("Strict value is not equal to itself.")
757856 }
758857 else throw("Strict value is not equal to itself.")
759858 }
760859 else throw("Strict value is not equal to itself.")
761860 }
762861
763862
764863
765864 @Callable(i)
766865 func claimEbReward2 (amt,lock) = {
767866 let user = toString(i.caller)
768867 let c = asInt(invoke(ebR, "claimEbRewardFor", [user, amt], nil))
769868 if ((c == c))
770869 then lockOrPayout(i.caller, c, lock)
771870 else throw("Strict value is not equal to itself.")
772871 }
773872
774873
775874
776875 @Callable(i)
777876 func claimReward2 (rsr,amt,lock) = {
778877 let v = vlR(rsr)
779878 if ((v == v))
780879 then {
781880 let user = toString(i.caller)
782881 let c = asInt(invoke(VD, "claimRewardFor", [rsr, user, amt], nil))
783882 if ((c == c))
784883 then lockOrPayout(i.caller, c, lock)
785884 else throw("Strict value is not equal to itself.")
786885 }
787886 else throw("Strict value is not equal to itself.")
788887 }
789888
790889
791890
792891 @Callable(i)
793892 func claimAllRewardsAndAllEbAvailable2 (lock,unstakeLegacy) = {
794893 let user = toString(i.caller)
795894 let cr = claimAllRewardsForUser(user)
796895 if ((cr == cr))
797896 then {
798897 let crLp = claimAllLpRewardsForUser(user)
799898 if ((crLp == crLp))
800899 then {
801900 let lA = if (unstakeLegacy)
802901 then asInt(invoke(vS, "unstakeAllViresFrom", [user], nil))
803902 else 0
804903 if ((lA == lA))
805904 then lockOrPayout(i.caller, ((cr + crLp) + lA), lock)
806905 else throw("Strict value is not equal to itself.")
807906 }
808907 else throw("Strict value is not equal to itself.")
809908 }
810909 else throw("Strict value is not equal to itself.")
811910 }
812911
813912
814913
815914 @Callable(i)
816915 func disableUseAsCollateral (rsr) = {
817916 let user = toString(i.caller)
818917 let d = invoke(vlR(rsr), "disableUseAsCollateralFor", [user], nil)
819918 if ((d == d))
820- then validateAfter(user, "changing collateral status")
919+ then {
920+ let va = validateAfter(user, "changing collateral status")
921+ if ((va == va))
922+ then nil
923+ else throw("Strict value is not equal to itself.")
924+ }
821925 else throw("Strict value is not equal to itself.")
822926 }
823927
824928
825929
826930 @Callable(i)
827931 func lockVires (factor,migrate) = {
828932 let user = toString(i.caller)
829933 let a = spfr()
830934 if ((a == a))
831935 then {
832936 let migrateAmount = if (migrate)
833937 then asInt(invoke(vS, "unstakeAllViresFrom", [user], nil))
834938 else 0
835939 let total = (migrateAmount + viresPayment(i))
836940 let l = invoke(dC, "lockFor", [user, factor], if ((total == 0))
837941 then nil
838942 else [AttachedPayment(viresAssetId, total)])
839943 if ((l == l))
840944 then nil
841945 else throw("Strict value is not equal to itself.")
842946 }
843947 else throw("Strict value is not equal to itself.")
844948 }
845949
846950
847951
848952 @Callable(i)
849953 func withdrawAllPossibleVires () = {
850954 let user = toString(i.caller)
851955 let a = spfr()
852956 if ((a == a))
853957 then {
854958 let stakerViresAmount = asInt(invoke(vS, "unstakeAllViresFrom", [user], nil))
855959 if ((stakerViresAmount == stakerViresAmount))
856960 then {
857961 let u = invoke(dC, "withdrawUnlockedFor", [user], nil)
858962 if ((u == u))
859963 then [ScriptTransfer(i.caller, stakerViresAmount, viresAssetId)]
860964 else throw("Strict value is not equal to itself.")
861965 }
862966 else throw("Strict value is not equal to itself.")
863967 }
864968 else throw("Strict value is not equal to itself.")
865969 }
866970
867971
868972
869973 @Callable(i)
870974 func claimProtocolProfitFrom (from,relock) = {
871975 let user = toString(i.caller)
872976 let a = spfr()
873977 if ((a == a))
874978 then {
875979 let u = invoke(dC, "claimProfit", [from, user, relock], nil)
876980 if ((u == u))
877981 then nil
878982 else throw("Strict value is not equal to itself.")
879983 }
880984 else throw("Strict value is not equal to itself.")
881985 }
882986
883987
884988
885989 @Callable(i)
886990 func withdrawUnlockedVires () = {
887991 let a = spfr()
888992 if ((a == a))
889993 then {
890994 let u = invoke(dC, "withdrawUnlockedFor", [toString(i.caller)], nil)
891995 if ((u == u))
892996 then nil
893997 else throw("Strict value is not equal to itself.")
894998 }
895999 else throw("Strict value is not equal to itself.")
8961000 }
8971001
8981002
8991003
9001004 @Callable(i)
9011005 func lockSupply (reserve,period) = {
9021006 let rsr = vlR(reserve)
9031007 let user = toString(i.caller)
9041008 let checks = ensureNoProtected(user)
9051009 if ((checks == checks))
9061010 then {
9071011 let aTokenId = value(assetStrToId(valueOrErrorMessage(getString(rsr, "aTokenId"), "no aTokenId in reserve")))
9081012 let migration = if ((size(i.payments) == 0))
9091013 then unit
9101014 else if ((i.payments[0].assetId == aTokenId))
9111015 then unit
9121016 else if ((i.payments[0].assetId == assetStrToId(valueOrErrorMessage(getString(rsr, "assetId"), "no assetId in reserve"))))
9131017 then {
9141018 let sh = sR(reserve)
9151019 if ((sh == sh))
9161020 then {
9171021 let action = invoke(rsr, "depositFor", [user, true], i.payments)
9181022 if ((action == action))
9191023 then {
9201024 let amt = i.payments[0].amount
9211025 let pRw = uS(reserve, "deposit", user, amt, amt)
9221026 if ((pRw == pRw))
9231027 then unit
9241028 else throw("Strict value is not equal to itself.")
9251029 }
9261030 else throw("Strict value is not equal to itself.")
9271031 }
9281032 else throw("Strict value is not equal to itself.")
9291033 }
9301034 else throw("bad asset attached")
9311035 if ((migration == migration))
9321036 then {
9331037 let mint = {
9341038 let sh = sR(reserve)
9351039 if ((sh == sh))
9361040 then {
9371041 let actual = asInt(invoke(rsr, "mintAtokenForTo", [user, -1, toString(this)], nil))
9381042 if ((actual == actual))
9391043 then {
9401044 let pRw = uS(toString(rsr), "deposit", user, -(actual), 0)
9411045 if ((pRw == pRw))
942- then validateAfter(user, "lock-minting")
1046+ then {
1047+ let va = validateAfter(user, "lock-minting")
1048+ if ((va == va))
1049+ then nil
1050+ else throw("Strict value is not equal to itself.")
1051+ }
9431052 else throw("Strict value is not equal to itself.")
9441053 }
9451054 else throw("Strict value is not equal to itself.")
9461055 }
9471056 else throw("Strict value is not equal to itself.")
9481057 }
9491058 if ((mint == mint))
9501059 then {
9511060 let balance = assetBalance(this, aTokenId)
9521061 let r = invoke(locker, "lockLP", [user, period], [AttachedPayment(aTokenId, balance)])
9531062 if ((r == r))
9541063 then $Tuple2(nil, balance)
9551064 else throw("Strict value is not equal to itself.")
9561065 }
9571066 else throw("Strict value is not equal to itself.")
9581067 }
9591068 else throw("Strict value is not equal to itself.")
9601069 }
9611070 else throw("Strict value is not equal to itself.")
9621071 }
9631072
9641073

github/deemru/w8io/786bc32 
215.87 ms