tx · 8pWH1qva6qB864ueR3mTe1FLbsF1SjNDPmchdPhKeMG

3PLbeFURAdoxUkCoUGLkzn3xSuLHu97cnXf:  -0.02500000 Waves

2024.01.19 15:09 [4004124] smart account 3PLbeFURAdoxUkCoUGLkzn3xSuLHu97cnXf > SELF 0.00000000 Waves

{ "type": 13, "id": "8pWH1qva6qB864ueR3mTe1FLbsF1SjNDPmchdPhKeMG", "fee": 2500000, "feeAssetId": null, "timestamp": 1705666189791, "version": 2, "chainId": 87, "sender": "3PLbeFURAdoxUkCoUGLkzn3xSuLHu97cnXf", "senderPublicKey": "HLPJffwNKATbkEtcPREKs6tezUvvHZ1MmBHCVo9KUF3C", "proofs": [ "3YcBNsiDsJFMyajwpZyLx5AWcMiBfnJU7nP4be4k9DS6Kvtg9VAP6Zoo87NysfBgjx9mLDwvqnXkPFFjcMDsbXbp" ], "script": "base64:BgIHCAISAwoBCHUAA3JleAIjM1BHRkh6VkdUNE5UaWd3Q0tQMU5jd29Ya29kVlp3dkJ1dVUADXN3b3BmaV9vcmFjbGUCIzNQRWJxVmlFUkNvS25tY1NVTGg2bjJhaU12VWRTUWRDc29tAAhwbF9wcm94eQIjM1BKRVNWRFRIUnY4aTgzWGJtSHJSR1FoRGM1cmdSM2F6UXMABG9yY2wCIzNQOGQxRTFCTEtvRDUyeTNiUUoxYkRUZDJURDFncGFMbjl0AA53eF9mYWN0b3J5X3N0cgIjM1BDdUhzVFU1OFdLaENxb3RiY1N3QUJ2ZFB6cXFWQWJiVHYAC3d4X3N3YXBfc3RyAiMzUDY4ek5pdWZzdTF2aVpwdTFhWTNjZGFoUlJLY3ZWNU45MwAOZWFzdF9wcm94eV9zdHICIzNQTXRHbmYzTFhpRUc2aXNEUUxxMXhNREtVcWpRR3FOSExiABBlYXN0X2Nvb3JkaW5hdG9yAiMzUEo1Q1ZScVcxNW5ua0tOSEpNelQzcFBUdERKZjcxckd4SwAKd3hfZmFjdG9yeQkBB0FkZHJlc3MBCQDZBAEFDnd4X2ZhY3Rvcnlfc3RyAAd3eF9zd2FwCQEHQWRkcmVzcwEJANkEAQULd3hfc3dhcF9zdHIACmVhc3RfcHJveHkJAQdBZGRyZXNzAQkA2QQBBQ5lYXN0X3Byb3h5X3N0cgAKS19hbV9hc19pZAIPJXNfX2Ftb3VudEFzc2V0AApLX3ByX2FzX2lkAg4lc19fcHJpY2VBc3NldAAFS19hbXACByVzX19hbXAAB0tfc2hhcmUCRCVzJXNfX3NoYXJlQXNzZXRCYWxhbmNlX19ZaU5ib2ZGekMxN2pFSEhDTXdyUmNweTlNcnJqYWJNTUxaeGc4ZzV4bWY3AAhLX3N0YWtlZAIaJXMlc19fc3Rha2VkQmFsYW5jZV9fV0FWRVMACUtfYV9hc19pZAIKQV9hc3NldF9pZAAJS19iX2FzX2lkAgpCX2Fzc2V0X2lkAApLX2FfYXNfYmFsAg9BX2Fzc2V0X2JhbGFuY2UACktfYl9hc19iYWwCD0JfYXNzZXRfYmFsYW5jZQAFS19mZWUCCmNvbW1pc3Npb24AC0tfYXNzZXRfaWRzAg9zdGF0aWNfdG9rZW5JZHMACUtfZmVlX3B1egIKc3RhdGljX2ZlZQAKS19mZWVUb2tlbgIPc3RhdGljX2ZlZVRva2VuABVLX2dsb2JhbF9wb29sVG9rZW5faWQCE2dsb2JhbF9wb29sVG9rZW5faWQAGUtfZ2xvYmFsX3Bvb2xUb2tlbl9hbW91bnQCF2dsb2JhbF9wb29sVG9rZW5fYW1vdW50AA5LX3N0YXRpY19LTXVsdAIMc3RhdGljX0tNdWx0ABZLX3RtcF9yZWJsYW5jZUFzc2V0SWRzAhV0bXBfcmViYWxhbmNlQXNzZXRJZHMAFktfcmViYWxhbmNlX2luUHJvZ3Jlc3MCFHJlYmFsYW5jZV9pblByb2dyZXNzABVLX3JlYmFsYW5jZV9zdGVwc0RvbmUCE3JlYmFsYW5jZV9zdGVwc0RvbmUAF0tfcmViYWxhbmNlX3N0ZXBzQW1vdW50AhVyZWJhbGFuY2Vfc3RlcHNBbW91bnQAF0tfcmViYWxhbmNlX2Fzc2V0RGVsdGFzAhVyZWJhbGFuY2VfYXNzZXREZWx0YXMAG0tfcmViYWxhbmNlX2F0dGFjaGVkUGF5bWVudAIacmViYWxhbmNlX2F0dGFjaGVkUGF5bWVudF8AC3Rzbl9zd2FwcGVyAiMzUEt6NWpuSkxvaEYyR2pTaFE3Ykc1SDRCZWJkb0E5OHpaMgAQdHNuX3N3YXBwZXJfYWRkcgkBB0FkZHJlc3MBCQDZBAEFC3Rzbl9zd2FwcGVyAAVrX2ZlZQIFa19mZWUACGtfcmViYXRlAghrX3JlYmF0ZQAVa19mZWVUb1N0YWtlcnNQZXJjZW50AhVrX2ZlZVRvU3Rha2Vyc1BlcmNlbnQAD2tfZXhjZXNzQmFsYW5jZQIPa19leGNlc3NCYWxhbmNlAA1rX2ZyZWVCYWxhbmNlAg1rX2ZyZWVCYWxhbmNlABRrX21heFNwb3RVdGlsaXphdGlvbgIUa19tYXhTcG90VXRpbGl6YXRpb24ADWtfdG90YWxTdXBwbHkCDWtfdG90YWxTdXBwbHkABmtfcmF0ZQIGa19yYXRlAAhrX2JzQXN0UgIIa19ic0FzdFIACGtfYnNBc3RXAghrX2JzQXN0VwAIa19xdEFzdFICCGtfcXRBc3RSAAhrX3F0QXN0VwIIa19xdEFzdFcAEGtfbWF4UHJpY2VJbXBhY3QCEGtfbWF4UHJpY2VJbXBhY3QAEGtfbWF4UHJpY2VTcHJlYWQCEGtfbWF4UHJpY2VTcHJlYWQAE2tfdG90YWxQb3NpdGlvblNpemUCE2tfdG90YWxQb3NpdGlvblNpemUADGtfYmFzZU9yYWNsZQIMa19iYXNlT3JhY2xlABBrX21heE9yYWNsZURlbGF5AhBrX21heE9yYWNsZURlbGF5AAlrX3N0b3JhZ2UCB1NUT1JBR0UACGtfYXNzZXRzAgZBU1NFVFMACGtfc3RhdHVzAgZTVEFUVVMACGtfcGF1c2VkAgZQQVVTRUQAEGtfYXNzZXRfYmFsYW5jZXMCDkFTU0VUX0JBTEFOQ0VTAA9rX2Fzc2V0X3dlaWdodHMCDUFTU0VUX1dFSUdIVFMACGtfbHBfZmVlAgZMUF9GRUUADmtfcHJvdG9jb2xfZmVlAgxQUk9UT0NPTF9GRUUAC2tfcHJlY2lzaW9uAglQUkVDSVNJT04AEmtfc2lnbWFfZmVlX3Blcl9scAIQU0lHTUFfRkVFX1BFUl9MUAAXa191c2VyX3NpZ21hX2ZlZV9wZXJfbHACFVVTRVJfU0lHTUFfRkVFX1BFUl9MUAAJa191c2VyX2xwAgdVU0VSX0xQAAprX3RvdGFsX2xwAghUT1RBTF9MUAAOa191c2VyX3Byb2ZpdHMCDFVTRVJfUFJPRklUUwEKZ2V0X2RvbWFpbgELcG9vbEFkZHJlc3MEByRtYXRjaDAFC3Bvb2xBZGRyZXNzAwkAAAICIzNQNHVBNWV0blppNEFtQmFiS2lucTJiTWlXVThLY25IWmRIBQckbWF0Y2gwAgExAgEwAQlrX3BsVG9rZW4CCGFzc2V0X2lkBmRvbWFpbgkArAICCQCsAgIJAKwCAgIJc2V0dXBfcGxfBQhhc3NldF9pZAIBXwUGZG9tYWluARBrX3RvdGFsX3N1cHBsaWVkAQhhc3NldF9pZAkArAICAg90b3RhbF9zdXBwbGllZF8FCGFzc2V0X2lkAQdrX3NSYXRlAQhhc3NldF9pZAkArAICBQhhc3NldF9pZAIGX3NSYXRlARBrX3RvdGFsX2JvcnJvd2VkAQhhc3NldF9pZAkArAICAg90b3RhbF9ib3Jyb3dlZF8FCGFzc2V0X2lkAQdrX2JSYXRlAQhhc3NldF9pZAkArAICBQhhc3NldF9pZAIGX2JSYXRlAQtrX21heFN1cHBseQEIYXNzZXRfaWQJAKwCAgIQc2V0dXBfbWF4U3VwcGx5XwUIYXNzZXRfaWQAEGtfbGFzdFJhdGVIZWlnaHQCDmxhc3RSYXRlSGVpZ2h0ARBnZXRQdXpCYWxhbmNlS2V5AQdhc3NldElkCQCsAgIJAKwCAgIHZ2xvYmFsXwUHYXNzZXRJZAIIX2JhbGFuY2UBD2dldFB1eldlaWdodEtleQEHYXNzZXRJZAkArAICCQCsAgICB3N0YXRpY18FB2Fzc2V0SWQCB193ZWlnaHQBB2dldEJQQUsBB2FkZHJlc3MJAKwCAgUHYWRkcmVzcwIQX3N0YXRpY0Fzc2V0c0lkcwEMdHJ5R2V0U3RyaW5nAgNrZXkHYWRkcmVzcwQHJG1hdGNoMAkAnQgCBQdhZGRyZXNzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFiBQckbWF0Y2gwBQFiAgABCnRyeUdldEJvb2wCA2tleQdhZGRyZXNzBAckbWF0Y2gwCQCbCAIFB2FkZHJlc3MFA2tleQMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAFiBQckbWF0Y2gwBQFiBwENdHJ5R2V0SW50ZWdlcgIDa2V5B2FkZHJlc3MEByRtYXRjaDAJAJoIAgUHYWRkcmVzcwUDa2V5AwkAAQIFByRtYXRjaDACA0ludAQBYgUHJG1hdGNoMAUBYgAAARR0cnlHZXRJbnRlZ2VyV2l0aERlZgMDa2V5B2FkZHJlc3MDZGVmBAckbWF0Y2gwCQCaCAIFB2FkZHJlc3MFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDAFAWIFA2RlZgEQZ2V0V3hEZWZhdWx0RmVlcwAEB3Bvb2xGZWUJARR0cnlHZXRJbnRlZ2VyV2l0aERlZgMCCyVzX19wb29sRmVlBQd3eF9zd2FwAMCaDAQLcHJvdG9jb2xGZWUJARR0cnlHZXRJbnRlZ2VyV2l0aERlZgMCDyVzX19wcm90b2NvbEZlZQUHd3hfc3dhcADAmgwJAJQKAgkApAMBBQdwb29sRmVlCQCkAwEFC3Byb3RvY29sRmVlAQ1nZXRXeFBvb2xGZWVzAQdhZGRyZXNzBAdmZWVzS2V5CQCsAgICDyVzJXNfX3N3YXBGZWVfXwUHYWRkcmVzcwQEZmVlcwkBDHRyeUdldFN0cmluZwIFB2ZlZXNLZXkFCnd4X2ZhY3RvcnkDCQAAAgUEZmVlcwIACQEQZ2V0V3hEZWZhdWx0RmVlcwAEDHNwbGl0dGVkRmVlcwkAtQkCBQRmZWVzAgJfXwkAlAoCCQCRAwIFDHNwbGl0dGVkRmVlcwABCQCRAwIFDHNwbGl0dGVkRmVlcwACAQ9nZXRBc3NldEJhbGFuY2UCB2FkZHJlc3MHYXNzZXRJZAQBYQkA8AcCBQdhZGRyZXNzBQdhc3NldElkBQFhAQ9nZXRXYXZlc0JhbGFuY2UBB2FkZHJlc3MEAXcICQDvBwEFB2FkZHJlc3MJYXZhaWxhYmxlBQF3AQpnZXRCYWxhbmNlAgZyZXN1bHQHYXNzZXRJZAQHYWRkcmVzcwkArwICBQZyZXN1bHQAIwQEYWRkcgkBB0FkZHJlc3MBCQDZBAEFB2FkZHJlc3MEB2JhbGFuY2UDCQAAAgUHYXNzZXRJZAIFV0FWRVMJAQ9nZXRXYXZlc0JhbGFuY2UBBQRhZGRyBANhSWQJANkEAQUHYXNzZXRJZAkBD2dldEFzc2V0QmFsYW5jZQIFBGFkZHIFA2FJZAQDbGVuCQCxAgEFBnJlc3VsdAkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFB2FkZHJlc3MJALACAgUGcmVzdWx0ACMFB2Fzc2V0SWQCAToJAKQDAQUHYmFsYW5jZQIBLAERZ2V0QWRkcmVzc0JhbGFuY2UCBGFkZHIHYXNzZXRJZAQHYmFsYW5jZQMJAAACBQdhc3NldElkAgVXQVZFUwkBD2dldFdhdmVzQmFsYW5jZQEFBGFkZHIEA2FJZAkA2QQBBQdhc3NldElkCQEPZ2V0QXNzZXRCYWxhbmNlAgUEYWRkcgUDYUlkBQdiYWxhbmNlARBnZXRBc3NldERlY2ltYWxzAQphc3NldElkU3RyBAhkZWNpbWFscwMJAAACBQphc3NldElkU3RyAgVXQVZFUwAICAkBBXZhbHVlAQkA7AcBCQDZBAEFCmFzc2V0SWRTdHIIZGVjaW1hbHMFCGRlY2ltYWxzAQlnZXRXeERhdGEBB2FkZHJlc3MEBGFkZHIJAQdBZGRyZXNzAQkA2QQBBQdhZGRyZXNzBAhhbW91bnRJZAkBDHRyeUdldFN0cmluZwIFCktfYW1fYXNfaWQFBGFkZHIEB3ByaWNlSWQJAQx0cnlHZXRTdHJpbmcCBQpLX3ByX2FzX2lkBQRhZGRyBANhbXAJAQx0cnlHZXRTdHJpbmcCBQVLX2FtcAUEYWRkcgQFc2hhcmUJAQ10cnlHZXRJbnRlZ2VyAgUHS19zaGFyZQUEYWRkcgQFc3Rha2UJAQ10cnlHZXRJbnRlZ2VyAgUIS19zdGFrZWQFBGFkZHIECyR0MDY2NzM2NzI0CQENZ2V0V3hQb29sRmVlcwEFB2FkZHJlc3MEB3Bvb2xGZWUIBQskdDA2NjczNjcyNAJfMQQLcHJvdG9jb2xGZWUIBQskdDA2NjczNjcyNAJfMgkAlAoCCQCsAgIJAKwCAgUIYW1vdW50SWQCASwFB3ByaWNlSWQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQNhbXACASwJAKQDAQUFc2hhcmUCASwJAKQDAQUFc3Rha2UCASwFB3Bvb2xGZWUCASwFC3Byb3RvY29sRmVlAQlnZXRTd0RhdGEBB2FkZHJlc3MEBGFkZHIJAQdBZGRyZXNzAQkA2QQBBQdhZGRyZXNzBARBX2lkCQEMdHJ5R2V0U3RyaW5nAgUJS19hX2FzX2lkBQRhZGRyBARCX2lkCQEMdHJ5R2V0U3RyaW5nAgUJS19iX2FzX2lkBQRhZGRyBAlBX2JhbGFuY2UJAQ10cnlHZXRJbnRlZ2VyAgUKS19hX2FzX2JhbAUEYWRkcgQJQl9iYWxhbmNlCQENdHJ5R2V0SW50ZWdlcgIFCktfYl9hc19iYWwFBGFkZHIEA2ZlZQkBFHRyeUdldEludGVnZXJXaXRoRGVmAwUFS19mZWUFBGFkZHIA8C4ECmRlcHJlY2F0ZWQJAQp0cnlHZXRCb29sAgkArAICAgtkZXByZWNhdGVkXwUHYWRkcmVzcwkBB0FkZHJlc3MBCQDZBAEFDXN3b3BmaV9vcmFjbGUJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEQV9pZAIBOgkApAMBBQlBX2JhbGFuY2UCASwFBEJfaWQCAToJAKQDAQUJQl9iYWxhbmNlAgEsCQCkAwEFA2ZlZQIBLAkApQMBBQpkZXByZWNhdGVkARJnZXRQelJlYmFsYW5jZURhdGEBB2FkZHJlc3MEBGFkZHIJAQdBZGRyZXNzAQkA2QQBBQdhZGRyZXNzBAx0bXBBc3NldHNTdHIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEYWRkcgUWS190bXBfcmVibGFuY2VBc3NldElkcwIABAppblByb2dyZXNzCQELdmFsdWVPckVsc2UCCQCbCAIFBGFkZHIFFktfcmViYWxhbmNlX2luUHJvZ3Jlc3MHBAlzdGVwc0RvbmUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEYWRkcgUVS19yZWJhbGFuY2Vfc3RlcHNEb25lAAAEC3N0ZXBzQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBGFkZHIFF0tfcmViYWxhbmNlX3N0ZXBzQW1vdW50AAAEC2Fzc2V0RGVsdGFzCQELdmFsdWVPckVsc2UCCQCdCAIFBGFkZHIFF0tfcmViYWxhbmNlX2Fzc2V0RGVsdGFzAgAECXRtcEFzc2V0cwkAtQkCBQx0bXBBc3NldHNTdHICASwKAQ9jb2xsZWN0UGF5bWVudHMCBWFjY3VtB2Fzc2V0SWQEA2tleQkArAICBRtLX3JlYmFsYW5jZV9hdHRhY2hlZFBheW1lbnQFB2Fzc2V0SWQEA3ZhbAkBDXRyeUdldEludGVnZXICBQNrZXkFBGFkZHIDCQECIT0CBQN2YWwAAAkAzggCBQVhY2N1bQkAzAgCCQCsAgIJAKwCAgUDa2V5AgEqCQCkAwEFA3ZhbAUDbmlsBQVhY2N1bQQRcmViYWxhbmNlUGF5bWVudHMKAAIkbAUJdG1wQXNzZXRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ9jb2xsZWN0UGF5bWVudHMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoEFHJlYmFsYW5jZVBheW1lbnRzU3RyCQC5CQIFEXJlYmFsYW5jZVBheW1lbnRzAgEsCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFDHRtcEFzc2V0c1N0cgIBOwkApQMBBQppblByb2dyZXNzAgE7CQCkAwEFCXN0ZXBzRG9uZQIBOwkApAMBBQtzdGVwc0Ftb3VudAIBOwULYXNzZXREZWx0YXMCATsFFHJlYmFsYW5jZVBheW1lbnRzU3RyARRjb2xsZWN0UHV6QXNzZXRzRGF0YQIGcmVzdWx0B2Fzc2V0SWQEA2xlbgkAkAMBBQZyZXN1bHQEB2FkZHJlc3MJAJEDAgUGcmVzdWx0CQBlAgUDbGVuAAEEBGFkZHIJAQdBZGRyZXNzAQkA2QQBBQdhZGRyZXNzBApiYWxhbmNlS2V5CQEQZ2V0UHV6QmFsYW5jZUtleQEFB2Fzc2V0SWQECXdlaWdodEtleQkBD2dldFB1eldlaWdodEtleQEFB2Fzc2V0SWQEB2JhbGFuY2UJAQ10cnlHZXRJbnRlZ2VyAgUKYmFsYW5jZUtleQUEYWRkcgQGd2VpZ2h0CQENdHJ5R2V0SW50ZWdlcgIFCXdlaWdodEtleQUEYWRkcgQLcmVhbEJhbGFuY2UJARFnZXRBZGRyZXNzQmFsYW5jZQIFBGFkZHIFB2Fzc2V0SWQEA3JlcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUHYXNzZXRJZAIBLAkApAMBBQdiYWxhbmNlAgEsCQCkAwEFBndlaWdodAIBLAkApAMBBQtyZWFsQmFsYW5jZQkAzAgCBQNyZXMFBnJlc3VsdAEJZ2V0UHpEYXRhAQdhZGRyZXNzBARhZGRyCQEHQWRkcmVzcwEJANkEAQUHYWRkcmVzcwQEZmVlMQkBDXRyeUdldEludGVnZXICBQlLX2ZlZV9wdXoFBGFkZHIECGZlZVRva2VuCQEMdHJ5R2V0U3RyaW5nAgUKS19mZWVUb2tlbgUEYWRkcgQKYXNzZXRzU3RyMQkBDHRyeUdldFN0cmluZwIFC0tfYXNzZXRfaWRzBQRhZGRyBAskdDA5MzYwOTUxMwMJAAACBQphc3NldHNTdHIxAgAJAJQKAgkBDHRyeUdldFN0cmluZwIJAQdnZXRCUEFLAQUHYWRkcmVzcwUEdGhpcwDIAQkAlAoCBQphc3NldHNTdHIxBQRmZWUxBAlhc3NldHNTdHIIBQskdDA5MzYwOTUxMwJfMQQDZmVlCAULJHQwOTM2MDk1MTMCXzIEBmFzc2V0cwkAtQkCBQlhc3NldHNTdHICASwECmFzc2V0c0RhdGEKAAIkbAUGYXNzZXRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAzAgCBQdhZGRyZXNzBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBFGNvbGxlY3RQdXpBc3NldHNEYXRhAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBANsZW4JAJADAQUKYXNzZXRzRGF0YQQJYXNzZXRzQXJyCQDRCAIFCmFzc2V0c0RhdGEJAGUCBQNsZW4AAQQNYXNzZXRzRGF0YVN0cgkAugkCBQlhc3NldHNBcnICATsEC3Bvb2xUb2tlbklkCQEMdHJ5R2V0U3RyaW5nAgUVS19nbG9iYWxfcG9vbFRva2VuX2lkBQRhZGRyBA9wb29sVG9rZW5BbW91bnQJAQ10cnlHZXRJbnRlZ2VyAgUZS19nbG9iYWxfcG9vbFRva2VuX2Ftb3VudAUEYWRkcgQFa011bHQJARR0cnlHZXRJbnRlZ2VyV2l0aERlZgMFDktfc3RhdGljX0tNdWx0BQRhZGRyAAEJAJgKBgUDZmVlBQhmZWVUb2tlbgULcG9vbFRva2VuSWQFD3Bvb2xUb2tlbkFtb3VudAUFa011bHQFDWFzc2V0c0RhdGFTdHIBCmdldFRzbkRhdGECB2FkZHJlc3MIYXNzZXRfaWQEBGFkZHIJAQdBZGRyZXNzAQkA2QQBBQdhZGRyZXNzBAZic0FzdFIJAQ10cnlHZXRJbnRlZ2VyAgUIa19ic0FzdFIFBGFkZHIEBmJzQXN0VwkBDXRyeUdldEludGVnZXICBQhrX2JzQXN0VwUEYWRkcgQGcXRBc3RSCQENdHJ5R2V0SW50ZWdlcgIFCGtfcXRBc3RSBQRhZGRyBAZxdEFzdFcJAQ10cnlHZXRJbnRlZ2VyAgUIa19xdEFzdFcFBGFkZHIEDm1heFByaWNlSW1wYWN0CQENdHJ5R2V0SW50ZWdlcgIFEGtfbWF4UHJpY2VJbXBhY3QFBGFkZHIEDm1heFByaWNlU3ByZWFkCQENdHJ5R2V0SW50ZWdlcgIFEGtfbWF4UHJpY2VTcHJlYWQFBGFkZHIEEXRvdGFsUG9zaXRpb25TaXplCQENdHJ5R2V0SW50ZWdlcgIFE2tfdG90YWxQb3NpdGlvblNpemUFBGFkZHIEDm1heE9yYWNsZURlbGF5CQENdHJ5R2V0SW50ZWdlcgIFEGtfbWF4T3JhY2xlRGVsYXkFBGFkZHIEDG9yYWNsZVN0cmluZwkBDHRyeUdldFN0cmluZwIFDGtfYmFzZU9yYWNsZQUEYWRkcgQDYXJyCQC1CQIFDG9yYWNsZVN0cmluZwIBLAQNJHQwMTA3MTMxMDc3OQkAlQoDCQCRAwIFA2FycgAACQCRAwIFA2FycgABCQCRAwIFA2FycgACBA1vcmFjbGVBZGRyZXNzCAUNJHQwMTA3MTMxMDc3OQJfMQQIcHJpY2VLZXkIBQ0kdDAxMDcxMzEwNzc5Al8yBAhibG9ja0tleQgFDSR0MDEwNzEzMTA3NzkCXzMECm9yYWNsZUFkZHIJAQdBZGRyZXNzAQkA2QQBBQ1vcmFjbGVBZGRyZXNzBAtvcmFjbGVQcmljZQkBDXRyeUdldEludGVnZXICBQhwcmljZUtleQUKb3JhY2xlQWRkcgQJY3VySGVpZ2h0BQZoZWlnaHQECmxhc3RIZWlnaHQDCQECIT0CBQhibG9ja0tleQIACQENdHJ5R2V0SW50ZWdlcgIFCGJsb2NrS2V5BQpvcmFjbGVBZGRyBQljdXJIZWlnaHQEBXZhdWx0CQEMdHJ5R2V0U3RyaW5nAgkArAICAg5rX2Fzc2V0X3ZhdWx0XwUIYXNzZXRfaWQFEHRzbl9zd2FwcGVyX2FkZHIECnZhdWx0X2FkZHIJAQdBZGRyZXNzAQkA2QQBBQV2YXVsdAQNZXhjZXNzQmFsYW5jZQkBDXRyeUdldEludGVnZXICBQ9rX2V4Y2Vzc0JhbGFuY2UFCnZhdWx0X2FkZHIEC2ZyZWVCYWxhbmNlCQENdHJ5R2V0SW50ZWdlcgIFDWtfZnJlZUJhbGFuY2UFCnZhdWx0X2FkZHIEEm1heFNwb3RVdGlsaXphdGlvbgkBDXRyeUdldEludGVnZXICBRRrX21heFNwb3RVdGlsaXphdGlvbgUKdmF1bHRfYWRkcgQLdG90YWxTdXBwbHkJAQ10cnlHZXRJbnRlZ2VyAgUNa190b3RhbFN1cHBseQUKdmF1bHRfYWRkcgQEcmF0ZQkBDXRyeUdldEludGVnZXICBQZrX3JhdGUFCnZhdWx0X2FkZHIJAKIKEAUGYnNBc3RSBQZic0FzdFcFBnF0QXN0UgUGcXRBc3RXBRF0b3RhbFBvc2l0aW9uU2l6ZQUObWF4UHJpY2VJbXBhY3QFDm1heFByaWNlU3ByZWFkBQtvcmFjbGVQcmljZQUNZXhjZXNzQmFsYW5jZQULZnJlZUJhbGFuY2UFEm1heFNwb3RVdGlsaXphdGlvbgULdG90YWxTdXBwbHkFBHJhdGUFCWN1ckhlaWdodAUKbGFzdEhlaWdodAUObWF4T3JhY2xlRGVsYXkBCGdldFByaWNlAQdhc3NldElkBAVwcmljZQkBDXRyeUdldEludGVnZXICCQCsAgIFB2Fzc2V0SWQCB190d2FwNUIJAQdBZGRyZXNzAQkA2QQBBQRvcmNsBQVwcmljZQEJZ2V0UExEYXRhAgxwb29sX2FkZHJlc3MIYXNzZXRfaWQEBmRvbWFpbgkBCmdldF9kb21haW4BBQxwb29sX2FkZHJlc3MEB3Bvb2xBZHIJAQdBZGRyZXNzAQkA2QQBBQxwb29sX2FkZHJlc3MECXBsVG9rZW5JZAkBDHRyeUdldFN0cmluZwIJAQlrX3BsVG9rZW4CBQhhc3NldF9pZAUGZG9tYWluCQEHQWRkcmVzcwEJANkEAQUIcGxfcHJveHkEBXNSYXRlCQENdHJ5R2V0SW50ZWdlcgIJAQdrX3NSYXRlAQUIYXNzZXRfaWQFB3Bvb2xBZHIEBWJSYXRlCQENdHJ5R2V0SW50ZWdlcgIJAQdrX2JSYXRlAQUIYXNzZXRfaWQFB3Bvb2xBZHIEDXRvdGFsU3VwcGxpZWQJAQ10cnlHZXRJbnRlZ2VyAgkBEGtfdG90YWxfc3VwcGxpZWQBBQhhc3NldF9pZAUHcG9vbEFkcgQNdG90YWxCb3Jyb3dlZAkBDXRyeUdldEludGVnZXICCQEQa190b3RhbF9ib3Jyb3dlZAEFCGFzc2V0X2lkBQdwb29sQWRyBAltYXhTdXBwbHkJAQx0cnlHZXRTdHJpbmcCCQELa19tYXhTdXBwbHkBBQhhc3NldF9pZAUHcG9vbEFkcgQKbGFzdEhlaWdodAkBDXRyeUdldEludGVnZXICBRBrX2xhc3RSYXRlSGVpZ2h0BQdwb29sQWRyBAljdXJIZWlnaHQFBmhlaWdodAQFcHJpY2UJAQhnZXRQcmljZQEFCGFzc2V0X2lkBAhkZWNpbWFscwkBEGdldEFzc2V0RGVjaW1hbHMBBQhhc3NldF9pZAkAnQoLBQhhc3NldF9pZAUJcGxUb2tlbklkBQVzUmF0ZQUFYlJhdGUFDXRvdGFsU3VwcGxpZWQFDXRvdGFsQm9ycm93ZWQFCW1heFN1cHBseQUKbGFzdEhlaWdodAUJY3VySGVpZ2h0BQVwcmljZQUIZGVjaW1hbHMBCXRlc3RfbG9vcAIGcmVzdWx0A2VsZQkAzAgCBQNlbGUFBnJlc3VsdAEOZ2V0QmFsYW5jZXNTdHICCWFzc2V0c1N0cgdhZGRyZXNzBAZhc3NldHMJALwJAgUJYXNzZXRzU3RyAgEsBANyZXMKAAIkbAUGYXNzZXRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUHYWRkcmVzcwoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKZ2V0QmFsYW5jZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgMgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIECGJhbGFuY2VzCQCwAgIFA3JlcwAjBARiYWxzCQCzAgIFCGJhbGFuY2VzAAEFBGJhbHMBCXByb2Nlc3NXWAIGcmVzdWx0B2FkZHJlc3MEDSR0MDEzMTU1MTMxOTgJAQlnZXRXeERhdGEBBQdhZGRyZXNzBAlhc3NldHNTdHIIBQ0kdDAxMzE1NTEzMTk4Al8xBAVkYXRhcwgFDSR0MDEzMTU1MTMxOTgCXzIEDGFzc2V0c1N0cmluZwkBDmdldEJhbGFuY2VzU3RyAgUJYXNzZXRzU3RyBQdhZGRyZXNzBAdyZXNJdGVtCQCsAgIJAKwCAgkArAICCQCsAgIFB2FkZHJlc3MCAS8FDGFzc2V0c1N0cmluZwIBLwUFZGF0YXMJAMwIAgUHcmVzSXRlbQUGcmVzdWx0AQlwcm9jZXNzU1cCBnJlc3VsdAdhZGRyZXNzBAxhc3NldHNTdHJpbmcJAQlnZXRTd0RhdGEBBQdhZGRyZXNzBAdyZXNJdGVtCQCsAgIJAKwCAgUHYWRkcmVzcwIBLwUMYXNzZXRzU3RyaW5nCQDMCAIFB3Jlc0l0ZW0FBnJlc3VsdAEJcHJvY2Vzc1BaAgZyZXN1bHQHYWRkcmVzcwQNJHQwMTM1OTgxMzY4OQkBCWdldFB6RGF0YQEFB2FkZHJlc3MEA2ZlZQgFDSR0MDEzNTk4MTM2ODkCXzEECGZlZVRva2VuCAUNJHQwMTM1OTgxMzY4OQJfMgQLcG9vbFRva2VuSWQIBQ0kdDAxMzU5ODEzNjg5Al8zBA9wb29sVG9rZW5BbW91bnQIBQ0kdDAxMzU5ODEzNjg5Al80BAVrTXVsdAgFDSR0MDEzNTk4MTM2ODkCXzUEDGFzc2V0c1N0cmluZwgFDSR0MDEzNTk4MTM2ODkCXzYECHJlYmFEYXRhCQESZ2V0UHpSZWJhbGFuY2VEYXRhAQUHYWRkcmVzcwQHcmVzSXRlbQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFB2FkZHJlc3MCAS8JAKQDAQUDZmVlAgEvBQhmZWVUb2tlbgIBLwUMYXNzZXRzU3RyaW5nAgEvBQhyZWJhRGF0YQIBLwULcG9vbFRva2VuSWQCAS8JAKQDAQUPcG9vbFRva2VuQW1vdW50AgEvCQCkAwEFBWtNdWx0CQDMCAIFB3Jlc0l0ZW0FBnJlc3VsdAEKcHJvY2Vzc1RTTgIGcmVzdWx0BWxhYmVsBANhcnIJALUJAgUFbGFiZWwCAV8EDSR0MDE0MDUxMTQwOTMJAJQKAgkAkQMCBQNhcnIAAAkAkQMCBQNhcnIAAQQHYWRkcmVzcwgFDSR0MDE0MDUxMTQwOTMCXzEECGFzc2V0X2lkCAUNJHQwMTQwNTExNDA5MwJfMgQNJHQwMTQwOTkxNDMzNwkBCmdldFRzbkRhdGECBQdhZGRyZXNzBQhhc3NldF9pZAQGYnNBc3RSCAUNJHQwMTQwOTkxNDMzNwJfMQQGYnNBc3RXCAUNJHQwMTQwOTkxNDMzNwJfMgQGcXRBc3RSCAUNJHQwMTQwOTkxNDMzNwJfMwQGcXRBc3RXCAUNJHQwMTQwOTkxNDMzNwJfNAQRdG90YWxQb3NpdGlvblNpemUIBQ0kdDAxNDA5OTE0MzM3Al81BA5tYXhQcmljZUltcGFjdAgFDSR0MDE0MDk5MTQzMzcCXzYEDm1heFByaWNlU3ByZWFkCAUNJHQwMTQwOTkxNDMzNwJfNwQLb3JhY2xlUHJpY2UIBQ0kdDAxNDA5OTE0MzM3Al84BA1leGNlc3NCYWxhbmNlCAUNJHQwMTQwOTkxNDMzNwJfOQQLZnJlZUJhbGFuY2UIBQ0kdDAxNDA5OTE0MzM3A18xMAQSbWF4U3BvdFV0aWxpemF0aW9uCAUNJHQwMTQwOTkxNDMzNwNfMTEEC3RvdGFsU3VwcGx5CAUNJHQwMTQwOTkxNDMzNwNfMTIEBHJhdGUIBQ0kdDAxNDA5OTE0MzM3A18xMwQJY3VySGVpZ2h0CAUNJHQwMTQwOTkxNDMzNwNfMTQECmxhc3RIZWlnaHQIBQ0kdDAxNDA5OTE0MzM3A18xNQQObWF4T3JhY2xlRGVsYXkIBQ0kdDAxNDA5OTE0MzM3A18xNgQOYXNzZXRfZGVjaW1hbHMDCQAAAgUIYXNzZXRfaWQCBVdBVkVTAAgICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQkA2QQBBQhhc3NldF9pZAkArAICAg1JdmFsaWQgYXNzZXQgBQhhc3NldF9pZAhkZWNpbWFscwQHcmVzSXRlbQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUHYWRkcmVzcwIBLAUIYXNzZXRfaWQCASwJAKQDAQUOYXNzZXRfZGVjaW1hbHMCASwJAKQDAQUGYnNBc3RSAgEsCQCkAwEFBmJzQXN0VwIBLAkApAMBBQZxdEFzdFICASwJAKQDAQUGcXRBc3RXAgEsCQCkAwEFEXRvdGFsUG9zaXRpb25TaXplAgEsCQCkAwEFDm1heFByaWNlSW1wYWN0AgEsCQCkAwEFDm1heFByaWNlU3ByZWFkAgEsCQCkAwEFC29yYWNsZVByaWNlAgEsCQCkAwEFDWV4Y2Vzc0JhbGFuY2UCASwJAKQDAQULZnJlZUJhbGFuY2UCASwJAKQDAQUSbWF4U3BvdFV0aWxpemF0aW9uAgEsCQCkAwEFC3RvdGFsU3VwcGx5AgEsCQCkAwEFBHJhdGUCASwJAKQDAQUJY3VySGVpZ2h0AgEsCQCkAwEFCmxhc3RIZWlnaHQCASwJAKQDAQUObWF4T3JhY2xlRGVsYXkJAMwIAgUHcmVzSXRlbQUGcmVzdWx0AQlwcm9jZXNzUEwCBnJlc3VsdAVsYWJlbAQDYXJyCQC1CQIFBWxhYmVsAgEtBA0kdDAxNTIyNzE1Mjc0CQCUCgIJAJEDAgUDYXJyAAAJAJEDAgUDYXJyAAEEDHBvb2xfYWRkcmVzcwgFDSR0MDE1MjI3MTUyNzQCXzEECGFzc2V0X2lkCAUNJHQwMTUyMjcxNTI3NAJfMgQNJHQwMTUyODAxNTQzNwkBCWdldFBMRGF0YQIFDHBvb2xfYWRkcmVzcwUIYXNzZXRfaWQECWFzc2V0X2lkZAgFDSR0MDE1MjgwMTU0MzcCXzEECXBsVG9rZW5JZAgFDSR0MDE1MjgwMTU0MzcCXzIEBXNSYXRlCAUNJHQwMTUyODAxNTQzNwJfMwQFYlJhdGUIBQ0kdDAxNTI4MDE1NDM3Al80BA10b3RhbFN1cHBsaWVkCAUNJHQwMTUyODAxNTQzNwJfNQQNdG90YWxCb3Jyb3dlZAgFDSR0MDE1MjgwMTU0MzcCXzYECW1heFN1cHBseQgFDSR0MDE1MjgwMTU0MzcCXzcECmxhc3RIZWlnaHQIBQ0kdDAxNTI4MDE1NDM3Al84BAljdXJIZWlnaHQIBQ0kdDAxNTI4MDE1NDM3Al85BAVwcmljZQgFDSR0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MQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAGAAYQBiAGMAZAQGcmVzdWx0CQC7CQIFBnJlc0FycgIBfAUGcmVzdWx0AQZnZXRUU04BBnBhcmFtcwQNdmF1bHRzX2xhYmVscwkAtQkCBQZwYXJhbXMCASwEBnJlc0FycgoAAiRsBQ12YXVsdHNfbGFiZWxzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpwcm9jZXNzVFNOAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBAZyZXN1bHQJALoJAgUGcmVzQXJyAgF8BANmZWUJAQ10cnlHZXRJbnRlZ2VyAgUFa19mZWUFEHRzbl9zd2FwcGVyX2FkZHIEBnJlYmF0ZQkBDXRyeUdldEludGVnZXICBQhrX3JlYmF0ZQUQdHNuX3N3YXBwZXJfYWRkcgQTZmVlVG9TdGFrZXJzUGVyY2VudAkBDXRyeUdldEludGVnZXICBRVrX2ZlZVRvU3Rha2Vyc1BlcmNlbnQFEHRzbl9zd2FwcGVyX2FkZHIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKQDAQUDZmVlAgEsCQCkAwEFBnJlYmF0ZQIBLAkApAMBBRNmZWVUb1N0YWtlcnNQZXJjZW50AgEvBQZyZXN1bHQBBWdldFBMAQZwYXJhbXMEBXBvb2xzCQC1CQIFBnBhcmFtcwIBLAQGcmVzQXJyCgACJGwFBXBvb2xzCgACJHMJAJADAQUCJGwKAAUkYWNj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c3NQZXBlAgZyZXN1bHQPcGVwZV9tYXJrZXRfc3RyBAtwZXBlX21hcmtldAkBB0FkZHJlc3MBCQDZBAEFD3BlcGVfbWFya2V0X3N0cgQHc3RvcmFnZQkBDHRyeUdldFN0cmluZwIFCWtfc3RvcmFnZQULcGVwZV9tYXJrZXQEBHNhcnIJALwJAgUHc3RvcmFnZQICX18EDSR0MDE5ODI5MjAwNTAJAJsKCQkAkQMCBQRzYXJyAAAJAAACCQCRAwIFBHNhcnIAAQIBMQkAkQMCBQRzYXJyAAIJAJEDAgUEc2FycgADCQCRAwIFBHNhcnIABAkAkQMCBQRzYXJyAAUJAJEDAgUEc2FycgAGCQCRAwIFBHNhcnIABwkAkQMCBQRzYXJyAAgECWxwQXNzZXRJZAgFDSR0MDE5ODI5MjAwNTACXzEECHVubG9ja2VkCAUNJHQwMTk4MjkyMDA1MAJfMgQNbHBUb3RhbFN1cHBseQgFDSR0MDE5ODI5MjAwNTACXzMECWxwRmVlUmF0ZQgFDSR0MDE5ODI5MjAwNTACXzQED3Byb3RvY29sRmVlUmF0ZQgFDSR0MDE5ODI5MjAwNTACXzUEEW1heEFsbG9jQW1wbGlmaWVyCAUNJHQwMTk4MjkyMDA1MAJfNgQPd2VpZ2h0QW1wbGlmaWVyCAUNJHQwMTk4MjkyMDA1MAJfNwQMc2xpcHBhZ2VSYXRlCAUNJHQwMTk4MjkyMDA1MAJfOAQKZmVlTWF4UmF0ZQgFDSR0MDE5ODI5MjAwNTACXzkECXByZWNpc2lvbgkBDXRyeUdldEludGVnZXICBQtrX3ByZWNpc2lvbgULcGVwZV9tYXJrZXQEDXNpZ21hRmVlUGVyTHAJAQx0cnlHZXRTdHJpbmcCBRJrX3NpZ21hX2ZlZV9wZXJfbHAFC3BlcGVfbWFya2V0BAZwYXVzZWQJAQp0cnlHZXRCb29sAgUIa19wYXVzZWQFC3BlcGVfbWFya2V0BAd0b3RhbExwCQENdHJ5R2V0SW50ZWdlcgIFCmtfdG90YWxfbHAFC3BlcGVfbWFya2V0BApscERlY2ltYWxzCQEQZ2V0QXNzZXREZWNpbWFscwEFCWxwQXNzZXRJZAQGYXNzZXRzCQEObG9hZFBlcGVBc3NldHMBBQtwZXBlX21hcmtldAQMZGVjaW1hbHNfYXJyCQEQbG9hZFBlcGVEZWNpbWFscwEFBmFzc2V0cwQNJHQwMjA0NDMyMDUxMAkBFGxvYWRQZXBlQXNzZXRXZWlnaHRzAQULcGVwZV9tYXJrZXQEDGFzc2V0V2VpZ2h0cwgFDSR0MDIwNDQzMjA1MTACXzEEC3NpZ21hV2VpZ2h0CAUNJHQwMjA0NDMyMDUxMAJfMgQNJHQwMjA1MTYyMDU5OQkBFWxvYWRQZXBlQXNzZXRCYWxhbmNlcwEFC3BlcGVfbWFya2V0BBFwcmV2QXNzZXRCYWxhbmNlcwgFDSR0MDIwNTE2MjA1OTkCXzEEFHByZXZBc3NldFRvdGFsU3VwcGx5CAUNJHQwMjA1MTYyMDU5OQJfMgQIbWFpbl9zdHIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQlscEFzc2V0SWQCASwJAKUDAQUIdW5sb2NrZWQCASwFDWxwVG90YWxTdXBwbHkCASwFCWxwRmVlUmF0ZQIBLAUPcHJvdG9jb2xGZWVSYXRlAgEsBRFtYXhBbGxvY0FtcGxpZmllcgIBLAUPd2VpZ2h0QW1wbGlmaWVyAgEsBQxzbGlwcGFnZVJhdGUCASwFCmZlZU1heFJhdGUCASwJAKQDAQULc2lnbWFXZWlnaHQCASwJAKQDAQUUcHJldkFzc2V0VG90YWxTdXBwbHkCASwJAKQDAQUJcHJlY2lzaW9uAgEsBQ1zaWdtYUZlZVBlckxwAgEsCQCkAwEFB3RvdGFsTHACASwJAKUDAQUGcGF1c2VkAgEsCQCkAwEFCmxwRGVjaW1hbHMCASwFD3BlcGVfbWFya2V0X3N0cgQKYXNzZXRzX2lkcwkAuwkCBQZhc3NldHMCASwEDmFzc2V0c193ZWlnaHRzCQC7CQIFDGFzc2V0V2VpZ2h0cwIBLAQPYXNzZXRzX2JhbGFuY2VzCQC7CQIFEXByZXZBc3NldEJhbGFuY2VzAgEsBA9hc3NldHNfZGVjaW1hbHMJALsJAgUMZGVjaW1hbHNfYXJyAgEsBANyZXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQhtYWluX3N0cgIBfAUKYXNzZXRzX2lkcwIBfAUOYXNzZXRzX3dlaWdodHMCAXwFD2Fzc2V0c19iYWxhbmNlcwIBfAUPYXNzZXRzX2RlY2ltYWxzCQDNCAIFBnJlc3VsdAUDcmVzAQdnZXRQZXBlAQZwYXJhbXMECWFkZHJlc3NlcwkAtQkCBQZwYXJhbXMCASwEBnJlc0FycgoAAiRsBQlhZGRyZXNzZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBC3Byb2Nlc3NQZXBlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBAZyZXN1bHQJALsJAgUGcmVzQXJyAgE7BQZyZXN1bHQBCmdldENvbWJpbmUBBnBhcmFtcwQJcGFyYW1zQXJyCQC1CQIFBnBhcmFtcwICKioEDSR0MDIyMDYxMjIxNDMJAJUKAwkAkQMCBQlwYXJhbXNBcnIAAAkAkQMCBQlwYXJhbXNBcnIAAQkAkQMCBQlwYXJhbXNBcnIAAgQJdHNuUGFyYW1zCAUNJHQwMjIwNjEyMjE0MwJfMQQIcGxQYXJhbXMIBQ0kdDAyMjA2MTIyMTQzAl8yBApwZXBlUGFyYW1zCAUNJHQwMjIwNjEyMjE0MwJfMwQHdHNuRGF0YQkBBmdldFRTTgEFCXRzblBhcmFtcwQGcGxEYXRhCQEFZ2V0UEwBBQhwbFBhcmFtcwQIcGVwZURhdGEJAQdnZXRQZXBlAQUKcGVwZVBhcmFtcwkAuwkCCQDMCAIFB3RzbkRhdGEJAMwIAgUGcGxEYXRhCQDMCAIFCHBlcGVEYXRhBQNuaWwCAioqARBnZXRFYXN0QXNzZXREYXRhAQdhc3NldElkBAZwYXJhbXMJAQx0cnlHZXRTdHJpbmcCCQCsAgICDSVzJXNfX2Fzc2V0X18FB2Fzc2V0SWQFCmVhc3RfcHJveHkECXBhcmFtc0FycgkAtQkCBQZwYXJhbXMCAl9fBA0kdDAyMjQ3NDIyNTM0CQCUCgIJAJEDAgUJcGFyYW1zQXJyAAEJAJEDAgUJcGFyYW1zQXJyAAIEBWVuU3RyCAUNJHQwMjI0NzQyMjUzNAJfMQQQYXNzZXRDb250cmFjdFN0cggFDSR0MDIyNDc0MjI1MzQCXzIEDWFzc2V0Q29udHJhY3QJAQdBZGRyZXNzAQkA2QQBBRBhc3NldENvbnRyYWN0U3RyBAdlbmFibGVkAwkAAAIFBWVuU3RyAgdFTkFCTEVEBgcEDGJhY2tpbmdSYXRpbwkBDXRyeUdldEludGVnZXICAhAlc19fYmFja2luZ1JhdGlvBQ1hc3NldENvbnRyYWN0BBBsaXF1aWRhdGlvblJhdGlvCQENdHJ5R2V0SW50ZWdlcgICFCVzX19saXF1aWRhdGlvblJhdGlvBQ1hc3NldENvbnRyYWN0BBBvcmFjbGVBZGRyZXNzU3RyCQEMdHJ5R2V0U3RyaW5nAgIRJXNfX29yYWNsZUFkZHJlc3MFDWFzc2V0Q29udHJhY3QEDW9yYWNsZUFkZHJlc3MJAQdBZGRyZXNzAQkA2QQBBRBvcmFjbGVBZGRyZXNzU3RyBAZ0aWNrZXIJAQx0cnlHZXRTdHJpbmcCAgolc19fdGlja2VyBQ1hc3NldENvbnRyYWN0BA9lYXN0TWludGVkTGltaXQJAQ10cnlHZXRJbnRlZ2VyAgITJXNfX2Vhc3RNaW50ZWRMaW1pdAUNYXNzZXRDb250cmFjdAQFcHJpY2UJAQ10cnlHZXRJbnRlZ2VyAgkArAICAg0lcyVzX19wcmljZV9fBQZ0aWNrZXIFDW9yYWNsZUFkZHJlc3MJALoJAgkAzAgCCQClAwEFB2VuYWJsZWQJAMwIAgkApAMBBQxiYWNraW5nUmF0aW8JAMwIAgkApAMBBRBsaXF1aWRhdGlvblJhdGlvCQDMCAIJAKQDAQUPZWFzdE1pbnRlZExpbWl0CQDMCAIJAKQDAQUFcHJpY2UFA25pbAIBLAESZ2V0RWFzdExpcXVpZGF0aW9uAQZwYXJhbXMECXBhcmFtc0FycgkAtQkCBQZwYXJhbXMCASwKAQFmAgVhY2N1bQRuZXh0CQDNCAIFBWFjY3VtCQCsAgIJAKwCAgUEbmV4dAIBLAkBEGdldEVhc3RBc3NldERhdGEBBQRuZXh0BANyZXMKAAIkbAUJcGFyYW1zQXJyCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQFmAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBAphc3NldHNEYXRhCQC7CQIFA3JlcwIBOwQVY3VtdWxhdGl2ZUZlZUZyYWN0aW9uCQENdHJ5R2V0SW50ZWdlcgICGSVzX19jdW11bGF0aXZlRmVlRnJhY3Rpb24FCmVhc3RfcHJveHkEBmN1cnJUcwkAaQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wAOgHBBNmcmFjdGlvbkxhc3RVcGRhdGVkCQEUdHJ5R2V0SW50ZWdlcldpdGhEZWYDAhclc19fZnJhY3Rpb25MYXN0VXBkYXRlZAUKZWFzdF9wcm94eQUGY3VyclRzBA5jb29yZGluYXRvclN0cgkBDHRyeUdldFN0cmluZwICFiVzX19jb29yZGluYXRvckFkZHJlc3MFCmVhc3RfcHJveHkEC2Nvb3JkaW5hdG9yCQEHQWRkcmVzcwEJANkEAQUOY29vcmRpbmF0b3JTdHIEB3N0YWJGZWUJARR0cnlHZXRJbnRlZ2VyV2l0aERlZgMCECVzX19zdGFiaWxpdHlGZWUFC2Nvb3JkaW5hdG9yAIDIr6AlBAhsaXFCb251cwkBDXRyeUdldEludGVnZXICAhQlc19fbGlxdWlkYXRpb25Cb251cwULY29vcmRpbmF0b3IECmNvbW1vbkRhdGEJALkJAgkAzAgCCQCkAwEFFWN1bXVsYXRpdmVGZWVGcmFjdGlvbgkAzAgCCQCkAwEFBmN1cnJUcwkAzAgCCQCkAwEFE2ZyYWN0aW9uTGFzdFVwZGF0ZWQJAMwIAgkApAMBBQdzdGFiRmVlCQDMCAIJAKQDAQUIbGlxQm9udXMFA25pbAIBLAkArAICCQCsAgIFCmNvbW1vbkRhdGECAXwFCmFzc2V0c0RhdGEBAWkBBHRlc3QBAXMEAXIJAQp0cnlHZXRCb29sAgIuZGVwcmVjYXRlZF8zUDI4NlRrVEhBUnRySnp4VWhQb0hYYXJkdnV0QzM3YTlyTQkBB0FkZHJlc3MBCQDZBAEFDXN3b3BmaV9vcmFjbGUJAAIBCQClAwEFAXIAN0yf2g==", "height": 4004124, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DuPsmYkrrQHrNms6h4FxeoTfw1UAnChEeRyVqgNFMYC4 Next: 9WshtKfYfzgBU4Ug8U81Fb6FyhQ8jPMLQHn1SiLotRta Diff:
OldNewDifferences
4848 let K_fee_puz = "static_fee"
4949
5050 let K_feeToken = "static_feeToken"
51+
52+let K_global_poolToken_id = "global_poolToken_id"
53+
54+let K_global_poolToken_amount = "global_poolToken_amount"
55+
56+let K_static_KMult = "static_KMult"
5157
5258 let K_tmp_reblanceAssetIds = "tmp_rebalanceAssetIds"
5359
267273 let amp = tryGetString(K_amp, addr)
268274 let share = tryGetInteger(K_share, addr)
269275 let stake = tryGetInteger(K_staked, addr)
270- let $t065266577 = getWxPoolFees(address)
271- let poolFee = $t065266577._1
272- let protocolFee = $t065266577._2
276+ let $t066736724 = getWxPoolFees(address)
277+ let poolFee = $t066736724._1
278+ let protocolFee = $t066736724._2
273279 $Tuple2(((amountId + ",") + priceId), ((((((((amp + ",") + toString(share)) + ",") + toString(stake)) + ",") + poolFee) + ",") + protocolFee))
274280 }
275281
340346 let fee1 = tryGetInteger(K_fee_puz, addr)
341347 let feeToken = tryGetString(K_feeToken, addr)
342348 let assetsStr1 = tryGetString(K_asset_ids, addr)
343- let $t092139366 = if ((assetsStr1 == ""))
349+ let $t093609513 = if ((assetsStr1 == ""))
344350 then $Tuple2(tryGetString(getBPAK(address), this), 200)
345351 else $Tuple2(assetsStr1, fee1)
346- let assetsStr = $t092139366._1
347- let fee = $t092139366._2
352+ let assetsStr = $t093609513._1
353+ let fee = $t093609513._2
348354 let assets = split(assetsStr, ",")
349355 let assetsData = {
350356 let $l = assets
363369 let len = size(assetsData)
364370 let assetsArr = removeByIndex(assetsData, (len - 1))
365371 let assetsDataStr = makeString_2C(assetsArr, ";")
366- $Tuple3(fee, feeToken, assetsDataStr)
372+ let poolTokenId = tryGetString(K_global_poolToken_id, addr)
373+ let poolTokenAmount = tryGetInteger(K_global_poolToken_amount, addr)
374+ let kMult = tryGetIntegerWithDef(K_static_KMult, addr, 1)
375+ $Tuple6(fee, feeToken, poolTokenId, poolTokenAmount, kMult, assetsDataStr)
367376 }
368377
369378
379388 let maxOracleDelay = tryGetInteger(k_maxOracleDelay, addr)
380389 let oracleString = tryGetString(k_baseOracle, addr)
381390 let arr = split(oracleString, ",")
382- let $t01032710393 = $Tuple3(arr[0], arr[1], arr[2])
383- let oracleAddress = $t01032710393._1
384- let priceKey = $t01032710393._2
385- let blockKey = $t01032710393._3
391+ let $t01071310779 = $Tuple3(arr[0], arr[1], arr[2])
392+ let oracleAddress = $t01071310779._1
393+ let priceKey = $t01071310779._2
394+ let blockKey = $t01071310779._3
386395 let oracleAddr = Address(fromBase58String(oracleAddress))
387396 let oraclePrice = tryGetInteger(priceKey, oracleAddr)
388397 let curHeight = height
449458
450459
451460 func processWX (result,address) = {
452- let $t01276912812 = getWxData(address)
453- let assetsStr = $t01276912812._1
454- let datas = $t01276912812._2
461+ let $t01315513198 = getWxData(address)
462+ let assetsStr = $t01315513198._1
463+ let datas = $t01315513198._2
455464 let assetsString = getBalancesStr(assetsStr, address)
456465 let resItem = ((((address + "/") + assetsString) + "/") + datas)
457466 resItem :: result
466475
467476
468477 func processPZ (result,address) = {
469- let $t01321213266 = getPzData(address)
470- let fee = $t01321213266._1
471- let feeToken = $t01321213266._2
472- let assetsString = $t01321213266._3
478+ let $t01359813689 = getPzData(address)
479+ let fee = $t01359813689._1
480+ let feeToken = $t01359813689._2
481+ let poolTokenId = $t01359813689._3
482+ let poolTokenAmount = $t01359813689._4
483+ let kMult = $t01359813689._5
484+ let assetsString = $t01359813689._6
473485 let rebaData = getPzRebalanceData(address)
474- let resItem = ((((((((address + "/") + toString(fee)) + "/") + feeToken) + "/") + assetsString) + "/") + rebaData)
486+ let resItem = ((((((((((((((address + "/") + toString(fee)) + "/") + feeToken) + "/") + assetsString) + "/") + rebaData) + "/") + poolTokenId) + "/") + toString(poolTokenAmount)) + "/") + toString(kMult))
475487 resItem :: result
476488 }
477489
478490
479491 func processTSN (result,label) = {
480492 let arr = split(label, "_")
481- let $t01354813590 = $Tuple2(arr[0], arr[1])
482- let address = $t01354813590._1
483- let asset_id = $t01354813590._2
484- let $t01359613834 = getTsnData(address, asset_id)
485- let bsAstR = $t01359613834._1
486- let bsAstW = $t01359613834._2
487- let qtAstR = $t01359613834._3
488- let qtAstW = $t01359613834._4
489- let totalPositionSize = $t01359613834._5
490- let maxPriceImpact = $t01359613834._6
491- let maxPriceSpread = $t01359613834._7
492- let oraclePrice = $t01359613834._8
493- let excessBalance = $t01359613834._9
494- let freeBalance = $t01359613834._10
495- let maxSpotUtilization = $t01359613834._11
496- let totalSupply = $t01359613834._12
497- let rate = $t01359613834._13
498- let curHeight = $t01359613834._14
499- let lastHeight = $t01359613834._15
500- let maxOracleDelay = $t01359613834._16
493+ let $t01405114093 = $Tuple2(arr[0], arr[1])
494+ let address = $t01405114093._1
495+ let asset_id = $t01405114093._2
496+ let $t01409914337 = getTsnData(address, asset_id)
497+ let bsAstR = $t01409914337._1
498+ let bsAstW = $t01409914337._2
499+ let qtAstR = $t01409914337._3
500+ let qtAstW = $t01409914337._4
501+ let totalPositionSize = $t01409914337._5
502+ let maxPriceImpact = $t01409914337._6
503+ let maxPriceSpread = $t01409914337._7
504+ let oraclePrice = $t01409914337._8
505+ let excessBalance = $t01409914337._9
506+ let freeBalance = $t01409914337._10
507+ let maxSpotUtilization = $t01409914337._11
508+ let totalSupply = $t01409914337._12
509+ let rate = $t01409914337._13
510+ let curHeight = $t01409914337._14
511+ let lastHeight = $t01409914337._15
512+ let maxOracleDelay = $t01409914337._16
501513 let asset_decimals = if ((asset_id == "WAVES"))
502514 then 8
503515 else valueOrErrorMessage(assetInfo(fromBase58String(asset_id)), ("Ivalid asset " + asset_id)).decimals
508520
509521 func processPL (result,label) = {
510522 let arr = split(label, "-")
511- let $t01472414771 = $Tuple2(arr[0], arr[1])
512- let pool_address = $t01472414771._1
513- let asset_id = $t01472414771._2
514- let $t01477714934 = getPLData(pool_address, asset_id)
515- let asset_idd = $t01477714934._1
516- let plTokenId = $t01477714934._2
517- let sRate = $t01477714934._3
518- let bRate = $t01477714934._4
519- let totalSupplied = $t01477714934._5
520- let totalBorrowed = $t01477714934._6
521- let maxSupply = $t01477714934._7
522- let lastHeight = $t01477714934._8
523- let curHeight = $t01477714934._9
524- let price = $t01477714934._10
525- let decimals = $t01477714934._11
523+ let $t01522715274 = $Tuple2(arr[0], arr[1])
524+ let pool_address = $t01522715274._1
525+ let asset_id = $t01522715274._2
526+ let $t01528015437 = getPLData(pool_address, asset_id)
527+ let asset_idd = $t01528015437._1
528+ let plTokenId = $t01528015437._2
529+ let sRate = $t01528015437._3
530+ let bRate = $t01528015437._4
531+ let totalSupplied = $t01528015437._5
532+ let totalBorrowed = $t01528015437._6
533+ let maxSupply = $t01528015437._7
534+ let lastHeight = $t01528015437._8
535+ let curHeight = $t01528015437._9
536+ let price = $t01528015437._10
537+ let decimals = $t01528015437._11
526538 let resItem = ((((((((((((((((((((((label + ",") + asset_idd) + ",") + plTokenId) + ",") + toString(sRate)) + ",") + toString(bRate)) + ",") + toString(totalSupplied)) + ",") + toString(totalBorrowed)) + ",") + maxSupply) + ",") + toString(lastHeight)) + ",") + toString(curHeight)) + ",") + toString(price)) + ",") + toString(decimals))
527539 resItem :: result
528540 }
711723 let pepe_market = Address(fromBase58String(pepe_market_str))
712724 let storage = tryGetString(k_storage, pepe_market)
713725 let sarr = split_4C(storage, "__")
714- let $t01929219513 = $Tuple9(sarr[0], (sarr[1] == "1"), sarr[2], sarr[3], sarr[4], sarr[5], sarr[6], sarr[7], sarr[8])
715- let lpAssetId = $t01929219513._1
716- let unlocked = $t01929219513._2
717- let lpTotalSupply = $t01929219513._3
718- let lpFeeRate = $t01929219513._4
719- let protocolFeeRate = $t01929219513._5
720- let maxAllocAmplifier = $t01929219513._6
721- let weightAmplifier = $t01929219513._7
722- let slippageRate = $t01929219513._8
723- let feeMaxRate = $t01929219513._9
726+ let $t01982920050 = $Tuple9(sarr[0], (sarr[1] == "1"), sarr[2], sarr[3], sarr[4], sarr[5], sarr[6], sarr[7], sarr[8])
727+ let lpAssetId = $t01982920050._1
728+ let unlocked = $t01982920050._2
729+ let lpTotalSupply = $t01982920050._3
730+ let lpFeeRate = $t01982920050._4
731+ let protocolFeeRate = $t01982920050._5
732+ let maxAllocAmplifier = $t01982920050._6
733+ let weightAmplifier = $t01982920050._7
734+ let slippageRate = $t01982920050._8
735+ let feeMaxRate = $t01982920050._9
724736 let precision = tryGetInteger(k_precision, pepe_market)
725737 let sigmaFeePerLp = tryGetString(k_sigma_fee_per_lp, pepe_market)
726738 let paused = tryGetBool(k_paused, pepe_market)
728740 let lpDecimals = getAssetDecimals(lpAssetId)
729741 let assets = loadPepeAssets(pepe_market)
730742 let decimals_arr = loadPepeDecimals(assets)
731- let $t01990619973 = loadPepeAssetWeights(pepe_market)
732- let assetWeights = $t01990619973._1
733- let sigmaWeight = $t01990619973._2
734- let $t01997920062 = loadPepeAssetBalances(pepe_market)
735- let prevAssetBalances = $t01997920062._1
736- let prevAssetTotalSupply = $t01997920062._2
743+ let $t02044320510 = loadPepeAssetWeights(pepe_market)
744+ let assetWeights = $t02044320510._1
745+ let sigmaWeight = $t02044320510._2
746+ let $t02051620599 = loadPepeAssetBalances(pepe_market)
747+ let prevAssetBalances = $t02051620599._1
748+ let prevAssetTotalSupply = $t02051620599._2
737749 let main_str = ((((((((((((((((((((((((((((((((lpAssetId + ",") + toString(unlocked)) + ",") + lpTotalSupply) + ",") + lpFeeRate) + ",") + protocolFeeRate) + ",") + maxAllocAmplifier) + ",") + weightAmplifier) + ",") + slippageRate) + ",") + feeMaxRate) + ",") + toString(sigmaWeight)) + ",") + toString(prevAssetTotalSupply)) + ",") + toString(precision)) + ",") + sigmaFeePerLp) + ",") + toString(totalLp)) + ",") + toString(paused)) + ",") + toString(lpDecimals)) + ",") + pepe_market_str)
738750 let assets_ids = makeString_11C(assets, ",")
739751 let assets_weights = makeString_11C(assetWeights, ",")
767779
768780 func getCombine (params) = {
769781 let paramsArr = split(params, "**")
770- let $t02152421606 = $Tuple3(paramsArr[0], paramsArr[1], paramsArr[2])
771- let tsnParams = $t02152421606._1
772- let plParams = $t02152421606._2
773- let pepeParams = $t02152421606._3
782+ let $t02206122143 = $Tuple3(paramsArr[0], paramsArr[1], paramsArr[2])
783+ let tsnParams = $t02206122143._1
784+ let plParams = $t02206122143._2
785+ let pepeParams = $t02206122143._3
774786 let tsnData = getTSN(tsnParams)
775787 let plData = getPL(plParams)
776788 let pepeData = getPepe(pepeParams)
781793 func getEastAssetData (assetId) = {
782794 let params = tryGetString(("%s%s__asset__" + assetId), east_proxy)
783795 let paramsArr = split(params, "__")
784- let $t02193721997 = $Tuple2(paramsArr[1], paramsArr[2])
785- let enStr = $t02193721997._1
786- let assetContractStr = $t02193721997._2
796+ let $t02247422534 = $Tuple2(paramsArr[1], paramsArr[2])
797+ let enStr = $t02247422534._1
798+ let assetContractStr = $t02247422534._2
787799 let assetContract = Address(fromBase58String(assetContractStr))
788800 let enabled = if ((enStr == "ENABLED"))
789801 then true
793805 let oracleAddressStr = tryGetString("%s__oracleAddress", assetContract)
794806 let oracleAddress = Address(fromBase58String(oracleAddressStr))
795807 let ticker = tryGetString("%s__ticker", assetContract)
796- let totalEastMinted = tryGetInteger("%s__totalEastMinted", assetContract)
797- let totalAssetAccepted = tryGetInteger("%s__totalAssetAccepted", assetContract)
808+ let eastMintedLimit = tryGetInteger("%s__eastMintedLimit", assetContract)
798809 let price = tryGetInteger(("%s%s__price__" + ticker), oracleAddress)
799- makeString_2C([toString(enabled), toString(backingRatio), toString(liquidationRatio), toString(totalEastMinted), toString(price), toString(totalAssetAccepted)], ",")
810+ makeString_2C([toString(enabled), toString(backingRatio), toString(liquidationRatio), toString(eastMintedLimit), toString(price)], ",")
800811 }
801812
802813
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let rex = "3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU"
55
66 let swopfi_oracle = "3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom"
77
88 let pl_proxy = "3PJESVDTHRv8i83XbmHrRGQhDc5rgR3azQs"
99
1010 let orcl = "3P8d1E1BLKoD52y3bQJ1bDTd2TD1gpaLn9t"
1111
1212 let wx_factory_str = "3PCuHsTU58WKhCqotbcSwABvdPzqqVAbbTv"
1313
1414 let wx_swap_str = "3P68zNiufsu1viZpu1aY3cdahRRKcvV5N93"
1515
1616 let east_proxy_str = "3PMtGnf3LXiEG6isDQLq1xMDKUqjQGqNHLb"
1717
1818 let east_coordinator = "3PJ5CVRqW15nnkKNHJMzT3pPTtDJf71rGxK"
1919
2020 let wx_factory = Address(fromBase58String(wx_factory_str))
2121
2222 let wx_swap = Address(fromBase58String(wx_swap_str))
2323
2424 let east_proxy = Address(fromBase58String(east_proxy_str))
2525
2626 let K_am_as_id = "%s__amountAsset"
2727
2828 let K_pr_as_id = "%s__priceAsset"
2929
3030 let K_amp = "%s__amp"
3131
3232 let K_share = "%s%s__shareAssetBalance__YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7"
3333
3434 let K_staked = "%s%s__stakedBalance__WAVES"
3535
3636 let K_a_as_id = "A_asset_id"
3737
3838 let K_b_as_id = "B_asset_id"
3939
4040 let K_a_as_bal = "A_asset_balance"
4141
4242 let K_b_as_bal = "B_asset_balance"
4343
4444 let K_fee = "commission"
4545
4646 let K_asset_ids = "static_tokenIds"
4747
4848 let K_fee_puz = "static_fee"
4949
5050 let K_feeToken = "static_feeToken"
51+
52+let K_global_poolToken_id = "global_poolToken_id"
53+
54+let K_global_poolToken_amount = "global_poolToken_amount"
55+
56+let K_static_KMult = "static_KMult"
5157
5258 let K_tmp_reblanceAssetIds = "tmp_rebalanceAssetIds"
5359
5460 let K_rebalance_inProgress = "rebalance_inProgress"
5561
5662 let K_rebalance_stepsDone = "rebalance_stepsDone"
5763
5864 let K_rebalance_stepsAmount = "rebalance_stepsAmount"
5965
6066 let K_rebalance_assetDeltas = "rebalance_assetDeltas"
6167
6268 let K_rebalance_attachedPayment = "rebalance_attachedPayment_"
6369
6470 let tsn_swapper = "3PKz5jnJLohF2GjShQ7bG5H4BebdoA98zZ2"
6571
6672 let tsn_swapper_addr = Address(fromBase58String(tsn_swapper))
6773
6874 let k_fee = "k_fee"
6975
7076 let k_rebate = "k_rebate"
7177
7278 let k_feeToStakersPercent = "k_feeToStakersPercent"
7379
7480 let k_excessBalance = "k_excessBalance"
7581
7682 let k_freeBalance = "k_freeBalance"
7783
7884 let k_maxSpotUtilization = "k_maxSpotUtilization"
7985
8086 let k_totalSupply = "k_totalSupply"
8187
8288 let k_rate = "k_rate"
8389
8490 let k_bsAstR = "k_bsAstR"
8591
8692 let k_bsAstW = "k_bsAstW"
8793
8894 let k_qtAstR = "k_qtAstR"
8995
9096 let k_qtAstW = "k_qtAstW"
9197
9298 let k_maxPriceImpact = "k_maxPriceImpact"
9399
94100 let k_maxPriceSpread = "k_maxPriceSpread"
95101
96102 let k_totalPositionSize = "k_totalPositionSize"
97103
98104 let k_baseOracle = "k_baseOracle"
99105
100106 let k_maxOracleDelay = "k_maxOracleDelay"
101107
102108 let k_storage = "STORAGE"
103109
104110 let k_assets = "ASSETS"
105111
106112 let k_status = "STATUS"
107113
108114 let k_paused = "PAUSED"
109115
110116 let k_asset_balances = "ASSET_BALANCES"
111117
112118 let k_asset_weights = "ASSET_WEIGHTS"
113119
114120 let k_lp_fee = "LP_FEE"
115121
116122 let k_protocol_fee = "PROTOCOL_FEE"
117123
118124 let k_precision = "PRECISION"
119125
120126 let k_sigma_fee_per_lp = "SIGMA_FEE_PER_LP"
121127
122128 let k_user_sigma_fee_per_lp = "USER_SIGMA_FEE_PER_LP"
123129
124130 let k_user_lp = "USER_LP"
125131
126132 let k_total_lp = "TOTAL_LP"
127133
128134 let k_user_profits = "USER_PROFITS"
129135
130136 func get_domain (poolAddress) = match poolAddress {
131137 case _ =>
132138 if (("3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH" == $match0))
133139 then "1"
134140 else "0"
135141 }
136142
137143
138144 func k_plToken (asset_id,domain) = ((("setup_pl_" + asset_id) + "_") + domain)
139145
140146
141147 func k_total_supplied (asset_id) = ("total_supplied_" + asset_id)
142148
143149
144150 func k_sRate (asset_id) = (asset_id + "_sRate")
145151
146152
147153 func k_total_borrowed (asset_id) = ("total_borrowed_" + asset_id)
148154
149155
150156 func k_bRate (asset_id) = (asset_id + "_bRate")
151157
152158
153159 func k_maxSupply (asset_id) = ("setup_maxSupply_" + asset_id)
154160
155161
156162 let k_lastRateHeight = "lastRateHeight"
157163
158164 func getPuzBalanceKey (assetId) = (("global_" + assetId) + "_balance")
159165
160166
161167 func getPuzWeightKey (assetId) = (("static_" + assetId) + "_weight")
162168
163169
164170 func getBPAK (address) = (address + "_staticAssetsIds")
165171
166172
167173 func tryGetString (key,address) = match getString(address, key) {
168174 case b: String =>
169175 b
170176 case _ =>
171177 ""
172178 }
173179
174180
175181 func tryGetBool (key,address) = match getBoolean(address, key) {
176182 case b: Boolean =>
177183 b
178184 case _ =>
179185 false
180186 }
181187
182188
183189 func tryGetInteger (key,address) = match getInteger(address, key) {
184190 case b: Int =>
185191 b
186192 case _ =>
187193 0
188194 }
189195
190196
191197 func tryGetIntegerWithDef (key,address,def) = match getInteger(address, key) {
192198 case b: Int =>
193199 b
194200 case _ =>
195201 def
196202 }
197203
198204
199205 func getWxDefaultFees () = {
200206 let poolFee = tryGetIntegerWithDef("%s__poolFee", wx_swap, 200000)
201207 let protocolFee = tryGetIntegerWithDef("%s__protocolFee", wx_swap, 200000)
202208 $Tuple2(toString(poolFee), toString(protocolFee))
203209 }
204210
205211
206212 func getWxPoolFees (address) = {
207213 let feesKey = ("%s%s__swapFee__" + address)
208214 let fees = tryGetString(feesKey, wx_factory)
209215 if ((fees == ""))
210216 then getWxDefaultFees()
211217 else {
212218 let splittedFees = split(fees, "__")
213219 $Tuple2(splittedFees[1], splittedFees[2])
214220 }
215221 }
216222
217223
218224 func getAssetBalance (address,assetId) = {
219225 let a = assetBalance(address, assetId)
220226 a
221227 }
222228
223229
224230 func getWavesBalance (address) = {
225231 let w = wavesBalance(address).available
226232 w
227233 }
228234
229235
230236 func getBalance (result,assetId) = {
231237 let address = take(result, 35)
232238 let addr = Address(fromBase58String(address))
233239 let balance = if ((assetId == "WAVES"))
234240 then getWavesBalance(addr)
235241 else {
236242 let aId = fromBase58String(assetId)
237243 getAssetBalance(addr, aId)
238244 }
239245 let len = size(result)
240246 (((((address + drop(result, 35)) + assetId) + ":") + toString(balance)) + ",")
241247 }
242248
243249
244250 func getAddressBalance (addr,assetId) = {
245251 let balance = if ((assetId == "WAVES"))
246252 then getWavesBalance(addr)
247253 else {
248254 let aId = fromBase58String(assetId)
249255 getAssetBalance(addr, aId)
250256 }
251257 balance
252258 }
253259
254260
255261 func getAssetDecimals (assetIdStr) = {
256262 let decimals = if ((assetIdStr == "WAVES"))
257263 then 8
258264 else value(assetInfo(fromBase58String(assetIdStr))).decimals
259265 decimals
260266 }
261267
262268
263269 func getWxData (address) = {
264270 let addr = Address(fromBase58String(address))
265271 let amountId = tryGetString(K_am_as_id, addr)
266272 let priceId = tryGetString(K_pr_as_id, addr)
267273 let amp = tryGetString(K_amp, addr)
268274 let share = tryGetInteger(K_share, addr)
269275 let stake = tryGetInteger(K_staked, addr)
270- let $t065266577 = getWxPoolFees(address)
271- let poolFee = $t065266577._1
272- let protocolFee = $t065266577._2
276+ let $t066736724 = getWxPoolFees(address)
277+ let poolFee = $t066736724._1
278+ let protocolFee = $t066736724._2
273279 $Tuple2(((amountId + ",") + priceId), ((((((((amp + ",") + toString(share)) + ",") + toString(stake)) + ",") + poolFee) + ",") + protocolFee))
274280 }
275281
276282
277283 func getSwData (address) = {
278284 let addr = Address(fromBase58String(address))
279285 let A_id = tryGetString(K_a_as_id, addr)
280286 let B_id = tryGetString(K_b_as_id, addr)
281287 let A_balance = tryGetInteger(K_a_as_bal, addr)
282288 let B_balance = tryGetInteger(K_b_as_bal, addr)
283289 let fee = tryGetIntegerWithDef(K_fee, addr, 6000)
284290 let deprecated = tryGetBool(("deprecated_" + address), Address(fromBase58String(swopfi_oracle)))
285291 ((((((((((A_id + ":") + toString(A_balance)) + ",") + B_id) + ":") + toString(B_balance)) + ",") + toString(fee)) + ",") + toString(deprecated))
286292 }
287293
288294
289295 func getPzRebalanceData (address) = {
290296 let addr = Address(fromBase58String(address))
291297 let tmpAssetsStr = valueOrElse(getString(addr, K_tmp_reblanceAssetIds), "")
292298 let inProgress = valueOrElse(getBoolean(addr, K_rebalance_inProgress), false)
293299 let stepsDone = valueOrElse(getInteger(addr, K_rebalance_stepsDone), 0)
294300 let stepsAmount = valueOrElse(getInteger(addr, K_rebalance_stepsAmount), 0)
295301 let assetDeltas = valueOrElse(getString(addr, K_rebalance_assetDeltas), "")
296302 let tmpAssets = split(tmpAssetsStr, ",")
297303 func collectPayments (accum,assetId) = {
298304 let key = (K_rebalance_attachedPayment + assetId)
299305 let val = tryGetInteger(key, addr)
300306 if ((val != 0))
301307 then (accum ++ [((key + "*") + toString(val))])
302308 else accum
303309 }
304310
305311 let rebalancePayments = {
306312 let $l = tmpAssets
307313 let $s = size($l)
308314 let $acc0 = nil
309315 func $f0_1 ($a,$i) = if (($i >= $s))
310316 then $a
311317 else collectPayments($a, $l[$i])
312318
313319 func $f0_2 ($a,$i) = if (($i >= $s))
314320 then $a
315321 else throw("List size exceeds 10")
316322
317323 $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)
318324 }
319325 let rebalancePaymentsStr = makeString(rebalancePayments, ",")
320326 ((((((((((tmpAssetsStr + ";") + toString(inProgress)) + ";") + toString(stepsDone)) + ";") + toString(stepsAmount)) + ";") + assetDeltas) + ";") + rebalancePaymentsStr)
321327 }
322328
323329
324330 func collectPuzAssetsData (result,assetId) = {
325331 let len = size(result)
326332 let address = result[(len - 1)]
327333 let addr = Address(fromBase58String(address))
328334 let balanceKey = getPuzBalanceKey(assetId)
329335 let weightKey = getPuzWeightKey(assetId)
330336 let balance = tryGetInteger(balanceKey, addr)
331337 let weight = tryGetInteger(weightKey, addr)
332338 let realBalance = getAddressBalance(addr, assetId)
333339 let res = ((((((assetId + ",") + toString(balance)) + ",") + toString(weight)) + ",") + toString(realBalance))
334340 res :: result
335341 }
336342
337343
338344 func getPzData (address) = {
339345 let addr = Address(fromBase58String(address))
340346 let fee1 = tryGetInteger(K_fee_puz, addr)
341347 let feeToken = tryGetString(K_feeToken, addr)
342348 let assetsStr1 = tryGetString(K_asset_ids, addr)
343- let $t092139366 = if ((assetsStr1 == ""))
349+ let $t093609513 = if ((assetsStr1 == ""))
344350 then $Tuple2(tryGetString(getBPAK(address), this), 200)
345351 else $Tuple2(assetsStr1, fee1)
346- let assetsStr = $t092139366._1
347- let fee = $t092139366._2
352+ let assetsStr = $t093609513._1
353+ let fee = $t093609513._2
348354 let assets = split(assetsStr, ",")
349355 let assetsData = {
350356 let $l = assets
351357 let $s = size($l)
352358 let $acc0 = [address]
353359 func $f0_1 ($a,$i) = if (($i >= $s))
354360 then $a
355361 else collectPuzAssetsData($a, $l[$i])
356362
357363 func $f0_2 ($a,$i) = if (($i >= $s))
358364 then $a
359365 else throw("List size exceeds 10")
360366
361367 $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)
362368 }
363369 let len = size(assetsData)
364370 let assetsArr = removeByIndex(assetsData, (len - 1))
365371 let assetsDataStr = makeString_2C(assetsArr, ";")
366- $Tuple3(fee, feeToken, assetsDataStr)
372+ let poolTokenId = tryGetString(K_global_poolToken_id, addr)
373+ let poolTokenAmount = tryGetInteger(K_global_poolToken_amount, addr)
374+ let kMult = tryGetIntegerWithDef(K_static_KMult, addr, 1)
375+ $Tuple6(fee, feeToken, poolTokenId, poolTokenAmount, kMult, assetsDataStr)
367376 }
368377
369378
370379 func getTsnData (address,asset_id) = {
371380 let addr = Address(fromBase58String(address))
372381 let bsAstR = tryGetInteger(k_bsAstR, addr)
373382 let bsAstW = tryGetInteger(k_bsAstW, addr)
374383 let qtAstR = tryGetInteger(k_qtAstR, addr)
375384 let qtAstW = tryGetInteger(k_qtAstW, addr)
376385 let maxPriceImpact = tryGetInteger(k_maxPriceImpact, addr)
377386 let maxPriceSpread = tryGetInteger(k_maxPriceSpread, addr)
378387 let totalPositionSize = tryGetInteger(k_totalPositionSize, addr)
379388 let maxOracleDelay = tryGetInteger(k_maxOracleDelay, addr)
380389 let oracleString = tryGetString(k_baseOracle, addr)
381390 let arr = split(oracleString, ",")
382- let $t01032710393 = $Tuple3(arr[0], arr[1], arr[2])
383- let oracleAddress = $t01032710393._1
384- let priceKey = $t01032710393._2
385- let blockKey = $t01032710393._3
391+ let $t01071310779 = $Tuple3(arr[0], arr[1], arr[2])
392+ let oracleAddress = $t01071310779._1
393+ let priceKey = $t01071310779._2
394+ let blockKey = $t01071310779._3
386395 let oracleAddr = Address(fromBase58String(oracleAddress))
387396 let oraclePrice = tryGetInteger(priceKey, oracleAddr)
388397 let curHeight = height
389398 let lastHeight = if ((blockKey != ""))
390399 then tryGetInteger(blockKey, oracleAddr)
391400 else curHeight
392401 let vault = tryGetString(("k_asset_vault_" + asset_id), tsn_swapper_addr)
393402 let vault_addr = Address(fromBase58String(vault))
394403 let excessBalance = tryGetInteger(k_excessBalance, vault_addr)
395404 let freeBalance = tryGetInteger(k_freeBalance, vault_addr)
396405 let maxSpotUtilization = tryGetInteger(k_maxSpotUtilization, vault_addr)
397406 let totalSupply = tryGetInteger(k_totalSupply, vault_addr)
398407 let rate = tryGetInteger(k_rate, vault_addr)
399408 $Tuple16(bsAstR, bsAstW, qtAstR, qtAstW, totalPositionSize, maxPriceImpact, maxPriceSpread, oraclePrice, excessBalance, freeBalance, maxSpotUtilization, totalSupply, rate, curHeight, lastHeight, maxOracleDelay)
400409 }
401410
402411
403412 func getPrice (assetId) = {
404413 let price = tryGetInteger((assetId + "_twap5B"), Address(fromBase58String(orcl)))
405414 price
406415 }
407416
408417
409418 func getPLData (pool_address,asset_id) = {
410419 let domain = get_domain(pool_address)
411420 let poolAdr = Address(fromBase58String(pool_address))
412421 let plTokenId = tryGetString(k_plToken(asset_id, domain), Address(fromBase58String(pl_proxy)))
413422 let sRate = tryGetInteger(k_sRate(asset_id), poolAdr)
414423 let bRate = tryGetInteger(k_bRate(asset_id), poolAdr)
415424 let totalSupplied = tryGetInteger(k_total_supplied(asset_id), poolAdr)
416425 let totalBorrowed = tryGetInteger(k_total_borrowed(asset_id), poolAdr)
417426 let maxSupply = tryGetString(k_maxSupply(asset_id), poolAdr)
418427 let lastHeight = tryGetInteger(k_lastRateHeight, poolAdr)
419428 let curHeight = height
420429 let price = getPrice(asset_id)
421430 let decimals = getAssetDecimals(asset_id)
422431 $Tuple11(asset_id, plTokenId, sRate, bRate, totalSupplied, totalBorrowed, maxSupply, lastHeight, curHeight, price, decimals)
423432 }
424433
425434
426435 func test_loop (result,ele) = ele :: result
427436
428437
429438 func getBalancesStr (assetsStr,address) = {
430439 let assets = split_4C(assetsStr, ",")
431440 let res = {
432441 let $l = assets
433442 let $s = size($l)
434443 let $acc0 = address
435444 func $f0_1 ($a,$i) = if (($i >= $s))
436445 then $a
437446 else getBalance($a, $l[$i])
438447
439448 func $f0_2 ($a,$i) = if (($i >= $s))
440449 then $a
441450 else throw("List size exceeds 2")
442451
443452 $f0_2($f0_1($f0_1($acc0, 0), 1), 2)
444453 }
445454 let balances = drop(res, 35)
446455 let bals = dropRight(balances, 1)
447456 bals
448457 }
449458
450459
451460 func processWX (result,address) = {
452- let $t01276912812 = getWxData(address)
453- let assetsStr = $t01276912812._1
454- let datas = $t01276912812._2
461+ let $t01315513198 = getWxData(address)
462+ let assetsStr = $t01315513198._1
463+ let datas = $t01315513198._2
455464 let assetsString = getBalancesStr(assetsStr, address)
456465 let resItem = ((((address + "/") + assetsString) + "/") + datas)
457466 resItem :: result
458467 }
459468
460469
461470 func processSW (result,address) = {
462471 let assetsString = getSwData(address)
463472 let resItem = ((address + "/") + assetsString)
464473 resItem :: result
465474 }
466475
467476
468477 func processPZ (result,address) = {
469- let $t01321213266 = getPzData(address)
470- let fee = $t01321213266._1
471- let feeToken = $t01321213266._2
472- let assetsString = $t01321213266._3
478+ let $t01359813689 = getPzData(address)
479+ let fee = $t01359813689._1
480+ let feeToken = $t01359813689._2
481+ let poolTokenId = $t01359813689._3
482+ let poolTokenAmount = $t01359813689._4
483+ let kMult = $t01359813689._5
484+ let assetsString = $t01359813689._6
473485 let rebaData = getPzRebalanceData(address)
474- let resItem = ((((((((address + "/") + toString(fee)) + "/") + feeToken) + "/") + assetsString) + "/") + rebaData)
486+ let resItem = ((((((((((((((address + "/") + toString(fee)) + "/") + feeToken) + "/") + assetsString) + "/") + rebaData) + "/") + poolTokenId) + "/") + toString(poolTokenAmount)) + "/") + toString(kMult))
475487 resItem :: result
476488 }
477489
478490
479491 func processTSN (result,label) = {
480492 let arr = split(label, "_")
481- let $t01354813590 = $Tuple2(arr[0], arr[1])
482- let address = $t01354813590._1
483- let asset_id = $t01354813590._2
484- let $t01359613834 = getTsnData(address, asset_id)
485- let bsAstR = $t01359613834._1
486- let bsAstW = $t01359613834._2
487- let qtAstR = $t01359613834._3
488- let qtAstW = $t01359613834._4
489- let totalPositionSize = $t01359613834._5
490- let maxPriceImpact = $t01359613834._6
491- let maxPriceSpread = $t01359613834._7
492- let oraclePrice = $t01359613834._8
493- let excessBalance = $t01359613834._9
494- let freeBalance = $t01359613834._10
495- let maxSpotUtilization = $t01359613834._11
496- let totalSupply = $t01359613834._12
497- let rate = $t01359613834._13
498- let curHeight = $t01359613834._14
499- let lastHeight = $t01359613834._15
500- let maxOracleDelay = $t01359613834._16
493+ let $t01405114093 = $Tuple2(arr[0], arr[1])
494+ let address = $t01405114093._1
495+ let asset_id = $t01405114093._2
496+ let $t01409914337 = getTsnData(address, asset_id)
497+ let bsAstR = $t01409914337._1
498+ let bsAstW = $t01409914337._2
499+ let qtAstR = $t01409914337._3
500+ let qtAstW = $t01409914337._4
501+ let totalPositionSize = $t01409914337._5
502+ let maxPriceImpact = $t01409914337._6
503+ let maxPriceSpread = $t01409914337._7
504+ let oraclePrice = $t01409914337._8
505+ let excessBalance = $t01409914337._9
506+ let freeBalance = $t01409914337._10
507+ let maxSpotUtilization = $t01409914337._11
508+ let totalSupply = $t01409914337._12
509+ let rate = $t01409914337._13
510+ let curHeight = $t01409914337._14
511+ let lastHeight = $t01409914337._15
512+ let maxOracleDelay = $t01409914337._16
501513 let asset_decimals = if ((asset_id == "WAVES"))
502514 then 8
503515 else valueOrErrorMessage(assetInfo(fromBase58String(asset_id)), ("Ivalid asset " + asset_id)).decimals
504516 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))
505517 resItem :: result
506518 }
507519
508520
509521 func processPL (result,label) = {
510522 let arr = split(label, "-")
511- let $t01472414771 = $Tuple2(arr[0], arr[1])
512- let pool_address = $t01472414771._1
513- let asset_id = $t01472414771._2
514- let $t01477714934 = getPLData(pool_address, asset_id)
515- let asset_idd = $t01477714934._1
516- let plTokenId = $t01477714934._2
517- let sRate = $t01477714934._3
518- let bRate = $t01477714934._4
519- let totalSupplied = $t01477714934._5
520- let totalBorrowed = $t01477714934._6
521- let maxSupply = $t01477714934._7
522- let lastHeight = $t01477714934._8
523- let curHeight = $t01477714934._9
524- let price = $t01477714934._10
525- let decimals = $t01477714934._11
523+ let $t01522715274 = $Tuple2(arr[0], arr[1])
524+ let pool_address = $t01522715274._1
525+ let asset_id = $t01522715274._2
526+ let $t01528015437 = getPLData(pool_address, asset_id)
527+ let asset_idd = $t01528015437._1
528+ let plTokenId = $t01528015437._2
529+ let sRate = $t01528015437._3
530+ let bRate = $t01528015437._4
531+ let totalSupplied = $t01528015437._5
532+ let totalBorrowed = $t01528015437._6
533+ let maxSupply = $t01528015437._7
534+ let lastHeight = $t01528015437._8
535+ let curHeight = $t01528015437._9
536+ let price = $t01528015437._10
537+ let decimals = $t01528015437._11
526538 let resItem = ((((((((((((((((((((((label + ",") + asset_idd) + ",") + plTokenId) + ",") + toString(sRate)) + ",") + toString(bRate)) + ",") + toString(totalSupplied)) + ",") + toString(totalBorrowed)) + ",") + maxSupply) + ",") + toString(lastHeight)) + ",") + toString(curHeight)) + ",") + toString(price)) + ",") + toString(decimals))
527539 resItem :: result
528540 }
529541
530542
531543 func getWX (params) = {
532544 let pools = split_51C(params, ",")
533545 let resArr = {
534546 let $l = pools
535547 let $s = size($l)
536548 let $acc0 = nil
537549 func $f0_1 ($a,$i) = if (($i >= $s))
538550 then $a
539551 else processWX($a, $l[$i])
540552
541553 func $f0_2 ($a,$i) = if (($i >= $s))
542554 then $a
543555 else throw("List size exceeds 120")
544556
545557 $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)
546558 }
547559 let result = makeString_11C(resArr, "|")
548560 result
549561 }
550562
551563
552564 func getSW (params) = {
553565 let pools = split_4C(params, ",")
554566 let resArr = {
555567 let $l = pools
556568 let $s = size($l)
557569 let $acc0 = nil
558570 func $f0_1 ($a,$i) = if (($i >= $s))
559571 then $a
560572 else processSW($a, $l[$i])
561573
562574 func $f0_2 ($a,$i) = if (($i >= $s))
563575 then $a
564576 else throw("List size exceeds 100")
565577
566578 $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)
567579 }
568580 let result = makeString_11C(resArr, "|")
569581 result
570582 }
571583
572584
573585 func getPZ (params) = {
574586 let pools = split_4C(params, ",")
575587 let resArr = {
576588 let $l = pools
577589 let $s = size($l)
578590 let $acc0 = nil
579591 func $f0_1 ($a,$i) = if (($i >= $s))
580592 then $a
581593 else processPZ($a, $l[$i])
582594
583595 func $f0_2 ($a,$i) = if (($i >= $s))
584596 then $a
585597 else throw("List size exceeds 100")
586598
587599 $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)
588600 }
589601 let result = makeString_11C(resArr, "|")
590602 result
591603 }
592604
593605
594606 func getTSN (params) = {
595607 let vaults_labels = split(params, ",")
596608 let resArr = {
597609 let $l = vaults_labels
598610 let $s = size($l)
599611 let $acc0 = nil
600612 func $f0_1 ($a,$i) = if (($i >= $s))
601613 then $a
602614 else processTSN($a, $l[$i])
603615
604616 func $f0_2 ($a,$i) = if (($i >= $s))
605617 then $a
606618 else throw("List size exceeds 10")
607619
608620 $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)
609621 }
610622 let result = makeString_2C(resArr, "|")
611623 let fee = tryGetInteger(k_fee, tsn_swapper_addr)
612624 let rebate = tryGetInteger(k_rebate, tsn_swapper_addr)
613625 let feeToStakersPercent = tryGetInteger(k_feeToStakersPercent, tsn_swapper_addr)
614626 ((((((toString(fee) + ",") + toString(rebate)) + ",") + toString(feeToStakersPercent)) + "/") + result)
615627 }
616628
617629
618630 func getPL (params) = {
619631 let pools = split(params, ",")
620632 let resArr = {
621633 let $l = pools
622634 let $s = size($l)
623635 let $acc0 = nil
624636 func $f0_1 ($a,$i) = if (($i >= $s))
625637 then $a
626638 else processPL($a, $l[$i])
627639
628640 func $f0_2 ($a,$i) = if (($i >= $s))
629641 then $a
630642 else throw("List size exceeds 10")
631643
632644 $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)
633645 }
634646 let result = makeString_2C(resArr, "|")
635647 result
636648 }
637649
638650
639651 func loadPepeAssets (pepe_market) = {
640652 let assets = tryGetString(k_assets, pepe_market)
641653 split_4C(assets, "__")
642654 }
643655
644656
645657 func loadPepeAssetBalances (pepe_market) = {
646658 func foldFunc (acc,elem) = {
647659 let balance = parseIntValue(elem)
648660 $Tuple2((acc._1 :+ elem), (acc._2 + balance))
649661 }
650662
651663 let assetBalances = tryGetString(k_asset_balances, pepe_market)
652664 let $l = split_51C(assetBalances, "__")
653665 let $s = size($l)
654666 let $acc0 = $Tuple2(nil, 0)
655667 func $f0_1 ($a,$i) = if (($i >= $s))
656668 then $a
657669 else foldFunc($a, $l[$i])
658670
659671 func $f0_2 ($a,$i) = if (($i >= $s))
660672 then $a
661673 else throw("List size exceeds 10")
662674
663675 $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)
664676 }
665677
666678
667679 func loadPepeAssetWeights (pepe_market) = {
668680 func foldFunc (acc,elem) = {
669681 let weight = parseIntValue(elem)
670682 $Tuple2((acc._1 :+ elem), (acc._2 + weight))
671683 }
672684
673685 let assetWeights = tryGetString(k_asset_weights, pepe_market)
674686 let $l = split_4C(assetWeights, "__")
675687 let $s = size($l)
676688 let $acc0 = $Tuple2(nil, 0)
677689 func $f0_1 ($a,$i) = if (($i >= $s))
678690 then $a
679691 else foldFunc($a, $l[$i])
680692
681693 func $f0_2 ($a,$i) = if (($i >= $s))
682694 then $a
683695 else throw("List size exceeds 10")
684696
685697 $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)
686698 }
687699
688700
689701 func loadPepeDecimals (assets) = {
690702 func getDecs (acc,item) = {
691703 let decimals = getAssetDecimals(item)
692704 (acc :+ toString(decimals))
693705 }
694706
695707 let $l = assets
696708 let $s = size($l)
697709 let $acc0 = nil
698710 func $f0_1 ($a,$i) = if (($i >= $s))
699711 then $a
700712 else getDecs($a, $l[$i])
701713
702714 func $f0_2 ($a,$i) = if (($i >= $s))
703715 then $a
704716 else throw("List size exceeds 11")
705717
706718 $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)
707719 }
708720
709721
710722 func processPepe (result,pepe_market_str) = {
711723 let pepe_market = Address(fromBase58String(pepe_market_str))
712724 let storage = tryGetString(k_storage, pepe_market)
713725 let sarr = split_4C(storage, "__")
714- let $t01929219513 = $Tuple9(sarr[0], (sarr[1] == "1"), sarr[2], sarr[3], sarr[4], sarr[5], sarr[6], sarr[7], sarr[8])
715- let lpAssetId = $t01929219513._1
716- let unlocked = $t01929219513._2
717- let lpTotalSupply = $t01929219513._3
718- let lpFeeRate = $t01929219513._4
719- let protocolFeeRate = $t01929219513._5
720- let maxAllocAmplifier = $t01929219513._6
721- let weightAmplifier = $t01929219513._7
722- let slippageRate = $t01929219513._8
723- let feeMaxRate = $t01929219513._9
726+ let $t01982920050 = $Tuple9(sarr[0], (sarr[1] == "1"), sarr[2], sarr[3], sarr[4], sarr[5], sarr[6], sarr[7], sarr[8])
727+ let lpAssetId = $t01982920050._1
728+ let unlocked = $t01982920050._2
729+ let lpTotalSupply = $t01982920050._3
730+ let lpFeeRate = $t01982920050._4
731+ let protocolFeeRate = $t01982920050._5
732+ let maxAllocAmplifier = $t01982920050._6
733+ let weightAmplifier = $t01982920050._7
734+ let slippageRate = $t01982920050._8
735+ let feeMaxRate = $t01982920050._9
724736 let precision = tryGetInteger(k_precision, pepe_market)
725737 let sigmaFeePerLp = tryGetString(k_sigma_fee_per_lp, pepe_market)
726738 let paused = tryGetBool(k_paused, pepe_market)
727739 let totalLp = tryGetInteger(k_total_lp, pepe_market)
728740 let lpDecimals = getAssetDecimals(lpAssetId)
729741 let assets = loadPepeAssets(pepe_market)
730742 let decimals_arr = loadPepeDecimals(assets)
731- let $t01990619973 = loadPepeAssetWeights(pepe_market)
732- let assetWeights = $t01990619973._1
733- let sigmaWeight = $t01990619973._2
734- let $t01997920062 = loadPepeAssetBalances(pepe_market)
735- let prevAssetBalances = $t01997920062._1
736- let prevAssetTotalSupply = $t01997920062._2
743+ let $t02044320510 = loadPepeAssetWeights(pepe_market)
744+ let assetWeights = $t02044320510._1
745+ let sigmaWeight = $t02044320510._2
746+ let $t02051620599 = loadPepeAssetBalances(pepe_market)
747+ let prevAssetBalances = $t02051620599._1
748+ let prevAssetTotalSupply = $t02051620599._2
737749 let main_str = ((((((((((((((((((((((((((((((((lpAssetId + ",") + toString(unlocked)) + ",") + lpTotalSupply) + ",") + lpFeeRate) + ",") + protocolFeeRate) + ",") + maxAllocAmplifier) + ",") + weightAmplifier) + ",") + slippageRate) + ",") + feeMaxRate) + ",") + toString(sigmaWeight)) + ",") + toString(prevAssetTotalSupply)) + ",") + toString(precision)) + ",") + sigmaFeePerLp) + ",") + toString(totalLp)) + ",") + toString(paused)) + ",") + toString(lpDecimals)) + ",") + pepe_market_str)
738750 let assets_ids = makeString_11C(assets, ",")
739751 let assets_weights = makeString_11C(assetWeights, ",")
740752 let assets_balances = makeString_11C(prevAssetBalances, ",")
741753 let assets_decimals = makeString_11C(decimals_arr, ",")
742754 let res = ((((((((main_str + "|") + assets_ids) + "|") + assets_weights) + "|") + assets_balances) + "|") + assets_decimals)
743755 (result :+ res)
744756 }
745757
746758
747759 func getPepe (params) = {
748760 let addresses = split(params, ",")
749761 let resArr = {
750762 let $l = addresses
751763 let $s = size($l)
752764 let $acc0 = nil
753765 func $f0_1 ($a,$i) = if (($i >= $s))
754766 then $a
755767 else processPepe($a, $l[$i])
756768
757769 func $f0_2 ($a,$i) = if (($i >= $s))
758770 then $a
759771 else throw("List size exceeds 10")
760772
761773 $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)
762774 }
763775 let result = makeString_11C(resArr, ";")
764776 result
765777 }
766778
767779
768780 func getCombine (params) = {
769781 let paramsArr = split(params, "**")
770- let $t02152421606 = $Tuple3(paramsArr[0], paramsArr[1], paramsArr[2])
771- let tsnParams = $t02152421606._1
772- let plParams = $t02152421606._2
773- let pepeParams = $t02152421606._3
782+ let $t02206122143 = $Tuple3(paramsArr[0], paramsArr[1], paramsArr[2])
783+ let tsnParams = $t02206122143._1
784+ let plParams = $t02206122143._2
785+ let pepeParams = $t02206122143._3
774786 let tsnData = getTSN(tsnParams)
775787 let plData = getPL(plParams)
776788 let pepeData = getPepe(pepeParams)
777789 makeString_11C([tsnData, plData, pepeData], "**")
778790 }
779791
780792
781793 func getEastAssetData (assetId) = {
782794 let params = tryGetString(("%s%s__asset__" + assetId), east_proxy)
783795 let paramsArr = split(params, "__")
784- let $t02193721997 = $Tuple2(paramsArr[1], paramsArr[2])
785- let enStr = $t02193721997._1
786- let assetContractStr = $t02193721997._2
796+ let $t02247422534 = $Tuple2(paramsArr[1], paramsArr[2])
797+ let enStr = $t02247422534._1
798+ let assetContractStr = $t02247422534._2
787799 let assetContract = Address(fromBase58String(assetContractStr))
788800 let enabled = if ((enStr == "ENABLED"))
789801 then true
790802 else false
791803 let backingRatio = tryGetInteger("%s__backingRatio", assetContract)
792804 let liquidationRatio = tryGetInteger("%s__liquidationRatio", assetContract)
793805 let oracleAddressStr = tryGetString("%s__oracleAddress", assetContract)
794806 let oracleAddress = Address(fromBase58String(oracleAddressStr))
795807 let ticker = tryGetString("%s__ticker", assetContract)
796- let totalEastMinted = tryGetInteger("%s__totalEastMinted", assetContract)
797- let totalAssetAccepted = tryGetInteger("%s__totalAssetAccepted", assetContract)
808+ let eastMintedLimit = tryGetInteger("%s__eastMintedLimit", assetContract)
798809 let price = tryGetInteger(("%s%s__price__" + ticker), oracleAddress)
799- makeString_2C([toString(enabled), toString(backingRatio), toString(liquidationRatio), toString(totalEastMinted), toString(price), toString(totalAssetAccepted)], ",")
810+ makeString_2C([toString(enabled), toString(backingRatio), toString(liquidationRatio), toString(eastMintedLimit), toString(price)], ",")
800811 }
801812
802813
803814 func getEastLiquidation (params) = {
804815 let paramsArr = split(params, ",")
805816 func f (accum,next) = (accum :+ ((next + ",") + getEastAssetData(next)))
806817
807818 let res = {
808819 let $l = paramsArr
809820 let $s = size($l)
810821 let $acc0 = nil
811822 func $f0_1 ($a,$i) = if (($i >= $s))
812823 then $a
813824 else f($a, $l[$i])
814825
815826 func $f0_2 ($a,$i) = if (($i >= $s))
816827 then $a
817828 else throw("List size exceeds 10")
818829
819830 $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)
820831 }
821832 let assetsData = makeString_11C(res, ";")
822833 let cumulativeFeeFraction = tryGetInteger("%s__cumulativeFeeFraction", east_proxy)
823834 let currTs = (lastBlock.timestamp / 1000)
824835 let fractionLastUpdated = tryGetIntegerWithDef("%s__fractionLastUpdated", east_proxy, currTs)
825836 let coordinatorStr = tryGetString("%s__coordinatorAddress", east_proxy)
826837 let coordinator = Address(fromBase58String(coordinatorStr))
827838 let stabFee = tryGetIntegerWithDef("%s__stabilityFee", coordinator, 10000000000)
828839 let liqBonus = tryGetInteger("%s__liquidationBonus", coordinator)
829840 let commonData = makeString([toString(cumulativeFeeFraction), toString(currTs), toString(fractionLastUpdated), toString(stabFee), toString(liqBonus)], ",")
830841 ((commonData + "|") + assetsData)
831842 }
832843
833844
834845 @Callable(i)
835846 func test (s) = {
836847 let r = tryGetBool("deprecated_3P286TkTHARtrJzxUhPoHXardvutC37a9rM", Address(fromBase58String(swopfi_oracle)))
837848 throw(toString(r))
838849 }
839850
840851

github/deemru/w8io/873ac7e 
163.43 ms