tx · 4GAbhhte2SJ6ty9DqFsYnV6QS9be7zWaA4g8ruvzoQzC 3MCj8qcvP4VudwqgoQ8EjogvYH6CMAkgQCv: -0.10000000 Waves 2025.12.03 10:16 [784612] smart account 3MCj8qcvP4VudwqgoQ8EjogvYH6CMAkgQCv > SELF 0.00000000 Waves
{ "type": 13, "id": "4GAbhhte2SJ6ty9DqFsYnV6QS9be7zWaA4g8ruvzoQzC", "fee": 10000000, "feeAssetId": null, "timestamp": 1764746189762, "version": 2, "chainId": 82, "sender": "3MCj8qcvP4VudwqgoQ8EjogvYH6CMAkgQCv", "senderPublicKey": "FPd14jCSzd1izCBTe5L9WGW14Y97ACG9kKANLj9PBYgo", "proofs": [ "5svhU9rs7dHxjrS6xCWhyDBCX5KnfQEpKemPXa58qiUtW2AxHvtcsDp5QXQhmSMPgsnLT686AU3uwzcQh2hKSFbH" ], "script": "base64:BgIHCAISAwoBCIgBAAljb25maWdTdHIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwINY29uZmlnQWRkcmVzcwIjM1BNb0VpYmRMZVdxY1VSUTgzNTFYaGFXd3lhY0RjN0c0ZTUADkNPTkZJR19BRERSRVNTAwkAAAIFCWNvbmZpZ1N0cgIABQR0aGlzCQEHQWRkcmVzcwEJANkEAQUJY29uZmlnU3RyAANyZXgJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUOQ09ORklHX0FERFJFU1MCE0FHR1JFR0FUT1JfQ09OVFJBQ1QCIzNQR0ZIelZHVDROVGlnd0NLUDFOY3dvWGtvZFZad3ZCdXVVAAhwbF9wcm94eQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ5DT05GSUdfQUREUkVTUwITTEVORF9QUk9YWV9DT05UUkFDVAIjM1BKRVNWRFRIUnY4aTgzWGJtSHJSR1FoRGM1cmdSM2F6UXMABG9yY2wJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUOQ09ORklHX0FERFJFU1MCDW9yYWNsZUFkZHJlc3MCIzNQOGQxRTFCTEtvRDUyeTNiUUoxYkRUZDJURDFncGFMbjl0AAt3eF9zd2FwX3N0cgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ5DT05GSUdfQUREUkVTUwIKV1hfU1dBUFBFUgIjM1A2OHpOaXVmc3UxdmlacHUxYVkzY2RhaFJSS2N2VjVOOTMAB3d4X3N3YXAJAQdBZGRyZXNzAQkA2QQBBQt3eF9zd2FwX3N0cgARcHpTaHV0ZG93bkFkZHJlc3MJAQdBZGRyZXNzAQkA2QQBCQELdmFsdWVPckVsc2UCCQCdCAIFDkNPTkZJR19BRERSRVNTAg9zaHV0ZG93bkFkZHJlc3MCIzNQRXB2OWhSRldFRUJVMjJXUm5Mc3cxYkg0WUd0Y1U3MjhvABBwelJhbmdlTWFzdGVyU3RyCQELdmFsdWVPckVsc2UCCQCdCAIFDkNPTkZJR19BRERSRVNTAg9wb29sc0h1YkFkZHJlc3MCIzNQNVJHWXlDbkVMRjhKVFB4Z1g1NGRCR3p3a1FNS1VKNUg3AA1welJhbmdlTWFzdGVyCQEHQWRkcmVzcwEJANkEAQUQcHpSYW5nZU1hc3RlclN0cgARc3dvcGZpX29yYWNsZV9zdHIJAQt2YWx1ZU9yRWxzZQIJAKIIAQINc3dvcGZpX29yYWNsZQIjM1BFYnFWaUVSQ29Lbm1jU1VMaDZuMmFpTXZVZFNRZENzb20ADXN3b3BmaV9vcmFjbGUJAQdBZGRyZXNzAQkA2QQBBRFzd29wZmlfb3JhY2xlX3N0cgAOd3hfZmFjdG9yeV9zdHIJAQt2YWx1ZU9yRWxzZQIJAKIIAQIKd3hfZmFjdG9yeQIjM1BDdUhzVFU1OFdLaENxb3RiY1N3QUJ2ZFB6cXFWQWJiVHYACnd4X2ZhY3RvcnkJAQdBZGRyZXNzAQkA2QQBBQ53eF9mYWN0b3J5X3N0cgAOZWFzdF9wcm94eV9zdHIJAQt2YWx1ZU9yRWxzZQIJAKIIAQIKZWFzdF9wcm94eQIjM1BNdEduZjNMWGlFRzZpc0RRTHExeE1ES1VxalFHcU5ITGIACmVhc3RfcHJveHkJAQdBZGRyZXNzAQkA2QQBBQ5lYXN0X3Byb3h5X3N0cgAQZWFzdF9jb29yZGluYXRvcgkBC3ZhbHVlT3JFbHNlAgkAoggBAhBlYXN0X2Nvb3JkaW5hdG9yAiMzUEo1Q1ZScVcxNW5ua0tOSEpNelQzcFBUdERKZjcxckd4SwALdHNuX3N3YXBwZXIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUOQ09ORklHX0FERFJFU1MCDFRTTl9DT05UUkFDVAIjM1BLejVqbkpMb2hGMkdqU2hRN2JHNUg0QmViZG9BOTh6WjIAEHRzbl9zd2FwcGVyX2FkZHIJAQdBZGRyZXNzAQkA2QQBBQt0c25fc3dhcHBlcgAKS19hbV9hc19pZAIPJXNfX2Ftb3VudEFzc2V0AApLX3ByX2FzX2lkAg4lc19fcHJpY2VBc3NldAAFS19hbXACByVzX19hbXAAB0tfc2hhcmUCRCVzJXNfX3NoYXJlQXNzZXRCYWxhbmNlX19ZaU5ib2ZGekMxN2pFSEhDTXdyUmNweTlNcnJqYWJNTUxaeGc4ZzV4bWY3AAhLX3N0YWtlZAIaJXMlc19fc3Rha2VkQmFsYW5jZV9fV0FWRVMAEUtfZmFjdG9yeUNvbnRyYWN0AhMlc19fZmFjdG9yeUNvbnRyYWN0AAxLX3d4U2h1dERvd24CDCVzX19zaHV0ZG93bgAJS19hX2FzX2lkAgpBX2Fzc2V0X2lkAAlLX2JfYXNfaWQCCkJfYXNzZXRfaWQACktfYV9hc19iYWwCD0FfYXNzZXRfYmFsYW5jZQAKS19iX2FzX2JhbAIPQl9hc3NldF9iYWxhbmNlAAVLX2ZlZQIKY29tbWlzc2lvbgAPS19zd29wZmlfYWN0aXZlAgZhY3RpdmUAFktfc3dvcGZpX2dsb2JhbF9hY3RpdmUCFGFjdGl2ZV9hbGxfY29udHJhY3RzAAtLX2Fzc2V0X2lkcwIPc3RhdGljX3Rva2VuSWRzAAlLX2ZlZV9wdXoCCnN0YXRpY19mZWUACktfZmVlVG9rZW4CD3N0YXRpY19mZWVUb2tlbgAVS19nbG9iYWxfcG9vbFRva2VuX2lkAhZzdGF0aWNfcG9vbFRva2VuX2lkU3RyABxLX2dsb2JhbF9wb29sVG9rZW5faWRfYmluYXJ5AhNnbG9iYWxfcG9vbFRva2VuX2lkABlLX2dsb2JhbF9wb29sVG9rZW5fYW1vdW50AhdnbG9iYWxfcG9vbFRva2VuX2Ftb3VudAAOS19zdGF0aWNfS011bHQCDHN0YXRpY19LTXVsdAARS19wel9yYW5nZWRfcG9vbHMCDGdsb2JhbF9wb29scwAWS190bXBfcmVibGFuY2VBc3NldElkcwIVdG1wX3JlYmFsYW5jZUFzc2V0SWRzABZLX3JlYmFsYW5jZV9pblByb2dyZXNzAhRyZWJhbGFuY2VfaW5Qcm9ncmVzcwAVS19yZWJhbGFuY2Vfc3RlcHNEb25lAhNyZWJhbGFuY2Vfc3RlcHNEb25lABdLX3JlYmFsYW5jZV9zdGVwc0Ftb3VudAIVcmViYWxhbmNlX3N0ZXBzQW1vdW50ABdLX3JlYmFsYW5jZV9hc3NldERlbHRhcwIVcmViYWxhbmNlX2Fzc2V0RGVsdGFzABtLX3JlYmFsYW5jZV9hdHRhY2hlZFBheW1lbnQCGnJlYmFsYW5jZV9hdHRhY2hlZFBheW1lbnRfAAVrX2ZlZQIFa19mZWUACGtfcmViYXRlAghrX3JlYmF0ZQAVa19mZWVUb1N0YWtlcnNQZXJjZW50AhVrX2ZlZVRvU3Rha2Vyc1BlcmNlbnQAD2tfZXhjZXNzQmFsYW5jZQIPa19leGNlc3NCYWxhbmNlAA1rX2ZyZWVCYWxhbmNlAg1rX2ZyZWVCYWxhbmNlABRrX21heFNwb3RVdGlsaXphdGlvbgIUa19tYXhTcG90VXRpbGl6YXRpb24ADWtfdG90YWxTdXBwbHkCDWtfdG90YWxTdXBwbHkABmtfcmF0ZQIGa19yYXRlAAhrX2JzQXN0UgIIa19ic0FzdFIACGtfYnNBc3RXAghrX2JzQXN0VwAIa19xdEFzdFICCGtfcXRBc3RSAAhrX3F0QXN0VwIIa19xdEFzdFcAEGtfbWF4UHJpY2VJbXBhY3QCEGtfbWF4UHJpY2VJbXBhY3QAEGtfbWF4UHJpY2VTcHJlYWQCEGtfbWF4UHJpY2VTcHJlYWQAE2tfdG90YWxQb3NpdGlvblNpemUCE2tfdG90YWxQb3NpdGlvblNpemUADGtfYmFzZU9yYWNsZQIMa19iYXNlT3JhY2xlABBrX21heE9yYWNsZURlbGF5AhBrX21heE9yYWNsZURlbGF5AAlrX3N0b3JhZ2UCB1NUT1JBR0UACGtfYXNzZXRzAgZBU1NFVFMACGtfc3RhdHVzAgZTVEFUVVMACGtfcGF1c2VkAgZQQVVTRUQAEGtfYXNzZXRfYmFsYW5jZXMCDkFTU0VUX0JBTEFOQ0VTAA9rX2Fzc2V0X3dlaWdodHMCDUFTU0VUX1dFSUdIVFMACGtfbHBfZmVlAgZMUF9GRUUADmtfcHJvdG9jb2xfZmVlAgxQUk9UT0NPTF9GRUUAC2tfcHJlY2lzaW9uAglQUkVDSVNJT04AEmtfc2lnbWFfZmVlX3Blcl9scAIQU0lHTUFfRkVFX1BFUl9MUAAXa191c2VyX3NpZ21hX2ZlZV9wZXJfbHACFVVTRVJfU0lHTUFfRkVFX1BFUl9MUAAJa191c2VyX2xwAgdVU0VSX0xQAAprX3RvdGFsX2xwAghUT1RBTF9MUAAOa191c2VyX3Byb2ZpdHMCDFVTRVJfUFJPRklUUwARa19yZXdhcmRfYmFsYW5jZXMCD1JFV0FSRF9CQUxBTkNFUwEKZ2V0X2RvbWFpbgELcG9vbEFkZHJlc3MEByRtYXRjaDAFC3Bvb2xBZGRyZXNzAwkAAAICIzNQNHVBNWV0blppNEFtQmFiS2lucTJiTWlXVThLY25IWmRIBQckbWF0Y2gwAgExAgEwAQlrX3BsVG9rZW4CCGFzc2V0X2lkBmRvbWFpbgkArAICCQCsAgIJAKwCAgIJc2V0dXBfcGxfBQhhc3NldF9pZAIBXwUGZG9tYWluARBrX3RvdGFsX3N1cHBsaWVkAQhhc3NldF9pZAkArAICAg90b3RhbF9zdXBwbGllZF8FCGFzc2V0X2lkAQdrX3NSYXRlAQhhc3NldF9pZAkArAICBQhhc3NldF9pZAIGX3NSYXRlARBrX3RvdGFsX2JvcnJvd2VkAQhhc3NldF9pZAkArAICAg90b3RhbF9ib3Jyb3dlZF8FCGFzc2V0X2lkAQdrX2JSYXRlAQhhc3NldF9pZAkArAICBQhhc3NldF9pZAIGX2JSYXRlAQtrX21heFN1cHBseQEIYXNzZXRfaWQJAKwCAgIQc2V0dXBfbWF4U3VwcGx5XwUIYXNzZXRfaWQAEGtfbGFzdFJhdGVIZWlnaHQCDmxhc3RSYXRlSGVpZ2h0ARBnZXRQdXpCYWxhbmNlS2V5AQdhc3NldElkCQCsAgIJAKwCAgIHZ2xvYmFsXwUHYXNzZXRJZAIIX2JhbGFuY2UBFGdldFB1ekZhY3RCYWxhbmNlS2V5AQdhc3NldElkCQCsAgIJAKwCAgIHZ2xvYmFsXwUHYXNzZXRJZAIMX2ZhY3RCYWxhbmNlAQ9nZXRQdXpXZWlnaHRLZXkBB2Fzc2V0SWQJAKwCAgkArAICAgdzdGF0aWNfBQdhc3NldElkAgdfd2VpZ2h0AQdnZXRCUEFLAQdhZGRyZXNzCQCsAgIFB2FkZHJlc3MCEF9zdGF0aWNBc3NldHNJZHMBDHRyeUdldFN0cmluZwIDa2V5B2FkZHJlc3MEByRtYXRjaDAJAJ0IAgUHYWRkcmVzcwUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQBYgUHJG1hdGNoMAUBYgIAARN0cnlHZXRTdHJpbmdXaXRoRGVmAwNrZXkHYWRkcmVzcwNkZWYEByRtYXRjaDAJAJ0IAgUHYWRkcmVzcwUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQBYgUHJG1hdGNoMAUBYgUDZGVmAQp0cnlHZXRCb29sAgNrZXkHYWRkcmVzcwQHJG1hdGNoMAkAmwgCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBYgUHJG1hdGNoMAUBYgcBEXRyeUdldEJvb2xXaXRoRGVmAwNrZXkHYWRkcmVzcwNkZWYEByRtYXRjaDAJAJsIAgUHYWRkcmVzcwUDa2V5AwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWIFByRtYXRjaDAFAWIFA2RlZgENdHJ5R2V0SW50ZWdlcgIDa2V5B2FkZHJlc3MEByRtYXRjaDAJAJoIAgUHYWRkcmVzcwUDa2V5AwkAAQIFByRtYXRjaDACA0ludAQBYgUHJG1hdGNoMAUBYgAAARV0cnlHZXRJbnRlZ2VyQXNTdHJpbmcCA2tleQdhZGRyZXNzBAckbWF0Y2gwCQCaCAIFB2FkZHJlc3MFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAJAKQDAQUBYgIETm9uZQEUdHJ5R2V0SW50ZWdlcldpdGhEZWYDA2tleQdhZGRyZXNzA2RlZgQHJG1hdGNoMAkAmggCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiBQNkZWYBDmdldEFzc2V0U3RyaW5nAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAJANgEAQUBYgIFV0FWRVMBEGdldFd4RGVmYXVsdEZlZXMABAdwb29sRmVlCQEUdHJ5R2V0SW50ZWdlcldpdGhEZWYDAgslc19fcG9vbEZlZQUHd3hfc3dhcADAmgwEC3Byb3RvY29sRmVlCQEUdHJ5R2V0SW50ZWdlcldpdGhEZWYDAg8lc19fcHJvdG9jb2xGZWUFB3d4X3N3YXAAwJoMCQCUCgIJAKQDAQUHcG9vbEZlZQkApAMBBQtwcm90b2NvbEZlZQENZ2V0V3hQb29sRmVlcwEHYWRkcmVzcwQHZmVlc0tleQkArAICAg8lcyVzX19zd2FwRmVlX18FB2FkZHJlc3MEBGZlZXMJAQx0cnlHZXRTdHJpbmcCBQdmZWVzS2V5BQp3eF9mYWN0b3J5AwkAAAIFBGZlZXMCAAkBEGdldFd4RGVmYXVsdEZlZXMABAxzcGxpdHRlZEZlZXMJALUJAgUEZmVlcwICX18JAJQKAgkAkQMCBQxzcGxpdHRlZEZlZXMAAQkAkQMCBQxzcGxpdHRlZEZlZXMAAgEPZ2V0QXNzZXRCYWxhbmNlAgdhZGRyZXNzB2Fzc2V0SWQEAWEJAPAHAgUHYWRkcmVzcwUHYXNzZXRJZAUBYQEPZ2V0V2F2ZXNCYWxhbmNlAQdhZGRyZXNzBAF3CAkA7wcBBQdhZGRyZXNzCWF2YWlsYWJsZQUBdwEKZ2V0QmFsYW5jZQIGcmVzdWx0B2Fzc2V0SWQEB2FkZHJlc3MJAK8CAgUGcmVzdWx0ACMEBGFkZHIJAQdBZGRyZXNzAQkA2QQBBQdhZGRyZXNzBAdiYWxhbmNlAwkAAAIFB2Fzc2V0SWQCBVdBVkVTCQEPZ2V0V2F2ZXNCYWxhbmNlAQUEYWRkcgQDYUlkCQDZBAEFB2Fzc2V0SWQJAQ9nZXRBc3NldEJhbGFuY2UCBQRhZGRyBQNhSWQEA2xlbgkAsQIBBQZyZXN1bHQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQdhZGRyZXNzCQCwAgIFBnJlc3VsdAAjBQdhc3NldElkAgE6CQCkAwEFB2JhbGFuY2UCASwBEWdldEFkZHJlc3NCYWxhbmNlAgRhZGRyB2Fzc2V0SWQEB2JhbGFuY2UDCQAAAgUHYXNzZXRJZAIFV0FWRVMJAQ9nZXRXYXZlc0JhbGFuY2UBBQRhZGRyBANhSWQJANkEAQUHYXNzZXRJZAkBD2dldEFzc2V0QmFsYW5jZQIFBGFkZHIFA2FJZAUHYmFsYW5jZQEQZ2V0QXNzZXREZWNpbWFscwEKYXNzZXRJZFN0cgQIZGVjaW1hbHMDCQAAAgUKYXNzZXRJZFN0cgIFV0FWRVMACAgJAQV2YWx1ZQEJAOwHAQkA2QQBBQphc3NldElkU3RyCGRlY2ltYWxzBQhkZWNpbWFscwEJZ2V0V3hEYXRhAQdhZGRyZXNzBARhZGRyCQEHQWRkcmVzcwEJANkEAQUHYWRkcmVzcwQPX3d4X2ZhY3Rvcnlfc3RyCQETdHJ5R2V0U3RyaW5nV2l0aERlZgMCEyVzX19mYWN0b3J5Q29udHJhY3QFBGFkZHIFDnd4X2ZhY3Rvcnlfc3RyBAtfd3hfZmFjdG9yeQkBB0FkZHJlc3MBCQDZBAEFD193eF9mYWN0b3J5X3N0cgQIYW1vdW50SWQJAQx0cnlHZXRTdHJpbmcCBQpLX2FtX2FzX2lkBQRhZGRyBAdwcmljZUlkCQEMdHJ5R2V0U3RyaW5nAgUKS19wcl9hc19pZAUEYWRkcgQLaW5kZXhBbW91bnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQtfd3hfZmFjdG9yeQkArAICAiglcyVzJXNfX21hcHBpbmdzX19iYXNlQXNzZXQyaW50ZXJuYWxJZF9fBQhhbW91bnRJZAIRd3ggbWFwIGFzc2V0IGZhaWwECmluZGV4UHJpY2UJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQtfd3hfZmFjdG9yeQkArAICAiglcyVzJXNfX21hcHBpbmdzX19iYXNlQXNzZXQyaW50ZXJuYWxJZF9fBQdwcmljZUlkAhF3eCBtYXAgYXNzZXQgZmFpbAQKcG9vbENvbmZpZwkAtQkCCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgULX3d4X2ZhY3RvcnkJAKwCAgkArAICCQCsAgIJAKwCAgIIJWQlZCVzX18JAKQDAQULaW5kZXhBbW91bnQCAl9fCQCkAwEFCmluZGV4UHJpY2UCCF9fY29uZmlnAhN3eCBwb29sIGNvbmZpZyBmYWlsAgJfXwQNcG9vbFN0YXR1c1N0cgkAkQMCBQpwb29sQ29uZmlnAAIEA2FtcAkBDHRyeUdldFN0cmluZwIFBUtfYW1wBQRhZGRyBAVzaGFyZQkBDXRyeUdldEludGVnZXICBQdLX3NoYXJlBQRhZGRyBAVzdGFrZQkBDXRyeUdldEludGVnZXICBQhLX3N0YWtlZAUEYWRkcgQLJHQwOTE2ODkyMTkJAQ1nZXRXeFBvb2xGZWVzAQUHYWRkcmVzcwQHcG9vbEZlZQgFCyR0MDkxNjg5MjE5Al8xBAtwcm90b2NvbEZlZQgFCyR0MDkxNjg5MjE5Al8yBBBpc0dsb2JhbFNodXRkb3duCQEKdHJ5R2V0Qm9vbAIFDEtfd3hTaHV0RG93bgULX3d4X2ZhY3RvcnkEE2lzR2xvYmFsU2h1dGRvd25TdHIDBRBpc0dsb2JhbFNodXRkb3duAgExAgEwBBJpc1Bvb2xTd2FwRGlzYWJsZWQJAQp0cnlHZXRCb29sAgkArAICCQCsAgIJAKwCAgkArAICAgglZCVkJXNfXwkApAMBBQtpbmRleEFtb3VudAICX18JAKQDAQUKaW5kZXhQcmljZQIOX19zd2FwRGlzYWJsZWQFC193eF9mYWN0b3J5BBVpc1Bvb2xTd2FwRGlzYWJsZWRTdHIDBRJpc1Bvb2xTd2FwRGlzYWJsZWQCATECATAJAJQKAgkArAICCQCsAgIFCGFtb3VudElkAgEsBQdwcmljZUlkCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUDYW1wAgEsCQCkAwEFBXNoYXJlAgEsCQCkAwEFBXN0YWtlAgEsBQdwb29sRmVlAgEsBQtwcm90b2NvbEZlZQIBLAUTaXNHbG9iYWxTaHV0ZG93blN0cgIBLAUNcG9vbFN0YXR1c1N0cgIBLAUVaXNQb29sU3dhcERpc2FibGVkU3RyAQlnZXRTd0RhdGEBB2FkZHJlc3MEBGFkZHIJAQdBZGRyZXNzAQkA2QQBBQdhZGRyZXNzBARBX2lkCQEMdHJ5R2V0U3RyaW5nAgUJS19hX2FzX2lkBQRhZGRyBARCX2lkCQEMdHJ5R2V0U3RyaW5nAgUJS19iX2FzX2lkBQRhZGRyBAlBX2JhbGFuY2UJAQ10cnlHZXRJbnRlZ2VyAgUKS19hX2FzX2JhbAUEYWRkcgQJQl9iYWxhbmNlCQENdHJ5R2V0SW50ZWdlcgIFCktfYl9hc19iYWwFBGFkZHIEA2ZlZQkBFHRyeUdldEludGVnZXJXaXRoRGVmAwUFS19mZWUFBGFkZHIA8C4ECmRlcHJlY2F0ZWQJAQp0cnlHZXRCb29sAgkArAICAgtkZXByZWNhdGVkXwUHYWRkcmVzcwUNc3dvcGZpX29yYWNsZQQGYWN0aXZlCQERdHJ5R2V0Qm9vbFdpdGhEZWYDBQ9LX3N3b3BmaV9hY3RpdmUFBGFkZHIGBA1nbG9iYWxfYWN0aXZlCQERdHJ5R2V0Qm9vbFdpdGhEZWYDBRZLX3N3b3BmaV9nbG9iYWxfYWN0aXZlBQ1zd29wZmlfb3JhY2xlBgQJYWN0aXZlU3RyAwUGYWN0aXZlAgExAgEwBA9nbG9iYWxBY3RpdmVTdHIDBQ1nbG9iYWxfYWN0aXZlAgExAgEwCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEQV9pZAIBOgkApAMBBQlBX2JhbGFuY2UCASwFBEJfaWQCAToJAKQDAQUJQl9iYWxhbmNlAgEsCQCkAwEFA2ZlZQIBLAkApQMBBQpkZXByZWNhdGVkAgEsBQlhY3RpdmVTdHICASwFD2dsb2JhbEFjdGl2ZVN0cgESZ2V0UHpSZWJhbGFuY2VEYXRhAQdhZGRyZXNzBARhZGRyCQEHQWRkcmVzcwEJANkEAQUHYWRkcmVzcwQMdG1wQXNzZXRzU3RyCQELdmFsdWVPckVsc2UCCQCdCAIFBGFkZHIFFktfdG1wX3JlYmxhbmNlQXNzZXRJZHMCAAQKaW5Qcm9ncmVzcwkBC3ZhbHVlT3JFbHNlAgkAmwgCBQRhZGRyBRZLX3JlYmFsYW5jZV9pblByb2dyZXNzBwQJc3RlcHNEb25lCQELdmFsdWVPckVsc2UCCQCaCAIFBGFkZHIFFUtfcmViYWxhbmNlX3N0ZXBzRG9uZQAABAtzdGVwc0Ftb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQRhZGRyBRdLX3JlYmFsYW5jZV9zdGVwc0Ftb3VudAAABAthc3NldERlbHRhcwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQRhZGRyBRdLX3JlYmFsYW5jZV9hc3NldERlbHRhcwIABAl0bXBBc3NldHMJALUJAgUMdG1wQXNzZXRzU3RyAgEsCgEPY29sbGVjdFBheW1lbnRzAgVhY2N1bQdhc3NldElkBANrZXkJAKwCAgUbS19yZWJhbGFuY2VfYXR0YWNoZWRQYXltZW50BQdhc3NldElkBAN2YWwJAQ10cnlHZXRJbnRlZ2VyAgUDa2V5BQRhZGRyAwkBAiE9AgUDdmFsAAAJAM4IAgUFYWNjdW0JAMwIAgkArAICCQCsAgIFA2tleQIBKgkApAMBBQN2YWwFA25pbAUFYWNjdW0EEXJlYmFsYW5jZVBheW1lbnRzCgACJGwFCXRtcEFzc2V0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEPY29sbGVjdFBheW1lbnRzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBBRyZWJhbGFuY2VQYXltZW50c1N0cgkAuQkCBRFyZWJhbGFuY2VQYXltZW50cwIBLAkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQx0bXBBc3NldHNTdHICATsJAKUDAQUKaW5Qcm9ncmVzcwIBOwkApAMBBQlzdGVwc0RvbmUCATsJAKQDAQULc3RlcHNBbW91bnQCATsFC2Fzc2V0RGVsdGFzAgE7BRRyZWJhbGFuY2VQYXltZW50c1N0cgEUY29sbGVjdFB1ekFzc2V0c0RhdGECBnJlc3VsdAdhc3NldElkBANsZW4JAJADAQUGcmVzdWx0BAdhZGRyZXNzCQCRAwIFBnJlc3VsdAkAZQIFA2xlbgABBARhZGRyCQEHQWRkcmVzcwEJANkEAQUHYWRkcmVzcwQKYmFsYW5jZUtleQkBEGdldFB1ekJhbGFuY2VLZXkBBQdhc3NldElkBA5mYWN0QmFsYW5jZUtleQkBFGdldFB1ekZhY3RCYWxhbmNlS2V5AQUHYXNzZXRJZAQJd2VpZ2h0S2V5CQEPZ2V0UHV6V2VpZ2h0S2V5AQUHYXNzZXRJZAQGd2VpZ2h0CQENdHJ5R2V0SW50ZWdlcgIFCXdlaWdodEtleQUEYWRkcgQLcmVhbEJhbGFuY2UJARFnZXRBZGRyZXNzQmFsYW5jZQIFBGFkZHIFB2Fzc2V0SWQECm1heFNlbGxvZmYJARV0cnlHZXRJbnRlZ2VyQXNTdHJpbmcCCQCsAgIJAKwCAgIHc3RhdGljXwUHYXNzZXRJZAILX21heFNlbGxvZmYFBGFkZHIECWFzc2V0RGF0YQkBDHRyeUdldFN0cmluZwIJAKwCAgINZ2xvYmFsUGFyYW1zXwUHYXNzZXRJZAUEYWRkcgQNJHQwMTIzMDExMjkzNQMJAAACBQlhc3NldERhdGECAAQIX2JhbGFuY2UJAKQDAQkBDXRyeUdldEludGVnZXICBQpiYWxhbmNlS2V5BQRhZGRyBAxfZmFjdEJhbGFuY2UJAKQDAQkBDXRyeUdldEludGVnZXICBQ5mYWN0QmFsYW5jZUtleQUEYWRkcgQMX2N1cnJTZWxsb2ZmCQEVdHJ5R2V0SW50ZWdlckFzU3RyaW5nAgkArAICCQCsAgICB2dsb2JhbF8FB2Fzc2V0SWQCCF9zZWxsb2ZmBQRhZGRyCQCVCgMFCF9iYWxhbmNlBQxfZmFjdEJhbGFuY2UFDF9jdXJyU2VsbG9mZgQKX2Fzc2V0RGF0YQkAtQkCBQlhc3NldERhdGECAl9fBAhfYmFsYW5jZQkAkQMCBQpfYXNzZXREYXRhAAAEDF9mYWN0QmFsYW5jZQkAkQMCBQpfYXNzZXREYXRhAAEEDF9jdXJyU2VsbG9mZgkAkQMCBQpfYXNzZXREYXRhAAUJAJUKAwUIX2JhbGFuY2UFDF9mYWN0QmFsYW5jZQUMX2N1cnJTZWxsb2ZmBAdiYWxhbmNlCAUNJHQwMTIzMDExMjkzNQJfMQQLZmFjdEJhbGFuY2UIBQ0kdDAxMjMwMTEyOTM1Al8yBAtjdXJyU2VsbG9mZggFDSR0MDEyMzAxMTI5MzUCXzMEA3JlcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUHYXNzZXRJZAIBLAUHYmFsYW5jZQIBLAkApAMBBQZ3ZWlnaHQCASwJAKQDAQULcmVhbEJhbGFuY2UCASwFC2ZhY3RCYWxhbmNlAgEsBQtjdXJyU2VsbG9mZgIBLAUKbWF4U2VsbG9mZgkAzAgCBQNyZXMFBnJlc3VsdAEMaXNSYW5nZWRQb29sAQdhZGRyZXNzCgEFY2hlY2sCA2FjYwRuZXh0BANrZXkDCQBmAgACBQRuZXh0AgxnbG9iYWxfcG9vbHMJAKwCAgINZ2xvYmFsX3Bvb2xzXwkApAMBBQRuZXh0BAtyYW5nZWRQb29scwkBDHRyeUdldFN0cmluZwIFA2tleQUNcHpSYW5nZU1hc3RlcgQIaXNSYW5nZWQJAQIhPQIJALMJAgULcmFuZ2VkUG9vbHMFB2FkZHJlc3MFBHVuaXQDBQhpc1JhbmdlZAYFA2FjYwQDYXJyCQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgkAzAgCAAwJAMwIAgANCQDMCAIADgUDbmlsBANmZmYKAAIkbAUDYXJyCgACJHMJAJADAQUCJGwKAAUkYWNjMAcKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBWNoZWNrAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4FA2ZmZgEJZ2V0UHpEYXRhAQdhZGRyZXNzBARhZGRyCQEHQWRkcmVzcwEJANkEAQUHYWRkcmVzcwQEZmVlMQkBDXRyeUdldEludGVnZXICBQlLX2ZlZV9wdXoFBGFkZHIECGZlZVRva2VuCQEMdHJ5R2V0U3RyaW5nAgUKS19mZWVUb2tlbgUEYWRkcgQKYXNzZXRzU3RyMQkBDHRyeUdldFN0cmluZwIFC0tfYXNzZXRfaWRzBQRhZGRyBA0kdDAxMzc3NzEzOTI2AwkAAAIFCmFzc2V0c1N0cjECAAkAlAoCCQEMdHJ5R2V0U3RyaW5nAgkBB2dldEJQQUsBBQdhZGRyZXNzBQR0aGlzAMgBCQCUCgIFCmFzc2V0c1N0cjEFBGZlZTEECWFzc2V0c1N0cggFDSR0MDEzNzc3MTM5MjYCXzEEA2ZlZQgFDSR0MDEzNzc3MTM5MjYCXzIEBmFzc2V0cwkAtQkCBQlhc3NldHNTdHICASwECmFzc2V0c0RhdGEKAAIkbAUGYXNzZXRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAzAgCBQdhZGRyZXNzBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBFGNvbGxlY3RQdXpBc3NldHNEYXRhAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBANsZW4JAJADAQUKYXNzZXRzRGF0YQQJYXNzZXRzQXJyCQDRCAIFCmFzc2V0c0RhdGEJAGUCBQNsZW4AAQQNYXNzZXRzRGF0YVN0cgkAugkCBQlhc3NldHNBcnICATsEDnBvb2xUb2tlbklkU3RyCQEMdHJ5R2V0U3RyaW5nAgUVS19nbG9iYWxfcG9vbFRva2VuX2lkBQRhZGRyBAtwb29sVG9rZW5JZAMJAQIhPQIFDnBvb2xUb2tlbklkU3RyAgAFDnBvb2xUb2tlbklkU3RyBBFwb29sVG9rZW5JZEJpbmFyeQkBC3ZhbHVlT3JFbHNlAgkAnAgCBQRhZGRyBRxLX2dsb2JhbF9wb29sVG9rZW5faWRfYmluYXJ5CQDZBAECBGJ1YmkJAQ5nZXRBc3NldFN0cmluZwEFEXBvb2xUb2tlbklkQmluYXJ5BA9wb29sVG9rZW5BbW91bnQJAQ10cnlHZXRJbnRlZ2VyAgUZS19nbG9iYWxfcG9vbFRva2VuX2Ftb3VudAUEYWRkcgQFa011bHQJARR0cnlHZXRJbnRlZ2VyV2l0aERlZgMFDktfc3RhdGljX0tNdWx0BQRhZGRyAAEEDHBhdXNlZEdsb2JhbAkBCnRyeUdldEJvb2wCAgtpc19zaHV0ZG93bgURcHpTaHV0ZG93bkFkZHJlc3MED3BhdXNlZEdsb2JhbFN0cgMFDHBhdXNlZEdsb2JhbAIBMQIBMAQGcGF1c2VkBwQJcGF1c2VkU3RyAwUGcGF1c2VkAgExAgEwBAhpc1JhbmdlZAkBDGlzUmFuZ2VkUG9vbAEFB2FkZHJlc3MECHBvb2xNb2RlAwUIaXNSYW5nZWQCCXB6X3JhbmdlZAIHcmVndWxhcgkAmwoJBQNmZWUFCGZlZVRva2VuBQtwb29sVG9rZW5JZAUPcG9vbFRva2VuQW1vdW50BQVrTXVsdAUNYXNzZXRzRGF0YVN0cgUPcGF1c2VkR2xvYmFsU3RyBQlwYXVzZWRTdHIFCHBvb2xNb2RlAQpnZXRUc25EYXRhAgdhZGRyZXNzCGFzc2V0X2lkBARhZGRyCQEHQWRkcmVzcwEJANkEAQUHYWRkcmVzcwQGYnNBc3RSCQENdHJ5R2V0SW50ZWdlcgIFCGtfYnNBc3RSBQRhZGRyBAZic0FzdFcJAQ10cnlHZXRJbnRlZ2VyAgUIa19ic0FzdFcFBGFkZHIEBnF0QXN0UgkBDXRyeUdldEludGVnZXICBQhrX3F0QXN0UgUEYWRkcgQGcXRBc3RXCQENdHJ5R2V0SW50ZWdlcgIFCGtfcXRBc3RXBQRhZGRyBA5tYXhQcmljZUltcGFjdAkBDXRyeUdldEludGVnZXICBRBrX21heFByaWNlSW1wYWN0BQRhZGRyBA5tYXhQcmljZVNwcmVhZAkBDXRyeUdldEludGVnZXICBRBrX21heFByaWNlU3ByZWFkBQRhZGRyBBF0b3RhbFBvc2l0aW9uU2l6ZQkBDXRyeUdldEludGVnZXICBRNrX3RvdGFsUG9zaXRpb25TaXplBQRhZGRyBA5tYXhPcmFjbGVEZWxheQkBDXRyeUdldEludGVnZXICBRBrX21heE9yYWNsZURlbGF5BQRhZGRyBAxvcmFjbGVTdHJpbmcJAQx0cnlHZXRTdHJpbmcCBQxrX2Jhc2VPcmFjbGUFBGFkZHIEA2FycgkAtQkCBQxvcmFjbGVTdHJpbmcCASwEDSR0MDE1ODQ1MTU5MTEJAJUKAwkAkQMCBQNhcnIAAAkAkQMCBQNhcnIAAQkAkQMCBQNhcnIAAgQNb3JhY2xlQWRkcmVzcwgFDSR0MDE1ODQ1MTU5MTECXzEECHByaWNlS2V5CAUNJHQwMTU4NDUxNTkxMQJfMgQIYmxvY2tLZXkIBQ0kdDAxNTg0NTE1OTExAl8zBApvcmFjbGVBZGRyCQEHQWRkcmVzcwEJANkEAQUNb3JhY2xlQWRkcmVzcwQLb3JhY2xlUHJpY2UJAQ10cnlHZXRJbnRlZ2VyAgUIcHJpY2VLZXkFCm9yYWNsZUFkZHIECWN1ckhlaWdodAUGaGVpZ2h0BApsYXN0SGVpZ2h0AwkBAiE9AgUIYmxvY2tLZXkCAAkBDXRyeUdldEludGVnZXICBQhibG9ja0tleQUKb3JhY2xlQWRkcgUJY3VySGVpZ2h0BAV2YXVsdAkBDHRyeUdldFN0cmluZwIJAKwCAgIOa19hc3NldF92YXVsdF8FCGFzc2V0X2lkBRB0c25fc3dhcHBlcl9hZGRyBAp2YXVsdF9hZGRyCQEHQWRkcmVzcwEJANkEAQUFdmF1bHQEDWV4Y2Vzc0JhbGFuY2UJAQ10cnlHZXRJbnRlZ2VyAgUPa19leGNlc3NCYWxhbmNlBQp2YXVsdF9hZGRyBAtmcmVlQmFsYW5jZQkBDXRyeUdldEludGVnZXICBQ1rX2ZyZWVCYWxhbmNlBQp2YXVsdF9hZGRyBBJtYXhTcG90VXRpbGl6YXRpb24JAQ10cnlHZXRJbnRlZ2VyAgUUa19tYXhTcG90VXRpbGl6YXRpb24FCnZhdWx0X2FkZHIEC3RvdGFsU3VwcGx5CQENdHJ5R2V0SW50ZWdlcgIFDWtfdG90YWxTdXBwbHkFCnZhdWx0X2FkZHIEBHJhdGUJAQ10cnlHZXRJbnRlZ2VyAgUGa19yYXRlBQp2YXVsdF9hZGRyCQCiChAFBmJzQXN0UgUGYnNBc3RXBQZxdEFzdFIFBnF0QXN0VwURdG90YWxQb3NpdGlvblNpemUFDm1heFByaWNlSW1wYWN0BQ5tYXhQcmljZVNwcmVhZAULb3JhY2xlUHJpY2UFDWV4Y2Vzc0JhbGFuY2UFC2ZyZWVCYWxhbmNlBRJtYXhTcG90VXRpbGl6YXRpb24FC3RvdGFsU3VwcGx5BQRyYXRlBQljdXJIZWlnaHQFCmxhc3RIZWlnaHQFDm1heE9yYWNsZURlbGF5AQhnZXRQcmljZQEHYXNzZXRJZAQFcHJpY2UJAQ10cnlHZXRJbnRlZ2VyAgkArAICBQdhc3NldElkAgdfdHdhcDVCCQEHQWRkcmVzcwEJANkEAQUEb3JjbAUFcHJpY2UBCWdldFBMRGF0YQIMcG9vbF9hZGRyZXNzCGFzc2V0X2lkBAZkb21haW4JAQpnZXRfZG9tYWluAQUMcG9vbF9hZGRyZXNzBAdwb29sQWRyCQEHQWRkcmVzcwEJANkEAQUMcG9vbF9hZGRyZXNzBAlwbFRva2VuSWQJAQx0cnlHZXRTdHJpbmcCCQEJa19wbFRva2VuAgUIYXNzZXRfaWQFBmRvbWFpbgkBB0FkZHJlc3MBCQDZBAEFCHBsX3Byb3h5BAVzUmF0ZQkBDXRyeUdldEludGVnZXICCQEHa19zUmF0ZQEFCGFzc2V0X2lkBQdwb29sQWRyBAViUmF0ZQkBDXRyeUdldEludGVnZXICCQEHa19iUmF0ZQEFCGFzc2V0X2lkBQdwb29sQWRyBA10b3RhbFN1cHBsaWVkCQENdHJ5R2V0SW50ZWdlcgIJARBrX3RvdGFsX3N1cHBsaWVkAQUIYXNzZXRfaWQFB3Bvb2xBZHIEDXRvdGFsQm9ycm93ZWQJAQ10cnlHZXRJbnRlZ2VyAgkBEGtfdG90YWxfYm9ycm93ZWQBBQhhc3NldF9pZAUHcG9vbEFkcgQJbWF4U3VwcGx5CQEMdHJ5R2V0U3RyaW5nAgkBC2tfbWF4U3VwcGx5AQUIYXNzZXRfaWQFB3Bvb2xBZHIECmxhc3RIZWlnaHQJAQ10cnlHZXRJbnRlZ2VyAgUQa19sYXN0UmF0ZUhlaWdodAUHcG9vbEFkcgQJY3VySGVpZ2h0BQZoZWlnaHQEBXByaWNlCQEIZ2V0UHJpY2UBBQhhc3NldF9pZAQIZGVjaW1hbHMJARBnZXRBc3NldERlY2ltYWxzAQUIYXNzZXRfaWQEBmFjdGl2ZQkBCnRyeUdldEJvb2wCAgxzZXR1cF9hY3RpdmUFB3Bvb2xBZHIECXBhdXNlZFN0cgMFBmFjdGl2ZQIBMAIBMQkAngoMBQhhc3NldF9pZAUJcGxUb2tlbklkBQVzUmF0ZQUFYlJhdGUFDXRvdGFsU3VwcGxpZWQFDXRvdGFsQm9ycm93ZWQFCW1heFN1cHBseQUKbGFzdEhlaWdodAUJY3VySGVpZ2h0BQVwcmljZQUIZGVjaW1hbHMFCXBhdXNlZFN0cgEJdGVzdF9sb29wAgZyZXN1bHQDZWxlCQDMCAIFA2VsZQUGcmVzdWx0AQ5nZXRCYWxhbmNlc1N0cgIJYXNzZXRzU3RyB2FkZHJlc3MEBmFzc2V0cwkAvAkCBQlhc3NldHNTdHICASwEA3JlcwoAAiRsBQZhc3NldHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQdhZGRyZXNzCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpnZXRCYWxhbmNlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyAyCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgQIYmFsYW5jZXMJALACAgUDcmVzACMEBGJhbHMJALMCAgUIYmFsYW5jZXMAAQUEYmFscwEJcHJvY2Vzc1dYAgZyZXN1bHQHYWRkcmVzcwQNJHQwMTgzNTAxODM5MwkBCWdldFd4RGF0YQEFB2FkZHJlc3MECWFzc2V0c1N0cggFDSR0MDE4MzUwMTgzOTMCXzEEBWRhdGFzCAUNJHQwMTgzNTAxODM5MwJfMgQMYXNzZXRzU3RyaW5nCQEOZ2V0QmFsYW5jZXNTdHICBQlhc3NldHNTdHIFB2FkZHJlc3MEB3Jlc0l0ZW0JAKwCAgkArAICCQCsAgIJAKwCAgUHYWRkcmVzcwIBLwUMYXNzZXRzU3RyaW5nAgEvBQVkYXRhcwkAzAgCBQdyZXNJdGVtBQZyZXN1bHQBCXByb2Nlc3NTVwIGcmVzdWx0B2FkZHJlc3MEDGFzc2V0c1N0cmluZwkBCWdldFN3RGF0YQEFB2FkZHJlc3MEB3Jlc0l0ZW0JAKwCAgkArAICBQdhZGRyZXNzAgEvBQxhc3NldHNTdHJpbmcJAMwIAgUHcmVzSXRlbQUGcmVzdWx0AQlwcm9jZXNzUFoCBnJlc3VsdAdhZGRyZXNzBA0kdDAxODc4MDE4OTAzCQEJZ2V0UHpEYXRhAQUHYWRkcmVzcwQDZmVlCAUNJHQwMTg3ODAxODkwMwJfMQQIZmVlVG9rZW4IBQ0kdDAxODc4MDE4OTAzAl8yBAtwb29sVG9rZW5JZAgFDSR0MDE4NzgwMTg5MDMCXzMED3Bvb2xUb2tlbkFtb3VudAgFDSR0MDE4NzgwMTg5MDMCXzQEBWtNdWx0CAUNJHQwMTg3ODAxODkwMwJfNQQMYXNzZXRzU3RyaW5nCAUNJHQwMTg3ODAxODkwMwJfNgQMcGF1c2VkR2xvYmFsCAUNJHQwMTg3ODAxODkwMwJfNwQGcGF1c2VkCAUNJHQwMTg3ODAxODkwMwJfOAQIcG9vbE1vZGUIBQ0kdDAxODc4MDE4OTAzAl85BAhyZWJhRGF0YQkBEmdldFB6UmViYWxhbmNlRGF0YQEFB2FkZHJlc3MEB3Jlc0l0ZW0JAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQdhZGRyZXNzAgEvCQCkAwEFA2ZlZQIBLwUIZmVlVG9rZW4CAS8FDGFzc2V0c1N0cmluZwIBLwUIcmViYURhdGECAS8FC3Bvb2xUb2tlbklkAgEvCQCkAwEFD3Bvb2xUb2tlbkFtb3VudAIBLwkApAMBBQVrTXVsdAIBLwUMcGF1c2VkR2xvYmFsAgEvBQZwYXVzZWQCAS8FCHBvb2xNb2RlCQDMCAIFB3Jlc0l0ZW0FBnJlc3VsdAEKcHJvY2Vzc1RTTgIGcmVzdWx0BWxhYmVsBANhcnIJALUJAgUFbGFiZWwCAV8EDSR0MDE5MzEwMTkzNTIJAJQKAgkAkQMCBQNhcnIAAAkAkQMCBQNhcnIAAQQHYWRkcmVzcwgFDSR0MDE5MzEwMTkzNTICXzEECGFzc2V0X2lkCAUNJHQwMTkzMTAxOTM1MgJfMgQNJHQwMTkzNTcxOTU5NQkBCmdldFRzbkRhdGECBQdhZGRyZXNzBQhhc3NldF9pZAQGYnNBc3RSCAUNJHQwMTkzNTcxOTU5NQJfMQQGYnNBc3RXCAUNJHQwMTkzNTcxOTU5NQJfMgQGcXRBc3RSCAUNJHQwMTkzNTcxOTU5NQJfMwQGcXRBc3RXCAUNJHQwMTkzNTcxOTU5NQJfNAQRdG90YWxQb3NpdGlvblNpemUIBQ0kdDAxOTM1NzE5NTk1Al81BA5tYXhQcmljZUltcGFjdAgFDSR0MDE5MzU3MTk1OTUCXzYEDm1heFByaWNlU3ByZWFkCAUNJHQwMTkzNTcxOTU5NQJfNwQLb3JhY2xlUHJpY2UIBQ0kdDAxOTM1NzE5NTk1Al84BA1leGNlc3NCYWxhbmNlCAUNJHQwMTkzNTcxOTU5NQJfOQQLZnJlZUJhbGFuY2UIBQ0kdDAxOTM1NzE5NTk1A18xMAQSbWF4U3BvdFV0aWxpemF0aW9uCAUNJHQwMTkzNTcxOTU5NQNfMTEEC3RvdGFsU3VwcGx5CAUNJHQwMTkzNTcxOTU5NQNfMTIEBHJhdGUIBQ0kdDAxOTM1NzE5NTk1A18xMwQJY3VySGVpZ2h0CAUNJHQwMTkzNTcxOTU5NQNfMTQECmxhc3RIZWlnaHQIBQ0kdDAxOTM1NzE5NTk1A18xNQQObWF4T3JhY2xlRGVsYXkIBQ0kdDAxOTM1NzE5NTk1A18xNgQOYXNzZXRfZGVjaW1hbHMDCQAAAgUIYXNzZXRfaWQCBVdBVkVTAAgICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQkA2QQBBQhhc3NldF9pZAkArAICAg1JdmFsaWQgYXNzZXQgBQhhc3NldF9pZAhkZWNpbWFscwQHcmVzSXRlbQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUHYWRkcmVzcwIBLAUIYXNzZXRfaWQCASwJAKQDAQUOYXNzZXRfZGVjaW1hbHMCASwJAKQDAQUGYnNBc3RSAgEsCQCkAwEFBmJzQXN0VwIBLAkApAMBBQZxdEFzdFICASwJAKQDAQUGcXRBc3RXAgEsCQCkAwEFEXRvdGFsUG9zaXRpb25TaXplAgEsCQCkAwEFDm1heFByaWNlSW1wYWN0AgEsCQCkAwEFDm1heFByaWNlU3ByZWFkAgEsCQCkAwEFC29yYWNsZVByaWNlAgEsCQCkAwEFDWV4Y2Vzc0JhbGFuY2UCASwJAKQDAQULZnJlZUJhbGFuY2UCASwJAKQDAQUSbWF4U3BvdFV0aWxpemF0aW9uAgEsCQCkAwEFC3RvdGFsU3VwcGx5AgEsCQCkAwEFBHJhdGUCASwJAKQDAQUJY3VySGVpZ2h0AgEsCQCkAwEFCmxhc3RIZWlnaHQCASwJAKQDAQUObWF4T3JhY2xlRGVsYXkJAMwIAgUHcmVzSXRlbQUGcmVzdWx0AQlwcm9jZXNzUEwCBnJlc3VsdAVsYWJlbAQDYXJyCQC1CQIFBWxhYmVsAgEtBA0kdDAyMDQ3MzIwNTIwCQCUCgIJAJEDAgUDYXJyAAAJAJEDAgUDYXJyAAEEDHBvb2xfYWRkcmVzcwgFDSR0MDIwNDczMjA1MjACXzEECGFzc2V0X2lkCAUNJHQwMjA0NzMyMDUyMAJfMgQNJHQwMjA1MjUyMDY5MwkBCWdldFBMRGF0YQIFDHBvb2xfYWRkcmVzcwUIYXNzZXRfaWQECWFzc2V0X2lkZAgFDSR0MDIwNTI1MjA2OTMCXzEECXBsVG9rZW5JZAgFDSR0MDIwNTI1MjA2OTMCXzIEBXNSYXRlCAUNJHQwMjA1MjUyMDY5MwJfMwQFYlJhdGUIBQ0kdDAyMDUyNTIwNjkzAl80BA10b3RhbFN1cHBsaWVkCAUNJHQwMjA1MjUyMDY5MwJfNQQNdG90YWxCb3Jyb3dlZAgFDSR0MDIwNTI1MjA2OTMCXzYECW1heFN1cHBseQgFDSR0MDIwNTI1MjA2OTMCXzcECmxhc3RIZWlnaHQIBQ0kdDAyMDUyNTIwNjkzAl84BAljdXJIZWlnaHQIBQ0kdDAyMDUyNTIwNjkzAl85BAVwcmljZQgFDSR0MDIwNTI1MjA2OTMDXzEwBAhkZWNpbWFscwgFDSR0MDIwNTI1MjA2OTMDXzExBAlwYXVzZWRTdHIIBQ0kdDAyMDUyNTIwNjkzA18xMgQHcmVzSXRlbQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUFbGFiZWwCASwFCWFzc2V0X2lkZAIBLAUJcGxUb2tlbklkAgEsCQCkAwEFBXNSYXRlAgEsCQCkAwEFBWJSYXRlAgEsCQCkAwEFDXRvdGFsU3VwcGxpZWQCASwJAKQDAQUNdG90YWxCb3Jyb3dlZAIBLAUJbWF4U3VwcGx5AgEsCQCkAwEFCmxhc3RIZWlnaHQCASwJAKQDAQUJY3VySGVpZ2h0AgEsCQCkAwEFBXByaWNlAgEsCQCkAwEFCGRlY2ltYWxzAgEsBQlwYXVzZWRTdHIJAMwIAgUHcmVzSXRlbQUGcmVzdWx0AQVnZXRXWAEGcGFyYW1zBAVwb29scwkAvQkCBQZwYXJhbXMC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CQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQAS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MQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgQGcmVzdWx0CQC6CQIFBnJlc0FycgIBfAQDZmVlCQENdHJ5R2V0SW50ZWdlcgIFBWtfZmVlBRB0c25fc3dhcHBlcl9hZGRyBAZyZWJhdGUJAQ10cnlHZXRJbnRlZ2VyAgUIa19yZWJhdGUFEHRzbl9zd2FwcGVyX2FkZHIEE2ZlZVRvU3Rha2Vyc1BlcmNlbnQJAQ10cnlHZXRJbnRlZ2VyAgUVa19mZWVUb1N0YWtlcnNQZXJjZW50BRB0c25fc3dhcHBlcl9hZGRyCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCkAwEFA2ZlZQIBLAkApAMBBQZyZWJhdGUCASwJAKQDAQUTZmVlVG9TdGFrZXJzUGVyY2VudAIBLwUGcmVzdWx0AQVnZXRQTAEGcGFyYW1zBAVwb29scwkAtQkCBQZwYXJhbXMCASwEBnJlc0FycgoAAiRsBQVwb29scwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJcHJvY2Vzc1BMAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBAZyZXN1bHQJALoJAgUGcmVzQXJyAgF8BQZyZXN1bHQBDmxvYWRQZXBlQXNzZXRzAQtwZXBlX21hcmtldAQGYXNzZXRzCQEMdHJ5R2V0U3RyaW5nAgUIa19hc3NldHMFC3BlcGVfbWFya2V0CQC8CQIFBmFzc2V0cwICX18BFWxvYWRQZXBlQXNzZXRCYWxhbmNlcwELcGVwZV9tYXJrZXQKAQhm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ZQgFDSR0MDI1MDUzMjUyNTYCXzUEEW1heEFsbG9jQW1wbGlmaWVyCAUNJHQwMjUwNTMyNTI1NgJfNgQPd2VpZ2h0QW1wbGlmaWVyCAUNJHQwMjUwNTMyNTI1NgJfNwQPZGlzYmFsYW5jZUNvZWZmCAUNJHQwMjUwNTMyNTI1NgJfOAQJcHJlY2lzaW9uCQENdHJ5R2V0SW50ZWdlcgIFC2tfcHJlY2lzaW9uBQtwZXBlX21hcmtldAQNc2lnbWFGZWVQZXJMcAkBDHRyeUdldFN0cmluZwIFEmtfc2lnbWFfZmVlX3Blcl9scAULcGVwZV9tYXJrZXQEBnBhdXNlZAkBCnRyeUdldEJvb2wCBQhrX3BhdXNlZAULcGVwZV9tYXJrZXQEB3RvdGFsTHAJAQ10cnlHZXRJbnRlZ2VyAgUKa190b3RhbF9scAULcGVwZV9tYXJrZXQEDnJld2FyZEJhbGFuY2VzCQEMdHJ5R2V0U3RyaW5nAgURa19yZXdhcmRfYmFsYW5jZXMFC3BlcGVfbWFya2V0BApscERlY2ltYWxzCQEQZ2V0QXNzZXREZWNpbWFscwEFCWxwQXNzZXRJZAQGYXNzZXRzCQEObG9hZFBlcGVBc3NldHMBBQtwZXBlX21hcmtldAQMZGVjaW1hbHNfYXJyCQEQbG9hZFBlcGVEZWNpbWFscwEFBmFzc2V0cwQNJHQwMjU3MTEyNTc3OAkBFGxvYWRQZXBlQXNzZXRXZWlnaHRzAQULcGVwZV9tYXJrZXQEDGFzc2V0V2VpZ2h0cwgFDSR0MDI1NzExMjU3NzgCXzEEC3NpZ21hV2VpZ2h0CAUNJHQwMjU3MTEyNTc3OAJfMgQNJHQwMjU3ODMyNTg2NgkBFWxvYWRQZXBlQXNzZXRCYWxhbmNlcwEFC3BlcGVfbWFya2V0BBFwcmV2QXNzZXRCYWxhbmNlcwgFDSR0MDI1NzgzMjU4NjYCXzEEFHByZXZBc3NldFRvdGFsU3VwcGx5CAUNJHQwMjU3ODMyNTg2NgJfMgQUd2F0Y2hkb2dfYWRkcmVzc19zdHIJAQx0cnlHZXRTdHJpbmcCAghXQVRDSERPRwULcGVwZV9tYXJrZXQECHdhdGNoZG9nCQEHQWRkcmVzcwEJANkEAQUUd2F0Y2hkb2dfYWRkcmVzc19zdHIED3dhdGNoZG9nX29mZnNldAkBDXRyeUdldEludGVnZXICAg9XQVRDSERPR19PRkZTRVQFC3BlcGVfbWFya2V0BA93YXRjaGRvZ19oZWlnaHQJAQ10cnlHZXRJbnRlZ2VyAgIPV0FUQ0hET0dfSEVJR0hUBQh3YXRjaGRvZwQTd2F0Y2hkb2dfcGF1c2VkX3N0cgMJAGYCBQZoZWlnaHQJAGQCBQ93YXRjaGRvZ19oZWlnaHQFD3dhdGNoZG9nX29mZnNldAIBMQIBMAQIbWFpbl9zdHIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQlscEFzc2V0SWQCASwJAKUDAQUIdW5sb2NrZWQCASwFDWxwVG90YWxTdXBwbHkCASwFCWxwRmVlUmF0ZQIBLAUPcHJvdG9jb2xGZWVSYXRlAgEsBRFtYXhBbGxvY0FtcGxpZmllcgIBLAUPd2VpZ2h0QW1wbGlmaWVyAgEsBQ9kaXNiYWxhbmNlQ29lZmYCASwJAKQDAQULc2lnbWFXZWlnaHQCASwJAKQDAQUUcHJldkFzc2V0VG90YWxTdXBwbHkCASwJAKQDAQUJcHJlY2lzaW9uAgEsBQ1zaWdtYUZlZVBlckxwAgEsCQCkAwEFB3RvdGFsTHACASwJAKUDAQUGcGF1c2VkAgEsCQCkAwEFCmxwRGVjaW1hbHMCASwFD3BlcGVfbWFya2V0X3N0cgIBLAUTd2F0Y2hkb2dfcGF1c2VkX3N0cgQKYXNzZXRzX2lkcwkAuwkCBQZhc3NldHMCASwEDmFzc2V0c193ZWlnaHRzCQC7CQIFDGFzc2V0V2VpZ2h0cwIBLAQPYXNzZXRzX2JhbGFuY2VzCQC7CQIFEXByZXZBc3NldEJhbGFuY2VzAgEsBA9hc3NldHNfZGVjaW1hbHMJALsJAgUMZGVjaW1hbHNfYXJyAgEsBANyZXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUIbWFpbl9zdHICAXwFCmFzc2V0c19pZHMCAXwFDmFzc2V0c193ZWlnaHRzAgF8BQ9hc3NldHNfYmFsYW5jZXMCAXwFD2Fzc2V0c19kZWNpbWFscwIBfAUOcmV3YXJkQmFsYW5jZXMJAM0IAgUGcmVzdWx0BQNyZXMBB2dldFBlcGUBBnBhcmFtcwQJYWRkcmVzc2VzCQC1CQIFBnBhcmFtcwIBLAQGcmVzQXJyCgACJGwFCWFkZHJlc3NlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQELcHJvY2Vzc1BlcGUCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoEBnJlc3VsdAkAuwkCBQZyZXNBcnICATsFBnJlc3VsdAEKZ2V0Q29tYmluZQEGcGFyYW1zBAlwYXJhbXNBcnIJALUJAgUGcGFyYW1zAgIqKgQNJHQwMjc3MTcyNzc5OQkAlQoDCQCRAwIFCXBhcmFtc0FycgAACQCRAwIFCXBhcmFtc0FycgABCQCRAwIFCXBhcmFtc0FycgACBAl0c25QYXJhbXMIBQ0kdDAyNzcxNzI3Nzk5Al8xBAhwbFBhcmFtcwgFDSR0MDI3NzE3Mjc3OTkCXzIECnBlcGVQYXJhbXMIBQ0kdDAyNzcxNzI3Nzk5Al8zBAd0c25EYXRhCQEGZ2V0VFNOAQUJdHNuUGFyYW1zBAZwbERhdGEJAQVnZXRQTAEFCHBsUGFyYW1zBAhwZXBlRGF0YQkBB2dldFBlcGUBBQpwZXBlUGFyYW1zCQC7CQIJAMwIAgUHdHNuRGF0YQkAzAgCBQZwbERhdGEJAMwIAgUIcGVwZURhdGEFA25pbAICKioBEGdldEVhc3RBc3NldERhdGEBB2Fzc2V0SWQEBnBhcmFtcwkBDHRyeUdldFN0cmluZwIJAKwCAgINJXMlc19fYXNzZXRfXwUHYXNzZXRJZAUKZWFzdF9wcm94eQQJcGFyYW1zQXJyCQC1CQIFBnBhcmFtcwICX18EDSR0MDI4MTIwMjgxODAJAJQKAgkAkQMCBQlwYXJhbXNBcnIAAQkAkQMCBQlwYXJhbXNBcnIAAgQFZW5TdHIIBQ0kdDAyODEyMDI4MTgwAl8xBBBhc3NldENvbnRyYWN0U3RyCAUNJHQwMjgxMjAyODE4MAJfMgQNYXNzZXRDb250cmFjdAkBB0FkZHJlc3MBCQDZBAEFEGFzc2V0Q29udHJhY3RTdHIEB2VuYWJsZWQDCQAAAgUFZW5TdHICB0VOQUJMRUQGBwQMYmFja2luZ1JhdGlvCQENdHJ5R2V0SW50ZWdlcgICECVzX19iYWNraW5nUmF0aW8FDWFzc2V0Q29udHJhY3QEEGxpcXVpZGF0aW9uUmF0aW8JAQ10cnlHZXRJbnRlZ2VyAgIUJXNfX2xpcXVpZGF0aW9uUmF0aW8FDWFzc2V0Q29udHJhY3QEEG9yYWNsZUFkZHJlc3NTdHIJAQx0cnlHZXRTdHJpbmcCAhElc19fb3JhY2xlQWRkcmVzcwUNYXNzZXRDb250cmFjdAQNb3JhY2xlQWRkcmVzcwkBB0FkZHJlc3MBCQDZBAEFEG9yYWNsZUFkZHJlc3NTdHIEBnRpY2tlcgkBDHRyeUdldFN0cmluZwICCiVzX190aWNrZXIFDWFzc2V0Q29udHJhY3QED2Vhc3RNaW50ZWRMaW1pdAkBDXRyeUdldEludGVnZXICAhMlc19fZWFzdE1pbnRlZExpbWl0BQ1hc3NldENvbnRyYWN0BAVwcmljZQkBDXRyeUdldEludGVnZXICCQCsAgICDSVzJXNfX3ByaWNlX18FBnRpY2tlcgUNb3JhY2xlQWRkcmVzcwkAugkCCQDMCAIJAKUDAQUHZW5hYmxlZAkAzAgCCQCkAwEFDGJhY2tpbmdSYXRpbwkAzAgCCQCkAwEFEGxpcXVpZGF0aW9uUmF0aW8JAMwIAgkApAMBBQ9lYXN0TWludGVkTGltaXQJAMwIAgkApAMBBQVwcmljZQUDbmlsAgEsARJnZXRFYXN0TGlxdWlkYXRpb24BBnBhcmFtcwQJcGFyYW1zQXJyCQC1CQIFBnBhcmFtcwIBLAoBAWYCBWFjY3VtBG5leHQJAM0IAgUFYWNjdW0JAKwCAgkArAICBQRuZXh0AgEsCQEQZ2V0RWFzdEFzc2V0RGF0YQEFBG5leHQEA3JlcwoAAiRsBQlwYXJhbXNBcnIKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBAWYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoECmFzc2V0c0RhdGEJALsJAgUDcmVzAgE7BBVjdW11bGF0aXZlRmVlRnJhY3Rpb24JAQ10cnlHZXRJbnRlZ2VyAgIZJXNfX2N1bXVsYXRpdmVGZWVGcmFjdGlvbgUKZWFzdF9wcm94eQQGY3VyclRzCQBpAggFCWxhc3RCbG9jawl0aW1lc3RhbXAA6AcEE2ZyYWN0aW9uTGFzdFVwZGF0ZWQJARR0cnlHZXRJbnRlZ2VyV2l0aERlZgMCFyVzX19mcmFjdGlvbkxhc3RVcGRhdGVkBQplYXN0X3Byb3h5BQZjdXJyVHMEDmNvb3JkaW5hdG9yU3RyCQEMdHJ5R2V0U3RyaW5nAgIWJXNfX2Nvb3JkaW5hdG9yQWRkcmVzcwUKZWFzdF9wcm94eQQLY29vcmRpbmF0b3IJAQdBZGRyZXNzAQkA2QQBBQ5jb29yZGluYXRvclN0cgQHc3RhYkZlZQkBFHRyeUdldEludGVnZXJXaXRoRGVmAwIQJXNfX3N0YWJpbGl0eUZlZQULY29vcmRpbmF0b3IAgMivoCUECGxpcUJvbnVzCQENdHJ5R2V0SW50ZWdlcgICFCVzX19saXF1aWRhdGlvbkJvbnVzBQtjb29yZGluYXRvcgQKY29tbW9uRGF0YQkAuQkCCQDMCAIJAKQDAQUVY3VtdWxhdGl2ZUZlZUZyYWN0aW9uCQDMCAIJAKQDAQUGY3VyclRzCQDMCAIJAKQDAQUTZnJhY3Rpb25MYXN0VXBkYXRlZAkAzAgCCQCkAwEFB3N0YWJGZWUJAMwIAgkApAMBBQhsaXFCb251cwUDbmlsAgEsCQCsAgIJAKwCAgUKY29tbW9uRGF0YQIBfAUKYXNzZXRzRGF0YQEBaQEEdGVzdAEBcwQBcgkBCnRyeUdldEJvb2wCAi5kZXByZWNhdGVkXzNQMjg2VGtUSEFSdHJKenhVaFBvSFhhcmR2dXRDMzdhOXJNBQ1zd29wZmlfb3JhY2xlCQACAQkApQMBBQFyALChMek=", "height": 784612, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
| Old | New | Differences | |
|---|---|---|---|
| 1 | - | # no script | |
| 1 | + | {-# STDLIB_VERSION 6 #-} | |
| 2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
| 3 | + | {-# CONTENT_TYPE DAPP #-} | |
| 4 | + | let configStr = valueOrElse(getString(this, "configAddress"), "3PMoEibdLeWqcURQ8351XhaWwyacDc7G4e5") | |
| 5 | + | ||
| 6 | + | let CONFIG_ADDRESS = if ((configStr == "")) | |
| 7 | + | then this | |
| 8 | + | else Address(fromBase58String(configStr)) | |
| 9 | + | ||
| 10 | + | let rex = valueOrElse(getString(CONFIG_ADDRESS, "AGGREGATOR_CONTRACT"), "3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU") | |
| 11 | + | ||
| 12 | + | let pl_proxy = valueOrElse(getString(CONFIG_ADDRESS, "LEND_PROXY_CONTRACT"), "3PJESVDTHRv8i83XbmHrRGQhDc5rgR3azQs") | |
| 13 | + | ||
| 14 | + | let orcl = valueOrElse(getString(CONFIG_ADDRESS, "oracleAddress"), "3P8d1E1BLKoD52y3bQJ1bDTd2TD1gpaLn9t") | |
| 15 | + | ||
| 16 | + | let wx_swap_str = valueOrElse(getString(CONFIG_ADDRESS, "WX_SWAPPER"), "3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93") | |
| 17 | + | ||
| 18 | + | let wx_swap = Address(fromBase58String(wx_swap_str)) | |
| 19 | + | ||
| 20 | + | let pzShutdownAddress = Address(fromBase58String(valueOrElse(getString(CONFIG_ADDRESS, "shutdownAddress"), "3PEpv9hRFWEEBU22WRnLsw1bH4YGtcU728o"))) | |
| 21 | + | ||
| 22 | + | let pzRangeMasterStr = valueOrElse(getString(CONFIG_ADDRESS, "poolsHubAddress"), "3P5RGYyCnELF8JTPxgX54dBGzwkQMKUJ5H7") | |
| 23 | + | ||
| 24 | + | let pzRangeMaster = Address(fromBase58String(pzRangeMasterStr)) | |
| 25 | + | ||
| 26 | + | let swopfi_oracle_str = valueOrElse(getString("swopfi_oracle"), "3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom") | |
| 27 | + | ||
| 28 | + | let swopfi_oracle = Address(fromBase58String(swopfi_oracle_str)) | |
| 29 | + | ||
| 30 | + | let wx_factory_str = valueOrElse(getString("wx_factory"), "3PCuHsTU58WKhCqotbcSwABvdPzqqVAbbTv") | |
| 31 | + | ||
| 32 | + | let wx_factory = Address(fromBase58String(wx_factory_str)) | |
| 33 | + | ||
| 34 | + | let east_proxy_str = valueOrElse(getString("east_proxy"), "3PMtGnf3LXiEG6isDQLq1xMDKUqjQGqNHLb") | |
| 35 | + | ||
| 36 | + | let east_proxy = Address(fromBase58String(east_proxy_str)) | |
| 37 | + | ||
| 38 | + | let east_coordinator = valueOrElse(getString("east_coordinator"), "3PJ5CVRqW15nnkKNHJMzT3pPTtDJf71rGxK") | |
| 39 | + | ||
| 40 | + | let tsn_swapper = valueOrElse(getString(CONFIG_ADDRESS, "TSN_CONTRACT"), "3PKz5jnJLohF2GjShQ7bG5H4BebdoA98zZ2") | |
| 41 | + | ||
| 42 | + | let tsn_swapper_addr = Address(fromBase58String(tsn_swapper)) | |
| 43 | + | ||
| 44 | + | let K_am_as_id = "%s__amountAsset" | |
| 45 | + | ||
| 46 | + | let K_pr_as_id = "%s__priceAsset" | |
| 47 | + | ||
| 48 | + | let K_amp = "%s__amp" | |
| 49 | + | ||
| 50 | + | let K_share = "%s%s__shareAssetBalance__YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7" | |
| 51 | + | ||
| 52 | + | let K_staked = "%s%s__stakedBalance__WAVES" | |
| 53 | + | ||
| 54 | + | let K_factoryContract = "%s__factoryContract" | |
| 55 | + | ||
| 56 | + | let K_wxShutDown = "%s__shutdown" | |
| 57 | + | ||
| 58 | + | let K_a_as_id = "A_asset_id" | |
| 59 | + | ||
| 60 | + | let K_b_as_id = "B_asset_id" | |
| 61 | + | ||
| 62 | + | let K_a_as_bal = "A_asset_balance" | |
| 63 | + | ||
| 64 | + | let K_b_as_bal = "B_asset_balance" | |
| 65 | + | ||
| 66 | + | let K_fee = "commission" | |
| 67 | + | ||
| 68 | + | let K_swopfi_active = "active" | |
| 69 | + | ||
| 70 | + | let K_swopfi_global_active = "active_all_contracts" | |
| 71 | + | ||
| 72 | + | let K_asset_ids = "static_tokenIds" | |
| 73 | + | ||
| 74 | + | let K_fee_puz = "static_fee" | |
| 75 | + | ||
| 76 | + | let K_feeToken = "static_feeToken" | |
| 77 | + | ||
| 78 | + | let K_global_poolToken_id = "static_poolToken_idStr" | |
| 79 | + | ||
| 80 | + | let K_global_poolToken_id_binary = "global_poolToken_id" | |
| 81 | + | ||
| 82 | + | let K_global_poolToken_amount = "global_poolToken_amount" | |
| 83 | + | ||
| 84 | + | let K_static_KMult = "static_KMult" | |
| 85 | + | ||
| 86 | + | let K_pz_ranged_pools = "global_pools" | |
| 87 | + | ||
| 88 | + | let K_tmp_reblanceAssetIds = "tmp_rebalanceAssetIds" | |
| 89 | + | ||
| 90 | + | let K_rebalance_inProgress = "rebalance_inProgress" | |
| 91 | + | ||
| 92 | + | let K_rebalance_stepsDone = "rebalance_stepsDone" | |
| 93 | + | ||
| 94 | + | let K_rebalance_stepsAmount = "rebalance_stepsAmount" | |
| 95 | + | ||
| 96 | + | let K_rebalance_assetDeltas = "rebalance_assetDeltas" | |
| 97 | + | ||
| 98 | + | let K_rebalance_attachedPayment = "rebalance_attachedPayment_" | |
| 99 | + | ||
| 100 | + | let k_fee = "k_fee" | |
| 101 | + | ||
| 102 | + | let k_rebate = "k_rebate" | |
| 103 | + | ||
| 104 | + | let k_feeToStakersPercent = "k_feeToStakersPercent" | |
| 105 | + | ||
| 106 | + | let k_excessBalance = "k_excessBalance" | |
| 107 | + | ||
| 108 | + | let k_freeBalance = "k_freeBalance" | |
| 109 | + | ||
| 110 | + | let k_maxSpotUtilization = "k_maxSpotUtilization" | |
| 111 | + | ||
| 112 | + | let k_totalSupply = "k_totalSupply" | |
| 113 | + | ||
| 114 | + | let k_rate = "k_rate" | |
| 115 | + | ||
| 116 | + | let k_bsAstR = "k_bsAstR" | |
| 117 | + | ||
| 118 | + | let k_bsAstW = "k_bsAstW" | |
| 119 | + | ||
| 120 | + | let k_qtAstR = "k_qtAstR" | |
| 121 | + | ||
| 122 | + | let k_qtAstW = "k_qtAstW" | |
| 123 | + | ||
| 124 | + | let k_maxPriceImpact = "k_maxPriceImpact" | |
| 125 | + | ||
| 126 | + | let k_maxPriceSpread = "k_maxPriceSpread" | |
| 127 | + | ||
| 128 | + | let k_totalPositionSize = "k_totalPositionSize" | |
| 129 | + | ||
| 130 | + | let k_baseOracle = "k_baseOracle" | |
| 131 | + | ||
| 132 | + | let k_maxOracleDelay = "k_maxOracleDelay" | |
| 133 | + | ||
| 134 | + | let k_storage = "STORAGE" | |
| 135 | + | ||
| 136 | + | let k_assets = "ASSETS" | |
| 137 | + | ||
| 138 | + | let k_status = "STATUS" | |
| 139 | + | ||
| 140 | + | let k_paused = "PAUSED" | |
| 141 | + | ||
| 142 | + | let k_asset_balances = "ASSET_BALANCES" | |
| 143 | + | ||
| 144 | + | let k_asset_weights = "ASSET_WEIGHTS" | |
| 145 | + | ||
| 146 | + | let k_lp_fee = "LP_FEE" | |
| 147 | + | ||
| 148 | + | let k_protocol_fee = "PROTOCOL_FEE" | |
| 149 | + | ||
| 150 | + | let k_precision = "PRECISION" | |
| 151 | + | ||
| 152 | + | let k_sigma_fee_per_lp = "SIGMA_FEE_PER_LP" | |
| 153 | + | ||
| 154 | + | let k_user_sigma_fee_per_lp = "USER_SIGMA_FEE_PER_LP" | |
| 155 | + | ||
| 156 | + | let k_user_lp = "USER_LP" | |
| 157 | + | ||
| 158 | + | let k_total_lp = "TOTAL_LP" | |
| 159 | + | ||
| 160 | + | let k_user_profits = "USER_PROFITS" | |
| 161 | + | ||
| 162 | + | let k_reward_balances = "REWARD_BALANCES" | |
| 163 | + | ||
| 164 | + | func get_domain (poolAddress) = match poolAddress { | |
| 165 | + | case _ => | |
| 166 | + | if (("3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH" == $match0)) | |
| 167 | + | then "1" | |
| 168 | + | else "0" | |
| 169 | + | } | |
| 170 | + | ||
| 171 | + | ||
| 172 | + | func k_plToken (asset_id,domain) = ((("setup_pl_" + asset_id) + "_") + domain) | |
| 173 | + | ||
| 174 | + | ||
| 175 | + | func k_total_supplied (asset_id) = ("total_supplied_" + asset_id) | |
| 176 | + | ||
| 177 | + | ||
| 178 | + | func k_sRate (asset_id) = (asset_id + "_sRate") | |
| 179 | + | ||
| 180 | + | ||
| 181 | + | func k_total_borrowed (asset_id) = ("total_borrowed_" + asset_id) | |
| 182 | + | ||
| 183 | + | ||
| 184 | + | func k_bRate (asset_id) = (asset_id + "_bRate") | |
| 185 | + | ||
| 186 | + | ||
| 187 | + | func k_maxSupply (asset_id) = ("setup_maxSupply_" + asset_id) | |
| 188 | + | ||
| 189 | + | ||
| 190 | + | let k_lastRateHeight = "lastRateHeight" | |
| 191 | + | ||
| 192 | + | func getPuzBalanceKey (assetId) = (("global_" + assetId) + "_balance") | |
| 193 | + | ||
| 194 | + | ||
| 195 | + | func getPuzFactBalanceKey (assetId) = (("global_" + assetId) + "_factBalance") | |
| 196 | + | ||
| 197 | + | ||
| 198 | + | func getPuzWeightKey (assetId) = (("static_" + assetId) + "_weight") | |
| 199 | + | ||
| 200 | + | ||
| 201 | + | func getBPAK (address) = (address + "_staticAssetsIds") | |
| 202 | + | ||
| 203 | + | ||
| 204 | + | func tryGetString (key,address) = match getString(address, key) { | |
| 205 | + | case b: String => | |
| 206 | + | b | |
| 207 | + | case _ => | |
| 208 | + | "" | |
| 209 | + | } | |
| 210 | + | ||
| 211 | + | ||
| 212 | + | func tryGetStringWithDef (key,address,def) = match getString(address, key) { | |
| 213 | + | case b: String => | |
| 214 | + | b | |
| 215 | + | case _ => | |
| 216 | + | def | |
| 217 | + | } | |
| 218 | + | ||
| 219 | + | ||
| 220 | + | func tryGetBool (key,address) = match getBoolean(address, key) { | |
| 221 | + | case b: Boolean => | |
| 222 | + | b | |
| 223 | + | case _ => | |
| 224 | + | false | |
| 225 | + | } | |
| 226 | + | ||
| 227 | + | ||
| 228 | + | func tryGetBoolWithDef (key,address,def) = match getBoolean(address, key) { | |
| 229 | + | case b: Boolean => | |
| 230 | + | b | |
| 231 | + | case _ => | |
| 232 | + | def | |
| 233 | + | } | |
| 234 | + | ||
| 235 | + | ||
| 236 | + | func tryGetInteger (key,address) = match getInteger(address, key) { | |
| 237 | + | case b: Int => | |
| 238 | + | b | |
| 239 | + | case _ => | |
| 240 | + | 0 | |
| 241 | + | } | |
| 242 | + | ||
| 243 | + | ||
| 244 | + | func tryGetIntegerAsString (key,address) = match getInteger(address, key) { | |
| 245 | + | case b: Int => | |
| 246 | + | toString(b) | |
| 247 | + | case _ => | |
| 248 | + | "None" | |
| 249 | + | } | |
| 250 | + | ||
| 251 | + | ||
| 252 | + | func tryGetIntegerWithDef (key,address,def) = match getInteger(address, key) { | |
| 253 | + | case b: Int => | |
| 254 | + | b | |
| 255 | + | case _ => | |
| 256 | + | def | |
| 257 | + | } | |
| 258 | + | ||
| 259 | + | ||
| 260 | + | func getAssetString (assetId) = match assetId { | |
| 261 | + | case b: ByteVector => | |
| 262 | + | toBase58String(b) | |
| 263 | + | case _ => | |
| 264 | + | "WAVES" | |
| 265 | + | } | |
| 266 | + | ||
| 267 | + | ||
| 268 | + | func getWxDefaultFees () = { | |
| 269 | + | let poolFee = tryGetIntegerWithDef("%s__poolFee", wx_swap, 200000) | |
| 270 | + | let protocolFee = tryGetIntegerWithDef("%s__protocolFee", wx_swap, 200000) | |
| 271 | + | $Tuple2(toString(poolFee), toString(protocolFee)) | |
| 272 | + | } | |
| 273 | + | ||
| 274 | + | ||
| 275 | + | func getWxPoolFees (address) = { | |
| 276 | + | let feesKey = ("%s%s__swapFee__" + address) | |
| 277 | + | let fees = tryGetString(feesKey, wx_factory) | |
| 278 | + | if ((fees == "")) | |
| 279 | + | then getWxDefaultFees() | |
| 280 | + | else { | |
| 281 | + | let splittedFees = split(fees, "__") | |
| 282 | + | $Tuple2(splittedFees[1], splittedFees[2]) | |
| 283 | + | } | |
| 284 | + | } | |
| 285 | + | ||
| 286 | + | ||
| 287 | + | func getAssetBalance (address,assetId) = { | |
| 288 | + | let a = assetBalance(address, assetId) | |
| 289 | + | a | |
| 290 | + | } | |
| 291 | + | ||
| 292 | + | ||
| 293 | + | func getWavesBalance (address) = { | |
| 294 | + | let w = wavesBalance(address).available | |
| 295 | + | w | |
| 296 | + | } | |
| 297 | + | ||
| 298 | + | ||
| 299 | + | func getBalance (result,assetId) = { | |
| 300 | + | let address = take(result, 35) | |
| 301 | + | let addr = Address(fromBase58String(address)) | |
| 302 | + | let balance = if ((assetId == "WAVES")) | |
| 303 | + | then getWavesBalance(addr) | |
| 304 | + | else { | |
| 305 | + | let aId = fromBase58String(assetId) | |
| 306 | + | getAssetBalance(addr, aId) | |
| 307 | + | } | |
| 308 | + | let len = size(result) | |
| 309 | + | (((((address + drop(result, 35)) + assetId) + ":") + toString(balance)) + ",") | |
| 310 | + | } | |
| 311 | + | ||
| 312 | + | ||
| 313 | + | func getAddressBalance (addr,assetId) = { | |
| 314 | + | let balance = if ((assetId == "WAVES")) | |
| 315 | + | then getWavesBalance(addr) | |
| 316 | + | else { | |
| 317 | + | let aId = fromBase58String(assetId) | |
| 318 | + | getAssetBalance(addr, aId) | |
| 319 | + | } | |
| 320 | + | balance | |
| 321 | + | } | |
| 322 | + | ||
| 323 | + | ||
| 324 | + | func getAssetDecimals (assetIdStr) = { | |
| 325 | + | let decimals = if ((assetIdStr == "WAVES")) | |
| 326 | + | then 8 | |
| 327 | + | else value(assetInfo(fromBase58String(assetIdStr))).decimals | |
| 328 | + | decimals | |
| 329 | + | } | |
| 330 | + | ||
| 331 | + | ||
| 332 | + | func getWxData (address) = { | |
| 333 | + | let addr = Address(fromBase58String(address)) | |
| 334 | + | let _wx_factory_str = tryGetStringWithDef("%s__factoryContract", addr, wx_factory_str) | |
| 335 | + | let _wx_factory = Address(fromBase58String(_wx_factory_str)) | |
| 336 | + | let amountId = tryGetString(K_am_as_id, addr) | |
| 337 | + | let priceId = tryGetString(K_pr_as_id, addr) | |
| 338 | + | let indexAmount = valueOrErrorMessage(getInteger(_wx_factory, ("%s%s%s__mappings__baseAsset2internalId__" + amountId)), "wx map asset fail") | |
| 339 | + | let indexPrice = valueOrErrorMessage(getInteger(_wx_factory, ("%s%s%s__mappings__baseAsset2internalId__" + priceId)), "wx map asset fail") | |
| 340 | + | let poolConfig = split(valueOrErrorMessage(getString(_wx_factory, (((("%d%d%s__" + toString(indexAmount)) + "__") + toString(indexPrice)) + "__config")), "wx pool config fail"), "__") | |
| 341 | + | let poolStatusStr = poolConfig[2] | |
| 342 | + | let amp = tryGetString(K_amp, addr) | |
| 343 | + | let share = tryGetInteger(K_share, addr) | |
| 344 | + | let stake = tryGetInteger(K_staked, addr) | |
| 345 | + | let $t091689219 = getWxPoolFees(address) | |
| 346 | + | let poolFee = $t091689219._1 | |
| 347 | + | let protocolFee = $t091689219._2 | |
| 348 | + | let isGlobalShutdown = tryGetBool(K_wxShutDown, _wx_factory) | |
| 349 | + | let isGlobalShutdownStr = if (isGlobalShutdown) | |
| 350 | + | then "1" | |
| 351 | + | else "0" | |
| 352 | + | let isPoolSwapDisabled = tryGetBool((((("%d%d%s__" + toString(indexAmount)) + "__") + toString(indexPrice)) + "__swapDisabled"), _wx_factory) | |
| 353 | + | let isPoolSwapDisabledStr = if (isPoolSwapDisabled) | |
| 354 | + | then "1" | |
| 355 | + | else "0" | |
| 356 | + | $Tuple2(((amountId + ",") + priceId), ((((((((((((((amp + ",") + toString(share)) + ",") + toString(stake)) + ",") + poolFee) + ",") + protocolFee) + ",") + isGlobalShutdownStr) + ",") + poolStatusStr) + ",") + isPoolSwapDisabledStr)) | |
| 357 | + | } | |
| 358 | + | ||
| 359 | + | ||
| 360 | + | func getSwData (address) = { | |
| 361 | + | let addr = Address(fromBase58String(address)) | |
| 362 | + | let A_id = tryGetString(K_a_as_id, addr) | |
| 363 | + | let B_id = tryGetString(K_b_as_id, addr) | |
| 364 | + | let A_balance = tryGetInteger(K_a_as_bal, addr) | |
| 365 | + | let B_balance = tryGetInteger(K_b_as_bal, addr) | |
| 366 | + | let fee = tryGetIntegerWithDef(K_fee, addr, 6000) | |
| 367 | + | let deprecated = tryGetBool(("deprecated_" + address), swopfi_oracle) | |
| 368 | + | let active = tryGetBoolWithDef(K_swopfi_active, addr, true) | |
| 369 | + | let global_active = tryGetBoolWithDef(K_swopfi_global_active, swopfi_oracle, true) | |
| 370 | + | let activeStr = if (active) | |
| 371 | + | then "1" | |
| 372 | + | else "0" | |
| 373 | + | let globalActiveStr = if (global_active) | |
| 374 | + | then "1" | |
| 375 | + | else "0" | |
| 376 | + | ((((((((((((((A_id + ":") + toString(A_balance)) + ",") + B_id) + ":") + toString(B_balance)) + ",") + toString(fee)) + ",") + toString(deprecated)) + ",") + activeStr) + ",") + globalActiveStr) | |
| 377 | + | } | |
| 378 | + | ||
| 379 | + | ||
| 380 | + | func getPzRebalanceData (address) = { | |
| 381 | + | let addr = Address(fromBase58String(address)) | |
| 382 | + | let tmpAssetsStr = valueOrElse(getString(addr, K_tmp_reblanceAssetIds), "") | |
| 383 | + | let inProgress = valueOrElse(getBoolean(addr, K_rebalance_inProgress), false) | |
| 384 | + | let stepsDone = valueOrElse(getInteger(addr, K_rebalance_stepsDone), 0) | |
| 385 | + | let stepsAmount = valueOrElse(getInteger(addr, K_rebalance_stepsAmount), 0) | |
| 386 | + | let assetDeltas = valueOrElse(getString(addr, K_rebalance_assetDeltas), "") | |
| 387 | + | let tmpAssets = split(tmpAssetsStr, ",") | |
| 388 | + | func collectPayments (accum,assetId) = { | |
| 389 | + | let key = (K_rebalance_attachedPayment + assetId) | |
| 390 | + | let val = tryGetInteger(key, addr) | |
| 391 | + | if ((val != 0)) | |
| 392 | + | then (accum ++ [((key + "*") + toString(val))]) | |
| 393 | + | else accum | |
| 394 | + | } | |
| 395 | + | ||
| 396 | + | let rebalancePayments = { | |
| 397 | + | let $l = tmpAssets | |
| 398 | + | let $s = size($l) | |
| 399 | + | let $acc0 = nil | |
| 400 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
| 401 | + | then $a | |
| 402 | + | else collectPayments($a, $l[$i]) | |
| 403 | + | ||
| 404 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
| 405 | + | then $a | |
| 406 | + | else throw("List size exceeds 10") | |
| 407 | + | ||
| 408 | + | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
| 409 | + | } | |
| 410 | + | let rebalancePaymentsStr = makeString(rebalancePayments, ",") | |
| 411 | + | ((((((((((tmpAssetsStr + ";") + toString(inProgress)) + ";") + toString(stepsDone)) + ";") + toString(stepsAmount)) + ";") + assetDeltas) + ";") + rebalancePaymentsStr) | |
| 412 | + | } | |
| 413 | + | ||
| 414 | + | ||
| 415 | + | func collectPuzAssetsData (result,assetId) = { | |
| 416 | + | let len = size(result) | |
| 417 | + | let address = result[(len - 1)] | |
| 418 | + | let addr = Address(fromBase58String(address)) | |
| 419 | + | let balanceKey = getPuzBalanceKey(assetId) | |
| 420 | + | let factBalanceKey = getPuzFactBalanceKey(assetId) | |
| 421 | + | let weightKey = getPuzWeightKey(assetId) | |
| 422 | + | let weight = tryGetInteger(weightKey, addr) | |
| 423 | + | let realBalance = getAddressBalance(addr, assetId) | |
| 424 | + | let maxSelloff = tryGetIntegerAsString((("static_" + assetId) + "_maxSelloff"), addr) | |
| 425 | + | let assetData = tryGetString(("globalParams_" + assetId), addr) | |
| 426 | + | let $t01230112935 = if ((assetData == "")) | |
| 427 | + | then { | |
| 428 | + | let _balance = toString(tryGetInteger(balanceKey, addr)) | |
| 429 | + | let _factBalance = toString(tryGetInteger(factBalanceKey, addr)) | |
| 430 | + | let _currSelloff = tryGetIntegerAsString((("global_" + assetId) + "_selloff"), addr) | |
| 431 | + | $Tuple3(_balance, _factBalance, _currSelloff) | |
| 432 | + | } | |
| 433 | + | else { | |
| 434 | + | let _assetData = split(assetData, "__") | |
| 435 | + | let _balance = _assetData[0] | |
| 436 | + | let _factBalance = _assetData[1] | |
| 437 | + | let _currSelloff = _assetData[5] | |
| 438 | + | $Tuple3(_balance, _factBalance, _currSelloff) | |
| 439 | + | } | |
| 440 | + | let balance = $t01230112935._1 | |
| 441 | + | let factBalance = $t01230112935._2 | |
| 442 | + | let currSelloff = $t01230112935._3 | |
| 443 | + | let res = ((((((((((((assetId + ",") + balance) + ",") + toString(weight)) + ",") + toString(realBalance)) + ",") + factBalance) + ",") + currSelloff) + ",") + maxSelloff) | |
| 444 | + | res :: result | |
| 445 | + | } | |
| 446 | + | ||
| 447 | + | ||
| 448 | + | func isRangedPool (address) = { | |
| 449 | + | func check (acc,next) = { | |
| 450 | + | let key = if ((2 > next)) | |
| 451 | + | then "global_pools" | |
| 452 | + | else ("global_pools_" + toString(next)) | |
| 453 | + | let rangedPools = tryGetString(key, pzRangeMaster) | |
| 454 | + | let isRanged = (indexOf(rangedPools, address) != unit) | |
| 455 | + | if (isRanged) | |
| 456 | + | then true | |
| 457 | + | else acc | |
| 458 | + | } | |
| 459 | + | ||
| 460 | + | let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14] | |
| 461 | + | let fff = { | |
| 462 | + | let $l = arr | |
| 463 | + | let $s = size($l) | |
| 464 | + | let $acc0 = false | |
| 465 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
| 466 | + | then $a | |
| 467 | + | else check($a, $l[$i]) | |
| 468 | + | ||
| 469 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
| 470 | + | then $a | |
| 471 | + | else throw("List size exceeds 14") | |
| 472 | + | ||
| 473 | + | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14) | |
| 474 | + | } | |
| 475 | + | fff | |
| 476 | + | } | |
| 477 | + | ||
| 478 | + | ||
| 479 | + | func getPzData (address) = { | |
| 480 | + | let addr = Address(fromBase58String(address)) | |
| 481 | + | let fee1 = tryGetInteger(K_fee_puz, addr) | |
| 482 | + | let feeToken = tryGetString(K_feeToken, addr) | |
| 483 | + | let assetsStr1 = tryGetString(K_asset_ids, addr) | |
| 484 | + | let $t01377713926 = if ((assetsStr1 == "")) | |
| 485 | + | then $Tuple2(tryGetString(getBPAK(address), this), 200) | |
| 486 | + | else $Tuple2(assetsStr1, fee1) | |
| 487 | + | let assetsStr = $t01377713926._1 | |
| 488 | + | let fee = $t01377713926._2 | |
| 489 | + | let assets = split(assetsStr, ",") | |
| 490 | + | let assetsData = { | |
| 491 | + | let $l = assets | |
| 492 | + | let $s = size($l) | |
| 493 | + | let $acc0 = [address] | |
| 494 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
| 495 | + | then $a | |
| 496 | + | else collectPuzAssetsData($a, $l[$i]) | |
| 497 | + | ||
| 498 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
| 499 | + | then $a | |
| 500 | + | else throw("List size exceeds 10") | |
| 501 | + | ||
| 502 | + | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
| 503 | + | } | |
| 504 | + | let len = size(assetsData) | |
| 505 | + | let assetsArr = removeByIndex(assetsData, (len - 1)) | |
| 506 | + | let assetsDataStr = makeString_2C(assetsArr, ";") | |
| 507 | + | let poolTokenIdStr = tryGetString(K_global_poolToken_id, addr) | |
| 508 | + | let poolTokenId = if ((poolTokenIdStr != "")) | |
| 509 | + | then poolTokenIdStr | |
| 510 | + | else { | |
| 511 | + | let poolTokenIdBinary = valueOrElse(getBinary(addr, K_global_poolToken_id_binary), fromBase58String("bubi")) | |
| 512 | + | getAssetString(poolTokenIdBinary) | |
| 513 | + | } | |
| 514 | + | let poolTokenAmount = tryGetInteger(K_global_poolToken_amount, addr) | |
| 515 | + | let kMult = tryGetIntegerWithDef(K_static_KMult, addr, 1) | |
| 516 | + | let pausedGlobal = tryGetBool("is_shutdown", pzShutdownAddress) | |
| 517 | + | let pausedGlobalStr = if (pausedGlobal) | |
| 518 | + | then "1" | |
| 519 | + | else "0" | |
| 520 | + | let paused = false | |
| 521 | + | let pausedStr = if (paused) | |
| 522 | + | then "1" | |
| 523 | + | else "0" | |
| 524 | + | let isRanged = isRangedPool(address) | |
| 525 | + | let poolMode = if (isRanged) | |
| 526 | + | then "pz_ranged" | |
| 527 | + | else "regular" | |
| 528 | + | $Tuple9(fee, feeToken, poolTokenId, poolTokenAmount, kMult, assetsDataStr, pausedGlobalStr, pausedStr, poolMode) | |
| 529 | + | } | |
| 530 | + | ||
| 531 | + | ||
| 532 | + | func getTsnData (address,asset_id) = { | |
| 533 | + | let addr = Address(fromBase58String(address)) | |
| 534 | + | let bsAstR = tryGetInteger(k_bsAstR, addr) | |
| 535 | + | let bsAstW = tryGetInteger(k_bsAstW, addr) | |
| 536 | + | let qtAstR = tryGetInteger(k_qtAstR, addr) | |
| 537 | + | let qtAstW = tryGetInteger(k_qtAstW, addr) | |
| 538 | + | let maxPriceImpact = tryGetInteger(k_maxPriceImpact, addr) | |
| 539 | + | let maxPriceSpread = tryGetInteger(k_maxPriceSpread, addr) | |
| 540 | + | let totalPositionSize = tryGetInteger(k_totalPositionSize, addr) | |
| 541 | + | let maxOracleDelay = tryGetInteger(k_maxOracleDelay, addr) | |
| 542 | + | let oracleString = tryGetString(k_baseOracle, addr) | |
| 543 | + | let arr = split(oracleString, ",") | |
| 544 | + | let $t01584515911 = $Tuple3(arr[0], arr[1], arr[2]) | |
| 545 | + | let oracleAddress = $t01584515911._1 | |
| 546 | + | let priceKey = $t01584515911._2 | |
| 547 | + | let blockKey = $t01584515911._3 | |
| 548 | + | let oracleAddr = Address(fromBase58String(oracleAddress)) | |
| 549 | + | let oraclePrice = tryGetInteger(priceKey, oracleAddr) | |
| 550 | + | let curHeight = height | |
| 551 | + | let lastHeight = if ((blockKey != "")) | |
| 552 | + | then tryGetInteger(blockKey, oracleAddr) | |
| 553 | + | else curHeight | |
| 554 | + | let vault = tryGetString(("k_asset_vault_" + asset_id), tsn_swapper_addr) | |
| 555 | + | let vault_addr = Address(fromBase58String(vault)) | |
| 556 | + | let excessBalance = tryGetInteger(k_excessBalance, vault_addr) | |
| 557 | + | let freeBalance = tryGetInteger(k_freeBalance, vault_addr) | |
| 558 | + | let maxSpotUtilization = tryGetInteger(k_maxSpotUtilization, vault_addr) | |
| 559 | + | let totalSupply = tryGetInteger(k_totalSupply, vault_addr) | |
| 560 | + | let rate = tryGetInteger(k_rate, vault_addr) | |
| 561 | + | $Tuple16(bsAstR, bsAstW, qtAstR, qtAstW, totalPositionSize, maxPriceImpact, maxPriceSpread, oraclePrice, excessBalance, freeBalance, maxSpotUtilization, totalSupply, rate, curHeight, lastHeight, maxOracleDelay) | |
| 562 | + | } | |
| 563 | + | ||
| 564 | + | ||
| 565 | + | func getPrice (assetId) = { | |
| 566 | + | let price = tryGetInteger((assetId + "_twap5B"), Address(fromBase58String(orcl))) | |
| 567 | + | price | |
| 568 | + | } | |
| 569 | + | ||
| 570 | + | ||
| 571 | + | func getPLData (pool_address,asset_id) = { | |
| 572 | + | let domain = get_domain(pool_address) | |
| 573 | + | let poolAdr = Address(fromBase58String(pool_address)) | |
| 574 | + | let plTokenId = tryGetString(k_plToken(asset_id, domain), Address(fromBase58String(pl_proxy))) | |
| 575 | + | let sRate = tryGetInteger(k_sRate(asset_id), poolAdr) | |
| 576 | + | let bRate = tryGetInteger(k_bRate(asset_id), poolAdr) | |
| 577 | + | let totalSupplied = tryGetInteger(k_total_supplied(asset_id), poolAdr) | |
| 578 | + | let totalBorrowed = tryGetInteger(k_total_borrowed(asset_id), poolAdr) | |
| 579 | + | let maxSupply = tryGetString(k_maxSupply(asset_id), poolAdr) | |
| 580 | + | let lastHeight = tryGetInteger(k_lastRateHeight, poolAdr) | |
| 581 | + | let curHeight = height | |
| 582 | + | let price = getPrice(asset_id) | |
| 583 | + | let decimals = getAssetDecimals(asset_id) | |
| 584 | + | let active = tryGetBool("setup_active", poolAdr) | |
| 585 | + | let pausedStr = if (active) | |
| 586 | + | then "0" | |
| 587 | + | else "1" | |
| 588 | + | $Tuple12(asset_id, plTokenId, sRate, bRate, totalSupplied, totalBorrowed, maxSupply, lastHeight, curHeight, price, decimals, pausedStr) | |
| 589 | + | } | |
| 590 | + | ||
| 591 | + | ||
| 592 | + | func test_loop (result,ele) = ele :: result | |
| 593 | + | ||
| 594 | + | ||
| 595 | + | func getBalancesStr (assetsStr,address) = { | |
| 596 | + | let assets = split_4C(assetsStr, ",") | |
| 597 | + | let res = { | |
| 598 | + | let $l = assets | |
| 599 | + | let $s = size($l) | |
| 600 | + | let $acc0 = address | |
| 601 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
| 602 | + | then $a | |
| 603 | + | else getBalance($a, $l[$i]) | |
| 604 | + | ||
| 605 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
| 606 | + | then $a | |
| 607 | + | else throw("List size exceeds 2") | |
| 608 | + | ||
| 609 | + | $f0_2($f0_1($f0_1($acc0, 0), 1), 2) | |
| 610 | + | } | |
| 611 | + | let balances = drop(res, 35) | |
| 612 | + | let bals = dropRight(balances, 1) | |
| 613 | + | bals | |
| 614 | + | } | |
| 615 | + | ||
| 616 | + | ||
| 617 | + | func processWX (result,address) = { | |
| 618 | + | let $t01835018393 = getWxData(address) | |
| 619 | + | let assetsStr = $t01835018393._1 | |
| 620 | + | let datas = $t01835018393._2 | |
| 621 | + | let assetsString = getBalancesStr(assetsStr, address) | |
| 622 | + | let resItem = ((((address + "/") + assetsString) + "/") + datas) | |
| 623 | + | resItem :: result | |
| 624 | + | } | |
| 625 | + | ||
| 626 | + | ||
| 627 | + | func processSW (result,address) = { | |
| 628 | + | let assetsString = getSwData(address) | |
| 629 | + | let resItem = ((address + "/") + assetsString) | |
| 630 | + | resItem :: result | |
| 631 | + | } | |
| 632 | + | ||
| 633 | + | ||
| 634 | + | func processPZ (result,address) = { | |
| 635 | + | let $t01878018903 = getPzData(address) | |
| 636 | + | let fee = $t01878018903._1 | |
| 637 | + | let feeToken = $t01878018903._2 | |
| 638 | + | let poolTokenId = $t01878018903._3 | |
| 639 | + | let poolTokenAmount = $t01878018903._4 | |
| 640 | + | let kMult = $t01878018903._5 | |
| 641 | + | let assetsString = $t01878018903._6 | |
| 642 | + | let pausedGlobal = $t01878018903._7 | |
| 643 | + | let paused = $t01878018903._8 | |
| 644 | + | let poolMode = $t01878018903._9 | |
| 645 | + | let rebaData = getPzRebalanceData(address) | |
| 646 | + | let resItem = ((((((((((((((((((((address + "/") + toString(fee)) + "/") + feeToken) + "/") + assetsString) + "/") + rebaData) + "/") + poolTokenId) + "/") + toString(poolTokenAmount)) + "/") + toString(kMult)) + "/") + pausedGlobal) + "/") + paused) + "/") + poolMode) | |
| 647 | + | resItem :: result | |
| 648 | + | } | |
| 649 | + | ||
| 650 | + | ||
| 651 | + | func processTSN (result,label) = { | |
| 652 | + | let arr = split(label, "_") | |
| 653 | + | let $t01931019352 = $Tuple2(arr[0], arr[1]) | |
| 654 | + | let address = $t01931019352._1 | |
| 655 | + | let asset_id = $t01931019352._2 | |
| 656 | + | let $t01935719595 = getTsnData(address, asset_id) | |
| 657 | + | let bsAstR = $t01935719595._1 | |
| 658 | + | let bsAstW = $t01935719595._2 | |
| 659 | + | let qtAstR = $t01935719595._3 | |
| 660 | + | let qtAstW = $t01935719595._4 | |
| 661 | + | let totalPositionSize = $t01935719595._5 | |
| 662 | + | let maxPriceImpact = $t01935719595._6 | |
| 663 | + | let maxPriceSpread = $t01935719595._7 | |
| 664 | + | let oraclePrice = $t01935719595._8 | |
| 665 | + | let excessBalance = $t01935719595._9 | |
| 666 | + | let freeBalance = $t01935719595._10 | |
| 667 | + | let maxSpotUtilization = $t01935719595._11 | |
| 668 | + | let totalSupply = $t01935719595._12 | |
| 669 | + | let rate = $t01935719595._13 | |
| 670 | + | let curHeight = $t01935719595._14 | |
| 671 | + | let lastHeight = $t01935719595._15 | |
| 672 | + | let maxOracleDelay = $t01935719595._16 | |
| 673 | + | let asset_decimals = if ((asset_id == "WAVES")) | |
| 674 | + | then 8 | |
| 675 | + | else valueOrErrorMessage(assetInfo(fromBase58String(asset_id)), ("Ivalid asset " + asset_id)).decimals | |
| 676 | + | let resItem = ((((((((((((((((((((((((((((((((((((address + ",") + asset_id) + ",") + toString(asset_decimals)) + ",") + toString(bsAstR)) + ",") + toString(bsAstW)) + ",") + toString(qtAstR)) + ",") + toString(qtAstW)) + ",") + toString(totalPositionSize)) + ",") + toString(maxPriceImpact)) + ",") + toString(maxPriceSpread)) + ",") + toString(oraclePrice)) + ",") + toString(excessBalance)) + ",") + toString(freeBalance)) + ",") + toString(maxSpotUtilization)) + ",") + toString(totalSupply)) + ",") + toString(rate)) + ",") + toString(curHeight)) + ",") + toString(lastHeight)) + ",") + toString(maxOracleDelay)) | |
| 677 | + | resItem :: result | |
| 678 | + | } | |
| 679 | + | ||
| 680 | + | ||
| 681 | + | func processPL (result,label) = { | |
| 682 | + | let arr = split(label, "-") | |
| 683 | + | let $t02047320520 = $Tuple2(arr[0], arr[1]) | |
| 684 | + | let pool_address = $t02047320520._1 | |
| 685 | + | let asset_id = $t02047320520._2 | |
| 686 | + | let $t02052520693 = getPLData(pool_address, asset_id) | |
| 687 | + | let asset_idd = $t02052520693._1 | |
| 688 | + | let plTokenId = $t02052520693._2 | |
| 689 | + | let sRate = $t02052520693._3 | |
| 690 | + | let bRate = $t02052520693._4 | |
| 691 | + | let totalSupplied = $t02052520693._5 | |
| 692 | + | let totalBorrowed = $t02052520693._6 | |
| 693 | + | let maxSupply = $t02052520693._7 | |
| 694 | + | let lastHeight = $t02052520693._8 | |
| 695 | + | let curHeight = $t02052520693._9 | |
| 696 | + | let price = $t02052520693._10 | |
| 697 | + | let decimals = $t02052520693._11 | |
| 698 | + | let pausedStr = $t02052520693._12 | |
| 699 | + | let resItem = ((((((((((((((((((((((((label + ",") + asset_idd) + ",") + plTokenId) + ",") + toString(sRate)) + ",") + toString(bRate)) + ",") + toString(totalSupplied)) + ",") + toString(totalBorrowed)) + ",") + maxSupply) + ",") + toString(lastHeight)) + ",") + toString(curHeight)) + ",") + toString(price)) + ",") + toString(decimals)) + ",") + pausedStr) | |
| 700 | + | resItem :: result | |
| 701 | + | } | |
| 702 | + | ||
| 703 | + | ||
| 704 | + | func getWX (params) = { | |
| 705 | + | let pools = split_51C(params, ",") | |
| 706 | + | let resArr = { | |
| 707 | + | let $l = pools | |
| 708 | + | let $s = size($l) | |
| 709 | + | let $acc0 = nil | |
| 710 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
| 711 | + | then $a | |
| 712 | + | else processWX($a, $l[$i]) | |
| 713 | + | ||
| 714 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
| 715 | + | then $a | |
| 716 | + | else throw("List size exceeds 120") | |
| 717 | + | ||
| 718 | + | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100), 101), 102), 103), 104), 105), 106), 107), 108), 109), 110), 111), 112), 113), 114), 115), 116), 117), 118), 119), 120) | |
| 719 | + | } | |
| 720 | + | let result = makeString_11C(resArr, "|") | |
| 721 | + | result | |
| 722 | + | } | |
| 723 | + | ||
| 724 | + | ||
| 725 | + | func getSW (params) = { | |
| 726 | + | let pools = split_4C(params, ",") | |
| 727 | + | let resArr = { | |
| 728 | + | let $l = pools | |
| 729 | + | let $s = size($l) | |
| 730 | + | let $acc0 = nil | |
| 731 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
| 732 | + | then $a | |
| 733 | + | else processSW($a, $l[$i]) | |
| 734 | + | ||
| 735 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
| 736 | + | then $a | |
| 737 | + | else throw("List size exceeds 100") | |
| 738 | + | ||
| 739 | + | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
| 740 | + | } | |
| 741 | + | let result = makeString_11C(resArr, "|") | |
| 742 | + | result | |
| 743 | + | } | |
| 744 | + | ||
| 745 | + | ||
| 746 | + | func getPZ (params) = { | |
| 747 | + | let pools = split_4C(params, ",") | |
| 748 | + | let resArr = { | |
| 749 | + | let $l = pools | |
| 750 | + | let $s = size($l) | |
| 751 | + | let $acc0 = nil | |
| 752 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
| 753 | + | then $a | |
| 754 | + | else processPZ($a, $l[$i]) | |
| 755 | + | ||
| 756 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
| 757 | + | then $a | |
| 758 | + | else throw("List size exceeds 100") | |
| 759 | + | ||
| 760 | + | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
| 761 | + | } | |
| 762 | + | let result = makeString_11C(resArr, "|") | |
| 763 | + | result | |
| 764 | + | } | |
| 765 | + | ||
| 766 | + | ||
| 767 | + | func getTSN (params) = { | |
| 768 | + | let vaults_labels = split(params, ",") | |
| 769 | + | let resArr = { | |
| 770 | + | let $l = vaults_labels | |
| 771 | + | let $s = size($l) | |
| 772 | + | let $acc0 = nil | |
| 773 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
| 774 | + | then $a | |
| 775 | + | else processTSN($a, $l[$i]) | |
| 776 | + | ||
| 777 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
| 778 | + | then $a | |
| 779 | + | else throw("List size exceeds 10") | |
| 780 | + | ||
| 781 | + | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
| 782 | + | } | |
| 783 | + | let result = makeString_2C(resArr, "|") | |
| 784 | + | let fee = tryGetInteger(k_fee, tsn_swapper_addr) | |
| 785 | + | let rebate = tryGetInteger(k_rebate, tsn_swapper_addr) | |
| 786 | + | let feeToStakersPercent = tryGetInteger(k_feeToStakersPercent, tsn_swapper_addr) | |
| 787 | + | ((((((toString(fee) + ",") + toString(rebate)) + ",") + toString(feeToStakersPercent)) + "/") + result) | |
| 788 | + | } | |
| 789 | + | ||
| 790 | + | ||
| 791 | + | func getPL (params) = { | |
| 792 | + | let pools = split(params, ",") | |
| 793 | + | let resArr = { | |
| 794 | + | let $l = pools | |
| 795 | + | let $s = size($l) | |
| 796 | + | let $acc0 = nil | |
| 797 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
| 798 | + | then $a | |
| 799 | + | else processPL($a, $l[$i]) | |
| 800 | + | ||
| 801 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
| 802 | + | then $a | |
| 803 | + | else throw("List size exceeds 10") | |
| 804 | + | ||
| 805 | + | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
| 806 | + | } | |
| 807 | + | let result = makeString_2C(resArr, "|") | |
| 808 | + | result | |
| 809 | + | } | |
| 810 | + | ||
| 811 | + | ||
| 812 | + | func loadPepeAssets (pepe_market) = { | |
| 813 | + | let assets = tryGetString(k_assets, pepe_market) | |
| 814 | + | split_4C(assets, "__") | |
| 815 | + | } | |
| 816 | + | ||
| 817 | + | ||
| 818 | + | func loadPepeAssetBalances (pepe_market) = { | |
| 819 | + | func foldFunc (acc,elem) = { | |
| 820 | + | let balance = parseIntValue(elem) | |
| 821 | + | $Tuple2((acc._1 :+ elem), (acc._2 + balance)) | |
| 822 | + | } | |
| 823 | + | ||
| 824 | + | let assetBalances = tryGetString(k_asset_balances, pepe_market) | |
| 825 | + | let $l = split_51C(assetBalances, "__") | |
| 826 | + | let $s = size($l) | |
| 827 | + | let $acc0 = $Tuple2(nil, 0) | |
| 828 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
| 829 | + | then $a | |
| 830 | + | else foldFunc($a, $l[$i]) | |
| 831 | + | ||
| 832 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
| 833 | + | then $a | |
| 834 | + | else throw("List size exceeds 10") | |
| 835 | + | ||
| 836 | + | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
| 837 | + | } | |
| 838 | + | ||
| 839 | + | ||
| 840 | + | func loadPepeAssetWeights (pepe_market) = { | |
| 841 | + | func foldFunc (acc,elem) = { | |
| 842 | + | let weight = parseIntValue(elem) | |
| 843 | + | $Tuple2((acc._1 :+ elem), (acc._2 + weight)) | |
| 844 | + | } | |
| 845 | + | ||
| 846 | + | let assetWeights = tryGetString(k_asset_weights, pepe_market) | |
| 847 | + | let $l = split_4C(assetWeights, "__") | |
| 848 | + | let $s = size($l) | |
| 849 | + | let $acc0 = $Tuple2(nil, 0) | |
| 850 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
| 851 | + | then $a | |
| 852 | + | else foldFunc($a, $l[$i]) | |
| 853 | + | ||
| 854 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
| 855 | + | then $a | |
| 856 | + | else throw("List size exceeds 10") | |
| 857 | + | ||
| 858 | + | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
| 859 | + | } | |
| 860 | + | ||
| 861 | + | ||
| 862 | + | func loadPepeDecimals (assets) = { | |
| 863 | + | func getDecs (acc,item) = { | |
| 864 | + | let decimals = getAssetDecimals(item) | |
| 865 | + | (acc :+ toString(decimals)) | |
| 866 | + | } | |
| 867 | + | ||
| 868 | + | let $l = assets | |
| 869 | + | let $s = size($l) | |
| 870 | + | let $acc0 = nil | |
| 871 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
| 872 | + | then $a | |
| 873 | + | else getDecs($a, $l[$i]) | |
| 874 | + | ||
| 875 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
| 876 | + | then $a | |
| 877 | + | else throw("List size exceeds 11") | |
| 878 | + | ||
| 879 | + | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11) | |
| 880 | + | } | |
| 881 | + | ||
| 882 | + | ||
| 883 | + | func processPepe (result,pepe_market_str) = { | |
| 884 | + | let pepe_market = Address(fromBase58String(pepe_market_str)) | |
| 885 | + | let storage = tryGetString(k_storage, pepe_market) | |
| 886 | + | let sarr = split_4C(storage, "__") | |
| 887 | + | let $t02505325256 = $Tuple8(sarr[0], (sarr[1] == "1"), sarr[2], sarr[3], sarr[4], sarr[5], sarr[6], sarr[7]) | |
| 888 | + | let lpAssetId = $t02505325256._1 | |
| 889 | + | let unlocked = $t02505325256._2 | |
| 890 | + | let lpTotalSupply = $t02505325256._3 | |
| 891 | + | let lpFeeRate = $t02505325256._4 | |
| 892 | + | let protocolFeeRate = $t02505325256._5 | |
| 893 | + | let maxAllocAmplifier = $t02505325256._6 | |
| 894 | + | let weightAmplifier = $t02505325256._7 | |
| 895 | + | let disbalanceCoeff = $t02505325256._8 | |
| 896 | + | let precision = tryGetInteger(k_precision, pepe_market) | |
| 897 | + | let sigmaFeePerLp = tryGetString(k_sigma_fee_per_lp, pepe_market) | |
| 898 | + | let paused = tryGetBool(k_paused, pepe_market) | |
| 899 | + | let totalLp = tryGetInteger(k_total_lp, pepe_market) | |
| 900 | + | let rewardBalances = tryGetString(k_reward_balances, pepe_market) | |
| 901 | + | let lpDecimals = getAssetDecimals(lpAssetId) | |
| 902 | + | let assets = loadPepeAssets(pepe_market) | |
| 903 | + | let decimals_arr = loadPepeDecimals(assets) | |
| 904 | + | let $t02571125778 = loadPepeAssetWeights(pepe_market) | |
| 905 | + | let assetWeights = $t02571125778._1 | |
| 906 | + | let sigmaWeight = $t02571125778._2 | |
| 907 | + | let $t02578325866 = loadPepeAssetBalances(pepe_market) | |
| 908 | + | let prevAssetBalances = $t02578325866._1 | |
| 909 | + | let prevAssetTotalSupply = $t02578325866._2 | |
| 910 | + | let watchdog_address_str = tryGetString("WATCHDOG", pepe_market) | |
| 911 | + | let watchdog = Address(fromBase58String(watchdog_address_str)) | |
| 912 | + | let watchdog_offset = tryGetInteger("WATCHDOG_OFFSET", pepe_market) | |
| 913 | + | let watchdog_height = tryGetInteger("WATCHDOG_HEIGHT", watchdog) | |
| 914 | + | let watchdog_paused_str = if ((height > (watchdog_height + watchdog_offset))) | |
| 915 | + | then "1" | |
| 916 | + | else "0" | |
| 917 | + | let main_str = ((((((((((((((((((((((((((((((((lpAssetId + ",") + toString(unlocked)) + ",") + lpTotalSupply) + ",") + lpFeeRate) + ",") + protocolFeeRate) + ",") + maxAllocAmplifier) + ",") + weightAmplifier) + ",") + disbalanceCoeff) + ",") + toString(sigmaWeight)) + ",") + toString(prevAssetTotalSupply)) + ",") + toString(precision)) + ",") + sigmaFeePerLp) + ",") + toString(totalLp)) + ",") + toString(paused)) + ",") + toString(lpDecimals)) + ",") + pepe_market_str) + ",") + watchdog_paused_str) | |
| 918 | + | let assets_ids = makeString_11C(assets, ",") | |
| 919 | + | let assets_weights = makeString_11C(assetWeights, ",") | |
| 920 | + | let assets_balances = makeString_11C(prevAssetBalances, ",") | |
| 921 | + | let assets_decimals = makeString_11C(decimals_arr, ",") | |
| 922 | + | let res = ((((((((((main_str + "|") + assets_ids) + "|") + assets_weights) + "|") + assets_balances) + "|") + assets_decimals) + "|") + rewardBalances) | |
| 923 | + | (result :+ res) | |
| 924 | + | } | |
| 925 | + | ||
| 926 | + | ||
| 927 | + | func getPepe (params) = { | |
| 928 | + | let addresses = split(params, ",") | |
| 929 | + | let resArr = { | |
| 930 | + | let $l = addresses | |
| 931 | + | let $s = size($l) | |
| 932 | + | let $acc0 = nil | |
| 933 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
| 934 | + | then $a | |
| 935 | + | else processPepe($a, $l[$i]) | |
| 936 | + | ||
| 937 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
| 938 | + | then $a | |
| 939 | + | else throw("List size exceeds 10") | |
| 940 | + | ||
| 941 | + | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
| 942 | + | } | |
| 943 | + | let result = makeString_11C(resArr, ";") | |
| 944 | + | result | |
| 945 | + | } | |
| 946 | + | ||
| 947 | + | ||
| 948 | + | func getCombine (params) = { | |
| 949 | + | let paramsArr = split(params, "**") | |
| 950 | + | let $t02771727799 = $Tuple3(paramsArr[0], paramsArr[1], paramsArr[2]) | |
| 951 | + | let tsnParams = $t02771727799._1 | |
| 952 | + | let plParams = $t02771727799._2 | |
| 953 | + | let pepeParams = $t02771727799._3 | |
| 954 | + | let tsnData = getTSN(tsnParams) | |
| 955 | + | let plData = getPL(plParams) | |
| 956 | + | let pepeData = getPepe(pepeParams) | |
| 957 | + | makeString_11C([tsnData, plData, pepeData], "**") | |
| 958 | + | } | |
| 959 | + | ||
| 960 | + | ||
| 961 | + | func getEastAssetData (assetId) = { | |
| 962 | + | let params = tryGetString(("%s%s__asset__" + assetId), east_proxy) | |
| 963 | + | let paramsArr = split(params, "__") | |
| 964 | + | let $t02812028180 = $Tuple2(paramsArr[1], paramsArr[2]) | |
| 965 | + | let enStr = $t02812028180._1 | |
| 966 | + | let assetContractStr = $t02812028180._2 | |
| 967 | + | let assetContract = Address(fromBase58String(assetContractStr)) | |
| 968 | + | let enabled = if ((enStr == "ENABLED")) | |
| 969 | + | then true | |
| 970 | + | else false | |
| 971 | + | let backingRatio = tryGetInteger("%s__backingRatio", assetContract) | |
| 972 | + | let liquidationRatio = tryGetInteger("%s__liquidationRatio", assetContract) | |
| 973 | + | let oracleAddressStr = tryGetString("%s__oracleAddress", assetContract) | |
| 974 | + | let oracleAddress = Address(fromBase58String(oracleAddressStr)) | |
| 975 | + | let ticker = tryGetString("%s__ticker", assetContract) | |
| 976 | + | let eastMintedLimit = tryGetInteger("%s__eastMintedLimit", assetContract) | |
| 977 | + | let price = tryGetInteger(("%s%s__price__" + ticker), oracleAddress) | |
| 978 | + | makeString_2C([toString(enabled), toString(backingRatio), toString(liquidationRatio), toString(eastMintedLimit), toString(price)], ",") | |
| 979 | + | } | |
| 980 | + | ||
| 981 | + | ||
| 982 | + | func getEastLiquidation (params) = { | |
| 983 | + | let paramsArr = split(params, ",") | |
| 984 | + | func f (accum,next) = (accum :+ ((next + ",") + getEastAssetData(next))) | |
| 985 | + | ||
| 986 | + | let res = { | |
| 987 | + | let $l = paramsArr | |
| 988 | + | let $s = size($l) | |
| 989 | + | let $acc0 = nil | |
| 990 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
| 991 | + | then $a | |
| 992 | + | else f($a, $l[$i]) | |
| 993 | + | ||
| 994 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
| 995 | + | then $a | |
| 996 | + | else throw("List size exceeds 10") | |
| 997 | + | ||
| 998 | + | $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
| 999 | + | } | |
| 1000 | + | let assetsData = makeString_11C(res, ";") | |
| 1001 | + | let cumulativeFeeFraction = tryGetInteger("%s__cumulativeFeeFraction", east_proxy) | |
| 1002 | + | let currTs = (lastBlock.timestamp / 1000) | |
| 1003 | + | let fractionLastUpdated = tryGetIntegerWithDef("%s__fractionLastUpdated", east_proxy, currTs) | |
| 1004 | + | let coordinatorStr = tryGetString("%s__coordinatorAddress", east_proxy) | |
| 1005 | + | let coordinator = Address(fromBase58String(coordinatorStr)) | |
| 1006 | + | let stabFee = tryGetIntegerWithDef("%s__stabilityFee", coordinator, 10000000000) | |
| 1007 | + | let liqBonus = tryGetInteger("%s__liquidationBonus", coordinator) | |
| 1008 | + | let commonData = makeString([toString(cumulativeFeeFraction), toString(currTs), toString(fractionLastUpdated), toString(stabFee), toString(liqBonus)], ",") | |
| 1009 | + | ((commonData + "|") + assetsData) | |
| 1010 | + | } | |
| 1011 | + | ||
| 1012 | + | ||
| 1013 | + | @Callable(i) | |
| 1014 | + | func test (s) = { | |
| 1015 | + | let r = tryGetBool("deprecated_3P286TkTHARtrJzxUhPoHXardvutC37a9rM", swopfi_oracle) | |
| 1016 | + | throw(toString(r)) | |
| 1017 | + | } | |
| 1018 | + | ||
| 1019 | + |
github/deemru/w8io 43.17 ms ◑