tx · ED8H92iHUuNVXbc1JqPsV7FJVe87wKAUMxhtLrbD1XXU

3MzGPAZokuNfqjMuP7yDXFATZjhjtEP5UCa:  -0.03700000 Waves

2023.03.23 21:20 [2502994] smart account 3MzGPAZokuNfqjMuP7yDXFATZjhjtEP5UCa > SELF 0.00000000 Waves

{ "type": 13, "id": "ED8H92iHUuNVXbc1JqPsV7FJVe87wKAUMxhtLrbD1XXU", "fee": 3700000, "feeAssetId": null, "timestamp": 1679595613427, "version": 2, "chainId": 84, "sender": "3MzGPAZokuNfqjMuP7yDXFATZjhjtEP5UCa", "senderPublicKey": "4EBKd2zSCvpiSLeyovT5FUuMvGpi6oxdBAbvQybSYi6p", "proofs": [ "5URAdA2LqV3nsav8rHLAAEkybn7xRcPfYe1AdButYyGDLjD4rhHHUHQtirDhetBQ1Lcp4dPGybrPG4uRpUuT2bhc" ], "script": "base64:BgJgCAISBAoCCAgSAwoBCBIAEgMKAQgSDgoMCAEBAQEBAQgBAQEBEgsKCQgBAQEIAQEBARIFCgMICAESCAoGCAgBAQEBEg0KCwgIAQEBAQEBCAgBEgMKAQESAwoBARIDCgEBQgAUa19jb29yZGluYXRvckFkZHJlc3MCFGtfY29vcmRpbmF0b3JBZGRyZXNzAA9rX2FkbWluX2FkZHJlc3MCD2tfYWRtaW5fYWRkcmVzcwANa19xdW90ZV9hc3NldAINa19xdW90ZV9hc3NldAAFa19hbW0CBWtfYW1tABFrX21hbmFnZXJfYWRkcmVzcwIRa19tYW5hZ2VyX2FkZHJlc3MAEmtfcG9zaXRpb25TZXF1ZW5jZQISa19wb3NpdGlvblNlcXVlbmNlAA5rX3Bvc2l0aW9uU2l6ZQIOa19wb3NpdGlvblNpemUAEGtfZXhlY3V0ZWRPcmRlcnMCEGtfZXhlY3V0ZWRPcmRlcnMAEGtfY2FuY2VsZWRPcmRlcnMCEGtfY2FuY2VsZWRPcmRlcnMAB2tfb3JkZXICB2tfb3JkZXIADmtfb3JkZXJSZXF1ZXN0AgprX29yZGVyUmVxAA1rX2xhc3RPcmRlcklkAg1rX2xhc3RPcmRlcklkABBrX3RyYWRlck9yZGVyQ250AhBrX3RyYWRlck9yZGVyQ250ABBrX3RyYWRlck9yZGVySWRzAhBrX3RyYWRlck9yZGVySWRzAAhrX3NlbmRlcgIIa19zZW5kZXIADWtfaW5pdGlhbGl6ZWQCDWtfaW5pdGlhbGl6ZWQABFNUT1AAAQAEVEFLRQACAAVMSU1JVAADAARMT05HAAEABVNIT1JUAAIACElOQ1JFQVNFAAEACERFQ1JFQVNFAAIAGU1BWF9UUkFERVJfT1JERVJTX1BFUl9BTU0ACgAEVElNRQgFCWxhc3RCbG9jawl0aW1lc3RhbXAADERFQ0lNQUxfVU5JVAkAaAIAAQkAaAIJAGgCCQBoAgkAaAIJAGgCAAoACgAKAAoACgAKAAxTUFJFQURfTElNSVQJAGkCBQxERUNJTUFMX1VOSVQAyAEBA2FicwECX3gDCQBmAgUCX3gAAAUCX3gJAQEtAQUCX3gBBGRpdmQCAl94Al95CQBuBAUCX3gFDERFQ0lNQUxfVU5JVAUCX3kFCEhBTEZFVkVOAQRtdWxkAgJfeAJfeQkAbgQFAl94BQJfeQUMREVDSU1BTF9VTklUBQhIQUxGRVZFTgEEbWludgICX3gCX3kDCQBmAgUCX3gFAl95BQJfeQUCX3gBDnRvQ29tcG9zaXRlS2V5AgRfa2V5CF9hZGRyZXNzCQCsAgIJAKwCAgUEX2tleQIBXwUIX2FkZHJlc3MBEGV4ZWN1dGVkT3JkZXJLZXkBCF9vcmRlcklkCQCsAgIJAKwCAgUQa19leGVjdXRlZE9yZGVycwIBXwkApAMBBQhfb3JkZXJJZAEQY2FuY2VsZWRPcmRlcktleQEIX29yZGVySWQJAKwCAgkArAICBRBrX2NhbmNlbGVkT3JkZXJzAgFfCQCkAwEFCF9vcmRlcklkAQhvcmRlcktleQEIX29yZGVySWQJAQ50b0NvbXBvc2l0ZUtleQIFB2tfb3JkZXIJAKQDAQUIX29yZGVySWQBD29yZGVyUmVxdWVzdEtleQIIX29yZGVySWQFX3R5cGUJAKwCAgkArAICCQCsAgIJAKwCAgUOa19vcmRlclJlcXVlc3QCAV8JAKQDAQUIX29yZGVySWQCAV8JAKQDAQUFX3R5cGUBE3RyYWRlck9yZGVyQ291bnRLZXkCBF9hbW0HX3RyYWRlcgkArAICCQCsAgIJAKwCAgkArAICBRBrX3RyYWRlck9yZGVyQ250AgFfBQRfYW1tAgFfBQdfdHJhZGVyARF0cmFkZXJPcmRlcklkc0tleQIEX2FtbQdfdHJhZGVyCQCsAgIJAKwCAgkArAICCQCsAgIFEGtfdHJhZGVyT3JkZXJJZHMCAV8FBF9hbW0CAV8FB190cmFkZXIBC2Nvb3JkaW5hdG9yAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFFGtfY29vcmRpbmF0b3JBZGRyZXNzAhNDb29yZGluYXRvciBub3Qgc2V0AQpxdW90ZUFzc2V0AAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ1rX3F1b3RlX2Fzc2V0AQ5tYW5hZ2VyQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRFrX21hbmFnZXJfYWRkcmVzcwIPTWFuYWdlciBub3Qgc2V0AQtpc1doaXRlbGlzdAEIX2FkZHJlc3MJAQt2YWx1ZU9yRWxzZQIJAJsIAgkBC2Nvb3JkaW5hdG9yAAkBDnRvQ29tcG9zaXRlS2V5AgUFa19hbW0FCF9hZGRyZXNzBwELaW5pdGlhbGl6ZWQACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFDWtfaW5pdGlhbGl6ZWQHAQdpc1ZhbGlkAQhfb3JkZXJJZAMJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwkBEGV4ZWN1dGVkT3JkZXJLZXkBBQhfb3JkZXJJZAcJAAIBCQCsAgICGE9yZGVyIGFscmVhZHkgZXhlY3V0ZWQ6IAkApAMBBQhfb3JkZXJJZAMJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwkBEGNhbmNlbGVkT3JkZXJLZXkBBQhfb3JkZXJJZAcJAAIBCQCsAgICGU9yZGVyIGFscmVhZHkgY2FuY2VsbGVkOiAJAKQDAQUIX29yZGVySWQGAQ5jdXJyZW50T3JkZXJJZAAJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUNa19sYXN0T3JkZXJJZAAAARNnZXRUcmFkZXJPcmRlckNvdW50AgRfYW1tB190cmFkZXIEA2tleQkBE3RyYWRlck9yZGVyQ291bnRLZXkCBQRfYW1tBQdfdHJhZGVyCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFA2tleQAAARJ0cmFkZXJBbW1PcmRlcnNJZHMCBF9hbW0HX3RyYWRlcgQDa2V5CQERdHJhZGVyT3JkZXJJZHNLZXkCBQRfYW1tBQdfdHJhZGVyBAN2YWwJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUDa2V5AgADCQAAAgUDdmFsAgAFA25pbAkAtQkCBQN2YWwCASwBEGhhdmVPcmRlclJlcXVlc3QCCF9vcmRlcklkBV90eXBlBANrZXkJAQ9vcmRlclJlcXVlc3RLZXkCBQhfb3JkZXJJZAUFX3R5cGUJAQlpc0RlZmluZWQBCQCdCAIFBHRoaXMFA2tleQEPZ2V0T3JkZXJSZXF1ZXN0Aghfb3JkZXJJZAVfdHlwZQQDa2V5CQEPb3JkZXJSZXF1ZXN0S2V5AgUIX29yZGVySWQFBV90eXBlBA9vcmRlclJlcXVlc3RTdHIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQNrZXkJAKwCAgIbTm90IG9yZGVyIHJlcXVlc3QgZm9yIGtleTogBQNrZXkEFG9yZGVyUmVxdWVzdFBhcnRMaXN0CQC1CQIFD29yZGVyUmVxdWVzdFN0cgIBLAQHb3JkZXJJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUUb3JkZXJSZXF1ZXN0UGFydExpc3QAAAIPSW52YWxpZCBvcmRlcklkBANhbW0JAJEDAgUUb3JkZXJSZXF1ZXN0UGFydExpc3QAAQQGdHJhZGVyCQCRAwIFFG9yZGVyUmVxdWVzdFBhcnRMaXN0AAIEBHR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFFG9yZGVyUmVxdWVzdFBhcnRMaXN0AAMCDEludmFsaWQgdHlwZQQMdHJpZ2dlclByaWNlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBRRvcmRlclJlcXVlc3RQYXJ0TGlzdAAEAhRJbnZhbGlkIHRyaWdnZXJQcmljZQQKbGltaXRQcmljZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUUb3JkZXJSZXF1ZXN0UGFydExpc3QABQISSW52YWxpZCBsaW1pdFByaWNlCQCYCgYFB29yZGVySWQFA2FtbQUGdHJhZGVyBQR0eXBlBQx0cmlnZ2VyUHJpY2UFCmxpbWl0UHJpY2UBCGdldE9yZGVyAQhfb3JkZXJJZAQIb3JkZXJTdHIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQEIb3JkZXJLZXkBBQhfb3JkZXJJZAkArAICAhJJbnZhbGlkIG9yZGVyIGlkOiAJAKQDAQUIX29yZGVySWQEDW9yZGVyUGFydExpc3QJALUJAgUIb3JkZXJTdHICASwEA2FtbQkAkQMCBQ1vcmRlclBhcnRMaXN0AAAEBnRyYWRlcgkAkQMCBQ1vcmRlclBhcnRMaXN0AAEECGFtb3VudEluCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBQ1vcmRlclBhcnRMaXN0AAICEEludmFsaWQgYW1vdW50SW4ECGxldmVyYWdlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBQ1vcmRlclBhcnRMaXN0AAMCEEludmFsaWQgbGV2ZXJhZ2UEBHR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFDW9yZGVyUGFydExpc3QABAIMSW52YWxpZCB0eXBlBAx0cmlnZ2VyUHJpY2UJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFDW9yZGVyUGFydExpc3QABQIUSW52YWxpZCB0cmlnZ2VyUHJpY2UEC3BheW1lbnRVc2RuCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBQ1vcmRlclBhcnRMaXN0AAYCE0ludmFsaWQgcGF5bWVudFVzZG4EBHNpZGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFDW9yZGVyUGFydExpc3QABwIMSW52YWxpZCBzaWRlBAdyZWZMaW5rCQCRAwIFDW9yZGVyUGFydExpc3QACAQKcG9zaXRpb25JZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUNb3JkZXJQYXJ0TGlzdAAJAhJJbnZhbGlkIHBvc2l0aW9uSWQECmxpbWl0UHJpY2UJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFDW9yZGVyUGFydExpc3QACgISSW52YWxpZCBsaW1pdFByaWNlCQCdCgsFA2FtbQUGdHJhZGVyBQhhbW91bnRJbgUIbGV2ZXJhZ2UFBHR5cGUFDHRyaWdnZXJQcmljZQULcGF5bWVudFVzZG4FBHNpZGUFB3JlZkxpbmsFCnBvc2l0aW9uSWQFCmxpbWl0UHJpY2UBDmdldE1hcmtldFByaWNlAQRfYW1tBAFzCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBF9hbW0CEGNvbXB1dGVTcG90UHJpY2UFA25pbAUDbmlsAwkAAAIFAXMFAXMEA3JlcwQHJG1hdGNoMAUBcwMJAAECBQckbWF0Y2gwAgNJbnQEAXQFByRtYXRjaDAFAXQJAAIBAh9JbnZhbGlkIGNvbXB1dGVTcG90UHJpY2UgcmVzdWx0CQEFdmFsdWUBBQNyZXMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BBmdldEZlZQIEX2FtbQdfdHJhZGVyBAFzCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBF9hbW0CH2NvbXB1dGVGZWVGb3JUcmFkZXJXaXRoQXJ0aWZhY3QJAMwIAgUHX3RyYWRlcgkAzAgCAgAFA25pbAUDbmlsAwkAAAIFAXMFAXMEA3JlcwQHJG1hdGNoMAUBcwMJAAECBQckbWF0Y2gwAg4oSW50LCBCb29sZWFuKQQBdAUHJG1hdGNoMAgFAXQCXzEJAAIBAi5JbnZhbGlkIGNvbXB1dGVGZWVGb3JUcmFkZXJXaXRoQXJ0aWZhY3QgcmVzdWx0CQEFdmFsdWUBBQNyZXMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BFGdldFBvc2l0aW9uRGlyZWN0aW9uAgpfb3JkZXJTaWRlCl9vcmRlclR5cGUDAwkAAAIFCl9vcmRlclR5cGUFBFRBS0UGCQAAAgUKX29yZGVyVHlwZQUEU1RPUAMJAAACBQpfb3JkZXJTaWRlBQRMT05HBQVTSE9SVAUETE9ORwUKX29yZGVyU2lkZQEPZ2V0UG9zaXRpb25TaXplAwRfYW1tB190cmFkZXIKX2RpcmVjdGlvbgQDYW1tCQERQGV4dHJOYXRpdmUoMTA2MikBBQRfYW1tBAtwb3NpdGlvbktleQkArAICCQCsAgIFB190cmFkZXICAV8JAKQDAQUKX2RpcmVjdGlvbgQHc2l6ZUtleQkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFC3Bvc2l0aW9uS2V5CQELdmFsdWVPckVsc2UCCQCaCAIFA2FtbQUHc2l6ZUtleQAAAQ1nZXRQb3NpdGlvbklkAwRfYW1tB190cmFkZXIKX2RpcmVjdGlvbgQDYW1tCQERQGV4dHJOYXRpdmUoMTA2MikBBQRfYW1tBAtwb3NpdGlvbktleQkArAICCQCsAgIFB190cmFkZXICAV8JAKQDAQUKX2RpcmVjdGlvbgQGc2VxS2V5CQEOdG9Db21wb3NpdGVLZXkCBRJrX3Bvc2l0aW9uU2VxdWVuY2UFC3Bvc2l0aW9uS2V5CQELdmFsdWVPckVsc2UCCQCaCAIFA2FtbQUGc2VxS2V5AAABCWdldFNwcmVhZAEGX3ByaWNlCQEEbXVsZAIFBl9wcmljZQUMU1BSRUFEX0xJTUlUAQlzYXZlT3JkZXIMCF9vcmRlcklkBF9hbW0HX3RyYWRlcglfYW1vdW50SW4JX2xldmVyYWdlBV90eXBlDV90cmlnZ2VyUHJpY2UMX3BheW1lbnRVc2RuBV9zaWRlCF9yZWZMaW5rC19wb3NpdGlvbklkC19saW1pdFByaWNlBAhvcmRlclN0cgkAuQkCCQDMCAIFBF9hbW0JAMwIAgUHX3RyYWRlcgkAzAgCCQCkAwEFCV9hbW91bnRJbgkAzAgCCQCkAwEFCV9sZXZlcmFnZQkAzAgCCQCkAwEFBV90eXBlCQDMCAIJAKQDAQUNX3RyaWdnZXJQcmljZQkAzAgCCQCkAwEFDF9wYXltZW50VXNkbgkAzAgCCQCkAwEFBV9zaWRlCQDMCAIFCF9yZWZMaW5rCQDMCAIJAKQDAQULX3Bvc2l0aW9uSWQJAMwIAgkApAMBBQtfbGltaXRQcmljZQUDbmlsAgEsCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQhvcmRlcktleQEFCF9vcmRlcklkBQhvcmRlclN0cgUDbmlsARBzYXZlT3JkZXJSZXF1ZXN0Bghfb3JkZXJJZARfYW1tB190cmFkZXIFX3R5cGUNX3RyaWdnZXJQcmljZQtfbGltaXRQcmljZQQLb3JkZXJSZXFTdHIJALkJAgkAzAgCCQCkAwEFCF9vcmRlcklkCQDMCAIFBF9hbW0JAMwIAgUHX3RyYWRlcgkAzAgCCQCkAwEFBV90eXBlCQDMCAIJAKQDAQUNX3RyaWdnZXJQcmljZQkAzAgCCQCkAwEFC19saW1pdFByaWNlBQNuaWwCASwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD29yZGVyUmVxdWVzdEtleQIFCF9vcmRlcklkBQVfdHlwZQULb3JkZXJSZXFTdHIFA25pbAEQdXBkYXRlT3JkZXJJZFN0cgMPX29yZGVySWRzTmV3U3RyBF9hbW0HX3RyYWRlcgkAzAgCCQELU3RyaW5nRW50cnkCCQERdHJhZGVyT3JkZXJJZHNLZXkCBQRfYW1tBQdfdHJhZGVyBQ9fb3JkZXJJZHNOZXdTdHIFA25pbAEUYWRkUmVtb3ZlT3JkZXJJZExpc3QFCV9vcmRlcklkcwhfb3JkZXJJZARfYW1tB190cmFkZXIEX2FkZAQLb3JkZXJJZHNOZXcDBQRfYWRkCQDNCAIFCV9vcmRlcklkcwkApAMBBQhfb3JkZXJJZAkA0QgCBQlfb3JkZXJJZHMJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQlfb3JkZXJJZHMJAKQDAQUIX29yZGVySWQJAKwCAgISTm8gb3JkZXIgd2l0aCBpZDogCQCkAwEFCF9vcmRlcklkBQtvcmRlcklkc05ldwEQYWRkUmVtb3ZlT3JkZXJJZAQIX29yZGVySWQEX2FtbQdfdHJhZGVyBF9hZGQECG9yZGVySWRzCQESdHJhZGVyQW1tT3JkZXJzSWRzAgUEX2FtbQUHX3RyYWRlcgQLb3JkZXJJZHNOZXcJARRhZGRSZW1vdmVPcmRlcklkTGlzdAUFCG9yZGVySWRzBQhfb3JkZXJJZAUEX2FtbQUHX3RyYWRlcgUEX2FkZAQOb3JkZXJJZHNOZXdTdHIJALkJAgULb3JkZXJJZHNOZXcCASwJARB1cGRhdGVPcmRlcklkU3RyAwUOb3JkZXJJZHNOZXdTdHIFBF9hbW0FB190cmFkZXIBFnVwZGF0ZVRyYWRlck9yZGVyQ291bnQDBF9hbW0HX3RyYWRlcgZfY291bnQDCQBmAgAABQZfY291bnQJAAIBCQCsAgICFUludmFsaWQgb3JkZXIgY291bnQ6IAkApAMBBQZfY291bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJARN0cmFkZXJPcmRlckNvdW50S2V5AgUEX2FtbQUHX3RyYWRlcgUGX2NvdW50BQNuaWwBEXVwZGF0ZUxhc3RPcmRlcklkAQxfbGFzdE9yZGVySWQJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtfbGFzdE9yZGVySWQFDF9sYXN0T3JkZXJJZAUDbmlsARBtYXJrRXhlY3V0ZU9yZGVyAQhfb3JkZXJJZAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUQa19leGVjdXRlZE9yZGVycwkApAMBBQhfb3JkZXJJZAYFA25pbAEPbWFya0NhbmNlbE9yZGVyAQhfb3JkZXJJZAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUQa19jYW5jZWxlZE9yZGVycwkApAMBBQhfb3JkZXJJZAYFA25pbAEOZ2V0UG9zaXRpb25JZHMCBF9hbW0HX3RyYWRlcgQQbG9uZ1Bvc2l0aW9uU2l6ZQkBD2dldFBvc2l0aW9uU2l6ZQMFBF9hbW0FB190cmFkZXIFBExPTkcEFWN1cnJlbnRMb25nUG9zaXRpb25JZAMJAQIhPQIFEGxvbmdQb3NpdGlvblNpemUAAAkBDWdldFBvc2l0aW9uSWQDBQRfYW1tBQdfdHJhZGVyBQRMT05HAAAEEXNob3J0UG9zaXRpb25TaXplCQEPZ2V0UG9zaXRpb25TaXplAwUEX2FtbQUHX3RyYWRlcgUFU0hPUlQEFmN1cnJlbnRTaG9ydFBvc2l0aW9uSWQDCQECIT0CBRFzaG9ydFBvc2l0aW9uU2l6ZQAACQENZ2V0UG9zaXRpb25JZAMFBF9hbW0FB190cmFkZXIFBVNIT1JUAAAJAMwIAgUVY3VycmVudExvbmdQb3NpdGlvbklkCQDMCAIFFmN1cnJlbnRTaG9ydFBvc2l0aW9uSWQFA25pbAwBaQESY2xlYW5VcFN0YWxlT3JkZXJzAgRfYW1tB190cmFkZXIEBm9yZGVycwkBEnRyYWRlckFtbU9yZGVyc0lkcwIFBF9hbW0FB190cmFkZXIEC3Bvc2l0aW9uSWRzCQEOZ2V0UG9zaXRpb25JZHMCBQRfYW1tBQdfdHJhZGVyCgEKY2xlYW5VcE9uZQIEX2FjYwhfb3JkZXJJZAQKb3JkZXJJZEludAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEFCF9vcmRlcklkAhBJbnZhbGlkIG9yZGVyIGlkBA0kdDAxMTE1NjExMzUxCQEIZ2V0T3JkZXIBBQpvcmRlcklkSW50BANfeDEIBQ0kdDAxMTE1NjExMzUxAl8xBANfeDIIBQ0kdDAxMTE1NjExMzUxAl8yBANfeDMIBQ0kdDAxMTE1NjExMzUxAl8zBANfeDQIBQ0kdDAxMTE1NjExMzUxAl80BAVfdHlwZQgFDSR0MDExMTU2MTEzNTECXzUEA194NQgFDSR0MDExMTU2MTEzNTECXzYEA194NggFDSR0MDExMTU2MTEzNTECXzcEA194NwgFDSR0MDExMTU2MTEzNTECXzgEA194OAgFDSR0MDExMTU2MTEzNTECXzkEC19wb3NpdGlvbklkCAUNJHQwMTExNTYxMTM1MQNfMTAEA194OQgFDSR0MDExMTU2MTEzNTEDXzExAwMDAwkAAAIFBV90eXBlBQRTVE9QBgkAAAIFBV90eXBlBQRUQUtFCQECIT0CCQCRAwIFC3Bvc2l0aW9uSWRzAAAFC19wb3NpdGlvbklkBwkBAiE9AgkAkQMCBQtwb3NpdGlvbklkcwABBQtfcG9zaXRpb25JZAcEBmNoYW5nZQkBD21hcmtDYW5jZWxPcmRlcgEFCm9yZGVySWRJbnQEDG5ld09yZGVyTGlzdAkBFGFkZFJlbW92ZU9yZGVySWRMaXN0BQgFBF9hY2MCXzEFCm9yZGVySWRJbnQFBF9hbW0FB190cmFkZXIHCQCUCgIFDG5ld09yZGVyTGlzdAkAzggCCAUEX2FjYwJfMgUGY2hhbmdlBQRfYWNjBA0kdDAxMTcwNDExNzc5CgACJGwFBm9yZGVycwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUGb3JkZXJzBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCmNsZWFuVXBPbmUCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoECW5ld09yZGVycwgFDSR0MDExNzA0MTE3NzkCXzEEDWNhbmNlbEFjdGlvbnMIBQ0kdDAxMTcwNDExNzc5Al8yCQDOCAIJAM4IAgUNY2FuY2VsQWN0aW9ucwkBFnVwZGF0ZVRyYWRlck9yZGVyQ291bnQDBQRfYW1tBQdfdHJhZGVyCQCQAwEFCW5ld09yZGVycwkBEHVwZGF0ZU9yZGVySWRTdHIDCQC5CQIFCW5ld09yZGVycwIBLAUEX2FtbQUHX3RyYWRlcgFpAQpzZXRDb250ZXh0AQdfc2VuZGVyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIOT25seSBzZWxmLWNhbGwJAMwIAgkBC1N0cmluZ0VudHJ5AgUIa19zZW5kZXIFB19zZW5kZXIFA25pbAFpAQxyZXNldENvbnRleHQAAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIOT25seSBzZWxmLWNhbGwJAMwIAgkBC0RlbGV0ZUVudHJ5AQUIa19zZW5kZXIFA25pbAFpAQppbml0aWFsaXplAQxfY29vcmRpbmF0b3IDAwkBC2luaXRpYWxpemVkAAYJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECFFVuYWJsZSB0byBpbml0aWFsaXplCQDMCAIJAQtTdHJpbmdFbnRyeQIFFGtfY29vcmRpbmF0b3JBZGRyZXNzCQClCAEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDF9jb29yZGluYXRvcgkAzAgCCQEMQm9vbGVhbkVudHJ5AgUNa19pbml0aWFsaXplZAYFA25pbAFpAQtjcmVhdGVPcmRlcgwEX2FtbQVfdHlwZQ1fdHJpZ2dlclByaWNlC19saW1pdFByaWNlCV9hbW91bnRJbglfbGV2ZXJhZ2UFX3NpZGUIX3JlZkxpbmsRX3N0b3BUcmlnZ2VyUHJpY2UPX3N0b3BMaW1pdFByaWNlEV90YWtlVHJpZ2dlclByaWNlD190YWtlTGltaXRQcmljZQQHX3RyYWRlcgkApQgBCAUBaQZjYWxsZXIEB2NsZWFuVXAJAPwHBAUEdGhpcwISY2xlYW5VcFN0YWxlT3JkZXJzCQDMCAIFBF9hbW0JAMwIAgUHX3RyYWRlcgUDbmlsBQNuaWwDCQAAAgUHY2xlYW5VcAUHY2xlYW5VcAMJAGYCCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAjVJbnZhbGlkIGNyZWF0ZU9yZGVyIHBhcmFtZXRlcnM6IGludmFsaWQgcGF5bWVudCBjb3VudAQNJHQwMTQyNzUxNDUyNwMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEJAJQKAgkA2AQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAIQSW52YWxpZCBhc3NldCBpZAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQJAJQKAgIAAAAEDnBheW1lbnRBc3NldElkCAUNJHQwMTQyNzUxNDUyNwJfMQQNcGF5bWVudEFtb3VudAgFDSR0MDE0Mjc1MTQ1MjcCXzIEBmRvQ2FsbAkA/AcEBQR0aGlzAhNpbnRlcm5hbENyZWF0ZU9yZGVyCQDMCAIFB190cmFkZXIJAMwIAgUEX2FtbQkAzAgCBQVfdHlwZQkAzAgCBQ1fdHJpZ2dlclByaWNlCQDMCAIFC19saW1pdFByaWNlCQDMCAIFCV9hbW91bnRJbgkAzAgCBQlfbGV2ZXJhZ2UJAMwIAgUFX3NpZGUJAMwIAgUIX3JlZkxpbmsJAMwIAgUOcGF5bWVudEFzc2V0SWQJAMwIAgUNcGF5bWVudEFtb3VudAUDbmlsBQNuaWwDCQAAAgUGZG9DYWxsBQZkb0NhbGwEB29yZGVySWQEByRtYXRjaDAFBmRvQ2FsbAMJAAECBQckbWF0Y2gwAgNJbnQEAXQFByRtYXRjaDAFAXQJAAIBAhtJbnZhbGlkIElEIG9mIGNyZWF0ZWQgb3JkZXIDCQAAAgUFX3R5cGUFBUxJTUlUBAhtYWtlU3RvcAMJAGYCBRFfc3RvcFRyaWdnZXJQcmljZQAABApkb01ha2VTdG9wCQD8BwQFBHRoaXMCGmludGVybmFsQ3JlYXRlT3JkZXJSZXF1ZXN0CQDMCAIFB190cmFkZXIJAMwIAgUEX2FtbQkAzAgCBQdvcmRlcklkCQDMCAIFBFNUT1AJAMwIAgURX3N0b3BUcmlnZ2VyUHJpY2UJAMwIAgUPX3N0b3BMaW1pdFByaWNlBQNuaWwFA25pbAMJAAACBQpkb01ha2VTdG9wBQpkb01ha2VTdG9wBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAQIbWFrZVRha2UDCQBmAgURX3Rha2VUcmlnZ2VyUHJpY2UAAAQKZG9NYWtlVGFrZQkA/AcEBQR0aGlzAhppbnRlcm5hbENyZWF0ZU9yZGVyUmVxdWVzdAkAzAgCBQdfdHJhZGVyCQDMCAIFBF9hbW0JAMwIAgUHb3JkZXJJZAkAzAgCBQRUQUtFCQDMCAIFEV90YWtlVHJpZ2dlclByaWNlCQDMCAIFD190YWtlTGltaXRQcmljZQUDbmlsBQNuaWwDCQAAAgUKZG9NYWtlVGFrZQUKZG9NYWtlVGFrZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwJAM4IAgUIbWFrZVN0b3AFCG1ha2VUYWtlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEcaW5jcmVhc2VQb3NpdGlvbldpdGhTdG9wTG9zcwkEX2FtbQpfZGlyZWN0aW9uCV9sZXZlcmFnZRNfbWluQmFzZUFzc2V0QW1vdW50CF9yZWZMaW5rEV9zdG9wVHJpZ2dlclByaWNlD19zdG9wTGltaXRQcmljZRFfdGFrZVRyaWdnZXJQcmljZQ9fdGFrZUxpbWl0UHJpY2UEB190cmFkZXIJAKUIAQgFAWkGY2FsbGVyBAdjbGVhblVwCQD8BwQFBHRoaXMCEmNsZWFuVXBTdGFsZU9yZGVycwkAzAgCBQRfYW1tCQDMCAIFB190cmFkZXIFA25pbAUDbmlsAwkAAAIFB2NsZWFuVXAFB2NsZWFuVXADAwkBASEBCQELaW5pdGlhbGl6ZWQABgkBASEBCQELaXNXaGl0ZWxpc3QBBQRfYW1tCQACAQIvSW52YWxpZCBpbmNyZWFzZVBvc2l0aW9uV2l0aFN0b3BMb3NzIHBhcmFtZXRlcnMEDHBvc2l0aW9uU2l6ZQkBD2dldFBvc2l0aW9uU2l6ZQMFBF9hbW0FB190cmFkZXIFCl9kaXJlY3Rpb24DCQECIT0CBQxwb3NpdGlvblNpemUAAAkAAgECQkludmFsaWQgaW5jcmVhc2VQb3NpdGlvbldpdGhTdG9wTG9zcyBwYXJhbWV0ZXJzOiBvbmx5IG5ldyBwb3NpdGlvbgQMZG9TZXRDb250ZXh0CQD8BwQFBHRoaXMCCnNldENvbnRleHQJAMwIAgUHX3RyYWRlcgUDbmlsBQNuaWwDCQAAAgUMZG9TZXRDb250ZXh0BQxkb1NldENvbnRleHQED2RvQ2xvc2VQb3NpdGlvbgkA/AcECQERQGV4dHJOYXRpdmUoMTA2MikBBQRfYW1tAhBpbmNyZWFzZVBvc2l0aW9uCQDMCAIFCl9kaXJlY3Rpb24JAMwIAgUJX2xldmVyYWdlCQDMCAIFE19taW5CYXNlQXNzZXRBbW91bnQJAMwIAgUIX3JlZkxpbmsFA25pbAgFAWkIcGF5bWVudHMDCQAAAgUPZG9DbG9zZVBvc2l0aW9uBQ9kb0Nsb3NlUG9zaXRpb24EDmRvUmVzZXRDb250ZXh0CQD8BwQFBHRoaXMCDHJlc2V0Q29udGV4dAUDbmlsBQNuaWwDCQAAAgUOZG9SZXNldENvbnRleHQFDmRvUmVzZXRDb250ZXh0BBJvcGVuZWRQb3NpdGlvblNpemUJAQ9nZXRQb3NpdGlvblNpemUDBQRfYW1tBQdfdHJhZGVyBQpfZGlyZWN0aW9uAwkAAAIFEm9wZW5lZFBvc2l0aW9uU2l6ZQUSb3BlbmVkUG9zaXRpb25TaXplBAhhbW91bnRJbgkBA2FicwEFEm9wZW5lZFBvc2l0aW9uU2l6ZQQMc3RvcExvc3NTaWRlAwkAZgIAAAUSb3BlbmVkUG9zaXRpb25TaXplBQRMT05HBQVTSE9SVAQRZG9DcmVhdGVTdG9wT3JkZXIDCQBmAgURX3N0b3BUcmlnZ2VyUHJpY2UAAAQRZG9DcmVhdGVTdG9wT3JkZXIJAPwHBAUEdGhpcwITaW50ZXJuYWxDcmVhdGVPcmRlcgkAzAgCBQdfdHJhZGVyCQDMCAIFBF9hbW0JAMwIAgUEU1RPUAkAzAgCBRFfc3RvcFRyaWdnZXJQcmljZQkAzAgCBQ9fc3RvcExpbWl0UHJpY2UJAMwIAgUIYW1vdW50SW4JAMwIAgAACQDMCAIFDHN0b3BMb3NzU2lkZQkAzAgCBQhfcmVmTGluawkAzAgCAgAJAMwIAgAABQNuaWwFA25pbAMJAAACBRFkb0NyZWF0ZVN0b3BPcmRlcgURZG9DcmVhdGVTdG9wT3JkZXIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFEWRvQ3JlYXRlU3RvcE9yZGVyBRFkb0NyZWF0ZVN0b3BPcmRlcgQRZG9DcmVhdGVUYWtlT3JkZXIDCQBmAgURX3Rha2VUcmlnZ2VyUHJpY2UAAAQRZG9DcmVhdGVUYWtlT3JkZXIJAPwHBAUEdGhpcwITaW50ZXJuYWxDcmVhdGVPcmRlcgkAzAgCBQdfdHJhZGVyCQDMCAIFBF9hbW0JAMwIAgUEVEFLRQkAzAgCBRFfdGFrZVRyaWdnZXJQcmljZQkAzAgCBQ9fdGFrZUxpbWl0UHJpY2UJAMwIAgUIYW1vdW50SW4JAMwIAgAACQDMCAIFDHN0b3BMb3NzU2lkZQkAzAgCBQhfcmVmTGluawkAzAgCAgAJAMwIAgAABQNuaWwFA25pbAMJAAACBRFkb0NyZWF0ZVRha2VPcmRlcgURZG9DcmVhdGVUYWtlT3JkZXIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFEWRvQ3JlYXRlVGFrZU9yZGVyBRFkb0NyZWF0ZVRha2VPcmRlcgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBGWludGVybmFsTWFya09yZGVyRXhlY3V0ZWQDBF9hbW0HX3RyYWRlcghfb3JkZXJJZAMDAwkBASEBCQELaW5pdGlhbGl6ZWQABgkBASEBCQELaXNXaGl0ZWxpc3QBBQRfYW1tBgkBASEBCQAAAggFAWkGY2FsbGVyBQR0aGlzCQACAQIsSW52YWxpZCBpbnRlcm5hbE1hcmtPcmRlckV4ZWN1dGVkIHBhcmFtZXRlcnMEE25ld1RyYWRlck9yZGVyQ291bnQJAGUCCQETZ2V0VHJhZGVyT3JkZXJDb3VudAIFBF9hbW0FB190cmFkZXIAAQkAzggCCQDOCAIJARZ1cGRhdGVUcmFkZXJPcmRlckNvdW50AwUEX2FtbQUHX3RyYWRlcgUTbmV3VHJhZGVyT3JkZXJDb3VudAkBEGFkZFJlbW92ZU9yZGVySWQEBQhfb3JkZXJJZAUEX2FtbQUHX3RyYWRlcgcJARBtYXJrRXhlY3V0ZU9yZGVyAQUIX29yZGVySWQBaQEaaW50ZXJuYWxDcmVhdGVPcmRlclJlcXVlc3QGB190cmFkZXIEX2FtbQhfb3JkZXJJZAVfdHlwZQ1fdHJpZ2dlclByaWNlC19saW1pdFByaWNlAwMDAwMJAQEhAQkBC2luaXRpYWxpemVkAAYJAQEhAQkBC2lzV2hpdGVsaXN0AQUEX2FtbQYJAGcCAAAFDV90cmlnZ2VyUHJpY2UGCQBmAgAABQtfbGltaXRQcmljZQYJAQEhAQkAAAIIBQFpBmNhbGxlcgUEdGhpcwkAAgECLUludmFsaWQgaW50ZXJuYWxDcmVhdGVPcmRlclJlcXVlc3QgcGFyYW1ldGVycwkBEHNhdmVPcmRlclJlcXVlc3QGBQhfb3JkZXJJZAUEX2FtbQUHX3RyYWRlcgUFX3R5cGUFDV90cmlnZ2VyUHJpY2UFC19saW1pdFByaWNlAWkBE2ludGVybmFsQ3JlYXRlT3JkZXILB190cmFkZXIEX2FtbQVfdHlwZQ1fdHJpZ2dlclByaWNlC19saW1pdFByaWNlCV9hbW91bnRJbglfbGV2ZXJhZ2UFX3NpZGUIX3JlZkxpbmsPX3BheW1lbnRBc3NldElkDl9wYXltZW50QW1vdW50AwMDAwMDAwMDCQEBIQEJAQtpbml0aWFsaXplZAAGCQEBIQEJAQtpc1doaXRlbGlzdAEFBF9hbW0GCQBnAgAABQ1fdHJpZ2dlclByaWNlBgkAZgIAAAULX2xpbWl0UHJpY2UGCQBnAgAABQlfYW1vdW50SW4GCQBmAgAABQlfbGV2ZXJhZ2UGCQEBIQEDCQAAAgUFX3NpZGUFBExPTkcGCQAAAgUFX3NpZGUFBVNIT1JUBgkBASEBAwMJAAACBQVfdHlwZQUEU1RPUAYJAAACBQVfdHlwZQUEVEFLRQYJAAACBQVfdHlwZQUFTElNSVQGCQEBIQEJAAACCAUBaQZjYWxsZXIFBHRoaXMJAAIBAiZJbnZhbGlkIGludGVybmFsQ3JlYXRlT3JkZXIgcGFyYW1ldGVycwQHb3JkZXJJZAkAZAIJAQ5jdXJyZW50T3JkZXJJZAAAAQQRcG9zaXRpb25EaXJlY3Rpb24JARRnZXRQb3NpdGlvbkRpcmVjdGlvbgIFBV9zaWRlBQVfdHlwZQQTbmV3VHJhZGVyT3JkZXJDb3VudAkAZAIJARNnZXRUcmFkZXJPcmRlckNvdW50AgUEX2FtbQUHX3RyYWRlcgABBAxwb3NpdGlvblNpemUJAQ9nZXRQb3NpdGlvblNpemUDBQRfYW1tBQdfdHJhZGVyBRFwb3NpdGlvbkRpcmVjdGlvbgQKX2RpcmVjdGlvbgMDAwkAAAIFDHBvc2l0aW9uU2l6ZQAABgMJAGYCBQxwb3NpdGlvblNpemUAAAkAAAIFBV9zaWRlBQRMT05HBwYDCQBmAgAABQxwb3NpdGlvblNpemUJAAACBQVfc2lkZQUFU0hPUlQHBQhJTkNSRUFTRQUIREVDUkVBU0UDAwkAAAIFDHBvc2l0aW9uU2l6ZQAAAwkAAAIFBV90eXBlBQRTVE9QBgkAAAIFBV90eXBlBQRUQUtFBwkAAgECK0NhbiBub3QgY3JlYXRlIFNUT1AvVEFLRSBvcmRlcjogbm8gcG9zaXRpb24EC3VzZG5QYXltZW50AwkAAAIFCl9kaXJlY3Rpb24FCElOQ1JFQVNFAwMJAQIhPQIFD19wYXltZW50QXNzZXRJZAkA2AQBCQEKcXVvdGVBc3NldAAGCQECIT0CBQ5fcGF5bWVudEFtb3VudAUJX2Ftb3VudEluCQACAQI0SW52YWxpZCBjcmVhdGVMaW1pdE9yZGVyIHBhcmFtZXRlcnM6IGludmFsaWQgcGF5bWVudAQFc3Rha2UJAPwHBAkBDm1hbmFnZXJBZGRyZXNzAAIHZGVwb3NpdAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFDl9wYXltZW50QW1vdW50BQNuaWwDCQAAAgUFc3Rha2UFBXN0YWtlBQ5fcGF5bWVudEFtb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAwkAAAIFC3VzZG5QYXltZW50BQt1c2RuUGF5bWVudAQKcG9zaXRpb25JZAMJAQIhPQIFDHBvc2l0aW9uU2l6ZQAACQENZ2V0UG9zaXRpb25JZAMFBF9hbW0FB190cmFkZXIFEXBvc2l0aW9uRGlyZWN0aW9uAAADAwMJAAACBQVfdHlwZQUEU1RPUAYJAAACBQVfdHlwZQUEVEFLRQkAAAIFCnBvc2l0aW9uSWQAAAcJAAIBAj9TVE9QIGFuZCBUQUtFIG9yZGVyIHNob3VsZCBiZSBhc3NpZ25lZCB0byBwb3NpdGlvbiB3aXRoIGlkICE9IDADCQBmAgUTbmV3VHJhZGVyT3JkZXJDb3VudAUZTUFYX1RSQURFUl9PUkRFUlNfUEVSX0FNTQkAAgECMEludmFsaWQgY3JlYXRlTGltaXRPcmRlciBwYXJhbWV0ZXJzOiBvcmRlciBjb3VudAQJY2hhbmdlU2V0CQDOCAIJAM4IAgkAzggCCQEJc2F2ZU9yZGVyDAUHb3JkZXJJZAUEX2FtbQUHX3RyYWRlcgUJX2Ftb3VudEluBQlfbGV2ZXJhZ2UFBV90eXBlBQ1fdHJpZ2dlclByaWNlBQt1c2RuUGF5bWVudAUFX3NpZGUFCF9yZWZMaW5rBQpwb3NpdGlvbklkBQtfbGltaXRQcmljZQkBEGFkZFJlbW92ZU9yZGVySWQEBQdvcmRlcklkBQRfYW1tBQdfdHJhZGVyBgkBFnVwZGF0ZVRyYWRlck9yZGVyQ291bnQDBQRfYW1tBQdfdHJhZGVyBRNuZXdUcmFkZXJPcmRlckNvdW50CQERdXBkYXRlTGFzdE9yZGVySWQBBQdvcmRlcklkCQCUCgIFCWNoYW5nZVNldAUHb3JkZXJJZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQtjYW5jZWxPcmRlcgEIX29yZGVySWQEDSR0MDIzMjcxMjM0OTAJAQhnZXRPcmRlcgEFCF9vcmRlcklkBARfYW1tCAUNJHQwMjMyNzEyMzQ5MAJfMQQHX3RyYWRlcggFDSR0MDIzMjcxMjM0OTACXzIECV9hbW91bnRJbggFDSR0MDIzMjcxMjM0OTACXzMECV9sZXZlcmFnZQgFDSR0MDIzMjcxMjM0OTACXzQEBV90eXBlCAUNJHQwMjMyNzEyMzQ5MAJfNQQNX3RyaWdnZXJQcmljZQgFDSR0MDIzMjcxMjM0OTACXzYEC19hbW91bnRVc2RuCAUNJHQwMjMyNzEyMzQ5MAJfNwQFX3NpZGUIBQ0kdDAyMzI3MTIzNDkwAl84BAhfcmVmTGluawgFDSR0MDIzMjcxMjM0OTACXzkEC19wb3NpdGlvbklkCAUNJHQwMjMyNzEyMzQ5MANfMTAEC19saW1pdFByaWNlCAUNJHQwMjMyNzEyMzQ5MANfMTEDAwMJAQEhAQkBC2luaXRpYWxpemVkAAYJAQEhAQkBB2lzVmFsaWQBBQhfb3JkZXJJZAYJAQEhAQkAAAIJAKUIAQgFAWkGY2FsbGVyBQdfdHJhZGVyCQACAQIeSW52YWxpZCBjYW5jZWxPcmRlciBwYXJhbWV0ZXJzBAdjbGVhblVwCQD8BwQFBHRoaXMCEmNsZWFuVXBTdGFsZU9yZGVycwkAzAgCBQRfYW1tCQDMCAIFB190cmFkZXIFA25pbAUDbmlsAwkAAAIFB2NsZWFuVXAFB2NsZWFuVXAEE25ld1RyYWRlck9yZGVyQ291bnQJAGUCCQETZ2V0VHJhZGVyT3JkZXJDb3VudAIFBF9hbW0FB190cmFkZXIAAQQId2l0aGRyYXcDCQBmAgULX2Ftb3VudFVzZG4AAAQHdW5zdGFrZQkA/AcECQEObWFuYWdlckFkZHJlc3MAAgh3aXRoZHJhdwkAzAgCCQDYBAEJAQpxdW90ZUFzc2V0AAkAzAgCBQtfYW1vdW50VXNkbgUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUId2l0aGRyYXcFCHdpdGhkcmF3CQDOCAIJAM4IAgkAzggCCQEPbWFya0NhbmNlbE9yZGVyAQUIX29yZGVySWQJARBhZGRSZW1vdmVPcmRlcklkBAUIX29yZGVySWQFBF9hbW0FB190cmFkZXIHCQEWdXBkYXRlVHJhZGVyT3JkZXJDb3VudAMFBF9hbW0FB190cmFkZXIFE25ld1RyYWRlck9yZGVyQ291bnQDCQBmAgULX2Ftb3VudFVzZG4AAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFC19hbW91bnRVc2RuCQEKcXVvdGVBc3NldAAFA25pbAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDGV4ZWN1dGVPcmRlcgEIX29yZGVySWQEDSR0MDI0Njg4MjQ5MDcJAQhnZXRPcmRlcgEFCF9vcmRlcklkBARfYW1tCAUNJHQwMjQ2ODgyNDkwNwJfMQQHX3RyYWRlcggFDSR0MDI0Njg4MjQ5MDcCXzIECV9hbW91bnRJbggFDSR0MDI0Njg4MjQ5MDcCXzMECV9sZXZlcmFnZQgFDSR0MDI0Njg4MjQ5MDcCXzQEBV90eXBlCAUNJHQwMjQ2ODgyNDkwNwJfNQQNX3RyaWdnZXJQcmljZQgFDSR0MDI0Njg4MjQ5MDcCXzYEC19hbW91bnRVc2RuCAUNJHQwMjQ2ODgyNDkwNwJfNwQFX3NpZGUIBQ0kdDAyNDY4ODI0OTA3Al84BAhfcmVmTGluawgFDSR0MDI0Njg4MjQ5MDcCXzkEC19wb3NpdGlvbklkCAUNJHQwMjQ2ODgyNDkwNwNfMTAEC19saW1pdFByaWNlCAUNJHQwMjQ2ODgyNDkwNwNfMTEEB2NsZWFuVXAJAPwHBAUEdGhpcwISY2xlYW5VcFN0YWxlT3JkZXJzCQDMCAIFBF9hbW0JAMwIAgUHX3RyYWRlcgUDbmlsBQNuaWwDCQAAAgUHY2xlYW5VcAUHY2xlYW5VcAQRcG9zaXRpb25EaXJlY3Rpb24JARRnZXRQb3NpdGlvbkRpcmVjdGlvbgIFBV9zaWRlBQVfdHlwZQMDCQEBIQEJAQtpbml0aWFsaXplZAAGCQEBIQEJAQdpc1ZhbGlkAQUIX29yZGVySWQJAAIBAh9JbnZhbGlkIGV4ZWN1dGVPcmRlciBwYXJhbWV0ZXJzBAxwb3NpdGlvblNpemUJAQ9nZXRQb3NpdGlvblNpemUDBQRfYW1tBQdfdHJhZGVyBRFwb3NpdGlvbkRpcmVjdGlvbgMJAAACBQxwb3NpdGlvblNpemUFDHBvc2l0aW9uU2l6ZQQRY3VycmVudFBvc2l0aW9uSWQDCQECIT0CBQxwb3NpdGlvblNpemUAAAkBDWdldFBvc2l0aW9uSWQDBQRfYW1tBQdfdHJhZGVyBRFwb3NpdGlvbkRpcmVjdGlvbgAABA0kdDAyNTQxNDI4NzkyAwkAAAIFBV90eXBlBQRTVE9QBBJfcG9zaXRpb25EaXJlY3Rpb24DCQBmAgUMcG9zaXRpb25TaXplAAAFBExPTkcDCQBmAgAABQxwb3NpdGlvblNpemUFBVNIT1JUCQACAQIsQ2FuIG5vdCBleGVjdXRlIFNUT1Agb3JkZXI6IG5vIG9wZW4gcG9zaXRpb24EC21hcmtldFByaWNlCQEOZ2V0TWFya2V0UHJpY2UBBQRfYW1tBAxpc0V4ZWN1dGFibGUDCQAAAgUFX3NpZGUFEl9wb3NpdGlvbkRpcmVjdGlvbgkAAgECJ0NhbiBub3QgZXhlY3V0ZSBTVE9QIG9yZGVyOiByZWR1Y2Ugb25seQMJAQIhPQIFEWN1cnJlbnRQb3NpdGlvbklkBQtfcG9zaXRpb25JZAkAAgECK0NhbiBub3QgZXhlY3V0ZSBTVE9QIG9yZGVyOiBwb3NpdGlvbiBjbG9zZWQDCQAAAgUSX3Bvc2l0aW9uRGlyZWN0aW9uBQRMT05HCQBnAgUNX3RyaWdnZXJQcmljZQULbWFya2V0UHJpY2UJAGcCBQttYXJrZXRQcmljZQUNX3RyaWdnZXJQcmljZQMFDGlzRXhlY3V0YWJsZQkAlQoDAg1jbG9zZVBvc2l0aW9uCQDMCAIJAQRtaW52AgUJX2Ftb3VudEluCQEDYWJzAQUMcG9zaXRpb25TaXplCQDMCAIFEXBvc2l0aW9uRGlyZWN0aW9uCQDMCAIJAQRtdWxkAgULX2xpbWl0UHJpY2UJAQNhYnMBBQxwb3NpdGlvblNpemUJAMwIAgcFA25pbAUDbmlsCQACAQIxQ2FuIG5vdCBleGVjdXRlIFNUT1Agb3JkZXI6IHRyaWdnZXJQcmljZSBtaXNtYXRjaAMJAAACBQVfdHlwZQUEVEFLRQQSX3Bvc2l0aW9uRGlyZWN0aW9uAwkAZgIFDHBvc2l0aW9uU2l6ZQAABQRMT05HAwkAZgIAAAUMcG9zaXRpb25TaXplBQVTSE9SVAkAAgECLENhbiBub3QgZXhlY3V0ZSBTVE9QIG9yZGVyOiBubyBvcGVuIHBvc2l0aW9uBAttYXJrZXRQcmljZQkBDmdldE1hcmtldFByaWNlAQUEX2FtbQQMaXNFeGVjdXRhYmxlAwkAAAIFBV9zaWRlBRJfcG9zaXRpb25EaXJlY3Rpb24JAAIBAidDYW4gbm90IGV4ZWN1dGUgVEFLRSBvcmRlcjogcmVkdWNlIG9ubHkDCQECIT0CBRFjdXJyZW50UG9zaXRpb25JZAULX3Bvc2l0aW9uSWQJAAIBCQCsAgIJAKwCAgkArAICAixDYW4gbm90IGV4ZWN1dGUgVEFLRSBvcmRlcjogcG9zaXRpb24gY2xvc2VkIAkApAMBBRFjdXJyZW50UG9zaXRpb25JZAICIT0JAKQDAQULX3Bvc2l0aW9uSWQDCQAAAgUSX3Bvc2l0aW9uRGlyZWN0aW9uBQRMT05HCQBnAgULbWFya2V0UHJpY2UFDV90cmlnZ2VyUHJpY2UJAGcCBQ1fdHJpZ2dlclByaWNlBQttYXJrZXRQcmljZQMFDGlzRXhlY3V0YWJsZQkAlQoDAg1jbG9zZVBvc2l0aW9uCQDMCAIJAQRtaW52AgUJX2Ftb3VudEluCQEDYWJzAQUMcG9zaXRpb25TaXplCQDMCAIFEXBvc2l0aW9uRGlyZWN0aW9uCQDMCAIJAQRtdWxkAgULX2xpbWl0UHJpY2UJAQNhYnMBBQxwb3NpdGlvblNpemUJAMwIAgcFA25pbAUDbmlsCQACAQIxQ2FuIG5vdCBleGVjdXRlIFRBS0Ugb3JkZXI6IHRyaWdnZXJQcmljZSBtaXNtYXRjaAMJAAACBQVfdHlwZQUFTElNSVQEC21hcmtldFByaWNlCQEOZ2V0TWFya2V0UHJpY2UBBQRfYW1tBAZzcHJlYWQDCQAAAgULX2xpbWl0UHJpY2UAAAkBCWdldFNwcmVhZAEFDV90cmlnZ2VyUHJpY2UJAQNhYnMBCQBlAgUNX3RyaWdnZXJQcmljZQULX2xpbWl0UHJpY2UEDGlzRXhlY3V0YWJsZQMJAGcCBQttYXJrZXRQcmljZQkAZQIFDV90cmlnZ2VyUHJpY2UFBnNwcmVhZAkAZwIJAGQCBQ1fdHJpZ2dlclByaWNlBQZzcHJlYWQFC21hcmtldFByaWNlBwMFDGlzRXhlY3V0YWJsZQQPYW1vdW50SW5XaXRoRmVlCQBlAgULX2Ftb3VudFVzZG4JAQRtdWxkAgULX2Ftb3VudFVzZG4JAQZnZXRGZWUCBQRfYW1tBQdfdHJhZGVyCQCVCgMCEGluY3JlYXNlUG9zaXRpb24JAMwIAgUFX3NpZGUJAMwIAgUJX2xldmVyYWdlCQDMCAIDCQAAAgULX2xpbWl0UHJpY2UAAAAACQEEZGl2ZAIFD2Ftb3VudEluV2l0aEZlZQULX2xpbWl0UHJpY2UJAMwIAgUIX3JlZkxpbmsFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQtfYW1vdW50VXNkbgUDbmlsCQACAQIyQ2FuIG5vdCBleGVjdXRlIExJTUlUIG9yZGVyOiB0cmlnZ2VyUHJpY2UgbWlzbWF0Y2gJAAIBCQCsAgICFEludmFsaWQgb3JkZXIgdHlwZTogCQCkAwEFBV90eXBlBAZtZXRob2QIBQ0kdDAyNTQxNDI4NzkyAl8xBARhcmdzCAUNJHQwMjU0MTQyODc5MgJfMgQIcGF5bWVudHMIBQ0kdDAyNTQxNDI4NzkyAl8zBAh3aXRoZHJhdwMJAAACCQCQAwEFCHBheW1lbnRzAAEEB3Vuc3Rha2UJAPwHBAkBDm1hbmFnZXJBZGRyZXNzAAIId2l0aGRyYXcJAMwIAgkA2AQBCQEKcXVvdGVBc3NldAAJAMwIAggJAJEDAgUIcGF5bWVudHMAAAZhbW91bnQFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFCHdpdGhkcmF3BQh3aXRoZHJhdwQMZG9TZXRDb250ZXh0CQD8BwQFBHRoaXMCCnNldENvbnRleHQJAMwIAgUHX3RyYWRlcgUDbmlsBQNuaWwDCQAAAgUMZG9TZXRDb250ZXh0BQxkb1NldENvbnRleHQED2RvQ2xvc2VQb3NpdGlvbgkA/AcECQERQGV4dHJOYXRpdmUoMTA2MikBBQRfYW1tBQZtZXRob2QFBGFyZ3MFCHBheW1lbnRzAwkAAAIFD2RvQ2xvc2VQb3NpdGlvbgUPZG9DbG9zZVBvc2l0aW9uBA5kb1Jlc2V0Q29udGV4dAkA/AcEBQR0aGlzAgxyZXNldENvbnRleHQFA25pbAUDbmlsAwkAAAIFDmRvUmVzZXRDb250ZXh0BQ5kb1Jlc2V0Q29udGV4dAQTZXhlY3V0ZU9yZGVyUmVxdWVzdAMJAAACBQVfdHlwZQUFTElNSVQED25ld1Bvc2l0aW9uU2l6ZQkBD2dldFBvc2l0aW9uU2l6ZQMFBF9hbW0FB190cmFkZXIFEXBvc2l0aW9uRGlyZWN0aW9uAwkAAAIFD25ld1Bvc2l0aW9uU2l6ZQUPbmV3UG9zaXRpb25TaXplBA1uZXdQb3NpdGlvbklkCQENZ2V0UG9zaXRpb25JZAMFBF9hbW0FB190cmFkZXIFEXBvc2l0aW9uRGlyZWN0aW9uAwkAAAIFDW5ld1Bvc2l0aW9uSWQFDW5ld1Bvc2l0aW9uSWQEEXBvc2l0aW9uU2l6ZURlbHRhCQBlAgUPbmV3UG9zaXRpb25TaXplBQxwb3NpdGlvblNpemUEDmNsb3NlT3JkZXJTaWRlAwkAZgIFD25ld1Bvc2l0aW9uU2l6ZQAABQVTSE9SVAUETE9ORwQNbWFrZVRha2VPcmRlcgMJARBoYXZlT3JkZXJSZXF1ZXN0AgUIX29yZGVySWQFBFRBS0UEDSR0MDI5NzU0Mjk5NTMJAQ9nZXRPcmRlclJlcXVlc3QCBQhfb3JkZXJJZAUEVEFLRQQKbmV3T3JkZXJJZAgFDSR0MDI5NzU0Mjk5NTMCXzEEBm5ld0FtbQgFDSR0MDI5NzU0Mjk5NTMCXzIECW5ld1RyYWRlcggFDSR0MDI5NzU0Mjk5NTMCXzMEB25ld1R5cGUIBQ0kdDAyOTc1NDI5OTUzAl80BA9uZXdUcmlnZ2VyUHJpY2UIBQ0kdDAyOTc1NDI5OTUzAl81BA1uZXdMaW1pdFByaWNlCAUNJHQwMjk3NTQyOTk1MwJfNgQGZG9DYWxsCQD8BwQFBHRoaXMCE2ludGVybmFsQ3JlYXRlT3JkZXIJAMwIAgUJbmV3VHJhZGVyCQDMCAIFBm5ld0FtbQkAzAgCBQduZXdUeXBlCQDMCAIFD25ld1RyaWdnZXJQcmljZQkAzAgCBQ1uZXdMaW1pdFByaWNlCQDMCAIFEXBvc2l0aW9uU2l6ZURlbHRhCQDMCAIAAAkAzAgCBQ5jbG9zZU9yZGVyU2lkZQkAzAgCAgAJAMwIAgIACQDMCAIAAAUDbmlsBQNuaWwDCQAAAgUGZG9DYWxsBQZkb0NhbGwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFDW1ha2VUYWtlT3JkZXIFDW1ha2VUYWtlT3JkZXIEDW1ha2VTdG9wT3JkZXIDCQEQaGF2ZU9yZGVyUmVxdWVzdAIFCF9vcmRlcklkBQRTVE9QBA0kdDAzMDUwOTMwNzA4CQEPZ2V0T3JkZXJSZXF1ZXN0AgUIX29yZGVySWQFBFNUT1AECm5ld09yZGVySWQIBQ0kdDAzMDUwOTMwNzA4Al8xBAZuZXdBbW0IBQ0kdDAzMDUwOTMwNzA4Al8yBAluZXdUcmFkZXIIBQ0kdDAzMDUwOTMwNzA4Al8zBAduZXdUeXBlCAUNJHQwMzA1MDkzMDcwOAJfNAQPbmV3VHJpZ2dlclByaWNlCAUNJHQwMzA1MDkzMDcwOAJfNQQNbmV3TGltaXRQcmljZQgFDSR0MDMwNTA5MzA3MDgCXzYEBmRvQ2FsbAkA/AcEBQR0aGlzAhNpbnRlcm5hbENyZWF0ZU9yZGVyCQDMCAIFCW5ld1RyYWRlcgkAzAgCBQZuZXdBbW0JAMwIAgUHbmV3VHlwZQkAzAgCBQ9uZXdUcmlnZ2VyUHJpY2UJAMwIAgUNbmV3TGltaXRQcmljZQkAzAgCBRFwb3NpdGlvblNpemVEZWx0YQkAzAgCAAAJAMwIAgUOY2xvc2VPcmRlclNpZGUJAMwIAgIACQDMCAICAAkAzAgCAAAFA25pbAUDbmlsAwkAAAIFBmRvQ2FsbAUGZG9DYWxsBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQ1tYWtlU3RvcE9yZGVyBQ1tYWtlU3RvcE9yZGVyCQDOCAIFDW1ha2VUYWtlT3JkZXIFDW1ha2VTdG9wT3JkZXIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBRNleGVjdXRlT3JkZXJSZXF1ZXN0BRNleGVjdXRlT3JkZXJSZXF1ZXN0BBNkb01hcmtPcmRlckV4ZWN1dGVkCQD8BwQFBHRoaXMCGWludGVybmFsTWFya09yZGVyRXhlY3V0ZWQJAMwIAgUEX2FtbQkAzAgCBQdfdHJhZGVyCQDMCAIFCF9vcmRlcklkBQNuaWwFA25pbAMJAAACBRNkb01hcmtPcmRlckV4ZWN1dGVkBRNkb01hcmtPcmRlckV4ZWN1dGVkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEUdmlld19jYW5FeGVjdXRlT3JkZXIBCF9vcmRlcklkBAFzCQD8BwQFBHRoaXMCDGV4ZWN1dGVPcmRlcgkAzAgCBQhfb3JkZXJJZAUDbmlsBQNuaWwDCQAAAgUBcwUBcwkAAgECB1N1Y2Nlc3MJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkABA5jb29yZGluYXRvclN0cgkAnQgCBQR0aGlzBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwMJAQlpc0RlZmluZWQBBQ5jb29yZGluYXRvclN0cgQFYWRtaW4JAJ0IAgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQUOY29vcmRpbmF0b3JTdHIFD2tfYWRtaW5fYWRkcmVzcwMJAQlpc0RlZmluZWQBBQVhZG1pbgkBC3ZhbHVlT3JFbHNlAgkAmwgCCQERQGV4dHJOYXRpdmUoMTA2MikBCQEFdmFsdWUBBQVhZG1pbgkArAICCQCsAgIJAKwCAgIHc3RhdHVzXwkApQgBBQR0aGlzAgFfCQDYBAEIBQJ0eAJpZAcJAAIBAi51bmFibGUgdG8gdmVyaWZ5OiBhZG1pbiBub3Qgc2V0IGluIGNvb3JkaW5hdG9yCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5Tfb9Og==", "height": 2502994, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 38uueL58LQ3CAXPXJbX7wEcHzX2EZgUbgo41CgqVgUYN Next: 9LcQaLNXkXYqtYStNyvvREGvA84mY4gSubqhHMwgY85V Diff:
OldNewDifferences
2121
2222 let j = "k_order"
2323
24-let k = "k_lastOrderId"
24+let k = "k_orderReq"
2525
26-let l = "k_traderOrderCnt"
26+let l = "k_lastOrderId"
2727
28-let m = "k_traderOrderIds"
28+let m = "k_traderOrderCnt"
2929
30-let n = "k_sender"
30+let n = "k_traderOrderIds"
3131
32-let o = "k_initialized"
32+let o = "k_sender"
3333
34-let p = 1
34+let p = "k_initialized"
3535
36-let q = 2
36+let q = 1
3737
38-let r = 3
38+let r = 2
3939
40-let s = 1
40+let s = 3
4141
42-let t = 2
42+let t = 1
4343
44-let u = 1
44+let u = 2
4545
46-let v = 2
46+let v = 1
4747
48-let w = 5
48+let w = 2
4949
50-let x = lastBlock.timestamp
50+let x = 10
5151
52-let y = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
52+let y = lastBlock.timestamp
5353
54-let z = (y / 200)
54+let z = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
5555
56-func A (B) = if ((B > 0))
57- then B
58- else -(B)
56+let A = (z / 200)
57+
58+func B (C) = if ((C > 0))
59+ then C
60+ else -(C)
5961
6062
61-func C (B,D) = fraction(B, y, D, HALFEVEN)
63+func D (C,E) = fraction(C, z, E, HALFEVEN)
6264
6365
64-func E (B,D) = fraction(B, D, y, HALFEVEN)
66+func F (C,E) = fraction(C, E, z, HALFEVEN)
6567
6668
67-func F (B,D) = if ((B > D))
68- then D
69- else B
69+func G (C,E) = if ((C > E))
70+ then E
71+ else C
7072
7173
72-func G (H,I) = ((H + "_") + I)
74+func H (I,J) = ((I + "_") + J)
7375
7476
75-func J (K) = ((h + "_") + toString(K))
77+func K (L) = ((h + "_") + toString(L))
7678
7779
78-func L (K) = ((i + "_") + toString(K))
80+func M (L) = ((i + "_") + toString(L))
7981
8082
81-func M (K) = G(j, toString(K))
83+func N (L) = H(j, toString(L))
8284
8385
84-func N (O,P) = ((((l + "_") + O) + "_") + P)
86+func O (L,P) = ((((k + "_") + toString(L)) + "_") + toString(P))
8587
8688
87-func Q (O,P) = ((((m + "_") + O) + "_") + P)
89+func Q (R,S) = ((((m + "_") + R) + "_") + S)
8890
8991
90-func R () = valueOrErrorMessage(addressFromString(getStringValue(this, a)), "Coordinator not set")
92+func T (R,S) = ((((n + "_") + R) + "_") + S)
9193
9294
93-func S () = fromBase58String(getStringValue(R(), c))
95+func U () = valueOrErrorMessage(addressFromString(getStringValue(this, a)), "Coordinator not set")
9496
9597
96-func T () = valueOrErrorMessage(addressFromString(getStringValue(R(), e)), "Manager not set")
98+func V () = fromBase58String(getStringValue(U(), c))
9799
98100
99-func U (I) = valueOrElse(getBoolean(R(), G(d, I)), false)
101+func W () = valueOrErrorMessage(addressFromString(getStringValue(U(), e)), "Manager not set")
100102
101103
102-func V () = valueOrElse(getBoolean(this, o), false)
104+func X (J) = valueOrElse(getBoolean(U(), H(d, J)), false)
103105
104106
105-func W (K) = if (valueOrElse(getBoolean(this, J(K)), false))
106- then throw(("Order already executed: " + toString(K)))
107- else if (valueOrElse(getBoolean(this, L(K)), false))
108- then throw(("Order already cancelled: " + toString(K)))
107+func Y () = valueOrElse(getBoolean(this, p), false)
108+
109+
110+func Z (L) = if (valueOrElse(getBoolean(this, K(L)), false))
111+ then throw(("Order already executed: " + toString(L)))
112+ else if (valueOrElse(getBoolean(this, M(L)), false))
113+ then throw(("Order already cancelled: " + toString(L)))
109114 else true
110115
111116
112-func X () = valueOrElse(getInteger(this, k), 0)
117+func aa () = valueOrElse(getInteger(this, l), 0)
113118
114119
115-func Y (O,P) = {
116- let Z = N(O, P)
117- valueOrElse(getInteger(this, Z), 0)
120+func ab (R,S) = {
121+ let ac = Q(R, S)
122+ valueOrElse(getInteger(this, ac), 0)
118123 }
119124
120125
121-func aa (O,P) = {
122- let Z = Q(O, P)
123- let ab = valueOrElse(getString(this, Z), "")
124- if ((ab == ""))
126+func ad (R,S) = {
127+ let ac = T(R, S)
128+ let ae = valueOrElse(getString(this, ac), "")
129+ if ((ae == ""))
125130 then nil
126- else split(ab, ",")
131+ else split(ae, ",")
127132 }
128133
129134
130-func ac (K) = {
131- let ad = valueOrErrorMessage(getString(this, M(K)), ("Invalid order id: " + toString(K)))
132- let ae = split(ad, ",")
133- let af = ae[0]
134- let ag = ae[1]
135- let ah = valueOrErrorMessage(parseInt(ae[2]), "Invalid amountIn")
136- let ai = valueOrErrorMessage(parseInt(ae[3]), "Invalid leverage")
137- let aj = valueOrErrorMessage(parseInt(ae[4]), "Invalid type")
138- let ak = valueOrErrorMessage(parseInt(ae[5]), "Invalid triggerPrice")
139- let al = valueOrErrorMessage(parseInt(ae[6]), "Invalid paymentUsdn")
140- let am = valueOrErrorMessage(parseInt(ae[7]), "Invalid side")
141- let an = ae[8]
142- let ao = valueOrErrorMessage(parseInt(ae[9]), "Invalid positionId")
143- let ap = valueOrErrorMessage(parseInt(ae[10]), "Invalid limitPrice")
144- $Tuple11(af, ag, ah, ai, aj, ak, al, am, an, ao, ap)
135+func af (L,P) = {
136+ let ac = O(L, P)
137+ isDefined(getString(this, ac))
145138 }
146139
147140
148-func aq (O) = {
149- let ar = invoke(addressFromStringValue(O), "computeSpotPrice", nil, nil)
150- if ((ar == ar))
141+func ag (L,P) = {
142+ let ac = O(L, P)
143+ let ah = valueOrErrorMessage(getString(this, ac), ("Not order request for key: " + ac))
144+ let ai = split(ah, ",")
145+ let aj = valueOrErrorMessage(parseInt(ai[0]), "Invalid orderId")
146+ let ak = ai[1]
147+ let al = ai[2]
148+ let am = valueOrErrorMessage(parseInt(ai[3]), "Invalid type")
149+ let an = valueOrErrorMessage(parseInt(ai[4]), "Invalid triggerPrice")
150+ let ao = valueOrErrorMessage(parseInt(ai[5]), "Invalid limitPrice")
151+ $Tuple6(aj, ak, al, am, an, ao)
152+ }
153+
154+
155+func ap (L) = {
156+ let aq = valueOrErrorMessage(getString(this, N(L)), ("Invalid order id: " + toString(L)))
157+ let ar = split(aq, ",")
158+ let ak = ar[0]
159+ let al = ar[1]
160+ let as = valueOrErrorMessage(parseInt(ar[2]), "Invalid amountIn")
161+ let at = valueOrErrorMessage(parseInt(ar[3]), "Invalid leverage")
162+ let am = valueOrErrorMessage(parseInt(ar[4]), "Invalid type")
163+ let an = valueOrErrorMessage(parseInt(ar[5]), "Invalid triggerPrice")
164+ let au = valueOrErrorMessage(parseInt(ar[6]), "Invalid paymentUsdn")
165+ let av = valueOrErrorMessage(parseInt(ar[7]), "Invalid side")
166+ let aw = ar[8]
167+ let ax = valueOrErrorMessage(parseInt(ar[9]), "Invalid positionId")
168+ let ao = valueOrErrorMessage(parseInt(ar[10]), "Invalid limitPrice")
169+ $Tuple11(ak, al, as, at, am, an, au, av, aw, ax, ao)
170+ }
171+
172+
173+func ay (R) = {
174+ let az = invoke(addressFromStringValue(R), "computeSpotPrice", nil, nil)
175+ if ((az == az))
151176 then {
152- let as = {
153- let at = ar
154- if ($isInstanceOf(at, "Int"))
177+ let aA = {
178+ let aB = az
179+ if ($isInstanceOf(aB, "Int"))
155180 then {
156- let au = at
157- au
181+ let aC = aB
182+ aC
158183 }
159184 else throw("Invalid computeSpotPrice result")
160185 }
161- value(as)
186+ value(aA)
162187 }
163188 else throw("Strict value is not equal to itself.")
164189 }
165190
166191
167-func av (O,P) = {
168- let ar = invoke(addressFromStringValue(O), "computeFeeForTraderWithArtifact", [P, ""], nil)
169- if ((ar == ar))
192+func aD (R,S) = {
193+ let az = invoke(addressFromStringValue(R), "computeFeeForTraderWithArtifact", [S, ""], nil)
194+ if ((az == az))
170195 then {
171- let as = {
172- let at = ar
173- if ($isInstanceOf(at, "(Int, Boolean)"))
196+ let aA = {
197+ let aB = az
198+ if ($isInstanceOf(aB, "(Int, Boolean)"))
174199 then {
175- let au = at
176- au._1
200+ let aC = aB
201+ aC._1
177202 }
178203 else throw("Invalid computeFeeForTraderWithArtifact result")
179204 }
180- value(as)
205+ value(aA)
181206 }
182207 else throw("Strict value is not equal to itself.")
183208 }
184209
185210
186-func aw (ax,ay) = if (if ((ay == q))
211+func aE (aF,aG) = if (if ((aG == r))
187212 then true
188- else (ay == p))
189- then if ((ax == s))
190- then t
191- else s
192- else ax
213+ else (aG == q))
214+ then if ((aF == t))
215+ then u
216+ else t
217+ else aF
193218
194219
195-func az (O,P,aA) = {
196- let af = addressFromStringValue(O)
197- let aB = ((P + "_") + toString(aA))
198- let aC = G(g, aB)
199- valueOrElse(getInteger(af, aC), 0)
220+func aH (R,S,aI) = {
221+ let ak = addressFromStringValue(R)
222+ let aJ = ((S + "_") + toString(aI))
223+ let aK = H(g, aJ)
224+ valueOrElse(getInteger(ak, aK), 0)
200225 }
201226
202227
203-func aD (O,P,aA) = {
204- let af = addressFromStringValue(O)
205- let aB = ((P + "_") + toString(aA))
206- let aE = G(f, aB)
207- valueOrElse(getInteger(af, aE), 0)
228+func aL (R,S,aI) = {
229+ let ak = addressFromStringValue(R)
230+ let aJ = ((S + "_") + toString(aI))
231+ let aM = H(f, aJ)
232+ valueOrElse(getInteger(ak, aM), 0)
208233 }
209234
210235
211-func aF (aG) = E(aG, z)
236+func aN (aO) = F(aO, A)
212237
213238
214-func aH (K,O,P,aI,aJ,aK,aL,aM,aN,aO,aP,aQ) = {
215- let ad = makeString([O, P, toString(aI), toString(aJ), toString(aK), toString(aL), toString(aM), toString(aN), aO, toString(aP), toString(aQ)], ",")
216-[StringEntry(M(K), ad)]
239+func aP (L,R,S,aQ,aR,P,aS,aT,aU,aV,aW,aX) = {
240+ let aq = makeString([R, S, toString(aQ), toString(aR), toString(P), toString(aS), toString(aT), toString(aU), aV, toString(aW), toString(aX)], ",")
241+[StringEntry(N(L), aq)]
217242 }
218243
219244
220-func aR (aS,O,P) = [StringEntry(Q(O, P), aS)]
221-
222-
223-func aT (aU,K,O,P,aV) = {
224- let aW = if (aV)
225- then (aU :+ toString(K))
226- else removeByIndex(aU, valueOrErrorMessage(indexOf(aU, toString(K)), ("No order with id: " + toString(K))))
227- aW
245+func aY (L,R,S,P,aS,aX) = {
246+ let aZ = makeString([toString(L), R, S, toString(P), toString(aS), toString(aX)], ",")
247+[StringEntry(O(L, P), aZ)]
228248 }
229249
230250
231-func aX (K,O,P,aV) = {
232- let aY = aa(O, P)
233- let aW = aT(aY, K, O, P, aV)
234- let aZ = makeString(aW, ",")
235- aR(aZ, O, P)
251+func ba (bb,R,S) = [StringEntry(T(R, S), bb)]
252+
253+
254+func bc (bd,L,R,S,be) = {
255+ let bf = if (be)
256+ then (bd :+ toString(L))
257+ else removeByIndex(bd, valueOrErrorMessage(indexOf(bd, toString(L)), ("No order with id: " + toString(L))))
258+ bf
236259 }
237260
238261
239-func ba (O,P,bb) = if ((0 > bb))
240- then throw(("Invalid order count: " + toString(bb)))
241- else [IntegerEntry(N(O, P), bb)]
242-
243-
244-func bc (bd) = [IntegerEntry(k, bd)]
245-
246-
247-func be (K) = [BooleanEntry(G(h, toString(K)), true)]
248-
249-
250-func bf (K) = [BooleanEntry(G(i, toString(K)), true)]
251-
252-
253-func bg (O,P) = {
254- let bh = az(O, P, s)
255- let bi = if ((bh != 0))
256- then aD(O, P, s)
257- else 0
258- let bj = az(O, P, t)
259- let bk = if ((bj != 0))
260- then aD(O, P, t)
261- else 0
262-[bi, bk]
262+func bg (L,R,S,be) = {
263+ let bh = ad(R, S)
264+ let bf = bc(bh, L, R, S, be)
265+ let bi = makeString(bf, ",")
266+ ba(bi, R, S)
263267 }
264268
265269
266-@Callable(bl)
267-func cleanUpStaleOrders (O,P) = {
268- let bm = aa(O, P)
269- let bn = bg(O, P)
270- func bo (bp,K) = {
271- let bq = valueOrErrorMessage(parseInt(K), "Invalid order id")
272- let br = ac(bq)
273- let bs = br._1
274- let bt = br._2
275- let bu = br._3
276- let bv = br._4
277- let aK = br._5
278- let bw = br._6
279- let bx = br._7
280- let by = br._8
281- let bz = br._9
282- let aP = br._10
283- let bA = br._11
284- if (if (if (if ((aK == p))
270+func bj (R,S,bk) = if ((0 > bk))
271+ then throw(("Invalid order count: " + toString(bk)))
272+ else [IntegerEntry(Q(R, S), bk)]
273+
274+
275+func bl (bm) = [IntegerEntry(l, bm)]
276+
277+
278+func bn (L) = [BooleanEntry(H(h, toString(L)), true)]
279+
280+
281+func bo (L) = [BooleanEntry(H(i, toString(L)), true)]
282+
283+
284+func bp (R,S) = {
285+ let bq = aH(R, S, t)
286+ let br = if ((bq != 0))
287+ then aL(R, S, t)
288+ else 0
289+ let bs = aH(R, S, u)
290+ let bt = if ((bs != 0))
291+ then aL(R, S, u)
292+ else 0
293+[br, bt]
294+ }
295+
296+
297+@Callable(bu)
298+func cleanUpStaleOrders (R,S) = {
299+ let bv = ad(R, S)
300+ let bw = bp(R, S)
301+ func bx (by,L) = {
302+ let bz = valueOrErrorMessage(parseInt(L), "Invalid order id")
303+ let bA = ap(bz)
304+ let bB = bA._1
305+ let bC = bA._2
306+ let bD = bA._3
307+ let bE = bA._4
308+ let P = bA._5
309+ let bF = bA._6
310+ let bG = bA._7
311+ let bH = bA._8
312+ let bI = bA._9
313+ let aW = bA._10
314+ let bJ = bA._11
315+ if (if (if (if ((P == q))
285316 then true
286- else (aK == q))
287- then (bn[0] != aP)
317+ else (P == r))
318+ then (bw[0] != aW)
288319 else false)
289- then (bn[1] != aP)
320+ then (bw[1] != aW)
290321 else false)
291322 then {
292- let bB = bf(bq)
293- let bC = aT(bp._1, bq, O, P, false)
294- $Tuple2(bC, (bp._2 ++ bB))
323+ let bK = bo(bz)
324+ let bL = bc(by._1, bz, R, S, false)
325+ $Tuple2(bL, (by._2 ++ bK))
295326 }
296- else bp
327+ else by
297328 }
298329
299- let bD = {
300- let bE = bm
301- let bF = size(bE)
302- let bG = $Tuple2(bm, nil)
303- func bH (bI,bJ) = if ((bJ >= bF))
304- then bI
305- else bo(bI, bE[bJ])
330+ let bM = {
331+ let bN = bv
332+ let bO = size(bN)
333+ let bP = $Tuple2(bv, nil)
334+ func bQ (bR,bS) = if ((bS >= bO))
335+ then bR
336+ else bx(bR, bN[bS])
306337
307- func bK (bI,bJ) = if ((bJ >= bF))
308- then bI
309- else throw("List size exceeds 7")
338+ func bT (bR,bS) = if ((bS >= bO))
339+ then bR
340+ else throw("List size exceeds 10")
310341
311- bK(bH(bH(bH(bH(bH(bH(bH(bG, 0), 1), 2), 3), 4), 5), 6), 7)
342+ bT(bQ(bQ(bQ(bQ(bQ(bQ(bQ(bQ(bQ(bQ(bP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
312343 }
313- let bL = bD._1
314- let bM = bD._2
315- ((bM ++ ba(O, P, size(bL))) ++ aR(makeString(bL, ","), O, P))
344+ let bU = bM._1
345+ let bV = bM._2
346+ ((bV ++ bj(R, S, size(bU))) ++ ba(makeString(bU, ","), R, S))
316347 }
317348
318349
319350
320-@Callable(bl)
321-func setContext (bN) = if ((bl.caller != this))
351+@Callable(bu)
352+func setContext (bW) = if ((bu.caller != this))
322353 then throw("Only self-call")
323- else [StringEntry(n, bN)]
354+ else [StringEntry(o, bW)]
324355
325356
326357
327-@Callable(bl)
328-func resetContext () = if ((bl.caller != this))
358+@Callable(bu)
359+func resetContext () = if ((bu.caller != this))
329360 then throw("Only self-call")
330- else [DeleteEntry(n)]
361+ else [DeleteEntry(o)]
331362
332363
333364
334-@Callable(bl)
335-func initialize (bO) = if (if (V())
365+@Callable(bu)
366+func initialize (bX) = if (if (Y())
336367 then true
337- else (bl.caller != this))
368+ else (bu.caller != this))
338369 then throw("Unable to initialize")
339- else [StringEntry(a, toString(addressFromStringValue(bO))), BooleanEntry(o, true)]
370+ else [StringEntry(a, toString(addressFromStringValue(bX))), BooleanEntry(p, true)]
340371
341372
342373
343-@Callable(bl)
344-func createOrder (O,aK,aL,aQ,aI,aJ,aN,aO) = {
345- let P = toString(bl.caller)
346- let bP = invoke(this, "cleanUpStaleOrders", [O, P], nil)
347- if ((bP == bP))
348- then if ((size(bl.payments) > 1))
374+@Callable(bu)
375+func createOrder (R,P,aS,aX,aQ,aR,aU,aV,bY,bZ,ca,cb) = {
376+ let S = toString(bu.caller)
377+ let cc = invoke(this, "cleanUpStaleOrders", [R, S], nil)
378+ if ((cc == cc))
379+ then if ((size(bu.payments) > 1))
349380 then throw("Invalid createOrder parameters: invalid payment count")
350381 else {
351- let bQ = if ((size(bl.payments) == 1))
352- then $Tuple2(toBase58String(valueOrErrorMessage(bl.payments[0].assetId, "Invalid asset id")), bl.payments[0].amount)
382+ let cd = if ((size(bu.payments) == 1))
383+ then $Tuple2(toBase58String(valueOrErrorMessage(bu.payments[0].assetId, "Invalid asset id")), bu.payments[0].amount)
353384 else $Tuple2("", 0)
354- let bR = bQ._1
355- let bS = bQ._2
356- let bT = invoke(this, "internalCreateOrder", [P, O, aK, aL, aQ, aI, aJ, aN, aO, bR, bS], nil)
357- if ((bT == bT))
358- then nil
385+ let ce = cd._1
386+ let cf = cd._2
387+ let cg = invoke(this, "internalCreateOrder", [S, R, P, aS, aX, aQ, aR, aU, aV, ce, cf], nil)
388+ if ((cg == cg))
389+ then {
390+ let aj = {
391+ let aB = cg
392+ if ($isInstanceOf(aB, "Int"))
393+ then {
394+ let aC = aB
395+ aC
396+ }
397+ else throw("Invalid ID of created order")
398+ }
399+ if ((P == s))
400+ then {
401+ let ch = if ((bY > 0))
402+ then {
403+ let ci = invoke(this, "internalCreateOrderRequest", [S, R, aj, q, bY, bZ], nil)
404+ if ((ci == ci))
405+ then nil
406+ else throw("Strict value is not equal to itself.")
407+ }
408+ else nil
409+ let cj = if ((ca > 0))
410+ then {
411+ let ck = invoke(this, "internalCreateOrderRequest", [S, R, aj, r, ca, cb], nil)
412+ if ((ck == ck))
413+ then nil
414+ else throw("Strict value is not equal to itself.")
415+ }
416+ else nil
417+ (ch ++ cj)
418+ }
419+ else nil
420+ }
359421 else throw("Strict value is not equal to itself.")
360422 }
361423 else throw("Strict value is not equal to itself.")
363425
364426
365427
366-@Callable(bl)
367-func increasePositionWithStopLoss (O,aA,aJ,bU,aO,bV,bW,bX,bY) = {
368- let P = toString(bl.caller)
369- let bP = invoke(this, "cleanUpStaleOrders", [O, P], nil)
370- if ((bP == bP))
371- then if (if (!(V()))
428+@Callable(bu)
429+func increasePositionWithStopLoss (R,aI,aR,cl,aV,bY,bZ,ca,cb) = {
430+ let S = toString(bu.caller)
431+ let cc = invoke(this, "cleanUpStaleOrders", [R, S], nil)
432+ if ((cc == cc))
433+ then if (if (!(Y()))
372434 then true
373- else !(U(O)))
435+ else !(X(R)))
374436 then throw("Invalid increasePositionWithStopLoss parameters")
375437 else {
376- let bZ = az(O, P, aA)
377- if ((bZ != 0))
438+ let cm = aH(R, S, aI)
439+ if ((cm != 0))
378440 then throw("Invalid increasePositionWithStopLoss parameters: only new position")
379441 else {
380- let ca = invoke(this, "setContext", [P], nil)
381- if ((ca == ca))
442+ let cn = invoke(this, "setContext", [S], nil)
443+ if ((cn == cn))
382444 then {
383- let cb = invoke(addressFromStringValue(O), "increasePosition", [aA, aJ, bU, aO], bl.payments)
384- if ((cb == cb))
445+ let co = invoke(addressFromStringValue(R), "increasePosition", [aI, aR, cl, aV], bu.payments)
446+ if ((co == co))
385447 then {
386- let cc = invoke(this, "resetContext", nil, nil)
387- if ((cc == cc))
448+ let cp = invoke(this, "resetContext", nil, nil)
449+ if ((cp == cp))
388450 then {
389- let cd = az(O, P, aA)
390- if ((cd == cd))
451+ let cq = aH(R, S, aI)
452+ if ((cq == cq))
391453 then {
392- let ah = A(cd)
393- let ce = if ((0 > cd))
394- then s
395- else t
396- let cf = if ((bV > 0))
454+ let as = B(cq)
455+ let cr = if ((0 > cq))
456+ then t
457+ else u
458+ let cs = if ((bY > 0))
397459 then {
398- let cf = invoke(this, "internalCreateOrder", [P, O, p, bV, bW, ah, 0, ce, aO, "", 0], nil)
399- if ((cf == cf))
460+ let cs = invoke(this, "internalCreateOrder", [S, R, q, bY, bZ, as, 0, cr, aV, "", 0], nil)
461+ if ((cs == cs))
400462 then nil
401463 else throw("Strict value is not equal to itself.")
402464 }
403465 else nil
404- if ((cf == cf))
466+ if ((cs == cs))
405467 then {
406- let cg = if ((bX > 0))
468+ let ct = if ((ca > 0))
407469 then {
408- let cg = invoke(this, "internalCreateOrder", [P, O, q, bX, bY, ah, 0, ce, aO, "", 0], nil)
409- if ((cg == cg))
470+ let ct = invoke(this, "internalCreateOrder", [S, R, r, ca, cb, as, 0, cr, aV, "", 0], nil)
471+ if ((ct == ct))
410472 then nil
411473 else throw("Strict value is not equal to itself.")
412474 }
413475 else nil
414- if ((cg == cg))
476+ if ((ct == ct))
415477 then nil
416478 else throw("Strict value is not equal to itself.")
417479 }
431493
432494
433495
434-@Callable(bl)
435-func internalCreateOrder (P,O,aK,aL,aQ,aI,aJ,aN,aO,ch,ci) = if (if (if (if (if (if (if (if (if (!(V()))
496+@Callable(bu)
497+func internalMarkOrderExecuted (R,S,L) = if (if (if (!(Y()))
436498 then true
437- else !(U(O)))
499+ else !(X(R)))
438500 then true
439- else (0 >= aL))
501+ else !((bu.caller == this)))
502+ then throw("Invalid internalMarkOrderExecuted parameters")
503+ else {
504+ let cu = (ab(R, S) - 1)
505+ ((bj(R, S, cu) ++ bg(L, R, S, false)) ++ bn(L))
506+ }
507+
508+
509+
510+@Callable(bu)
511+func internalCreateOrderRequest (S,R,L,P,aS,aX) = if (if (if (if (if (!(Y()))
440512 then true
441- else (0 > aQ))
513+ else !(X(R)))
442514 then true
443- else (0 >= aI))
515+ else (0 >= aS))
444516 then true
445- else (0 > aJ))
517+ else (0 > aX))
446518 then true
447- else !(if ((aN == s))
519+ else !((bu.caller == this)))
520+ then throw("Invalid internalCreateOrderRequest parameters")
521+ else aY(L, R, S, P, aS, aX)
522+
523+
524+
525+@Callable(bu)
526+func internalCreateOrder (S,R,P,aS,aX,aQ,aR,aU,aV,cv,cw) = if (if (if (if (if (if (if (if (if (!(Y()))
527+ then true
528+ else !(X(R)))
529+ then true
530+ else (0 >= aS))
531+ then true
532+ else (0 > aX))
533+ then true
534+ else (0 >= aQ))
535+ then true
536+ else (0 > aR))
537+ then true
538+ else !(if ((aU == t))
448539 then true
449- else (aN == t)))
540+ else (aU == u)))
450541 then true
451- else !(if (if ((aK == p))
542+ else !(if (if ((P == q))
452543 then true
453- else (aK == q))
544+ else (P == r))
454545 then true
455- else (aK == r)))
546+ else (P == s)))
456547 then true
457- else !((bl.caller == this)))
458- then throw("Invalid createOrder parameters")
548+ else !((bu.caller == this)))
549+ then throw("Invalid internalCreateOrder parameters")
459550 else {
460- let cj = (X() + 1)
461- let ck = aw(aN, aK)
462- let cl = (Y(O, P) + 1)
463- let bZ = az(O, P, ck)
464- let aA = if (if (if ((bZ == 0))
551+ let aj = (aa() + 1)
552+ let cx = aE(aU, P)
553+ let cu = (ab(R, S) + 1)
554+ let cm = aH(R, S, cx)
555+ let aI = if (if (if ((cm == 0))
465556 then true
466- else if ((bZ > 0))
467- then (aN == s)
557+ else if ((cm > 0))
558+ then (aU == t)
468559 else false)
469560 then true
470- else if ((0 > bZ))
471- then (aN == t)
561+ else if ((0 > cm))
562+ then (aU == u)
472563 else false)
473- then u
474- else v
475- if (if ((bZ == 0))
476- then if ((aK == p))
564+ then v
565+ else w
566+ if (if ((cm == 0))
567+ then if ((P == q))
477568 then true
478- else (aK == q)
569+ else (P == r)
479570 else false)
480571 then throw("Can not create STOP/TAKE order: no position")
481572 else {
482- let cm = if ((aA == u))
483- then if (if ((ch != toBase58String(S())))
573+ let cy = if ((aI == v))
574+ then if (if ((cv != toBase58String(V())))
484575 then true
485- else (ci != aI))
576+ else (cw != aQ))
486577 then throw("Invalid createLimitOrder parameters: invalid payment")
487578 else {
488- let cn = invoke(T(), "deposit", nil, [AttachedPayment(S(), ci)])
489- if ((cn == cn))
490- then ci
579+ let cz = invoke(W(), "deposit", nil, [AttachedPayment(V(), cw)])
580+ if ((cz == cz))
581+ then cw
491582 else throw("Strict value is not equal to itself.")
492583 }
493584 else 0
494- if ((cm == cm))
585+ if ((cy == cy))
495586 then {
496- let ao = if ((bZ != 0))
497- then aD(O, P, ck)
587+ let ax = if ((cm != 0))
588+ then aL(R, S, cx)
498589 else 0
499- if (if (if ((aK == p))
590+ if (if (if ((P == q))
500591 then true
501- else (aK == q))
502- then (ao == 0)
592+ else (P == r))
593+ then (ax == 0)
503594 else false)
504595 then throw("STOP and TAKE order should be assigned to position with id != 0")
505- else if ((cl > w))
596+ else if ((cu > x))
506597 then throw("Invalid createLimitOrder parameters: order count")
507- else (((aH(cj, O, P, aI, aJ, aK, aL, cm, aN, aO, ao, aQ) ++ aX(cj, O, P, true)) ++ ba(O, P, cl)) ++ bc(cj))
598+ else {
599+ let cA = (((aP(aj, R, S, aQ, aR, P, aS, cy, aU, aV, ax, aX) ++ bg(aj, R, S, true)) ++ bj(R, S, cu)) ++ bl(aj))
600+ $Tuple2(cA, aj)
601+ }
508602 }
509603 else throw("Strict value is not equal to itself.")
510604 }
512606
513607
514608
515-@Callable(bl)
516-func cancelOrder (K) = {
517- let co = ac(K)
518- let O = co._1
519- let P = co._2
520- let aI = co._3
521- let aJ = co._4
522- let aK = co._5
523- let aL = co._6
524- let cp = co._7
525- let aN = co._8
526- let aO = co._9
527- let aP = co._10
528- let aQ = co._11
529- if (if (if (!(V()))
609+@Callable(bu)
610+func cancelOrder (L) = {
611+ let cB = ap(L)
612+ let R = cB._1
613+ let S = cB._2
614+ let aQ = cB._3
615+ let aR = cB._4
616+ let P = cB._5
617+ let aS = cB._6
618+ let cC = cB._7
619+ let aU = cB._8
620+ let aV = cB._9
621+ let aW = cB._10
622+ let aX = cB._11
623+ if (if (if (!(Y()))
530624 then true
531- else !(W(K)))
625+ else !(Z(L)))
532626 then true
533- else !((toString(bl.caller) == P)))
627+ else !((toString(bu.caller) == S)))
534628 then throw("Invalid cancelOrder parameters")
535629 else {
536- let bP = invoke(this, "cleanUpStaleOrders", [O, P], nil)
537- if ((bP == bP))
630+ let cc = invoke(this, "cleanUpStaleOrders", [R, S], nil)
631+ if ((cc == cc))
538632 then {
539- let cl = (Y(O, P) - 1)
540- let cq = if ((cp > 0))
633+ let cu = (ab(R, S) - 1)
634+ let cD = if ((cC > 0))
541635 then {
542- let cr = invoke(T(), "withdraw", [toBase58String(S()), cp], nil)
543- if ((cr == cr))
636+ let cE = invoke(W(), "withdraw", [toBase58String(V()), cC], nil)
637+ if ((cE == cE))
544638 then nil
545639 else throw("Strict value is not equal to itself.")
546640 }
547641 else nil
548- if ((cq == cq))
549- then (((bf(K) ++ aX(K, O, P, false)) ++ ba(O, P, cl)) ++ (if ((cp > 0))
550- then [ScriptTransfer(bl.caller, cp, S())]
642+ if ((cD == cD))
643+ then (((bo(L) ++ bg(L, R, S, false)) ++ bj(R, S, cu)) ++ (if ((cC > 0))
644+ then [ScriptTransfer(bu.caller, cC, V())]
551645 else nil))
552646 else throw("Strict value is not equal to itself.")
553647 }
557651
558652
559653
560-@Callable(bl)
561-func executeOrder (K) = {
562- let cs = ac(K)
563- let O = cs._1
564- let P = cs._2
565- let aI = cs._3
566- let aJ = cs._4
567- let aK = cs._5
568- let aL = cs._6
569- let cp = cs._7
570- let aN = cs._8
571- let aO = cs._9
572- let aP = cs._10
573- let aQ = cs._11
574- let bP = invoke(this, "cleanUpStaleOrders", [O, P], nil)
575- if ((bP == bP))
654+@Callable(bu)
655+func executeOrder (L) = {
656+ let cF = ap(L)
657+ let R = cF._1
658+ let S = cF._2
659+ let aQ = cF._3
660+ let aR = cF._4
661+ let P = cF._5
662+ let aS = cF._6
663+ let cC = cF._7
664+ let aU = cF._8
665+ let aV = cF._9
666+ let aW = cF._10
667+ let aX = cF._11
668+ let cc = invoke(this, "cleanUpStaleOrders", [R, S], nil)
669+ if ((cc == cc))
576670 then {
577- let ck = aw(aN, aK)
578- if (if (!(V()))
671+ let cx = aE(aU, P)
672+ if (if (!(Y()))
579673 then true
580- else !(W(K)))
674+ else !(Z(L)))
581675 then throw("Invalid executeOrder parameters")
582676 else {
583- let bZ = az(O, P, ck)
584- let ct = if ((bZ != 0))
585- then aD(O, P, ck)
586- else 0
587- let cu = if ((aK == p))
677+ let cm = aH(R, S, cx)
678+ if ((cm == cm))
588679 then {
589- let cv = if ((bZ > 0))
590- then s
591- else if ((0 > bZ))
592- then t
593- else throw("Can not execute STOP order: no open position")
594- let cw = aq(O)
595- let cx = if ((aN == cv))
596- then throw("Can not execute STOP order: reduce only")
597- else if ((ct != aP))
598- then throw("Can not execute STOP order: position closed")
599- else if ((cv == s))
600- then (aL >= cw)
601- else (cw >= aL)
602- if (cx)
603- then $Tuple3("closePosition", [F(aI, A(bZ)), ck, E(aQ, A(bZ)), false], nil)
604- else throw("Can not execute STOP order: triggerPrice mismatch")
605- }
606- else if ((aK == q))
607- then {
608- let cv = if ((bZ > 0))
609- then s
610- else if ((0 > bZ))
680+ let cG = if ((cm != 0))
681+ then aL(R, S, cx)
682+ else 0
683+ let cH = if ((P == q))
684+ then {
685+ let cI = if ((cm > 0))
611686 then t
612- else throw("Can not execute STOP order: no open position")
613- let cw = aq(O)
614- let cx = if ((aN == cv))
615- then throw("Can not execute TAKE order: reduce only")
616- else if ((ct != aP))
617- then throw(((("Can not execute TAKE order: position closed " + toString(ct)) + "!=") + toString(aP)))
618- else if ((cv == s))
619- then (cw >= aL)
620- else (aL >= cw)
621- if (cx)
622- then $Tuple3("closePosition", [F(aI, A(bZ)), ck, E(aQ, A(bZ)), false], nil)
623- else throw("Can not execute TAKE order: triggerPrice mismatch")
624- }
625- else if ((aK == r))
687+ else if ((0 > cm))
688+ then u
689+ else throw("Can not execute STOP order: no open position")
690+ let cJ = ay(R)
691+ let cK = if ((aU == cI))
692+ then throw("Can not execute STOP order: reduce only")
693+ else if ((cG != aW))
694+ then throw("Can not execute STOP order: position closed")
695+ else if ((cI == t))
696+ then (aS >= cJ)
697+ else (cJ >= aS)
698+ if (cK)
699+ then $Tuple3("closePosition", [G(aQ, B(cm)), cx, F(aX, B(cm)), false], nil)
700+ else throw("Can not execute STOP order: triggerPrice mismatch")
701+ }
702+ else if ((P == r))
703+ then {
704+ let cI = if ((cm > 0))
705+ then t
706+ else if ((0 > cm))
707+ then u
708+ else throw("Can not execute STOP order: no open position")
709+ let cJ = ay(R)
710+ let cK = if ((aU == cI))
711+ then throw("Can not execute TAKE order: reduce only")
712+ else if ((cG != aW))
713+ then throw(((("Can not execute TAKE order: position closed " + toString(cG)) + "!=") + toString(aW)))
714+ else if ((cI == t))
715+ then (cJ >= aS)
716+ else (aS >= cJ)
717+ if (cK)
718+ then $Tuple3("closePosition", [G(aQ, B(cm)), cx, F(aX, B(cm)), false], nil)
719+ else throw("Can not execute TAKE order: triggerPrice mismatch")
720+ }
721+ else if ((P == s))
722+ then {
723+ let cJ = ay(R)
724+ let cL = if ((aX == 0))
725+ then aN(aS)
726+ else B((aS - aX))
727+ let cK = if ((cJ >= (aS - cL)))
728+ then ((aS + cL) >= cJ)
729+ else false
730+ if (cK)
731+ then {
732+ let cM = (cC - F(cC, aD(R, S)))
733+ $Tuple3("increasePosition", [aU, aR, if ((aX == 0))
734+ then 0
735+ else D(cM, aX), aV], [AttachedPayment(V(), cC)])
736+ }
737+ else throw("Can not execute LIMIT order: triggerPrice mismatch")
738+ }
739+ else throw(("Invalid order type: " + toString(P)))
740+ let cN = cH._1
741+ let cO = cH._2
742+ let cP = cH._3
743+ let cD = if ((size(cP) == 1))
626744 then {
627- let cw = aq(O)
628- let cy = if ((aQ == 0))
629- then aF(aL)
630- else A((aL - aQ))
631- let cx = if ((cw >= (aL - cy)))
632- then ((aL + cy) >= cw)
633- else false
634- if (cx)
745+ let cE = invoke(W(), "withdraw", [toBase58String(V()), cP[0].amount], nil)
746+ if ((cE == cE))
747+ then nil
748+ else throw("Strict value is not equal to itself.")
749+ }
750+ else nil
751+ if ((cD == cD))
752+ then {
753+ let cn = invoke(this, "setContext", [S], nil)
754+ if ((cn == cn))
635755 then {
636- let cz = (cp - E(cp, av(O, P)))
637- $Tuple3("increasePosition", [aN, aJ, if ((aQ == 0))
638- then 0
639- else C(cz, aQ), aO], [AttachedPayment(S(), cp)])
640- }
641- else throw("Can not execute LIMIT order: triggerPrice mismatch")
642- }
643- else throw(("Invalid order type: " + toString(aK)))
644- let cA = cu._1
645- let cB = cu._2
646- let cC = cu._3
647- let cq = if ((size(cC) == 1))
648- then {
649- let cr = invoke(T(), "withdraw", [toBase58String(S()), cC[0].amount], nil)
650- if ((cr == cr))
651- then nil
652- else throw("Strict value is not equal to itself.")
653- }
654- else nil
655- if ((cq == cq))
656- then {
657- let ca = invoke(this, "setContext", [P], nil)
658- if ((ca == ca))
659- then {
660- let cb = invoke(addressFromStringValue(O), cA, cB, cC)
661- if ((cb == cb))
662- then {
663- let cc = invoke(this, "resetContext", nil, nil)
664- if ((cc == cc))
756+ let co = invoke(addressFromStringValue(R), cN, cO, cP)
757+ if ((co == co))
665758 then {
666- let cl = (Y(O, P) - 1)
667- ((ba(O, P, cl) ++ aX(K, O, P, false)) ++ be(K))
759+ let cp = invoke(this, "resetContext", nil, nil)
760+ if ((cp == cp))
761+ then {
762+ let cQ = if ((P == s))
763+ then {
764+ let cR = aH(R, S, cx)
765+ if ((cR == cR))
766+ then {
767+ let cS = aL(R, S, cx)
768+ if ((cS == cS))
769+ then {
770+ let cT = (cR - cm)
771+ let cU = if ((cR > 0))
772+ then u
773+ else t
774+ let cV = if (af(L, r))
775+ then {
776+ let cW = ag(L, r)
777+ let cX = cW._1
778+ let cY = cW._2
779+ let cZ = cW._3
780+ let da = cW._4
781+ let db = cW._5
782+ let dc = cW._6
783+ let cg = invoke(this, "internalCreateOrder", [cZ, cY, da, db, dc, cT, 0, cU, "", "", 0], nil)
784+ if ((cg == cg))
785+ then nil
786+ else throw("Strict value is not equal to itself.")
787+ }
788+ else nil
789+ if ((cV == cV))
790+ then {
791+ let dd = if (af(L, q))
792+ then {
793+ let de = ag(L, q)
794+ let cX = de._1
795+ let cY = de._2
796+ let cZ = de._3
797+ let da = de._4
798+ let db = de._5
799+ let dc = de._6
800+ let cg = invoke(this, "internalCreateOrder", [cZ, cY, da, db, dc, cT, 0, cU, "", "", 0], nil)
801+ if ((cg == cg))
802+ then nil
803+ else throw("Strict value is not equal to itself.")
804+ }
805+ else nil
806+ if ((dd == dd))
807+ then (cV ++ dd)
808+ else throw("Strict value is not equal to itself.")
809+ }
810+ else throw("Strict value is not equal to itself.")
811+ }
812+ else throw("Strict value is not equal to itself.")
813+ }
814+ else throw("Strict value is not equal to itself.")
815+ }
816+ else nil
817+ if ((cQ == cQ))
818+ then {
819+ let df = invoke(this, "internalMarkOrderExecuted", [R, S, L], nil)
820+ if ((df == df))
821+ then nil
822+ else throw("Strict value is not equal to itself.")
823+ }
824+ else throw("Strict value is not equal to itself.")
825+ }
826+ else throw("Strict value is not equal to itself.")
668827 }
669828 else throw("Strict value is not equal to itself.")
670829 }
680839
681840
682841
683-@Callable(bl)
684-func view_canExecuteOrder (K) = {
685- let ar = invoke(this, "executeOrder", [K], nil)
686- if ((ar == ar))
842+@Callable(bu)
843+func view_canExecuteOrder (L) = {
844+ let az = invoke(this, "executeOrder", [L], nil)
845+ if ((az == az))
687846 then throw("Success")
688847 else throw("Strict value is not equal to itself.")
689848 }
690849
691850
692-@Verifier(cD)
693-func cE () = {
694- let cF = getString(this, a)
695- if (isDefined(cF))
851+@Verifier(dg)
852+func dh () = {
853+ let di = getString(this, a)
854+ if (isDefined(di))
696855 then {
697- let cG = getString(addressFromStringValue(value(cF)), b)
698- if (isDefined(cG))
699- then valueOrElse(getBoolean(addressFromStringValue(value(cG)), ((("status_" + toString(this)) + "_") + toBase58String(cD.id))), false)
856+ let dj = getString(addressFromStringValue(value(di)), b)
857+ if (isDefined(dj))
858+ then valueOrElse(getBoolean(addressFromStringValue(value(dj)), ((("status_" + toString(this)) + "_") + toBase58String(dg.id))), false)
700859 else throw("unable to verify: admin not set in coordinator")
701860 }
702- else sigVerify(cD.bodyBytes, cD.proofs[0], cD.senderPublicKey)
861+ else sigVerify(dg.bodyBytes, dg.proofs[0], dg.senderPublicKey)
703862 }
704863
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "k_coordinatorAddress"
55
66 let b = "k_admin_address"
77
88 let c = "k_quote_asset"
99
1010 let d = "k_amm"
1111
1212 let e = "k_manager_address"
1313
1414 let f = "k_positionSequence"
1515
1616 let g = "k_positionSize"
1717
1818 let h = "k_executedOrders"
1919
2020 let i = "k_canceledOrders"
2121
2222 let j = "k_order"
2323
24-let k = "k_lastOrderId"
24+let k = "k_orderReq"
2525
26-let l = "k_traderOrderCnt"
26+let l = "k_lastOrderId"
2727
28-let m = "k_traderOrderIds"
28+let m = "k_traderOrderCnt"
2929
30-let n = "k_sender"
30+let n = "k_traderOrderIds"
3131
32-let o = "k_initialized"
32+let o = "k_sender"
3333
34-let p = 1
34+let p = "k_initialized"
3535
36-let q = 2
36+let q = 1
3737
38-let r = 3
38+let r = 2
3939
40-let s = 1
40+let s = 3
4141
42-let t = 2
42+let t = 1
4343
44-let u = 1
44+let u = 2
4545
46-let v = 2
46+let v = 1
4747
48-let w = 5
48+let w = 2
4949
50-let x = lastBlock.timestamp
50+let x = 10
5151
52-let y = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
52+let y = lastBlock.timestamp
5353
54-let z = (y / 200)
54+let z = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
5555
56-func A (B) = if ((B > 0))
57- then B
58- else -(B)
56+let A = (z / 200)
57+
58+func B (C) = if ((C > 0))
59+ then C
60+ else -(C)
5961
6062
61-func C (B,D) = fraction(B, y, D, HALFEVEN)
63+func D (C,E) = fraction(C, z, E, HALFEVEN)
6264
6365
64-func E (B,D) = fraction(B, D, y, HALFEVEN)
66+func F (C,E) = fraction(C, E, z, HALFEVEN)
6567
6668
67-func F (B,D) = if ((B > D))
68- then D
69- else B
69+func G (C,E) = if ((C > E))
70+ then E
71+ else C
7072
7173
72-func G (H,I) = ((H + "_") + I)
74+func H (I,J) = ((I + "_") + J)
7375
7476
75-func J (K) = ((h + "_") + toString(K))
77+func K (L) = ((h + "_") + toString(L))
7678
7779
78-func L (K) = ((i + "_") + toString(K))
80+func M (L) = ((i + "_") + toString(L))
7981
8082
81-func M (K) = G(j, toString(K))
83+func N (L) = H(j, toString(L))
8284
8385
84-func N (O,P) = ((((l + "_") + O) + "_") + P)
86+func O (L,P) = ((((k + "_") + toString(L)) + "_") + toString(P))
8587
8688
87-func Q (O,P) = ((((m + "_") + O) + "_") + P)
89+func Q (R,S) = ((((m + "_") + R) + "_") + S)
8890
8991
90-func R () = valueOrErrorMessage(addressFromString(getStringValue(this, a)), "Coordinator not set")
92+func T (R,S) = ((((n + "_") + R) + "_") + S)
9193
9294
93-func S () = fromBase58String(getStringValue(R(), c))
95+func U () = valueOrErrorMessage(addressFromString(getStringValue(this, a)), "Coordinator not set")
9496
9597
96-func T () = valueOrErrorMessage(addressFromString(getStringValue(R(), e)), "Manager not set")
98+func V () = fromBase58String(getStringValue(U(), c))
9799
98100
99-func U (I) = valueOrElse(getBoolean(R(), G(d, I)), false)
101+func W () = valueOrErrorMessage(addressFromString(getStringValue(U(), e)), "Manager not set")
100102
101103
102-func V () = valueOrElse(getBoolean(this, o), false)
104+func X (J) = valueOrElse(getBoolean(U(), H(d, J)), false)
103105
104106
105-func W (K) = if (valueOrElse(getBoolean(this, J(K)), false))
106- then throw(("Order already executed: " + toString(K)))
107- else if (valueOrElse(getBoolean(this, L(K)), false))
108- then throw(("Order already cancelled: " + toString(K)))
107+func Y () = valueOrElse(getBoolean(this, p), false)
108+
109+
110+func Z (L) = if (valueOrElse(getBoolean(this, K(L)), false))
111+ then throw(("Order already executed: " + toString(L)))
112+ else if (valueOrElse(getBoolean(this, M(L)), false))
113+ then throw(("Order already cancelled: " + toString(L)))
109114 else true
110115
111116
112-func X () = valueOrElse(getInteger(this, k), 0)
117+func aa () = valueOrElse(getInteger(this, l), 0)
113118
114119
115-func Y (O,P) = {
116- let Z = N(O, P)
117- valueOrElse(getInteger(this, Z), 0)
120+func ab (R,S) = {
121+ let ac = Q(R, S)
122+ valueOrElse(getInteger(this, ac), 0)
118123 }
119124
120125
121-func aa (O,P) = {
122- let Z = Q(O, P)
123- let ab = valueOrElse(getString(this, Z), "")
124- if ((ab == ""))
126+func ad (R,S) = {
127+ let ac = T(R, S)
128+ let ae = valueOrElse(getString(this, ac), "")
129+ if ((ae == ""))
125130 then nil
126- else split(ab, ",")
131+ else split(ae, ",")
127132 }
128133
129134
130-func ac (K) = {
131- let ad = valueOrErrorMessage(getString(this, M(K)), ("Invalid order id: " + toString(K)))
132- let ae = split(ad, ",")
133- let af = ae[0]
134- let ag = ae[1]
135- let ah = valueOrErrorMessage(parseInt(ae[2]), "Invalid amountIn")
136- let ai = valueOrErrorMessage(parseInt(ae[3]), "Invalid leverage")
137- let aj = valueOrErrorMessage(parseInt(ae[4]), "Invalid type")
138- let ak = valueOrErrorMessage(parseInt(ae[5]), "Invalid triggerPrice")
139- let al = valueOrErrorMessage(parseInt(ae[6]), "Invalid paymentUsdn")
140- let am = valueOrErrorMessage(parseInt(ae[7]), "Invalid side")
141- let an = ae[8]
142- let ao = valueOrErrorMessage(parseInt(ae[9]), "Invalid positionId")
143- let ap = valueOrErrorMessage(parseInt(ae[10]), "Invalid limitPrice")
144- $Tuple11(af, ag, ah, ai, aj, ak, al, am, an, ao, ap)
135+func af (L,P) = {
136+ let ac = O(L, P)
137+ isDefined(getString(this, ac))
145138 }
146139
147140
148-func aq (O) = {
149- let ar = invoke(addressFromStringValue(O), "computeSpotPrice", nil, nil)
150- if ((ar == ar))
141+func ag (L,P) = {
142+ let ac = O(L, P)
143+ let ah = valueOrErrorMessage(getString(this, ac), ("Not order request for key: " + ac))
144+ let ai = split(ah, ",")
145+ let aj = valueOrErrorMessage(parseInt(ai[0]), "Invalid orderId")
146+ let ak = ai[1]
147+ let al = ai[2]
148+ let am = valueOrErrorMessage(parseInt(ai[3]), "Invalid type")
149+ let an = valueOrErrorMessage(parseInt(ai[4]), "Invalid triggerPrice")
150+ let ao = valueOrErrorMessage(parseInt(ai[5]), "Invalid limitPrice")
151+ $Tuple6(aj, ak, al, am, an, ao)
152+ }
153+
154+
155+func ap (L) = {
156+ let aq = valueOrErrorMessage(getString(this, N(L)), ("Invalid order id: " + toString(L)))
157+ let ar = split(aq, ",")
158+ let ak = ar[0]
159+ let al = ar[1]
160+ let as = valueOrErrorMessage(parseInt(ar[2]), "Invalid amountIn")
161+ let at = valueOrErrorMessage(parseInt(ar[3]), "Invalid leverage")
162+ let am = valueOrErrorMessage(parseInt(ar[4]), "Invalid type")
163+ let an = valueOrErrorMessage(parseInt(ar[5]), "Invalid triggerPrice")
164+ let au = valueOrErrorMessage(parseInt(ar[6]), "Invalid paymentUsdn")
165+ let av = valueOrErrorMessage(parseInt(ar[7]), "Invalid side")
166+ let aw = ar[8]
167+ let ax = valueOrErrorMessage(parseInt(ar[9]), "Invalid positionId")
168+ let ao = valueOrErrorMessage(parseInt(ar[10]), "Invalid limitPrice")
169+ $Tuple11(ak, al, as, at, am, an, au, av, aw, ax, ao)
170+ }
171+
172+
173+func ay (R) = {
174+ let az = invoke(addressFromStringValue(R), "computeSpotPrice", nil, nil)
175+ if ((az == az))
151176 then {
152- let as = {
153- let at = ar
154- if ($isInstanceOf(at, "Int"))
177+ let aA = {
178+ let aB = az
179+ if ($isInstanceOf(aB, "Int"))
155180 then {
156- let au = at
157- au
181+ let aC = aB
182+ aC
158183 }
159184 else throw("Invalid computeSpotPrice result")
160185 }
161- value(as)
186+ value(aA)
162187 }
163188 else throw("Strict value is not equal to itself.")
164189 }
165190
166191
167-func av (O,P) = {
168- let ar = invoke(addressFromStringValue(O), "computeFeeForTraderWithArtifact", [P, ""], nil)
169- if ((ar == ar))
192+func aD (R,S) = {
193+ let az = invoke(addressFromStringValue(R), "computeFeeForTraderWithArtifact", [S, ""], nil)
194+ if ((az == az))
170195 then {
171- let as = {
172- let at = ar
173- if ($isInstanceOf(at, "(Int, Boolean)"))
196+ let aA = {
197+ let aB = az
198+ if ($isInstanceOf(aB, "(Int, Boolean)"))
174199 then {
175- let au = at
176- au._1
200+ let aC = aB
201+ aC._1
177202 }
178203 else throw("Invalid computeFeeForTraderWithArtifact result")
179204 }
180- value(as)
205+ value(aA)
181206 }
182207 else throw("Strict value is not equal to itself.")
183208 }
184209
185210
186-func aw (ax,ay) = if (if ((ay == q))
211+func aE (aF,aG) = if (if ((aG == r))
187212 then true
188- else (ay == p))
189- then if ((ax == s))
190- then t
191- else s
192- else ax
213+ else (aG == q))
214+ then if ((aF == t))
215+ then u
216+ else t
217+ else aF
193218
194219
195-func az (O,P,aA) = {
196- let af = addressFromStringValue(O)
197- let aB = ((P + "_") + toString(aA))
198- let aC = G(g, aB)
199- valueOrElse(getInteger(af, aC), 0)
220+func aH (R,S,aI) = {
221+ let ak = addressFromStringValue(R)
222+ let aJ = ((S + "_") + toString(aI))
223+ let aK = H(g, aJ)
224+ valueOrElse(getInteger(ak, aK), 0)
200225 }
201226
202227
203-func aD (O,P,aA) = {
204- let af = addressFromStringValue(O)
205- let aB = ((P + "_") + toString(aA))
206- let aE = G(f, aB)
207- valueOrElse(getInteger(af, aE), 0)
228+func aL (R,S,aI) = {
229+ let ak = addressFromStringValue(R)
230+ let aJ = ((S + "_") + toString(aI))
231+ let aM = H(f, aJ)
232+ valueOrElse(getInteger(ak, aM), 0)
208233 }
209234
210235
211-func aF (aG) = E(aG, z)
236+func aN (aO) = F(aO, A)
212237
213238
214-func aH (K,O,P,aI,aJ,aK,aL,aM,aN,aO,aP,aQ) = {
215- let ad = makeString([O, P, toString(aI), toString(aJ), toString(aK), toString(aL), toString(aM), toString(aN), aO, toString(aP), toString(aQ)], ",")
216-[StringEntry(M(K), ad)]
239+func aP (L,R,S,aQ,aR,P,aS,aT,aU,aV,aW,aX) = {
240+ let aq = makeString([R, S, toString(aQ), toString(aR), toString(P), toString(aS), toString(aT), toString(aU), aV, toString(aW), toString(aX)], ",")
241+[StringEntry(N(L), aq)]
217242 }
218243
219244
220-func aR (aS,O,P) = [StringEntry(Q(O, P), aS)]
221-
222-
223-func aT (aU,K,O,P,aV) = {
224- let aW = if (aV)
225- then (aU :+ toString(K))
226- else removeByIndex(aU, valueOrErrorMessage(indexOf(aU, toString(K)), ("No order with id: " + toString(K))))
227- aW
245+func aY (L,R,S,P,aS,aX) = {
246+ let aZ = makeString([toString(L), R, S, toString(P), toString(aS), toString(aX)], ",")
247+[StringEntry(O(L, P), aZ)]
228248 }
229249
230250
231-func aX (K,O,P,aV) = {
232- let aY = aa(O, P)
233- let aW = aT(aY, K, O, P, aV)
234- let aZ = makeString(aW, ",")
235- aR(aZ, O, P)
251+func ba (bb,R,S) = [StringEntry(T(R, S), bb)]
252+
253+
254+func bc (bd,L,R,S,be) = {
255+ let bf = if (be)
256+ then (bd :+ toString(L))
257+ else removeByIndex(bd, valueOrErrorMessage(indexOf(bd, toString(L)), ("No order with id: " + toString(L))))
258+ bf
236259 }
237260
238261
239-func ba (O,P,bb) = if ((0 > bb))
240- then throw(("Invalid order count: " + toString(bb)))
241- else [IntegerEntry(N(O, P), bb)]
242-
243-
244-func bc (bd) = [IntegerEntry(k, bd)]
245-
246-
247-func be (K) = [BooleanEntry(G(h, toString(K)), true)]
248-
249-
250-func bf (K) = [BooleanEntry(G(i, toString(K)), true)]
251-
252-
253-func bg (O,P) = {
254- let bh = az(O, P, s)
255- let bi = if ((bh != 0))
256- then aD(O, P, s)
257- else 0
258- let bj = az(O, P, t)
259- let bk = if ((bj != 0))
260- then aD(O, P, t)
261- else 0
262-[bi, bk]
262+func bg (L,R,S,be) = {
263+ let bh = ad(R, S)
264+ let bf = bc(bh, L, R, S, be)
265+ let bi = makeString(bf, ",")
266+ ba(bi, R, S)
263267 }
264268
265269
266-@Callable(bl)
267-func cleanUpStaleOrders (O,P) = {
268- let bm = aa(O, P)
269- let bn = bg(O, P)
270- func bo (bp,K) = {
271- let bq = valueOrErrorMessage(parseInt(K), "Invalid order id")
272- let br = ac(bq)
273- let bs = br._1
274- let bt = br._2
275- let bu = br._3
276- let bv = br._4
277- let aK = br._5
278- let bw = br._6
279- let bx = br._7
280- let by = br._8
281- let bz = br._9
282- let aP = br._10
283- let bA = br._11
284- if (if (if (if ((aK == p))
270+func bj (R,S,bk) = if ((0 > bk))
271+ then throw(("Invalid order count: " + toString(bk)))
272+ else [IntegerEntry(Q(R, S), bk)]
273+
274+
275+func bl (bm) = [IntegerEntry(l, bm)]
276+
277+
278+func bn (L) = [BooleanEntry(H(h, toString(L)), true)]
279+
280+
281+func bo (L) = [BooleanEntry(H(i, toString(L)), true)]
282+
283+
284+func bp (R,S) = {
285+ let bq = aH(R, S, t)
286+ let br = if ((bq != 0))
287+ then aL(R, S, t)
288+ else 0
289+ let bs = aH(R, S, u)
290+ let bt = if ((bs != 0))
291+ then aL(R, S, u)
292+ else 0
293+[br, bt]
294+ }
295+
296+
297+@Callable(bu)
298+func cleanUpStaleOrders (R,S) = {
299+ let bv = ad(R, S)
300+ let bw = bp(R, S)
301+ func bx (by,L) = {
302+ let bz = valueOrErrorMessage(parseInt(L), "Invalid order id")
303+ let bA = ap(bz)
304+ let bB = bA._1
305+ let bC = bA._2
306+ let bD = bA._3
307+ let bE = bA._4
308+ let P = bA._5
309+ let bF = bA._6
310+ let bG = bA._7
311+ let bH = bA._8
312+ let bI = bA._9
313+ let aW = bA._10
314+ let bJ = bA._11
315+ if (if (if (if ((P == q))
285316 then true
286- else (aK == q))
287- then (bn[0] != aP)
317+ else (P == r))
318+ then (bw[0] != aW)
288319 else false)
289- then (bn[1] != aP)
320+ then (bw[1] != aW)
290321 else false)
291322 then {
292- let bB = bf(bq)
293- let bC = aT(bp._1, bq, O, P, false)
294- $Tuple2(bC, (bp._2 ++ bB))
323+ let bK = bo(bz)
324+ let bL = bc(by._1, bz, R, S, false)
325+ $Tuple2(bL, (by._2 ++ bK))
295326 }
296- else bp
327+ else by
297328 }
298329
299- let bD = {
300- let bE = bm
301- let bF = size(bE)
302- let bG = $Tuple2(bm, nil)
303- func bH (bI,bJ) = if ((bJ >= bF))
304- then bI
305- else bo(bI, bE[bJ])
330+ let bM = {
331+ let bN = bv
332+ let bO = size(bN)
333+ let bP = $Tuple2(bv, nil)
334+ func bQ (bR,bS) = if ((bS >= bO))
335+ then bR
336+ else bx(bR, bN[bS])
306337
307- func bK (bI,bJ) = if ((bJ >= bF))
308- then bI
309- else throw("List size exceeds 7")
338+ func bT (bR,bS) = if ((bS >= bO))
339+ then bR
340+ else throw("List size exceeds 10")
310341
311- bK(bH(bH(bH(bH(bH(bH(bH(bG, 0), 1), 2), 3), 4), 5), 6), 7)
342+ bT(bQ(bQ(bQ(bQ(bQ(bQ(bQ(bQ(bQ(bQ(bP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
312343 }
313- let bL = bD._1
314- let bM = bD._2
315- ((bM ++ ba(O, P, size(bL))) ++ aR(makeString(bL, ","), O, P))
344+ let bU = bM._1
345+ let bV = bM._2
346+ ((bV ++ bj(R, S, size(bU))) ++ ba(makeString(bU, ","), R, S))
316347 }
317348
318349
319350
320-@Callable(bl)
321-func setContext (bN) = if ((bl.caller != this))
351+@Callable(bu)
352+func setContext (bW) = if ((bu.caller != this))
322353 then throw("Only self-call")
323- else [StringEntry(n, bN)]
354+ else [StringEntry(o, bW)]
324355
325356
326357
327-@Callable(bl)
328-func resetContext () = if ((bl.caller != this))
358+@Callable(bu)
359+func resetContext () = if ((bu.caller != this))
329360 then throw("Only self-call")
330- else [DeleteEntry(n)]
361+ else [DeleteEntry(o)]
331362
332363
333364
334-@Callable(bl)
335-func initialize (bO) = if (if (V())
365+@Callable(bu)
366+func initialize (bX) = if (if (Y())
336367 then true
337- else (bl.caller != this))
368+ else (bu.caller != this))
338369 then throw("Unable to initialize")
339- else [StringEntry(a, toString(addressFromStringValue(bO))), BooleanEntry(o, true)]
370+ else [StringEntry(a, toString(addressFromStringValue(bX))), BooleanEntry(p, true)]
340371
341372
342373
343-@Callable(bl)
344-func createOrder (O,aK,aL,aQ,aI,aJ,aN,aO) = {
345- let P = toString(bl.caller)
346- let bP = invoke(this, "cleanUpStaleOrders", [O, P], nil)
347- if ((bP == bP))
348- then if ((size(bl.payments) > 1))
374+@Callable(bu)
375+func createOrder (R,P,aS,aX,aQ,aR,aU,aV,bY,bZ,ca,cb) = {
376+ let S = toString(bu.caller)
377+ let cc = invoke(this, "cleanUpStaleOrders", [R, S], nil)
378+ if ((cc == cc))
379+ then if ((size(bu.payments) > 1))
349380 then throw("Invalid createOrder parameters: invalid payment count")
350381 else {
351- let bQ = if ((size(bl.payments) == 1))
352- then $Tuple2(toBase58String(valueOrErrorMessage(bl.payments[0].assetId, "Invalid asset id")), bl.payments[0].amount)
382+ let cd = if ((size(bu.payments) == 1))
383+ then $Tuple2(toBase58String(valueOrErrorMessage(bu.payments[0].assetId, "Invalid asset id")), bu.payments[0].amount)
353384 else $Tuple2("", 0)
354- let bR = bQ._1
355- let bS = bQ._2
356- let bT = invoke(this, "internalCreateOrder", [P, O, aK, aL, aQ, aI, aJ, aN, aO, bR, bS], nil)
357- if ((bT == bT))
358- then nil
385+ let ce = cd._1
386+ let cf = cd._2
387+ let cg = invoke(this, "internalCreateOrder", [S, R, P, aS, aX, aQ, aR, aU, aV, ce, cf], nil)
388+ if ((cg == cg))
389+ then {
390+ let aj = {
391+ let aB = cg
392+ if ($isInstanceOf(aB, "Int"))
393+ then {
394+ let aC = aB
395+ aC
396+ }
397+ else throw("Invalid ID of created order")
398+ }
399+ if ((P == s))
400+ then {
401+ let ch = if ((bY > 0))
402+ then {
403+ let ci = invoke(this, "internalCreateOrderRequest", [S, R, aj, q, bY, bZ], nil)
404+ if ((ci == ci))
405+ then nil
406+ else throw("Strict value is not equal to itself.")
407+ }
408+ else nil
409+ let cj = if ((ca > 0))
410+ then {
411+ let ck = invoke(this, "internalCreateOrderRequest", [S, R, aj, r, ca, cb], nil)
412+ if ((ck == ck))
413+ then nil
414+ else throw("Strict value is not equal to itself.")
415+ }
416+ else nil
417+ (ch ++ cj)
418+ }
419+ else nil
420+ }
359421 else throw("Strict value is not equal to itself.")
360422 }
361423 else throw("Strict value is not equal to itself.")
362424 }
363425
364426
365427
366-@Callable(bl)
367-func increasePositionWithStopLoss (O,aA,aJ,bU,aO,bV,bW,bX,bY) = {
368- let P = toString(bl.caller)
369- let bP = invoke(this, "cleanUpStaleOrders", [O, P], nil)
370- if ((bP == bP))
371- then if (if (!(V()))
428+@Callable(bu)
429+func increasePositionWithStopLoss (R,aI,aR,cl,aV,bY,bZ,ca,cb) = {
430+ let S = toString(bu.caller)
431+ let cc = invoke(this, "cleanUpStaleOrders", [R, S], nil)
432+ if ((cc == cc))
433+ then if (if (!(Y()))
372434 then true
373- else !(U(O)))
435+ else !(X(R)))
374436 then throw("Invalid increasePositionWithStopLoss parameters")
375437 else {
376- let bZ = az(O, P, aA)
377- if ((bZ != 0))
438+ let cm = aH(R, S, aI)
439+ if ((cm != 0))
378440 then throw("Invalid increasePositionWithStopLoss parameters: only new position")
379441 else {
380- let ca = invoke(this, "setContext", [P], nil)
381- if ((ca == ca))
442+ let cn = invoke(this, "setContext", [S], nil)
443+ if ((cn == cn))
382444 then {
383- let cb = invoke(addressFromStringValue(O), "increasePosition", [aA, aJ, bU, aO], bl.payments)
384- if ((cb == cb))
445+ let co = invoke(addressFromStringValue(R), "increasePosition", [aI, aR, cl, aV], bu.payments)
446+ if ((co == co))
385447 then {
386- let cc = invoke(this, "resetContext", nil, nil)
387- if ((cc == cc))
448+ let cp = invoke(this, "resetContext", nil, nil)
449+ if ((cp == cp))
388450 then {
389- let cd = az(O, P, aA)
390- if ((cd == cd))
451+ let cq = aH(R, S, aI)
452+ if ((cq == cq))
391453 then {
392- let ah = A(cd)
393- let ce = if ((0 > cd))
394- then s
395- else t
396- let cf = if ((bV > 0))
454+ let as = B(cq)
455+ let cr = if ((0 > cq))
456+ then t
457+ else u
458+ let cs = if ((bY > 0))
397459 then {
398- let cf = invoke(this, "internalCreateOrder", [P, O, p, bV, bW, ah, 0, ce, aO, "", 0], nil)
399- if ((cf == cf))
460+ let cs = invoke(this, "internalCreateOrder", [S, R, q, bY, bZ, as, 0, cr, aV, "", 0], nil)
461+ if ((cs == cs))
400462 then nil
401463 else throw("Strict value is not equal to itself.")
402464 }
403465 else nil
404- if ((cf == cf))
466+ if ((cs == cs))
405467 then {
406- let cg = if ((bX > 0))
468+ let ct = if ((ca > 0))
407469 then {
408- let cg = invoke(this, "internalCreateOrder", [P, O, q, bX, bY, ah, 0, ce, aO, "", 0], nil)
409- if ((cg == cg))
470+ let ct = invoke(this, "internalCreateOrder", [S, R, r, ca, cb, as, 0, cr, aV, "", 0], nil)
471+ if ((ct == ct))
410472 then nil
411473 else throw("Strict value is not equal to itself.")
412474 }
413475 else nil
414- if ((cg == cg))
476+ if ((ct == ct))
415477 then nil
416478 else throw("Strict value is not equal to itself.")
417479 }
418480 else throw("Strict value is not equal to itself.")
419481 }
420482 else throw("Strict value is not equal to itself.")
421483 }
422484 else throw("Strict value is not equal to itself.")
423485 }
424486 else throw("Strict value is not equal to itself.")
425487 }
426488 else throw("Strict value is not equal to itself.")
427489 }
428490 }
429491 else throw("Strict value is not equal to itself.")
430492 }
431493
432494
433495
434-@Callable(bl)
435-func internalCreateOrder (P,O,aK,aL,aQ,aI,aJ,aN,aO,ch,ci) = if (if (if (if (if (if (if (if (if (!(V()))
496+@Callable(bu)
497+func internalMarkOrderExecuted (R,S,L) = if (if (if (!(Y()))
436498 then true
437- else !(U(O)))
499+ else !(X(R)))
438500 then true
439- else (0 >= aL))
501+ else !((bu.caller == this)))
502+ then throw("Invalid internalMarkOrderExecuted parameters")
503+ else {
504+ let cu = (ab(R, S) - 1)
505+ ((bj(R, S, cu) ++ bg(L, R, S, false)) ++ bn(L))
506+ }
507+
508+
509+
510+@Callable(bu)
511+func internalCreateOrderRequest (S,R,L,P,aS,aX) = if (if (if (if (if (!(Y()))
440512 then true
441- else (0 > aQ))
513+ else !(X(R)))
442514 then true
443- else (0 >= aI))
515+ else (0 >= aS))
444516 then true
445- else (0 > aJ))
517+ else (0 > aX))
446518 then true
447- else !(if ((aN == s))
519+ else !((bu.caller == this)))
520+ then throw("Invalid internalCreateOrderRequest parameters")
521+ else aY(L, R, S, P, aS, aX)
522+
523+
524+
525+@Callable(bu)
526+func internalCreateOrder (S,R,P,aS,aX,aQ,aR,aU,aV,cv,cw) = if (if (if (if (if (if (if (if (if (!(Y()))
527+ then true
528+ else !(X(R)))
529+ then true
530+ else (0 >= aS))
531+ then true
532+ else (0 > aX))
533+ then true
534+ else (0 >= aQ))
535+ then true
536+ else (0 > aR))
537+ then true
538+ else !(if ((aU == t))
448539 then true
449- else (aN == t)))
540+ else (aU == u)))
450541 then true
451- else !(if (if ((aK == p))
542+ else !(if (if ((P == q))
452543 then true
453- else (aK == q))
544+ else (P == r))
454545 then true
455- else (aK == r)))
546+ else (P == s)))
456547 then true
457- else !((bl.caller == this)))
458- then throw("Invalid createOrder parameters")
548+ else !((bu.caller == this)))
549+ then throw("Invalid internalCreateOrder parameters")
459550 else {
460- let cj = (X() + 1)
461- let ck = aw(aN, aK)
462- let cl = (Y(O, P) + 1)
463- let bZ = az(O, P, ck)
464- let aA = if (if (if ((bZ == 0))
551+ let aj = (aa() + 1)
552+ let cx = aE(aU, P)
553+ let cu = (ab(R, S) + 1)
554+ let cm = aH(R, S, cx)
555+ let aI = if (if (if ((cm == 0))
465556 then true
466- else if ((bZ > 0))
467- then (aN == s)
557+ else if ((cm > 0))
558+ then (aU == t)
468559 else false)
469560 then true
470- else if ((0 > bZ))
471- then (aN == t)
561+ else if ((0 > cm))
562+ then (aU == u)
472563 else false)
473- then u
474- else v
475- if (if ((bZ == 0))
476- then if ((aK == p))
564+ then v
565+ else w
566+ if (if ((cm == 0))
567+ then if ((P == q))
477568 then true
478- else (aK == q)
569+ else (P == r)
479570 else false)
480571 then throw("Can not create STOP/TAKE order: no position")
481572 else {
482- let cm = if ((aA == u))
483- then if (if ((ch != toBase58String(S())))
573+ let cy = if ((aI == v))
574+ then if (if ((cv != toBase58String(V())))
484575 then true
485- else (ci != aI))
576+ else (cw != aQ))
486577 then throw("Invalid createLimitOrder parameters: invalid payment")
487578 else {
488- let cn = invoke(T(), "deposit", nil, [AttachedPayment(S(), ci)])
489- if ((cn == cn))
490- then ci
579+ let cz = invoke(W(), "deposit", nil, [AttachedPayment(V(), cw)])
580+ if ((cz == cz))
581+ then cw
491582 else throw("Strict value is not equal to itself.")
492583 }
493584 else 0
494- if ((cm == cm))
585+ if ((cy == cy))
495586 then {
496- let ao = if ((bZ != 0))
497- then aD(O, P, ck)
587+ let ax = if ((cm != 0))
588+ then aL(R, S, cx)
498589 else 0
499- if (if (if ((aK == p))
590+ if (if (if ((P == q))
500591 then true
501- else (aK == q))
502- then (ao == 0)
592+ else (P == r))
593+ then (ax == 0)
503594 else false)
504595 then throw("STOP and TAKE order should be assigned to position with id != 0")
505- else if ((cl > w))
596+ else if ((cu > x))
506597 then throw("Invalid createLimitOrder parameters: order count")
507- else (((aH(cj, O, P, aI, aJ, aK, aL, cm, aN, aO, ao, aQ) ++ aX(cj, O, P, true)) ++ ba(O, P, cl)) ++ bc(cj))
598+ else {
599+ let cA = (((aP(aj, R, S, aQ, aR, P, aS, cy, aU, aV, ax, aX) ++ bg(aj, R, S, true)) ++ bj(R, S, cu)) ++ bl(aj))
600+ $Tuple2(cA, aj)
601+ }
508602 }
509603 else throw("Strict value is not equal to itself.")
510604 }
511605 }
512606
513607
514608
515-@Callable(bl)
516-func cancelOrder (K) = {
517- let co = ac(K)
518- let O = co._1
519- let P = co._2
520- let aI = co._3
521- let aJ = co._4
522- let aK = co._5
523- let aL = co._6
524- let cp = co._7
525- let aN = co._8
526- let aO = co._9
527- let aP = co._10
528- let aQ = co._11
529- if (if (if (!(V()))
609+@Callable(bu)
610+func cancelOrder (L) = {
611+ let cB = ap(L)
612+ let R = cB._1
613+ let S = cB._2
614+ let aQ = cB._3
615+ let aR = cB._4
616+ let P = cB._5
617+ let aS = cB._6
618+ let cC = cB._7
619+ let aU = cB._8
620+ let aV = cB._9
621+ let aW = cB._10
622+ let aX = cB._11
623+ if (if (if (!(Y()))
530624 then true
531- else !(W(K)))
625+ else !(Z(L)))
532626 then true
533- else !((toString(bl.caller) == P)))
627+ else !((toString(bu.caller) == S)))
534628 then throw("Invalid cancelOrder parameters")
535629 else {
536- let bP = invoke(this, "cleanUpStaleOrders", [O, P], nil)
537- if ((bP == bP))
630+ let cc = invoke(this, "cleanUpStaleOrders", [R, S], nil)
631+ if ((cc == cc))
538632 then {
539- let cl = (Y(O, P) - 1)
540- let cq = if ((cp > 0))
633+ let cu = (ab(R, S) - 1)
634+ let cD = if ((cC > 0))
541635 then {
542- let cr = invoke(T(), "withdraw", [toBase58String(S()), cp], nil)
543- if ((cr == cr))
636+ let cE = invoke(W(), "withdraw", [toBase58String(V()), cC], nil)
637+ if ((cE == cE))
544638 then nil
545639 else throw("Strict value is not equal to itself.")
546640 }
547641 else nil
548- if ((cq == cq))
549- then (((bf(K) ++ aX(K, O, P, false)) ++ ba(O, P, cl)) ++ (if ((cp > 0))
550- then [ScriptTransfer(bl.caller, cp, S())]
642+ if ((cD == cD))
643+ then (((bo(L) ++ bg(L, R, S, false)) ++ bj(R, S, cu)) ++ (if ((cC > 0))
644+ then [ScriptTransfer(bu.caller, cC, V())]
551645 else nil))
552646 else throw("Strict value is not equal to itself.")
553647 }
554648 else throw("Strict value is not equal to itself.")
555649 }
556650 }
557651
558652
559653
560-@Callable(bl)
561-func executeOrder (K) = {
562- let cs = ac(K)
563- let O = cs._1
564- let P = cs._2
565- let aI = cs._3
566- let aJ = cs._4
567- let aK = cs._5
568- let aL = cs._6
569- let cp = cs._7
570- let aN = cs._8
571- let aO = cs._9
572- let aP = cs._10
573- let aQ = cs._11
574- let bP = invoke(this, "cleanUpStaleOrders", [O, P], nil)
575- if ((bP == bP))
654+@Callable(bu)
655+func executeOrder (L) = {
656+ let cF = ap(L)
657+ let R = cF._1
658+ let S = cF._2
659+ let aQ = cF._3
660+ let aR = cF._4
661+ let P = cF._5
662+ let aS = cF._6
663+ let cC = cF._7
664+ let aU = cF._8
665+ let aV = cF._9
666+ let aW = cF._10
667+ let aX = cF._11
668+ let cc = invoke(this, "cleanUpStaleOrders", [R, S], nil)
669+ if ((cc == cc))
576670 then {
577- let ck = aw(aN, aK)
578- if (if (!(V()))
671+ let cx = aE(aU, P)
672+ if (if (!(Y()))
579673 then true
580- else !(W(K)))
674+ else !(Z(L)))
581675 then throw("Invalid executeOrder parameters")
582676 else {
583- let bZ = az(O, P, ck)
584- let ct = if ((bZ != 0))
585- then aD(O, P, ck)
586- else 0
587- let cu = if ((aK == p))
677+ let cm = aH(R, S, cx)
678+ if ((cm == cm))
588679 then {
589- let cv = if ((bZ > 0))
590- then s
591- else if ((0 > bZ))
592- then t
593- else throw("Can not execute STOP order: no open position")
594- let cw = aq(O)
595- let cx = if ((aN == cv))
596- then throw("Can not execute STOP order: reduce only")
597- else if ((ct != aP))
598- then throw("Can not execute STOP order: position closed")
599- else if ((cv == s))
600- then (aL >= cw)
601- else (cw >= aL)
602- if (cx)
603- then $Tuple3("closePosition", [F(aI, A(bZ)), ck, E(aQ, A(bZ)), false], nil)
604- else throw("Can not execute STOP order: triggerPrice mismatch")
605- }
606- else if ((aK == q))
607- then {
608- let cv = if ((bZ > 0))
609- then s
610- else if ((0 > bZ))
680+ let cG = if ((cm != 0))
681+ then aL(R, S, cx)
682+ else 0
683+ let cH = if ((P == q))
684+ then {
685+ let cI = if ((cm > 0))
611686 then t
612- else throw("Can not execute STOP order: no open position")
613- let cw = aq(O)
614- let cx = if ((aN == cv))
615- then throw("Can not execute TAKE order: reduce only")
616- else if ((ct != aP))
617- then throw(((("Can not execute TAKE order: position closed " + toString(ct)) + "!=") + toString(aP)))
618- else if ((cv == s))
619- then (cw >= aL)
620- else (aL >= cw)
621- if (cx)
622- then $Tuple3("closePosition", [F(aI, A(bZ)), ck, E(aQ, A(bZ)), false], nil)
623- else throw("Can not execute TAKE order: triggerPrice mismatch")
624- }
625- else if ((aK == r))
687+ else if ((0 > cm))
688+ then u
689+ else throw("Can not execute STOP order: no open position")
690+ let cJ = ay(R)
691+ let cK = if ((aU == cI))
692+ then throw("Can not execute STOP order: reduce only")
693+ else if ((cG != aW))
694+ then throw("Can not execute STOP order: position closed")
695+ else if ((cI == t))
696+ then (aS >= cJ)
697+ else (cJ >= aS)
698+ if (cK)
699+ then $Tuple3("closePosition", [G(aQ, B(cm)), cx, F(aX, B(cm)), false], nil)
700+ else throw("Can not execute STOP order: triggerPrice mismatch")
701+ }
702+ else if ((P == r))
703+ then {
704+ let cI = if ((cm > 0))
705+ then t
706+ else if ((0 > cm))
707+ then u
708+ else throw("Can not execute STOP order: no open position")
709+ let cJ = ay(R)
710+ let cK = if ((aU == cI))
711+ then throw("Can not execute TAKE order: reduce only")
712+ else if ((cG != aW))
713+ then throw(((("Can not execute TAKE order: position closed " + toString(cG)) + "!=") + toString(aW)))
714+ else if ((cI == t))
715+ then (cJ >= aS)
716+ else (aS >= cJ)
717+ if (cK)
718+ then $Tuple3("closePosition", [G(aQ, B(cm)), cx, F(aX, B(cm)), false], nil)
719+ else throw("Can not execute TAKE order: triggerPrice mismatch")
720+ }
721+ else if ((P == s))
722+ then {
723+ let cJ = ay(R)
724+ let cL = if ((aX == 0))
725+ then aN(aS)
726+ else B((aS - aX))
727+ let cK = if ((cJ >= (aS - cL)))
728+ then ((aS + cL) >= cJ)
729+ else false
730+ if (cK)
731+ then {
732+ let cM = (cC - F(cC, aD(R, S)))
733+ $Tuple3("increasePosition", [aU, aR, if ((aX == 0))
734+ then 0
735+ else D(cM, aX), aV], [AttachedPayment(V(), cC)])
736+ }
737+ else throw("Can not execute LIMIT order: triggerPrice mismatch")
738+ }
739+ else throw(("Invalid order type: " + toString(P)))
740+ let cN = cH._1
741+ let cO = cH._2
742+ let cP = cH._3
743+ let cD = if ((size(cP) == 1))
626744 then {
627- let cw = aq(O)
628- let cy = if ((aQ == 0))
629- then aF(aL)
630- else A((aL - aQ))
631- let cx = if ((cw >= (aL - cy)))
632- then ((aL + cy) >= cw)
633- else false
634- if (cx)
745+ let cE = invoke(W(), "withdraw", [toBase58String(V()), cP[0].amount], nil)
746+ if ((cE == cE))
747+ then nil
748+ else throw("Strict value is not equal to itself.")
749+ }
750+ else nil
751+ if ((cD == cD))
752+ then {
753+ let cn = invoke(this, "setContext", [S], nil)
754+ if ((cn == cn))
635755 then {
636- let cz = (cp - E(cp, av(O, P)))
637- $Tuple3("increasePosition", [aN, aJ, if ((aQ == 0))
638- then 0
639- else C(cz, aQ), aO], [AttachedPayment(S(), cp)])
640- }
641- else throw("Can not execute LIMIT order: triggerPrice mismatch")
642- }
643- else throw(("Invalid order type: " + toString(aK)))
644- let cA = cu._1
645- let cB = cu._2
646- let cC = cu._3
647- let cq = if ((size(cC) == 1))
648- then {
649- let cr = invoke(T(), "withdraw", [toBase58String(S()), cC[0].amount], nil)
650- if ((cr == cr))
651- then nil
652- else throw("Strict value is not equal to itself.")
653- }
654- else nil
655- if ((cq == cq))
656- then {
657- let ca = invoke(this, "setContext", [P], nil)
658- if ((ca == ca))
659- then {
660- let cb = invoke(addressFromStringValue(O), cA, cB, cC)
661- if ((cb == cb))
662- then {
663- let cc = invoke(this, "resetContext", nil, nil)
664- if ((cc == cc))
756+ let co = invoke(addressFromStringValue(R), cN, cO, cP)
757+ if ((co == co))
665758 then {
666- let cl = (Y(O, P) - 1)
667- ((ba(O, P, cl) ++ aX(K, O, P, false)) ++ be(K))
759+ let cp = invoke(this, "resetContext", nil, nil)
760+ if ((cp == cp))
761+ then {
762+ let cQ = if ((P == s))
763+ then {
764+ let cR = aH(R, S, cx)
765+ if ((cR == cR))
766+ then {
767+ let cS = aL(R, S, cx)
768+ if ((cS == cS))
769+ then {
770+ let cT = (cR - cm)
771+ let cU = if ((cR > 0))
772+ then u
773+ else t
774+ let cV = if (af(L, r))
775+ then {
776+ let cW = ag(L, r)
777+ let cX = cW._1
778+ let cY = cW._2
779+ let cZ = cW._3
780+ let da = cW._4
781+ let db = cW._5
782+ let dc = cW._6
783+ let cg = invoke(this, "internalCreateOrder", [cZ, cY, da, db, dc, cT, 0, cU, "", "", 0], nil)
784+ if ((cg == cg))
785+ then nil
786+ else throw("Strict value is not equal to itself.")
787+ }
788+ else nil
789+ if ((cV == cV))
790+ then {
791+ let dd = if (af(L, q))
792+ then {
793+ let de = ag(L, q)
794+ let cX = de._1
795+ let cY = de._2
796+ let cZ = de._3
797+ let da = de._4
798+ let db = de._5
799+ let dc = de._6
800+ let cg = invoke(this, "internalCreateOrder", [cZ, cY, da, db, dc, cT, 0, cU, "", "", 0], nil)
801+ if ((cg == cg))
802+ then nil
803+ else throw("Strict value is not equal to itself.")
804+ }
805+ else nil
806+ if ((dd == dd))
807+ then (cV ++ dd)
808+ else throw("Strict value is not equal to itself.")
809+ }
810+ else throw("Strict value is not equal to itself.")
811+ }
812+ else throw("Strict value is not equal to itself.")
813+ }
814+ else throw("Strict value is not equal to itself.")
815+ }
816+ else nil
817+ if ((cQ == cQ))
818+ then {
819+ let df = invoke(this, "internalMarkOrderExecuted", [R, S, L], nil)
820+ if ((df == df))
821+ then nil
822+ else throw("Strict value is not equal to itself.")
823+ }
824+ else throw("Strict value is not equal to itself.")
825+ }
826+ else throw("Strict value is not equal to itself.")
668827 }
669828 else throw("Strict value is not equal to itself.")
670829 }
671830 else throw("Strict value is not equal to itself.")
672831 }
673832 else throw("Strict value is not equal to itself.")
674833 }
675834 else throw("Strict value is not equal to itself.")
676835 }
677836 }
678837 else throw("Strict value is not equal to itself.")
679838 }
680839
681840
682841
683-@Callable(bl)
684-func view_canExecuteOrder (K) = {
685- let ar = invoke(this, "executeOrder", [K], nil)
686- if ((ar == ar))
842+@Callable(bu)
843+func view_canExecuteOrder (L) = {
844+ let az = invoke(this, "executeOrder", [L], nil)
845+ if ((az == az))
687846 then throw("Success")
688847 else throw("Strict value is not equal to itself.")
689848 }
690849
691850
692-@Verifier(cD)
693-func cE () = {
694- let cF = getString(this, a)
695- if (isDefined(cF))
851+@Verifier(dg)
852+func dh () = {
853+ let di = getString(this, a)
854+ if (isDefined(di))
696855 then {
697- let cG = getString(addressFromStringValue(value(cF)), b)
698- if (isDefined(cG))
699- then valueOrElse(getBoolean(addressFromStringValue(value(cG)), ((("status_" + toString(this)) + "_") + toBase58String(cD.id))), false)
856+ let dj = getString(addressFromStringValue(value(di)), b)
857+ if (isDefined(dj))
858+ then valueOrElse(getBoolean(addressFromStringValue(value(dj)), ((("status_" + toString(this)) + "_") + toBase58String(dg.id))), false)
700859 else throw("unable to verify: admin not set in coordinator")
701860 }
702- else sigVerify(cD.bodyBytes, cD.proofs[0], cD.senderPublicKey)
861+ else sigVerify(dg.bodyBytes, dg.proofs[0], dg.senderPublicKey)
703862 }
704863

github/deemru/w8io/873ac7e 
229.07 ms