tx · Dv6iKYXZjJ4oNaHdEsVUCRBtTfg1UUDxnfTarNfxp9mW

3N9be2mwrA52WJho6DiesZkk4351GvpnWuj:  -0.04700000 Waves

2023.08.31 15:40 [2734869] smart account 3N9be2mwrA52WJho6DiesZkk4351GvpnWuj > SELF 0.00000000 Waves

{ "type": 13, "id": "Dv6iKYXZjJ4oNaHdEsVUCRBtTfg1UUDxnfTarNfxp9mW", "fee": 4700000, "feeAssetId": null, "timestamp": 1693485679749, "version": 2, "chainId": 84, "sender": "3N9be2mwrA52WJho6DiesZkk4351GvpnWuj", "senderPublicKey": "6mzmbCza9iqbzxMEELcEA4Xc9NeF4CYpbTtz1zMK3C7x", "proofs": [ "51HitSzDRnNbsEhBkV2VtTeGgL24mNzJKRxFXcAFqmS4yfuvSHeVEppMAS9JjTTHAd8Zisi8gdNaL76zaNY5cd5w", "3sF6FtSEMyTDUWagsijRpjfrQmK7PQt7ieKfYU3Vaz6eAM8bZA5LQopDhY4mSJHWaMor1uYmTJ532ZR458BZeNFa", "4DPovZmZL2P23N6h4NxaFKvDcyUVaEZFDs45kkVmCSrQHvzmescHqSPYf7gBPJBs3wXLtfnRFT8HzXfCtqNqqGhy" ], "script": "base64:BgJwCAISDgoMCAgICAgIAQEBAQEBEgUKAwgIARIHCgUYAQEBARIAEgASAwoBCBIECgIIARIFCgMIAQgSAwoBARIECgIBCBIAEgUKAwgBARIECgIBARIECgIIARIHCgUIAQEICBIGCgQICAEBEgUKAwgBAcsBAQ9nZXRTdHJpbmdPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgIBLgkAzAgCBQNrZXkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAEFbGNhbGMBAWwJALkIAQUBbAEOZ2V0TnVtYmVyQnlLZXkBA2tleQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkAAAEOZ2V0U3RyaW5nQnlLZXkBA2tleQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQNrZXkCAAEMZ2V0Qm9vbEJ5S2V5AQNrZXkJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUDa2V5BwEYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AgdhZGRyZXNzA2tleQkBC3ZhbHVlT3JFbHNlAgkAmggCBQdhZGRyZXNzBQNrZXkAAAEYZ2V0U3RyaW5nQnlBZGRyZXNzQW5kS2V5AgdhZGRyZXNzA2tleQkBC3ZhbHVlT3JFbHNlAgkAnQgCCQERQGV4dHJOYXRpdmUoMTA2MikBBQdhZGRyZXNzBQNrZXkCAAEWZ2V0Qm9vbEJ5QWRkcmVzc0FuZEtleQIHYWRkcmVzcwNrZXkJAQt2YWx1ZU9yRWxzZQIJAJsIAgUHYWRkcmVzcwUDa2V5BwEJYXNBbnlMaXN0AQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACCUxpc3RbQW55XQQBbAUHJG1hdGNoMAUBbAkAAgECG2ZhaWwgdG8gY2FzdCBpbnRvIExpc3RbQW55XQEIYXNTdHJpbmcBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzCQACAQIYZmFpbCB0byBjYXN0IGludG8gU3RyaW5nAQVhc0ludAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgNJbnQEAWkFByRtYXRjaDAFAWkJAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBB2FzQnl0ZXMBA3ZhbAQHJG1hdGNoMAUDdmFsAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEB3ZhbEJ5dGUFByRtYXRjaDAFB3ZhbEJ5dGUJAAIBAhxmYWlsIHRvIGNhc3QgaW50byBCeXRlVmVjdG9yAQlhc1BheW1lbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIPQXR0YWNoZWRQYXltZW50BAFwBQckbWF0Y2gwBQFwCQACAQIhZmFpbCB0byBjYXN0IGludG8gQXR0YWNoZWRQYXltZW50AQZhc0Jvb2wBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBYgUHJG1hdGNoMAUBYgkAAgECGWZhaWwgdG8gY2FzdCBpbnRvIEJvb2xlYW4BEmFzU3dhcFBhcmFtc1NUUlVDVAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAiMoSW50LCBJbnQsIEludCwgSW50LCBJbnQsIEludCwgSW50KQQGc3RydWN0BQckbWF0Y2gwBQZzdHJ1Y3QJAAIBAh1mYWlsIHRvIGNhc3QgaW50byBUdXBsZTUgaW50cwERcmVtb3ZlRnJvbUxpc3RTdHIDB2xpc3RTdHIJc2VwYXJhdG9yC3N0clRvUmVtb3ZlBANhcnIJALUJAgUHbGlzdFN0cgUJc2VwYXJhdG9yBANpZHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQNhcnIFC3N0clRvUmVtb3ZlCQCsAgIJAKwCAgUHbGlzdFN0cgIRZG9lcyBub3QgY29udGFpbiAFC3N0clRvUmVtb3ZlCQC5CQIJANEIAgUDYXJyBQNpZHgFCXNlcGFyYXRvcgADU0VQAgJfXwAHTElTVFNFUAIBOgAFTVVMVDgAgMLXLwAFTVVMVDYAwIQ9AA5ERUZBVUxUU1dBUEZFRQCgnAEADkRFRkFVTFRCVVJORkVFAIgnAA1ERUZBVUxUTUFYRkVFAPCTCQALQlJQUk9URUNURUQAoI0GAAdXQVZFU0lEAQQTq9kzAAtFSUdIVF9IT1VSUwCA6N0NAA5URU5fUEVSQ0VOVF9YNgCgjQYACURBWU1JTExJUwCAuJkpAA9NQVhfREFJTFlfV0FWRVMAgKCUpY0dAA9NQVhfVE9UQUxfV0FWRVMAgMDf2o7pBgEYa2V5V2F2ZXNXaXRoZHJhd25MYXN0RGF5AAIXJXNfX3dhdmVzV2l0aGRyYXduVG9kYXkBFmtleVdhdmVzV2l0aGRyYXduVG90YWwAAhclc19fd2F2ZXNXaXRoZHJhd25Ub3RhbAEZa2V5TGFzdFdhdmVzV2l0aGRyYXdhbERheQACGiVzX19sYXN0V2F2ZXNXaXRoZHJhd2FsRGF5AA9uTWV0cmljSWR4UHJpY2UAAAAbbk1ldHJpY0lkeFVzZG5Mb2NrZWRCYWxhbmNlAAEAHG5NZXRyaWNJZHhXYXZlc0xvY2tlZEJhbGFuY2UAAgARbk1ldHJpY0lkeFJlc2VydmUAAwAXbk1ldHJpY0lkeFJlc2VydmVJblVzZG4ABAAUbk1ldHJpY0lkeFVzZG5TdXBwbHkABQARbk1ldHJpY0lkeFN1cnBsdXMABgAYbk1ldHJpY0lkeFN1cnBsdXNQZXJjZW50AAcADG5NZXRyaWNJZHhCUgAIABRuTWV0cmljSWR4TnNidFN1cHBseQAJABduTWV0cmljSWR4TWF4TnNidFN1cHBseQAKABRuTWV0cmljSWR4U3VyZlN1cHBseQALABJuTWV0cmljVXNkblVzZHRQZWcADAAWbk1ldHJpY0N1cnJlbnRQcmljZUFkagANABFuTWV0cmljQmFza2V0SW5mbwAOABRuTWV0cmljV2VpZ2h0ZWRQcmljZQAPABduTWV0cmljVG90YWxSZXNlcnZlc1VzZAAQABlJZHhDb250cm9sQ2ZnTmV1dHJpbm9EYXBwAAEAGElkeENvbnRyb2xDZmdBdWN0aW9uRGFwcAACABRJZHhDb250cm9sQ2ZnUnBkRGFwcAADABVJZHhDb250cm9sQ2ZnTWF0aERhcHAABAAcSWR4Q29udHJvbENmZ0xpcXVpZGF0aW9uRGFwcAAFABVJZHhDb250cm9sQ2ZnUmVzdERhcHAABgAdSWR4Q29udHJvbENmZ05vZGVSZWdpc3RyeURhcHAABwAcSWR4Q29udHJvbENmZ05zYnRTdGFraW5nRGFwcAAIABlJZHhDb250cm9sQ2ZnTWVkaWF0b3JEYXBwAAkAHElkeENvbnRyb2xDZmdTdXJmU3Rha2luZ0RhcHAACgAgSWR4Q29udHJvbENmZ0duc2J0Q29udHJvbGxlckRhcHAACwAXSWR4Q29udHJvbENmZ1Jlc3RWMkRhcHAADAAbSWR4Q29udHJvbENmZ0dvdmVybmFuY2VEYXBwAA0AF0lkeENvbnRyb2xDZmdGYWNhZGVEYXBwAA8BEWtleUNvbnRyb2xBZGRyZXNzAAIcJXMlc19fY29uZmlnX19jb250cm9sQWRkcmVzcwENa2V5Q29udHJvbENmZwACESVzX19jb250cm9sQ29uZmlnARRyZWFkQ29udHJvbENmZ09yRmFpbAEHY29udHJvbAkAvAkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUHY29udHJvbAkBDWtleUNvbnRyb2xDZmcABQNTRVABGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIKY29udHJvbENmZwNpZHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFCmNvbnRyb2xDZmcFA2lkeAkArAICAi1Db250cm9sIGNmZyBkb2Vzbid0IGNvbnRhaW4gYWRkcmVzcyBhdCBpbmRleCAJAKQDAQUDaWR4AA9jb250cm9sQ29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBEWtleUNvbnRyb2xBZGRyZXNzAAIjM040TlM3ZDRKbzlhNkYxNExpRlVLS1lWZFVra2YyZVA0WngACmNvbnRyb2xDZmcJARRyZWFkQ29udHJvbENmZ09yRmFpbAEFD2NvbnRyb2xDb250cmFjdAAMbWF0aENvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUKY29udHJvbENmZwUVSWR4Q29udHJvbENmZ01hdGhEYXBwABNuc2J0U3Rha2luZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUKY29udHJvbENmZwUcSWR4Q29udHJvbENmZ05zYnRTdGFraW5nRGFwcAATc3VyZlN0YWtpbmdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFCmNvbnRyb2xDZmcFHElkeENvbnRyb2xDZmdTdXJmU3Rha2luZ0RhcHAAF2duc2J0Q29udHJvbGxlckNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUKY29udHJvbENmZwUgSWR4Q29udHJvbENmZ0duc2J0Q29udHJvbGxlckRhcHAAD2F1Y3Rpb25Db250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFCmNvbnRyb2xDZmcFGElkeENvbnRyb2xDZmdBdWN0aW9uRGFwcAAUbm9kZVJlZ2lzdHJ5Q29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQpjb250cm9sQ2ZnBR1JZHhDb250cm9sQ2ZnTm9kZVJlZ2lzdHJ5RGFwcAALZ292Q29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQpjb250cm9sQ2ZnBRtJZHhDb250cm9sQ2ZnR292ZXJuYW5jZURhcHAAE3Bvb2xzRmFjYWRlQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQpjb250cm9sQ2ZnBRdJZHhDb250cm9sQ2ZnRmFjYWRlRGFwcAASTmV1dHJpbm9Bc3NldElkS2V5AhFuZXV0cmlub19hc3NldF9pZAAOQm9uZEFzc2V0SWRLZXkCDWJvbmRfYXNzZXRfaWQAEkF1Y3Rpb25Db250cmFjdEtleQIQYXVjdGlvbl9jb250cmFjdAAWTnNidFN0YWtpbmdDb250cmFjdEtleQITbnNidFN0YWtpbmdDb250cmFjdAAWTGlxdWlkYXRpb25Db250cmFjdEtleQIUbGlxdWlkYXRpb25fY29udHJhY3QADlJQRENvbnRyYWN0S2V5AgxycGRfY29udHJhY3QAEUNvbnRvbENvbnRyYWN0S2V5AhBjb250cm9sX2NvbnRyYWN0AA9NYXRoQ29udHJhY3RLZXkCDW1hdGhfY29udHJhY3QAG0JhbGFuY2VXYXZlc0xvY2tJbnRlcnZhbEtleQIbYmFsYW5jZV93YXZlc19sb2NrX2ludGVydmFsAB5CYWxhbmNlTmV1dHJpbm9Mb2NrSW50ZXJ2YWxLZXkCHmJhbGFuY2VfbmV1dHJpbm9fbG9ja19pbnRlcnZhbAEVTWluVG9rZW5Td2FwQW1vdW50S2V5AQdhc3NldElkCQCsAgICHG1pbl9vdXROZXV0cmlub19zd2FwX2Ftb3VudF8FB2Fzc2V0SWQAGE1pbk5ldXRyaW5vU3dhcEFtb3VudEtleQIYbWluX291dE11bHRpX3N3YXBfYW1vdW50AB5MZWdhY3lNaW5OZXV0cmlub1N3YXBBbW91bnRLZXkCGG1pbl9uZXV0cmlub19zd2FwX2Ftb3VudAAbTm9kZU9yYWNsZVByb3ZpZGVyUHViS2V5S2V5AhRub2RlX29yYWNsZV9wcm92aWRlcgAVTmV1dHJpbm9PdXRGZWVQYXJ0S2V5AhhuZXV0cmlub091dF9zd2FwX2ZlZVBhcnQAEldhdmVzT3V0RmVlUGFydEtleQIVd2F2ZXNPdXRfc3dhcF9mZWVQYXJ0ABNCYXNrZXRPdXRGZWVQYXJ0S2V5AhVtdWx0aU91dF9zd2FwX2ZlZVBhcnQBD2tleU5vZGVSZWdpc3RyeQEHYWRkcmVzcwkArAICAgQlc19fBQdhZGRyZXNzAAhQcmljZUtleQIFcHJpY2UADVByaWNlSW5kZXhLZXkCC3ByaWNlX2luZGV4AAxJc0Jsb2NrZWRLZXkCCmlzX2Jsb2NrZWQAEklzRGlzYWJsZWRJc3N1ZUtleQISeHRuX2lzc3VlX2Rpc2FibGVkARJnZXRQcmljZUhpc3RvcnlLZXkBBWJsb2NrCQCsAgIJAKwCAgUIUHJpY2VLZXkCAV8JAKQDAQUFYmxvY2sBGGdldEhlaWdodFByaWNlQnlJbmRleEtleQEFaW5kZXgJAKwCAgkArAICBQ1QcmljZUluZGV4S2V5AgFfCQCkAwEFBWluZGV4ARVnZXRTdGFraW5nTm9kZUJ5SW5kZXgBA2lkeAkBDmdldFN0cmluZ0J5S2V5AQkAuQkCCQDMCAICBiVzJWQlcwkAzAgCAgVsZWFzZQkAzAgCCQCkAwEFA2lkeAkAzAgCAgtub2RlQWRkcmVzcwUDbmlsBQNTRVABHGdldFN0YWtpbmdOb2RlQWRkcmVzc0J5SW5kZXgBA2lkeAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBFWdldFN0YWtpbmdOb2RlQnlJbmRleAEFA2lkeAEfZ2V0UmVzZXJ2ZWRBbW91bnRGb3JTcG9uc29yc2hpcAAJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkAuQkCCQDMCAICBCVzJXMJAMwIAgIFbGVhc2UJAMwIAgIXc3BvbnNvcnNoaXBXYXZlc1Jlc2VydmUFA25pbAUDU0VQCQBoAgDoBwUFTVVMVDgBGGdldEJhbGFuY2VVbmxvY2tCbG9ja0tleQEFb3duZXIJAKwCAgIVYmFsYW5jZV91bmxvY2tfYmxvY2tfBQVvd25lcgENZ2V0TGVhc2VJZEtleQEJbm9kZUluZGV4CQC5CQIJAMwIAgIGJXMlZCVzCQDMCAICBWxlYXNlCQDMCAIJAKQDAQUJbm9kZUluZGV4CQDMCAICAmlkBQNuaWwFA1NFUAEWZ2V0TGVhc2VJZEJ5QWRkcmVzc0tleQELbm9kZUFkZHJlc3MJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIObGVhc2VCeUFkZHJlc3MJAMwIAgULbm9kZUFkZHJlc3MJAMwIAgICaWQFA25pbAUDU0VQARFnZXRMZWFzZUFtb3VudEtleQEJbm9kZUluZGV4CQC5CQIJAMwIAgIGJXMlZCVzCQDMCAICBWxlYXNlCQDMCAIJAKQDAQUJbm9kZUluZGV4CQDMCAICBmFtb3VudAUDbmlsBQNTRVABGmdldExlYXNlQW1vdW50QnlBZGRyZXNzS2V5AQtub2RlQWRkcmVzcwkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAg5sZWFzZUJ5QWRkcmVzcwkAzAgCBQtub2RlQWRkcmVzcwkAzAgCAgZhbW91bnQFA25pbAUDU0VQARhnZXRMZWFzZUdyb3VwTm9kZUxpc3RLZXkBCGdyb3VwTnVtCQC5CQIJAMwIAgIGJXMlZCVzCQDMCAICCmxlYXNlR3JvdXAJAMwIAgkApAMBBQhncm91cE51bQkAzAgCAghub2RlTGlzdAUDbmlsBQNTRVABEG1pblN3YXBBbW91bnRLRVkBCHN3YXBUeXBlCQCsAgIJAKwCAgIEbWluXwUIc3dhcFR5cGUCDF9zd2FwX2Ftb3VudAEOdG90YWxMb2NrZWRLRVkCCHN3YXBUeXBlB2Fzc2V0SWQJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgILYmFsYW5jZUxvY2sJAMwIAgUIc3dhcFR5cGUJAMwIAgUHYXNzZXRJZAUDbmlsBQNTRVABFHRvdGFsTG9ja2VkQnlVc2VyS0VZAwhzd2FwVHlwZQVvd25lcgdhc3NldElkCQC5CQIJAMwIAgIIJXMlcyVzJXMJAMwIAgILYmFsYW5jZUxvY2sJAMwIAgUIc3dhcFR5cGUJAMwIAgUFb3duZXIJAMwIAgUHYXNzZXRJZAUDbmlsAgFfARZiYWxhbmNlTG9ja0ludGVydmFsS0VZAQhzd2FwVHlwZQMJAAACBQhzd2FwVHlwZQIIb3V0TXVsdGkFHkJhbGFuY2VOZXV0cmlub0xvY2tJbnRlcnZhbEtleQUbQmFsYW5jZVdhdmVzTG9ja0ludGVydmFsS2V5ARpub2RlQmFsYW5jZUxvY2tJbnRlcnZhbEtFWQACGmJhbGFuY2Vfbm9kZV9sb2NrX2ludGVydmFsARFzd2Fwc1RpbWVmcmFtZUtFWQACD3N3YXBzX3RpbWVmcmFtZQEOYnJQcm90ZWN0ZWRLRVkAAhdtaW5fQlJfcHJvdGVjdGlvbl9sZXZlbAEPYmFza2V0QXNzZXRzS2V5AAIaJXMlc19fY29tbW9uX19iYXNrZXRBc3NldHMBCmJhc2tldERLZXkAAhUlcyVzX19jb21tb25fX2Jhc2tldEQBCmJhc2tldEtLZXkAAhUlcyVzX19jb21tb25fX2Jhc2tldEsBCmJhc2tldEJLZXkAAhUlcyVzX19jb21tb25fX2Jhc2tldEIBEmJhc2tldExvZ2JEZWx0YUtleQACHSVzJXNfX2NvbW1vbl9fYmFza2V0TG9nYkRlbHRhARZiYXNrZXRXZWlnaHRCeUFzc2V0S2V5AQdhc3NldElkCQCsAgICHyVzJXMlc19fY29tbW9uX193ZWlnaHRCeUFzc2V0X18FB2Fzc2V0SWQBD2tleVByaWNlQnlBc3NldAEHYXNzZXRJZAkArAICAh4lcyVzJXNfX2NvbW1vbl9fcHJpY2VCeUFzc2V0X18FB2Fzc2V0SWQBCW1heEZlZUtleQACGyVzJXNfX2NvbW1vbl9fbWF4QWxsb3dlZEZlZQEPbXVsdGlPdXRGZWVSRUFEAAkBC3ZhbHVlT3JFbHNlAgkAnwgBBRNCYXNrZXRPdXRGZWVQYXJ0S2V5CQELdmFsdWVPckVsc2UCCQCfCAEFEldhdmVzT3V0RmVlUGFydEtleQUOREVGQVVMVEJVUk5GRUUBEHNpbmdsZU91dEZlZVJFQUQACQELdmFsdWVPckVsc2UCCQCfCAEFFU5ldXRyaW5vT3V0RmVlUGFydEtleQUOREVGQVVMVFNXQVBGRUUBEW1pblN3YXBBbW91bnRSRUFEAghzd2FwVHlwZQdhc3NldElkAwkAAAIFCHN3YXBUeXBlAghvdXRNdWx0aQkBC3ZhbHVlT3JFbHNlAgkAnwgBBRhNaW5OZXV0cmlub1N3YXBBbW91bnRLZXkJAQ5nZXROdW1iZXJCeUtleQEFHkxlZ2FjeU1pbk5ldXRyaW5vU3dhcEFtb3VudEtleQkBDmdldE51bWJlckJ5S2V5AQkBFU1pblRva2VuU3dhcEFtb3VudEtleQEFB2Fzc2V0SWQBEnN3YXBzVGltZWZyYW1lUkVBRAAJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBEXN3YXBzVGltZWZyYW1lS0VZAACgCwEPdG90YWxMb2NrZWRSRUFEAghzd2FwVHlwZQdhc3NldElkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQ50b3RhbExvY2tlZEtFWQIFCHN3YXBUeXBlBQdhc3NldElkAAABFXRvdGFsTG9ja2VkQnlVc2VyUkVBRAMIc3dhcFR5cGUFb3duZXIHYXNzZXRJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEUdG90YWxMb2NrZWRCeVVzZXJLRVkDBQhzd2FwVHlwZQUFb3duZXIFB2Fzc2V0SWQAAAEXYmFsYW5jZUxvY2tJbnRlcnZhbFJFQUQBCHN3YXBUeXBlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARZiYWxhbmNlTG9ja0ludGVydmFsS0VZAQUIc3dhcFR5cGUAoAsBG25vZGVCYWxhbmNlTG9ja0ludGVydmFsUkVBRAAJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBGm5vZGVCYWxhbmNlTG9ja0ludGVydmFsS0VZAAABARhrZXlTd2FwVXNlclNwZW50SW5QZXJpb2QBC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIEJXMlcwkAzAgCAhVzd2FwVXNlclNwZW50SW5QZXJpb2QJAMwIAgULdXNlckFkZHJlc3MFA25pbAUDU0VQARVrZXlVc2VyTGFzdFN3YXBIZWlnaHQBC3VzZXJBZGRyZXNzCQC5CQIJAMwIAgIEJXMlcwkAzAgCAhJ1c2VyTGFzdFN3YXBIZWlnaHQJAMwIAgULdXNlckFkZHJlc3MFA25pbAUDU0VQARZjb252ZXJ0TmV1dHJpbm9Ub1dhdmVzAgZhbW91bnQFcHJpY2UJAGsDBQZhbW91bnQFBU1VTFQ4BQVwcmljZQERY29udmVydFRva2VuVG9Vc2QCBmFtb3VudAVwcmljZQkAawMFBmFtb3VudAUFcHJpY2UFBU1VTFQ4ARZjb252ZXJ0V2F2ZXNUb05ldXRyaW5vAgZhbW91bnQFcHJpY2UJAGsDBQZhbW91bnQFBXByaWNlBQVNVUxUOAESY29udmVydFdhdmVzVG9Cb25kAgZhbW91bnQFcHJpY2UJARFjb252ZXJ0VG9rZW5Ub1VzZAIFBmFtb3VudAUFcHJpY2UBFmNvbnZlcnRKc29uQXJyYXlUb0xpc3QBCWpzb25BcnJheQkAtQkCBQlqc29uQXJyYXkCASwBG2NvbnZlcnRCYXNrZXRJdGVtVG9OZXV0cmlubwQIaW5BbW91bnQHaW5Bc3NldA1iYXNrZXRJbmZvU3RyDW5ldXRyaW5vUHJpY2UECmJhc2tldEluZm8JALwJAgUNYmFza2V0SW5mb1N0cgIBXwoBCGZpbmRJdGVtAgNhY2MEaXRlbQQFYkl0ZW0JALUJAgUEaXRlbQUHTElTVFNFUAMJAAACCQCRAwIFBWJJdGVtAAAFB2luQXNzZXQFBWJJdGVtBQNhY2MEAml0CgACJGwFCmJhc2tldEluZm8KAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCGZpbmRJdGVtAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBAVkbG9nNgkBBXZhbHVlAQkAnwgBCQESYmFza2V0TG9nYkRlbHRhS2V5AAQCZDYJAQV2YWx1ZQEJAJ8IAQkBCmJhc2tldERLZXkABAJiNgkBBXZhbHVlAQkAnwgBCQEKYmFza2V0QktleQAEAnc2CQEFdmFsdWUBCQCfCAEJARZiYXNrZXRXZWlnaHRCeUFzc2V0S2V5AQUHaW5Bc3NldAQCcDYJAGQCCQBlAgUFZGxvZzYFAnc2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaXQAAQQDcHA2CQBsBgUCYjYABgUCcDYABgAGBQZIQUxGVVAEDm91dEFtb3VudEdyb3NzCQBrAwUIaW5BbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJpdAACAwkAAAIFDW5ldXRyaW5vUHJpY2UAAAUFTVVMVDgJAGgCBQ1uZXV0cmlub1ByaWNlAGQECm11bHRpcGxpZXIJAGUCCQBkAgUFTVVMVDYFAmQ2BQNwcDYDCQBnAgAABQptdWx0aXBsaWVyCQACAQkArAICAhpOb24tcG9zaXRpdmUgbXVsdGlwbGllciA9IAkApAMBBQptdWx0aXBsaWVyBApkaXNjb3VudGVkCQBrAwUOb3V0QW1vdW50R3Jvc3MFCm11bHRpcGxpZXIFBU1VTFQ2BAltYXN0ZXJGZWUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUVTmV1dHJpbm9PdXRGZWVQYXJ0S2V5BQ5ERUZBVUxUU1dBUEZFRQQJZmVlQW1vdW50CQBrAwUKZGlzY291bnRlZAUJbWFzdGVyRmVlBQVNVUxUNgkAzAgCBQpkaXNjb3VudGVkCQDMCAIJAGUCBQpkaXNjb3VudGVkBQlmZWVBbW91bnQJAMwIAgUJZmVlQW1vdW50CQDMCAIFCm11bHRpcGxpZXIFA25pbAEXY29udmVydE5ldXRyaW5vVG9CYXNrZXQDBmFtb3VudA1iYXNrZXRJbmZvU3RyDm5ldXRyaW5vU3VwcGx5BApiYXNrZXRJbmZvCQC8CQIFDWJhc2tldEluZm9TdHICAV8EAms2CQEFdmFsdWUBCQCfCAEJAQpiYXNrZXRLS2V5AAQCZDYJAQV2YWx1ZQEJAJ8IAQkBCmJhc2tldERLZXkABAdvdXRQYXJ0CQBlAgUFTVVMVDYJAGsDBQJrNgUCZDYFBU1VTFQ2CgEEY29udgIDYWNjBGl0ZW0EBXBhcnRzCQC1CQIFBGl0ZW0FB0xJU1RTRVAEB2Fzc2V0SWQJAJEDAgUFcGFydHMAAAQFc2hhcmUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwABBAVwcmljZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAIEBnJlc2VydgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAMDCQAAAgUObmV1dHJpbm9TdXBwbHkAAAkAAgECJ0F0dGVtcHQgdG8gYnVybiBuZXV0cmlubyBhdCB6ZXJvIHN1cHBseQQJb3V0QW1vdW50CQBrAwkAawMFBmFtb3VudAUGcmVzZXJ2BQ5uZXV0cmlub1N1cHBseQUHb3V0UGFydAUFTVVMVDYECndhdmVzVHVwbGUDCQAAAgUHYXNzZXRJZAIFV0FWRVMJAJQKAgUJb3V0QW1vdW50BQVwcmljZQkAlAoCCAUDYWNjAl8yCAUDYWNjAl8zCQCVCgMJAM0IAggFA2FjYwJfMQkAlgoEBQdhc3NldElkBQlvdXRBbW91bnQFBXByaWNlBQVzaGFyZQgFCndhdmVzVHVwbGUCXzEIBQp3YXZlc1R1cGxlAl8yCgACJGwFCmJhc2tldEluZm8KAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBGNvbnYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoBEW1pblN3YXBBbW91bnRGQUlMAghzd2FwVHlwZQ1taW5Td2FwQW1vdW50CQACAQkArAICCQCsAgIJAKwCAgIYVGhlIHNwZWNpZmllZCBhbW91bnQgaW4gBQhzd2FwVHlwZQIrIHN3YXAgaXMgbGVzcyB0aGFuIHRoZSByZXF1aXJlZCBtaW5pbXVtIG9mIAkApAMBBQ1taW5Td2FwQW1vdW50ARVlbWVyZ2VuY3lTaHV0ZG93bkZBSUwACQACAQJaY29udHJhY3QgaXMgYmxvY2tlZCBieSBFTUVSR0VOQ1kgU0hVVERPV04gYWN0aW9ucyB1bnRpbGwgcmVhY3RpdmF0aW9uIGJ5IGVtZXJnZW5jeSBvcmFjbGVzAQ5wcmljZUluZGV4RkFJTAUFaW5kZXgKcHJpY2VJbmRleAtpbmRleEhlaWdodAx1bmxvY2tIZWlnaHQPcHJldkluZGV4SGVpZ2h0CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIjaW52YWxpZCBwcmljZSBoaXN0b3J5IGluZGV4OiBpbmRleD0JAKQDAQUFaW5kZXgCDCBwcmljZUluZGV4PQkApAMBBQpwcmljZUluZGV4Ag0gaW5kZXhIZWlnaHQ9CQCkAwEFC2luZGV4SGVpZ2h0Ag4gdW5sb2NrSGVpZ2h0PQkApAMBBQx1bmxvY2tIZWlnaHQCESBwcmV2SW5kZXhIZWlnaHQ9CQCkAwEFD3ByZXZJbmRleEhlaWdodAAPbmV1dHJpbm9Bc3NldElkCQDZBAEJAQ5nZXRTdHJpbmdCeUtleQEFEk5ldXRyaW5vQXNzZXRJZEtleQAKcHJpY2VJbmRleAkBGGdldE51bWJlckJ5QWRkcmVzc0FuZEtleQIFD2NvbnRyb2xDb250cmFjdAUNUHJpY2VJbmRleEtleQAJaXNCbG9ja2VkCQEWZ2V0Qm9vbEJ5QWRkcmVzc0FuZEtleQIFD2NvbnRyb2xDb250cmFjdAUMSXNCbG9ja2VkS2V5ABJpc0Rpc2FibGVkSXNzdWVYdG4JARZnZXRCb29sQnlBZGRyZXNzQW5kS2V5AgUPY29udHJvbENvbnRyYWN0BRJJc0Rpc2FibGVkSXNzdWVLZXkAGG5vZGVPcmFjbGVQcm92aWRlclB1YktleQkA2QQBCQEOZ2V0U3RyaW5nQnlLZXkBBRtOb2RlT3JhY2xlUHJvdmlkZXJQdWJLZXlLZXkAC2JvbmRBc3NldElkCQDZBAECLEYzaWF4enJ1RmVLdWpmVmZZU1pFa2VqcGpoNjd3bVJmUENSSGlObVdLcDNaABVkZXByZWNhdGVkQm9uZEFzc2V0SWQJANkEAQIsOTc1YWtaQmZuTWo1MTNVN01aYUhLelFybXNFeDVhRTN3ZFdLVHJIQmhiakYAEG5ldXRyaW5vQ29udHJhY3QFBHRoaXMADGN1cnJlbnRQcmljZQkBGGdldE51bWJlckJ5QWRkcmVzc0FuZEtleQIFD2NvbnRyb2xDb250cmFjdAUIUHJpY2VLZXkBG2NoZWNrSXNWYWxpZE1pblNwb25zb3JlZEZlZQECdHgEDk1JTlRSQU5TRkVSRkVFAKCNBgQWU3BvbnNvcmVkRmVlVXBwZXJCb3VuZADoBwQPcmVhbE5ldXRyaW5vRmVlCQERY29udmVydFRva2VuVG9Vc2QCBQ5NSU5UUkFOU0ZFUkZFRQUMY3VycmVudFByaWNlBA5taW5OZXV0cmlub0ZlZQkAaAIFD3JlYWxOZXV0cmlub0ZlZQACBA5tYXhOZXV0cmlub0ZlZQkAawMFD3JlYWxOZXV0cmlub0ZlZQUWU3BvbnNvcmVkRmVlVXBwZXJCb3VuZABkBAhpbnB1dEZlZQkBBXZhbHVlAQgFAnR4FG1pblNwb25zb3JlZEFzc2V0RmVlAwMJAGcCBQhpbnB1dEZlZQUObWluTmV1dHJpbm9GZWUJAGcCBQ5tYXhOZXV0cmlub0ZlZQUIaW5wdXRGZWUHCQAAAggFAnR4B2Fzc2V0SWQFD25ldXRyaW5vQXNzZXRJZAcBD2dldFByaWNlSGlzdG9yeQEFYmxvY2sJARhnZXROdW1iZXJCeUFkZHJlc3NBbmRLZXkCBQ9jb250cm9sQ29udHJhY3QJARJnZXRQcmljZUhpc3RvcnlLZXkBBQVibG9jawEVZ2V0SGVpZ2h0UHJpY2VCeUluZGV4AQVpbmRleAkBGGdldE51bWJlckJ5QWRkcmVzc0FuZEtleQIFD2NvbnRyb2xDb250cmFjdAkBGGdldEhlaWdodFByaWNlQnlJbmRleEtleQEFBWluZGV4ARZrZXlMb2NrUGFyYW1Vc2VyQW1vdW50AQt1c2VyQWRkcmVzcwkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAgtwYXJhbUJ5VXNlcgkAzAgCBQt1c2VyQWRkcmVzcwkAzAgCAgZhbW91bnQFA25pbAUDU0VQAAxzSWR4U3dhcFR5cGUAAQAKc0lkeFN0YXR1cwACAAxzSWR4SW5BbW91bnQAAwAPc0lkeFN0YXJ0SGVpZ2h0AAcAEnNJZHhTdGFydFRpbWVzdGFtcAAIABRzSWR4U2VsZlVubG9ja0hlaWdodAALAAtzSWR4TWluUmFuZAAPAAtzSWR4TWF4UmFuZAAQAAtzSWR4SW5Bc3NldAAUAA9zSWR4T3V0QXNzZXRPcHQAFQEHc3dhcEtFWQILdXNlckFkZHJlc3MEdHhJZAkAuQkCCQDMCAICBCVzJXMJAMwIAgULdXNlckFkZHJlc3MJAMwIAgUEdHhJZAUDbmlsBQNTRVABC3N0clN3YXBEQVRBFQhzd2FwVHlwZQZzdGF0dXMIaW5BbW91bnQFcHJpY2UMb3V0TmV0QW1vdW50DG91dEZlZUFtb3VudAtzdGFydEhlaWdodA5zdGFydFRpbWVzdGFtcAllbmRIZWlnaHQMZW5kVGltZXN0YW1wEHNlbGZVbmxvY2tIZWlnaHQQcmFuZFVubG9ja0hlaWdodAVpbmRleAx3aXRoZHJhd1R4SWQHcmFuZE1pbgdyYW5kTWF4Cm91dFN1cmZBbXQCYnIKYmFza2V0RGF0YQdpbkFzc2V0C291dEFzc2V0T3B0CQC6CQIJAMwIAgIqJXMlcyVkJWQlZCVkJWQlZCVkJWQlZCVkJWQlcyVkJWQlZCVkJXMlcyVzCQDMCAIFCHN3YXBUeXBlCQDMCAIFBnN0YXR1cwkAzAgCBQhpbkFtb3VudAkAzAgCBQVwcmljZQkAzAgCBQxvdXROZXRBbW91bnQJAMwIAgUMb3V0RmVlQW1vdW50CQDMCAIFC3N0YXJ0SGVpZ2h0CQDMCAIFDnN0YXJ0VGltZXN0YW1wCQDMCAIFCWVuZEhlaWdodAkAzAgCBQxlbmRUaW1lc3RhbXAJAMwIAgUQc2VsZlVubG9ja0hlaWdodAkAzAgCBRByYW5kVW5sb2NrSGVpZ2h0CQDMCAIFBWluZGV4CQDMCAIFDHdpdGhkcmF3VHhJZAkAzAgCBQdyYW5kTWluCQDMCAIFB3JhbmRNYXgJAMwIAgUKb3V0U3VyZkFtdAkAzAgCBQJicgkAzAgCBQpiYXNrZXREYXRhCQDMCAIFB2luQXNzZXQJAMwIAgULb3V0QXNzZXRPcHQFA25pbAUDU0VQAQ9wZW5kaW5nU3dhcERBVEEFCHN3YXBUeXBlDWluQXNzZXRBbW91bnQQc2VsZlVubG9ja0hlaWdodAdpbkFzc2V0C291dEFzc2V0T3B0CQELc3RyU3dhcERBVEEVBQhzd2FwVHlwZQIHUEVORElORwkApAMBBQ1pbkFzc2V0QW1vdW50AgEwAgEwAgEwCQCkAwEFBmhlaWdodAkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAIBMAIBMAkApAMBBRBzZWxmVW5sb2NrSGVpZ2h0AgEwAgEwAgROVUxMAgEwAgEwAgEwAgEwAgAFB2luQXNzZXQFC291dEFzc2V0T3B0AQ5maW5pc2hTd2FwREFUQQwJZGF0YUFycmF5BXByaWNlDG91dE5ldEFtb3VudAxvdXRGZWVBbW91bnQQcmFuZFVubG9ja0hlaWdodAVpbmRleAx3aXRoZHJhd1R4SWQKb3V0U3VyZkFtdAJicgpiYXNrZXREYXRhB2luQXNzZXQLb3V0QXNzZXRPcHQJAQtzdHJTd2FwREFUQRUJAJEDAgUJZGF0YUFycmF5BQxzSWR4U3dhcFR5cGUCCEZJTklTSEVECQCRAwIFCWRhdGFBcnJheQUMc0lkeEluQW1vdW50CQCkAwEFBXByaWNlCQCkAwEFDG91dE5ldEFtb3VudAkApAMBBQxvdXRGZWVBbW91bnQJAJEDAgUJZGF0YUFycmF5BQ9zSWR4U3RhcnRIZWlnaHQJAJEDAgUJZGF0YUFycmF5BRJzSWR4U3RhcnRUaW1lc3RhbXAJAKQDAQUGaGVpZ2h0CQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQCRAwIFCWRhdGFBcnJheQUUc0lkeFNlbGZVbmxvY2tIZWlnaHQJAKQDAQUQcmFuZFVubG9ja0hlaWdodAkApAMBBQVpbmRleAUMd2l0aGRyYXdUeElkCQCRAwIFCWRhdGFBcnJheQULc0lkeE1pblJhbmQJAJEDAgUJZGF0YUFycmF5BQtzSWR4TWF4UmFuZAkApAMBBQpvdXRTdXJmQW10CQCkAwEFAmJyBQpiYXNrZXREYXRhBQdpbkFzc2V0BQtvdXRBc3NldE9wdAESc3dhcERhdGFGYWlsT3JSRUFEAgt1c2VyQWRkcmVzcwhzd2FwVHhJZAQHc3dhcEtleQkBB3N3YXBLRVkCBQt1c2VyQWRkcmVzcwUIc3dhcFR4SWQJALwJAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEFB3N3YXBLZXkJAKwCAgIRbm8gc3dhcCBkYXRhIGZvciAFB3N3YXBLZXkFA1NFUAEJYXBwbHlGZWVzAw5hbW91bnRPdXRHcm9zcwtpbkFtdFRvU1VSRgdmZWVQYXJ0BAlmZWVBbW91bnQJAGsDBQ5hbW91bnRPdXRHcm9zcwUHZmVlUGFydAUFTVVMVDYJAMwIAgkAZQIFDmFtb3VudE91dEdyb3NzBQlmZWVBbW91bnQJAMwIAgUJZmVlQW1vdW50BQNuaWwBD2FwcGx5RmVlc0Jhc2tldAIJYmFza2V0T3V0B2ZlZVBhcnQKAQpmZWVBcHBsaWVyAgNhY2MEaXRlbQQJZmVlQW1vdW50CQBrAwgFBGl0ZW0CXzIFB2ZlZVBhcnQFBU1VTFQ2CQDNCAIFA2FjYwkAuQkCCQDMCAIIBQRpdGVtAl8xCQDMCAIJAKQDAQgFBGl0ZW0CXzMJAMwIAgkApAMBCQBlAggFBGl0ZW0CXzIFCWZlZUFtb3VudAkAzAgCCQCkAwEFCWZlZUFtb3VudAkAzAgCCQCkAwEIBQRpdGVtAl80BQNuaWwFB0xJU1RTRVAEAWEKAAIkbAUJYmFza2V0T3V0CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpmZWVBcHBsaWVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKCQC6CQIFAWECAV8BCnNlbGVjdE5vZGUBDXVubGVhc2VBbW91bnQEDWFtb3VudFRvTGVhc2UJAGUCCQBlAggJAO8HAQUQbmV1dHJpbm9Db250cmFjdAlhdmFpbGFibGUFDXVubGVhc2VBbW91bnQJAR9nZXRSZXNlcnZlZEFtb3VudEZvclNwb25zb3JzaGlwAAQKb2xkTGVhc2VkMAkBDmdldE51bWJlckJ5S2V5AQkBEWdldExlYXNlQW1vdW50S2V5AQAABApuZXdMZWFzZWQwCQBkAgUNYW1vdW50VG9MZWFzZQUKb2xkTGVhc2VkMAMJAGYCBQpuZXdMZWFzZWQwAAAFCm5ld0xlYXNlZDAAAAEIdGhpc09ubHkBAWkDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAi1QZXJtaXNzaW9uIGRlbmllZDogdGhpcyBjb250cmFjdCBvbmx5IGFsbG93ZWQGARZwcmVwYXJlVW5sZWFzZUFuZExlYXNlAQ11bmxlYXNlQW1vdW50BA5uZXdMZWFzZUFtb3VudAkBCnNlbGVjdE5vZGUBBQ11bmxlYXNlQW1vdW50BAlub2RlSW5kZXgAAAMJAGYCBQ5uZXdMZWFzZUFtb3VudAAABAtsZWFzZUlkS2V5MQkBDWdldExlYXNlSWRLZXkBAAEECW9sZExlYXNlMQkAoQgBBQtsZWFzZUlkS2V5MQQPdW5sZWFzZU9yRW1wdHkxAwkBCWlzRGVmaW5lZAEFCW9sZExlYXNlMQkAzAgCCQELTGVhc2VDYW5jZWwBCQEFdmFsdWUBBQlvbGRMZWFzZTEJAMwIAgkBC0RlbGV0ZUVudHJ5AQULbGVhc2VJZEtleTEJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBEWdldExlYXNlQW1vdW50S2V5AQABBQNuaWwFA25pbAQKbGVhc2VJZEtleQkBDWdldExlYXNlSWRLZXkBBQlub2RlSW5kZXgECG9sZExlYXNlCQCcCAIFBHRoaXMFCmxlYXNlSWRLZXkEDnVubGVhc2VPckVtcHR5AwkBCWlzRGVmaW5lZAEFCG9sZExlYXNlCQDMCAIJAQtMZWFzZUNhbmNlbAEJAQV2YWx1ZQEFCG9sZExlYXNlBQNuaWwFA25pbAQObGVhc2VBbW91bnRLZXkJARFnZXRMZWFzZUFtb3VudEtleQEFCW5vZGVJbmRleAQFbGVhc2UJAMQIAgkBHGdldFN0YWtpbmdOb2RlQWRkcmVzc0J5SW5kZXgBBQlub2RlSW5kZXgFDm5ld0xlYXNlQW1vdW50CQDOCAIJAM4IAgUPdW5sZWFzZU9yRW1wdHkxBQ51bmxlYXNlT3JFbXB0eQkAzAgCBQVsZWFzZQkAzAgCCQELQmluYXJ5RW50cnkCBQpsZWFzZUlkS2V5CQEFbGNhbGMBBQVsZWFzZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUObGVhc2VBbW91bnRLZXkFDm5ld0xlYXNlQW1vdW50BQNuaWwFA25pbAEMcmVhZE5vZGVJbmZvAQdub2RlSWR4BAtub2RlQWRkcmVzcwkBHGdldFN0YWtpbmdOb2RlQWRkcmVzc0J5SW5kZXgBBQdub2RlSWR4BAxsZWFzZWRBbXRLRVkJARFnZXRMZWFzZUFtb3VudEtleQEFB25vZGVJZHgECWxlYXNlZEFtdAkBDmdldE51bWJlckJ5S2V5AQUMbGVhc2VkQW10S0VZBApsZWFzZUlkS0VZCQENZ2V0TGVhc2VJZEtleQEFB25vZGVJZHgEB2xlYXNlSWQJAQV2YWx1ZQEJAJwIAgUEdGhpcwUKbGVhc2VJZEtFWQkAlwoFBQtub2RlQWRkcmVzcwUMbGVhc2VkQW10S0VZBQlsZWFzZWRBbXQFCmxlYXNlSWRLRVkFB2xlYXNlSWQBFUxlYXNpbmdSZWxhdGVkQWN0aW9ucwUIbm9kZUFkZHIJbmV3QW1vdW50BW9sZElkCG5ld0lkS2V5CW5ld0FtdEtleQQFbGVhc2UJAMQIAgUIbm9kZUFkZHIFCW5ld0Ftb3VudAkAzAgCCQELTGVhc2VDYW5jZWwBBQVvbGRJZAkAzAgCBQVsZWFzZQkAzAgCCQELQmluYXJ5RW50cnkCBQhuZXdJZEtleQkAuQgBBQVsZWFzZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJbmV3QW10S2V5BQluZXdBbW91bnQFA25pbAEMaXNQcmljZVZhbGlkAQtvdXRBc3NldE9wdAkBBmFzQm9vbAEJAPwHBAUPY29udHJvbENvbnRyYWN0Ag12YWxpZGF0ZVByaWNlCQDMCAIFC0VJR0hUX0hPVVJTCQDMCAIFDlRFTl9QRVJDRU5UX1g2CQDMCAIFC291dEFzc2V0T3B0BQNuaWwFA25pbAAMYkZ1bmNJZHhTdXJmAAAADWJGdW5jSWR4V2F2ZXMAAQAMYkZ1bmNJZHhVc2RuAAIAFGJGdW5jSWR4UmVzZXJ2ZVN0YXJ0AAMAE2JGdW5jSWR4U3VwcGx5U3RhcnQABAAPYkZ1bmNJZHhCUlN0YXJ0AAUAEmJGdW5jSWR4UmVzZXJ2ZUVuZAAGABFiRnVuY0lkeFN1cHBseUVuZAAHAA1iRnVuY0lkeEJSRW5kAAgADGJGdW5jSWR4UmVzdAAJABJiRnVuY0lkeFdhdmVzUHJpY2UACgEPY2FsY1dpdGhkcmF3VDJVBAhpbkFtb3VudAdpbkFzc2V0CmJhc2tldEluZm8Nd2VpZ2h0ZWRQcmljZQQGb3V0QW10CQEbY29udmVydEJhc2tldEl0ZW1Ub05ldXRyaW5vBAUIaW5BbW91bnQFB2luQXNzZXQFCmJhc2tldEluZm8FDXdlaWdodGVkUHJpY2UJAJ4KDAkAkQMCBQZvdXRBbXQAAAUPbmV1dHJpbm9Bc3NldElkAAAFB2luQXNzZXQAAAUNd2VpZ2h0ZWRQcmljZQUIaW5BbW91bnQAAAAAAAAFA25pbAkAzAgCCQCRAwIFBm91dEFtdAABCQDMCAIJAJEDAgUGb3V0QW10AAIFA25pbAEUY2FsY1dpdGhkcmF3VTJCYXNrZXQDBnVzZG5JbgpiYXNrZXRJbmZvDm5ldXRyaW5vU3VwcGx5BAtvdXRBbXRHcm9zcwkBF2NvbnZlcnROZXV0cmlub1RvQmFza2V0AwUGdXNkbkluBQpiYXNrZXRJbmZvBQ5uZXV0cmlub1N1cHBseQkAngoMCAULb3V0QW10R3Jvc3MCXzIFBHVuaXQAAAUPbmV1dHJpbm9Bc3NldElkCAULb3V0QW10R3Jvc3MCXzIIBQtvdXRBbXRHcm9zcwJfMwUGdXNkbkluBQ5uZXV0cmlub1N1cHBseQUGdXNkbkluAAAIBQtvdXRBbXRHcm9zcwJfMQUDbmlsAQ9jYWxjV2l0aGRyYXdVMlQFBnVzZG5JbgpiYXNrZXRJbmZvDm5ldXRyaW5vU3VwcGx5CG91dEFzc2V0CWlzVmlydHVhbAQLb3V0QW10R3Jvc3MJARdjb252ZXJ0TmV1dHJpbm9Ub0Jhc2tldAMFBnVzZG5JbgUKYmFza2V0SW5mbwUObmV1dHJpbm9TdXBwbHkKAQdzd2FwcGVyAgNhY2MEaXRlbQQHYXNzZXRJZAgFBGl0ZW0CXzEDCQAAAgUHYXNzZXRJZAUIb3V0QXNzZXQJAJYKBAUIb3V0QXNzZXQJAGQCCAUDYWNjAl8yCAUEaXRlbQJfMggFBGl0ZW0CXzMIBQRpdGVtAl80BAlvdXRBbW91bnQJAQVhc0ludAEJAPwHBAUTcG9vbHNGYWNhZGVDb250cmFjdAIZc3dhcFRva2Vuc1ZpYVBvb2xSRUFET05MWQkAzAgCBQdhc3NldElkCQDMCAIIBQRpdGVtAl8yCQDMCAIFCG91dEFzc2V0BQNuaWwFA25pbAkAlgoECAUDYWNjAl8xCQBkAggFA2FjYwJfMgUJb3V0QW1vdW50CAUDYWNjAl8zCAUDYWNjAl80BAFzCgACJGwIBQtvdXRBbXRHcm9zcwJfMQoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAIAAAAAAAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdzd2FwcGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKCQCeCgwIBQtvdXRBbXRHcm9zcwJfMgUEdW5pdAAABQ9uZXV0cmlub0Fzc2V0SWQIBQFzAl8yCAULb3V0QW10R3Jvc3MCXzMFBnVzZG5JbgUObmV1dHJpbm9TdXBwbHkFBnVzZG5JbgAACQDMCAIFAXMFA25pbAUDbmlsAQxjYWxjV2l0aGRyYXcHCHN3YXBUeXBlCGluQW1vdW50BXByaWNlD25ldXRyaW5vTWV0cmljcwdpbkFzc2V0C291dEFzc2V0T3B0CWlzVmlydHVhbAQObmV1dHJpbm9TdXBwbHkJAQVhc0ludAEJAJEDAgUPbmV1dHJpbm9NZXRyaWNzBRRuTWV0cmljSWR4VXNkblN1cHBseQQKYmFza2V0SW5mbwkBCGFzU3RyaW5nAQkAkQMCBQ9uZXV0cmlub01ldHJpY3MFEW5NZXRyaWNCYXNrZXRJbmZvBA13ZWlnaHRlZFByaWNlCQEFYXNJbnQBCQCRAwIFD25ldXRyaW5vTWV0cmljcwUUbk1ldHJpY1dlaWdodGVkUHJpY2UEDG91dERhdGFUdXBsZQMJAAACBQhzd2FwVHlwZQILb3V0TmV1dHJpbm8JAQ9jYWxjV2l0aGRyYXdUMlUEBQhpbkFtb3VudAUHaW5Bc3NldAUKYmFza2V0SW5mbwUNd2VpZ2h0ZWRQcmljZQMJAAACBQhzd2FwVHlwZQIIb3V0TXVsdGkDCQECIT0CBQtvdXRBc3NldE9wdAIACQEPY2FsY1dpdGhkcmF3VTJUBQUIaW5BbW91bnQFCmJhc2tldEluZm8FDm5ldXRyaW5vU3VwcGx5BQtvdXRBc3NldE9wdAUJaXNWaXJ0dWFsCQEUY2FsY1dpdGhkcmF3VTJCYXNrZXQDBQhpbkFtb3VudAUKYmFza2V0SW5mbwUObmV1dHJpbm9TdXBwbHkJAAIBCQCsAgICFlVuc3VwcG9ydGVkIHN3YXAgdHlwZSAFCHN3YXBUeXBlBAtvdXRBbXRHcm9zcwgFDG91dERhdGFUdXBsZQJfMQQKb3V0QXNzZXRJZAgFDG91dERhdGFUdXBsZQJfMgQPaW5BbXRUb1N1cmZQYXJ0CAUMb3V0RGF0YVR1cGxlAl8zBAlpbkFzc2V0SWQIBQxvdXREYXRhVHVwbGUCXzQECnVubGVhc2VBbXQIBQxvdXREYXRhVHVwbGUCXzUEDXdpdGhkcmF3UHJpY2UIBQxvdXREYXRhVHVwbGUCXzYECmJhc2tldERhdGEIBQxvdXREYXRhVHVwbGUDXzExBApuZXRGZWVEYXRhCAUMb3V0RGF0YVR1cGxlA18xMgQJb3V0TmV0QW10AwkAAAIFCHN3YXBUeXBlAgtvdXROZXV0cmlubwkAkQMCBQpuZXRGZWVEYXRhAAAAAAQJb3V0RmVlQW10AwkAAAIFCHN3YXBUeXBlAgtvdXROZXV0cmlubwkAkQMCBQpuZXRGZWVEYXRhAAEAAAQKb3V0U3VyZkFtdAMJAGcCAAAFD2luQW10VG9TdXJmUGFydAAACQEFYXNJbnQBCQCRAwIJAQlhc0FueUxpc3QBCQD8BwQFDG1hdGhDb250cmFjdAIUc3VyZkZ1bmN0aW9uUkVBRE9OTFkJAMwIAgUPaW5BbXRUb1N1cmZQYXJ0CQDMCAIFCWluQXNzZXRJZAUDbmlsBQNuaWwFDGJGdW5jSWR4U3VyZgQHZmVlUGFydAMDCQAAAgUIc3dhcFR5cGUCCG91dE11bHRpCQECIT0CBQtvdXRBc3NldE9wdAIABwkBEHNpbmdsZU91dEZlZVJFQUQACQEPbXVsdGlPdXRGZWVSRUFEAAQOd2l0aGRyYXdCYXNrZXQDCQAAAgUIc3dhcFR5cGUCCG91dE11bHRpCQEPYXBwbHlGZWVzQmFza2V0AgUKYmFza2V0RGF0YQUHZmVlUGFydAIACQCbCgkFCW91dE5ldEFtdAUKb3V0QXNzZXRJZAUKb3V0U3VyZkFtdAUPaW5BbXRUb1N1cmZQYXJ0BQp1bmxlYXNlQW10BQlvdXRGZWVBbXQFC291dEFtdEdyb3NzBQ13aXRoZHJhd1ByaWNlBQ53aXRoZHJhd0Jhc2tldAEKY29tbW9uU3dhcAYIc3dhcFR5cGUJcG10QW1vdW50B2luQXNzZXQOdXNlckFkZHJlc3NTdHIGdHhJZDU4C291dEFzc2V0T3B0BBBzd2FwUGFyYW1zU1RSVUNUCQESYXNTd2FwUGFyYW1zU1RSVUNUAQkA/AcEBQR0aGlzAhtzd2FwUGFyYW1zQnlVc2VyU1lTUkVBRE9OTFkJAMwIAgUOdXNlckFkZHJlc3NTdHIJAMwIAgAABQNuaWwFA25pbAQRdG9rZW5Td2FwTGltaXRVc2QIBRBzd2FwUGFyYW1zU1RSVUNUAl8xBA5zd2FwTGltaXRTcGVudAgFEHN3YXBQYXJhbXNTVFJVQ1QCXzIEDmJsY2tzMkxtdFJlc2V0CAUQc3dhcFBhcmFtc1NUUlVDVAJfMwQQdXNkblN3YXBMaW1pdE1heAgFEHN3YXBQYXJhbXNTVFJVQ1QCXzcEDW1pblN3YXBBbW91bnQJARFtaW5Td2FwQW1vdW50UkVBRAIFCHN3YXBUeXBlBQdpbkFzc2V0BBF0b3RhbExvY2tlZEJ5VXNlcgkBFXRvdGFsTG9ja2VkQnlVc2VyUkVBRAMFCHN3YXBUeXBlBQ51c2VyQWRkcmVzc1N0cgUHaW5Bc3NldAQLbm9kZUFkZHJlc3MJARVnZXRTdGFraW5nTm9kZUJ5SW5kZXgBAAAEDGlzU3dhcEJ5Tm9kZQkAAAIFC25vZGVBZGRyZXNzBQ51c2VyQWRkcmVzc1N0cgQWYmFsYW5jZUxvY2tNYXhJbnRlcnZhbAMFDGlzU3dhcEJ5Tm9kZQkBG25vZGVCYWxhbmNlTG9ja0ludGVydmFsUkVBRAAJARdiYWxhbmNlTG9ja0ludGVydmFsUkVBRAEFCHN3YXBUeXBlBBBzZWxmVW5sb2NrSGVpZ2h0CQBkAgUGaGVpZ2h0BRZiYWxhbmNlTG9ja01heEludGVydmFsBAJwcgkBBXZhbHVlAQkAmggCBQ9jb250cm9sQ29udHJhY3QJAQ9rZXlQcmljZUJ5QXNzZXQBBQdpbkFzc2V0BA5zd2FwVXNkblZvbHVtZQMJAAACBQhzd2FwVHlwZQILb3V0TmV1dHJpbm8JARFjb252ZXJ0VG9rZW5Ub1VzZAIFCXBtdEFtb3VudAUCcHIFCXBtdEFtb3VudAQMc3dhcExpbWl0TWF4AwkAAAIFCHN3YXBUeXBlAgtvdXROZXV0cmlubwURdG9rZW5Td2FwTGltaXRVc2QFEHVzZG5Td2FwTGltaXRNYXgDCQBmAgUNbWluU3dhcEFtb3VudAUJcG10QW1vdW50CQERbWluU3dhcEFtb3VudEZBSUwCBQhzd2FwVHlwZQUNbWluU3dhcEFtb3VudAMDCQEBIQEFDGlzU3dhcEJ5Tm9kZQkAZgIFDnN3YXBMaW1pdFNwZW50AAAHCQACAQkArAICAjpZb3UgaGF2ZSBleGNlZWRlZCBzd2FwIGxpbWl0ISBOZXh0IGFsbG93ZWQgc3dhcCBoZWlnaHQgaXMgCQCkAwEJAGQCBQZoZWlnaHQFDmJsY2tzMkxtdFJlc2V0AwMJAQEhAQUMaXNTd2FwQnlOb2RlCQBmAgUOc3dhcFVzZG5Wb2x1bWUFDHN3YXBMaW1pdE1heAcJAAIBCQCsAgIJAKwCAgkArAICAi5Zb3UgaGF2ZSBleGNlZWRlZCB5b3VyIHN3YXAgbGltaXQhIFJlcXVlc3RlZDogCQCkAwEFDnN3YXBVc2RuVm9sdW1lAg0sIGF2YWlsYWJsZTogCQCkAwEFDHN3YXBMaW1pdE1heAMFCWlzQmxvY2tlZAkBFWVtZXJnZW5jeVNodXRkb3duRkFJTAAED25ldXRyaW5vTWV0cmljcwkBCWFzQW55TGlzdAEJAPwHBAUMbWF0aENvbnRyYWN0AhpjYWxjTmV1dGlub01ldHJpY3NSRUFET05MWQUDbmlsBQNuaWwECmJhc2tldEluZm8JAQhhc1N0cmluZwEJAJEDAgUPbmV1dHJpbm9NZXRyaWNzBRFuTWV0cmljQmFza2V0SW5mbwQNd2VpZ2h0ZWRQcmljZQkBBWFzSW50AQkAkQMCBQ9uZXV0cmlub01ldHJpY3MFFG5NZXRyaWNXZWlnaHRlZFByaWNlBANvdXQJARtjb252ZXJ0QmFza2V0SXRlbVRvTmV1dHJpbm8EBQlwbXRBbW91bnQFB2luQXNzZXQFCmJhc2tldEluZm8FDXdlaWdodGVkUHJpY2UEBm1heEZlZQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEJbWF4RmVlS2V5AAUNREVGQVVMVE1BWEZFRQMDCQAAAgUIc3dhcFR5cGUCC291dE5ldXRyaW5vCQBmAgkAZQIFBU1VTFQ2BQZtYXhGZWUJAJEDAgUDb3V0AAMHCQACAQkArAICAidNYXggYWxsb3dlZCBmZWUgZXhjZWVkZWQsIG11bHRpcGxpZXIgPSAJAKQDAQkAkQMCBQNvdXQAAwQRd2F2ZXNMaW1pdEFjdGlvbnMDAwkAAAIFCHN3YXBUeXBlAghvdXRNdWx0aQkBAiE9AgULb3V0QXNzZXRPcHQCAAcDCQEBIQEJAQxpc1ByaWNlVmFsaWQBBQtvdXRBc3NldE9wdAkAAgECK0Nhbid0IGJlIHByb2Nlc3NlZCBkdWUgdG8gbWFya2V0IGNvbmRpdGlvbnMECG91dFdhdmVzCAkBDGNhbGNXaXRoZHJhdwcFCHN3YXBUeXBlBQlwbXRBbW91bnQAAAUPbmV1dHJpbm9NZXRyaWNzBQdpbkFzc2V0BQtvdXRBc3NldE9wdAYCXzUEB2xhc3REYXkJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBGWtleUxhc3RXYXZlc1dpdGhkcmF3YWxEYXkAAAAEBXRvZGF5CQBpAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFCURBWU1JTExJUwQIY3VyRGFpbHkDCQECIT0CBQV0b2RheQUHbGFzdERheQAACQELdmFsdWVPckVsc2UCCQCfCAEJARhrZXlXYXZlc1dpdGhkcmF3bkxhc3REYXkAAAAEC25ld0RhaWx5Vm9sCQBkAgUIY3VyRGFpbHkFCG91dFdhdmVzAwkAZgIFC25ld0RhaWx5Vm9sBQ9NQVhfREFJTFlfV0FWRVMJAAIBAhpEYWlseSB3YXZlcyBsaW1pdCBleGNlZWRlZAQIY3VyVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleVdhdmVzV2l0aGRyYXduVG90YWwAAAAEC25ld1RvdGFsVm9sCQBkAgUIY3VyVG90YWwFCG91dFdhdmVzAwkAZgIFC25ld1RvdGFsVm9sBQ9NQVhfVE9UQUxfV0FWRVMJAAIBAhtHbG9iYWwgd2F2ZXMgbGltaXQgZXhjZWVkZWQJAMwIAgkBDEludGVnZXJFbnRyeQIJARhrZXlXYXZlc1dpdGhkcmF3bkxhc3REYXkABQtuZXdEYWlseVZvbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleVdhdmVzV2l0aGRyYXduVG90YWwABQtuZXdUb3RhbFZvbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGWtleUxhc3RXYXZlc1dpdGhkcmF3YWxEYXkABQV0b2RheQUDbmlsBQNuaWwECWxlYXNlUGFydAMDCQAAAgUIc3dhcFR5cGUCC291dE5ldXRyaW5vCQAAAgUHaW5Bc3NldAIFV0FWRVMHCQEWcHJlcGFyZVVubGVhc2VBbmRMZWFzZQEAAAUDbmlsCQCUCgIJAM4IAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEYa2V5U3dhcFVzZXJTcGVudEluUGVyaW9kAQUOdXNlckFkZHJlc3NTdHIFDnN3YXBVc2RuVm9sdW1lCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEVa2V5VXNlckxhc3RTd2FwSGVpZ2h0AQUOdXNlckFkZHJlc3NTdHIFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFHRvdGFsTG9ja2VkQnlVc2VyS0VZAwUIc3dhcFR5cGUFDnVzZXJBZGRyZXNzU3RyBQdpbkFzc2V0CQBkAgURdG90YWxMb2NrZWRCeVVzZXIFCXBtdEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGGdldEJhbGFuY2VVbmxvY2tCbG9ja0tleQEFDnVzZXJBZGRyZXNzU3RyBRBzZWxmVW5sb2NrSGVpZ2h0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQdzd2FwS0VZAgUOdXNlckFkZHJlc3NTdHIFBnR4SWQ1OAkBD3BlbmRpbmdTd2FwREFUQQUFCHN3YXBUeXBlBQlwbXRBbW91bnQFEHNlbGZVbmxvY2tIZWlnaHQFB2luQXNzZXQFC291dEFzc2V0T3B0BQNuaWwFCWxlYXNlUGFydAURd2F2ZXNMaW1pdEFjdGlvbnMFBHVuaXQBEmtleUFwcGx5SW5Qcm9ncmVzcwACEyVzX19hcHBseUluUHJvZ3Jlc3MBE2tleVByb3Bvc2FsRGF0YUJ5SWQBCnByb3Bvc2FsSWQJAKwCAgIUJXMlZF9fcHJvcG9zYWxEYXRhX18JAKQDAQUKcHJvcG9zYWxJZAALZ292SWR4VHhJZHMACQEOdmFsaWRhdGVVcGRhdGUBAnR4BAckbWF0Y2gwBQJ0eAMJAAECBQckbWF0Y2gwAgVPcmRlcgQBbwUHJG1hdGNoMAkAAgECFU9yZGVycyBhcmVuJ3QgYWxsb3dlZAMDCQABAgUHJG1hdGNoMAIPRGF0YVRyYW5zYWN0aW9uBgMJAAECBQckbWF0Y2gwAhVTcG9uc29yRmVlVHJhbnNhY3Rpb24GAwkAAQIFByRtYXRjaDACFFNldFNjcmlwdFRyYW5zYWN0aW9uBgMJAAECBQckbWF0Y2gwAhZDcmVhdGVBbGlhc1RyYW5zYWN0aW9uBgMJAAECBQckbWF0Y2gwAhZMZWFzZUNhbmNlbFRyYW5zYWN0aW9uBgMJAAECBQckbWF0Y2gwAhBMZWFzZVRyYW5zYWN0aW9uBgMJAAECBQckbWF0Y2gwAhBJc3N1ZVRyYW5zYWN0aW9uBgMJAAECBQckbWF0Y2gwAhtJbnZva2VFeHByZXNzaW9uVHJhbnNhY3Rpb24GAwkAAQIFByRtYXRjaDACGlVwZGF0ZUFzc2V0SW5mb1RyYW5zYWN0aW9uBgMJAAECBQckbWF0Y2gwAhdJbnZva2VTY3JpcHRUcmFuc2FjdGlvbgYDCQABAgUHJG1hdGNoMAIZU2V0QXNzZXRTY3JpcHRUcmFuc2FjdGlvbgYDCQABAgUHJG1hdGNoMAITVHJhbnNmZXJUcmFuc2FjdGlvbgYDCQABAgUHJG1hdGNoMAITRXhjaGFuZ2VUcmFuc2FjdGlvbgYDCQABAgUHJG1hdGNoMAIXTWFzc1RyYW5zZmVyVHJhbnNhY3Rpb24GAwkAAQIFByRtYXRjaDACD0J1cm5UcmFuc2FjdGlvbgYJAAECBQckbWF0Y2gwAhJSZWlzc3VlVHJhbnNhY3Rpb24EAXQFByRtYXRjaDAEBHR4SWQJANgEAQgFAXQCaWQECnByb3Bvc2FsSWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQtnb3ZDb250cmFjdAkBEmtleUFwcGx5SW5Qcm9ncmVzcwACFkFwcGx5IGlzIG5vdCBoYXBwZW5pbmcEBnR4TGlzdAkAtQkCCQCRAwIJALUJAgkBD2dldFN0cmluZ09yRmFpbAIFC2dvdkNvbnRyYWN0CQETa2V5UHJvcG9zYWxEYXRhQnlJZAEFCnByb3Bvc2FsSWQFA1NFUAULZ292SWR4VHhJZHMFB0xJU1RTRVADCQEBIQEJAQlpc0RlZmluZWQBCQDPCAIFBnR4TGlzdAUEdHhJZAkAAgEJAKwCAgkArAICCQCsAgICDlVua25vd24gdHhJZDogBQR0eElkAhAgZm9yIHByb3Bvc2FsSWQ9CQCkAwEFCnByb3Bvc2FsSWQGCQACAQILTWF0Y2ggZXJyb3IBFHN3YXBOZXV0cmlub0ludGVybmFsAgFpC291dEFzc2V0T3B0AwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQItc3dhcE5ldXRyaW5vVG9CYXNrZXQgcmVxdWlyZSBvbmx5IG9uZSBwYXltZW50BANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAUPbmV1dHJpbm9Bc3NldElkCQACAQI6T25seSBhcHByb3ByaWF0ZSBOZXV0cmlubyB0b2tlbnMgYXJlIGFsbG93ZWQgZm9yIHN3YXBwaW5nLgQLdXNlckFkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBAZ0eElkNTgJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAQSbmV1dHJpbm9Bc3NldElkU3RyCQDYBAEFD25ldXRyaW5vQXNzZXRJZAQLdG90YWxMb2NrZWQJAQ90b3RhbExvY2tlZFJFQUQCAghvdXRNdWx0aQUSbmV1dHJpbm9Bc3NldElkU3RyBAlwbXRBbW91bnQIBQNwbXQGYW1vdW50BA9zYXZlVG90YWxMb2NrZWQJAPwHBAUEdGhpcwITaW50ZXJuYWxTYXZlSW50ZWdlcgkAzAgCCQEOdG90YWxMb2NrZWRLRVkCAghvdXRNdWx0aQUSbmV1dHJpbm9Bc3NldElkU3RyCQDMCAIJAGQCBQt0b3RhbExvY2tlZAUJcG10QW1vdW50BQNuaWwFA25pbAMJAAACBQ9zYXZlVG90YWxMb2NrZWQFD3NhdmVUb3RhbExvY2tlZAkBCmNvbW1vblN3YXAGAghvdXRNdWx0aQgFA3BtdAZhbW91bnQFEm5ldXRyaW5vQXNzZXRJZFN0cgULdXNlckFkZHJlc3MFBnR4SWQ1OAULb3V0QXNzZXRPcHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4RAWkBDWNvbnN0cnVjdG9yVjEMEm5ldXRyaW5vQXNzZXRJZFBybQ5ib25kQXNzZXRJZFBybRJhdWN0aW9uQ29udHJhY3RQcm0WbGlxdWlkYXRpb25Db250cmFjdFBybQ5ycGRDb250cmFjdFBybRtub2RlT3JhY2xlUHJvdmlkZXJQdWJLZXlQcm0bYmFsYW5jZVdhdmVzTG9ja0ludGVydmFsUHJtHmJhbGFuY2VOZXV0cmlub0xvY2tJbnRlcnZhbFBybRVtaW5XYXZlc1N3YXBBbW91bnRQcm0YbWluTmV1dHJpbm9Td2FwQW1vdW50UHJtFW5ldXRyaW5vT3V0RmVlUGFydFBybRJ3YXZlc091dEZlZVBhcnRQcm0EC2NoZWNrQ2FsbGVyCQEIdGhpc09ubHkBBQFpAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECE25vIHBheW1lbnRzIGFsbG93ZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUSTmV1dHJpbm9Bc3NldElkS2V5BRJuZXV0cmlub0Fzc2V0SWRQcm0JAMwIAgkBC1N0cmluZ0VudHJ5AgUOQm9uZEFzc2V0SWRLZXkFDmJvbmRBc3NldElkUHJtCQDMCAIJAQtTdHJpbmdFbnRyeQIFEkF1Y3Rpb25Db250cmFjdEtleQUSYXVjdGlvbkNvbnRyYWN0UHJtCQDMCAIJAQtTdHJpbmdFbnRyeQIFFkxpcXVpZGF0aW9uQ29udHJhY3RLZXkFFmxpcXVpZGF0aW9uQ29udHJhY3RQcm0JAMwIAgkBC1N0cmluZ0VudHJ5AgUOUlBEQ29udHJhY3RLZXkFDnJwZENvbnRyYWN0UHJtCQDMCAIJAQtTdHJpbmdFbnRyeQIFG05vZGVPcmFjbGVQcm92aWRlclB1YktleUtleQUbbm9kZU9yYWNsZVByb3ZpZGVyUHViS2V5UHJtCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRtCYWxhbmNlV2F2ZXNMb2NrSW50ZXJ2YWxLZXkFG2JhbGFuY2VXYXZlc0xvY2tJbnRlcnZhbFBybQkAzAgCCQEMSW50ZWdlckVudHJ5AgUeQmFsYW5jZU5ldXRyaW5vTG9ja0ludGVydmFsS2V5BR5iYWxhbmNlTmV1dHJpbm9Mb2NrSW50ZXJ2YWxQcm0JAMwIAgkBDEludGVnZXJFbnRyeQIJARVNaW5Ub2tlblN3YXBBbW91bnRLZXkBAgVXQVZFUwUVbWluV2F2ZXNTd2FwQW1vdW50UHJtCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRhNaW5OZXV0cmlub1N3YXBBbW91bnRLZXkFGG1pbk5ldXRyaW5vU3dhcEFtb3VudFBybQkAzAgCCQEMSW50ZWdlckVudHJ5AgUVTmV1dHJpbm9PdXRGZWVQYXJ0S2V5BRVuZXV0cmlub091dEZlZVBhcnRQcm0JAMwIAgkBDEludGVnZXJFbnRyeQIFEldhdmVzT3V0RmVlUGFydEtleQUSd2F2ZXNPdXRGZWVQYXJ0UHJtBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQENY29uc3RydWN0b3JWMgMMbWF0aENvbnRyYWN0E25zYnRTdGFraW5nQ29udHJhY3QUc3dhcHNUaW1lZnJhbWVCbG9ja3MEC2NoZWNrQ2FsbGVyCQEIdGhpc09ubHkBBQFpAwkAAAIFC2NoZWNrQ2FsbGVyBQtjaGVja0NhbGxlcgMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECE25vIHBheW1lbnRzIGFsbG93ZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUPTWF0aENvbnRyYWN0S2V5BQxtYXRoQ29udHJhY3QJAMwIAgkBC1N0cmluZ0VudHJ5AgUWTnNidFN0YWtpbmdDb250cmFjdEtleQUTbnNidFN0YWtpbmdDb250cmFjdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEXN3YXBzVGltZWZyYW1lS0VZAAUUc3dhcHNUaW1lZnJhbWVCbG9ja3MFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ1jb25zdHJ1Y3RvclYzBRFhc3NldHNXZWlnaHRzTWlucwZkUGFyYW0Ga1BhcmFtBmJQYXJhbQpkZWx0YVBhcmFtBAtjaGVja0NhbGxlcgkBCHRoaXNPbmx5AQUBaQMJAAACBQtjaGVja0NhbGxlcgULY2hlY2tDYWxsZXIDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhNubyBwYXltZW50cyBhbGxvd2VkCgEHcHJlcGFyZQIDYWNjBGl0ZW0EBXBhcnRzCQC1CQIFBGl0ZW0CAV8EB2Fzc2V0SWQJAJEDAgUFcGFydHMAAAQGd2VpZ2h0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAQQGbWluVmFsCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAgkAlAoCCQDNCAIIBQNhY2MCXzEFB2Fzc2V0SWQJAM0IAgkAzQgCCAUDYWNjAl8yCQEMSW50ZWdlckVudHJ5AgkBFmJhc2tldFdlaWdodEJ5QXNzZXRLZXkBBQdhc3NldElkBQZ3ZWlnaHQJAQxJbnRlZ2VyRW50cnkCCQEVTWluVG9rZW5Td2FwQW1vdW50S2V5AQUHYXNzZXRJZAUGbWluVmFsBAFyCgACJGwFEWFzc2V0c1dlaWdodHNNaW5zCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHcHJlcGFyZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQFyAl8yCQEMSW50ZWdlckVudHJ5AgkBCmJhc2tldERLZXkABQZkUGFyYW0JAQxJbnRlZ2VyRW50cnkCCQEKYmFza2V0S0tleQAFBmtQYXJhbQkBDEludGVnZXJFbnRyeQIJAQpiYXNrZXRCS2V5AAUGYlBhcmFtCQEMSW50ZWdlckVudHJ5AgkBEmJhc2tldExvZ2JEZWx0YUtleQAJAG0GBQpkZWx0YVBhcmFtAAYFBmJQYXJhbQAGAAYFBkhBTEZVUAkBC1N0cmluZ0VudHJ5AgkBD2Jhc2tldEFzc2V0c0tleQAJALkJAggFAXICXzEFA1NFUAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARNzd2FwVG9rZW5Ub05ldXRyaW5vAAMFEmlzRGlzYWJsZWRJc3N1ZVh0bgkAAgECFVhUTiBpc3N1ZSBpcyBkaXNhYmxlZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECLHN3YXBUb2tlblRvTmV1dHJpbm8gcmVxdWlyZSBvbmx5IG9uZSBwYXltZW50BANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQMYmFza2V0QXNzZXRzCQEFdmFsdWUBCQCiCAEJAQ9iYXNrZXRBc3NldHNLZXkABA1wbXRBc3NldElkU3RyCQDYBAEJAQt2YWx1ZU9yRWxzZQIIBQNwbXQHYXNzZXRJZAUHV0FWRVNJRAMJAQEhAQkBCGNvbnRhaW5zAgUMYmFza2V0QXNzZXRzBQ1wbXRBc3NldElkU3RyCQACAQkArAICCQCsAgIFDXBtdEFzc2V0SWRTdHICHSBpcyBub3Qgb25lIG9mIGJhc2tldCB0b2tlbnM6BQxiYXNrZXRBc3NldHMEC3VzZXJBZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQGdHhJZDU4CQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQEC3RvdGFsTG9ja2VkCQEPdG90YWxMb2NrZWRSRUFEAgILb3V0TmV1dHJpbm8FDXBtdEFzc2V0SWRTdHIECXBtdEFtb3VudAgFA3BtdAZhbW91bnQED3NhdmVUb3RhbExvY2tlZAkA/AcEBQR0aGlzAhNpbnRlcm5hbFNhdmVJbnRlZ2VyCQDMCAIJAQ50b3RhbExvY2tlZEtFWQICC291dE5ldXRyaW5vBQ1wbXRBc3NldElkU3RyCQDMCAIJAGQCBQt0b3RhbExvY2tlZAUJcG10QW1vdW50BQNuaWwFA25pbAMJAAACBQ9zYXZlVG90YWxMb2NrZWQFD3NhdmVUb3RhbExvY2tlZAkBCmNvbW1vblN3YXAGAgtvdXROZXV0cmlubwUJcG10QW1vdW50BQ1wbXRBc3NldElkU3RyBQt1c2VyQWRkcmVzcwUGdHhJZDU4AgAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEUc3dhcE5ldXRyaW5vVG9CYXNrZXQACQEUc3dhcE5ldXRyaW5vSW50ZXJuYWwCBQFpAgABaQEfc3dhcE5ldXRyaW5vVG9TaW5nbGVCYXNrZXRUb2tlbgEKYXNzZXRJZE91dAQMYmFza2V0QXNzZXRzCQC1CQIJAQV2YWx1ZQEJAKIIAQkBD2Jhc2tldEFzc2V0c0tleQAFA1NFUAMJAQEhAQkBD2NvbnRhaW5zRWxlbWVudAIFDGJhc2tldEFzc2V0cwUKYXNzZXRJZE91dAkAAgECL3Vua25vd24gYXNzZXRJZE91dCwgc2hvdWxkIGJlIG9uZSBvZiB0aGUgYmFza2V0AwkBAiE9AgUKYXNzZXRJZE91dAIFV0FWRVMJAAIBAi5jdXJyZW50bHkgb25seSBXQVZFUyBzdXBwb3J0ZWQgYXMgdGFyZ2V0IGFzc2V0BAdoZWFsdGh5CQEGYXNCb29sAQkA/AcEBRNwb29sc0ZhY2FkZUNvbnRyYWN0AhV3eFBvb2xIZWFsdGh5UkVBRE9OTFkFA25pbAUDbmlsAwkBASEBBQdoZWFsdGh5CQACAQIqV1ggcG9vbHMgZG93biwgY2Fubm90IHN3YXAgdG8gc2luZ2xlIHRva2VuCQEUc3dhcE5ldXRyaW5vSW50ZXJuYWwCBQFpBQphc3NldElkT3V0AWkBE2ludGVybmFsU2F2ZUludGVnZXICA2tleQZhbW91bnQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAihpbnRlcm5hbFNhdmVJbnRlZ2VyIGlzIG5vdCBwdWJsaWMgbWV0aG9kCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQNrZXkFBmFtb3VudAUDbmlsAWkBCHdpdGhkcmF3AwdhY2NvdW50BWluZGV4CHN3YXBUeElkBAR0eElkCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhNubyBwYXltZW50cyBhbGxvd2VkBA9uZXV0cmlub01ldHJpY3MJAQlhc0FueUxpc3QBCQD8BwQFDG1hdGhDb250cmFjdAIaY2FsY05ldXRpbm9NZXRyaWNzUkVBRE9OTFkFA25pbAUDbmlsBAJCUgkBBWFzSW50AQkAkQMCBQ9uZXV0cmlub01ldHJpY3MFDG5NZXRyaWNJZHhCUgQLdXNlckFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB2FjY291bnQECWRhdGFBcnJheQkBEnN3YXBEYXRhRmFpbE9yUkVBRAIFB2FjY291bnQFCHN3YXBUeElkBBBzZWxmVW5sb2NrSGVpZ2h0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZGF0YUFycmF5BRRzSWR4U2VsZlVubG9ja0hlaWdodAQIc3dhcFR5cGUJAJEDAgUJZGF0YUFycmF5BQxzSWR4U3dhcFR5cGUECGluQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZGF0YUFycmF5BQxzSWR4SW5BbW91bnQECnN3YXBTdGF0dXMJAJEDAgUJZGF0YUFycmF5BQpzSWR4U3RhdHVzBAtzdGFydEhlaWdodAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRhdGFBcnJheQUPc0lkeFN0YXJ0SGVpZ2h0BAdpbkFzc2V0CQCRAwIFCWRhdGFBcnJheQULc0lkeEluQXNzZXQEC291dEFzc2V0T3B0CQCRAwIFCWRhdGFBcnJheQUPc0lkeE91dEFzc2V0T3B0BAt0b3RhbExvY2tlZAkBD3RvdGFsTG9ja2VkUkVBRAIFCHN3YXBUeXBlBQdpbkFzc2V0BBF0b3RhbExvY2tlZEJ5VXNlcgkBFXRvdGFsTG9ja2VkQnlVc2VyUkVBRAMFCHN3YXBUeXBlBQdhY2NvdW50BQdpbkFzc2V0BAx1bmxvY2tIZWlnaHQFEHNlbGZVbmxvY2tIZWlnaHQEC2luZGV4SGVpZ2h0CQEVZ2V0SGVpZ2h0UHJpY2VCeUluZGV4AQUFaW5kZXgED3ByZXZJbmRleEhlaWdodAkBFWdldEhlaWdodFByaWNlQnlJbmRleAEJAGUCBQVpbmRleAABBAxwcmljZUJ5SW5kZXgJAQ9nZXRQcmljZUhpc3RvcnkBBQtpbmRleEhlaWdodAMFCWlzQmxvY2tlZAkBFWVtZXJnZW5jeVNodXRkb3duRkFJTAADCQECIT0CBQpzd2FwU3RhdHVzAgdQRU5ESU5HCQACAQIfc3dhcCBoYXMgYmVlbiBhbHJlYWR5IHByb2Nlc3NlZAMJAGYCBQx1bmxvY2tIZWlnaHQFBmhlaWdodAkAAgEJAKwCAgkArAICAhFwbGVhc2Ugd2FpdCBmb3I6IAkApAMBBQx1bmxvY2tIZWlnaHQCHyBibG9jayBoZWlnaHQgdG8gd2l0aGRyYXcgZnVuZHMDAwMJAGYCBQVpbmRleAUKcHJpY2VJbmRleAYJAGYCBQx1bmxvY2tIZWlnaHQFC2luZGV4SGVpZ2h0BgMJAQIhPQIFD3ByZXZJbmRleEhlaWdodAAACQBnAgUPcHJldkluZGV4SGVpZ2h0BQx1bmxvY2tIZWlnaHQHCQEOcHJpY2VJbmRleEZBSUwFBQVpbmRleAUKcHJpY2VJbmRleAULaW5kZXhIZWlnaHQFDHVubG9ja0hlaWdodAUPcHJldkluZGV4SGVpZ2h0BA13aXRoZHJhd1R1cGxlCQEMY2FsY1dpdGhkcmF3BwUIc3dhcFR5cGUFCGluQW1vdW50BQxwcmljZUJ5SW5kZXgFD25ldXRyaW5vTWV0cmljcwUHaW5Bc3NldAULb3V0QXNzZXRPcHQHBAxvdXROZXRBbW91bnQIBQ13aXRoZHJhd1R1cGxlAl8xBApvdXRBc3NldElkCAUNd2l0aGRyYXdUdXBsZQJfMgQKb3V0U3VyZkFtdAgFDXdpdGhkcmF3VHVwbGUCXzMECnVubGVhc2VBbXQIBQ13aXRoZHJhd1R1cGxlAl81BAxvdXRGZWVBbW91bnQIBQ13aXRoZHJhd1R1cGxlAl82BAtvdXRBbXRHcm9zcwgFDXdpdGhkcmF3VHVwbGUCXzcEDXdpdGhkcmF3UHJpY2UIBQ13aXRoZHJhd1R1cGxlAl84BA53aXRoZHJhd0Jhc2tldAgFDXdpdGhkcmF3VHVwbGUCXzkDAwkAAAIFCHN3YXBUeXBlAgtvdXROZXV0cmlubwkAZwIAAAULb3V0QW10R3Jvc3MHCQACAQITYmFsYW5jZSBlcXVhbHMgemVybwQNc3VyZkNvbmRpdGlvbgMJAGYCBQpvdXRTdXJmQW10AAAEC2lzc3VlUmVzdWx0CQD8BwQFD2F1Y3Rpb25Db250cmFjdAIJaXNzdWVTdXJmCQDMCAIFCm91dFN1cmZBbXQJAMwIAgUHYWNjb3VudAUDbmlsBQNuaWwDCQAAAgULaXNzdWVSZXN1bHQFC2lzc3VlUmVzdWx0AAAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAMJAAACBQ1zdXJmQ29uZGl0aW9uBQ1zdXJmQ29uZGl0aW9uBBF1bmxlYXNlSW52T3JFbXB0eQkA/AcEBQR0aGlzAhdpbnRlcm5hbFVubGVhc2VBbmRMZWFzZQkAzAgCBQp1bmxlYXNlQW10BQNuaWwFA25pbAMJAAACBRF1bmxlYXNlSW52T3JFbXB0eQURdW5sZWFzZUludk9yRW1wdHkECWduc2J0RGF0YQkBCWFzQW55TGlzdAEJAPwHBAUXZ25zYnRDb250cm9sbGVyQ29udHJhY3QCFGduc2J0SW5mb1NZU1JFQURPTkxZCQDMCAICAAkAzAgCAAAJAMwIAgAABQNuaWwFA25pbAQNZ25zYnRBbXRUb3RhbAkBBWFzSW50AQkAkQMCBQlnbnNidERhdGEAAQQVZ25zYnRBbXRGcm9tU3VyZlRvdGFsCQEFYXNJbnQBCQCRAwIJAQlhc0FueUxpc3QBCQCRAwIFCWduc2J0RGF0YQADAAMEDWNvbW1vbkFjdGlvbnMJAMwIAgkBDEludGVnZXJFbnRyeQIJARR0b3RhbExvY2tlZEJ5VXNlcktFWQMFCHN3YXBUeXBlBQdhY2NvdW50BQdpbkFzc2V0CQBlAgURdG90YWxMb2NrZWRCeVVzZXIFCGluQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG90YWxMb2NrZWRLRVkCBQhzd2FwVHlwZQUHaW5Bc3NldAkAZQIFC3RvdGFsTG9ja2VkBQhpbkFtb3VudAkAzAgCCQELU3RyaW5nRW50cnkCCQEHc3dhcEtFWQIFB2FjY291bnQFCHN3YXBUeElkCQEOZmluaXNoU3dhcERBVEEMBQlkYXRhQXJyYXkFDXdpdGhkcmF3UHJpY2UFDG91dE5ldEFtb3VudAUMb3V0RmVlQW1vdW50BQx1bmxvY2tIZWlnaHQFBWluZGV4BQR0eElkBQpvdXRTdXJmQW10BQJCUgUOd2l0aGRyYXdCYXNrZXQFB2luQXNzZXQFC291dEFzc2V0T3B0BQNuaWwKAQhkZXBvc2l0cwQIc3VyZkZlZXMIbnNidEZlZXMMc3VyZlBheW1lbnRzDG5zYnRQYXltZW50cwQLc3VyZkRlcG9zaXQDCQBmAgUIc3VyZkZlZXMAAAkBBWFzSW50AQkA/AcEBRNzdXJmU3Rha2luZ0NvbnRyYWN0AgdkZXBvc2l0BQNuaWwFDHN1cmZQYXltZW50cwAABAtuc2J0RGVwb3NpdAMJAGYCBQhuc2J0RmVlcwAACQEFYXNJbnQBCQD8BwQFE25zYnRTdGFraW5nQ29udHJhY3QCB2RlcG9zaXQFA25pbAUMbnNidFBheW1lbnRzAAAJAGQCBQtzdXJmRGVwb3NpdAULbnNidERlcG9zaXQKAQpkaXZpZGVGZWVzAQlmZWVBbW91bnQECHN1cmZBbXQxAwkBAiE9AgUNZ25zYnRBbXRUb3RhbAAACQBrAwUJZmVlQW1vdW50BRVnbnNidEFtdEZyb21TdXJmVG90YWwFDWduc2J0QW10VG90YWwAAAQIc3VyZkFtdDIDCQECIT0CBQ1nbnNidEFtdFRvdGFsAAAJAGsDBQlmZWVBbW91bnQJAGUCBQVNVUxUNgUCQlIFBU1VTFQ2AAAEB3N1cmZBbXQJAJYDAQkAzAgCBQhzdXJmQW10MQkAzAgCBQhzdXJmQW10MgUDbmlsBAduc2J0QW10CQBlAgUJZmVlQW1vdW50BQdzdXJmQW10CQDMCAIFB3N1cmZBbXQJAMwIAgUHbnNidEFtdAUDbmlsBAl0cmFuc2ZlcnMDCQAAAgUIc3dhcFR5cGUCCG91dE11bHRpBAZiYXNrZXQJALwJAgUOd2l0aGRyYXdCYXNrZXQCAV8KAQZsb29wZXICA2FjYwRpdGVtBAJpdAkAtQkCBQRpdGVtBQdMSVNUU0VQBAt0ZW1wQXNzZXRJZAkA2QQBCQCRAwIFAml0AAAEB2Fzc2V0SWQDCQAAAgULdGVtcEFzc2V0SWQFB1dBVkVTSUQFBHVuaXQFC3RlbXBBc3NldElkBAluZXRBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJpdAACBAlmZWVBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJpdAADBARmZWVzCQEKZGl2aWRlRmVlcwEFCWZlZUFtb3VudAkAlwoFCQDNCAIIBQNhY2MCXzEJAQ5TY3JpcHRUcmFuc2ZlcgMFC3VzZXJBZGRyZXNzBQluZXRBbW91bnQFB2Fzc2V0SWQJAM0IAggFA2FjYwJfMgkBD0F0dGFjaGVkUGF5bWVudAIFB2Fzc2V0SWQJAJEDAgUEZmVlcwAACQDNCAIIBQNhY2MCXzMJAQ9BdHRhY2hlZFBheW1lbnQCBQdhc3NldElkCQCRAwIFBGZlZXMAAQkAZAIIBQNhY2MCXzQJAJEDAgUEZmVlcwAACQBkAggFA2FjYwJfNQkAkQMCBQRmZWVzAAEEAXIKAAIkbAUGYmFza2V0CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlwoFBQNuaWwFA25pbAUDbmlsAAAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEGbG9vcGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBApkZXBvUmVzdWx0CQEIZGVwb3NpdHMECAUBcgJfNAgFAXICXzUIBQFyAl8yCAUBcgJfMwkAlAoCCAUBcgJfMQUKZGVwb1Jlc3VsdAQEZmVlcwkBCmRpdmlkZUZlZXMBBQxvdXRGZWVBbW91bnQECmRlcG9SZXN1bHQJAQhkZXBvc2l0cwQJAJEDAgUEZmVlcwAACQCRAwIFBGZlZXMAAQkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUKb3V0QXNzZXRJZAkAkQMCBQRmZWVzAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUKb3V0QXNzZXRJZAkAkQMCBQRmZWVzAAEFA25pbAkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFC3VzZXJBZGRyZXNzBQxvdXROZXRBbW91bnQFCm91dEFzc2V0SWQFA25pbAUKZGVwb1Jlc3VsdAkAlAoCCQDOCAIFDWNvbW1vbkFjdGlvbnMIBQl0cmFuc2ZlcnMCXzEIBQl0cmFuc2ZlcnMCXzIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEXaW50ZXJuYWxVbmxlYXNlQW5kTGVhc2UBDXVubGVhc2VBbW91bnQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAixpbnRlcm5hbFVubGVhc2VBbmRMZWFzZSBpcyBub3QgcHVibGljIG1ldGhvZAkBFnByZXBhcmVVbmxlYXNlQW5kTGVhc2UBBQ11bmxlYXNlQW1vdW50AWkBEnRyYW5zZmVyVXNkblRvVXNlcgIGYW1vdW50BGFkZHIDCQECIT0CCAUBaQZjYWxsZXIFD2F1Y3Rpb25Db250cmFjdAkAAgECI09ubHkgYXVjdGlvbiBjb250cmFjdCBpcyBhdXRob3JpemVkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBGFkZHIFBmFtb3VudAUPbmV1dHJpbm9Bc3NldElkBQNuaWwBaQELYWNjZXB0V2F2ZXMAAwMJAQIhPQIIBQFpBmNhbGxlcgUPYXVjdGlvbkNvbnRyYWN0CQECIT0CCAUBaQZjYWxsZXIFC2dvdkNvbnRyYWN0BwkAAgECQ0N1cnJlbnRseSBvbmx5IGF1Y3Rpb24gYW5kIGdvdmVybmFuY2UgY29udHJhY3RzIGFyZSBhbGxvd2VkIHRvIGNhbGwJAJQKAgkBFnByZXBhcmVVbmxlYXNlQW5kTGVhc2UBAAACB3N1Y2Nlc3MBaQEPYXBwcm92ZUxlYXNpbmdzAwZuTGlzdFMIZ3JvdXBOdW0EbEFtdAQFbklkeHMJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwUDbmlsBAdtbmdQdWJTCQELdmFsdWVPckVsc2UCCQCiCAECHCVzJXNfX2NmZ19fbGVhc2luZ01hbmFnZXJQdWICLDdBVU1YNTR1a1lNWXZQbW1hN3lvRmY1TmpaaHM0QnU1bnozRXo5RVY4c3VyBAZtbmdQdWIJANkEAQUHbW5nUHViUwQObm9kZVJlZ0FkZHJTdHIJAQt2YWx1ZU9yRWxzZQIJAKIIAQIfJXMlc19fY2ZnX19ub2Rlc1JlZ2lzdHJ5QWRkcmVzcwIjM1A5dktxUUtqVWRtcFhBZmlXYXU4a3JSRVlBWTFYcjY5cEUEC25vZGVSZWdBZGRyCQERQGV4dHJOYXRpdmUoMTA2MikBBQ5ub2RlUmVnQWRkclN0cgQRbEdyb3VwTm9kZUxpc3RLRVkJARhnZXRMZWFzZUdyb3VwTm9kZUxpc3RLZXkBBQhncm91cE51bQQKbEdyTm9kZU9wdAkAnQgCBQR0aGlzBRFsR3JvdXBOb2RlTGlzdEtFWQMJAQlpc0RlZmluZWQBBQpsR3JOb2RlT3B0CQACAQkArAICCQCsAgICBmdyb3VwIAkApAMBBQhncm91cE51bQIUIGFscmVhZHkgaW5pdGlhbGl6ZWQEBW5MaXN0CQC1CQIFBm5MaXN0UwUDU0VQBAhleHBDb3VudAkAkAMBBQVuSWR4cwMJAQIhPQIIBQFpD2NhbGxlclB1YmxpY0tleQUGbW5nUHViCQACAQIeYXBwcm92ZUxlYXNpbmdzIG5vdCBhdXRob3JpemVkBA0kdDA1MDgyNjUwODg4CQEMcmVhZE5vZGVJbmZvAQAABAZuQWRkcjAIBQ0kdDA1MDgyNjUwODg4Al8xBAhsQW10S0VZMAgFDSR0MDUwODI2NTA4ODgCXzIEBWxBbXQwCAUNJHQwNTA4MjY1MDg4OAJfMwQHbElkS0VZMAgFDSR0MDUwODI2NTA4ODgCXzQEBGxJZDAIBQ0kdDA1MDgyNjUwODg4Al81BAVuZXdMMAkAxAgCBQZuQWRkcjAJAGUCBQVsQW10MAkAaAIFBGxBbXQFCGV4cENvdW50BAp2YWxpZGF0aW9uCQD8BwQFC25vZGVSZWdBZGRyAhp2YWxpZGF0ZUFuZEFwcHJvdmVMZWFzaW5ncwkAzAgCBQZuTGlzdFMFA25pbAUDbmlsAwkAAAIFCnZhbGlkYXRpb24FCnZhbGlkYXRpb24KASNmb3JFYWNoTm9kZVZhbGlkYXRlQW5kR2VuZXJhdGVMZWFzZQIBYQFpBARub2RlCQCRAwIFBW5MaXN0BQFpBAJsYQkAxAgCCQERQGV4dHJOYXRpdmUoMTA2MikBBQRub2RlBQRsQW10CQDOCAIFAWEJAMwIAgUCbGEJAMwIAgkBC0JpbmFyeUVudHJ5AgkBFmdldExlYXNlSWRCeUFkZHJlc3NLZXkBBQRub2RlCQEFbGNhbGMBBQJsYQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGmdldExlYXNlQW1vdW50QnlBZGRyZXNzS2V5AQUEbm9kZQUEbEFtdAUDbmlsCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgURbEdyb3VwTm9kZUxpc3RLRVkFBm5MaXN0UwkAzAgCCQELQmluYXJ5RW50cnkCBQdsSWRLRVkwCQEFbGNhbGMBBQVuZXdMMAkAzAgCCQEMSW50ZWdlckVudHJ5AgUIbEFtdEtFWTAIBQVuZXdMMAZhbW91bnQJAMwIAgkBC0xlYXNlQ2FuY2VsAQUEbElkMAkAzAgCBQVuZXdMMAUDbmlsCgACJGwFBW5JZHhzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJASNmb3JFYWNoTm9kZVZhbGlkYXRlQW5kR2VuZXJhdGVMZWFzZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgOAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQERcmViYWxhbmNlTGVhc2luZ3MCBmFtb3VudAhncm91cE51bQQHbW5nUHViUwkBC3ZhbHVlT3JFbHNlAgkAoggBAhwlcyVzX19jZmdfX2xlYXNpbmdNYW5hZ2VyUHViAiw3QVVNWDU0dWtZTVl2UG1tYTd5b0ZmNU5qWmhzNEJ1NW56M0V6OUVWOHN1cgQGbW5nUHViCQDZBAEFB21uZ1B1YlMDCQECIT0CCAUBaQ9jYWxsZXJQdWJsaWNLZXkFBm1uZ1B1YgkAAgECIHJlYmFsYW5jZUxlYXNpbmdzIG5vdCBhdXRob3JpemVkBBFsR3JvdXBOb2RlTGlzdEtFWQkBGGdldExlYXNlR3JvdXBOb2RlTGlzdEtleQEFCGdyb3VwTnVtBAVuTGlzdAkAtQkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUEdGhpcwURbEdyb3VwTm9kZUxpc3RLRVkFA1NFUAMJAGYCAAEJAJADAQUFbkxpc3QJAAIBCQCsAgICDEVtcHR5IGdyb3VwIAkApAMBBQhncm91cE51bQQKdW5sZWFzZUFtdAkAZAIJAGkCBQZhbW91bnQJAJADAQUFbkxpc3QAAQQNJHQwNTIyNDk1MjMxMQkBDHJlYWROb2RlSW5mbwEAAAQGbkFkZHIwCAUNJHQwNTIyNDk1MjMxMQJfMQQIbEFtdEtFWTAIBQ0kdDA1MjI0OTUyMzExAl8yBAVsQW10MAgFDSR0MDUyMjQ5NTIzMTECXzMEB2xJZEtFWTAIBQ0kdDA1MjI0OTUyMzExAl80BARsSWQwCAUNJHQwNTIyNDk1MjMxMQJfNQoBFGZvckVhY2hOb2RlRG9VbmxlYXNlAgFhBG5vZGUEBmxJZEtFWQkBFmdldExlYXNlSWRCeUFkZHJlc3NLZXkBBQRub2RlBANsSWQJARFAZXh0ck5hdGl2ZSgxMDUyKQIFBHRoaXMFBmxJZEtFWQQHbEFtdEtFWQkBGmdldExlYXNlQW1vdW50QnlBZGRyZXNzS2V5AQUEbm9kZQQEbEFtdAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUHbEFtdEtFWQkAzggCBQFhCQEVTGVhc2luZ1JlbGF0ZWRBY3Rpb25zBQkBEUBleHRyTmF0aXZlKDEwNjIpAQUEbm9kZQkAZQIFBGxBbXQFCnVubGVhc2VBbXQFA2xJZAUGbElkS0VZBQdsQW10S0VZCQDOCAIKAAIkbAUFbkxpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBFGZvckVhY2hOb2RlRG9VbmxlYXNlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA4CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAkBFUxlYXNpbmdSZWxhdGVkQWN0aW9ucwUFBm5BZGRyMAkAZAIFBWxBbXQwCQBoAgUKdW5sZWFzZUFtdAkAkAMBBQVuTGlzdAUEbElkMAUHbElkS0VZMAUIbEFtdEtFWTABaQEbc3dhcFBhcmFtc0J5VXNlclNZU1JFQURPTkxZAg51c2VyQWRkcmVzc1N0cglnbnNidERpZmYECWduc2J0RGF0YQkBCWFzQW55TGlzdAEJAPwHBAUXZ25zYnRDb250cm9sbGVyQ29udHJhY3QCFGduc2J0SW5mb1NZU1JFQURPTkxZCQDMCAIFDnVzZXJBZGRyZXNzU3RyCQDMCAIAAAkAzAgCAAAFA25pbAUDbmlsBAhnbnNidEFtdAkAZAIJAQVhc0ludAEJAJEDAgUJZ25zYnREYXRhAAAFCWduc2J0RGlmZgQNZ25zYnRBbXRUb3RhbAkAZAIJAQVhc0ludAEJAJEDAgUJZ25zYnREYXRhAAEFCWduc2J0RGlmZgQNc3dhcExpbWl0RGF0YQkBCWFzQW55TGlzdAEJAPwHBAUMbWF0aENvbnRyYWN0AhVjYWxjU3dhcExpbWl0UkVBRE9OTFkJAMwIAgUIZ25zYnRBbXQFA25pbAUDbmlsBBZ0b2tlblN3YXBMaW1pdEluVXNkTWF4CQEFYXNJbnQBCQCRAwIFDXN3YXBMaW1pdERhdGEAAAQQdXNkblN3YXBMaW1pdE1heAkBBWFzSW50AQkAkQMCBQ1zd2FwTGltaXREYXRhAAIEDmxhc3RTd2FwSGVpZ2h0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARVrZXlVc2VyTGFzdFN3YXBIZWlnaHQBBQ51c2VyQWRkcmVzc1N0cgAABBdzd2FwTGltaXRUaW1lbGlmZUJsb2NrcwkBEnN3YXBzVGltZWZyYW1lUkVBRAAEGXBhc3NlZEJsb2Nrc0FmdGVyTGFzdFN3YXAJAGUCBQZoZWlnaHQFDmxhc3RTd2FwSGVpZ2h0BBFpc1N3YXBUaW1lbGlmZU5ldwkAZwIFGXBhc3NlZEJsb2Nrc0FmdGVyTGFzdFN3YXAFF3N3YXBMaW1pdFRpbWVsaWZlQmxvY2tzBBRzd2FwTGltaXRTcGVudEluVXNkbgMFEWlzU3dhcFRpbWVsaWZlTmV3AAAJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBGGtleVN3YXBVc2VyU3BlbnRJblBlcmlvZAEFDnVzZXJBZGRyZXNzU3RyAAAEDmJsY2tzMkxtdFJlc2V0AwURaXNTd2FwVGltZWxpZmVOZXcAAAkAZQIFF3N3YXBMaW1pdFRpbWVsaWZlQmxvY2tzBRlwYXNzZWRCbG9ja3NBZnRlckxhc3RTd2FwCQCUCgIFA25pbAkAmQoHBRZ0b2tlblN3YXBMaW1pdEluVXNkTWF4BRRzd2FwTGltaXRTcGVudEluVXNkbgUOYmxja3MyTG10UmVzZXQFCGduc2J0QW10BQ1nbnNidEFtdFRvdGFsAAAFEHVzZG5Td2FwTGltaXRNYXgBaQEdY2FsY1dpdGhkcmF3UmVzdWx0U1lTUkVBRE9OTFkFCHN3YXBUeXBlCGluQW1vdW50BXByaWNlB2luQXNzZXQLb3V0QXNzZXRPcHQED25ldXRyaW5vTWV0cmljcwkBCWFzQW55TGlzdAEJAPwHBAUMbWF0aENvbnRyYWN0AhpjYWxjTmV1dGlub01ldHJpY3NSRUFET05MWQUDbmlsBQNuaWwJAJQKAgUDbmlsCQEMY2FsY1dpdGhkcmF3BwUIc3dhcFR5cGUFCGluQW1vdW50BQVwcmljZQUPbmV1dHJpbm9NZXRyaWNzBQdpbkFzc2V0BQtvdXRBc3NldE9wdAYBaQEUcmVwbGFjZUNvbW11bml0eU5vZGUECm9sZEFkZHJTdHIKbmV3QWRkclN0cghncm91cE51bQ1wZW5hbHR5QW1vdW50BAdtbmdQdWJTCQELdmFsdWVPckVsc2UCCQCiCAECHCVzJXNfX2NmZ19fbGVhc2luZ01hbmFnZXJQdWICLDdBVU1YNTR1a1lNWXZQbW1hN3lvRmY1TmpaaHM0QnU1bnozRXo5RVY4c3VyBAZtbmdQdWIJANkEAQUHbW5nUHViUwMJAQIhPQIIBQFpD2NhbGxlclB1YmxpY0tleQUGbW5nUHViCQACAQIjcmVwbGFjZUNvbW11bml0eU5vZGUgbm90IGF1dGhvcml6ZWQECGdyb3VwS2V5CQEYZ2V0TGVhc2VHcm91cE5vZGVMaXN0S2V5AQUIZ3JvdXBOdW0EDmdyb3VwTm9kZUxpc3RTCQEPZ2V0U3RyaW5nT3JGYWlsAgUEdGhpcwUIZ3JvdXBLZXkDCQEBIQEJAQhjb250YWlucwIFDmdyb3VwTm9kZUxpc3RTBQpvbGRBZGRyU3RyCQACAQkArAICCQCsAgIJAKwCAgIGR3JvdXAgCQCkAwEFCGdyb3VwTnVtAhogZG9lcyBub3QgY29udGFpbiBhZGRyZXNzIAUKb2xkQWRkclN0cgQJZG9SZXBsYWNlCQD8BwQFFG5vZGVSZWdpc3RyeUNvbnRyYWN0AhNyZXBsYWNlQXBwcm92ZWROb2RlCQDMCAIFCm9sZEFkZHJTdHIJAMwIAgUKbmV3QWRkclN0cgkAzAgCBQhncm91cE51bQkAzAgCBQ1wZW5hbHR5QW1vdW50BQNuaWwFA25pbAMJAAACBQlkb1JlcGxhY2UFCWRvUmVwbGFjZQQNb2xkTGVhc2VJZEtleQkBFmdldExlYXNlSWRCeUFkZHJlc3NLZXkBBQpvbGRBZGRyU3RyBA5vbGRMZWFzZUFtdEtleQkBGmdldExlYXNlQW1vdW50QnlBZGRyZXNzS2V5AQUKb2xkQWRkclN0cgQIbGVhc2VBbXQJARFAZXh0ck5hdGl2ZSgxMDU1KQEFDm9sZExlYXNlQW10S2V5BA1uZXdMZWFzZUlkS2V5CQEWZ2V0TGVhc2VJZEJ5QWRkcmVzc0tleQEFCm5ld0FkZHJTdHIEDm5ld0xlYXNlQW10S2V5CQEaZ2V0TGVhc2VBbW91bnRCeUFkZHJlc3NLZXkBBQpuZXdBZGRyU3RyBBV1cGRhdGVkR3JvdXBOb2RlTGlzdFMJALkJAgkAtQkCBQ5ncm91cE5vZGVMaXN0UwUKb2xkQWRkclN0cgUKbmV3QWRkclN0cgkAlAoCCQDOCAIJAMwIAgkBC0RlbGV0ZUVudHJ5AQUNb2xkTGVhc2VJZEtleQkAzAgCCQELRGVsZXRlRW50cnkBBQ5vbGRMZWFzZUFtdEtleQkAzAgCCQELU3RyaW5nRW50cnkCBQhncm91cEtleQUVdXBkYXRlZEdyb3VwTm9kZUxpc3RTBQNuaWwJARVMZWFzaW5nUmVsYXRlZEFjdGlvbnMFCQERQGV4dHJOYXRpdmUoMTA2MikBBQpuZXdBZGRyU3RyBQhsZWFzZUFtdAkBEUBleHRyTmF0aXZlKDEwNTcpAQUNb2xkTGVhc2VJZEtleQUNbmV3TGVhc2VJZEtleQUObmV3TGVhc2VBbXRLZXkFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQETcmVtb3ZlQ29tbXVuaXR5Tm9kZQMKb2xkQWRkclN0cghncm91cE51bQ1wZW5hbHR5QW1vdW50BAdtbmdQdWJTCQELdmFsdWVPckVsc2UCCQCiCAECHCVzJXNfX2NmZ19fbGVhc2luZ01hbmFnZXJQdWICLDdBVU1YNTR1a1lNWXZQbW1hN3lvRmY1TmpaaHM0QnU1bnozRXo5RVY4c3VyBAZtbmdQdWIJANkEAQUHbW5nUHViUwMJAQIhPQIIBQFpD2NhbGxlclB1YmxpY0tleQUGbW5nUHViCQACAQIicmVtb3ZlQ29tbXVuaXR5Tm9kZSBub3QgYXV0aG9yaXplZAQIZ3JvdXBLZXkJARhnZXRMZWFzZUdyb3VwTm9kZUxpc3RLZXkBBQhncm91cE51bQQOZ3JvdXBOb2RlTGlzdFMJAQ9nZXRTdHJpbmdPckZhaWwCBQR0aGlzBQhncm91cEtleQMJAQEhAQkBCGNvbnRhaW5zAgUOZ3JvdXBOb2RlTGlzdFMFCm9sZEFkZHJTdHIJAAIBCQCsAgIJAKwCAgkArAICAgZHcm91cCAJAKQDAQUIZ3JvdXBOdW0CGiBkb2VzIG5vdCBjb250YWluIGFkZHJlc3MgBQpvbGRBZGRyU3RyBAhkb1JlbW92ZQkA/AcEBRRub2RlUmVnaXN0cnlDb250cmFjdAIScmVtb3ZlQXBwcm92ZWROb2RlCQDMCAIFCm9sZEFkZHJTdHIJAMwIAgUNcGVuYWx0eUFtb3VudAUDbmlsBQNuaWwDCQAAAgUIZG9SZW1vdmUFCGRvUmVtb3ZlBA1vbGRMZWFzZUlkS2V5CQEWZ2V0TGVhc2VJZEJ5QWRkcmVzc0tleQEFCm9sZEFkZHJTdHIEDm9sZExlYXNlQW10S2V5CQEaZ2V0TGVhc2VBbW91bnRCeUFkZHJlc3NLZXkBBQpvbGRBZGRyU3RyBAhsZWFzZUFtdAkBEUBleHRyTmF0aXZlKDEwNTUpAQUOb2xkTGVhc2VBbXRLZXkEDSR0MDU2NzM3NTY4NjEJAQxyZWFkTm9kZUluZm8BAAAEBm5BZGRyMAgFDSR0MDU2NzM3NTY4NjECXzEECGxBbXRLRVkwCAUNJHQwNTY3Mzc1Njg2MQJfMgQFbEFtdDAIBQ0kdDA1NjczNzU2ODYxAl8zBAdsSWRLRVkwCAUNJHQwNTY3Mzc1Njg2MQJfNAQEbElkMAgFDSR0MDU2NzM3NTY4NjECXzUEFXVwZGF0ZWRHcm91cE5vZGVMaXN0UwkBEXJlbW92ZUZyb21MaXN0U3RyAwUOZ3JvdXBOb2RlTGlzdFMFA1NFUAUKb2xkQWRkclN0cgkAlAoCCQDOCAIJAMwIAgkBC0RlbGV0ZUVudHJ5AQUNb2xkTGVhc2VJZEtleQkAzAgCCQELRGVsZXRlRW50cnkBBQ5vbGRMZWFzZUFtdEtleQkAzAgCCQELU3RyaW5nRW50cnkCBQhncm91cEtleQUVdXBkYXRlZEdyb3VwTm9kZUxpc3RTCQDMCAIJAQtMZWFzZUNhbmNlbAEFBGxJZDAFA25pbAkBFUxlYXNpbmdSZWxhdGVkQWN0aW9ucwUFBm5BZGRyMAkAZAIFBWxBbXQwBQhsZWFzZUFtdAkBEUBleHRyTmF0aXZlKDEwNTcpAQUNb2xkTGVhc2VJZEtleQUHbElkS0VZMAUIbEFtdEtFWTAFBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkABBNwdWJLZXlBZG1pbnNMaXN0U3RyCQC5CQIJAMwIAgIsRXh0RUVLMTlubUtqOW1DcG5XeXZFRUpGWUFUTE1jVkVNdm9oaFVIa3lITm0JAMwIAgIsRXY1cHk1RmZCUVg5Y1pwWUtuZlFyVEI0OUJ5ZjhRbXBaV2VEVlJpbTR5VjcJAMwIAgIsRFV1dUxqWHU5OG5Cd1pjN2Zxd0NUanRBM25uUndnVGJrTVNyNVNVMk5tRFIJAMwIAgIsRFV1dUxqWHU5OG5Cd1pjN2Zxd0NUanRBM25uUndnVGJrTVNyNVNVMk5tRFIFA25pbAUDU0VQBBBwdWJLZXlBZG1pbnNMaXN0CQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPY29udHJvbENvbnRyYWN0Agwlc19fbXVsdGlzaWcFE3B1YktleUFkbWluc0xpc3RTdHIFA1NFUAQFY291bnQJAGQCCQBkAgkAZAIDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACQDZBAEJAJEDAgUQcHViS2V5QWRtaW5zTGlzdAAAAAEAAAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEJANkEAQkAkQMCBRBwdWJLZXlBZG1pbnNMaXN0AAEAAQAAAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAgkA2QQBCQCRAwIFEHB1YktleUFkbWluc0xpc3QAAgABAAADCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwADCQDZBAEJAJEDAgUQcHViS2V5QWRtaW5zTGlzdAADAAIAAAMDBQlpc0Jsb2NrZWQJAAACCQERQGV4dHJOYXRpdmUoMTA1MykCBQ9jb250cm9sQ29udHJhY3QCEWlzX2Jsb2NrZWRfY2FsbGVyCQClCAEFC2dvdkNvbnRyYWN0BwkBDnZhbGlkYXRlVXBkYXRlAQUCdHgEByRtYXRjaDAFAnR4AwkAAQIFByRtYXRjaDACFVNwb25zb3JGZWVUcmFuc2FjdGlvbgQJc3BvbnNvclR4BQckbWF0Y2gwAwkBG2NoZWNrSXNWYWxpZE1pblNwb25zb3JlZEZlZQEFCXNwb25zb3JUeAkAZwIFBWNvdW50AAMHCQBnAgUFY291bnQAA9zuZcc=", "height": 2734869, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AvNrG9CVaJFj6kotychDAMghmhwuteNvXQXQompHiRyE Next: none Diff:
OldNewDifferences
8282
8383 func x (m) = {
8484 let n = m
85- if ($isInstanceOf(n, "(Int, Int, Int, Int, Int, Int, Int)"))
85+ if ($isInstanceOf(n, "Boolean"))
8686 then {
8787 let y = n
8888 y
89+ }
90+ else throw("fail to cast into Boolean")
91+ }
92+
93+
94+func z (m) = {
95+ let n = m
96+ if ($isInstanceOf(n, "(Int, Int, Int, Int, Int, Int, Int)"))
97+ then {
98+ let A = n
99+ A
89100 }
90101 else throw("fail to cast into Tuple5 ints")
91102 }
92103
93104
94-let z = "__"
105+func B (C,D,E) = {
106+ let F = split(C, D)
107+ let G = valueOrErrorMessage(indexOf(F, E), ((C + "does not contain ") + E))
108+ makeString(removeByIndex(F, G), D)
109+ }
95110
96-let A = ":"
97111
98-let B = 100000000
112+let H = "__"
99113
100-let C = 1000000
114+let I = ":"
101115
102-let D = 20000
116+let J = 100000000
103117
104-let E = 5000
118+let K = 1000000
105119
106-let F = 150000
120+let L = 20000
107121
108-let G = 100000
122+let M = 5000
109123
110-let H = base58'WAVES'
124+let N = 150000
111125
112-let I = 0
126+let O = 100000
113127
114-let J = 1
128+let P = base58'WAVES'
115129
116-let K = 2
130+let Q = 28800000
117131
118-let L = 3
132+let R = 100000
119133
120-let M = 4
134+let S = 86400000
121135
122-let N = 5
136+let T = 1000000000000
123137
124-let O = 6
138+let U = 30000000000000
125139
126-let P = 7
140+func V () = "%s__wavesWithdrawnToday"
127141
128-let Q = 8
129142
130-let R = 9
143+func W () = "%s__wavesWithdrawnTotal"
131144
132-let S = 10
133145
134-let T = 11
146+func X () = "%s__lastWavesWithdrawalDay"
135147
136-let U = 12
137148
138-let V = 13
139-
140-let W = 14
141-
142-let X = 15
143-
144-let Y = 16
149+let Y = 0
145150
146151 let Z = 1
147152
169174
170175 let al = 13
171176
172-func am () = "%s%s__config__controlAddress"
177+let am = 14
178+
179+let an = 15
180+
181+let ao = 16
182+
183+let ap = 1
184+
185+let aq = 2
186+
187+let ar = 3
188+
189+let as = 4
190+
191+let at = 5
192+
193+let au = 6
194+
195+let av = 7
196+
197+let aw = 8
198+
199+let ax = 9
200+
201+let ay = 10
202+
203+let az = 11
204+
205+let aA = 12
206+
207+let aB = 13
208+
209+let aC = 15
210+
211+func aD () = "%s%s__config__controlAddress"
173212
174213
175-func an () = "%s__controlConfig"
214+func aE () = "%s__controlConfig"
176215
177216
178-func ao (ap) = split_4C(a(ap, an()), z)
217+func aF (aG) = split_4C(a(aG, aE()), H)
179218
180219
181-func aq (ar,as) = valueOrErrorMessage(addressFromString(ar[as]), ("Control cfg doesn't contain address at index " + toString(as)))
220+func aH (aI,G) = valueOrErrorMessage(addressFromString(aI[G]), ("Control cfg doesn't contain address at index " + toString(G)))
182221
183222
184-let at = addressFromStringValue(valueOrElse(getString(this, am()), "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx"))
223+let aJ = addressFromStringValue(valueOrElse(getString(this, aD()), "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx"))
185224
186-let ar = ao(at)
225+let aI = aF(aJ)
187226
188-let au = aq(ar, ac)
227+let aK = aH(aI, as)
189228
190-let av = aq(ar, ag)
229+let aL = aH(aI, aw)
191230
192-let aw = aq(ar, ai)
231+let aM = aH(aI, ay)
193232
194-let ax = aq(ar, aj)
233+let aN = aH(aI, az)
195234
196-let ay = aq(ar, aa)
235+let aO = aH(aI, aq)
197236
198-let az = aq(ar, af)
237+let aP = aH(aI, av)
199238
200-let aA = aq(ar, al)
239+let aQ = aH(aI, aB)
201240
202-let aB = "neutrino_asset_id"
241+let aR = aH(aI, aC)
203242
204-let aC = "bond_asset_id"
243+let aS = "neutrino_asset_id"
205244
206-let aD = "auction_contract"
245+let aT = "bond_asset_id"
207246
208-let aE = "nsbtStakingContract"
247+let aU = "auction_contract"
209248
210-let aF = "liquidation_contract"
249+let aV = "nsbtStakingContract"
211250
212-let aG = "rpd_contract"
251+let aW = "liquidation_contract"
213252
214-let aH = "control_contract"
253+let aX = "rpd_contract"
215254
216-let aI = "math_contract"
255+let aY = "control_contract"
217256
218-let aJ = "balance_waves_lock_interval"
257+let aZ = "math_contract"
219258
220-let aK = "balance_neutrino_lock_interval"
259+let ba = "balance_waves_lock_interval"
221260
222-func aL (aM) = ("min_outNeutrino_swap_amount_" + aM)
261+let bb = "balance_neutrino_lock_interval"
262+
263+func bc (bd) = ("min_outNeutrino_swap_amount_" + bd)
223264
224265
225-let aN = "min_outMulti_swap_amount"
266+let be = "min_outMulti_swap_amount"
226267
227-let aO = "min_neutrino_swap_amount"
268+let bf = "min_neutrino_swap_amount"
228269
229-let aP = "node_oracle_provider"
270+let bg = "node_oracle_provider"
230271
231-let aQ = "neutrinoOut_swap_feePart"
272+let bh = "neutrinoOut_swap_feePart"
232273
233-let aR = "wavesOut_swap_feePart"
274+let bi = "wavesOut_swap_feePart"
234275
235-let aS = "multiOut_swap_feePart"
276+let bj = "multiOut_swap_feePart"
236277
237-func aT (b) = ("%s__" + b)
278+func bk (b) = ("%s__" + b)
238279
239280
240-let aU = "price"
281+let bl = "price"
241282
242-let aV = "price_index"
283+let bm = "price_index"
243284
244-let aW = "is_blocked"
285+let bn = "is_blocked"
245286
246-func aX (aY) = ((aU + "_") + toString(aY))
287+let bo = "xtn_issue_disabled"
288+
289+func bp (bq) = ((bl + "_") + toString(bq))
247290
248291
249-func aZ (ba) = ((aV + "_") + toString(ba))
292+func br (bs) = ((bm + "_") + toString(bs))
250293
251294
252-func bb (as) = g(makeString(["%s%d%s", "lease", toString(as), "nodeAddress"], z))
295+func bt (G) = g(makeString(["%s%d%s", "lease", toString(G), "nodeAddress"], H))
253296
254297
255-func bc (as) = addressFromStringValue(bb(as))
298+func bu (G) = addressFromStringValue(bt(G))
256299
257300
258-func bd () = valueOrElse(getInteger(this, makeString(["%s%s", "lease", "sponsorshipWavesReserve"], z)), (1000 * B))
301+func bv () = valueOrElse(getInteger(this, makeString(["%s%s", "lease", "sponsorshipWavesReserve"], H)), (1000 * J))
259302
260303
261-func be (bf) = ("balance_unlock_block_" + bf)
304+func bw (bx) = ("balance_unlock_block_" + bx)
262305
263306
264-func bg (bh) = makeString(["%s%d%s", "lease", toString(bh), "id"], z)
307+func by (bz) = makeString(["%s%d%s", "lease", toString(bz), "id"], H)
265308
266309
267-func bi (bj) = makeString(["%s%s%s", "leaseByAddress", bj, "id"], z)
310+func bA (bB) = makeString(["%s%s%s", "leaseByAddress", bB, "id"], H)
268311
269312
270-func bk (bh) = makeString(["%s%d%s", "lease", toString(bh), "amount"], z)
313+func bC (bz) = makeString(["%s%d%s", "lease", toString(bz), "amount"], H)
271314
272315
273-func bl (bj) = makeString(["%s%s%s", "leaseByAddress", bj, "amount"], z)
316+func bD (bB) = makeString(["%s%s%s", "leaseByAddress", bB, "amount"], H)
274317
275318
276-func bm (bn) = makeString(["%s%d%s", "leaseGroup", toString(bn), "nodeList"], z)
319+func bE (bF) = makeString(["%s%d%s", "leaseGroup", toString(bF), "nodeList"], H)
277320
278321
279-func bo (bp) = (("min_" + bp) + "_swap_amount")
322+func bG (bH) = (("min_" + bH) + "_swap_amount")
280323
281324
282-func bq (bp,aM) = makeString(["%s%s%s", "balanceLock", bp, aM], z)
325+func bI (bH,bd) = makeString(["%s%s%s", "balanceLock", bH, bd], H)
283326
284327
285-func br (bp,bf,aM) = makeString(["%s%s%s%s", "balanceLock", bp, bf, aM], "_")
328+func bJ (bH,bx,bd) = makeString(["%s%s%s%s", "balanceLock", bH, bx, bd], "_")
286329
287330
288-func bs (bp) = if ((bp == "outMulti"))
289- then aK
290- else aJ
331+func bK (bH) = if ((bH == "outMulti"))
332+ then bb
333+ else ba
291334
292335
293-func bt () = "balance_node_lock_interval"
336+func bL () = "balance_node_lock_interval"
294337
295338
296-func bu () = "swaps_timeframe"
339+func bM () = "swaps_timeframe"
297340
298341
299-func bv () = "min_BR_protection_level"
342+func bN () = "min_BR_protection_level"
300343
301344
302-func bw () = "%s%s__common__basketAssets"
345+func bO () = "%s%s__common__basketAssets"
303346
304347
305-func bx () = "%s%s__common__basketD"
348+func bP () = "%s%s__common__basketD"
306349
307350
308-func by () = "%s%s__common__basketK"
351+func bQ () = "%s%s__common__basketK"
309352
310353
311-func bz () = "%s%s__common__basketB"
354+func bR () = "%s%s__common__basketB"
312355
313356
314-func bA () = "%s%s__common__basketLogbDelta"
357+func bS () = "%s%s__common__basketLogbDelta"
315358
316359
317-func bB (aM) = ("%s%s%s__common__weightByAsset__" + aM)
360+func bT (bd) = ("%s%s%s__common__weightByAsset__" + bd)
318361
319362
320-func bC (aM) = ("%s%s%s__common__priceByAsset__" + aM)
363+func bU (bd) = ("%s%s%s__common__priceByAsset__" + bd)
321364
322365
323-func bD () = "%s%s__common__maxAllowedFee"
366+func bV () = "%s%s__common__maxAllowedFee"
324367
325368
326-func bE () = valueOrElse(getInteger(aS), valueOrElse(getInteger(aR), E))
369+func bW () = valueOrElse(getInteger(bj), valueOrElse(getInteger(bi), M))
327370
328371
329-func bF (bp,aM) = if ((bp == "outMulti"))
330- then valueOrElse(getInteger(aN), f(aO))
331- else f(aL(aM))
372+func bX () = valueOrElse(getInteger(bh), L)
332373
333374
334-func bG () = valueOrElse(getInteger(this, bu()), 1440)
375+func bY (bH,bd) = if ((bH == "outMulti"))
376+ then valueOrElse(getInteger(be), f(bf))
377+ else f(bc(bd))
335378
336379
337-func bH (bp,aM) = valueOrElse(getInteger(this, bq(bp, aM)), 0)
380+func bZ () = valueOrElse(getInteger(this, bM()), 1440)
338381
339382
340-func bI (bp,bf,aM) = valueOrElse(getInteger(this, br(bp, bf, aM)), 0)
383+func ca (bH,bd) = valueOrElse(getInteger(this, bI(bH, bd)), 0)
341384
342385
343-func bJ (bp) = valueOrElse(getInteger(this, bs(bp)), 1440)
386+func cb (bH,bx,bd) = valueOrElse(getInteger(this, bJ(bH, bx, bd)), 0)
344387
345388
346-func bK () = valueOrElse(getInteger(this, bt()), 1)
389+func cc (bH) = valueOrElse(getInteger(this, bK(bH)), 1440)
347390
348391
349-func bL (bM) = makeString(["%s%s", "swapUserSpentInPeriod", bM], z)
392+func cd () = valueOrElse(getInteger(this, bL()), 1)
350393
351394
352-func bN (bM) = makeString(["%s%s", "userLastSwapHeight", bM], z)
395+func ce (cf) = makeString(["%s%s", "swapUserSpentInPeriod", cf], H)
353396
354397
355-func bO (bP,bQ) = fraction(bP, B, bQ)
398+func cg (cf) = makeString(["%s%s", "userLastSwapHeight", cf], H)
356399
357400
358-func bR (bP,bQ) = fraction(bP, bQ, B)
401+func ch (ci,cj) = fraction(ci, J, cj)
359402
360403
361-func bS (bP,bQ) = fraction(bP, bQ, B)
404+func ck (ci,cj) = fraction(ci, cj, J)
362405
363406
364-func bT (bP,bQ) = bR(bP, bQ)
407+func cl (ci,cj) = fraction(ci, cj, J)
365408
366409
367-func bU (bV) = split(bV, ",")
410+func cm (ci,cj) = ck(ci, cj)
368411
369412
370-func bW (bX,bY,bZ,ca) = {
371- let cb = split_4C(bZ, "_")
372- func cc (cd,ce) = {
373- let cf = split(ce, A)
374- if ((cf[0] == bY))
375- then cf
376- else cd
413+func cn (co) = split(co, ",")
414+
415+
416+func cp (cq,cr,cs,ct) = {
417+ let cu = split_4C(cs, "_")
418+ func cv (cw,cx) = {
419+ let cy = split(cx, I)
420+ if ((cy[0] == cr))
421+ then cy
422+ else cw
377423 }
378424
379- let cg = {
380- let ch = cb
381- let ci = size(ch)
382- let cj = nil
383- func ck (cl,cm) = if ((cm >= ci))
384- then cl
385- else cc(cl, ch[cm])
425+ let cz = {
426+ let cA = cu
427+ let cB = size(cA)
428+ let cC = nil
429+ func cD (cE,cF) = if ((cF >= cB))
430+ then cE
431+ else cv(cE, cA[cF])
386432
387- func cn (cl,cm) = if ((cm >= ci))
388- then cl
433+ func cG (cE,cF) = if ((cF >= cB))
434+ then cE
389435 else throw("List size exceeds 10")
390436
391- cn(ck(ck(ck(ck(ck(ck(ck(ck(ck(ck(cj, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
437+ cG(cD(cD(cD(cD(cD(cD(cD(cD(cD(cD(cC, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
392438 }
393- let co = value(getInteger(bA()))
394- let cp = value(getInteger(bx()))
395- let cq = value(getInteger(bz()))
396- let cr = value(getInteger(bB(bY)))
397- let cs = ((co - cr) + parseIntValue(cg[1]))
398- let ct = pow(cq, 6, cs, 6, 6, HALFUP)
399- let cu = fraction(bX, parseIntValue(cg[2]), if ((ca == 0))
400- then B
401- else (ca * 100))
402- let cv = ((C + cp) - ct)
403- if ((0 >= cv))
404- then throw(("Non-positive multiplier = " + toString(cv)))
439+ let cH = value(getInteger(bS()))
440+ let cI = value(getInteger(bP()))
441+ let cJ = value(getInteger(bR()))
442+ let cK = value(getInteger(bT(cr)))
443+ let cL = ((cH - cK) + parseIntValue(cz[1]))
444+ let cM = pow(cJ, 6, cL, 6, 6, HALFUP)
445+ let cN = fraction(cq, parseIntValue(cz[2]), if ((ct == 0))
446+ then J
447+ else (ct * 100))
448+ let cO = ((K + cI) - cM)
449+ if ((0 >= cO))
450+ then throw(("Non-positive multiplier = " + toString(cO)))
405451 else {
406- let cw = fraction(cu, cv, C)
407- let cx = valueOrElse(getInteger(aQ), D)
408- let cy = fraction(cw, cx, C)
409-[cw, (cw - cy), cy, cv]
452+ let cP = fraction(cN, cO, K)
453+ let cQ = valueOrElse(getInteger(bh), L)
454+ let cR = fraction(cP, cQ, K)
455+[cP, (cP - cR), cR, cO]
410456 }
411457 }
412458
413459
414-func cz (bP,bZ,cA) = {
415- let cb = split_4C(bZ, "_")
416- let cB = value(getInteger(by()))
417- let cp = value(getInteger(bx()))
418- let cC = (C - fraction(cB, cp, C))
419- func cD (cd,ce) = {
420- let cE = split(ce, A)
421- let aM = cE[0]
422- let cF = parseIntValue(cE[1])
423- let bQ = parseIntValue(cE[2])
424- let cG = parseIntValue(cE[3])
425- if ((cA == 0))
460+func cS (ci,cs,cT) = {
461+ let cu = split_4C(cs, "_")
462+ let cU = value(getInteger(bQ()))
463+ let cI = value(getInteger(bP()))
464+ let cV = (K - fraction(cU, cI, K))
465+ func cW (cw,cx) = {
466+ let cX = split(cx, I)
467+ let bd = cX[0]
468+ let cY = parseIntValue(cX[1])
469+ let cj = parseIntValue(cX[2])
470+ let cZ = parseIntValue(cX[3])
471+ if ((cT == 0))
426472 then throw("Attempt to burn neutrino at zero supply")
427473 else {
428- let cH = fraction(fraction(bP, cG, cA), cC, C)
429- let cI = if ((aM == "WAVES"))
430- then $Tuple2(cH, bQ)
431- else $Tuple2(cd._2, cd._3)
432- $Tuple3((cd._1 :+ $Tuple4(aM, cH, bQ, cF)), cI._1, cI._2)
474+ let da = fraction(fraction(ci, cZ, cT), cV, K)
475+ let db = if ((bd == "WAVES"))
476+ then $Tuple2(da, cj)
477+ else $Tuple2(cw._2, cw._3)
478+ $Tuple3((cw._1 :+ $Tuple4(bd, da, cj, cY)), db._1, db._2)
433479 }
434480 }
435481
436- let ch = cb
437- let ci = size(ch)
438- let cj = $Tuple3(nil, 0, 0)
439- func ck (cl,cm) = if ((cm >= ci))
440- then cl
441- else cD(cl, ch[cm])
482+ let cA = cu
483+ let cB = size(cA)
484+ let cC = $Tuple3(nil, 0, 0)
485+ func cD (cE,cF) = if ((cF >= cB))
486+ then cE
487+ else cW(cE, cA[cF])
442488
443- func cn (cl,cm) = if ((cm >= ci))
444- then cl
489+ func cG (cE,cF) = if ((cF >= cB))
490+ then cE
445491 else throw("List size exceeds 10")
446492
447- cn(ck(ck(ck(ck(ck(ck(ck(ck(ck(ck(cj, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
493+ cG(cD(cD(cD(cD(cD(cD(cD(cD(cD(cD(cC, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
448494 }
449495
450496
451-func cJ (bp,cK) = throw(((("The specified amount in " + bp) + " swap is less than the required minimum of ") + toString(cK)))
497+func dc (bH,dd) = throw(((("The specified amount in " + bH) + " swap is less than the required minimum of ") + toString(dd)))
452498
453499
454-func cL () = throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
500+func de () = throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
455501
456502
457-func cM (ba,cN,cO,cP,cQ) = throw(((((((((("invalid price history index: index=" + toString(ba)) + " priceIndex=") + toString(cN)) + " indexHeight=") + toString(cO)) + " unlockHeight=") + toString(cP)) + " prevIndexHeight=") + toString(cQ)))
503+func df (bs,dg,dh,di,dj) = throw(((((((((("invalid price history index: index=" + toString(bs)) + " priceIndex=") + toString(dg)) + " indexHeight=") + toString(dh)) + " unlockHeight=") + toString(di)) + " prevIndexHeight=") + toString(dj)))
458504
459505
460-let cR = fromBase58String(g(aB))
506+let dk = fromBase58String(g(aS))
461507
462-let cN = i(at, aV)
508+let dg = i(aJ, bm)
463509
464-let cS = k(at, aW)
510+let dl = k(aJ, bn)
465511
466-let cT = fromBase58String(g(aP))
512+let dm = k(aJ, bo)
467513
468-let cU = fromBase58String("F3iaxzruFeKujfVfYSZEkejpjh67wmRfPCRHiNmWKp3Z")
514+let dn = fromBase58String(g(bg))
469515
470-let cV = fromBase58String("975akZBfnMj513U7MZaHKzQrmsEx5aE3wdWKTrHBhbjF")
516+let do = fromBase58String("F3iaxzruFeKujfVfYSZEkejpjh67wmRfPCRHiNmWKp3Z")
471517
472-let cW = this
518+let dp = fromBase58String("975akZBfnMj513U7MZaHKzQrmsEx5aE3wdWKTrHBhbjF")
473519
474-let cX = i(at, aU)
520+let dq = this
475521
476-func cY (cZ) = {
477- let da = 100000
478- let db = 1000
479- let dc = bR(da, cX)
480- let dd = (dc * 2)
481- let de = fraction(dc, db, 100)
482- let df = value(cZ.minSponsoredAssetFee)
483- if (if ((df >= dd))
484- then (de >= df)
522+let dr = i(aJ, bl)
523+
524+func ds (dt) = {
525+ let du = 100000
526+ let dv = 1000
527+ let dw = ck(du, dr)
528+ let dx = (dw * 2)
529+ let dy = fraction(dw, dv, 100)
530+ let dz = value(dt.minSponsoredAssetFee)
531+ if (if ((dz >= dx))
532+ then (dy >= dz)
485533 else false)
486- then (cZ.assetId == cR)
534+ then (dt.assetId == dk)
487535 else false
488536 }
489537
490538
491-func dg (aY) = i(at, aX(aY))
539+func dA (bq) = i(aJ, bp(bq))
492540
493541
494-func dh (ba) = i(at, aZ(ba))
542+func dB (bs) = i(aJ, br(bs))
495543
496544
497-func di (bM) = makeString(["%s%s%s", "paramByUser", bM, "amount"], z)
545+func dC (cf) = makeString(["%s%s%s", "paramByUser", cf, "amount"], H)
498546
499547
500-let dj = 1
548+let dD = 1
501549
502-let dk = 2
550+let dE = 2
503551
504-let dl = 3
552+let dF = 3
505553
506-let dm = 7
554+let dG = 7
507555
508-let dn = 8
556+let dH = 8
509557
510-let do = 11
558+let dI = 11
511559
512-let dp = 15
560+let dJ = 15
513561
514-let dq = 16
562+let dK = 16
515563
516-let dr = 20
564+let dL = 20
517565
518-func ds (bM,dt) = makeString(["%s%s", bM, dt], z)
566+let dM = 21
567+
568+func dN (cf,dO) = makeString(["%s%s", cf, dO], H)
519569
520570
521-func du (bp,dv,bX,bQ,dw,dx,dy,dz,dA,dB,dC,dD,ba,dE,dF,dG,dH,dI,dJ,bY) = makeString_2C(["%s%s%d%d%d%d%d%d%d%d%d%d%d%s%d%d%d%d%s%s", bp, dv, bX, bQ, dw, dx, dy, dz, dA, dB, dC, dD, ba, dE, dF, dG, dH, dI, dJ, bY], z)
571+func dP (bH,dQ,cq,cj,dR,dS,dT,dU,dV,dW,dX,dY,bs,dZ,ea,eb,ec,ed,ee,cr,ef) = makeString_2C(["%s%s%d%d%d%d%d%d%d%d%d%d%d%s%d%d%d%d%s%s%s", bH, dQ, cq, cj, dR, dS, dT, dU, dV, dW, dX, dY, bs, dZ, ea, eb, ec, ed, ee, cr, ef], H)
522572
523573
524-func dK (bp,dL,dC,bY) = du(bp, "PENDING", toString(dL), "0", "0", "0", toString(height), toString(lastBlock.timestamp), "0", "0", toString(dC), "0", "0", "NULL", "0", "0", "0", "0", "", bY)
574+func eg (bH,eh,dX,cr,ef) = dP(bH, "PENDING", toString(eh), "0", "0", "0", toString(height), toString(lastBlock.timestamp), "0", "0", toString(dX), "0", "0", "NULL", "0", "0", "0", "0", "", cr, ef)
525575
526576
527-func dM (dN,bQ,dw,dx,dD,ba,dE,dH,dI,dJ,bY) = du(dN[dj], "FINISHED", dN[dl], toString(bQ), toString(dw), toString(dx), dN[dm], dN[dn], toString(height), toString(lastBlock.timestamp), dN[do], toString(dD), toString(ba), dE, dN[dp], dN[dq], toString(dH), toString(dI), dJ, bY)
577+func ei (ej,cj,dR,dS,dY,bs,dZ,ec,ed,ee,cr,ef) = dP(ej[dD], "FINISHED", ej[dF], toString(cj), toString(dR), toString(dS), ej[dG], ej[dH], toString(height), toString(lastBlock.timestamp), ej[dI], toString(dY), toString(bs), dZ, ej[dJ], ej[dK], toString(ec), toString(ed), ee, cr, ef)
528578
529579
530-func dO (bM,dP) = {
531- let dQ = ds(bM, dP)
532- split_4C(valueOrErrorMessage(getString(dQ), ("no swap data for " + dQ)), z)
580+func ek (cf,el) = {
581+ let em = dN(cf, el)
582+ split_4C(valueOrErrorMessage(getString(em), ("no swap data for " + em)), H)
533583 }
534584
535585
536-func dR (dS,dT,dU) = {
537- let cy = fraction(dS, dU, C)
538-[(dS - cy), cy]
586+func en (eo,ep,eq) = {
587+ let cR = fraction(eo, eq, K)
588+[(eo - cR), cR]
539589 }
540590
541591
542-func dV (dW) = {
543- let dU = bE()
544- func dX (cd,ce) = {
545- let cy = fraction(ce._2, dU, C)
546- (cd :+ makeString([ce._1, toString(ce._3), toString((ce._2 - cy)), toString(cy), toString(ce._4)], A))
592+func er (es,eq) = {
593+ func et (cw,cx) = {
594+ let cR = fraction(cx._2, eq, K)
595+ (cw :+ makeString([cx._1, toString(cx._3), toString((cx._2 - cR)), toString(cR), toString(cx._4)], I))
547596 }
548597
549- let dY = {
550- let ch = dW
551- let ci = size(ch)
552- let cj = nil
553- func ck (cl,cm) = if ((cm >= ci))
554- then cl
555- else dX(cl, ch[cm])
598+ let eu = {
599+ let cA = es
600+ let cB = size(cA)
601+ let cC = nil
602+ func cD (cE,cF) = if ((cF >= cB))
603+ then cE
604+ else et(cE, cA[cF])
556605
557- func cn (cl,cm) = if ((cm >= ci))
558- then cl
606+ func cG (cE,cF) = if ((cF >= cB))
607+ then cE
559608 else throw("List size exceeds 10")
560609
561- cn(ck(ck(ck(ck(ck(ck(ck(ck(ck(ck(cj, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
610+ cG(cD(cD(cD(cD(cD(cD(cD(cD(cD(cD(cC, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
562611 }
563- makeString_2C(dY, "_")
612+ makeString_2C(eu, "_")
564613 }
565614
566615
567-func dZ (ea) = if ((0 > ea))
568- then -(ea)
569- else ea
570-
571-
572-func eb (ec) = {
573- let ed = ((wavesBalance(cW).available - ec) - bd())
574- let ee = f(bk(0))
575- let ef = f(bk(1))
576- let eg = (ed + ee)
577- let eh = (ed + ef)
578- if (if ((eg > 0))
579- then true
580- else (eh > 0))
581- then {
582- let ei = dZ((eg - ef))
583- let ej = dZ((eh - ee))
584- if ((ej >= ei))
585- then $Tuple2(0, eg)
586- else $Tuple2(1, eh)
587- }
588- else $Tuple2(-1, 0)
616+func ev (ew) = {
617+ let ex = ((wavesBalance(dq).available - ew) - bv())
618+ let ey = f(bC(0))
619+ let ez = (ex + ey)
620+ if ((ez > 0))
621+ then ez
622+ else 0
589623 }
590624
591625
592-func ek (r) = if ((r.caller != this))
626+func eA (r) = if ((r.caller != this))
593627 then throw("Permission denied: this contract only allowed")
594628 else true
595629
596630
597-func el (ec) = {
598- let em = eb(ec)
599- let bh = em._1
600- let en = em._2
601- if ((en > 0))
631+func eB (ew) = {
632+ let eC = ev(ew)
633+ let bz = 0
634+ if ((eC > 0))
602635 then {
603- let eo = bg(bh)
604- let ep = getBinary(this, eo)
605- let eq = if (isDefined(ep))
606- then [LeaseCancel(value(ep))]
636+ let eD = by(1)
637+ let eE = getBinary(eD)
638+ let eF = if (isDefined(eE))
639+ then [LeaseCancel(value(eE)), DeleteEntry(eD), DeleteEntry(bC(1))]
607640 else nil
608- let er = bk(bh)
609- let es = Lease(bc(bh), en)
610- (eq ++ [es, BinaryEntry(eo, d(es)), IntegerEntry(bk(bh), en)])
641+ let eG = by(bz)
642+ let eH = getBinary(this, eG)
643+ let eI = if (isDefined(eH))
644+ then [LeaseCancel(value(eH))]
645+ else nil
646+ let eJ = bC(bz)
647+ let eK = Lease(bu(bz), eC)
648+ ((eF ++ eI) ++ [eK, BinaryEntry(eG, d(eK)), IntegerEntry(eJ, eC)])
611649 }
612650 else nil
613651 }
614652
615653
616-func et (eu) = {
617- let bj = bc(eu)
618- let ev = bk(eu)
619- let ew = f(ev)
620- let ex = bg(eu)
621- let ey = value(getBinary(this, ex))
622- $Tuple5(bj, ev, ew, ex, ey)
654+func eL (eM) = {
655+ let bB = bu(eM)
656+ let eN = bC(eM)
657+ let eO = f(eN)
658+ let eP = by(eM)
659+ let eQ = value(getBinary(this, eP))
660+ $Tuple5(bB, eN, eO, eP, eQ)
623661 }
624662
625663
626-func ez (bp,eA,bY,eB,eC) = {
627- let eD = x(invoke(this, "swapParamsByUserSYSREADONLY", [eB, 0], nil))
628- let eE = eD._1
629- let eF = eD._2
630- let eG = eD._3
631- let eH = eD._7
632- let cK = bF(bp, bY)
633- let eI = bI(bp, eB, bY)
634- let bj = bb(0)
635- let eJ = (bj == eB)
636- let eK = if (eJ)
637- then bK()
638- else bJ(bp)
639- let dC = (height + eK)
640- let eL = value(getInteger(at, bC(bY)))
641- let eM = if ((bp == "outNeutrino"))
642- then bR(eA, eL)
643- else eA
644- let eN = if ((bp == "outNeutrino"))
645- then eE
646- else eH
647- if ((cK > eA))
648- then cJ(bp, cK)
649- else if (if (!(eJ))
650- then (eF > 0)
664+func eR (eS,eT,eU,eV,eW) = {
665+ let eK = Lease(eS, eT)
666+[LeaseCancel(eU), eK, BinaryEntry(eV, calculateLeaseId(eK)), IntegerEntry(eW, eT)]
667+ }
668+
669+
670+func eX (ef) = x(invoke(aJ, "validatePrice", [Q, R, ef], nil))
671+
672+
673+let eY = 0
674+
675+let eZ = 1
676+
677+let fa = 2
678+
679+let fb = 3
680+
681+let fc = 4
682+
683+let fd = 5
684+
685+let fe = 6
686+
687+let ff = 7
688+
689+let fg = 8
690+
691+let fh = 9
692+
693+let fi = 10
694+
695+func fj (cq,cr,cu,fk) = {
696+ let fl = cp(cq, cr, cu, fk)
697+ $Tuple12(fl[0], dk, 0, cr, 0, fk, cq, 0, 0, 0, nil, [fl[1], fl[2]])
698+ }
699+
700+
701+func fm (fn,cu,cT) = {
702+ let fo = cS(fn, cu, cT)
703+ $Tuple12(fo._2, unit, 0, dk, fo._2, fo._3, fn, cT, fn, 0, fo._1, nil)
704+ }
705+
706+
707+func fp (fn,cu,cT,fq,fr) = {
708+ let fo = cS(fn, cu, cT)
709+ func fs (cw,cx) = {
710+ let bd = cx._1
711+ if ((bd == fq))
712+ then $Tuple4(fq, (cw._2 + cx._2), cx._3, cx._4)
713+ else {
714+ let da = q(invoke(aR, "swapTokensViaPoolREADONLY", [bd, cx._2, fq], nil))
715+ $Tuple4(cw._1, (cw._2 + da), cw._3, cw._4)
716+ }
717+ }
718+
719+ let p = {
720+ let cA = fo._1
721+ let cB = size(cA)
722+ let cC = $Tuple4("", 0, 0, 0)
723+ func cD (cE,cF) = if ((cF >= cB))
724+ then cE
725+ else fs(cE, cA[cF])
726+
727+ func cG (cE,cF) = if ((cF >= cB))
728+ then cE
729+ else throw("List size exceeds 10")
730+
731+ cG(cD(cD(cD(cD(cD(cD(cD(cD(cD(cD(cC, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
732+ }
733+ $Tuple12(fo._2, unit, 0, dk, p._2, fo._3, fn, cT, fn, 0, [p], nil)
734+ }
735+
736+
737+func ft (bH,cq,cj,fu,cr,ef,fr) = {
738+ let cT = q(fu[ad])
739+ let cu = o(fu[am])
740+ let fk = q(fu[an])
741+ let fv = if ((bH == "outNeutrino"))
742+ then fj(cq, cr, cu, fk)
743+ else if ((bH == "outMulti"))
744+ then if ((ef != ""))
745+ then fp(cq, cu, cT, ef, fr)
746+ else fm(cq, cu, cT)
747+ else throw(("Unsupported swap type " + bH))
748+ let fo = fv._1
749+ let fw = fv._2
750+ let fx = fv._3
751+ let fy = fv._4
752+ let fz = fv._5
753+ let fA = fv._6
754+ let ee = fv._11
755+ let fB = fv._12
756+ let fC = if ((bH == "outNeutrino"))
757+ then fB[0]
758+ else 0
759+ let fD = if ((bH == "outNeutrino"))
760+ then fB[1]
761+ else 0
762+ let ec = if ((0 >= fx))
763+ then 0
764+ else q(l(invoke(aK, "surfFunctionREADONLY", [fx, fy], nil))[eY])
765+ let eq = if (if ((bH == "outMulti"))
766+ then (ef != "")
767+ else false)
768+ then bX()
769+ else bW()
770+ let fE = if ((bH == "outMulti"))
771+ then er(ee, eq)
772+ else ""
773+ $Tuple9(fC, fw, ec, fx, fz, fD, fo, fA, fE)
774+ }
775+
776+
777+func fF (bH,fG,cr,fH,fI,ef) = {
778+ let fJ = z(invoke(this, "swapParamsByUserSYSREADONLY", [fH, 0], nil))
779+ let fK = fJ._1
780+ let fL = fJ._2
781+ let fM = fJ._3
782+ let fN = fJ._7
783+ let dd = bY(bH, cr)
784+ let fO = cb(bH, fH, cr)
785+ let bB = bt(0)
786+ let fP = (bB == fH)
787+ let fQ = if (fP)
788+ then cd()
789+ else cc(bH)
790+ let dX = (height + fQ)
791+ let fR = value(getInteger(aJ, bU(cr)))
792+ let fS = if ((bH == "outNeutrino"))
793+ then ck(fG, fR)
794+ else fG
795+ let fT = if ((bH == "outNeutrino"))
796+ then fK
797+ else fN
798+ if ((dd > fG))
799+ then dc(bH, dd)
800+ else if (if (!(fP))
801+ then (fL > 0)
651802 else false)
652- then throw(("You have exceeded swap limit! Next allowed swap height is " + toString((height + eG))))
653- else if (if (!(eJ))
654- then (eM > eN)
803+ then throw(("You have exceeded swap limit! Next allowed swap height is " + toString((height + fM))))
804+ else if (if (!(fP))
805+ then (fS > fT)
655806 else false)
656- then throw(((("You have exceeded your swap limit! Requested: " + toString(eM)) + ", available: ") + toString(eN)))
657- else if (cS)
658- then cL()
807+ then throw(((("You have exceeded your swap limit! Requested: " + toString(fS)) + ", available: ") + toString(fT)))
808+ else if (dl)
809+ then de()
659810 else {
660- let eO = l(invoke(au, "calcNeutinoMetricsREADONLY", nil, nil))
661- let cb = o(eO[W])
662- let eP = q(eO[X])
663- let eQ = bW(eA, bY, cb, eP)
664- let eR = valueOrElse(getInteger(bD()), F)
665- if (if ((bp == "outNeutrino"))
666- then ((C - eR) > eQ[3])
811+ let fu = l(invoke(aK, "calcNeutinoMetricsREADONLY", nil, nil))
812+ let cu = o(fu[am])
813+ let fk = q(fu[an])
814+ let fU = cp(fG, cr, cu, fk)
815+ let fV = valueOrElse(getInteger(bV()), N)
816+ if (if ((bH == "outNeutrino"))
817+ then ((K - fV) > fU[3])
667818 else false)
668- then throw(("Max allowed fee exceeded, multiplier = " + toString(eQ[3])))
819+ then throw(("Max allowed fee exceeded, multiplier = " + toString(fU[3])))
669820 else {
670- let eS = if (if ((bp == "outNeutrino"))
671- then (bY == "WAVES")
821+ let fW = if (if ((bH == "outMulti"))
822+ then (ef != "")
672823 else false)
673- then el(0)
824+ then if (!(eX(ef)))
825+ then throw("Can't be processed due to market conditions")
826+ else {
827+ let fX = ft(bH, fG, 0, fu, cr, ef, true)._5
828+ let fY = valueOrElse(getInteger(X()), 0)
829+ let fZ = (lastBlock.timestamp / S)
830+ let ga = if ((fZ != fY))
831+ then 0
832+ else valueOrElse(getInteger(V()), 0)
833+ let gb = (ga + fX)
834+ if ((gb > T))
835+ then throw("Daily waves limit exceeded")
836+ else {
837+ let gc = valueOrElse(getInteger(W()), 0)
838+ let gd = (gc + fX)
839+ if ((gd > U))
840+ then throw("Global waves limit exceeded")
841+ else [IntegerEntry(V(), gb), IntegerEntry(W(), gd), IntegerEntry(X(), fZ)]
842+ }
843+ }
674844 else nil
675- $Tuple2(([IntegerEntry(bL(eB), eM), IntegerEntry(bN(eB), height), IntegerEntry(br(bp, eB, bY), (eI + eA)), IntegerEntry(be(eB), dC), StringEntry(ds(eB, eC), dK(bp, eA, dC, bY))] ++ eS), unit)
845+ let ge = if (if ((bH == "outNeutrino"))
846+ then (cr == "WAVES")
847+ else false)
848+ then eB(0)
849+ else nil
850+ $Tuple2((([IntegerEntry(ce(fH), fS), IntegerEntry(cg(fH), height), IntegerEntry(bJ(bH, fH, cr), (fO + fG)), IntegerEntry(bw(fH), dX), StringEntry(dN(fH, fI), eg(bH, fG, dX, cr, ef))] ++ ge) ++ fW), unit)
676851 }
677852 }
678853 }
679854
680855
681-let eT = 0
682-
683-let eU = 1
684-
685-let eV = 2
686-
687-let eW = 3
688-
689-let eX = 4
690-
691-let eY = 5
692-
693-let eZ = 6
694-
695-let fa = 7
696-
697-let fb = 8
698-
699-let fc = 9
700-
701-let fd = 10
702-
703-func fe (bX,bY,cb,eP) = {
704- let ff = bW(bX, bY, cb, eP)
705- $Tuple12(ff[0], cR, 0, bY, 0, eP, bX, 0, 0, 0, nil, [ff[1], ff[2]])
706- }
856+func gf () = "%s__applyInProgress"
707857
708858
709-func fg (fh,cb,cA) = {
710- let fi = cz(fh, cb, cA)
711- $Tuple12(fi._2, unit, 0, cR, fi._2, fi._3, fh, cA, fh, 0, fi._1, nil)
712- }
859+func gg (gh) = ("%s%d__proposalData__" + toString(gh))
713860
714861
715-func fj (bp,bX,bQ,eO,bY) = {
716- let cA = q(eO[N])
717- let cb = o(eO[W])
718- let eP = q(eO[X])
719- let fk = if ((bp == "outNeutrino"))
720- then fe(bX, bY, cb, eP)
721- else if ((bp == "outMulti"))
722- then fg(bX, cb, cA)
723- else throw(("Unsupported swap type " + bp))
724- let fi = fk._1
725- let fl = fk._2
726- let fm = fk._3
727- let fn = fk._4
728- let fo = fk._5
729- let fp = fk._6
730- let dJ = fk._11
731- let fq = fk._12
732- let fr = if ((bp == "outNeutrino"))
733- then fq[0]
734- else 0
735- let fs = if ((bp == "outNeutrino"))
736- then fq[1]
737- else 0
738- let dH = if ((0 >= fm))
739- then 0
740- else q(l(invoke(au, "surfFunctionREADONLY", [fm, fn], nil))[eT])
741- let ft = if ((bp == "outMulti"))
742- then dV(dJ)
743- else ""
744- $Tuple9(fr, fl, dH, fm, fo, fs, fi, fp, ft)
745- }
862+let gi = 9
746863
747-
748-func fu () = "%s__applyInProgress"
749-
750-
751-func fv (fw) = ("%s%d__proposalData__" + toString(fw))
752-
753-
754-let fx = 9
755-
756-func fy (cZ) = {
757- let n = cZ
864+func gj (dt) = {
865+ let n = dt
758866 if ($isInstanceOf(n, "Order"))
759867 then {
760- let fz = n
868+ let gk = n
761869 throw("Orders aren't allowed")
762870 }
763871 else if (if ($isInstanceOf(n, "DataTransaction"))
792900 then true
793901 else $isInstanceOf(n, "ReissueTransaction"))
794902 then {
795- let fA = n
796- let dt = toBase58String(fA.id)
797- let fw = valueOrErrorMessage(getInteger(aA, fu()), "Apply is not happening")
798- let fB = split(split(a(aA, fv(fw)), z)[fx], A)
799- if (!(isDefined(indexOf(fB, dt))))
800- then throw(((("Unknown txId: " + dt) + " for proposalId=") + toString(fw)))
903+ let gl = n
904+ let dO = toBase58String(gl.id)
905+ let gh = valueOrErrorMessage(getInteger(aQ, gf()), "Apply is not happening")
906+ let gm = split(split(a(aQ, gg(gh)), H)[gi], I)
907+ if (!(isDefined(indexOf(gm, dO))))
908+ then throw(((("Unknown txId: " + dO) + " for proposalId=") + toString(gh)))
801909 else true
802910 }
803911 else throw("Match error")
804912 }
805913
806914
915+func gn (r,ef) = if ((size(r.payments) != 1))
916+ then throw("swapNeutrinoToBasket require only one payment")
917+ else {
918+ let go = value(r.payments[0])
919+ if ((go.assetId != dk))
920+ then throw("Only appropriate Neutrino tokens are allowed for swapping.")
921+ else {
922+ let cf = toString(r.caller)
923+ let fI = toBase58String(r.transactionId)
924+ let gp = toBase58String(dk)
925+ let gq = ca("outMulti", gp)
926+ let fG = go.amount
927+ let gr = invoke(this, "internalSaveInteger", [bI("outMulti", gp), (gq + fG)], nil)
928+ if ((gr == gr))
929+ then fF("outMulti", go.amount, gp, cf, fI, ef)
930+ else throw("Strict value is not equal to itself.")
931+ }
932+ }
933+
934+
807935 @Callable(r)
808-func constructorV1 (fC,fD,fE,fF,fG,fH,fI,fJ,fK,fL,fM,fN) = {
809- let fO = ek(r)
810- if ((fO == fO))
936+func constructorV1 (gs,gt,gu,gv,gw,gx,gy,gz,gA,gB,gC,gD) = {
937+ let gE = eA(r)
938+ if ((gE == gE))
811939 then if ((size(r.payments) != 0))
812940 then throw("no payments allowed")
813- else [StringEntry(aB, fC), StringEntry(aC, fD), StringEntry(aD, fE), StringEntry(aF, fF), StringEntry(aG, fG), StringEntry(aP, fH), IntegerEntry(aJ, fI), IntegerEntry(aK, fJ), IntegerEntry(aL("WAVES"), fK), IntegerEntry(aN, fL), IntegerEntry(aQ, fM), IntegerEntry(aR, fN)]
941+ else [StringEntry(aS, gs), StringEntry(aT, gt), StringEntry(aU, gu), StringEntry(aW, gv), StringEntry(aX, gw), StringEntry(bg, gx), IntegerEntry(ba, gy), IntegerEntry(bb, gz), IntegerEntry(bc("WAVES"), gA), IntegerEntry(be, gB), IntegerEntry(bh, gC), IntegerEntry(bi, gD)]
814942 else throw("Strict value is not equal to itself.")
815943 }
816944
817945
818946
819947 @Callable(r)
820-func constructorV2 (au,av,fP) = {
821- let fO = ek(r)
822- if ((fO == fO))
948+func constructorV2 (aK,aL,gF) = {
949+ let gE = eA(r)
950+ if ((gE == gE))
823951 then if ((size(r.payments) != 0))
824952 then throw("no payments allowed")
825- else [StringEntry(aI, au), StringEntry(aE, av), IntegerEntry(bu(), fP)]
953+ else [StringEntry(aZ, aK), StringEntry(aV, aL), IntegerEntry(bM(), gF)]
826954 else throw("Strict value is not equal to itself.")
827955 }
828956
829957
830958
831959 @Callable(r)
832-func constructorV3 (fQ,fR,fS,fT,fU) = {
833- let fO = ek(r)
834- if ((fO == fO))
960+func constructorV3 (gG,gH,gI,gJ,gK) = {
961+ let gE = eA(r)
962+ if ((gE == gE))
835963 then if ((size(r.payments) != 0))
836964 then throw("no payments allowed")
837965 else {
838- func fV (cd,ce) = {
839- let cE = split(ce, "_")
840- let aM = cE[0]
841- let fW = parseIntValue(cE[1])
842- let fX = parseIntValue(cE[2])
843- $Tuple2((cd._1 :+ aM), ((cd._2 :+ IntegerEntry(bB(aM), fW)) :+ IntegerEntry(aL(aM), fX)))
966+ func gL (cw,cx) = {
967+ let cX = split(cx, "_")
968+ let bd = cX[0]
969+ let gM = parseIntValue(cX[1])
970+ let gN = parseIntValue(cX[2])
971+ $Tuple2((cw._1 :+ bd), ((cw._2 :+ IntegerEntry(bT(bd), gM)) :+ IntegerEntry(bc(bd), gN)))
844972 }
845973
846- let fY = {
847- let ch = fQ
848- let ci = size(ch)
849- let cj = $Tuple2(nil, nil)
850- func ck (cl,cm) = if ((cm >= ci))
851- then cl
852- else fV(cl, ch[cm])
974+ let gO = {
975+ let cA = gG
976+ let cB = size(cA)
977+ let cC = $Tuple2(nil, nil)
978+ func cD (cE,cF) = if ((cF >= cB))
979+ then cE
980+ else gL(cE, cA[cF])
853981
854- func cn (cl,cm) = if ((cm >= ci))
855- then cl
982+ func cG (cE,cF) = if ((cF >= cB))
983+ then cE
856984 else throw("List size exceeds 10")
857985
858- cn(ck(ck(ck(ck(ck(ck(ck(ck(ck(ck(cj, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
986+ cG(cD(cD(cD(cD(cD(cD(cD(cD(cD(cD(cC, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
859987 }
860- (((((fY._2 :+ IntegerEntry(bx(), fR)) :+ IntegerEntry(by(), fS)) :+ IntegerEntry(bz(), fT)) :+ IntegerEntry(bA(), log(fU, 6, fT, 6, 6, HALFUP))) :+ StringEntry(bw(), makeString(fY._1, z)))
988+ (((((gO._2 :+ IntegerEntry(bP(), gH)) :+ IntegerEntry(bQ(), gI)) :+ IntegerEntry(bR(), gJ)) :+ IntegerEntry(bS(), log(gK, 6, gJ, 6, 6, HALFUP))) :+ StringEntry(bO(), makeString(gO._1, H)))
861989 }
862990 else throw("Strict value is not equal to itself.")
863991 }
865993
866994
867995 @Callable(r)
868-func swapTokenToNeutrino () = if ((size(r.payments) != 1))
869- then throw("swapTokenToNeutrino require only one payment")
870- else {
871- let fZ = value(r.payments[0])
872- let ga = value(getString(bw()))
873- let gb = toBase58String(valueOrElse(fZ.assetId, H))
874- if (!(contains(ga, gb)))
875- then throw(((gb + " is not one of basket tokens:") + ga))
876- else {
877- let bM = toString(r.caller)
878- let eC = toBase58String(r.transactionId)
879- let gc = bH("outNeutrino", gb)
880- let eA = fZ.amount
881- let gd = invoke(this, "internalSaveInteger", [bq("outNeutrino", gb), (gc + eA)], nil)
882- if ((gd == gd))
883- then ez("outNeutrino", eA, gb, bM, eC)
884- else throw("Strict value is not equal to itself.")
885- }
886- }
996+func swapTokenToNeutrino () = if (dm)
997+ then throw("XTN issue is disabled")
998+ else if ((size(r.payments) != 1))
999+ then throw("swapTokenToNeutrino require only one payment")
1000+ else {
1001+ let go = value(r.payments[0])
1002+ let gP = value(getString(bO()))
1003+ let gQ = toBase58String(valueOrElse(go.assetId, P))
1004+ if (!(contains(gP, gQ)))
1005+ then throw(((gQ + " is not one of basket tokens:") + gP))
1006+ else {
1007+ let cf = toString(r.caller)
1008+ let fI = toBase58String(r.transactionId)
1009+ let gq = ca("outNeutrino", gQ)
1010+ let fG = go.amount
1011+ let gr = invoke(this, "internalSaveInteger", [bI("outNeutrino", gQ), (gq + fG)], nil)
1012+ if ((gr == gr))
1013+ then fF("outNeutrino", fG, gQ, cf, fI, "")
1014+ else throw("Strict value is not equal to itself.")
1015+ }
1016+ }
8871017
8881018
8891019
8901020 @Callable(r)
891-func swapNeutrinoToBasket () = if ((size(r.payments) != 1))
892- then throw("swapNeutrinoToBasket require only one payment")
893- else {
894- let fZ = value(r.payments[0])
895- if ((fZ.assetId != cR))
896- then throw("Only appropriate Neutrino tokens are allowed for swapping.")
897- else {
898- let bM = toString(r.caller)
899- let eC = toBase58String(r.transactionId)
900- let ge = toBase58String(cR)
901- let gc = bH("outMulti", ge)
902- let eA = fZ.amount
903- let gd = invoke(this, "internalSaveInteger", [bq("outMulti", ge), (gc + eA)], nil)
904- if ((gd == gd))
905- then ez("outMulti", fZ.amount, ge, bM, eC)
906- else throw("Strict value is not equal to itself.")
907- }
908- }
1021+func swapNeutrinoToBasket () = gn(r, "")
9091022
9101023
9111024
9121025 @Callable(r)
913-func internalSaveInteger (c,bP) = if ((r.caller != this))
914- then throw("internalSaveInteger is not public method")
915- else [IntegerEntry(c, bP)]
1026+func swapNeutrinoToSingleBasketToken (gR) = {
1027+ let gP = split(value(getString(bO())), H)
1028+ if (!(containsElement(gP, gR)))
1029+ then throw("unknown assetIdOut, should be one of the basket")
1030+ else if ((gR != "WAVES"))
1031+ then throw("currently only WAVES supported as target asset")
1032+ else {
1033+ let gS = x(invoke(aR, "wxPoolHealthyREADONLY", nil, nil))
1034+ if (!(gS))
1035+ then throw("WX pools down, cannot swap to single token")
1036+ else gn(r, gR)
1037+ }
1038+ }
9161039
9171040
9181041
9191042 @Callable(r)
920-func withdraw (gf,ba,dP) = {
921- let dt = toBase58String(r.transactionId)
1043+func internalSaveInteger (c,ci) = if ((r.caller != this))
1044+ then throw("internalSaveInteger is not public method")
1045+ else [IntegerEntry(c, ci)]
1046+
1047+
1048+
1049+@Callable(r)
1050+func withdraw (gT,bs,el) = {
1051+ let dO = toBase58String(r.transactionId)
9221052 if ((size(r.payments) != 0))
9231053 then throw("no payments allowed")
9241054 else {
925- let eO = l(invoke(au, "calcNeutinoMetricsREADONLY", nil, nil))
926- let gg = q(eO[Q])
927- let bM = addressFromStringValue(gf)
928- let dN = dO(gf, dP)
929- let dC = parseIntValue(dN[do])
930- let bp = dN[dj]
931- let bX = parseIntValue(dN[dl])
932- let gh = dN[dk]
933- let dy = parseIntValue(dN[dm])
934- let bY = dN[dr]
935- let gc = bH(bp, bY)
936- let eI = bI(bp, gf, bY)
937- let cP = dC
938- let cO = dh(ba)
939- let cQ = dh((ba - 1))
940- let gi = dg(cO)
941- if (cS)
942- then cL()
943- else if ((gh != "PENDING"))
1055+ let fu = l(invoke(aK, "calcNeutinoMetricsREADONLY", nil, nil))
1056+ let gU = q(fu[ag])
1057+ let cf = addressFromStringValue(gT)
1058+ let ej = ek(gT, el)
1059+ let dX = parseIntValue(ej[dI])
1060+ let bH = ej[dD]
1061+ let cq = parseIntValue(ej[dF])
1062+ let gV = ej[dE]
1063+ let dT = parseIntValue(ej[dG])
1064+ let cr = ej[dL]
1065+ let ef = ej[dM]
1066+ let gq = ca(bH, cr)
1067+ let fO = cb(bH, gT, cr)
1068+ let di = dX
1069+ let dh = dB(bs)
1070+ let dj = dB((bs - 1))
1071+ let gW = dA(dh)
1072+ if (dl)
1073+ then de()
1074+ else if ((gV != "PENDING"))
9441075 then throw("swap has been already processed")
945- else if ((cP > height))
946- then throw((("please wait for: " + toString(cP)) + " block height to withdraw funds"))
947- else if (if (if ((ba > cN))
1076+ else if ((di > height))
1077+ then throw((("please wait for: " + toString(di)) + " block height to withdraw funds"))
1078+ else if (if (if ((bs > dg))
9481079 then true
949- else (cP > cO))
1080+ else (di > dh))
9501081 then true
951- else if ((cQ != 0))
952- then (cQ >= cP)
1082+ else if ((dj != 0))
1083+ then (dj >= di)
9531084 else false)
954- then cM(ba, cN, cO, cP, cQ)
1085+ then df(bs, dg, dh, di, dj)
9551086 else {
956- let gj = fj(bp, bX, gi, eO, bY)
957- let dw = gj._1
958- let fl = gj._2
959- let dH = gj._3
960- let fo = gj._5
961- let dx = gj._6
962- let fi = gj._7
963- let fp = gj._8
964- let ft = gj._9
965- if (if ((bp == "outNeutrino"))
966- then (0 >= fi)
1087+ let gX = ft(bH, cq, gW, fu, cr, ef, false)
1088+ let dR = gX._1
1089+ let fw = gX._2
1090+ let ec = gX._3
1091+ let fz = gX._5
1092+ let dS = gX._6
1093+ let fo = gX._7
1094+ let fA = gX._8
1095+ let fE = gX._9
1096+ if (if ((bH == "outNeutrino"))
1097+ then (0 >= fo)
9671098 else false)
9681099 then throw("balance equals zero")
9691100 else {
970- let gk = if ((dH > 0))
1101+ let gY = if ((ec > 0))
9711102 then {
972- let gl = invoke(ay, "issueSurf", [dH, gf], nil)
973- if ((gl == gl))
1103+ let gZ = invoke(aO, "issueSurf", [ec, gT], nil)
1104+ if ((gZ == gZ))
9741105 then 0
9751106 else throw("Strict value is not equal to itself.")
9761107 }
9771108 else 0
978- if ((gk == gk))
1109+ if ((gY == gY))
9791110 then {
980- let gm = invoke(this, "internalUnleaseAndLease", [fo], nil)
981- if ((gm == gm))
1111+ let ha = invoke(this, "internalUnleaseAndLease", [fz], nil)
1112+ if ((ha == ha))
9821113 then {
983- let gn = l(invoke(ax, "gnsbtInfoSYSREADONLY", ["", 0, 0], nil))
984- let go = q(gn[1])
985- let gp = q(l(gn[3])[3])
986- let gq = [IntegerEntry(br(bp, gf, bY), (eI - bX)), IntegerEntry(bq(bp, bY), (gc - bX)), StringEntry(ds(gf, dP), dM(dN, fp, dw, dx, cP, ba, dt, dH, gg, ft, bY))]
987- func gr (gs,gt,gu,gv) = {
988- let gw = if ((gs > 0))
989- then q(invoke(aw, "deposit", nil, gu))
1114+ let hb = l(invoke(aN, "gnsbtInfoSYSREADONLY", ["", 0, 0], nil))
1115+ let hc = q(hb[1])
1116+ let hd = q(l(hb[3])[3])
1117+ let he = [IntegerEntry(bJ(bH, gT, cr), (fO - cq)), IntegerEntry(bI(bH, cr), (gq - cq)), StringEntry(dN(gT, el), ei(ej, fA, dR, dS, di, bs, dO, ec, gU, fE, cr, ef))]
1118+ func hf (hg,hh,hi,hj) = {
1119+ let hk = if ((hg > 0))
1120+ then q(invoke(aM, "deposit", nil, hi))
9901121 else 0
991- let gx = if ((gt > 0))
992- then q(invoke(av, "deposit", nil, gv))
1122+ let hl = if ((hh > 0))
1123+ then q(invoke(aL, "deposit", nil, hj))
9931124 else 0
994- (gw + gx)
1125+ (hk + hl)
9951126 }
9961127
997- func gy (cy) = {
998- let gz = if ((go != 0))
999- then fraction(cy, gp, go)
1128+ func hm (cR) = {
1129+ let hn = if ((hc != 0))
1130+ then fraction(cR, hd, hc)
10001131 else 0
1001- let gA = if ((go != 0))
1002- then fraction(cy, (C - gg), C)
1132+ let ho = if ((hc != 0))
1133+ then fraction(cR, (K - gU), K)
10031134 else 0
1004- let gB = max([gz, gA])
1005- let gC = (cy - gB)
1006-[gB, gC]
1135+ let hp = max([hn, ho])
1136+ let hq = (cR - hp)
1137+[hp, hq]
10071138 }
10081139
1009- let gD = if ((bp == "outMulti"))
1140+ let hr = if ((bH == "outMulti"))
10101141 then {
1011- let gE = split_4C(ft, "_")
1012- func gF (cd,ce) = {
1013- let cg = split(ce, A)
1014- let gG = fromBase58String(cg[0])
1015- let aM = if ((gG == H))
1142+ let hs = split_4C(fE, "_")
1143+ func ht (cw,cx) = {
1144+ let cz = split(cx, I)
1145+ let hu = fromBase58String(cz[0])
1146+ let bd = if ((hu == P))
10161147 then unit
1017- else gG
1018- let gH = parseIntValue(cg[2])
1019- let cy = parseIntValue(cg[3])
1020- let gI = gy(cy)
1021- $Tuple5((cd._1 :+ ScriptTransfer(bM, gH, aM)), (cd._2 :+ AttachedPayment(aM, gI[0])), (cd._3 :+ AttachedPayment(aM, gI[1])), (cd._4 + gI[0]), (cd._5 + gI[1]))
1148+ else hu
1149+ let hv = parseIntValue(cz[2])
1150+ let cR = parseIntValue(cz[3])
1151+ let hw = hm(cR)
1152+ $Tuple5((cw._1 :+ ScriptTransfer(cf, hv, bd)), (cw._2 :+ AttachedPayment(bd, hw[0])), (cw._3 :+ AttachedPayment(bd, hw[1])), (cw._4 + hw[0]), (cw._5 + hw[1]))
10221153 }
10231154
1024- let fY = {
1025- let ch = gE
1026- let ci = size(ch)
1027- let cj = $Tuple5(nil, nil, nil, 0, 0)
1028- func ck (cl,cm) = if ((cm >= ci))
1029- then cl
1030- else gF(cl, ch[cm])
1155+ let gO = {
1156+ let cA = hs
1157+ let cB = size(cA)
1158+ let cC = $Tuple5(nil, nil, nil, 0, 0)
1159+ func cD (cE,cF) = if ((cF >= cB))
1160+ then cE
1161+ else ht(cE, cA[cF])
10311162
1032- func cn (cl,cm) = if ((cm >= ci))
1033- then cl
1163+ func cG (cE,cF) = if ((cF >= cB))
1164+ then cE
10341165 else throw("List size exceeds 10")
10351166
1036- cn(ck(ck(ck(ck(ck(ck(ck(ck(ck(ck(cj, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1167+ cG(cD(cD(cD(cD(cD(cD(cD(cD(cD(cD(cC, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
10371168 }
1038- let gJ = gr(fY._4, fY._5, fY._2, fY._3)
1039- $Tuple2(fY._1, gJ)
1169+ let hx = hf(gO._4, gO._5, gO._2, gO._3)
1170+ $Tuple2(gO._1, hx)
10401171 }
10411172 else {
1042- let gI = gy(dx)
1043- let gJ = gr(gI[0], gI[1], [AttachedPayment(fl, gI[0])], [AttachedPayment(fl, gI[1])])
1044- $Tuple2([ScriptTransfer(bM, dw, fl)], gJ)
1173+ let hw = hm(dS)
1174+ let hx = hf(hw[0], hw[1], [AttachedPayment(fw, hw[0])], [AttachedPayment(fw, hw[1])])
1175+ $Tuple2([ScriptTransfer(cf, dR, fw)], hx)
10451176 }
1046- $Tuple2((gq ++ gD._1), gD._2)
1177+ $Tuple2((he ++ hr._1), hr._2)
10471178 }
10481179 else throw("Strict value is not equal to itself.")
10491180 }
10561187
10571188
10581189 @Callable(r)
1059-func internalUnleaseAndLease (ec) = if ((r.caller != this))
1190+func internalUnleaseAndLease (ew) = if ((r.caller != this))
10601191 then throw("internalUnleaseAndLease is not public method")
1061- else el(ec)
1192+ else eB(ew)
10621193
10631194
10641195
10651196 @Callable(r)
1066-func transferUsdnToUser (bP,gK) = if ((r.caller != ay))
1197+func transferUsdnToUser (ci,hy) = if ((r.caller != aO))
10671198 then throw("Only auction contract is authorized")
1068- else [ScriptTransfer(addressFromStringValue(gK), bP, cR)]
1199+ else [ScriptTransfer(addressFromStringValue(hy), ci, dk)]
10691200
10701201
10711202
10721203 @Callable(r)
1073-func acceptWaves () = if (if ((r.caller != ay))
1074- then (r.caller != aA)
1204+func acceptWaves () = if (if ((r.caller != aO))
1205+ then (r.caller != aQ)
10751206 else false)
10761207 then throw("Currently only auction and governance contracts are allowed to call")
1077- else $Tuple2(el(0), "success")
1208+ else $Tuple2(eB(0), "success")
10781209
10791210
10801211
10811212 @Callable(r)
1082-func approveLeasings (gL,bn,gM) = {
1083- let gN = [0, 1, 2, 3, 4, 5, 6, 7]
1084- let gO = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
1085- let gP = fromBase58String(gO)
1086- let gQ = valueOrElse(getString("%s%s__cfg__nodesRegistryAddress"), "3P9vKqQKjUdmpXAfiWau8krREYAY1Xr69pE")
1087- let gR = addressFromStringValue(gQ)
1088- let gS = bm(bn)
1089- let gT = getString(this, gS)
1090- if (isDefined(gT))
1091- then throw((("group " + toString(bn)) + " already initialized"))
1213+func approveLeasings (hz,bF,hA) = {
1214+ let hB = [0, 1, 2, 3, 4, 5, 6, 7]
1215+ let hC = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
1216+ let hD = fromBase58String(hC)
1217+ let hE = valueOrElse(getString("%s%s__cfg__nodesRegistryAddress"), "3P9vKqQKjUdmpXAfiWau8krREYAY1Xr69pE")
1218+ let hF = addressFromStringValue(hE)
1219+ let hG = bE(bF)
1220+ let hH = getString(this, hG)
1221+ if (isDefined(hH))
1222+ then throw((("group " + toString(bF)) + " already initialized"))
10921223 else {
1093- let gU = split(gL, z)
1094- let gV = size(gN)
1095- if ((r.callerPublicKey != gP))
1224+ let hI = split(hz, H)
1225+ let hJ = size(hB)
1226+ if ((r.callerPublicKey != hD))
10961227 then throw("approveLeasings not authorized")
10971228 else {
1098- let gW = et(0)
1099- let gX = gW._1
1100- let gY = gW._2
1101- let gZ = gW._3
1102- let ha = gW._4
1103- let hb = gW._5
1104- let hc = Lease(gX, (gZ - (gM * gV)))
1105- let hd = invoke(gR, "validateAndApproveLeasings", [gL], nil)
1106- if ((hd == hd))
1229+ let hK = eL(0)
1230+ let hL = hK._1
1231+ let hM = hK._2
1232+ let hN = hK._3
1233+ let hO = hK._4
1234+ let hP = hK._5
1235+ let hQ = Lease(hL, (hN - (hA * hJ)))
1236+ let hR = invoke(hF, "validateAndApproveLeasings", [hz], nil)
1237+ if ((hR == hR))
11071238 then {
1108- func he (dY,r) = {
1109- let hf = gU[r]
1110- let hg = Lease(addressFromStringValue(hf), gM)
1111- (dY ++ [hg, BinaryEntry(bi(hf), d(hg)), IntegerEntry(bl(hf), gM)])
1239+ func hS (eu,r) = {
1240+ let hT = hI[r]
1241+ let hU = Lease(addressFromStringValue(hT), hA)
1242+ (eu ++ [hU, BinaryEntry(bA(hT), d(hU)), IntegerEntry(bD(hT), hA)])
11121243 }
11131244
1114- ([StringEntry(gS, gL), BinaryEntry(ha, d(hc)), IntegerEntry(gY, hc.amount), LeaseCancel(hb), hc] ++ {
1115- let ch = gN
1116- let ci = size(ch)
1117- let cj = nil
1118- func ck (cl,cm) = if ((cm >= ci))
1119- then cl
1120- else he(cl, ch[cm])
1245+ ([StringEntry(hG, hz), BinaryEntry(hO, d(hQ)), IntegerEntry(hM, hQ.amount), LeaseCancel(hP), hQ] ++ {
1246+ let cA = hB
1247+ let cB = size(cA)
1248+ let cC = nil
1249+ func cD (cE,cF) = if ((cF >= cB))
1250+ then cE
1251+ else hS(cE, cA[cF])
11211252
1122- func cn (cl,cm) = if ((cm >= ci))
1123- then cl
1253+ func cG (cE,cF) = if ((cF >= cB))
1254+ then cE
11241255 else throw("List size exceeds 8")
11251256
1126- cn(ck(ck(ck(ck(ck(ck(ck(ck(cj, 0), 1), 2), 3), 4), 5), 6), 7), 8)
1257+ cG(cD(cD(cD(cD(cD(cD(cD(cD(cC, 0), 1), 2), 3), 4), 5), 6), 7), 8)
11271258 })
11281259 }
11291260 else throw("Strict value is not equal to itself.")
11341265
11351266
11361267 @Callable(r)
1137-func rebalanceLeasings (bP,bn) = {
1138- let gN = [0, 1, 2, 3, 4, 5, 6, 7]
1139- let gO = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
1140- let gP = fromBase58String(gO)
1141- let gS = bm(bn)
1142- let gL = a(this, gS)
1143- let gU = split(gL, z)
1144- if ((r.callerPublicKey != gP))
1268+func rebalanceLeasings (ci,bF) = {
1269+ let hC = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
1270+ let hD = fromBase58String(hC)
1271+ if ((r.callerPublicKey != hD))
11451272 then throw("rebalanceLeasings not authorized")
11461273 else {
1147- let fo = ((bP / size(gU)) + 1)
1148- let hh = et(0)
1149- let gX = hh._1
1150- let gY = hh._2
1151- let gZ = hh._3
1152- let ha = hh._4
1153- let hb = hh._5
1154- let hc = Lease(gX, (gZ + (fo * size(gU))))
1155- func hi (dY,r) = {
1156- let hf = gU[r]
1157- let hj = bi(hf)
1158- let hk = getBinaryValue(this, hj)
1159- let hl = bl(hf)
1160- let gM = getIntegerValue(this, hl)
1161- let hm = LeaseCancel(value(hk))
1162- let hg = Lease(addressFromStringValue(hf), (gM - fo))
1163- (dY ++ [LeaseCancel(value(hk)), hg, BinaryEntry(hj, d(hg)), IntegerEntry(hl, hg.amount)])
1164- }
1274+ let hG = bE(bF)
1275+ let hI = split(a(this, hG), H)
1276+ if ((1 > size(hI)))
1277+ then throw(("Empty group " + toString(bF)))
1278+ else {
1279+ let fz = ((ci / size(hI)) + 1)
1280+ let hV = eL(0)
1281+ let hL = hV._1
1282+ let hM = hV._2
1283+ let hN = hV._3
1284+ let hO = hV._4
1285+ let hP = hV._5
1286+ func hW (eu,hT) = {
1287+ let hX = bA(hT)
1288+ let hY = getBinaryValue(this, hX)
1289+ let hZ = bD(hT)
1290+ let hA = getIntegerValue(this, hZ)
1291+ (eu ++ eR(addressFromStringValue(hT), (hA - fz), hY, hX, hZ))
1292+ }
11651293
1166- ({
1167- let ch = gN
1168- let ci = size(ch)
1169- let cj = nil
1170- func ck (cl,cm) = if ((cm >= ci))
1171- then cl
1172- else hi(cl, ch[cm])
1294+ ({
1295+ let cA = hI
1296+ let cB = size(cA)
1297+ let cC = nil
1298+ func cD (cE,cF) = if ((cF >= cB))
1299+ then cE
1300+ else hW(cE, cA[cF])
11731301
1174- func cn (cl,cm) = if ((cm >= ci))
1175- then cl
1176- else throw("List size exceeds 8")
1302+ func cG (cE,cF) = if ((cF >= cB))
1303+ then cE
1304+ else throw("List size exceeds 8")
11771305
1178- cn(ck(ck(ck(ck(ck(ck(ck(ck(cj, 0), 1), 2), 3), 4), 5), 6), 7), 8)
1179- } ++ [BinaryEntry(ha, d(hc)), IntegerEntry(gY, hc.amount), LeaseCancel(hb), hc])
1306+ cG(cD(cD(cD(cD(cD(cD(cD(cD(cC, 0), 1), 2), 3), 4), 5), 6), 7), 8)
1307+ } ++ eR(hL, (hN + (fz * size(hI))), hP, hO, hM))
1308+ }
11801309 }
11811310 }
11821311
11831312
11841313
11851314 @Callable(r)
1186-func swapParamsByUserSYSREADONLY (eB,hn) = {
1187- let gn = l(invoke(ax, "gnsbtInfoSYSREADONLY", [eB, 0, 0], nil))
1188- let ho = (q(gn[0]) + hn)
1189- let go = (q(gn[1]) + hn)
1190- let hp = l(invoke(au, "calcSwapLimitREADONLY", [ho], nil))
1191- let hq = q(hp[0])
1192- let eH = q(hp[2])
1193- let hr = valueOrElse(getInteger(this, bN(eB)), 0)
1194- let hs = bG()
1195- let ht = (height - hr)
1196- let hu = (ht >= hs)
1197- let hv = if (hu)
1315+func swapParamsByUserSYSREADONLY (fH,ia) = {
1316+ let hb = l(invoke(aN, "gnsbtInfoSYSREADONLY", [fH, 0, 0], nil))
1317+ let ib = (q(hb[0]) + ia)
1318+ let hc = (q(hb[1]) + ia)
1319+ let ic = l(invoke(aK, "calcSwapLimitREADONLY", [ib], nil))
1320+ let id = q(ic[0])
1321+ let fN = q(ic[2])
1322+ let ie = valueOrElse(getInteger(this, cg(fH)), 0)
1323+ let if = bZ()
1324+ let ig = (height - ie)
1325+ let ih = (ig >= if)
1326+ let ii = if (ih)
11981327 then 0
1199- else valueOrElse(getInteger(this, bL(eB)), 0)
1200- let eG = if (hu)
1328+ else valueOrElse(getInteger(this, ce(fH)), 0)
1329+ let fM = if (ih)
12011330 then 0
1202- else (hs - ht)
1203- $Tuple2(nil, $Tuple7(hq, hv, eG, ho, go, 0, eH))
1331+ else (if - ig)
1332+ $Tuple2(nil, $Tuple7(id, ii, fM, ib, hc, 0, fN))
12041333 }
12051334
12061335
12071336
12081337 @Callable(r)
1209-func calcWithdrawResultSYSREADONLY (bp,bX,bQ,bY) = {
1210- let eO = l(invoke(au, "calcNeutinoMetricsREADONLY", nil, nil))
1211- $Tuple2(nil, fj(bp, bX, bQ, eO, bY))
1338+func calcWithdrawResultSYSREADONLY (bH,cq,cj,cr,ef) = {
1339+ let fu = l(invoke(aK, "calcNeutinoMetricsREADONLY", nil, nil))
1340+ $Tuple2(nil, ft(bH, cq, cj, fu, cr, ef, true))
12121341 }
12131342
12141343
12151344
12161345 @Callable(r)
1217-func replaceCommunityNode (hw,hx,bn,hy) = {
1218- let gO = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
1219- let gP = fromBase58String(gO)
1220- if ((r.callerPublicKey != gP))
1346+func replaceCommunityNode (ij,ik,bF,il) = {
1347+ let hC = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
1348+ let hD = fromBase58String(hC)
1349+ if ((r.callerPublicKey != hD))
12211350 then throw("replaceCommunityNode not authorized")
12221351 else {
1223- let hz = bm(bn)
1224- let hA = a(this, hz)
1225- if (!(contains(hA, hw)))
1226- then throw(((("Group " + toString(bn)) + " does not contain address ") + hw))
1352+ let im = bE(bF)
1353+ let in = a(this, im)
1354+ if (!(contains(in, ij)))
1355+ then throw(((("Group " + toString(bF)) + " does not contain address ") + ij))
12271356 else {
1228- let hB = invoke(az, "replaceApprovedNode", [hw, hx, bn, hy], nil)
1229- if ((hB == hB))
1357+ let io = invoke(aP, "replaceApprovedNode", [ij, ik, bF, il], nil)
1358+ if ((io == io))
12301359 then {
1231- let hC = bi(hw)
1232- let hD = bl(hw)
1233- let hE = getIntegerValue(hD)
1234- let hF = bi(hx)
1235- let hG = bl(hx)
1236- let hH = Lease(addressFromStringValue(hx), hE)
1237- let hI = makeString(split(hA, hw), hx)
1238- $Tuple2([LeaseCancel(getBinaryValue(hC)), DeleteEntry(hC), DeleteEntry(hD), StringEntry(hz, hI), hH, BinaryEntry(hF, d(hH)), IntegerEntry(hG, hE)], unit)
1360+ let ip = bA(ij)
1361+ let iq = bD(ij)
1362+ let ir = getIntegerValue(iq)
1363+ let is = bA(ik)
1364+ let it = bD(ik)
1365+ let iu = makeString(split(in, ij), ik)
1366+ $Tuple2(([DeleteEntry(ip), DeleteEntry(iq), StringEntry(im, iu)] ++ eR(addressFromStringValue(ik), ir, getBinaryValue(ip), is, it)), unit)
12391367 }
12401368 else throw("Strict value is not equal to itself.")
12411369 }
12431371 }
12441372
12451373
1246-@Verifier(cZ)
1247-func hJ () = {
1248- let hK = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR"], z)
1249- let hL = split(valueOrElse(getString(at, "%s__multisig"), hK), z)
1250- let hM = ((((if (sigVerify(cZ.bodyBytes, cZ.proofs[0], fromBase58String(hL[0])))
1374+
1375+@Callable(r)
1376+func removeCommunityNode (ij,bF,il) = {
1377+ let hC = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
1378+ let hD = fromBase58String(hC)
1379+ if ((r.callerPublicKey != hD))
1380+ then throw("removeCommunityNode not authorized")
1381+ else {
1382+ let im = bE(bF)
1383+ let in = a(this, im)
1384+ if (!(contains(in, ij)))
1385+ then throw(((("Group " + toString(bF)) + " does not contain address ") + ij))
1386+ else {
1387+ let iv = invoke(aP, "removeApprovedNode", [ij, il], nil)
1388+ if ((iv == iv))
1389+ then {
1390+ let ip = bA(ij)
1391+ let iq = bD(ij)
1392+ let ir = getIntegerValue(iq)
1393+ let iw = eL(0)
1394+ let hL = iw._1
1395+ let hM = iw._2
1396+ let hN = iw._3
1397+ let hO = iw._4
1398+ let hP = iw._5
1399+ let iu = B(in, H, ij)
1400+ $Tuple2(([DeleteEntry(ip), DeleteEntry(iq), StringEntry(im, iu), LeaseCancel(hP)] ++ eR(hL, (hN + ir), getBinaryValue(ip), hO, hM)), unit)
1401+ }
1402+ else throw("Strict value is not equal to itself.")
1403+ }
1404+ }
1405+ }
1406+
1407+
1408+@Verifier(dt)
1409+func ix () = {
1410+ let iy = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR"], H)
1411+ let iz = split(valueOrElse(getString(aJ, "%s__multisig"), iy), H)
1412+ let iA = ((((if (sigVerify(dt.bodyBytes, dt.proofs[0], fromBase58String(iz[0])))
12511413 then 1
1252- else 0) + (if (sigVerify(cZ.bodyBytes, cZ.proofs[1], fromBase58String(hL[1])))
1414+ else 0) + (if (sigVerify(dt.bodyBytes, dt.proofs[1], fromBase58String(iz[1])))
12531415 then 1
1254- else 0)) + (if (sigVerify(cZ.bodyBytes, cZ.proofs[2], fromBase58String(hL[2])))
1416+ else 0)) + (if (sigVerify(dt.bodyBytes, dt.proofs[2], fromBase58String(iz[2])))
12551417 then 1
1256- else 0)) + (if (sigVerify(cZ.bodyBytes, cZ.proofs[3], fromBase58String(hL[3])))
1418+ else 0)) + (if (sigVerify(dt.bodyBytes, dt.proofs[3], fromBase58String(iz[3])))
12571419 then 2
12581420 else 0))
1259- if (if (cS)
1260- then (getStringValue(at, "is_blocked_caller") == toString(aA))
1421+ if (if (dl)
1422+ then (getStringValue(aJ, "is_blocked_caller") == toString(aQ))
12611423 else false)
1262- then fy(cZ)
1424+ then gj(dt)
12631425 else {
1264- let n = cZ
1426+ let n = dt
12651427 if ($isInstanceOf(n, "SponsorFeeTransaction"))
12661428 then {
1267- let hN = n
1268- if (cY(hN))
1269- then (hM >= 3)
1429+ let iB = n
1430+ if (ds(iB))
1431+ then (iA >= 3)
12701432 else false
12711433 }
1272- else (hM >= 3)
1434+ else (iA >= 3)
12731435 }
12741436 }
12751437
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func a (b,c) = valueOrErrorMessage(getString(b, c), makeString(["mandatory ", toString(b), ".", c, " is not defined"], ""))
55
66
77 func d (e) = calculateLeaseId(e)
88
99
1010 func f (c) = valueOrElse(getInteger(this, c), 0)
1111
1212
1313 func g (c) = valueOrElse(getString(this, c), "")
1414
1515
1616 func h (c) = valueOrElse(getBoolean(this, c), false)
1717
1818
1919 func i (b,c) = valueOrElse(getInteger(b, c), 0)
2020
2121
2222 func j (b,c) = valueOrElse(getString(addressFromStringValue(b), c), "")
2323
2424
2525 func k (b,c) = valueOrElse(getBoolean(b, c), false)
2626
2727
2828 func l (m) = {
2929 let n = m
3030 if ($isInstanceOf(n, "List[Any]"))
3131 then {
3232 let e = n
3333 e
3434 }
3535 else throw("fail to cast into List[Any]")
3636 }
3737
3838
3939 func o (m) = {
4040 let n = m
4141 if ($isInstanceOf(n, "String"))
4242 then {
4343 let p = n
4444 p
4545 }
4646 else throw("fail to cast into String")
4747 }
4848
4949
5050 func q (m) = {
5151 let n = m
5252 if ($isInstanceOf(n, "Int"))
5353 then {
5454 let r = n
5555 r
5656 }
5757 else throw("fail to cast into Int")
5858 }
5959
6060
6161 func s (t) = {
6262 let n = t
6363 if ($isInstanceOf(n, "ByteVector"))
6464 then {
6565 let u = n
6666 u
6767 }
6868 else throw("fail to cast into ByteVector")
6969 }
7070
7171
7272 func v (m) = {
7373 let n = m
7474 if ($isInstanceOf(n, "AttachedPayment"))
7575 then {
7676 let w = n
7777 w
7878 }
7979 else throw("fail to cast into AttachedPayment")
8080 }
8181
8282
8383 func x (m) = {
8484 let n = m
85- if ($isInstanceOf(n, "(Int, Int, Int, Int, Int, Int, Int)"))
85+ if ($isInstanceOf(n, "Boolean"))
8686 then {
8787 let y = n
8888 y
89+ }
90+ else throw("fail to cast into Boolean")
91+ }
92+
93+
94+func z (m) = {
95+ let n = m
96+ if ($isInstanceOf(n, "(Int, Int, Int, Int, Int, Int, Int)"))
97+ then {
98+ let A = n
99+ A
89100 }
90101 else throw("fail to cast into Tuple5 ints")
91102 }
92103
93104
94-let z = "__"
105+func B (C,D,E) = {
106+ let F = split(C, D)
107+ let G = valueOrErrorMessage(indexOf(F, E), ((C + "does not contain ") + E))
108+ makeString(removeByIndex(F, G), D)
109+ }
95110
96-let A = ":"
97111
98-let B = 100000000
112+let H = "__"
99113
100-let C = 1000000
114+let I = ":"
101115
102-let D = 20000
116+let J = 100000000
103117
104-let E = 5000
118+let K = 1000000
105119
106-let F = 150000
120+let L = 20000
107121
108-let G = 100000
122+let M = 5000
109123
110-let H = base58'WAVES'
124+let N = 150000
111125
112-let I = 0
126+let O = 100000
113127
114-let J = 1
128+let P = base58'WAVES'
115129
116-let K = 2
130+let Q = 28800000
117131
118-let L = 3
132+let R = 100000
119133
120-let M = 4
134+let S = 86400000
121135
122-let N = 5
136+let T = 1000000000000
123137
124-let O = 6
138+let U = 30000000000000
125139
126-let P = 7
140+func V () = "%s__wavesWithdrawnToday"
127141
128-let Q = 8
129142
130-let R = 9
143+func W () = "%s__wavesWithdrawnTotal"
131144
132-let S = 10
133145
134-let T = 11
146+func X () = "%s__lastWavesWithdrawalDay"
135147
136-let U = 12
137148
138-let V = 13
139-
140-let W = 14
141-
142-let X = 15
143-
144-let Y = 16
149+let Y = 0
145150
146151 let Z = 1
147152
148153 let aa = 2
149154
150155 let ab = 3
151156
152157 let ac = 4
153158
154159 let ad = 5
155160
156161 let ae = 6
157162
158163 let af = 7
159164
160165 let ag = 8
161166
162167 let ah = 9
163168
164169 let ai = 10
165170
166171 let aj = 11
167172
168173 let ak = 12
169174
170175 let al = 13
171176
172-func am () = "%s%s__config__controlAddress"
177+let am = 14
178+
179+let an = 15
180+
181+let ao = 16
182+
183+let ap = 1
184+
185+let aq = 2
186+
187+let ar = 3
188+
189+let as = 4
190+
191+let at = 5
192+
193+let au = 6
194+
195+let av = 7
196+
197+let aw = 8
198+
199+let ax = 9
200+
201+let ay = 10
202+
203+let az = 11
204+
205+let aA = 12
206+
207+let aB = 13
208+
209+let aC = 15
210+
211+func aD () = "%s%s__config__controlAddress"
173212
174213
175-func an () = "%s__controlConfig"
214+func aE () = "%s__controlConfig"
176215
177216
178-func ao (ap) = split_4C(a(ap, an()), z)
217+func aF (aG) = split_4C(a(aG, aE()), H)
179218
180219
181-func aq (ar,as) = valueOrErrorMessage(addressFromString(ar[as]), ("Control cfg doesn't contain address at index " + toString(as)))
220+func aH (aI,G) = valueOrErrorMessage(addressFromString(aI[G]), ("Control cfg doesn't contain address at index " + toString(G)))
182221
183222
184-let at = addressFromStringValue(valueOrElse(getString(this, am()), "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx"))
223+let aJ = addressFromStringValue(valueOrElse(getString(this, aD()), "3N4NS7d4Jo9a6F14LiFUKKYVdUkkf2eP4Zx"))
185224
186-let ar = ao(at)
225+let aI = aF(aJ)
187226
188-let au = aq(ar, ac)
227+let aK = aH(aI, as)
189228
190-let av = aq(ar, ag)
229+let aL = aH(aI, aw)
191230
192-let aw = aq(ar, ai)
231+let aM = aH(aI, ay)
193232
194-let ax = aq(ar, aj)
233+let aN = aH(aI, az)
195234
196-let ay = aq(ar, aa)
235+let aO = aH(aI, aq)
197236
198-let az = aq(ar, af)
237+let aP = aH(aI, av)
199238
200-let aA = aq(ar, al)
239+let aQ = aH(aI, aB)
201240
202-let aB = "neutrino_asset_id"
241+let aR = aH(aI, aC)
203242
204-let aC = "bond_asset_id"
243+let aS = "neutrino_asset_id"
205244
206-let aD = "auction_contract"
245+let aT = "bond_asset_id"
207246
208-let aE = "nsbtStakingContract"
247+let aU = "auction_contract"
209248
210-let aF = "liquidation_contract"
249+let aV = "nsbtStakingContract"
211250
212-let aG = "rpd_contract"
251+let aW = "liquidation_contract"
213252
214-let aH = "control_contract"
253+let aX = "rpd_contract"
215254
216-let aI = "math_contract"
255+let aY = "control_contract"
217256
218-let aJ = "balance_waves_lock_interval"
257+let aZ = "math_contract"
219258
220-let aK = "balance_neutrino_lock_interval"
259+let ba = "balance_waves_lock_interval"
221260
222-func aL (aM) = ("min_outNeutrino_swap_amount_" + aM)
261+let bb = "balance_neutrino_lock_interval"
262+
263+func bc (bd) = ("min_outNeutrino_swap_amount_" + bd)
223264
224265
225-let aN = "min_outMulti_swap_amount"
266+let be = "min_outMulti_swap_amount"
226267
227-let aO = "min_neutrino_swap_amount"
268+let bf = "min_neutrino_swap_amount"
228269
229-let aP = "node_oracle_provider"
270+let bg = "node_oracle_provider"
230271
231-let aQ = "neutrinoOut_swap_feePart"
272+let bh = "neutrinoOut_swap_feePart"
232273
233-let aR = "wavesOut_swap_feePart"
274+let bi = "wavesOut_swap_feePart"
234275
235-let aS = "multiOut_swap_feePart"
276+let bj = "multiOut_swap_feePart"
236277
237-func aT (b) = ("%s__" + b)
278+func bk (b) = ("%s__" + b)
238279
239280
240-let aU = "price"
281+let bl = "price"
241282
242-let aV = "price_index"
283+let bm = "price_index"
243284
244-let aW = "is_blocked"
285+let bn = "is_blocked"
245286
246-func aX (aY) = ((aU + "_") + toString(aY))
287+let bo = "xtn_issue_disabled"
288+
289+func bp (bq) = ((bl + "_") + toString(bq))
247290
248291
249-func aZ (ba) = ((aV + "_") + toString(ba))
292+func br (bs) = ((bm + "_") + toString(bs))
250293
251294
252-func bb (as) = g(makeString(["%s%d%s", "lease", toString(as), "nodeAddress"], z))
295+func bt (G) = g(makeString(["%s%d%s", "lease", toString(G), "nodeAddress"], H))
253296
254297
255-func bc (as) = addressFromStringValue(bb(as))
298+func bu (G) = addressFromStringValue(bt(G))
256299
257300
258-func bd () = valueOrElse(getInteger(this, makeString(["%s%s", "lease", "sponsorshipWavesReserve"], z)), (1000 * B))
301+func bv () = valueOrElse(getInteger(this, makeString(["%s%s", "lease", "sponsorshipWavesReserve"], H)), (1000 * J))
259302
260303
261-func be (bf) = ("balance_unlock_block_" + bf)
304+func bw (bx) = ("balance_unlock_block_" + bx)
262305
263306
264-func bg (bh) = makeString(["%s%d%s", "lease", toString(bh), "id"], z)
307+func by (bz) = makeString(["%s%d%s", "lease", toString(bz), "id"], H)
265308
266309
267-func bi (bj) = makeString(["%s%s%s", "leaseByAddress", bj, "id"], z)
310+func bA (bB) = makeString(["%s%s%s", "leaseByAddress", bB, "id"], H)
268311
269312
270-func bk (bh) = makeString(["%s%d%s", "lease", toString(bh), "amount"], z)
313+func bC (bz) = makeString(["%s%d%s", "lease", toString(bz), "amount"], H)
271314
272315
273-func bl (bj) = makeString(["%s%s%s", "leaseByAddress", bj, "amount"], z)
316+func bD (bB) = makeString(["%s%s%s", "leaseByAddress", bB, "amount"], H)
274317
275318
276-func bm (bn) = makeString(["%s%d%s", "leaseGroup", toString(bn), "nodeList"], z)
319+func bE (bF) = makeString(["%s%d%s", "leaseGroup", toString(bF), "nodeList"], H)
277320
278321
279-func bo (bp) = (("min_" + bp) + "_swap_amount")
322+func bG (bH) = (("min_" + bH) + "_swap_amount")
280323
281324
282-func bq (bp,aM) = makeString(["%s%s%s", "balanceLock", bp, aM], z)
325+func bI (bH,bd) = makeString(["%s%s%s", "balanceLock", bH, bd], H)
283326
284327
285-func br (bp,bf,aM) = makeString(["%s%s%s%s", "balanceLock", bp, bf, aM], "_")
328+func bJ (bH,bx,bd) = makeString(["%s%s%s%s", "balanceLock", bH, bx, bd], "_")
286329
287330
288-func bs (bp) = if ((bp == "outMulti"))
289- then aK
290- else aJ
331+func bK (bH) = if ((bH == "outMulti"))
332+ then bb
333+ else ba
291334
292335
293-func bt () = "balance_node_lock_interval"
336+func bL () = "balance_node_lock_interval"
294337
295338
296-func bu () = "swaps_timeframe"
339+func bM () = "swaps_timeframe"
297340
298341
299-func bv () = "min_BR_protection_level"
342+func bN () = "min_BR_protection_level"
300343
301344
302-func bw () = "%s%s__common__basketAssets"
345+func bO () = "%s%s__common__basketAssets"
303346
304347
305-func bx () = "%s%s__common__basketD"
348+func bP () = "%s%s__common__basketD"
306349
307350
308-func by () = "%s%s__common__basketK"
351+func bQ () = "%s%s__common__basketK"
309352
310353
311-func bz () = "%s%s__common__basketB"
354+func bR () = "%s%s__common__basketB"
312355
313356
314-func bA () = "%s%s__common__basketLogbDelta"
357+func bS () = "%s%s__common__basketLogbDelta"
315358
316359
317-func bB (aM) = ("%s%s%s__common__weightByAsset__" + aM)
360+func bT (bd) = ("%s%s%s__common__weightByAsset__" + bd)
318361
319362
320-func bC (aM) = ("%s%s%s__common__priceByAsset__" + aM)
363+func bU (bd) = ("%s%s%s__common__priceByAsset__" + bd)
321364
322365
323-func bD () = "%s%s__common__maxAllowedFee"
366+func bV () = "%s%s__common__maxAllowedFee"
324367
325368
326-func bE () = valueOrElse(getInteger(aS), valueOrElse(getInteger(aR), E))
369+func bW () = valueOrElse(getInteger(bj), valueOrElse(getInteger(bi), M))
327370
328371
329-func bF (bp,aM) = if ((bp == "outMulti"))
330- then valueOrElse(getInteger(aN), f(aO))
331- else f(aL(aM))
372+func bX () = valueOrElse(getInteger(bh), L)
332373
333374
334-func bG () = valueOrElse(getInteger(this, bu()), 1440)
375+func bY (bH,bd) = if ((bH == "outMulti"))
376+ then valueOrElse(getInteger(be), f(bf))
377+ else f(bc(bd))
335378
336379
337-func bH (bp,aM) = valueOrElse(getInteger(this, bq(bp, aM)), 0)
380+func bZ () = valueOrElse(getInteger(this, bM()), 1440)
338381
339382
340-func bI (bp,bf,aM) = valueOrElse(getInteger(this, br(bp, bf, aM)), 0)
383+func ca (bH,bd) = valueOrElse(getInteger(this, bI(bH, bd)), 0)
341384
342385
343-func bJ (bp) = valueOrElse(getInteger(this, bs(bp)), 1440)
386+func cb (bH,bx,bd) = valueOrElse(getInteger(this, bJ(bH, bx, bd)), 0)
344387
345388
346-func bK () = valueOrElse(getInteger(this, bt()), 1)
389+func cc (bH) = valueOrElse(getInteger(this, bK(bH)), 1440)
347390
348391
349-func bL (bM) = makeString(["%s%s", "swapUserSpentInPeriod", bM], z)
392+func cd () = valueOrElse(getInteger(this, bL()), 1)
350393
351394
352-func bN (bM) = makeString(["%s%s", "userLastSwapHeight", bM], z)
395+func ce (cf) = makeString(["%s%s", "swapUserSpentInPeriod", cf], H)
353396
354397
355-func bO (bP,bQ) = fraction(bP, B, bQ)
398+func cg (cf) = makeString(["%s%s", "userLastSwapHeight", cf], H)
356399
357400
358-func bR (bP,bQ) = fraction(bP, bQ, B)
401+func ch (ci,cj) = fraction(ci, J, cj)
359402
360403
361-func bS (bP,bQ) = fraction(bP, bQ, B)
404+func ck (ci,cj) = fraction(ci, cj, J)
362405
363406
364-func bT (bP,bQ) = bR(bP, bQ)
407+func cl (ci,cj) = fraction(ci, cj, J)
365408
366409
367-func bU (bV) = split(bV, ",")
410+func cm (ci,cj) = ck(ci, cj)
368411
369412
370-func bW (bX,bY,bZ,ca) = {
371- let cb = split_4C(bZ, "_")
372- func cc (cd,ce) = {
373- let cf = split(ce, A)
374- if ((cf[0] == bY))
375- then cf
376- else cd
413+func cn (co) = split(co, ",")
414+
415+
416+func cp (cq,cr,cs,ct) = {
417+ let cu = split_4C(cs, "_")
418+ func cv (cw,cx) = {
419+ let cy = split(cx, I)
420+ if ((cy[0] == cr))
421+ then cy
422+ else cw
377423 }
378424
379- let cg = {
380- let ch = cb
381- let ci = size(ch)
382- let cj = nil
383- func ck (cl,cm) = if ((cm >= ci))
384- then cl
385- else cc(cl, ch[cm])
425+ let cz = {
426+ let cA = cu
427+ let cB = size(cA)
428+ let cC = nil
429+ func cD (cE,cF) = if ((cF >= cB))
430+ then cE
431+ else cv(cE, cA[cF])
386432
387- func cn (cl,cm) = if ((cm >= ci))
388- then cl
433+ func cG (cE,cF) = if ((cF >= cB))
434+ then cE
389435 else throw("List size exceeds 10")
390436
391- cn(ck(ck(ck(ck(ck(ck(ck(ck(ck(ck(cj, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
437+ cG(cD(cD(cD(cD(cD(cD(cD(cD(cD(cD(cC, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
392438 }
393- let co = value(getInteger(bA()))
394- let cp = value(getInteger(bx()))
395- let cq = value(getInteger(bz()))
396- let cr = value(getInteger(bB(bY)))
397- let cs = ((co - cr) + parseIntValue(cg[1]))
398- let ct = pow(cq, 6, cs, 6, 6, HALFUP)
399- let cu = fraction(bX, parseIntValue(cg[2]), if ((ca == 0))
400- then B
401- else (ca * 100))
402- let cv = ((C + cp) - ct)
403- if ((0 >= cv))
404- then throw(("Non-positive multiplier = " + toString(cv)))
439+ let cH = value(getInteger(bS()))
440+ let cI = value(getInteger(bP()))
441+ let cJ = value(getInteger(bR()))
442+ let cK = value(getInteger(bT(cr)))
443+ let cL = ((cH - cK) + parseIntValue(cz[1]))
444+ let cM = pow(cJ, 6, cL, 6, 6, HALFUP)
445+ let cN = fraction(cq, parseIntValue(cz[2]), if ((ct == 0))
446+ then J
447+ else (ct * 100))
448+ let cO = ((K + cI) - cM)
449+ if ((0 >= cO))
450+ then throw(("Non-positive multiplier = " + toString(cO)))
405451 else {
406- let cw = fraction(cu, cv, C)
407- let cx = valueOrElse(getInteger(aQ), D)
408- let cy = fraction(cw, cx, C)
409-[cw, (cw - cy), cy, cv]
452+ let cP = fraction(cN, cO, K)
453+ let cQ = valueOrElse(getInteger(bh), L)
454+ let cR = fraction(cP, cQ, K)
455+[cP, (cP - cR), cR, cO]
410456 }
411457 }
412458
413459
414-func cz (bP,bZ,cA) = {
415- let cb = split_4C(bZ, "_")
416- let cB = value(getInteger(by()))
417- let cp = value(getInteger(bx()))
418- let cC = (C - fraction(cB, cp, C))
419- func cD (cd,ce) = {
420- let cE = split(ce, A)
421- let aM = cE[0]
422- let cF = parseIntValue(cE[1])
423- let bQ = parseIntValue(cE[2])
424- let cG = parseIntValue(cE[3])
425- if ((cA == 0))
460+func cS (ci,cs,cT) = {
461+ let cu = split_4C(cs, "_")
462+ let cU = value(getInteger(bQ()))
463+ let cI = value(getInteger(bP()))
464+ let cV = (K - fraction(cU, cI, K))
465+ func cW (cw,cx) = {
466+ let cX = split(cx, I)
467+ let bd = cX[0]
468+ let cY = parseIntValue(cX[1])
469+ let cj = parseIntValue(cX[2])
470+ let cZ = parseIntValue(cX[3])
471+ if ((cT == 0))
426472 then throw("Attempt to burn neutrino at zero supply")
427473 else {
428- let cH = fraction(fraction(bP, cG, cA), cC, C)
429- let cI = if ((aM == "WAVES"))
430- then $Tuple2(cH, bQ)
431- else $Tuple2(cd._2, cd._3)
432- $Tuple3((cd._1 :+ $Tuple4(aM, cH, bQ, cF)), cI._1, cI._2)
474+ let da = fraction(fraction(ci, cZ, cT), cV, K)
475+ let db = if ((bd == "WAVES"))
476+ then $Tuple2(da, cj)
477+ else $Tuple2(cw._2, cw._3)
478+ $Tuple3((cw._1 :+ $Tuple4(bd, da, cj, cY)), db._1, db._2)
433479 }
434480 }
435481
436- let ch = cb
437- let ci = size(ch)
438- let cj = $Tuple3(nil, 0, 0)
439- func ck (cl,cm) = if ((cm >= ci))
440- then cl
441- else cD(cl, ch[cm])
482+ let cA = cu
483+ let cB = size(cA)
484+ let cC = $Tuple3(nil, 0, 0)
485+ func cD (cE,cF) = if ((cF >= cB))
486+ then cE
487+ else cW(cE, cA[cF])
442488
443- func cn (cl,cm) = if ((cm >= ci))
444- then cl
489+ func cG (cE,cF) = if ((cF >= cB))
490+ then cE
445491 else throw("List size exceeds 10")
446492
447- cn(ck(ck(ck(ck(ck(ck(ck(ck(ck(ck(cj, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
493+ cG(cD(cD(cD(cD(cD(cD(cD(cD(cD(cD(cC, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
448494 }
449495
450496
451-func cJ (bp,cK) = throw(((("The specified amount in " + bp) + " swap is less than the required minimum of ") + toString(cK)))
497+func dc (bH,dd) = throw(((("The specified amount in " + bH) + " swap is less than the required minimum of ") + toString(dd)))
452498
453499
454-func cL () = throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
500+func de () = throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
455501
456502
457-func cM (ba,cN,cO,cP,cQ) = throw(((((((((("invalid price history index: index=" + toString(ba)) + " priceIndex=") + toString(cN)) + " indexHeight=") + toString(cO)) + " unlockHeight=") + toString(cP)) + " prevIndexHeight=") + toString(cQ)))
503+func df (bs,dg,dh,di,dj) = throw(((((((((("invalid price history index: index=" + toString(bs)) + " priceIndex=") + toString(dg)) + " indexHeight=") + toString(dh)) + " unlockHeight=") + toString(di)) + " prevIndexHeight=") + toString(dj)))
458504
459505
460-let cR = fromBase58String(g(aB))
506+let dk = fromBase58String(g(aS))
461507
462-let cN = i(at, aV)
508+let dg = i(aJ, bm)
463509
464-let cS = k(at, aW)
510+let dl = k(aJ, bn)
465511
466-let cT = fromBase58String(g(aP))
512+let dm = k(aJ, bo)
467513
468-let cU = fromBase58String("F3iaxzruFeKujfVfYSZEkejpjh67wmRfPCRHiNmWKp3Z")
514+let dn = fromBase58String(g(bg))
469515
470-let cV = fromBase58String("975akZBfnMj513U7MZaHKzQrmsEx5aE3wdWKTrHBhbjF")
516+let do = fromBase58String("F3iaxzruFeKujfVfYSZEkejpjh67wmRfPCRHiNmWKp3Z")
471517
472-let cW = this
518+let dp = fromBase58String("975akZBfnMj513U7MZaHKzQrmsEx5aE3wdWKTrHBhbjF")
473519
474-let cX = i(at, aU)
520+let dq = this
475521
476-func cY (cZ) = {
477- let da = 100000
478- let db = 1000
479- let dc = bR(da, cX)
480- let dd = (dc * 2)
481- let de = fraction(dc, db, 100)
482- let df = value(cZ.minSponsoredAssetFee)
483- if (if ((df >= dd))
484- then (de >= df)
522+let dr = i(aJ, bl)
523+
524+func ds (dt) = {
525+ let du = 100000
526+ let dv = 1000
527+ let dw = ck(du, dr)
528+ let dx = (dw * 2)
529+ let dy = fraction(dw, dv, 100)
530+ let dz = value(dt.minSponsoredAssetFee)
531+ if (if ((dz >= dx))
532+ then (dy >= dz)
485533 else false)
486- then (cZ.assetId == cR)
534+ then (dt.assetId == dk)
487535 else false
488536 }
489537
490538
491-func dg (aY) = i(at, aX(aY))
539+func dA (bq) = i(aJ, bp(bq))
492540
493541
494-func dh (ba) = i(at, aZ(ba))
542+func dB (bs) = i(aJ, br(bs))
495543
496544
497-func di (bM) = makeString(["%s%s%s", "paramByUser", bM, "amount"], z)
545+func dC (cf) = makeString(["%s%s%s", "paramByUser", cf, "amount"], H)
498546
499547
500-let dj = 1
548+let dD = 1
501549
502-let dk = 2
550+let dE = 2
503551
504-let dl = 3
552+let dF = 3
505553
506-let dm = 7
554+let dG = 7
507555
508-let dn = 8
556+let dH = 8
509557
510-let do = 11
558+let dI = 11
511559
512-let dp = 15
560+let dJ = 15
513561
514-let dq = 16
562+let dK = 16
515563
516-let dr = 20
564+let dL = 20
517565
518-func ds (bM,dt) = makeString(["%s%s", bM, dt], z)
566+let dM = 21
567+
568+func dN (cf,dO) = makeString(["%s%s", cf, dO], H)
519569
520570
521-func du (bp,dv,bX,bQ,dw,dx,dy,dz,dA,dB,dC,dD,ba,dE,dF,dG,dH,dI,dJ,bY) = makeString_2C(["%s%s%d%d%d%d%d%d%d%d%d%d%d%s%d%d%d%d%s%s", bp, dv, bX, bQ, dw, dx, dy, dz, dA, dB, dC, dD, ba, dE, dF, dG, dH, dI, dJ, bY], z)
571+func dP (bH,dQ,cq,cj,dR,dS,dT,dU,dV,dW,dX,dY,bs,dZ,ea,eb,ec,ed,ee,cr,ef) = makeString_2C(["%s%s%d%d%d%d%d%d%d%d%d%d%d%s%d%d%d%d%s%s%s", bH, dQ, cq, cj, dR, dS, dT, dU, dV, dW, dX, dY, bs, dZ, ea, eb, ec, ed, ee, cr, ef], H)
522572
523573
524-func dK (bp,dL,dC,bY) = du(bp, "PENDING", toString(dL), "0", "0", "0", toString(height), toString(lastBlock.timestamp), "0", "0", toString(dC), "0", "0", "NULL", "0", "0", "0", "0", "", bY)
574+func eg (bH,eh,dX,cr,ef) = dP(bH, "PENDING", toString(eh), "0", "0", "0", toString(height), toString(lastBlock.timestamp), "0", "0", toString(dX), "0", "0", "NULL", "0", "0", "0", "0", "", cr, ef)
525575
526576
527-func dM (dN,bQ,dw,dx,dD,ba,dE,dH,dI,dJ,bY) = du(dN[dj], "FINISHED", dN[dl], toString(bQ), toString(dw), toString(dx), dN[dm], dN[dn], toString(height), toString(lastBlock.timestamp), dN[do], toString(dD), toString(ba), dE, dN[dp], dN[dq], toString(dH), toString(dI), dJ, bY)
577+func ei (ej,cj,dR,dS,dY,bs,dZ,ec,ed,ee,cr,ef) = dP(ej[dD], "FINISHED", ej[dF], toString(cj), toString(dR), toString(dS), ej[dG], ej[dH], toString(height), toString(lastBlock.timestamp), ej[dI], toString(dY), toString(bs), dZ, ej[dJ], ej[dK], toString(ec), toString(ed), ee, cr, ef)
528578
529579
530-func dO (bM,dP) = {
531- let dQ = ds(bM, dP)
532- split_4C(valueOrErrorMessage(getString(dQ), ("no swap data for " + dQ)), z)
580+func ek (cf,el) = {
581+ let em = dN(cf, el)
582+ split_4C(valueOrErrorMessage(getString(em), ("no swap data for " + em)), H)
533583 }
534584
535585
536-func dR (dS,dT,dU) = {
537- let cy = fraction(dS, dU, C)
538-[(dS - cy), cy]
586+func en (eo,ep,eq) = {
587+ let cR = fraction(eo, eq, K)
588+[(eo - cR), cR]
539589 }
540590
541591
542-func dV (dW) = {
543- let dU = bE()
544- func dX (cd,ce) = {
545- let cy = fraction(ce._2, dU, C)
546- (cd :+ makeString([ce._1, toString(ce._3), toString((ce._2 - cy)), toString(cy), toString(ce._4)], A))
592+func er (es,eq) = {
593+ func et (cw,cx) = {
594+ let cR = fraction(cx._2, eq, K)
595+ (cw :+ makeString([cx._1, toString(cx._3), toString((cx._2 - cR)), toString(cR), toString(cx._4)], I))
547596 }
548597
549- let dY = {
550- let ch = dW
551- let ci = size(ch)
552- let cj = nil
553- func ck (cl,cm) = if ((cm >= ci))
554- then cl
555- else dX(cl, ch[cm])
598+ let eu = {
599+ let cA = es
600+ let cB = size(cA)
601+ let cC = nil
602+ func cD (cE,cF) = if ((cF >= cB))
603+ then cE
604+ else et(cE, cA[cF])
556605
557- func cn (cl,cm) = if ((cm >= ci))
558- then cl
606+ func cG (cE,cF) = if ((cF >= cB))
607+ then cE
559608 else throw("List size exceeds 10")
560609
561- cn(ck(ck(ck(ck(ck(ck(ck(ck(ck(ck(cj, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
610+ cG(cD(cD(cD(cD(cD(cD(cD(cD(cD(cD(cC, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
562611 }
563- makeString_2C(dY, "_")
612+ makeString_2C(eu, "_")
564613 }
565614
566615
567-func dZ (ea) = if ((0 > ea))
568- then -(ea)
569- else ea
570-
571-
572-func eb (ec) = {
573- let ed = ((wavesBalance(cW).available - ec) - bd())
574- let ee = f(bk(0))
575- let ef = f(bk(1))
576- let eg = (ed + ee)
577- let eh = (ed + ef)
578- if (if ((eg > 0))
579- then true
580- else (eh > 0))
581- then {
582- let ei = dZ((eg - ef))
583- let ej = dZ((eh - ee))
584- if ((ej >= ei))
585- then $Tuple2(0, eg)
586- else $Tuple2(1, eh)
587- }
588- else $Tuple2(-1, 0)
616+func ev (ew) = {
617+ let ex = ((wavesBalance(dq).available - ew) - bv())
618+ let ey = f(bC(0))
619+ let ez = (ex + ey)
620+ if ((ez > 0))
621+ then ez
622+ else 0
589623 }
590624
591625
592-func ek (r) = if ((r.caller != this))
626+func eA (r) = if ((r.caller != this))
593627 then throw("Permission denied: this contract only allowed")
594628 else true
595629
596630
597-func el (ec) = {
598- let em = eb(ec)
599- let bh = em._1
600- let en = em._2
601- if ((en > 0))
631+func eB (ew) = {
632+ let eC = ev(ew)
633+ let bz = 0
634+ if ((eC > 0))
602635 then {
603- let eo = bg(bh)
604- let ep = getBinary(this, eo)
605- let eq = if (isDefined(ep))
606- then [LeaseCancel(value(ep))]
636+ let eD = by(1)
637+ let eE = getBinary(eD)
638+ let eF = if (isDefined(eE))
639+ then [LeaseCancel(value(eE)), DeleteEntry(eD), DeleteEntry(bC(1))]
607640 else nil
608- let er = bk(bh)
609- let es = Lease(bc(bh), en)
610- (eq ++ [es, BinaryEntry(eo, d(es)), IntegerEntry(bk(bh), en)])
641+ let eG = by(bz)
642+ let eH = getBinary(this, eG)
643+ let eI = if (isDefined(eH))
644+ then [LeaseCancel(value(eH))]
645+ else nil
646+ let eJ = bC(bz)
647+ let eK = Lease(bu(bz), eC)
648+ ((eF ++ eI) ++ [eK, BinaryEntry(eG, d(eK)), IntegerEntry(eJ, eC)])
611649 }
612650 else nil
613651 }
614652
615653
616-func et (eu) = {
617- let bj = bc(eu)
618- let ev = bk(eu)
619- let ew = f(ev)
620- let ex = bg(eu)
621- let ey = value(getBinary(this, ex))
622- $Tuple5(bj, ev, ew, ex, ey)
654+func eL (eM) = {
655+ let bB = bu(eM)
656+ let eN = bC(eM)
657+ let eO = f(eN)
658+ let eP = by(eM)
659+ let eQ = value(getBinary(this, eP))
660+ $Tuple5(bB, eN, eO, eP, eQ)
623661 }
624662
625663
626-func ez (bp,eA,bY,eB,eC) = {
627- let eD = x(invoke(this, "swapParamsByUserSYSREADONLY", [eB, 0], nil))
628- let eE = eD._1
629- let eF = eD._2
630- let eG = eD._3
631- let eH = eD._7
632- let cK = bF(bp, bY)
633- let eI = bI(bp, eB, bY)
634- let bj = bb(0)
635- let eJ = (bj == eB)
636- let eK = if (eJ)
637- then bK()
638- else bJ(bp)
639- let dC = (height + eK)
640- let eL = value(getInteger(at, bC(bY)))
641- let eM = if ((bp == "outNeutrino"))
642- then bR(eA, eL)
643- else eA
644- let eN = if ((bp == "outNeutrino"))
645- then eE
646- else eH
647- if ((cK > eA))
648- then cJ(bp, cK)
649- else if (if (!(eJ))
650- then (eF > 0)
664+func eR (eS,eT,eU,eV,eW) = {
665+ let eK = Lease(eS, eT)
666+[LeaseCancel(eU), eK, BinaryEntry(eV, calculateLeaseId(eK)), IntegerEntry(eW, eT)]
667+ }
668+
669+
670+func eX (ef) = x(invoke(aJ, "validatePrice", [Q, R, ef], nil))
671+
672+
673+let eY = 0
674+
675+let eZ = 1
676+
677+let fa = 2
678+
679+let fb = 3
680+
681+let fc = 4
682+
683+let fd = 5
684+
685+let fe = 6
686+
687+let ff = 7
688+
689+let fg = 8
690+
691+let fh = 9
692+
693+let fi = 10
694+
695+func fj (cq,cr,cu,fk) = {
696+ let fl = cp(cq, cr, cu, fk)
697+ $Tuple12(fl[0], dk, 0, cr, 0, fk, cq, 0, 0, 0, nil, [fl[1], fl[2]])
698+ }
699+
700+
701+func fm (fn,cu,cT) = {
702+ let fo = cS(fn, cu, cT)
703+ $Tuple12(fo._2, unit, 0, dk, fo._2, fo._3, fn, cT, fn, 0, fo._1, nil)
704+ }
705+
706+
707+func fp (fn,cu,cT,fq,fr) = {
708+ let fo = cS(fn, cu, cT)
709+ func fs (cw,cx) = {
710+ let bd = cx._1
711+ if ((bd == fq))
712+ then $Tuple4(fq, (cw._2 + cx._2), cx._3, cx._4)
713+ else {
714+ let da = q(invoke(aR, "swapTokensViaPoolREADONLY", [bd, cx._2, fq], nil))
715+ $Tuple4(cw._1, (cw._2 + da), cw._3, cw._4)
716+ }
717+ }
718+
719+ let p = {
720+ let cA = fo._1
721+ let cB = size(cA)
722+ let cC = $Tuple4("", 0, 0, 0)
723+ func cD (cE,cF) = if ((cF >= cB))
724+ then cE
725+ else fs(cE, cA[cF])
726+
727+ func cG (cE,cF) = if ((cF >= cB))
728+ then cE
729+ else throw("List size exceeds 10")
730+
731+ cG(cD(cD(cD(cD(cD(cD(cD(cD(cD(cD(cC, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
732+ }
733+ $Tuple12(fo._2, unit, 0, dk, p._2, fo._3, fn, cT, fn, 0, [p], nil)
734+ }
735+
736+
737+func ft (bH,cq,cj,fu,cr,ef,fr) = {
738+ let cT = q(fu[ad])
739+ let cu = o(fu[am])
740+ let fk = q(fu[an])
741+ let fv = if ((bH == "outNeutrino"))
742+ then fj(cq, cr, cu, fk)
743+ else if ((bH == "outMulti"))
744+ then if ((ef != ""))
745+ then fp(cq, cu, cT, ef, fr)
746+ else fm(cq, cu, cT)
747+ else throw(("Unsupported swap type " + bH))
748+ let fo = fv._1
749+ let fw = fv._2
750+ let fx = fv._3
751+ let fy = fv._4
752+ let fz = fv._5
753+ let fA = fv._6
754+ let ee = fv._11
755+ let fB = fv._12
756+ let fC = if ((bH == "outNeutrino"))
757+ then fB[0]
758+ else 0
759+ let fD = if ((bH == "outNeutrino"))
760+ then fB[1]
761+ else 0
762+ let ec = if ((0 >= fx))
763+ then 0
764+ else q(l(invoke(aK, "surfFunctionREADONLY", [fx, fy], nil))[eY])
765+ let eq = if (if ((bH == "outMulti"))
766+ then (ef != "")
767+ else false)
768+ then bX()
769+ else bW()
770+ let fE = if ((bH == "outMulti"))
771+ then er(ee, eq)
772+ else ""
773+ $Tuple9(fC, fw, ec, fx, fz, fD, fo, fA, fE)
774+ }
775+
776+
777+func fF (bH,fG,cr,fH,fI,ef) = {
778+ let fJ = z(invoke(this, "swapParamsByUserSYSREADONLY", [fH, 0], nil))
779+ let fK = fJ._1
780+ let fL = fJ._2
781+ let fM = fJ._3
782+ let fN = fJ._7
783+ let dd = bY(bH, cr)
784+ let fO = cb(bH, fH, cr)
785+ let bB = bt(0)
786+ let fP = (bB == fH)
787+ let fQ = if (fP)
788+ then cd()
789+ else cc(bH)
790+ let dX = (height + fQ)
791+ let fR = value(getInteger(aJ, bU(cr)))
792+ let fS = if ((bH == "outNeutrino"))
793+ then ck(fG, fR)
794+ else fG
795+ let fT = if ((bH == "outNeutrino"))
796+ then fK
797+ else fN
798+ if ((dd > fG))
799+ then dc(bH, dd)
800+ else if (if (!(fP))
801+ then (fL > 0)
651802 else false)
652- then throw(("You have exceeded swap limit! Next allowed swap height is " + toString((height + eG))))
653- else if (if (!(eJ))
654- then (eM > eN)
803+ then throw(("You have exceeded swap limit! Next allowed swap height is " + toString((height + fM))))
804+ else if (if (!(fP))
805+ then (fS > fT)
655806 else false)
656- then throw(((("You have exceeded your swap limit! Requested: " + toString(eM)) + ", available: ") + toString(eN)))
657- else if (cS)
658- then cL()
807+ then throw(((("You have exceeded your swap limit! Requested: " + toString(fS)) + ", available: ") + toString(fT)))
808+ else if (dl)
809+ then de()
659810 else {
660- let eO = l(invoke(au, "calcNeutinoMetricsREADONLY", nil, nil))
661- let cb = o(eO[W])
662- let eP = q(eO[X])
663- let eQ = bW(eA, bY, cb, eP)
664- let eR = valueOrElse(getInteger(bD()), F)
665- if (if ((bp == "outNeutrino"))
666- then ((C - eR) > eQ[3])
811+ let fu = l(invoke(aK, "calcNeutinoMetricsREADONLY", nil, nil))
812+ let cu = o(fu[am])
813+ let fk = q(fu[an])
814+ let fU = cp(fG, cr, cu, fk)
815+ let fV = valueOrElse(getInteger(bV()), N)
816+ if (if ((bH == "outNeutrino"))
817+ then ((K - fV) > fU[3])
667818 else false)
668- then throw(("Max allowed fee exceeded, multiplier = " + toString(eQ[3])))
819+ then throw(("Max allowed fee exceeded, multiplier = " + toString(fU[3])))
669820 else {
670- let eS = if (if ((bp == "outNeutrino"))
671- then (bY == "WAVES")
821+ let fW = if (if ((bH == "outMulti"))
822+ then (ef != "")
672823 else false)
673- then el(0)
824+ then if (!(eX(ef)))
825+ then throw("Can't be processed due to market conditions")
826+ else {
827+ let fX = ft(bH, fG, 0, fu, cr, ef, true)._5
828+ let fY = valueOrElse(getInteger(X()), 0)
829+ let fZ = (lastBlock.timestamp / S)
830+ let ga = if ((fZ != fY))
831+ then 0
832+ else valueOrElse(getInteger(V()), 0)
833+ let gb = (ga + fX)
834+ if ((gb > T))
835+ then throw("Daily waves limit exceeded")
836+ else {
837+ let gc = valueOrElse(getInteger(W()), 0)
838+ let gd = (gc + fX)
839+ if ((gd > U))
840+ then throw("Global waves limit exceeded")
841+ else [IntegerEntry(V(), gb), IntegerEntry(W(), gd), IntegerEntry(X(), fZ)]
842+ }
843+ }
674844 else nil
675- $Tuple2(([IntegerEntry(bL(eB), eM), IntegerEntry(bN(eB), height), IntegerEntry(br(bp, eB, bY), (eI + eA)), IntegerEntry(be(eB), dC), StringEntry(ds(eB, eC), dK(bp, eA, dC, bY))] ++ eS), unit)
845+ let ge = if (if ((bH == "outNeutrino"))
846+ then (cr == "WAVES")
847+ else false)
848+ then eB(0)
849+ else nil
850+ $Tuple2((([IntegerEntry(ce(fH), fS), IntegerEntry(cg(fH), height), IntegerEntry(bJ(bH, fH, cr), (fO + fG)), IntegerEntry(bw(fH), dX), StringEntry(dN(fH, fI), eg(bH, fG, dX, cr, ef))] ++ ge) ++ fW), unit)
676851 }
677852 }
678853 }
679854
680855
681-let eT = 0
682-
683-let eU = 1
684-
685-let eV = 2
686-
687-let eW = 3
688-
689-let eX = 4
690-
691-let eY = 5
692-
693-let eZ = 6
694-
695-let fa = 7
696-
697-let fb = 8
698-
699-let fc = 9
700-
701-let fd = 10
702-
703-func fe (bX,bY,cb,eP) = {
704- let ff = bW(bX, bY, cb, eP)
705- $Tuple12(ff[0], cR, 0, bY, 0, eP, bX, 0, 0, 0, nil, [ff[1], ff[2]])
706- }
856+func gf () = "%s__applyInProgress"
707857
708858
709-func fg (fh,cb,cA) = {
710- let fi = cz(fh, cb, cA)
711- $Tuple12(fi._2, unit, 0, cR, fi._2, fi._3, fh, cA, fh, 0, fi._1, nil)
712- }
859+func gg (gh) = ("%s%d__proposalData__" + toString(gh))
713860
714861
715-func fj (bp,bX,bQ,eO,bY) = {
716- let cA = q(eO[N])
717- let cb = o(eO[W])
718- let eP = q(eO[X])
719- let fk = if ((bp == "outNeutrino"))
720- then fe(bX, bY, cb, eP)
721- else if ((bp == "outMulti"))
722- then fg(bX, cb, cA)
723- else throw(("Unsupported swap type " + bp))
724- let fi = fk._1
725- let fl = fk._2
726- let fm = fk._3
727- let fn = fk._4
728- let fo = fk._5
729- let fp = fk._6
730- let dJ = fk._11
731- let fq = fk._12
732- let fr = if ((bp == "outNeutrino"))
733- then fq[0]
734- else 0
735- let fs = if ((bp == "outNeutrino"))
736- then fq[1]
737- else 0
738- let dH = if ((0 >= fm))
739- then 0
740- else q(l(invoke(au, "surfFunctionREADONLY", [fm, fn], nil))[eT])
741- let ft = if ((bp == "outMulti"))
742- then dV(dJ)
743- else ""
744- $Tuple9(fr, fl, dH, fm, fo, fs, fi, fp, ft)
745- }
862+let gi = 9
746863
747-
748-func fu () = "%s__applyInProgress"
749-
750-
751-func fv (fw) = ("%s%d__proposalData__" + toString(fw))
752-
753-
754-let fx = 9
755-
756-func fy (cZ) = {
757- let n = cZ
864+func gj (dt) = {
865+ let n = dt
758866 if ($isInstanceOf(n, "Order"))
759867 then {
760- let fz = n
868+ let gk = n
761869 throw("Orders aren't allowed")
762870 }
763871 else if (if ($isInstanceOf(n, "DataTransaction"))
764872 then true
765873 else if ($isInstanceOf(n, "SponsorFeeTransaction"))
766874 then true
767875 else if ($isInstanceOf(n, "SetScriptTransaction"))
768876 then true
769877 else if ($isInstanceOf(n, "CreateAliasTransaction"))
770878 then true
771879 else if ($isInstanceOf(n, "LeaseCancelTransaction"))
772880 then true
773881 else if ($isInstanceOf(n, "LeaseTransaction"))
774882 then true
775883 else if ($isInstanceOf(n, "IssueTransaction"))
776884 then true
777885 else if ($isInstanceOf(n, "InvokeExpressionTransaction"))
778886 then true
779887 else if ($isInstanceOf(n, "UpdateAssetInfoTransaction"))
780888 then true
781889 else if ($isInstanceOf(n, "InvokeScriptTransaction"))
782890 then true
783891 else if ($isInstanceOf(n, "SetAssetScriptTransaction"))
784892 then true
785893 else if ($isInstanceOf(n, "TransferTransaction"))
786894 then true
787895 else if ($isInstanceOf(n, "ExchangeTransaction"))
788896 then true
789897 else if ($isInstanceOf(n, "MassTransferTransaction"))
790898 then true
791899 else if ($isInstanceOf(n, "BurnTransaction"))
792900 then true
793901 else $isInstanceOf(n, "ReissueTransaction"))
794902 then {
795- let fA = n
796- let dt = toBase58String(fA.id)
797- let fw = valueOrErrorMessage(getInteger(aA, fu()), "Apply is not happening")
798- let fB = split(split(a(aA, fv(fw)), z)[fx], A)
799- if (!(isDefined(indexOf(fB, dt))))
800- then throw(((("Unknown txId: " + dt) + " for proposalId=") + toString(fw)))
903+ let gl = n
904+ let dO = toBase58String(gl.id)
905+ let gh = valueOrErrorMessage(getInteger(aQ, gf()), "Apply is not happening")
906+ let gm = split(split(a(aQ, gg(gh)), H)[gi], I)
907+ if (!(isDefined(indexOf(gm, dO))))
908+ then throw(((("Unknown txId: " + dO) + " for proposalId=") + toString(gh)))
801909 else true
802910 }
803911 else throw("Match error")
804912 }
805913
806914
915+func gn (r,ef) = if ((size(r.payments) != 1))
916+ then throw("swapNeutrinoToBasket require only one payment")
917+ else {
918+ let go = value(r.payments[0])
919+ if ((go.assetId != dk))
920+ then throw("Only appropriate Neutrino tokens are allowed for swapping.")
921+ else {
922+ let cf = toString(r.caller)
923+ let fI = toBase58String(r.transactionId)
924+ let gp = toBase58String(dk)
925+ let gq = ca("outMulti", gp)
926+ let fG = go.amount
927+ let gr = invoke(this, "internalSaveInteger", [bI("outMulti", gp), (gq + fG)], nil)
928+ if ((gr == gr))
929+ then fF("outMulti", go.amount, gp, cf, fI, ef)
930+ else throw("Strict value is not equal to itself.")
931+ }
932+ }
933+
934+
807935 @Callable(r)
808-func constructorV1 (fC,fD,fE,fF,fG,fH,fI,fJ,fK,fL,fM,fN) = {
809- let fO = ek(r)
810- if ((fO == fO))
936+func constructorV1 (gs,gt,gu,gv,gw,gx,gy,gz,gA,gB,gC,gD) = {
937+ let gE = eA(r)
938+ if ((gE == gE))
811939 then if ((size(r.payments) != 0))
812940 then throw("no payments allowed")
813- else [StringEntry(aB, fC), StringEntry(aC, fD), StringEntry(aD, fE), StringEntry(aF, fF), StringEntry(aG, fG), StringEntry(aP, fH), IntegerEntry(aJ, fI), IntegerEntry(aK, fJ), IntegerEntry(aL("WAVES"), fK), IntegerEntry(aN, fL), IntegerEntry(aQ, fM), IntegerEntry(aR, fN)]
941+ else [StringEntry(aS, gs), StringEntry(aT, gt), StringEntry(aU, gu), StringEntry(aW, gv), StringEntry(aX, gw), StringEntry(bg, gx), IntegerEntry(ba, gy), IntegerEntry(bb, gz), IntegerEntry(bc("WAVES"), gA), IntegerEntry(be, gB), IntegerEntry(bh, gC), IntegerEntry(bi, gD)]
814942 else throw("Strict value is not equal to itself.")
815943 }
816944
817945
818946
819947 @Callable(r)
820-func constructorV2 (au,av,fP) = {
821- let fO = ek(r)
822- if ((fO == fO))
948+func constructorV2 (aK,aL,gF) = {
949+ let gE = eA(r)
950+ if ((gE == gE))
823951 then if ((size(r.payments) != 0))
824952 then throw("no payments allowed")
825- else [StringEntry(aI, au), StringEntry(aE, av), IntegerEntry(bu(), fP)]
953+ else [StringEntry(aZ, aK), StringEntry(aV, aL), IntegerEntry(bM(), gF)]
826954 else throw("Strict value is not equal to itself.")
827955 }
828956
829957
830958
831959 @Callable(r)
832-func constructorV3 (fQ,fR,fS,fT,fU) = {
833- let fO = ek(r)
834- if ((fO == fO))
960+func constructorV3 (gG,gH,gI,gJ,gK) = {
961+ let gE = eA(r)
962+ if ((gE == gE))
835963 then if ((size(r.payments) != 0))
836964 then throw("no payments allowed")
837965 else {
838- func fV (cd,ce) = {
839- let cE = split(ce, "_")
840- let aM = cE[0]
841- let fW = parseIntValue(cE[1])
842- let fX = parseIntValue(cE[2])
843- $Tuple2((cd._1 :+ aM), ((cd._2 :+ IntegerEntry(bB(aM), fW)) :+ IntegerEntry(aL(aM), fX)))
966+ func gL (cw,cx) = {
967+ let cX = split(cx, "_")
968+ let bd = cX[0]
969+ let gM = parseIntValue(cX[1])
970+ let gN = parseIntValue(cX[2])
971+ $Tuple2((cw._1 :+ bd), ((cw._2 :+ IntegerEntry(bT(bd), gM)) :+ IntegerEntry(bc(bd), gN)))
844972 }
845973
846- let fY = {
847- let ch = fQ
848- let ci = size(ch)
849- let cj = $Tuple2(nil, nil)
850- func ck (cl,cm) = if ((cm >= ci))
851- then cl
852- else fV(cl, ch[cm])
974+ let gO = {
975+ let cA = gG
976+ let cB = size(cA)
977+ let cC = $Tuple2(nil, nil)
978+ func cD (cE,cF) = if ((cF >= cB))
979+ then cE
980+ else gL(cE, cA[cF])
853981
854- func cn (cl,cm) = if ((cm >= ci))
855- then cl
982+ func cG (cE,cF) = if ((cF >= cB))
983+ then cE
856984 else throw("List size exceeds 10")
857985
858- cn(ck(ck(ck(ck(ck(ck(ck(ck(ck(ck(cj, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
986+ cG(cD(cD(cD(cD(cD(cD(cD(cD(cD(cD(cC, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
859987 }
860- (((((fY._2 :+ IntegerEntry(bx(), fR)) :+ IntegerEntry(by(), fS)) :+ IntegerEntry(bz(), fT)) :+ IntegerEntry(bA(), log(fU, 6, fT, 6, 6, HALFUP))) :+ StringEntry(bw(), makeString(fY._1, z)))
988+ (((((gO._2 :+ IntegerEntry(bP(), gH)) :+ IntegerEntry(bQ(), gI)) :+ IntegerEntry(bR(), gJ)) :+ IntegerEntry(bS(), log(gK, 6, gJ, 6, 6, HALFUP))) :+ StringEntry(bO(), makeString(gO._1, H)))
861989 }
862990 else throw("Strict value is not equal to itself.")
863991 }
864992
865993
866994
867995 @Callable(r)
868-func swapTokenToNeutrino () = if ((size(r.payments) != 1))
869- then throw("swapTokenToNeutrino require only one payment")
870- else {
871- let fZ = value(r.payments[0])
872- let ga = value(getString(bw()))
873- let gb = toBase58String(valueOrElse(fZ.assetId, H))
874- if (!(contains(ga, gb)))
875- then throw(((gb + " is not one of basket tokens:") + ga))
876- else {
877- let bM = toString(r.caller)
878- let eC = toBase58String(r.transactionId)
879- let gc = bH("outNeutrino", gb)
880- let eA = fZ.amount
881- let gd = invoke(this, "internalSaveInteger", [bq("outNeutrino", gb), (gc + eA)], nil)
882- if ((gd == gd))
883- then ez("outNeutrino", eA, gb, bM, eC)
884- else throw("Strict value is not equal to itself.")
885- }
886- }
996+func swapTokenToNeutrino () = if (dm)
997+ then throw("XTN issue is disabled")
998+ else if ((size(r.payments) != 1))
999+ then throw("swapTokenToNeutrino require only one payment")
1000+ else {
1001+ let go = value(r.payments[0])
1002+ let gP = value(getString(bO()))
1003+ let gQ = toBase58String(valueOrElse(go.assetId, P))
1004+ if (!(contains(gP, gQ)))
1005+ then throw(((gQ + " is not one of basket tokens:") + gP))
1006+ else {
1007+ let cf = toString(r.caller)
1008+ let fI = toBase58String(r.transactionId)
1009+ let gq = ca("outNeutrino", gQ)
1010+ let fG = go.amount
1011+ let gr = invoke(this, "internalSaveInteger", [bI("outNeutrino", gQ), (gq + fG)], nil)
1012+ if ((gr == gr))
1013+ then fF("outNeutrino", fG, gQ, cf, fI, "")
1014+ else throw("Strict value is not equal to itself.")
1015+ }
1016+ }
8871017
8881018
8891019
8901020 @Callable(r)
891-func swapNeutrinoToBasket () = if ((size(r.payments) != 1))
892- then throw("swapNeutrinoToBasket require only one payment")
893- else {
894- let fZ = value(r.payments[0])
895- if ((fZ.assetId != cR))
896- then throw("Only appropriate Neutrino tokens are allowed for swapping.")
897- else {
898- let bM = toString(r.caller)
899- let eC = toBase58String(r.transactionId)
900- let ge = toBase58String(cR)
901- let gc = bH("outMulti", ge)
902- let eA = fZ.amount
903- let gd = invoke(this, "internalSaveInteger", [bq("outMulti", ge), (gc + eA)], nil)
904- if ((gd == gd))
905- then ez("outMulti", fZ.amount, ge, bM, eC)
906- else throw("Strict value is not equal to itself.")
907- }
908- }
1021+func swapNeutrinoToBasket () = gn(r, "")
9091022
9101023
9111024
9121025 @Callable(r)
913-func internalSaveInteger (c,bP) = if ((r.caller != this))
914- then throw("internalSaveInteger is not public method")
915- else [IntegerEntry(c, bP)]
1026+func swapNeutrinoToSingleBasketToken (gR) = {
1027+ let gP = split(value(getString(bO())), H)
1028+ if (!(containsElement(gP, gR)))
1029+ then throw("unknown assetIdOut, should be one of the basket")
1030+ else if ((gR != "WAVES"))
1031+ then throw("currently only WAVES supported as target asset")
1032+ else {
1033+ let gS = x(invoke(aR, "wxPoolHealthyREADONLY", nil, nil))
1034+ if (!(gS))
1035+ then throw("WX pools down, cannot swap to single token")
1036+ else gn(r, gR)
1037+ }
1038+ }
9161039
9171040
9181041
9191042 @Callable(r)
920-func withdraw (gf,ba,dP) = {
921- let dt = toBase58String(r.transactionId)
1043+func internalSaveInteger (c,ci) = if ((r.caller != this))
1044+ then throw("internalSaveInteger is not public method")
1045+ else [IntegerEntry(c, ci)]
1046+
1047+
1048+
1049+@Callable(r)
1050+func withdraw (gT,bs,el) = {
1051+ let dO = toBase58String(r.transactionId)
9221052 if ((size(r.payments) != 0))
9231053 then throw("no payments allowed")
9241054 else {
925- let eO = l(invoke(au, "calcNeutinoMetricsREADONLY", nil, nil))
926- let gg = q(eO[Q])
927- let bM = addressFromStringValue(gf)
928- let dN = dO(gf, dP)
929- let dC = parseIntValue(dN[do])
930- let bp = dN[dj]
931- let bX = parseIntValue(dN[dl])
932- let gh = dN[dk]
933- let dy = parseIntValue(dN[dm])
934- let bY = dN[dr]
935- let gc = bH(bp, bY)
936- let eI = bI(bp, gf, bY)
937- let cP = dC
938- let cO = dh(ba)
939- let cQ = dh((ba - 1))
940- let gi = dg(cO)
941- if (cS)
942- then cL()
943- else if ((gh != "PENDING"))
1055+ let fu = l(invoke(aK, "calcNeutinoMetricsREADONLY", nil, nil))
1056+ let gU = q(fu[ag])
1057+ let cf = addressFromStringValue(gT)
1058+ let ej = ek(gT, el)
1059+ let dX = parseIntValue(ej[dI])
1060+ let bH = ej[dD]
1061+ let cq = parseIntValue(ej[dF])
1062+ let gV = ej[dE]
1063+ let dT = parseIntValue(ej[dG])
1064+ let cr = ej[dL]
1065+ let ef = ej[dM]
1066+ let gq = ca(bH, cr)
1067+ let fO = cb(bH, gT, cr)
1068+ let di = dX
1069+ let dh = dB(bs)
1070+ let dj = dB((bs - 1))
1071+ let gW = dA(dh)
1072+ if (dl)
1073+ then de()
1074+ else if ((gV != "PENDING"))
9441075 then throw("swap has been already processed")
945- else if ((cP > height))
946- then throw((("please wait for: " + toString(cP)) + " block height to withdraw funds"))
947- else if (if (if ((ba > cN))
1076+ else if ((di > height))
1077+ then throw((("please wait for: " + toString(di)) + " block height to withdraw funds"))
1078+ else if (if (if ((bs > dg))
9481079 then true
949- else (cP > cO))
1080+ else (di > dh))
9501081 then true
951- else if ((cQ != 0))
952- then (cQ >= cP)
1082+ else if ((dj != 0))
1083+ then (dj >= di)
9531084 else false)
954- then cM(ba, cN, cO, cP, cQ)
1085+ then df(bs, dg, dh, di, dj)
9551086 else {
956- let gj = fj(bp, bX, gi, eO, bY)
957- let dw = gj._1
958- let fl = gj._2
959- let dH = gj._3
960- let fo = gj._5
961- let dx = gj._6
962- let fi = gj._7
963- let fp = gj._8
964- let ft = gj._9
965- if (if ((bp == "outNeutrino"))
966- then (0 >= fi)
1087+ let gX = ft(bH, cq, gW, fu, cr, ef, false)
1088+ let dR = gX._1
1089+ let fw = gX._2
1090+ let ec = gX._3
1091+ let fz = gX._5
1092+ let dS = gX._6
1093+ let fo = gX._7
1094+ let fA = gX._8
1095+ let fE = gX._9
1096+ if (if ((bH == "outNeutrino"))
1097+ then (0 >= fo)
9671098 else false)
9681099 then throw("balance equals zero")
9691100 else {
970- let gk = if ((dH > 0))
1101+ let gY = if ((ec > 0))
9711102 then {
972- let gl = invoke(ay, "issueSurf", [dH, gf], nil)
973- if ((gl == gl))
1103+ let gZ = invoke(aO, "issueSurf", [ec, gT], nil)
1104+ if ((gZ == gZ))
9741105 then 0
9751106 else throw("Strict value is not equal to itself.")
9761107 }
9771108 else 0
978- if ((gk == gk))
1109+ if ((gY == gY))
9791110 then {
980- let gm = invoke(this, "internalUnleaseAndLease", [fo], nil)
981- if ((gm == gm))
1111+ let ha = invoke(this, "internalUnleaseAndLease", [fz], nil)
1112+ if ((ha == ha))
9821113 then {
983- let gn = l(invoke(ax, "gnsbtInfoSYSREADONLY", ["", 0, 0], nil))
984- let go = q(gn[1])
985- let gp = q(l(gn[3])[3])
986- let gq = [IntegerEntry(br(bp, gf, bY), (eI - bX)), IntegerEntry(bq(bp, bY), (gc - bX)), StringEntry(ds(gf, dP), dM(dN, fp, dw, dx, cP, ba, dt, dH, gg, ft, bY))]
987- func gr (gs,gt,gu,gv) = {
988- let gw = if ((gs > 0))
989- then q(invoke(aw, "deposit", nil, gu))
1114+ let hb = l(invoke(aN, "gnsbtInfoSYSREADONLY", ["", 0, 0], nil))
1115+ let hc = q(hb[1])
1116+ let hd = q(l(hb[3])[3])
1117+ let he = [IntegerEntry(bJ(bH, gT, cr), (fO - cq)), IntegerEntry(bI(bH, cr), (gq - cq)), StringEntry(dN(gT, el), ei(ej, fA, dR, dS, di, bs, dO, ec, gU, fE, cr, ef))]
1118+ func hf (hg,hh,hi,hj) = {
1119+ let hk = if ((hg > 0))
1120+ then q(invoke(aM, "deposit", nil, hi))
9901121 else 0
991- let gx = if ((gt > 0))
992- then q(invoke(av, "deposit", nil, gv))
1122+ let hl = if ((hh > 0))
1123+ then q(invoke(aL, "deposit", nil, hj))
9931124 else 0
994- (gw + gx)
1125+ (hk + hl)
9951126 }
9961127
997- func gy (cy) = {
998- let gz = if ((go != 0))
999- then fraction(cy, gp, go)
1128+ func hm (cR) = {
1129+ let hn = if ((hc != 0))
1130+ then fraction(cR, hd, hc)
10001131 else 0
1001- let gA = if ((go != 0))
1002- then fraction(cy, (C - gg), C)
1132+ let ho = if ((hc != 0))
1133+ then fraction(cR, (K - gU), K)
10031134 else 0
1004- let gB = max([gz, gA])
1005- let gC = (cy - gB)
1006-[gB, gC]
1135+ let hp = max([hn, ho])
1136+ let hq = (cR - hp)
1137+[hp, hq]
10071138 }
10081139
1009- let gD = if ((bp == "outMulti"))
1140+ let hr = if ((bH == "outMulti"))
10101141 then {
1011- let gE = split_4C(ft, "_")
1012- func gF (cd,ce) = {
1013- let cg = split(ce, A)
1014- let gG = fromBase58String(cg[0])
1015- let aM = if ((gG == H))
1142+ let hs = split_4C(fE, "_")
1143+ func ht (cw,cx) = {
1144+ let cz = split(cx, I)
1145+ let hu = fromBase58String(cz[0])
1146+ let bd = if ((hu == P))
10161147 then unit
1017- else gG
1018- let gH = parseIntValue(cg[2])
1019- let cy = parseIntValue(cg[3])
1020- let gI = gy(cy)
1021- $Tuple5((cd._1 :+ ScriptTransfer(bM, gH, aM)), (cd._2 :+ AttachedPayment(aM, gI[0])), (cd._3 :+ AttachedPayment(aM, gI[1])), (cd._4 + gI[0]), (cd._5 + gI[1]))
1148+ else hu
1149+ let hv = parseIntValue(cz[2])
1150+ let cR = parseIntValue(cz[3])
1151+ let hw = hm(cR)
1152+ $Tuple5((cw._1 :+ ScriptTransfer(cf, hv, bd)), (cw._2 :+ AttachedPayment(bd, hw[0])), (cw._3 :+ AttachedPayment(bd, hw[1])), (cw._4 + hw[0]), (cw._5 + hw[1]))
10221153 }
10231154
1024- let fY = {
1025- let ch = gE
1026- let ci = size(ch)
1027- let cj = $Tuple5(nil, nil, nil, 0, 0)
1028- func ck (cl,cm) = if ((cm >= ci))
1029- then cl
1030- else gF(cl, ch[cm])
1155+ let gO = {
1156+ let cA = hs
1157+ let cB = size(cA)
1158+ let cC = $Tuple5(nil, nil, nil, 0, 0)
1159+ func cD (cE,cF) = if ((cF >= cB))
1160+ then cE
1161+ else ht(cE, cA[cF])
10311162
1032- func cn (cl,cm) = if ((cm >= ci))
1033- then cl
1163+ func cG (cE,cF) = if ((cF >= cB))
1164+ then cE
10341165 else throw("List size exceeds 10")
10351166
1036- cn(ck(ck(ck(ck(ck(ck(ck(ck(ck(ck(cj, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1167+ cG(cD(cD(cD(cD(cD(cD(cD(cD(cD(cD(cC, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
10371168 }
1038- let gJ = gr(fY._4, fY._5, fY._2, fY._3)
1039- $Tuple2(fY._1, gJ)
1169+ let hx = hf(gO._4, gO._5, gO._2, gO._3)
1170+ $Tuple2(gO._1, hx)
10401171 }
10411172 else {
1042- let gI = gy(dx)
1043- let gJ = gr(gI[0], gI[1], [AttachedPayment(fl, gI[0])], [AttachedPayment(fl, gI[1])])
1044- $Tuple2([ScriptTransfer(bM, dw, fl)], gJ)
1173+ let hw = hm(dS)
1174+ let hx = hf(hw[0], hw[1], [AttachedPayment(fw, hw[0])], [AttachedPayment(fw, hw[1])])
1175+ $Tuple2([ScriptTransfer(cf, dR, fw)], hx)
10451176 }
1046- $Tuple2((gq ++ gD._1), gD._2)
1177+ $Tuple2((he ++ hr._1), hr._2)
10471178 }
10481179 else throw("Strict value is not equal to itself.")
10491180 }
10501181 else throw("Strict value is not equal to itself.")
10511182 }
10521183 }
10531184 }
10541185 }
10551186
10561187
10571188
10581189 @Callable(r)
1059-func internalUnleaseAndLease (ec) = if ((r.caller != this))
1190+func internalUnleaseAndLease (ew) = if ((r.caller != this))
10601191 then throw("internalUnleaseAndLease is not public method")
1061- else el(ec)
1192+ else eB(ew)
10621193
10631194
10641195
10651196 @Callable(r)
1066-func transferUsdnToUser (bP,gK) = if ((r.caller != ay))
1197+func transferUsdnToUser (ci,hy) = if ((r.caller != aO))
10671198 then throw("Only auction contract is authorized")
1068- else [ScriptTransfer(addressFromStringValue(gK), bP, cR)]
1199+ else [ScriptTransfer(addressFromStringValue(hy), ci, dk)]
10691200
10701201
10711202
10721203 @Callable(r)
1073-func acceptWaves () = if (if ((r.caller != ay))
1074- then (r.caller != aA)
1204+func acceptWaves () = if (if ((r.caller != aO))
1205+ then (r.caller != aQ)
10751206 else false)
10761207 then throw("Currently only auction and governance contracts are allowed to call")
1077- else $Tuple2(el(0), "success")
1208+ else $Tuple2(eB(0), "success")
10781209
10791210
10801211
10811212 @Callable(r)
1082-func approveLeasings (gL,bn,gM) = {
1083- let gN = [0, 1, 2, 3, 4, 5, 6, 7]
1084- let gO = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
1085- let gP = fromBase58String(gO)
1086- let gQ = valueOrElse(getString("%s%s__cfg__nodesRegistryAddress"), "3P9vKqQKjUdmpXAfiWau8krREYAY1Xr69pE")
1087- let gR = addressFromStringValue(gQ)
1088- let gS = bm(bn)
1089- let gT = getString(this, gS)
1090- if (isDefined(gT))
1091- then throw((("group " + toString(bn)) + " already initialized"))
1213+func approveLeasings (hz,bF,hA) = {
1214+ let hB = [0, 1, 2, 3, 4, 5, 6, 7]
1215+ let hC = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
1216+ let hD = fromBase58String(hC)
1217+ let hE = valueOrElse(getString("%s%s__cfg__nodesRegistryAddress"), "3P9vKqQKjUdmpXAfiWau8krREYAY1Xr69pE")
1218+ let hF = addressFromStringValue(hE)
1219+ let hG = bE(bF)
1220+ let hH = getString(this, hG)
1221+ if (isDefined(hH))
1222+ then throw((("group " + toString(bF)) + " already initialized"))
10921223 else {
1093- let gU = split(gL, z)
1094- let gV = size(gN)
1095- if ((r.callerPublicKey != gP))
1224+ let hI = split(hz, H)
1225+ let hJ = size(hB)
1226+ if ((r.callerPublicKey != hD))
10961227 then throw("approveLeasings not authorized")
10971228 else {
1098- let gW = et(0)
1099- let gX = gW._1
1100- let gY = gW._2
1101- let gZ = gW._3
1102- let ha = gW._4
1103- let hb = gW._5
1104- let hc = Lease(gX, (gZ - (gM * gV)))
1105- let hd = invoke(gR, "validateAndApproveLeasings", [gL], nil)
1106- if ((hd == hd))
1229+ let hK = eL(0)
1230+ let hL = hK._1
1231+ let hM = hK._2
1232+ let hN = hK._3
1233+ let hO = hK._4
1234+ let hP = hK._5
1235+ let hQ = Lease(hL, (hN - (hA * hJ)))
1236+ let hR = invoke(hF, "validateAndApproveLeasings", [hz], nil)
1237+ if ((hR == hR))
11071238 then {
1108- func he (dY,r) = {
1109- let hf = gU[r]
1110- let hg = Lease(addressFromStringValue(hf), gM)
1111- (dY ++ [hg, BinaryEntry(bi(hf), d(hg)), IntegerEntry(bl(hf), gM)])
1239+ func hS (eu,r) = {
1240+ let hT = hI[r]
1241+ let hU = Lease(addressFromStringValue(hT), hA)
1242+ (eu ++ [hU, BinaryEntry(bA(hT), d(hU)), IntegerEntry(bD(hT), hA)])
11121243 }
11131244
1114- ([StringEntry(gS, gL), BinaryEntry(ha, d(hc)), IntegerEntry(gY, hc.amount), LeaseCancel(hb), hc] ++ {
1115- let ch = gN
1116- let ci = size(ch)
1117- let cj = nil
1118- func ck (cl,cm) = if ((cm >= ci))
1119- then cl
1120- else he(cl, ch[cm])
1245+ ([StringEntry(hG, hz), BinaryEntry(hO, d(hQ)), IntegerEntry(hM, hQ.amount), LeaseCancel(hP), hQ] ++ {
1246+ let cA = hB
1247+ let cB = size(cA)
1248+ let cC = nil
1249+ func cD (cE,cF) = if ((cF >= cB))
1250+ then cE
1251+ else hS(cE, cA[cF])
11211252
1122- func cn (cl,cm) = if ((cm >= ci))
1123- then cl
1253+ func cG (cE,cF) = if ((cF >= cB))
1254+ then cE
11241255 else throw("List size exceeds 8")
11251256
1126- cn(ck(ck(ck(ck(ck(ck(ck(ck(cj, 0), 1), 2), 3), 4), 5), 6), 7), 8)
1257+ cG(cD(cD(cD(cD(cD(cD(cD(cD(cC, 0), 1), 2), 3), 4), 5), 6), 7), 8)
11271258 })
11281259 }
11291260 else throw("Strict value is not equal to itself.")
11301261 }
11311262 }
11321263 }
11331264
11341265
11351266
11361267 @Callable(r)
1137-func rebalanceLeasings (bP,bn) = {
1138- let gN = [0, 1, 2, 3, 4, 5, 6, 7]
1139- let gO = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
1140- let gP = fromBase58String(gO)
1141- let gS = bm(bn)
1142- let gL = a(this, gS)
1143- let gU = split(gL, z)
1144- if ((r.callerPublicKey != gP))
1268+func rebalanceLeasings (ci,bF) = {
1269+ let hC = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
1270+ let hD = fromBase58String(hC)
1271+ if ((r.callerPublicKey != hD))
11451272 then throw("rebalanceLeasings not authorized")
11461273 else {
1147- let fo = ((bP / size(gU)) + 1)
1148- let hh = et(0)
1149- let gX = hh._1
1150- let gY = hh._2
1151- let gZ = hh._3
1152- let ha = hh._4
1153- let hb = hh._5
1154- let hc = Lease(gX, (gZ + (fo * size(gU))))
1155- func hi (dY,r) = {
1156- let hf = gU[r]
1157- let hj = bi(hf)
1158- let hk = getBinaryValue(this, hj)
1159- let hl = bl(hf)
1160- let gM = getIntegerValue(this, hl)
1161- let hm = LeaseCancel(value(hk))
1162- let hg = Lease(addressFromStringValue(hf), (gM - fo))
1163- (dY ++ [LeaseCancel(value(hk)), hg, BinaryEntry(hj, d(hg)), IntegerEntry(hl, hg.amount)])
1164- }
1274+ let hG = bE(bF)
1275+ let hI = split(a(this, hG), H)
1276+ if ((1 > size(hI)))
1277+ then throw(("Empty group " + toString(bF)))
1278+ else {
1279+ let fz = ((ci / size(hI)) + 1)
1280+ let hV = eL(0)
1281+ let hL = hV._1
1282+ let hM = hV._2
1283+ let hN = hV._3
1284+ let hO = hV._4
1285+ let hP = hV._5
1286+ func hW (eu,hT) = {
1287+ let hX = bA(hT)
1288+ let hY = getBinaryValue(this, hX)
1289+ let hZ = bD(hT)
1290+ let hA = getIntegerValue(this, hZ)
1291+ (eu ++ eR(addressFromStringValue(hT), (hA - fz), hY, hX, hZ))
1292+ }
11651293
1166- ({
1167- let ch = gN
1168- let ci = size(ch)
1169- let cj = nil
1170- func ck (cl,cm) = if ((cm >= ci))
1171- then cl
1172- else hi(cl, ch[cm])
1294+ ({
1295+ let cA = hI
1296+ let cB = size(cA)
1297+ let cC = nil
1298+ func cD (cE,cF) = if ((cF >= cB))
1299+ then cE
1300+ else hW(cE, cA[cF])
11731301
1174- func cn (cl,cm) = if ((cm >= ci))
1175- then cl
1176- else throw("List size exceeds 8")
1302+ func cG (cE,cF) = if ((cF >= cB))
1303+ then cE
1304+ else throw("List size exceeds 8")
11771305
1178- cn(ck(ck(ck(ck(ck(ck(ck(ck(cj, 0), 1), 2), 3), 4), 5), 6), 7), 8)
1179- } ++ [BinaryEntry(ha, d(hc)), IntegerEntry(gY, hc.amount), LeaseCancel(hb), hc])
1306+ cG(cD(cD(cD(cD(cD(cD(cD(cD(cC, 0), 1), 2), 3), 4), 5), 6), 7), 8)
1307+ } ++ eR(hL, (hN + (fz * size(hI))), hP, hO, hM))
1308+ }
11801309 }
11811310 }
11821311
11831312
11841313
11851314 @Callable(r)
1186-func swapParamsByUserSYSREADONLY (eB,hn) = {
1187- let gn = l(invoke(ax, "gnsbtInfoSYSREADONLY", [eB, 0, 0], nil))
1188- let ho = (q(gn[0]) + hn)
1189- let go = (q(gn[1]) + hn)
1190- let hp = l(invoke(au, "calcSwapLimitREADONLY", [ho], nil))
1191- let hq = q(hp[0])
1192- let eH = q(hp[2])
1193- let hr = valueOrElse(getInteger(this, bN(eB)), 0)
1194- let hs = bG()
1195- let ht = (height - hr)
1196- let hu = (ht >= hs)
1197- let hv = if (hu)
1315+func swapParamsByUserSYSREADONLY (fH,ia) = {
1316+ let hb = l(invoke(aN, "gnsbtInfoSYSREADONLY", [fH, 0, 0], nil))
1317+ let ib = (q(hb[0]) + ia)
1318+ let hc = (q(hb[1]) + ia)
1319+ let ic = l(invoke(aK, "calcSwapLimitREADONLY", [ib], nil))
1320+ let id = q(ic[0])
1321+ let fN = q(ic[2])
1322+ let ie = valueOrElse(getInteger(this, cg(fH)), 0)
1323+ let if = bZ()
1324+ let ig = (height - ie)
1325+ let ih = (ig >= if)
1326+ let ii = if (ih)
11981327 then 0
1199- else valueOrElse(getInteger(this, bL(eB)), 0)
1200- let eG = if (hu)
1328+ else valueOrElse(getInteger(this, ce(fH)), 0)
1329+ let fM = if (ih)
12011330 then 0
1202- else (hs - ht)
1203- $Tuple2(nil, $Tuple7(hq, hv, eG, ho, go, 0, eH))
1331+ else (if - ig)
1332+ $Tuple2(nil, $Tuple7(id, ii, fM, ib, hc, 0, fN))
12041333 }
12051334
12061335
12071336
12081337 @Callable(r)
1209-func calcWithdrawResultSYSREADONLY (bp,bX,bQ,bY) = {
1210- let eO = l(invoke(au, "calcNeutinoMetricsREADONLY", nil, nil))
1211- $Tuple2(nil, fj(bp, bX, bQ, eO, bY))
1338+func calcWithdrawResultSYSREADONLY (bH,cq,cj,cr,ef) = {
1339+ let fu = l(invoke(aK, "calcNeutinoMetricsREADONLY", nil, nil))
1340+ $Tuple2(nil, ft(bH, cq, cj, fu, cr, ef, true))
12121341 }
12131342
12141343
12151344
12161345 @Callable(r)
1217-func replaceCommunityNode (hw,hx,bn,hy) = {
1218- let gO = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
1219- let gP = fromBase58String(gO)
1220- if ((r.callerPublicKey != gP))
1346+func replaceCommunityNode (ij,ik,bF,il) = {
1347+ let hC = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
1348+ let hD = fromBase58String(hC)
1349+ if ((r.callerPublicKey != hD))
12211350 then throw("replaceCommunityNode not authorized")
12221351 else {
1223- let hz = bm(bn)
1224- let hA = a(this, hz)
1225- if (!(contains(hA, hw)))
1226- then throw(((("Group " + toString(bn)) + " does not contain address ") + hw))
1352+ let im = bE(bF)
1353+ let in = a(this, im)
1354+ if (!(contains(in, ij)))
1355+ then throw(((("Group " + toString(bF)) + " does not contain address ") + ij))
12271356 else {
1228- let hB = invoke(az, "replaceApprovedNode", [hw, hx, bn, hy], nil)
1229- if ((hB == hB))
1357+ let io = invoke(aP, "replaceApprovedNode", [ij, ik, bF, il], nil)
1358+ if ((io == io))
12301359 then {
1231- let hC = bi(hw)
1232- let hD = bl(hw)
1233- let hE = getIntegerValue(hD)
1234- let hF = bi(hx)
1235- let hG = bl(hx)
1236- let hH = Lease(addressFromStringValue(hx), hE)
1237- let hI = makeString(split(hA, hw), hx)
1238- $Tuple2([LeaseCancel(getBinaryValue(hC)), DeleteEntry(hC), DeleteEntry(hD), StringEntry(hz, hI), hH, BinaryEntry(hF, d(hH)), IntegerEntry(hG, hE)], unit)
1360+ let ip = bA(ij)
1361+ let iq = bD(ij)
1362+ let ir = getIntegerValue(iq)
1363+ let is = bA(ik)
1364+ let it = bD(ik)
1365+ let iu = makeString(split(in, ij), ik)
1366+ $Tuple2(([DeleteEntry(ip), DeleteEntry(iq), StringEntry(im, iu)] ++ eR(addressFromStringValue(ik), ir, getBinaryValue(ip), is, it)), unit)
12391367 }
12401368 else throw("Strict value is not equal to itself.")
12411369 }
12421370 }
12431371 }
12441372
12451373
1246-@Verifier(cZ)
1247-func hJ () = {
1248- let hK = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR"], z)
1249- let hL = split(valueOrElse(getString(at, "%s__multisig"), hK), z)
1250- let hM = ((((if (sigVerify(cZ.bodyBytes, cZ.proofs[0], fromBase58String(hL[0])))
1374+
1375+@Callable(r)
1376+func removeCommunityNode (ij,bF,il) = {
1377+ let hC = valueOrElse(getString("%s%s__cfg__leasingManagerPub"), "7AUMX54ukYMYvPmma7yoFf5NjZhs4Bu5nz3Ez9EV8sur")
1378+ let hD = fromBase58String(hC)
1379+ if ((r.callerPublicKey != hD))
1380+ then throw("removeCommunityNode not authorized")
1381+ else {
1382+ let im = bE(bF)
1383+ let in = a(this, im)
1384+ if (!(contains(in, ij)))
1385+ then throw(((("Group " + toString(bF)) + " does not contain address ") + ij))
1386+ else {
1387+ let iv = invoke(aP, "removeApprovedNode", [ij, il], nil)
1388+ if ((iv == iv))
1389+ then {
1390+ let ip = bA(ij)
1391+ let iq = bD(ij)
1392+ let ir = getIntegerValue(iq)
1393+ let iw = eL(0)
1394+ let hL = iw._1
1395+ let hM = iw._2
1396+ let hN = iw._3
1397+ let hO = iw._4
1398+ let hP = iw._5
1399+ let iu = B(in, H, ij)
1400+ $Tuple2(([DeleteEntry(ip), DeleteEntry(iq), StringEntry(im, iu), LeaseCancel(hP)] ++ eR(hL, (hN + ir), getBinaryValue(ip), hO, hM)), unit)
1401+ }
1402+ else throw("Strict value is not equal to itself.")
1403+ }
1404+ }
1405+ }
1406+
1407+
1408+@Verifier(dt)
1409+func ix () = {
1410+ let iy = makeString(["ExtEEK19nmKj9mCpnWyvEEJFYATLMcVEMvohhUHkyHNm", "Ev5py5FfBQX9cZpYKnfQrTB49Byf8QmpZWeDVRim4yV7", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR", "DUuuLjXu98nBwZc7fqwCTjtA3nnRwgTbkMSr5SU2NmDR"], H)
1411+ let iz = split(valueOrElse(getString(aJ, "%s__multisig"), iy), H)
1412+ let iA = ((((if (sigVerify(dt.bodyBytes, dt.proofs[0], fromBase58String(iz[0])))
12511413 then 1
1252- else 0) + (if (sigVerify(cZ.bodyBytes, cZ.proofs[1], fromBase58String(hL[1])))
1414+ else 0) + (if (sigVerify(dt.bodyBytes, dt.proofs[1], fromBase58String(iz[1])))
12531415 then 1
1254- else 0)) + (if (sigVerify(cZ.bodyBytes, cZ.proofs[2], fromBase58String(hL[2])))
1416+ else 0)) + (if (sigVerify(dt.bodyBytes, dt.proofs[2], fromBase58String(iz[2])))
12551417 then 1
1256- else 0)) + (if (sigVerify(cZ.bodyBytes, cZ.proofs[3], fromBase58String(hL[3])))
1418+ else 0)) + (if (sigVerify(dt.bodyBytes, dt.proofs[3], fromBase58String(iz[3])))
12571419 then 2
12581420 else 0))
1259- if (if (cS)
1260- then (getStringValue(at, "is_blocked_caller") == toString(aA))
1421+ if (if (dl)
1422+ then (getStringValue(aJ, "is_blocked_caller") == toString(aQ))
12611423 else false)
1262- then fy(cZ)
1424+ then gj(dt)
12631425 else {
1264- let n = cZ
1426+ let n = dt
12651427 if ($isInstanceOf(n, "SponsorFeeTransaction"))
12661428 then {
1267- let hN = n
1268- if (cY(hN))
1269- then (hM >= 3)
1429+ let iB = n
1430+ if (ds(iB))
1431+ then (iA >= 3)
12701432 else false
12711433 }
1272- else (hM >= 3)
1434+ else (iA >= 3)
12731435 }
12741436 }
12751437

github/deemru/w8io/c3f4982 
645.80 ms