tx · 2LBEcNrL2rXBUwGCNWNWDxqyXLxRtbQzTNTuYXUG1U98

3N2PpSwSkK98YvLff2xQa6UcZ6LZ4suyFUF:  -0.07500000 Waves

2023.04.17 19:53 [2538827] smart account 3N2PpSwSkK98YvLff2xQa6UcZ6LZ4suyFUF > SELF 0.00000000 Waves

{ "type": 13, "id": "2LBEcNrL2rXBUwGCNWNWDxqyXLxRtbQzTNTuYXUG1U98", "fee": 7500000, "feeAssetId": null, "timestamp": 1681750441399, "version": 2, "chainId": 84, "sender": "3N2PpSwSkK98YvLff2xQa6UcZ6LZ4suyFUF", "senderPublicKey": "F7t5bFSaRPct8VH5ZVsR6Z5ZrmBs8ScAsYtnsNFgwgS3", "proofs": [ "5xeq5RubYF9qT2Zs4NHLN3YoZUNy7aHnd4eu7XLY3gsdiGJJWXAjaCrURDWvUXwSeav4H6hFaEb7LywGGP9W6bQ" ], "script": "base64:BgKAAQgCEgASABIAEgASAwoBARIDCgEBEhAKDgEBAQEBAQEBAQEBAQEBEhUKEwEBAQEBAQEICAgBAQEBAQEBAQESBgoEAQEBCBIDCgEBEgQKAgEBEgYKBAEBAQQSBAoCCAESABIAEgASAwoBCBIECgIIARIDCgEBEgASABIAEgQKAggIrwEADGtfYmFzZU9yYWNsZQIMa19iYXNlT3JhY2xlAA1rX3F1b3RlT3JhY2xlAg1rX3F1b3RlT3JhY2xlAAlrX2JhbGFuY2UCCWtfYmFsYW5jZQAKa19zZXF1ZW5jZQIKa19zZXF1ZW5jZQAOa19wb3NpdGlvblNpemUCDmtfcG9zaXRpb25TaXplABBrX3Bvc2l0aW9uTWFyZ2luAhBrX3Bvc2l0aW9uTWFyZ2luABZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsAhZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsAC5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAhJrX3Bvc2l0aW9uRnJhY3Rpb24AEmtfcG9zaXRpb25TZXF1ZW5jZQISa19wb3NpdGlvblNlcXVlbmNlAA1rX3Bvc2l0aW9uRmVlAg1rX3Bvc2l0aW9uRmVlAB5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXACE2tfcG9zaXRpb25UaW1lc3RhbXAADWtfaW5pdGlhbGl6ZWQCDWtfaW5pdGlhbGl6ZWQACGtfcGF1c2VkAghrX3BhdXNlZAALa19jbG9zZU9ubHkCC2tfY2xvc2VPbmx5AAVrX2ZlZQIFa19mZWUADWtfcm9sbG92ZXJGZWUCDmtfcm9sbG92ZXJfZmVlAA9rX2Z1bmRpbmdQZXJpb2QCD2tfZnVuZGluZ1BlcmlvZAARa19pbml0TWFyZ2luUmF0aW8CEWtfaW5pdE1hcmdpblJhdGlvABhrX21haW50ZW5hbmNlTWFyZ2luUmF0aW8CBWtfbW1yABVrX2xpcXVpZGF0aW9uRmVlUmF0aW8CFWtfbGlxdWlkYXRpb25GZWVSYXRpbwAZa19wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwIWa19wYXJ0TGlxdWlkYXRpb25SYXRpbwANa19zcHJlYWRMaW1pdAINa19zcHJlYWRMaW1pdAAQa19tYXhQcmljZUltcGFjdAIQa19tYXhQcmljZUltcGFjdAAQa19tYXhQcmljZVNwcmVhZAIQa19tYXhQcmljZVNwcmVhZAARa19tYXhPcGVuTm90aW9uYWwCEWtfbWF4T3Blbk5vdGlvbmFsABVrX2ZlZVRvU3Rha2Vyc1BlcmNlbnQCFWtfZmVlVG9TdGFrZXJzUGVyY2VudAAQa19tYXhPcmFjbGVEZWxheQIQa19tYXhPcmFjbGVEZWxheQANa19mdW5kaW5nTW9kZQINa19mdW5kaW5nTW9kZQAla19sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgIba19sYXRlc3RMb25nUHJlbWl1bUZyYWN0aW9uACZrX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgIca19sYXRlc3RTaG9ydFByZW1pdW1GcmFjdGlvbgASa19uZXh0RnVuZGluZ0Jsb2NrAh5rX25leHRGdW5kaW5nQmxvY2tNaW5UaW1lc3RhbXAAEWtfbG9uZ0Z1bmRpbmdSYXRlAhFrX2xvbmdGdW5kaW5nUmF0ZQASa19zaG9ydEZ1bmRpbmdSYXRlAhJrX3Nob3J0RnVuZGluZ1JhdGUAE2tfcXVvdGVBc3NldFJlc2VydmUCCGtfcXRBc3RSABJrX2Jhc2VBc3NldFJlc2VydmUCCGtfYnNBc3RSABJrX3F1b3RlQXNzZXRXZWlnaHQCCGtfcXRBc3RXABFrX2Jhc2VBc3NldFdlaWdodAIIa19ic0FzdFcAE2tfdG90YWxQb3NpdGlvblNpemUCE2tfdG90YWxQb3NpdGlvblNpemUAF2tfdG90YWxMb25nUG9zaXRpb25TaXplAhdrX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAYa190b3RhbFNob3J0UG9zaXRpb25TaXplAhhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUAFmtfb3BlbkludGVyZXN0Tm90aW9uYWwCFmtfb3BlbkludGVyZXN0Tm90aW9uYWwAE2tfb3BlbkludGVyZXN0U2hvcnQCE2tfb3BlbkludGVyZXN0U2hvcnQAEmtfb3BlbkludGVyZXN0TG9uZwISa19vcGVuSW50ZXJlc3RMb25nAAhrX2xhc3RUeAIIa19sYXN0VHgAFGtfY29vcmRpbmF0b3JBZGRyZXNzAhRrX2Nvb3JkaW5hdG9yQWRkcmVzcwAPa192YXVsdF9hZGRyZXNzAg9rX3ZhdWx0X2FkZHJlc3MAD2tfYWRtaW5fYWRkcmVzcwIPa19hZG1pbl9hZGRyZXNzAA1rX3F1b3RlX2Fzc2V0Ag1rX3F1b3RlX2Fzc2V0ABFrX3N0YWtpbmdfYWRkcmVzcwIRa19zdGFraW5nX2FkZHJlc3MAD2tfbWluZXJfYWRkcmVzcwIPa19taW5lcl9hZGRyZXNzABBrX29yZGVyc19hZGRyZXNzAhBrX29yZGVyc19hZGRyZXNzABJrX3JlZmVycmFsX2FkZHJlc3MCEmtfcmVmZXJyYWxfYWRkcmVzcwAVa19uZnRfbWFuYWdlcl9hZGRyZXNzAhVrX25mdF9tYW5hZ2VyX2FkZHJlc3MBDnRvQ29tcG9zaXRlS2V5AgRfa2V5CF9hZGRyZXNzCQCsAgIJAKwCAgUEX2tleQIBXwUIX2FkZHJlc3MBC2Nvb3JkaW5hdG9yAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFFGtfY29vcmRpbmF0b3JBZGRyZXNzAhNDb29yZGluYXRvciBub3Qgc2V0AQxhZG1pbkFkZHJlc3MACQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfYWRtaW5fYWRkcmVzcwEKcXVvdGVBc3NldAAJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUNa19xdW90ZV9hc3NldAEOc3Rha2luZ0FkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAURa19zdGFraW5nX2FkZHJlc3MCD1N0YWtpbmcgbm90IHNldAEMdmF1bHRBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfdmF1bHRfYWRkcmVzcwINVmF1bHQgbm90IHNldAEMbWluZXJBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfbWluZXJfYWRkcmVzcwINTWluZXIgbm90IHNldAENb3JkZXJzQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRBrX29yZGVyc19hZGRyZXNzAg5PcmRlcnMgbm90IHNldAEPcmVmZXJyYWxBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEmtfcmVmZXJyYWxfYWRkcmVzcwIQUmVmZXJyYWwgbm90IHNldAERbmZ0TWFuYWdlckFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUVa19uZnRfbWFuYWdlcl9hZGRyZXNzAhNORlQgTWFuYWdlciBub3Qgc2V0AA1rX3Rva2VuX3BhcmFtAg1rX3Rva2VuX3BhcmFtAAxrX3Rva2VuX3R5cGUCDGtfdG9rZW5fdHlwZQAYRkVFX1JFRFVDVElPTl9UT0tFTl9UWVBFAg1mZWVfcmVkdWN0aW9uAAhESVJfTE9ORwABAAlESVJfU0hPUlQAAgAHU0VDT05EUwDoBwAPREVDSU1BTF9OVU1CRVJTAAYADERFQ0lNQUxfVU5JVAkAaAIAAQkAaAIJAGgCCQBoAgkAaAIJAGgCAAoACgAKAAoACgAKAA9NSU5VVEVTX0lOX1lFQVIJAGgCAKCKIAUMREVDSU1BTF9VTklUAAdPTkVfREFZCQBoAgCAowUFDERFQ0lNQUxfVU5JVAAPUE5MX09QVElPTl9TUE9UAAEAEVBOTF9PUFRJT05fT1JBQ0xFAAIAEkZVTkRJTkdfQVNZTU1FVFJJQwABABFGVU5ESU5HX1NZTU1FVFJJQwACAQFzAQJfeAkArAICCQCkAwEFAl94AgEsAQRkaXZkAgJfeAJfeQkAbgQFAl94BQxERUNJTUFMX1VOSVQFAl95BQhIQUxGRVZFTgEEbXVsZAICX3gCX3kJAG4EBQJfeAUCX3kFDERFQ0lNQUxfVU5JVAUISEFMRkVWRU4BBWJkaXZkAgJfeAJfeQkAvQIEBQJfeAkAtgIBBQxERUNJTUFMX1VOSVQFAl95BQhIQUxGRVZFTgEFYm11bGQCAl94Al95CQC9AgQFAl94BQJfeQkAtgIBBQxERUNJTUFMX1VOSVQFCEhBTEZFVkVOAQNhYnMBAl94AwkAZgIFAl94AAAFAl94CQEBLQEFAl94AQR2bWF4AgJfeAJfeQMJAGcCBQJfeAUCX3kFAl94BQJfeQEDaW50AQFrCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwUBawkArAICAg1ubyB2YWx1ZSBmb3IgBQFrAQVpbnRPcgIBawNkZWYJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUBawUDZGVmAQRzdHJBAghfYWRkcmVzcwRfa2V5BAN2YWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQhfYWRkcmVzcwUEX2tleQkArAICAhFObyB2YWx1ZSBmb3Iga2V5IAUEX2tleQUDdmFsAQRpbnRBAghfYWRkcmVzcwRfa2V5BAN2YWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQhfYWRkcmVzcwUEX2tleQkArAICAhFObyB2YWx1ZSBmb3Iga2V5IAUEX2tleQUDdmFsAQhjYmFsYW5jZQAJAQNpbnQBBQlrX2JhbGFuY2UBA2ZlZQAJAQNpbnQBBQVrX2ZlZQEPcm9sbG92ZXJGZWVSYXRlAAkBA2ludAEFDWtfcm9sbG92ZXJGZWUBD2luaXRNYXJnaW5SYXRpbwAJAQNpbnQBBRFrX2luaXRNYXJnaW5SYXRpbwEGcXRBc3RSAAkBA2ludAEFE2tfcXVvdGVBc3NldFJlc2VydmUBBmJzQXN0UgAJAQNpbnQBBRJrX2Jhc2VBc3NldFJlc2VydmUBBnF0QXN0VwAJAQVpbnRPcgIFEmtfcXVvdGVBc3NldFdlaWdodAUMREVDSU1BTF9VTklUAQZic0FzdFcACQEFaW50T3ICBRFrX2Jhc2VBc3NldFdlaWdodAUMREVDSU1BTF9VTklUARF0b3RhbFBvc2l0aW9uU2l6ZQAJAQNpbnQBBRNrX3RvdGFsUG9zaXRpb25TaXplARRvcGVuSW50ZXJlc3ROb3Rpb25hbAAJAQNpbnQBBRZrX29wZW5JbnRlcmVzdE5vdGlvbmFsARFvcGVuSW50ZXJlc3RTaG9ydAAJAQNpbnQBBRNrX29wZW5JbnRlcmVzdFNob3J0ARBvcGVuSW50ZXJlc3RMb25nAAkBA2ludAEFEmtfb3BlbkludGVyZXN0TG9uZwEZbmV4dEZ1bmRpbmdCbG9ja1RpbWVzdGFtcAAJAQNpbnQBBRJrX25leHRGdW5kaW5nQmxvY2sBEGZ1bmRpbmdQZXJpb2RSYXcACQEDaW50AQUPa19mdW5kaW5nUGVyaW9kARRmdW5kaW5nUGVyaW9kRGVjaW1hbAAJAGgCCQEQZnVuZGluZ1BlcmlvZFJhdwAFDERFQ0lNQUxfVU5JVAEUZnVuZGluZ1BlcmlvZFNlY29uZHMACQBoAgkBEGZ1bmRpbmdQZXJpb2RSYXcABQdTRUNPTkRTARZtYWludGVuYW5jZU1hcmdpblJhdGlvAAkBA2ludAEFGGtfbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwETbGlxdWlkYXRpb25GZWVSYXRpbwAJAQNpbnQBBRVrX2xpcXVpZGF0aW9uRmVlUmF0aW8BF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAkBA2ludAEFGWtfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8BC3NwcmVhZExpbWl0AAkBA2ludAEFDWtfc3ByZWFkTGltaXQBDm1heFByaWNlSW1wYWN0AAkBA2ludAEFEGtfbWF4UHJpY2VJbXBhY3QBDm1heFByaWNlU3ByZWFkAAkBA2ludAEFEGtfbWF4UHJpY2VTcHJlYWQBD21heE9wZW5Ob3Rpb25hbAAJAQNpbnQBBRFrX21heE9wZW5Ob3Rpb25hbAEjbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ACQEDaW50AQUla19sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEkbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAkBA2ludAEFJmtfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAkBA2ludAEFGGtfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQEVdG90YWxMb25nUG9zaXRpb25TaXplAAkBA2ludAEFF2tfdG90YWxMb25nUG9zaXRpb25TaXplAQxsYXN0U2VxdWVuY2UACQEFaW50T3ICBQprX3NlcXVlbmNlAAABE2ZlZVRvU3Rha2Vyc1BlcmNlbnQACQEDaW50AQUVa19mZWVUb1N0YWtlcnNQZXJjZW50AQ5tYXhPcmFjbGVEZWxheQAJAQNpbnQBBRBrX21heE9yYWNsZURlbGF5AQtmdW5kaW5nTW9kZQAJAQVpbnRPcgIFDWtfZnVuZGluZ01vZGUFEkZVTkRJTkdfQVNZTU1FVFJJQwENbGFzdFRpbWVzdGFtcAAIBQlsYXN0QmxvY2sJdGltZXN0YW1wAQ9nZXRBY3R1YWxDYWxsZXIBAWkJAQt2YWx1ZU9yRWxzZQIJAJ0IAgkBDW9yZGVyc0FkZHJlc3MAAghrX3NlbmRlcgkApQgBCAUBaQZjYWxsZXIBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DDF9tYXJnaW5SYXRpbxBfYmFzZU1hcmdpblJhdGlvFF9sYXJnZXJUaGFuT3JFcXVhbFRvBBRyZW1haW5pbmdNYXJnaW5SYXRpbwkAZQIFDF9tYXJnaW5SYXRpbwUQX2Jhc2VNYXJnaW5SYXRpbwMDBRRfbGFyZ2VyVGhhbk9yRXF1YWxUbwkAZgIAAAUUcmVtYWluaW5nTWFyZ2luUmF0aW8HCQACAQkArAICCQCsAgIJAKwCAgIQSW52YWxpZCBtYXJnaW46IAkApAMBBQxfbWFyZ2luUmF0aW8CAyA8IAkApAMBBRBfYmFzZU1hcmdpblJhdGlvAwMJAQEhAQUUX2xhcmdlclRoYW5PckVxdWFsVG8JAGcCBRRyZW1haW5pbmdNYXJnaW5SYXRpbwAABwkAAgEJAKwCAgkArAICCQCsAgICEEludmFsaWQgbWFyZ2luOiAJAKQDAQUMX21hcmdpblJhdGlvAgMgPiAJAKQDAQUQX2Jhc2VNYXJnaW5SYXRpbwYBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BDV9wb3NpdGlvblNpemUDCQAAAgUNX3Bvc2l0aW9uU2l6ZQAACQACAQIsU2hvdWxkIG5vdCBiZSBjYWxsZWQgd2l0aCBfcG9zaXRpb25TaXplID09IDADCQBmAgUNX3Bvc2l0aW9uU2l6ZQAACQEjbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ACQEkbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAELZ2V0UG9zaXRpb24CB190cmFkZXIKX2RpcmVjdGlvbgQLcG9zaXRpb25LZXkJAKwCAgkArAICBQdfdHJhZGVyAgFfCQCkAwEFCl9kaXJlY3Rpb24ED3Bvc2l0aW9uU2l6ZU9wdAkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBQ5rX3Bvc2l0aW9uU2l6ZQULcG9zaXRpb25LZXkEByRtYXRjaDAFD3Bvc2l0aW9uU2l6ZU9wdAMJAAECBQckbWF0Y2gwAgNJbnQEDHBvc2l0aW9uU2l6ZQUHJG1hdGNoMAkAlwoFBQxwb3NpdGlvblNpemUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFEGtfcG9zaXRpb25NYXJnaW4FC3Bvc2l0aW9uS2V5CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBRZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQtwb3NpdGlvbktleQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgULcG9zaXRpb25LZXkJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFHmtfcG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcAULcG9zaXRpb25LZXkJAJcKBQAAAAAAAAAAAAABDGdldERpcmVjdGlvbgENX3Bvc2l0aW9uU2l6ZQMJAGYCAAAFDV9wb3NpdGlvblNpemUFCURJUl9TSE9SVAUIRElSX0xPTkcBDmdldFBvc2l0aW9uRmVlAgdfdHJhZGVyCl9kaXJlY3Rpb24EC3Bvc2l0aW9uS2V5CQCsAgIJAKwCAgUHX3RyYWRlcgIBXwkApAMBBQpfZGlyZWN0aW9uBA5wb3NpdGlvbkZlZU9wdAkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBQ1rX3Bvc2l0aW9uRmVlBQtwb3NpdGlvbktleQQHJG1hdGNoMAUOcG9zaXRpb25GZWVPcHQDCQABAgUHJG1hdGNoMAIDSW50BAtwb3NpdGlvbkZlZQUHJG1hdGNoMAULcG9zaXRpb25GZWUJAQNmZWUAARNyZXF1aXJlT3BlblBvc2l0aW9uAgdfdHJhZGVyCl9kaXJlY3Rpb24DCQAAAggJAQtnZXRQb3NpdGlvbgIFB190cmFkZXIFCl9kaXJlY3Rpb24CXzEAAAkAAgECEE5vIG9wZW4gcG9zaXRpb24GAQ1nZXRPcmFjbGVEYXRhAQNrZXkEDW9yYWNsZURhdGFTdHIJAJ0IAgUEdGhpcwUDa2V5AwMJAQlpc0RlZmluZWQBBQ1vcmFjbGVEYXRhU3RyCQECIT0CCQEFdmFsdWUBBQ1vcmFjbGVEYXRhU3RyAgAHBApvcmFjbGVEYXRhCQC1CQIJAQV2YWx1ZQEFDW9yYWNsZURhdGFTdHICASwEDW9yYWNsZUFkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFCm9yYWNsZURhdGEAAAkArAICAhtJbnZhbGlkIG9yYWNsZSBhZGRyZXNzIGluOiAJAQV2YWx1ZQEFDW9yYWNsZURhdGFTdHIECHByaWNlS2V5CQCRAwIFCm9yYWNsZURhdGEAAQQIYmxvY2tLZXkJAJEDAgUKb3JhY2xlRGF0YQACBAdvcGVuS2V5CQCRAwIFCm9yYWNsZURhdGEAAwkAlgoEBQ1vcmFjbGVBZGRyZXNzBQhwcmljZUtleQUIYmxvY2tLZXkFB29wZW5LZXkFBHVuaXQBC2luaXRpYWxpemVkAAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQ1rX2luaXRpYWxpemVkBwEGcGF1c2VkAAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQhrX3BhdXNlZAcBCWNsb3NlT25seQAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwULa19jbG9zZU9ubHkHAQ11cGRhdGVSZXNlcnZlAwZfaXNBZGQRX3F1b3RlQXNzZXRBbW91bnQQX2Jhc2VBc3NldEFtb3VudAMFBl9pc0FkZAQHbmV3QmFzZQkAZQIJAQZic0FzdFIABRBfYmFzZUFzc2V0QW1vdW50AwkAZwIAAAUHbmV3QmFzZQkAAgECKlR4IGxlYWQgdG8gYmFzZSBhc3NldCByZXNlcnZlIDw9IDAsIHJldmVydAkAlQoDCQBkAgkBBnF0QXN0UgAFEV9xdW90ZUFzc2V0QW1vdW50BQduZXdCYXNlCQBkAgkBEXRvdGFsUG9zaXRpb25TaXplAAUQX2Jhc2VBc3NldEFtb3VudAQIbmV3UXVvdGUJAGUCCQEGcXRBc3RSAAURX3F1b3RlQXNzZXRBbW91bnQDCQBnAgAABQhuZXdRdW90ZQkAAgECKlR4IGxlYWQgdG8gYmFzZSBxdW90ZSByZXNlcnZlIDw9IDAsIHJldmVydAkAlQoDBQhuZXdRdW90ZQkAZAIJAQZic0FzdFIABRBfYmFzZUFzc2V0QW1vdW50CQBlAgkBEXRvdGFsUG9zaXRpb25TaXplAAUQX2Jhc2VBc3NldEFtb3VudAENY2FsY0ludmFyaWFudAIHX3F0QXN0UgdfYnNBc3RSBAdicXRBc3RSCQC2AgEFB19xdEFzdFIEB2Jic0FzdFIJALYCAQUHX2JzQXN0UgkBBWJtdWxkAgUHYnF0QXN0UgUHYmJzQXN0UgEJc3dhcElucHV0AgZfaXNBZGQRX3F1b3RlQXNzZXRBbW91bnQEB19xdEFzdFIJAQZxdEFzdFIABAdfYnNBc3RSCQEGYnNBc3RSAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcABBhxdW90ZUFzc2V0QW1vdW50QWRqdXN0ZWQJAQRkaXZkAgURX3F1b3RlQXNzZXRBbW91bnQFB19xdEFzdFcEAWsJAQ1jYWxjSW52YXJpYW50AgUHX3F0QXN0UgUHX2JzQXN0UgQWcXVvdGVBc3NldFJlc2VydmVBZnRlcgMFBl9pc0FkZAkAZAIFB19xdEFzdFIFGHF1b3RlQXNzZXRBbW91bnRBZGp1c3RlZAkAZQIFB19xdEFzdFIFGHF1b3RlQXNzZXRBbW91bnRBZGp1c3RlZAQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCQCgAwEJAQViZGl2ZAIFAWsJALYCAQUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgQYYW1vdW50QmFzZUFzc2V0Qm91Z2h0QWJzCQEDYWJzAQkAZQIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUHX2JzQXN0UgQVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AwUGX2lzQWRkBRhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMJAQEtAQUYYW1vdW50QmFzZUFzc2V0Qm91Z2h0QWJzBA0kdDAxNTU4NDE1NzU0CQENdXBkYXRlUmVzZXJ2ZQMFBl9pc0FkZAUYcXVvdGVBc3NldEFtb3VudEFkanVzdGVkBRhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMEF3F1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUNJHQwMTU1ODQxNTc1NAJfMQQWYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDE1NTg0MTU3NTQCXzIEF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxCAUNJHQwMTU1ODQxNTc1NAJfMwQLcHJpY2VCZWZvcmUJAQRkaXZkAgkBBG11bGQCBQdfcXRBc3RSBQdfcXRBc3RXCQEEbXVsZAIFB19ic0FzdFIFB19ic0FzdFcEC21hcmtldFByaWNlCQEEZGl2ZAIFEV9xdW90ZUFzc2V0QW1vdW50BRhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMECXByaWNlRGlmZgkBA2FicwEJAGUCBQtwcmljZUJlZm9yZQULbWFya2V0UHJpY2UEC3ByaWNlSW1wYWN0CQBlAgUMREVDSU1BTF9VTklUCQEEZGl2ZAIFC3ByaWNlQmVmb3JlCQBkAgULcHJpY2VCZWZvcmUFCXByaWNlRGlmZgQTbWF4UHJpY2VJbXBhY3RWYWx1ZQkBDm1heFByaWNlSW1wYWN0AAMJAGYCBQtwcmljZUltcGFjdAUTbWF4UHJpY2VJbXBhY3RWYWx1ZQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgINUHJpY2UgaW1wYWN0IAkApAMBBQtwcmljZUltcGFjdAIUID4gbWF4IHByaWNlIGltcGFjdCAJAKQDAQUTbWF4UHJpY2VJbXBhY3RWYWx1ZQIVIGJlZm9yZSBxdW90ZSBhc3NldDogCQCkAwEFB19xdEFzdFICFCBiZWZvcmUgYmFzZSBhc3NldDogCQCkAwEFB19ic0FzdFICISBxdW90ZSBhc3NldCBhbW91bnQgdG8gZXhjaGFuZ2U6IAkApAMBBRFfcXVvdGVBc3NldEFtb3VudAIPIHByaWNlIGJlZm9yZTogCQCkAwEFC3ByaWNlQmVmb3JlAg4gbWFya2V0UHJpY2U6IAkApAMBBQttYXJrZXRQcmljZQkAlgoEBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQFF3F1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIxBRZiYXNlQXNzZXRSZXNlcnZlQWZ0ZXIxBRd0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyMQEPY2FsY1JvbGxvdmVyRmVlAhJfb2xkUG9zaXRpb25NYXJnaW4gX29sZFBvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXAED3Bvc2l0aW9uTWludXRlcwkAaAIJAGkCCQBpAgkAZQIJAQ1sYXN0VGltZXN0YW1wAAUgX29sZFBvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXAA6AcAPAUMREVDSU1BTF9VTklUBAtyb2xsb3ZlckZlZQkBBGRpdmQCCQEEbXVsZAIJAQRtdWxkAgUSX29sZFBvc2l0aW9uTWFyZ2luBQ9wb3NpdGlvbk1pbnV0ZXMJAQ9yb2xsb3ZlckZlZVJhdGUABQ9NSU5VVEVTX0lOX1lFQVIFC3JvbGxvdmVyRmVlATBjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50QW5kUm9sbG92ZXJGZWUFEF9vbGRQb3NpdGlvblNpemUSX29sZFBvc2l0aW9uTWFyZ2luJV9vbGRQb3NpdGlvbkN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24gX29sZFBvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXAMX21hcmdpbkRlbHRhBA5mdW5kaW5nUGF5bWVudAMJAQIhPQIFEF9vbGRQb3NpdGlvblNpemUAAAQgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUQX29sZFBvc2l0aW9uU2l6ZQkBBG11bGQCCQBlAgUgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FJV9vbGRQb3NpdGlvbkN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FEF9vbGRQb3NpdGlvblNpemUAAAQLcm9sbG92ZXJGZWUJAQ9jYWxjUm9sbG92ZXJGZWUCBRJfb2xkUG9zaXRpb25NYXJnaW4FIF9vbGRQb3NpdGlvbkxhc3RVcGRhdGVkVGltZXN0YW1wBAxzaWduZWRNYXJnaW4JAGQCCQBlAgkAZQIFDF9tYXJnaW5EZWx0YQULcm9sbG92ZXJGZWUFDmZ1bmRpbmdQYXltZW50BRJfb2xkUG9zaXRpb25NYXJnaW4EDSR0MDE4NDIxMTg1NDgDCQBmAgAABQxzaWduZWRNYXJnaW4JAJQKAgAACQEDYWJzAQUMc2lnbmVkTWFyZ2luCQCUCgIJAQNhYnMBBQxzaWduZWRNYXJnaW4AAAQMcmVtYWluTWFyZ2luCAUNJHQwMTg0MjExODU0OAJfMQQHYmFkRGVidAgFDSR0MDE4NDIxMTg1NDgCXzIJAJYKBAUMcmVtYWluTWFyZ2luBQdiYWREZWJ0BQ5mdW5kaW5nUGF5bWVudAULcm9sbG92ZXJGZWUBFnN3YXBPdXRwdXRXaXRoUmVzZXJ2ZXMHBl9pc0FkZBBfYmFzZUFzc2V0QW1vdW50FF9jaGVja01heFByaWNlSW1wYWN0El9xdW90ZUFzc2V0UmVzZXJ2ZRFfcXVvdGVBc3NldFdlaWdodBFfYmFzZUFzc2V0UmVzZXJ2ZRBfYmFzZUFzc2V0V2VpZ2h0BAtwcmljZUJlZm9yZQkBBGRpdmQCCQEEbXVsZAIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX3F1b3RlQXNzZXRXZWlnaHQJAQRtdWxkAgURX2Jhc2VBc3NldFJlc2VydmUFEF9iYXNlQXNzZXRXZWlnaHQDCQAAAgUQX2Jhc2VBc3NldEFtb3VudAAACQACAQIZSW52YWxpZCBiYXNlIGFzc2V0IGFtb3VudAQBawkBDWNhbGNJbnZhcmlhbnQCBRJfcXVvdGVBc3NldFJlc2VydmUFEV9iYXNlQXNzZXRSZXNlcnZlBBhiYXNlQXNzZXRQb29sQW1vdW50QWZ0ZXIDBQZfaXNBZGQJAGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldEFtb3VudAkAZQIFEV9iYXNlQXNzZXRSZXNlcnZlBRBfYmFzZUFzc2V0QW1vdW50BA9xdW90ZUFzc2V0QWZ0ZXIJAKADAQkBBWJkaXZkAgUBawkAtgIBBRhiYXNlQXNzZXRQb29sQW1vdW50QWZ0ZXIED3F1b3RlQXNzZXREZWx0YQkBA2FicwEJAGUCBQ9xdW90ZUFzc2V0QWZ0ZXIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQQOcXVvdGVBc3NldFNvbGQJAQRtdWxkAgUPcXVvdGVBc3NldERlbHRhBRFfcXVvdGVBc3NldFdlaWdodAQTbWF4UHJpY2VJbXBhY3RWYWx1ZQkBDm1heFByaWNlSW1wYWN0AAQNJHQwMTk4MTAxOTk3MgkBDXVwZGF0ZVJlc2VydmUDCQEBIQEFBl9pc0FkZAUPcXVvdGVBc3NldERlbHRhBRBfYmFzZUFzc2V0QW1vdW50BBdxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDE5ODEwMTk5NzICXzEEFmJhc2VBc3NldFJlc2VydmVBZnRlcjEIBQ0kdDAxOTgxMDE5OTcyAl8yBBd0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyMQgFDSR0MDE5ODEwMTk5NzICXzMEC21hcmtldFByaWNlCQEEZGl2ZAIFDnF1b3RlQXNzZXRTb2xkBRBfYmFzZUFzc2V0QW1vdW50BAlwcmljZURpZmYJAQNhYnMBCQBlAgULcHJpY2VCZWZvcmUFC21hcmtldFByaWNlBAtwcmljZUltcGFjdAkAZQIFDERFQ0lNQUxfVU5JVAkBBGRpdmQCBQtwcmljZUJlZm9yZQkAZAIFC3ByaWNlQmVmb3JlBQlwcmljZURpZmYDAwkAZgIFC3ByaWNlSW1wYWN0BRNtYXhQcmljZUltcGFjdFZhbHVlBRRfY2hlY2tNYXhQcmljZUltcGFjdAcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDVByaWNlIGltcGFjdCAJAKQDAQULcHJpY2VJbXBhY3QCFCA+IG1heCBwcmljZSBpbXBhY3QgCQCkAwEFE21heFByaWNlSW1wYWN0VmFsdWUCFSBiZWZvcmUgcXVvdGUgYXNzZXQ6IAkApAMBBRJfcXVvdGVBc3NldFJlc2VydmUCFCBiZWZvcmUgYmFzZSBhc3NldDogCQCkAwEFEV9iYXNlQXNzZXRSZXNlcnZlAiAgYmFzZSBhc3NldCBhbW91bnQgdG8gZXhjaGFuZ2U6IAkApAMBBRBfYmFzZUFzc2V0QW1vdW50Ag8gcHJpY2UgYmVmb3JlOiAJAKQDAQULcHJpY2VCZWZvcmUCDyBtYXJrZXQgcHJpY2U6IAkApAMBBQttYXJrZXRQcmljZQkAmQoHBQ5xdW90ZUFzc2V0U29sZAUXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEFFmJhc2VBc3NldFJlc2VydmVBZnRlcjEFF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxCQBlAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQADBQZfaXNBZGQJAQNhYnMBBRBfYmFzZUFzc2V0QW1vdW50AAAJAGUCCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQADCQEBIQEFBl9pc0FkZAkBA2FicwEFEF9iYXNlQXNzZXRBbW91bnQAAAULcHJpY2VJbXBhY3QBCnN3YXBPdXRwdXQDBl9pc0FkZBBfYmFzZUFzc2V0QW1vdW50FF9jaGVja01heFByaWNlSW1wYWN0CQEWc3dhcE91dHB1dFdpdGhSZXNlcnZlcwcFBl9pc0FkZAUQX2Jhc2VBc3NldEFtb3VudAUUX2NoZWNrTWF4UHJpY2VJbXBhY3QJAQZxdEFzdFIACQEGcXRBc3RXAAkBBmJzQXN0UgAJAQZic0FzdFcAARNnZXRPcmFjbGVQcmljZVZhbHVlAwZvcmFjbGUIcHJpY2VLZXkIYmxvY2tLZXkECWxhc3RWYWx1ZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBm9yYWNsZQUIcHJpY2VLZXkJAKwCAgkArAICCQCsAgICIkNhbiBub3QgZ2V0IG9yYWNsZSBwcmljZS4gT3JhY2xlOiAJAKUIAQUGb3JhY2xlAgYga2V5OiAFCHByaWNlS2V5AwkBAiE9AgUIYmxvY2tLZXkCAAQMY3VycmVudEJsb2NrCAUJbGFzdEJsb2NrBmhlaWdodAQPbGFzdE9yYWNsZUJsb2NrCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUGb3JhY2xlBQhibG9ja0tleQkArAICCQCsAgIJAKwCAgIiQ2FuIG5vdCBnZXQgb3JhY2xlIGJsb2NrLiBPcmFjbGU6IAkApQgBBQZvcmFjbGUCBiBrZXk6IAUIYmxvY2tLZXkDCQBmAgkAZQIFDGN1cnJlbnRCbG9jawUPbGFzdE9yYWNsZUJsb2NrCQEObWF4T3JhY2xlRGVsYXkACQACAQkArAICCQCsAgIJAKwCAgImT3JhY2xlIHN0YWxlIGRhdGEuIExhc3Qgb3JhY2xlIGJsb2NrOiAJAKQDAQUPbGFzdE9yYWNsZUJsb2NrAhAgY3VycmVudCBibG9jazogCQCkAwEFDGN1cnJlbnRCbG9jawUJbGFzdFZhbHVlBQlsYXN0VmFsdWUBDmdldE9yYWNsZVByaWNlAAQKYmFzZU9yYWNsZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQENZ2V0T3JhY2xlRGF0YQEFDGtfYmFzZU9yYWNsZQIZTm8gYmFzZSBhc3NldCBvcmFjbGUgZGF0YQQPYmFzZU9yYWNsZVByaWNlCQETZ2V0T3JhY2xlUHJpY2VWYWx1ZQMIBQpiYXNlT3JhY2xlAl8xCAUKYmFzZU9yYWNsZQJfMggFCmJhc2VPcmFjbGUCXzMEC3F1b3RlT3JhY2xlCQENZ2V0T3JhY2xlRGF0YQEFDWtfcXVvdGVPcmFjbGUEEHF1b3RlT3JhY2xlUHJpY2UDCQEJaXNEZWZpbmVkAQULcXVvdGVPcmFjbGUEDHF1b3RlT3JhY2xlVgkBBXZhbHVlAQULcXVvdGVPcmFjbGUJARNnZXRPcmFjbGVQcmljZVZhbHVlAwgFDHF1b3RlT3JhY2xlVgJfMQgFDHF1b3RlT3JhY2xlVgJfMggFDHF1b3RlT3JhY2xlVgJfMwUMREVDSU1BTF9VTklUCQEEZGl2ZAIFD2Jhc2VPcmFjbGVQcmljZQUQcXVvdGVPcmFjbGVQcmljZQEOaXNNYXJrZXRDbG9zZWQABApiYXNlT3JhY2xlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAQ1nZXRPcmFjbGVEYXRhAQUMa19iYXNlT3JhY2xlAhlObyBiYXNlIGFzc2V0IG9yYWNsZSBkYXRhBAZvcmFjbGUIBQpiYXNlT3JhY2xlAl8xBAdvcGVuS2V5CAUKYmFzZU9yYWNsZQJfNAMJAQIhPQIFB29wZW5LZXkCAAQGaXNPcGVuCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJsIAgUGb3JhY2xlBQdvcGVuS2V5CQCsAgIJAKwCAgkArAICAitDYW4gbm90IGdldCBvcmFjbGUgaXMgb3Blbi9jbG9zZWQuIE9yYWNsZTogCQClCAEFBm9yYWNsZQIGIGtleTogBQdvcGVuS2V5CQEBIQEFBmlzT3BlbgcBDGFic1ByaWNlRGlmZgUMX29yYWNsZVByaWNlEl9xdW90ZUFzc2V0UmVzZXJ2ZRFfYmFzZUFzc2V0UmVzZXJ2ZQdfcXRBc3RXB19ic0FzdFcECnByaWNlQWZ0ZXIJAQRkaXZkAgkBBG11bGQCBRJfcXVvdGVBc3NldFJlc2VydmUFB19xdEFzdFcJAQRtdWxkAgURX2Jhc2VBc3NldFJlc2VydmUFB19ic0FzdFcEDGF2ZXJhZ2VQcmljZQkBBGRpdmQCCQBkAgUMX29yYWNsZVByaWNlBQpwcmljZUFmdGVyCQBoAgACBQxERUNJTUFMX1VOSVQEDGFic1ByaWNlRGlmZgkBBGRpdmQCCQEDYWJzAQkAZQIFDF9vcmFjbGVQcmljZQUKcHJpY2VBZnRlcgUMYXZlcmFnZVByaWNlBQxhYnNQcmljZURpZmYBGXJlcXVpcmVOb3RPdmVyU3ByZWFkTGltaXQCEl9xdW90ZUFzc2V0UmVzZXJ2ZRFfYmFzZUFzc2V0UmVzZXJ2ZQQLb3JhY2xlUHJpY2UJAQ5nZXRPcmFjbGVQcmljZQAEB19xdEFzdFcJAQZxdEFzdFcABAdfYnNBc3RXCQEGYnNBc3RXAAQSYWJzUHJpY2VEaWZmQmVmb3JlCQEMYWJzUHJpY2VEaWZmBQULb3JhY2xlUHJpY2UJAQZxdEFzdFIACQEGYnNBc3RSAAUHX3F0QXN0VwUHX2JzQXN0VwQRYWJzUHJpY2VEaWZmQWZ0ZXIJAQxhYnNQcmljZURpZmYFBQtvcmFjbGVQcmljZQUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfYmFzZUFzc2V0UmVzZXJ2ZQUHX3F0QXN0VwUHX2JzQXN0VwMDCQBmAgURYWJzUHJpY2VEaWZmQWZ0ZXIJAQ5tYXhQcmljZVNwcmVhZAAJAGYCBRFhYnNQcmljZURpZmZBZnRlcgUSYWJzUHJpY2VEaWZmQmVmb3JlBwkAAgEJAKwCAgkArAICCQCsAgICDVByaWNlIHNwcmVhZCAJAKQDAQURYWJzUHJpY2VEaWZmQWZ0ZXICFCA+IG1heCBwcmljZSBzcHJlYWQgCQCkAwEJAQ5tYXhQcmljZVNwcmVhZAAGAR1yZXF1aXJlTm90T3Zlck1heE9wZW5Ob3Rpb25hbAIRX2xvbmdPcGVuTm90aW9uYWwSX3Nob3J0T3Blbk5vdGlvbmFsBBBfbWF4T3Blbk5vdGlvbmFsCQEPbWF4T3Blbk5vdGlvbmFsAAMJAGYCBRFfbG9uZ09wZW5Ob3Rpb25hbAUQX21heE9wZW5Ob3Rpb25hbAkAAgEJAKwCAgkArAICCQCsAgICE0xvbmcgb3BlbiBub3Rpb25hbCAJAKQDAQURX2xvbmdPcGVuTm90aW9uYWwCFSA+IG1heCBvcGVuIG5vdGlvbmFsIAkApAMBBRBfbWF4T3Blbk5vdGlvbmFsAwkAZgIFEl9zaG9ydE9wZW5Ob3Rpb25hbAUQX21heE9wZW5Ob3Rpb25hbAkAAgEJAKwCAgkArAICCQCsAgICFFNob3J0IG9wZW4gbm90aW9uYWwgCQCkAwEFEl9zaG9ydE9wZW5Ob3Rpb25hbAIVID4gbWF4IG9wZW4gbm90aW9uYWwgCQCkAwEFEF9tYXhPcGVuTm90aW9uYWwGAQxnZXRTcG90UHJpY2UABBJfcXVvdGVBc3NldFJlc2VydmUJAQZxdEFzdFIABBFfYmFzZUFzc2V0UmVzZXJ2ZQkBBmJzQXN0UgAEB19xdEFzdFcJAQZxdEFzdFcABAdfYnNBc3RXCQEGYnNBc3RXAAkBBGRpdmQCCQEEbXVsZAIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQUHX3F0QXN0VwkBBG11bGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUHX2JzQXN0VwEWaXNPdmVyRmx1Y3R1YXRpb25MaW1pdAAEC29yYWNsZVByaWNlCQEOZ2V0T3JhY2xlUHJpY2UABAxjdXJyZW50UHJpY2UJAQxnZXRTcG90UHJpY2UACQBmAgkBBGRpdmQCCQEDYWJzAQkAZQIFC29yYWNsZVByaWNlBQxjdXJyZW50UHJpY2UFC29yYWNsZVByaWNlCQELc3ByZWFkTGltaXQAAR9nZXRQb3NpdGlvbkFkanVzdGVkT3Blbk5vdGlvbmFsBg1fcG9zaXRpb25TaXplB19vcHRpb24SX3F1b3RlQXNzZXRSZXNlcnZlEV9xdW90ZUFzc2V0V2VpZ2h0EV9iYXNlQXNzZXRSZXNlcnZlEF9iYXNlQXNzZXRXZWlnaHQED3Bvc2l0aW9uU2l6ZUFicwkBA2FicwEFDV9wb3NpdGlvblNpemUEB2lzU2hvcnQJAGYCAAAFDV9wb3NpdGlvblNpemUEEHBvc2l0aW9uTm90aW9uYWwDCQAAAgUHX29wdGlvbgUPUE5MX09QVElPTl9TUE9UBBNvdXRQb3NpdGlvbk5vdGlvbmFsCAkBFnN3YXBPdXRwdXRXaXRoUmVzZXJ2ZXMHCQEBIQEFB2lzU2hvcnQFD3Bvc2l0aW9uU2l6ZUFicwcFEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX3F1b3RlQXNzZXRXZWlnaHQFEV9iYXNlQXNzZXRSZXNlcnZlBRBfYmFzZUFzc2V0V2VpZ2h0Al8xBRNvdXRQb3NpdGlvbk5vdGlvbmFsCQEEbXVsZAIFD3Bvc2l0aW9uU2l6ZUFicwkBDmdldE9yYWNsZVByaWNlAAUQcG9zaXRpb25Ob3Rpb25hbAErZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmxCeVZhbHVlcwcNX3Bvc2l0aW9uU2l6ZRVfcG9zaXRpb25PcGVuTm90aW9uYWwSX3F1b3RlQXNzZXRSZXNlcnZlEV9xdW90ZUFzc2V0V2VpZ2h0EV9iYXNlQXNzZXRSZXNlcnZlEF9iYXNlQXNzZXRXZWlnaHQHX29wdGlvbgMJAAACBQ1fcG9zaXRpb25TaXplAAAJAAIBAhVJbnZhbGlkIHBvc2l0aW9uIHNpemUEB2lzU2hvcnQJAGYCAAAFDV9wb3NpdGlvblNpemUEEHBvc2l0aW9uTm90aW9uYWwJAR9nZXRQb3NpdGlvbkFkanVzdGVkT3Blbk5vdGlvbmFsBgUNX3Bvc2l0aW9uU2l6ZQUHX29wdGlvbgUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfcXVvdGVBc3NldFdlaWdodAURX2Jhc2VBc3NldFJlc2VydmUFEF9iYXNlQXNzZXRXZWlnaHQEDXVucmVhbGl6ZWRQbmwDBQdpc1Nob3J0CQBlAgUVX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBRBwb3NpdGlvbk5vdGlvbmFsCQBlAgUQcG9zaXRpb25Ob3Rpb25hbAUVX3Bvc2l0aW9uT3Blbk5vdGlvbmFsCQCUCgIFEHBvc2l0aW9uTm90aW9uYWwFDXVucmVhbGl6ZWRQbmwBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAwdfdHJhZGVyCl9kaXJlY3Rpb24HX29wdGlvbgQNJHQwMjc4NjcyODAwNwkBC2dldFBvc2l0aW9uAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgQMcG9zaXRpb25TaXplCAUNJHQwMjc4NjcyODAwNwJfMQQOcG9zaXRpb25NYXJnaW4IBQ0kdDAyNzg2NzI4MDA3Al8yBBRwb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDI3ODY3MjgwMDcCXzMEEXBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwMjc4NjcyODAwNwJfNAkBK2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sQnlWYWx1ZXMHBQxwb3NpdGlvblNpemUFFHBvc2l0aW9uT3Blbk5vdGlvbmFsCQEGcXRBc3RSAAkBBnF0QXN0VwAJAQZic0FzdFIACQEGYnNBc3RXAAUHX29wdGlvbgEPY2FsY01hcmdpblJhdGlvAw1fcmVtYWluTWFyZ2luCF9iYWREZWJ0EV9wb3NpdGlvbk5vdGlvbmFsCQEEZGl2ZAIJAGUCBQ1fcmVtYWluTWFyZ2luBQhfYmFkRGVidAURX3Bvc2l0aW9uTm90aW9uYWwBFmdldE1hcmdpblJhdGlvQnlPcHRpb24DB190cmFkZXIKX2RpcmVjdGlvbgdfb3B0aW9uBA0kdDAyODUzOTI4NjkyCQELZ2V0UG9zaXRpb24CBQdfdHJhZGVyBQpfZGlyZWN0aW9uBAxwb3NpdGlvblNpemUIBQ0kdDAyODUzOTI4NjkyAl8xBA5wb3NpdGlvbk1hcmdpbggFDSR0MDI4NTM5Mjg2OTICXzIEA3BvbggFDSR0MDI4NTM5Mjg2OTICXzMEFnBvc2l0aW9uTGFzdFVwZGF0ZWRDUEYIBQ0kdDAyODUzOTI4NjkyAl80BBFwb3NpdGlvblRpbWVzdGFtcAgFDSR0MDI4NTM5Mjg2OTICXzUEDSR0MDI4Njk4Mjg4MDMJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAMFB190cmFkZXIFCl9kaXJlY3Rpb24FB19vcHRpb24EEHBvc2l0aW9uTm90aW9uYWwIBQ0kdDAyODY5ODI4ODAzAl8xBA11bnJlYWxpemVkUG5sCAUNJHQwMjg2OTgyODgwMwJfMgQNJHQwMjg4MDgyOTAyMAkBMGNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnRBbmRSb2xsb3ZlckZlZQUFDHBvc2l0aW9uU2l6ZQUOcG9zaXRpb25NYXJnaW4FFnBvc2l0aW9uTGFzdFVwZGF0ZWRDUEYFEXBvc2l0aW9uVGltZXN0YW1wBQ11bnJlYWxpemVkUG5sBAxyZW1haW5NYXJnaW4IBQ0kdDAyODgwODI5MDIwAl8xBAdiYWREZWJ0CAUNJHQwMjg4MDgyOTAyMAJfMgkBD2NhbGNNYXJnaW5SYXRpbwMFDHJlbWFpbk1hcmdpbgUHYmFkRGVidAUQcG9zaXRpb25Ob3Rpb25hbAEOZ2V0TWFyZ2luUmF0aW8CB190cmFkZXIKX2RpcmVjdGlvbgkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24DBQdfdHJhZGVyBQpfZGlyZWN0aW9uBQ9QTkxfT1BUSU9OX1NQT1QBG2dldFBhcnRpYWxMaXF1aWRhdGlvbkFtb3VudAIHX3RyYWRlcg1fcG9zaXRpb25TaXplBAxtYXhpbXVtUmF0aW8JAQR2bWF4AgkBF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAkAZQIFDERFQ0lNQUxfVU5JVAkBBGRpdmQCCQEOZ2V0TWFyZ2luUmF0aW8CBQdfdHJhZGVyCQEMZ2V0RGlyZWN0aW9uAQUNX3Bvc2l0aW9uU2l6ZQkBFm1haW50ZW5hbmNlTWFyZ2luUmF0aW8ABBhtYXhFeGNoYW5nZWRQb3NpdGlvblNpemUJAQRtdWxkAgkBA2FicwEFDV9wb3NpdGlvblNpemUFDG1heGltdW1SYXRpbwQKc3dhcFJlc3VsdAkBCnN3YXBPdXRwdXQDCQBmAgUNX3Bvc2l0aW9uU2l6ZQAABRhtYXhFeGNoYW5nZWRQb3NpdGlvblNpemUHBBxtYXhFeGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CAUKc3dhcFJlc3VsdAJfMQQLcHJpY2VJbXBhY3QIBQpzd2FwUmVzdWx0Al83AwkAZgIJAQ5tYXhQcmljZUltcGFjdAAFC3ByaWNlSW1wYWN0BRhtYXhFeGNoYW5nZWRQb3NpdGlvblNpemUJAQRtdWxkAgkBA2FicwEFDV9wb3NpdGlvblNpemUJARdwYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwABFWludGVybmFsQ2xvc2VQb3NpdGlvbggHX3RyYWRlcgpfZGlyZWN0aW9uBV9zaXplBF9mZWUUX21pblF1b3RlQXNzZXRBbW91bnQMX2FkZFRvTWFyZ2luFF9jaGVja01heFByaWNlSW1wYWN0Cl9saXF1aWRhdGUEDSR0MDMwMTgzMzAzNTEJAQtnZXRQb3NpdGlvbgIFB190cmFkZXIFCl9kaXJlY3Rpb24ED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDMwMTgzMzAzNTECXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwMzAxODMzMDM1MQJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDAzMDE4MzMwMzUxAl8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDMwMTgzMzAzNTECXzQEFG9sZFBvc2l0aW9uVGltZXN0YW1wCAUNJHQwMzAxODMzMDM1MQJfNQQOaXNMb25nUG9zaXRpb24JAGYCBQ9vbGRQb3NpdGlvblNpemUAAAQSYWJzT2xkUG9zaXRpb25TaXplCQEDYWJzAQUPb2xkUG9zaXRpb25TaXplAwMJAGcCBRJhYnNPbGRQb3NpdGlvblNpemUFBV9zaXplCQBmAgUFX3NpemUAAAcEDmlzUGFydGlhbENsb3NlCQBmAgUSYWJzT2xkUG9zaXRpb25TaXplBQVfc2l6ZQQNJHQwMzA2NDMzMTA5NAkBCnN3YXBPdXRwdXQDCQBmAgUPb2xkUG9zaXRpb25TaXplAAAFBV9zaXplBRRfY2hlY2tNYXhQcmljZUltcGFjdAQZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAgFDSR0MDMwNjQzMzEwOTQCXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAzMDY0MzMxMDk0Al8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAzMDY0MzMxMDk0Al8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwMzA2NDMzMTA5NAJfNAQVZXhjaGFuZ2VkUG9zaXRpb25TaXplAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAACQEBLQEFBV9zaXplBQVfc2l6ZQQNJHQwMzEzMDkzMTUzMwkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAwUHX3RyYWRlcgUKX2RpcmVjdGlvbgUPUE5MX09QVElPTl9TUE9UBBNvbGRQb3NpdGlvbk5vdGlvbmFsCAUNJHQwMzEzMDkzMTUzMwJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDMxMzA5MzE1MzMCXzIEDXJlYWxpemVkUmF0aW8JAQRkaXZkAgkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQUSYWJzT2xkUG9zaXRpb25TaXplBAtyZWFsaXplZFBubAkBBG11bGQCBQ11bnJlYWxpemVkUG5sBQ1yZWFsaXplZFJhdGlvBA0kdDAzMTg3NDMyMTIwCQEwY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudEFuZFJvbGxvdmVyRmVlBQUPb2xkUG9zaXRpb25TaXplBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25Mc3RVcGRDUEYFFG9sZFBvc2l0aW9uVGltZXN0YW1wBQ11bnJlYWxpemVkUG5sBBJyZW1haW5NYXJnaW5CZWZvcmUIBQ0kdDAzMTg3NDMyMTIwAl8xBAJ4MQgFDSR0MDMxODc0MzIxMjACXzIEAngyCAUNJHQwMzE4NzQzMjEyMAJfMwQLcm9sbG92ZXJGZWUIBQ0kdDAzMTg3NDMyMTIwAl80BA9wb3NpdGlvbkJhZERlYnQICQEwY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudEFuZFJvbGxvdmVyRmVlBQUPb2xkUG9zaXRpb25TaXplBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25Mc3RVcGRDUEYFFG9sZFBvc2l0aW9uVGltZXN0YW1wBQtyZWFsaXplZFBubAJfMgQQcmVhbGl6ZWRDbG9zZUZlZQkBBG11bGQCCQEEbXVsZAIFE29sZFBvc2l0aW9uTm90aW9uYWwFDXJlYWxpemVkUmF0aW8FBF9mZWUEEnVucmVhbGl6ZWRQbmxBZnRlcgkAZQIFDXVucmVhbGl6ZWRQbmwFC3JlYWxpemVkUG5sBBJyZW1haW5PcGVuTm90aW9uYWwDCQBmAgUPb2xkUG9zaXRpb25TaXplAAAJAGUCCQBlAgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAUSdW5yZWFsaXplZFBubEFmdGVyCQBlAgkAZAIFEnVucmVhbGl6ZWRQbmxBZnRlcgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAQPbmV3UG9zaXRpb25TaXplCQBkAgUPb2xkUG9zaXRpb25TaXplBRVleGNoYW5nZWRQb3NpdGlvblNpemUEDSR0MDMzNTI2MzM5MTIDCQAAAgUPbmV3UG9zaXRpb25TaXplAAAJAJQKAgAAAAAJAJQKAgkBA2FicwEFEnJlbWFpbk9wZW5Ob3Rpb25hbAkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBQ9uZXdQb3NpdGlvblNpemUEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwMzM1MjYzMzkxMgJfMQQUbmV3UG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDAzMzUyNjMzOTEyAl8yBBFvcGVuTm90aW9uYWxEZWx0YQkAZQIFF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAQLbWFyZ2luUmF0aW8JARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAwUHX3RyYWRlcgUKX2RpcmVjdGlvbgUPUE5MX09QVElPTl9TUE9UBB5uZXdQb3NpdGlvbk1hcmdpbldpdGhTYW1lUmF0aW8DCQBmAgUPb2xkUG9zaXRpb25TaXplAAAJAGUCCQEEbXVsZAIJAGQCBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUSdW5yZWFsaXplZFBubEFmdGVyBQttYXJnaW5SYXRpbwUSdW5yZWFsaXplZFBubEFmdGVyCQBlAgkBBG11bGQCCQBlAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFEnVucmVhbGl6ZWRQbmxBZnRlcgULbWFyZ2luUmF0aW8FEnVucmVhbGl6ZWRQbmxBZnRlcgQRbWFyZ2luVG9UcmFkZXJSYXcJAGUCCQBlAgUScmVtYWluTWFyZ2luQmVmb3JlCQBkAgUebmV3UG9zaXRpb25NYXJnaW5XaXRoU2FtZVJhdGlvBRJ1bnJlYWxpemVkUG5sQWZ0ZXIFEHJlYWxpemVkQ2xvc2VGZWUEDm1hcmdpblRvVHJhZGVyAwkAZgIAAAURbWFyZ2luVG9UcmFkZXJSYXcDBQpfbGlxdWlkYXRlAAAJAAIBAjdJbnZhbGlkIGludGVybmFsQ2xvc2VQb3NpdGlvbiBwYXJhbXM6IHVuYWJsZSB0byBwYXkgZmVlBRFtYXJnaW5Ub1RyYWRlclJhdwQRbmV3UG9zaXRpb25NYXJnaW4DBQxfYWRkVG9NYXJnaW4JAGQCBR5uZXdQb3NpdGlvbk1hcmdpbldpdGhTYW1lUmF0aW8FDm1hcmdpblRvVHJhZGVyBR5uZXdQb3NpdGlvbk1hcmdpbldpdGhTYW1lUmF0aW8DAwkBAiE9AgUUX21pblF1b3RlQXNzZXRBbW91bnQAAAkAZgIFFF9taW5RdW90ZUFzc2V0QW1vdW50BRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BwkAAgEJAKwCAgkArAICCQCsAgICDUxpbWl0IGVycm9yOiAJAKQDAQUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAIDIDwgCQCkAwEFFF9taW5RdW90ZUFzc2V0QW1vdW50CQCjChEFD25ld1Bvc2l0aW9uU2l6ZQURbmV3UG9zaXRpb25NYXJnaW4FF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRRuZXdQb3NpdGlvbkxzdFVwZENQRgUPcG9zaXRpb25CYWREZWJ0BQtyZWFsaXplZFBubAMDBQxfYWRkVG9NYXJnaW4FDmlzUGFydGlhbENsb3NlBwAABQ5tYXJnaW5Ub1RyYWRlcgUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQBlAgkBFG9wZW5JbnRlcmVzdE5vdGlvbmFsAAURb3Blbk5vdGlvbmFsRGVsdGEJAGUCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMFDmlzTG9uZ1Bvc2l0aW9uCQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplAAAJAGUCCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQADCQEBIQEFDmlzTG9uZ1Bvc2l0aW9uCQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplAAAJAGUCCQEQb3BlbkludGVyZXN0TG9uZwADBQ5pc0xvbmdQb3NpdGlvbgURb3Blbk5vdGlvbmFsRGVsdGEAAAkAZQIJARFvcGVuSW50ZXJlc3RTaG9ydAADCQEBIQEFDmlzTG9uZ1Bvc2l0aW9uBRFvcGVuTm90aW9uYWxEZWx0YQAACQBkAgUQcmVhbGl6ZWRDbG9zZUZlZQULcm9sbG92ZXJGZWUFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQJAAIBCQCsAgIJAKwCAgkArAICAj1JbnZhbGlkIGludGVybmFsQ2xvc2VQb3NpdGlvbiBwYXJhbXM6IGludmFsaWQgcG9zaXRpb24gc2l6ZTogCQCkAwEFBV9zaXplAgYgbWF4OiAJAKQDAQUSYWJzT2xkUG9zaXRpb25TaXplARNnZXRUZXJtaW5hbEFtbVN0YXRlAAQNX3Bvc2l0aW9uU2l6ZQkBEXRvdGFsUG9zaXRpb25TaXplAAMJAAACBQ1fcG9zaXRpb25TaXplAAAJAJQKAgkBBnF0QXN0UgAJAQZic0FzdFIABAlkaXJlY3Rpb24JAGYCBQ1fcG9zaXRpb25TaXplAAAEDSR0MDM3MTU5MzczMzgJAQpzd2FwT3V0cHV0AwUJZGlyZWN0aW9uCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQcEFWN1cnJlbnROZXRNYXJrZXRWYWx1ZQgFDSR0MDM3MTU5MzczMzgCXzEEGXRlcm1pbmFsUXVvdGVBc3NldFJlc2VydmUIBQ0kdDAzNzE1OTM3MzM4Al8yBBh0ZXJtaW5hbEJhc2VBc3NldFJlc2VydmUIBQ0kdDAzNzE1OTM3MzM4Al8zCQCUCgIFGXRlcm1pbmFsUXVvdGVBc3NldFJlc2VydmUFGHRlcm1pbmFsQmFzZUFzc2V0UmVzZXJ2ZQETZ2V0UXVvdGVBc3NldFdlaWdodAQQYmFzZUFzc2V0UmVzZXJ2ZRF0b3RhbFBvc2l0aW9uU2l6ZRFxdW90ZUFzc2V0UmVzZXJ2ZQt0YXJnZXRQcmljZQQBYgkAtgIBBRBiYXNlQXNzZXRSZXNlcnZlBAJzegkAtgIBBRF0b3RhbFBvc2l0aW9uU2l6ZQQBcQkAtgIBBRFxdW90ZUFzc2V0UmVzZXJ2ZQQBcAkAtgIBBQt0YXJnZXRQcmljZQQBawkBBWJtdWxkAgUBcQUBYgQEbmV3QgkAtwICBQFiBQJzegQEbmV3UQkBBWJkaXZkAgUBawUEbmV3QgQBegkBBWJkaXZkAgUEbmV3UQUEbmV3QgQGcmVzdWx0CQEFYmRpdmQCBQFwBQF6CQCgAwEFBnJlc3VsdAEUZ2V0U3luY1Rlcm1pbmFsUHJpY2UDDl90ZXJtaW5hbFByaWNlB19xdEFzdFIHX2JzQXN0UgQNX3Bvc2l0aW9uU2l6ZQkBEXRvdGFsUG9zaXRpb25TaXplAAMJAAACBQ1fcG9zaXRpb25TaXplAAAECW5ld1F0QXN0VwkBBGRpdmQCCQEEbXVsZAIFDl90ZXJtaW5hbFByaWNlBQdfYnNBc3RSBQdfcXRBc3RSCQCVCgMFCW5ld1F0QXN0VwUMREVDSU1BTF9VTklUAAAECWRpcmVjdGlvbgkAZgIFDV9wb3NpdGlvblNpemUAAAQVY3VycmVudE5ldE1hcmtldFZhbHVlCAkBCnN3YXBPdXRwdXQDBQlkaXJlY3Rpb24JAQNhYnMBBQ1fcG9zaXRpb25TaXplBwJfMQQJbmV3UXRBc3RXCQETZ2V0UXVvdGVBc3NldFdlaWdodAQFB19ic0FzdFIFDV9wb3NpdGlvblNpemUFB19xdEFzdFIFDl90ZXJtaW5hbFByaWNlBAluZXdCc0FzdFcFDERFQ0lNQUxfVU5JVAQNbWFyZ2luVG9WYXVsdAgJAStnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubEJ5VmFsdWVzBwUNX3Bvc2l0aW9uU2l6ZQUVY3VycmVudE5ldE1hcmtldFZhbHVlBQdfcXRBc3RSBQluZXdRdEFzdFcFB19ic0FzdFIFCW5ld0JzQXN0VwUPUE5MX09QVElPTl9TUE9UAl8yCQCVCgMFCW5ld1F0QXN0VwUJbmV3QnNBc3RXBQ1tYXJnaW5Ub1ZhdWx0AQpnZXRGdW5kaW5nAAQPdW5kZXJseWluZ1ByaWNlCQEOZ2V0T3JhY2xlUHJpY2UABAlzcG90UHJpY2UJAQxnZXRTcG90UHJpY2UABAdwcmVtaXVtCQBlAgUJc3BvdFByaWNlBQ91bmRlcmx5aW5nUHJpY2UDAwMJAAACCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAAAAYJAAACCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAAABgkBDmlzTWFya2V0Q2xvc2VkAAkAlQoDAAAAAAAAAwkAZgIAAAUHcHJlbWl1bQQUc2hvcnRQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgkBBG11bGQCBQdwcmVtaXVtCQEUZnVuZGluZ1BlcmlvZERlY2ltYWwABQdPTkVfREFZAwkAAAIJAQtmdW5kaW5nTW9kZQAFEkZVTkRJTkdfQVNZTU1FVFJJQwQTbG9uZ1ByZW1pdW1GcmFjdGlvbgkBBGRpdmQCCQEEbXVsZAIFFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAJARV0b3RhbExvbmdQb3NpdGlvblNpemUACQCVCgMFFHNob3J0UHJlbWl1bUZyYWN0aW9uBRNsb25nUHJlbWl1bUZyYWN0aW9uAAAEGXNob3J0VG90YWxQcmVtaXVtRnJhY3Rpb24JAQNhYnMBCQEEbXVsZAIFFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAEGGxvbmdUb3RhbFByZW1pdW1GcmFjdGlvbgkBA2FicwEJAQRtdWxkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24JARV0b3RhbExvbmdQb3NpdGlvblNpemUABA5wcmVtaXVtVG9WYXVsdAkAZQIFGXNob3J0VG90YWxQcmVtaXVtRnJhY3Rpb24FGGxvbmdUb3RhbFByZW1pdW1GcmFjdGlvbgkAlQoDBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FDnByZW1pdW1Ub1ZhdWx0BBNsb25nUHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIJAQRtdWxkAgUHcHJlbWl1bQkBFGZ1bmRpbmdQZXJpb2REZWNpbWFsAAUHT05FX0RBWQMJAAACCQELZnVuZGluZ01vZGUABRJGVU5ESU5HX0FTWU1NRVRSSUMEFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIJAQRtdWxkAgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAkAlQoDBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgAABBhsb25nVG90YWxQcmVtaXVtRnJhY3Rpb24JAQNhYnMBCQEEbXVsZAIFE2xvbmdQcmVtaXVtRnJhY3Rpb24JARV0b3RhbExvbmdQb3NpdGlvblNpemUABBlzaG9ydFRvdGFsUHJlbWl1bUZyYWN0aW9uCQEDYWJzAQkBBG11bGQCBRNsb25nUHJlbWl1bUZyYWN0aW9uCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAEDnByZW1pdW1Ub1ZhdWx0CQBlAgUYbG9uZ1RvdGFsUHJlbWl1bUZyYWN0aW9uBRlzaG9ydFRvdGFsUHJlbWl1bUZyYWN0aW9uCQCVCgMFE2xvbmdQcmVtaXVtRnJhY3Rpb24FE2xvbmdQcmVtaXVtRnJhY3Rpb24FDnByZW1pdW1Ub1ZhdWx0AQ5nZXRBZGp1c3RlZEZlZQILX2FydGlmYWN0SWQQX2Jhc2VGZWVEaXNjb3VudAQKYmFzZUZlZVJhdwkBA2ZlZQAEB2Jhc2VGZWUJAQRtdWxkAgUKYmFzZUZlZVJhdwUQX2Jhc2VGZWVEaXNjb3VudAQNJHQwNDE5MTM0MjQwOAMJAQIhPQIFC19hcnRpZmFjdElkAgAEDGFydGlmYWN0S2luZAkBBHN0ckECCQERbmZ0TWFuYWdlckFkZHJlc3MACQEOdG9Db21wb3NpdGVLZXkCBQxrX3Rva2VuX3R5cGUFC19hcnRpZmFjdElkAwkAAAIFDGFydGlmYWN0S2luZAUYRkVFX1JFRFVDVElPTl9UT0tFTl9UWVBFBAlyZWR1Y3Rpb24JAQRpbnRBAgkBEW5mdE1hbmFnZXJBZGRyZXNzAAkBDnRvQ29tcG9zaXRlS2V5AgUNa190b2tlbl9wYXJhbQULX2FydGlmYWN0SWQEC2FkanVzdGVkRmVlCQEEbXVsZAIFB2Jhc2VGZWUFCXJlZHVjdGlvbgkAlAoCBQthZGp1c3RlZEZlZQYJAAIBAhlJbnZhbGlkIGF0dGFjaGVkIGFydGlmYWN0CQCUCgIFB2Jhc2VGZWUHBAthZGp1c3RlZEZlZQgFDSR0MDQxOTEzNDI0MDgCXzEEDGJ1cm5BcnRpZmFjdAgFDSR0MDQxOTEzNDI0MDgCXzIJAJQKAgULYWRqdXN0ZWRGZWUFDGJ1cm5BcnRpZmFjdAEYZ2V0Rm9yVHJhZGVyV2l0aEFydGlmYWN0AgdfdHJhZGVyC19hcnRpZmFjdElkBBBkb0dldEZlZURpc2NvdW50CQD8BwQJAQxtaW5lckFkZHJlc3MAAhJjb21wdXRlRmVlRGlzY291bnQJAMwIAgUHX3RyYWRlcgUDbmlsBQNuaWwDCQAAAgUQZG9HZXRGZWVEaXNjb3VudAUQZG9HZXRGZWVEaXNjb3VudAQLZmVlRGlzY291bnQEByRtYXRjaDAFEGRvR2V0RmVlRGlzY291bnQDCQABAgUHJG1hdGNoMAIDSW50BAF4BQckbWF0Y2gwBQF4CQACAQIhSW52YWxpZCBjb21wdXRlRmVlRGlzY291bnQgcmVzdWx0BA0kdDA0Mjc1NDQyODI4CQEOZ2V0QWRqdXN0ZWRGZWUCBQtfYXJ0aWZhY3RJZAULZmVlRGlzY291bnQEC2FkanVzdGVkRmVlCAUNJHQwNDI3NTQ0MjgyOAJfMQQMYnVybkFydGlmYWN0CAUNJHQwNDI3NTQ0MjgyOAJfMgkAlAoCBQthZGp1c3RlZEZlZQUMYnVybkFydGlmYWN0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ1nZXRBcnRpZmFjdElkAQFpBAphcnRpZmFjdElkAwkAZgIJAJADAQgFAWkIcGF5bWVudHMAAQkA2AQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIICQCRAwIIBQFpCHBheW1lbnRzAAEHYXNzZXRJZAISSW52YWxpZCBhcnRpZmFjdElkAgAFCmFydGlmYWN0SWQBDWRpc3RyaWJ1dGVGZWUBCl9mZWVBbW91bnQEDGZlZVRvU3Rha2VycwkBBG11bGQCBQpfZmVlQW1vdW50CQETZmVlVG9TdGFrZXJzUGVyY2VudAAECmZlZVRvVmF1bHQJAGUCBQpfZmVlQW1vdW50BQxmZWVUb1N0YWtlcnMJAJQKAgUMZmVlVG9TdGFrZXJzBQpmZWVUb1ZhdWx0AQ51cGRhdGVTZXR0aW5ncw4QX2luaXRNYXJnaW5SYXRpbwRfbW1yFF9saXF1aWRhdGlvbkZlZVJhdGlvDl9mdW5kaW5nUGVyaW9kBF9mZWUMX3NwcmVhZExpbWl0D19tYXhQcmljZUltcGFjdBhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8PX21heFByaWNlU3ByZWFkEF9tYXhPcGVuTm90aW9uYWwUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQPX21heE9yYWNsZURlbGF5DF9yb2xsb3ZlckZlZQxfZnVuZGluZ01vZGUJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtfaW5pdE1hcmdpblJhdGlvBRBfaW5pdE1hcmdpblJhdGlvCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRhrX21haW50ZW5hbmNlTWFyZ2luUmF0aW8FBF9tbXIJAMwIAgkBDEludGVnZXJFbnRyeQIFFWtfbGlxdWlkYXRpb25GZWVSYXRpbwUUX2xpcXVpZGF0aW9uRmVlUmF0aW8JAMwIAgkBDEludGVnZXJFbnRyeQIFD2tfZnVuZGluZ1BlcmlvZAUOX2Z1bmRpbmdQZXJpb2QJAMwIAgkBDEludGVnZXJFbnRyeQIFBWtfZmVlBQRfZmVlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rX3NwcmVhZExpbWl0BQxfc3ByZWFkTGltaXQJAMwIAgkBDEludGVnZXJFbnRyeQIFEGtfbWF4UHJpY2VJbXBhY3QFD19tYXhQcmljZUltcGFjdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUZa19wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwUYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrX21heFByaWNlU3ByZWFkBQ9fbWF4UHJpY2VTcHJlYWQJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtfbWF4T3Blbk5vdGlvbmFsBRBfbWF4T3Blbk5vdGlvbmFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRVrX2ZlZVRvU3Rha2Vyc1BlcmNlbnQFFF9mZWVUb1N0YWtlcnNQZXJjZW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrX21heE9yYWNsZURlbGF5BRRfZmVlVG9TdGFrZXJzUGVyY2VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa19yb2xsb3ZlckZlZQUMX3JvbGxvdmVyRmVlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rX2Z1bmRpbmdNb2RlBQxfZnVuZGluZ01vZGUFA25pbAENdXBkYXRlRnVuZGluZwURX25leHRGdW5kaW5nQmxvY2skX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uJV9sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24QX2xvbmdGdW5kaW5nUmF0ZRFfc2hvcnRGdW5kaW5nUmF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19uZXh0RnVuZGluZ0Jsb2NrBRFfbmV4dEZ1bmRpbmdCbG9jawkAzAgCCQEMSW50ZWdlckVudHJ5AgUla19sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUkX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCBSZrX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUlX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgURa19sb25nRnVuZGluZ1JhdGUFEF9sb25nRnVuZGluZ1JhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfc2hvcnRGdW5kaW5nUmF0ZQURX3Nob3J0RnVuZGluZ1JhdGUFA25pbAEfaW5jcmVtZW50UG9zaXRpb25TZXF1ZW5jZU51bWJlcgMOX2lzTmV3UG9zaXRpb24HX3RyYWRlcgpfZGlyZWN0aW9uBAtwb3NpdGlvbktleQkArAICCQCsAgIFB190cmFkZXICAV8JAKQDAQUKX2RpcmVjdGlvbgMFDl9pc05ld1Bvc2l0aW9uBA9jdXJyZW50U2VxdWVuY2UJAQxsYXN0U2VxdWVuY2UACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRJrX3Bvc2l0aW9uU2VxdWVuY2UFC3Bvc2l0aW9uS2V5CQBkAgUPY3VycmVudFNlcXVlbmNlAAEJAMwIAgkBDEludGVnZXJFbnRyeQIFCmtfc2VxdWVuY2UJAGQCBQ9jdXJyZW50U2VxdWVuY2UAAQUDbmlsBQNuaWwBEXVwZGF0ZVBvc2l0aW9uRmVlBA5faXNOZXdQb3NpdGlvbgdfdHJhZGVyCl9kaXJlY3Rpb24EX2ZlZQQLcG9zaXRpb25LZXkJAKwCAgkArAICBQdfdHJhZGVyAgFfCQCkAwEFCl9kaXJlY3Rpb24DBQ5faXNOZXdQb3NpdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUNa19wb3NpdGlvbkZlZQULcG9zaXRpb25LZXkFBF9mZWUFA25pbAUDbmlsAQ51cGRhdGVQb3NpdGlvbgYHX3RyYWRlcgVfc2l6ZQdfbWFyZ2luDV9vcGVuTm90aW9uYWwgX2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24QX2xhdGVzdFRpbWVzdGFtcAQJZGlyZWN0aW9uCQEMZ2V0RGlyZWN0aW9uAQUFX3NpemUEC3Bvc2l0aW9uS2V5CQCsAgIJAKwCAgUHX3RyYWRlcgIBXwkApAMBBQlkaXJlY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFDmtfcG9zaXRpb25TaXplBQtwb3NpdGlvbktleQUFX3NpemUJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFEGtfcG9zaXRpb25NYXJnaW4FC3Bvc2l0aW9uS2V5BQdfbWFyZ2luCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQtwb3NpdGlvbktleQUNX29wZW5Ob3Rpb25hbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgULcG9zaXRpb25LZXkFIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBR5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXAFC3Bvc2l0aW9uS2V5BRBfbGF0ZXN0VGltZXN0YW1wBQNuaWwBEXVwZGF0ZUFtbVJlc2VydmVzAgdfcXRBc3RSB19ic0FzdFIJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tfcXVvdGVBc3NldFJlc2VydmUFB19xdEFzdFIJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfYmFzZUFzc2V0UmVzZXJ2ZQUHX2JzQXN0UgUDbmlsARB1cGRhdGVBbW1XZWlnaHRzAgdfcXRBc3RXB19ic0FzdFcJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfcXVvdGVBc3NldFdlaWdodAUHX3F0QXN0VwkAzAgCCQEMSW50ZWdlckVudHJ5AgURa19iYXNlQXNzZXRXZWlnaHQFB19ic0FzdFcFA25pbAEJdXBkYXRlQW1tCAdfcXRBc3RSB19ic0FzdFIXX3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIVX29wZW5JbnRlcmVzdE5vdGlvbmFsFl90b3RhbExvbmdQb3NpdGlvblNpemUXX3RvdGFsU2hvcnRQb3NpdGlvblNpemUWX3RvdGFsTG9uZ09wZW5Ob3Rpb25hbBdfdG90YWxTaG9ydE9wZW5Ob3Rpb25hbAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcAAwkBAiE9AgkAZQIFFl90b3RhbExvbmdQb3NpdGlvblNpemUFF190b3RhbFNob3J0UG9zaXRpb25TaXplBRdfdG90YWxQb3NpdGlvblNpemVBZnRlcgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhhJbnZhbGlkIEFNTSBzdGF0ZSBkYXRhOiAJAKQDAQUWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQIEICsgIAkApAMBBRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQIEICE9IAkApAMBBRdfdG90YWxQb3NpdGlvblNpemVBZnRlcgkAzggCCQERdXBkYXRlQW1tUmVzZXJ2ZXMCBQdfcXRBc3RSBQdfYnNBc3RSCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrX3RvdGFsUG9zaXRpb25TaXplBRdfdG90YWxQb3NpdGlvblNpemVBZnRlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgUWa19vcGVuSW50ZXJlc3ROb3Rpb25hbAUVX29wZW5JbnRlcmVzdE5vdGlvbmFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRdrX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQUWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUYa190b3RhbFNob3J0UG9zaXRpb25TaXplBRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19vcGVuSW50ZXJlc3RMb25nBRZfdG90YWxMb25nT3Blbk5vdGlvbmFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrX29wZW5JbnRlcmVzdFNob3J0BRdfdG90YWxTaG9ydE9wZW5Ob3Rpb25hbAUDbmlsAQ5kZWxldGVQb3NpdGlvbgIHX3RyYWRlcgpfZGlyZWN0aW9uBAtwb3NpdGlvbktleQkArAICCQCsAgIFB190cmFkZXICAV8JAKQDAQUKX2RpcmVjdGlvbgkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBQ5rX3Bvc2l0aW9uU2l6ZQULcG9zaXRpb25LZXkJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUQa19wb3NpdGlvbk1hcmdpbgULcG9zaXRpb25LZXkJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAULcG9zaXRpb25LZXkJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgULcG9zaXRpb25LZXkJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUNa19wb3NpdGlvbkZlZQULcG9zaXRpb25LZXkJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUea19wb3NpdGlvbkxhc3RVcGRhdGVkVGltZXN0YW1wBQtwb3NpdGlvbktleQUDbmlsAQh3aXRoZHJhdwIIX2FkZHJlc3MHX2Ftb3VudAQHYmFsYW5jZQkA8AcCBQR0aGlzCQEKcXVvdGVBc3NldAADCQBmAgUHX2Ftb3VudAUHYmFsYW5jZQkAAgEJAKwCAgkArAICCQCsAgICE1VuYWJsZSB0byB3aXRoZHJhdyAJAKQDAQUHX2Ftb3VudAIXIGZyb20gY29udHJhY3QgYmFsYW5jZSAJAKQDAQUHYmFsYW5jZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQhfYWRkcmVzcwUHX2Ftb3VudAkBCnF1b3RlQXNzZXQABQNuaWwBDXVwZGF0ZUJhbGFuY2UBAWkDCQBmAgAABQFpCQACAQIHQmFsYW5jZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa19iYWxhbmNlBQFpBQNuaWwBC3RyYW5zZmVyRmVlAQFpCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQ5zdGFraW5nQWRkcmVzcwAFAWkJAQpxdW90ZUFzc2V0AAUDbmlsAQ5kb0J1cm5BcnRpZmFjdAINX2J1cm5BcnRpZmFjdAFpAwUNX2J1cm5BcnRpZmFjdAkAzAgCCQEEQnVybgIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggJAJEDAggFAWkIcGF5bWVudHMAAQdhc3NldElkAhBJbnZhbGlkIGFydGlmYWN0AAEFA25pbAUDbmlsFwFpAQVwYXVzZQADCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIUSW52YWxpZCBwYXVzZSBwYXJhbXMJAMwIAgkBDEJvb2xlYW5FbnRyeQIFCGtfcGF1c2VkBgUDbmlsAWkBB3VucGF1c2UAAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECFkludmFsaWQgdW5wYXVzZSBwYXJhbXMJAMwIAgkBDEJvb2xlYW5FbnRyeQIFCGtfcGF1c2VkBwUDbmlsAWkBDHNldENsb3NlT25seQADCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIbSW52YWxpZCBzZXRDbG9zZU9ubHkgcGFyYW1zCQDMCAIJAQxCb29sZWFuRW50cnkCBQtrX2Nsb3NlT25seQYFA25pbAFpAQ51bnNldENsb3NlT25seQADCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIdSW52YWxpZCB1bnNldENsb3NlT25seSBwYXJhbXMJAMwIAgkBDEJvb2xlYW5FbnRyeQIFC2tfY2xvc2VPbmx5BwUDbmlsAWkBDGFkZExpcXVpZGl0eQERX3F1b3RlQXNzZXRBbW91bnQDAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAYJAGcCAAAFEV9xdW90ZUFzc2V0QW1vdW50CQACAQIbSW52YWxpZCBhZGRMaXF1aWRpdHkgcGFyYW1zBAdfcXRBc3RSCQEGcXRBc3RSAAQHX2JzQXN0UgkBBmJzQXN0UgAEB19xdEFzdFcJAQZxdEFzdFcABAdfYnNBc3RXCQEGYnNBc3RXAAQFcHJpY2UJAQRkaXZkAgkBBG11bGQCBQdfcXRBc3RSBQdfcXRBc3RXCQEEbXVsZAIFB19ic0FzdFIFB19ic0FzdFcEC3F0QXN0UkFmdGVyCQBkAgUHX3F0QXN0UgURX3F1b3RlQXNzZXRBbW91bnQEFGJhc2VBc3NldEFtb3VudFRvQWRkCQBlAgkBBGRpdmQCCQEEbXVsZAIFC3F0QXN0UkFmdGVyBQdfcXRBc3RXBQVwcmljZQUHX2JzQXN0UgQLYnNBc3RSQWZ0ZXIJAGQCBQdfYnNBc3RSBRRiYXNlQXNzZXRBbW91bnRUb0FkZAQNJHQwNTEwODM1MTIzNAkBFGdldFN5bmNUZXJtaW5hbFByaWNlAwkBDmdldE9yYWNsZVByaWNlAAULcXRBc3RSQWZ0ZXIFC2JzQXN0UkFmdGVyBBNuZXdRdW90ZUFzc2V0V2VpZ2h0CAUNJHQwNTEwODM1MTIzNAJfMQQSbmV3QmFzZUFzc2V0V2VpZ2h0CAUNJHQwNTEwODM1MTIzNAJfMgQNbWFyZ2luVG9WYXVsdAgFDSR0MDUxMDgzNTEyMzQCXzMEDWRvRXhjaGFuZ2VQbkwDCQECIT0CBQ1tYXJnaW5Ub1ZhdWx0AAAEDWRvRXhjaGFuZ2VQbkwJAPwHBAkBDHZhdWx0QWRkcmVzcwACFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAkAzAgCBQ1tYXJnaW5Ub1ZhdWx0BQNuaWwFA25pbAMJAAACBQ1kb0V4Y2hhbmdlUG5MBQ1kb0V4Y2hhbmdlUG5MBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQ1kb0V4Y2hhbmdlUG5MBQ1kb0V4Y2hhbmdlUG5MCQDOCAIJARF1cGRhdGVBbW1SZXNlcnZlcwIFC3F0QXN0UkFmdGVyBQtic0FzdFJBZnRlcgkBEHVwZGF0ZUFtbVdlaWdodHMCBRNuZXdRdW90ZUFzc2V0V2VpZ2h0BRJuZXdCYXNlQXNzZXRXZWlnaHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEPcmVtb3ZlTGlxdWlkaXR5ARFfcXVvdGVBc3NldEFtb3VudAMDCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MABgkAZwIFEV9xdW90ZUFzc2V0QW1vdW50AAAJAAIBAh5JbnZhbGlkIHJlbW92ZUxpcXVpZGl0eSBwYXJhbXMEB19xdEFzdFIJAQZxdEFzdFIABAdfYnNBc3RSCQEGYnNBc3RSAAQHX3F0QXN0VwkBBnF0QXN0VwAEB19ic0FzdFcJAQZic0FzdFcABAVwcmljZQkBBGRpdmQCCQEEbXVsZAIFB19xdEFzdFIFB19xdEFzdFcJAQRtdWxkAgUHX2JzQXN0UgUHX2JzQXN0VwQLcXRBc3RSQWZ0ZXIJAGUCBQdfcXRBc3RSBRFfcXVvdGVBc3NldEFtb3VudAQXYmFzZUFzc2V0QW1vdW50VG9SZW1vdmUJAQNhYnMBCQBlAgkBBGRpdmQCCQEEbXVsZAIFC3F0QXN0UkFmdGVyBQdfcXRBc3RXBQVwcmljZQUHX2JzQXN0UgQLYnNBc3RSQWZ0ZXIJAGUCBQdfYnNBc3RSBRdiYXNlQXNzZXRBbW91bnRUb1JlbW92ZQQNJHQwNTIzMzA1MjQ4MQkBFGdldFN5bmNUZXJtaW5hbFByaWNlAwkBDmdldE9yYWNsZVByaWNlAAULcXRBc3RSQWZ0ZXIFC2JzQXN0UkFmdGVyBBNuZXdRdW90ZUFzc2V0V2VpZ2h0CAUNJHQwNTIzMzA1MjQ4MQJfMQQSbmV3QmFzZUFzc2V0V2VpZ2h0CAUNJHQwNTIzMzA1MjQ4MQJfMgQNbWFyZ2luVG9WYXVsdAgFDSR0MDUyMzMwNTI0ODECXzMEDWRvRXhjaGFuZ2VQbkwDCQECIT0CBQ1tYXJnaW5Ub1ZhdWx0AAAEDWRvRXhjaGFuZ2VQbkwJAPwHBAkBDHZhdWx0QWRkcmVzcwACFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAkAzAgCBQ1tYXJnaW5Ub1ZhdWx0BQNuaWwFA25pbAMJAAACBQ1kb0V4Y2hhbmdlUG5MBQ1kb0V4Y2hhbmdlUG5MBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQ1kb0V4Y2hhbmdlUG5MBQ1kb0V4Y2hhbmdlUG5MCQDOCAIJARF1cGRhdGVBbW1SZXNlcnZlcwIFC3F0QXN0UkFmdGVyBQtic0FzdFJBZnRlcgkBEHVwZGF0ZUFtbVdlaWdodHMCBRNuZXdRdW90ZUFzc2V0V2VpZ2h0BRJuZXdCYXNlQXNzZXRXZWlnaHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEOY2hhbmdlU2V0dGluZ3MOEF9pbml0TWFyZ2luUmF0aW8EX21tchRfbGlxdWlkYXRpb25GZWVSYXRpbw5fZnVuZGluZ1BlcmlvZARfZmVlDF9zcHJlYWRMaW1pdA9fbWF4UHJpY2VJbXBhY3QYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvD19tYXhQcmljZVNwcmVhZBBfbWF4T3Blbk5vdGlvbmFsFF9mZWVUb1N0YWtlcnNQZXJjZW50D19tYXhPcmFjbGVEZWxheQxfcm9sbG92ZXJGZWUMX2Z1bmRpbmdNb2RlAwMDAwMDAwMDAwMDAwMDAwMJAGcCAAAFDl9mdW5kaW5nUGVyaW9kBgkAZwIAAAUQX2luaXRNYXJnaW5SYXRpbwYJAGcCAAAFBF9tbXIGCQBnAgAABRRfbGlxdWlkYXRpb25GZWVSYXRpbwYJAGcCAAAFBF9mZWUGCQBnAgAABQxfc3ByZWFkTGltaXQGCQBnAgAABQ9fbWF4UHJpY2VJbXBhY3QGCQBnAgAABRhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8GCQBnAgAABQ9fbWF4UHJpY2VTcHJlYWQGCQBnAgAABRBfbWF4T3Blbk5vdGlvbmFsBgkAZwIAAAUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQGCQBmAgUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQFDERFQ0lNQUxfVU5JVAYJAGcCAAAFD19tYXhPcmFjbGVEZWxheQYJAGcCAAAFDF9yb2xsb3ZlckZlZQYDCQECIT0CBQxfZnVuZGluZ01vZGUFEUZVTkRJTkdfU1lNTUVUUklDCQECIT0CBQxfZnVuZGluZ01vZGUFEkZVTkRJTkdfQVNZTU1FVFJJQwcGCQEBIQEJAQtpbml0aWFsaXplZAAGCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIdSW52YWxpZCBjaGFuZ2VTZXR0aW5ncyBwYXJhbXMJAQ51cGRhdGVTZXR0aW5ncw4FEF9pbml0TWFyZ2luUmF0aW8FBF9tbXIFFF9saXF1aWRhdGlvbkZlZVJhdGlvBQ5fZnVuZGluZ1BlcmlvZAUEX2ZlZQUMX3NwcmVhZExpbWl0BQ9fbWF4UHJpY2VJbXBhY3QFGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwUPX21heFByaWNlU3ByZWFkBRBfbWF4T3Blbk5vdGlvbmFsBRRfZmVlVG9TdGFrZXJzUGVyY2VudAUPX21heE9yYWNsZURlbGF5BQxfcm9sbG92ZXJGZWUFDF9mdW5kaW5nTW9kZQFpAQppbml0aWFsaXplEwdfcXRBc3RSB19ic0FzdFIOX2Z1bmRpbmdQZXJpb2QQX2luaXRNYXJnaW5SYXRpbwRfbW1yFF9saXF1aWRhdGlvbkZlZVJhdGlvBF9mZWUPX2Jhc2VPcmFjbGVEYXRhEF9xdW90ZU9yYWNsZURhdGEMX2Nvb3JkaW5hdG9yDF9zcHJlYWRMaW1pdA9fbWF4UHJpY2VJbXBhY3QYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvD19tYXhQcmljZVNwcmVhZBBfbWF4T3Blbk5vdGlvbmFsFF9mZWVUb1N0YWtlcnNQZXJjZW50D19tYXhPcmFjbGVEZWxheQxfcm9sbG92ZXJGZWUMX2Z1bmRpbmdNb2RlAwMDAwMDAwMDAwMDAwMDAwMDAwkAZwIAAAUHX3F0QXN0UgYJAGcCAAAFB19ic0FzdFIGCQBnAgAABQ5fZnVuZGluZ1BlcmlvZAYJAGcCAAAFEF9pbml0TWFyZ2luUmF0aW8GCQBnAgAABQRfbW1yBgkAZwIAAAUUX2xpcXVpZGF0aW9uRmVlUmF0aW8GCQBnAgAABQRfZmVlBgkAZwIAAAUMX3NwcmVhZExpbWl0BgkAZwIAAAUPX21heFByaWNlSW1wYWN0BgkAZwIAAAUYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvBgkAZwIAAAUPX21heFByaWNlU3ByZWFkBgkAZwIAAAUQX21heE9wZW5Ob3Rpb25hbAYJAGcCAAAFFF9mZWVUb1N0YWtlcnNQZXJjZW50BgkAZgIFFF9mZWVUb1N0YWtlcnNQZXJjZW50BQxERUNJTUFMX1VOSVQGCQBnAgAABQ9fbWF4T3JhY2xlRGVsYXkGCQBnAgAABQxfcm9sbG92ZXJGZWUGAwkBAiE9AgUMX2Z1bmRpbmdNb2RlBRFGVU5ESU5HX1NZTU1FVFJJQwkBAiE9AgUMX2Z1bmRpbmdNb2RlBRJGVU5ESU5HX0FTWU1NRVRSSUMHBgkBC2luaXRpYWxpemVkAAYJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHUludmFsaWQgaW5pdGlhbGl6ZSBwYXJhbWV0ZXJzCQDOCAIJAM4IAgkAzggCCQDOCAIJAQl1cGRhdGVBbW0IBQdfcXRBc3RSBQdfYnNBc3RSAAAAAAAAAAAAAAAACQEOdXBkYXRlU2V0dGluZ3MOBRBfaW5pdE1hcmdpblJhdGlvBQRfbW1yBRRfbGlxdWlkYXRpb25GZWVSYXRpbwUOX2Z1bmRpbmdQZXJpb2QFBF9mZWUFDF9zcHJlYWRMaW1pdAUPX21heFByaWNlSW1wYWN0BRhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8FD19tYXhQcmljZVNwcmVhZAUQX21heE9wZW5Ob3Rpb25hbAUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQFD19tYXhPcmFjbGVEZWxheQUMX3JvbGxvdmVyRmVlBQxfZnVuZGluZ01vZGUJAQ11cGRhdGVGdW5kaW5nBQkAZAIJAQ1sYXN0VGltZXN0YW1wAAUOX2Z1bmRpbmdQZXJpb2QAAAAAAAAAAAkBDXVwZGF0ZUJhbGFuY2UBAAAJAMwIAgkBDEJvb2xlYW5FbnRyeQIFDWtfaW5pdGlhbGl6ZWQGCQDMCAIJAQtTdHJpbmdFbnRyeQIFDGtfYmFzZU9yYWNsZQUPX2Jhc2VPcmFjbGVEYXRhCQDMCAIJAQtTdHJpbmdFbnRyeQIFDWtfcXVvdGVPcmFjbGUFEF9xdW90ZU9yYWNsZURhdGEJAMwIAgkBC1N0cmluZ0VudHJ5AgUUa19jb29yZGluYXRvckFkZHJlc3MJAKUIAQkBEUBleHRyTmF0aXZlKDEwNjIpAQUMX2Nvb3JkaW5hdG9yBQNuaWwBaQEQaW5jcmVhc2VQb3NpdGlvbgQKX2RpcmVjdGlvbglfbGV2ZXJhZ2UTX21pbkJhc2VBc3NldEFtb3VudAhfcmVmTGluawQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBBBlbnN1cmVDYWxsZWRPbmNlCQD8BwQFBHRoaXMCEGVuc3VyZUNhbGxlZE9uY2UFA25pbAUDbmlsAwkAAAIFEGVuc3VyZUNhbGxlZE9uY2UFEGVuc3VyZUNhbGxlZE9uY2UEB190cmFkZXIJAQ9nZXRBY3R1YWxDYWxsZXIBBQFpBApfcmF3QW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQIX2Fzc2V0SWQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQLX2Fzc2V0SWRTdHIJANgEAQkBBXZhbHVlAQUIX2Fzc2V0SWQEDGlzUXVvdGVBc3NldAkAAAIFCF9hc3NldElkCQEKcXVvdGVBc3NldAADAwMDAwMDAwMJAQIhPQIFCl9kaXJlY3Rpb24FCERJUl9MT05HCQECIT0CBQpfZGlyZWN0aW9uBQlESVJfU0hPUlQHBgkAZwIAAAUKX3Jhd0Ftb3VudAYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQEhAQUMaXNRdW90ZUFzc2V0BgkBASEBCQEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMJAQRkaXZkAgUMREVDSU1BTF9VTklUBQlfbGV2ZXJhZ2UJAQ9pbml0TWFyZ2luUmF0aW8ABgYJAQZwYXVzZWQABgkBCWNsb3NlT25seQAGCQEOaXNNYXJrZXRDbG9zZWQACQACAQIjSW52YWxpZCBpbmNyZWFzZVBvc2l0aW9uIHBhcmFtZXRlcnMEDSR0MDU4NTUxNTg3MDAJARhnZXRGb3JUcmFkZXJXaXRoQXJ0aWZhY3QCBQdfdHJhZGVyCQENZ2V0QXJ0aWZhY3RJZAEFAWkEC2FkanVzdGVkRmVlCAUNJHQwNTg1NTE1ODcwMAJfMQQMYnVybkFydGlmYWN0CAUNJHQwNTg1NTE1ODcwMAJfMgQHX2Ftb3VudAkBBGRpdmQCBQpfcmF3QW1vdW50CQBkAgkBBG11bGQCBQthZGp1c3RlZEZlZQUJX2xldmVyYWdlBQxERUNJTUFMX1VOSVQEE2Rpc3RyaWJ1dGVGZWVBbW91bnQJAGUCBQpfcmF3QW1vdW50BQdfYW1vdW50BA5yZWZlcnJlckZlZUFueQkA/AcECQEPcmVmZXJyYWxBZGRyZXNzAAIVYWNjZXB0UGF5bWVudFdpdGhMaW5rCQDMCAIFB190cmFkZXIJAMwIAgUIX3JlZkxpbmsFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABRNkaXN0cmlidXRlRmVlQW1vdW50BQNuaWwDCQAAAgUOcmVmZXJyZXJGZWVBbnkFDnJlZmVycmVyRmVlQW55BAtyZWZlcnJlckZlZQQHJG1hdGNoMAUOcmVmZXJyZXJGZWVBbnkDCQABAgUHJG1hdGNoMAIDSW50BAF4BQckbWF0Y2gwBQF4CQACAQITSW52YWxpZCByZWZlcnJlckZlZQQJZmVlQW1vdW50CQBlAgUTZGlzdHJpYnV0ZUZlZUFtb3VudAULcmVmZXJyZXJGZWUEDSR0MDU5MTk2NTkzNzYJAQtnZXRQb3NpdGlvbgIFB190cmFkZXIFCl9kaXJlY3Rpb24ED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDU5MTk2NTkzNzYCXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNTkxOTY1OTM3NgJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA1OTE5NjU5Mzc2Al8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDU5MTk2NTkzNzYCXzQEFG9sZFBvc2l0aW9uVGltZXN0YW1wCAUNJHQwNTkxOTY1OTM3NgJfNQQNaXNOZXdQb3NpdGlvbgkAAAIFD29sZFBvc2l0aW9uU2l6ZQAABA9pc1NhbWVEaXJlY3Rpb24DCQBmAgUPb2xkUG9zaXRpb25TaXplAAAJAAACBQpfZGlyZWN0aW9uBQhESVJfTE9ORwkAAAIFCl9kaXJlY3Rpb24FCURJUl9TSE9SVAQOZXhwYW5kRXhpc3RpbmcDCQEBIQEFDWlzTmV3UG9zaXRpb24FD2lzU2FtZURpcmVjdGlvbgcEBWlzQWRkCQAAAgUKX2RpcmVjdGlvbgUIRElSX0xPTkcEDSR0MDU5NjY1NjI3OTgDAwUNaXNOZXdQb3NpdGlvbgYFDmV4cGFuZEV4aXN0aW5nBAxvcGVuTm90aW9uYWwJAQRtdWxkAgUHX2Ftb3VudAUJX2xldmVyYWdlBA0kdDA2MDE3NDYwMzQ3CQEJc3dhcElucHV0AgUFaXNBZGQFDG9wZW5Ob3Rpb25hbAQVYW1vdW50QmFzZUFzc2V0Qm91Z2h0CAUNJHQwNjAxNzQ2MDM0NwJfMQQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDYwMTc0NjAzNDcCXzIEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDYwMTc0NjAzNDcCXzMEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA2MDE3NDYwMzQ3Al80AwMJAQIhPQIFE19taW5CYXNlQXNzZXRBbW91bnQAAAkAZgIFE19taW5CYXNlQXNzZXRBbW91bnQJAQNhYnMBBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQHCQACAQkArAICCQCsAgIJAKwCAgINTGltaXQgZXJyb3I6IAkApAMBCQEDYWJzAQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AgMgPCAJAKQDAQUTX21pbkJhc2VBc3NldEFtb3VudAQPbmV3UG9zaXRpb25TaXplCQBkAgUPb2xkUG9zaXRpb25TaXplBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQEGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyCQBkAgkBEG9wZW5JbnRlcmVzdExvbmcAAwkAZgIFD25ld1Bvc2l0aW9uU2l6ZQAABQxvcGVuTm90aW9uYWwAAAQbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCQBkAgkBEW9wZW5JbnRlcmVzdFNob3J0AAMJAGYCAAAFD25ld1Bvc2l0aW9uU2l6ZQUMb3Blbk5vdGlvbmFsAAAEDSR0MDYwODkzNjExNjgJATBjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50QW5kUm9sbG92ZXJGZWUFBQ9vbGRQb3NpdGlvblNpemUFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvbkxzdFVwZENQRgUUb2xkUG9zaXRpb25UaW1lc3RhbXAFB19hbW91bnQEDHJlbWFpbk1hcmdpbggFDSR0MDYwODkzNjExNjgCXzEEAngxCAUNJHQwNjA4OTM2MTE2OAJfMgQCeDIIBQ0kdDA2MDg5MzYxMTY4Al8zBAtyb2xsb3ZlckZlZQgFDSR0MDYwODkzNjExNjgCXzQDCQEBIQEJARlyZXF1aXJlTm90T3ZlclNwcmVhZExpbWl0AgUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCQACAQIVT3ZlciBtYXggc3ByZWFkIGxpbWl0AwkBASEBCQEdcmVxdWlyZU5vdE92ZXJNYXhPcGVuTm90aW9uYWwCBRp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgUbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCQACAQIWT3ZlciBtYXggb3BlbiBub3Rpb25hbAkAoAoOBQ9uZXdQb3NpdGlvblNpemUFDHJlbWFpbk1hcmdpbgkAZAIFF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsBQxvcGVuTm90aW9uYWwJAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUPbmV3UG9zaXRpb25TaXplCQENbGFzdFRpbWVzdGFtcAAFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgkAZAIJARRvcGVuSW50ZXJlc3ROb3Rpb25hbAAFDG9wZW5Ob3Rpb25hbAkAZAIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAwkAZgIFD25ld1Bvc2l0aW9uU2l6ZQAACQEDYWJzAQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AAAJAGQCCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQADCQBmAgAABQ9uZXdQb3NpdGlvblNpemUJAQNhYnMBBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQAAAUadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIFG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgULcm9sbG92ZXJGZWUEDG9wZW5Ob3Rpb25hbAkBBG11bGQCBQdfYW1vdW50BQlfbGV2ZXJhZ2UEDSR0MDYyNDg2NjI2MTQJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAMJAKUIAQgFAWkGY2FsbGVyBQpfZGlyZWN0aW9uBQ9QTkxfT1BUSU9OX1NQT1QEE29sZFBvc2l0aW9uTm90aW9uYWwIBQ0kdDA2MjQ4NjYyNjE0Al8xBA11bnJlYWxpemVkUG5sCAUNJHQwNjI0ODY2MjYxNAJfMgMJAGYCBRNvbGRQb3NpdGlvbk5vdGlvbmFsBQxvcGVuTm90aW9uYWwJAAIBAi5Vc2UgZGVjcmVhc2VQb3NpdGlvbiB0byBkZWNyZWFzZSBwb3NpdGlvbiBzaXplCQACAQIUQ2xvc2UgcG9zaXRpb24gZmlyc3QED25ld1Bvc2l0aW9uU2l6ZQgFDSR0MDU5NjY1NjI3OTgCXzEEF25ld1Bvc2l0aW9uUmVtYWluTWFyZ2luCAUNJHQwNTk2NjU2Mjc5OAJfMgQXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA1OTY2NTYyNzk4Al8zBBRuZXdQb3NpdGlvbkxhdGVzdENQRggFDSR0MDU5NjY1NjI3OTgCXzQEFG5ld1Bvc2l0aW9uVGltZXN0YW1wCAUNJHQwNTk2NjU2Mjc5OAJfNQQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwNTk2NjU2Mjc5OAJfNgQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDU5NjY1NjI3OTgCXzcEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA1OTY2NTYyNzk4Al84BBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCAUNJHQwNTk2NjU2Mjc5OAJfOQQOdG90YWxMb25nQWZ0ZXIIBQ0kdDA1OTY2NTYyNzk4A18xMAQPdG90YWxTaG9ydEFmdGVyCAUNJHQwNTk2NjU2Mjc5OANfMTEEGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNTk2NjU2Mjc5OANfMTIEG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcggFDSR0MDU5NjY1NjI3OTgDXzEzBAtyb2xsb3ZlckZlZQgFDSR0MDU5NjY1NjI3OTgDXzE0BA0kdDA2MjgwNDYyODc1CQENZGlzdHJpYnV0ZUZlZQEJAGQCBQlmZWVBbW91bnQFC3JvbGxvdmVyRmVlBAxmZWVUb1N0YWtlcnMIBQ0kdDA2MjgwNDYyODc1Al8xBApmZWVUb1ZhdWx0CAUNJHQwNjI4MDQ2Mjg3NQJfMgQFc3Rha2UDCQBnAgUHX2Ftb3VudAULcm9sbG92ZXJGZWUJAPwHBAkBDHZhdWx0QWRkcmVzcwACCWFkZExvY2tlZAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAJAGUCBQdfYW1vdW50BQtyb2xsb3ZlckZlZQUDbmlsCQD8BwQJAQx2YXVsdEFkZHJlc3MAAg53aXRoZHJhd0xvY2tlZAkAzAgCCQBlAgULcm9sbG92ZXJGZWUFB19hbW91bnQFA25pbAUDbmlsAwkAAAIFBXN0YWtlBQVzdGFrZQQMZGVwb3NpdFZhdWx0CQD8BwQJAQx2YXVsdEFkZHJlc3MAAgdhZGRGcmVlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUKZmVlVG9WYXVsdAUDbmlsAwkAAAIFDGRlcG9zaXRWYXVsdAUMZGVwb3NpdFZhdWx0BAlub3RpZnlGZWUJAPwHBAkBDG1pbmVyQWRkcmVzcwACCm5vdGlmeUZlZXMJAMwIAgUHX3RyYWRlcgkAzAgCBQlmZWVBbW91bnQFA25pbAUDbmlsAwkAAAIFCW5vdGlmeUZlZQUJbm90aWZ5RmVlBA5ub3RpZnlOb3Rpb25hbAkA/AcECQEMbWluZXJBZGRyZXNzAAIObm90aWZ5Tm90aW9uYWwJAMwIAgUHX3RyYWRlcgkAzAgCBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUDbmlsBQNuaWwDCQAAAgUObm90aWZ5Tm90aW9uYWwFDm5vdGlmeU5vdGlvbmFsCQDOCAIJAM4IAgkAzggCCQDOCAIJAM4IAgkAzggCCQEOdXBkYXRlUG9zaXRpb24GBQdfdHJhZGVyBQ9uZXdQb3NpdGlvblNpemUFF25ld1Bvc2l0aW9uUmVtYWluTWFyZ2luBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUbmV3UG9zaXRpb25MYXRlc3RDUEYFFG5ld1Bvc2l0aW9uVGltZXN0YW1wCQEfaW5jcmVtZW50UG9zaXRpb25TZXF1ZW5jZU51bWJlcgMFDWlzTmV3UG9zaXRpb24FB190cmFkZXIFCl9kaXJlY3Rpb24JARF1cGRhdGVQb3NpdGlvbkZlZQQFDWlzTmV3UG9zaXRpb24FB190cmFkZXIFCl9kaXJlY3Rpb24FC2FkanVzdGVkRmVlCQEJdXBkYXRlQW1tCAUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBQ50b3RhbExvbmdBZnRlcgUPdG90YWxTaG9ydEFmdGVyBRp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgUbdG90YWxTaG9ydE9wZW5JbnRlcmVzdEFmdGVyCQELdHJhbnNmZXJGZWUBBQxmZWVUb1N0YWtlcnMJAQ11cGRhdGVCYWxhbmNlAQkAZQIJAGQCCQEIY2JhbGFuY2UABQdfYW1vdW50BQtyb2xsb3ZlckZlZQkBDmRvQnVybkFydGlmYWN0AgUMYnVybkFydGlmYWN0BQFpCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCWFkZE1hcmdpbgEKX2RpcmVjdGlvbgQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBBBlbnN1cmVDYWxsZWRPbmNlCQD8BwQFBHRoaXMCEGVuc3VyZUNhbGxlZE9uY2UFA25pbAUDbmlsAwkAAAIFEGVuc3VyZUNhbGxlZE9uY2UFEGVuc3VyZUNhbGxlZE9uY2UEB190cmFkZXIJAKUIAQgFAWkGY2FsbGVyBAdfYW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQIX2Fzc2V0SWQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQLX2Fzc2V0SWRTdHIJANgEAQkBBXZhbHVlAQUIX2Fzc2V0SWQEDGlzUXVvdGVBc3NldAkAAAIFCF9hc3NldElkCQEKcXVvdGVBc3NldAADAwMDAwkBASEBBQxpc1F1b3RlQXNzZXQGCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAgkApQgBCAUBaQZjYWxsZXIFCl9kaXJlY3Rpb24GCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAYJAQ5pc01hcmtldENsb3NlZAAJAAIBAhxJbnZhbGlkIGFkZE1hcmdpbiBwYXJhbWV0ZXJzBA0kdDA2NTEyMjY1MzAyCQELZ2V0UG9zaXRpb24CBQdfdHJhZGVyBQpfZGlyZWN0aW9uBA9vbGRQb3NpdGlvblNpemUIBQ0kdDA2NTEyMjY1MzAyAl8xBBFvbGRQb3NpdGlvbk1hcmdpbggFDSR0MDY1MTIyNjUzMDICXzIEF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNjUxMjI2NTMwMgJfMwQUb2xkUG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA2NTEyMjY1MzAyAl80BBRvbGRQb3NpdGlvblRpbWVzdGFtcAgFDSR0MDY1MTIyNjUzMDICXzUEBXN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAglhZGRMb2NrZWQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQdfYW1vdW50BQNuaWwDCQAAAgUFc3Rha2UFBXN0YWtlBAtyb2xsb3ZlckZlZQkBD2NhbGNSb2xsb3ZlckZlZQIFEW9sZFBvc2l0aW9uTWFyZ2luBRRvbGRQb3NpdGlvblRpbWVzdGFtcAQWZG9UcmFuc2ZlckZlZVRvU3Rha2VycwMJAGYCBQtyb2xsb3ZlckZlZQAABA0kdDA2NTU4NzY1NjQ2CQENZGlzdHJpYnV0ZUZlZQEFC3JvbGxvdmVyRmVlBAxmZWVUb1N0YWtlcnMIBQ0kdDA2NTU4NzY1NjQ2Al8xBApmZWVUb1ZhdWx0CAUNJHQwNjU1ODc2NTY0NgJfMgQHdW5zdGFrZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIOd2l0aGRyYXdMb2NrZWQJAMwIAgUMZmVlVG9TdGFrZXJzBQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlBAtsb2NrQmFkRGVidAkA/AcECQEMdmF1bHRBZGRyZXNzAAIVZXhjaGFuZ2VGcmVlQW5kTG9ja2VkCQDMCAIJAQEtAQUKZmVlVG9WYXVsdAUDbmlsBQNuaWwDCQAAAgULbG9ja0JhZERlYnQFC2xvY2tCYWREZWJ0CQELdHJhbnNmZXJGZWUBBQxmZWVUb1N0YWtlcnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBRZkb1RyYW5zZmVyRmVlVG9TdGFrZXJzBRZkb1RyYW5zZmVyRmVlVG9TdGFrZXJzCQDOCAIJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBgUHX3RyYWRlcgUPb2xkUG9zaXRpb25TaXplCQBkAgkAZQIFEW9sZFBvc2l0aW9uTWFyZ2luBQtyb2xsb3ZlckZlZQUHX2Ftb3VudAUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwFFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCQENbGFzdFRpbWVzdGFtcAAJAQ11cGRhdGVCYWxhbmNlAQkAZQIJAGQCCQEIY2JhbGFuY2UABQdfYW1vdW50BQtyb2xsb3ZlckZlZQUWZG9UcmFuc2ZlckZlZVRvU3Rha2VycwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQxyZW1vdmVNYXJnaW4CB19hbW91bnQKX2RpcmVjdGlvbgQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBBBlbnN1cmVDYWxsZWRPbmNlCQD8BwQFBHRoaXMCEGVuc3VyZUNhbGxlZE9uY2UFA25pbAUDbmlsAwkAAAIFEGVuc3VyZUNhbGxlZE9uY2UFEGVuc3VyZUNhbGxlZE9uY2UEB190cmFkZXIJAKUIAQgFAWkGY2FsbGVyAwMDAwMJAGcCAAAFB19hbW91bnQGCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQABgkBDmlzTWFya2V0Q2xvc2VkAAkAAgECH0ludmFsaWQgcmVtb3ZlTWFyZ2luIHBhcmFtZXRlcnMEDSR0MDY3MDUwNjcyMzAJAQtnZXRQb3NpdGlvbgIFB190cmFkZXIFCl9kaXJlY3Rpb24ED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDY3MDUwNjcyMzACXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNjcwNTA2NzIzMAJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA2NzA1MDY3MjMwAl8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDY3MDUwNjcyMzACXzQEFG9sZFBvc2l0aW9uVGltZXN0YW1wCAUNJHQwNjcwNTA2NzIzMAJfNQQNJHQwNjcyMzY2NzQ4NQkBMGNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnRBbmRSb2xsb3ZlckZlZQUFD29sZFBvc2l0aW9uU2l6ZQURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBRRvbGRQb3NpdGlvblRpbWVzdGFtcAkBAS0BBQdfYW1vdW50BAxyZW1haW5NYXJnaW4IBQ0kdDA2NzIzNjY3NDg1Al8xBAdiYWREZWJ0CAUNJHQwNjcyMzY2NzQ4NQJfMgQOZnVuZGluZ1BheW1lbnQIBQ0kdDA2NzIzNjY3NDg1Al8zBAtyb2xsb3ZlckZlZQgFDSR0MDY3MjM2Njc0ODUCXzQDCQECIT0CBQdiYWREZWJ0AAAJAAIBAh1JbnZhbGlkIHJlbW92ZWQgbWFyZ2luIGFtb3VudAQLbWFyZ2luUmF0aW8JAQ9jYWxjTWFyZ2luUmF0aW8DBQxyZW1haW5NYXJnaW4FB2JhZERlYnQFF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsAwkBASEBCQEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMFC21hcmdpblJhdGlvCQEPaW5pdE1hcmdpblJhdGlvAAYJAAIBCQCsAgIJAKwCAgkArAICAhlUb28gbXVjaCBtYXJnaW4gcmVtb3ZlZDogCQCkAwEFC21hcmdpblJhdGlvAgMgPCAJAKQDAQkBD2luaXRNYXJnaW5SYXRpbwAEDSR0MDY3ODcxNjc5MzAJAQ1kaXN0cmlidXRlRmVlAQULcm9sbG92ZXJGZWUEDGZlZVRvU3Rha2VycwgFDSR0MDY3ODcxNjc5MzACXzEECmZlZVRvVmF1bHQIBQ0kdDA2Nzg3MTY3OTMwAl8yBBZkb1RyYW5zZmVyRmVlVG9TdGFrZXJzAwkAZgIFC3JvbGxvdmVyRmVlAAAEC2xvY2tCYWREZWJ0CQD8BwQJAQx2YXVsdEFkZHJlc3MAAhVleGNoYW5nZUZyZWVBbmRMb2NrZWQJAMwIAgkBAS0BBQpmZWVUb1ZhdWx0BQNuaWwFA25pbAMJAAACBQtsb2NrQmFkRGVidAULbG9ja0JhZERlYnQJAQt0cmFuc2ZlckZlZQEFDGZlZVRvU3Rha2VycwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFFmRvVHJhbnNmZXJGZWVUb1N0YWtlcnMFFmRvVHJhbnNmZXJGZWVUb1N0YWtlcnMEB3Vuc3Rha2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACDndpdGhkcmF3TG9ja2VkCQDMCAIJAGQCBQdfYW1vdW50BQxmZWVUb1N0YWtlcnMFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UJAM4IAgkAzggCCQDOCAIJAQ51cGRhdGVQb3NpdGlvbgYFB190cmFkZXIFD29sZFBvc2l0aW9uU2l6ZQUMcmVtYWluTWFyZ2luBRdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBQ9vbGRQb3NpdGlvblNpemUJAQ1sYXN0VGltZXN0YW1wAAkBCHdpdGhkcmF3AggFAWkGY2FsbGVyBQdfYW1vdW50CQENdXBkYXRlQmFsYW5jZQEJAGUCCQBlAgkBCGNiYWxhbmNlAAUHX2Ftb3VudAULcm9sbG92ZXJGZWUFFmRvVHJhbnNmZXJGZWVUb1N0YWtlcnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQENY2xvc2VQb3NpdGlvbgQFX3NpemUKX2RpcmVjdGlvbhRfbWluUXVvdGVBc3NldEFtb3VudAxfYWRkVG9NYXJnaW4EBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQQZW5zdXJlQ2FsbGVkT25jZQkA/AcEBQR0aGlzAhBlbnN1cmVDYWxsZWRPbmNlBQNuaWwFA25pbAMJAAACBRBlbnN1cmVDYWxsZWRPbmNlBRBlbnN1cmVDYWxsZWRPbmNlBAdfdHJhZGVyCQEPZ2V0QWN0dWFsQ2FsbGVyAQUBaQQOX3RyYWRlckFkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQdfdHJhZGVyAg5JbnZhbGlkIGNhbGxlcgQLcG9zaXRpb25GZWUJAQ5nZXRQb3NpdGlvbkZlZQIFB190cmFkZXIFCl9kaXJlY3Rpb24DAwMDAwMJAQEhAQkBE3JlcXVpcmVPcGVuUG9zaXRpb24CBQdfdHJhZGVyBQpfZGlyZWN0aW9uBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAGCQBnAgAABQVfc2l6ZQYJAGYCAAAFFF9taW5RdW90ZUFzc2V0QW1vdW50BgkBDmlzTWFya2V0Q2xvc2VkAAkAAgECIEludmFsaWQgY2xvc2VQb3NpdGlvbiBwYXJhbWV0ZXJzBBRvbGRQb3NpdGlvblRpbWVzdGFtcAgJAQtnZXRQb3NpdGlvbgIFB190cmFkZXIFCl9kaXJlY3Rpb24CXzUEDSR0MDcwMTU4NzA3NjEJARVpbnRlcm5hbENsb3NlUG9zaXRpb24IBQdfdHJhZGVyBQpfZGlyZWN0aW9uBQVfc2l6ZQULcG9zaXRpb25GZWUFFF9taW5RdW90ZUFzc2V0QW1vdW50BQxfYWRkVG9NYXJnaW4GBgQPbmV3UG9zaXRpb25TaXplCAUNJHQwNzAxNTg3MDc2MQJfMQQRbmV3UG9zaXRpb25NYXJnaW4IBQ0kdDA3MDE1ODcwNzYxAl8yBBduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDcwMTU4NzA3NjECXzMEFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNzAxNTg3MDc2MQJfNAQPcG9zaXRpb25CYWREZWJ0CAUNJHQwNzAxNTg3MDc2MQJfNQQLcmVhbGl6ZWRQbmwIBQ0kdDA3MDE1ODcwNzYxAl82BA5tYXJnaW5Ub1RyYWRlcggFDSR0MDcwMTU4NzA3NjECXzcEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA3MDE1ODcwNzYxAl84BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA3MDE1ODcwNzYxAl85BBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNzAxNTg3MDc2MQNfMTAEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIIBQ0kdDA3MDE1ODcwNzYxA18xMQQOdG90YWxMb25nQWZ0ZXIIBQ0kdDA3MDE1ODcwNzYxA18xMgQPdG90YWxTaG9ydEFmdGVyCAUNJHQwNzAxNTg3MDc2MQNfMTMEGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNzAxNTg3MDc2MQNfMTQEG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcggFDSR0MDcwMTU4NzA3NjEDXzE1BAtyZWFsaXplZEZlZQgFDSR0MDcwMTU4NzA3NjEDXzE2AwkAZgIFD3Bvc2l0aW9uQmFkRGVidAAACQACAQIqSW52YWxpZCBjbG9zZVBvc2l0aW9uIHBhcmFtZXRlcnM6IGJhZCBkZWJ0AwkAZwIFFG9sZFBvc2l0aW9uVGltZXN0YW1wCQENbGFzdFRpbWVzdGFtcAAJAAIBAlNJbnZhbGlkIGNsb3NlUG9zaXRpb24gcGFyYW1ldGVyczogd2FpdCBhdCBsZWFzdCAxIGJsb2NrIGJlZm9yZSBjbG9zaW5nIHRoZSBwb3NpdGlvbgQOaXNQYXJ0aWFsQ2xvc2UJAQIhPQIFD25ld1Bvc2l0aW9uU2l6ZQAABA53aXRoZHJhd0Ftb3VudAkAZAIFDm1hcmdpblRvVHJhZGVyBQtyZWFsaXplZEZlZQQKYW1tQmFsYW5jZQkAZQIJAQhjYmFsYW5jZQAFDndpdGhkcmF3QW1vdW50BA1hbW1OZXdCYWxhbmNlAwkAZgIAAAUKYW1tQmFsYW5jZQAABQphbW1CYWxhbmNlBAd1bnN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAg53aXRoZHJhd0xvY2tlZAkAzAgCBQ53aXRoZHJhd0Ftb3VudAUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQQOcmVmZXJyZXJGZWVBbnkJAPwHBAkBD3JlZmVycmFsQWRkcmVzcwACDWFjY2VwdFBheW1lbnQJAMwIAgUHX3RyYWRlcgUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFC3JlYWxpemVkRmVlBQNuaWwDCQAAAgUOcmVmZXJyZXJGZWVBbnkFDnJlZmVycmVyRmVlQW55BAtyZWZlcnJlckZlZQQHJG1hdGNoMAUOcmVmZXJyZXJGZWVBbnkDCQABAgUHJG1hdGNoMAIDSW50BAF4BQckbWF0Y2gwBQF4CQACAQITSW52YWxpZCByZWZlcnJlckZlZQQNJHQwNzE3MzM3MTgwNgkBDWRpc3RyaWJ1dGVGZWUBCQBlAgULcmVhbGl6ZWRGZWUFC3JlZmVycmVyRmVlBAxmZWVUb1N0YWtlcnMIBQ0kdDA3MTczMzcxODA2Al8xBApmZWVUb1ZhdWx0CAUNJHQwNzE3MzM3MTgwNgJfMgQMZGVwb3NpdFZhdWx0CQD8BwQJAQx2YXVsdEFkZHJlc3MAAgdhZGRGcmVlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUKZmVlVG9WYXVsdAUDbmlsAwkAAAIFDGRlcG9zaXRWYXVsdAUMZGVwb3NpdFZhdWx0BAlub3RpZnlGZWUJAPwHBAkBDG1pbmVyQWRkcmVzcwACCm5vdGlmeUZlZXMJAMwIAgUHX3RyYWRlcgkAzAgCBQtyZWFsaXplZEZlZQUDbmlsBQNuaWwDCQAAAgUJbm90aWZ5RmVlBQlub3RpZnlGZWUEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCBQdfdHJhZGVyCQDMCAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkAzggCCQDOCAIJAM4IAgMFDmlzUGFydGlhbENsb3NlCQEOdXBkYXRlUG9zaXRpb24GBQdfdHJhZGVyBQ9uZXdQb3NpdGlvblNpemUFEW5ld1Bvc2l0aW9uTWFyZ2luBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUbmV3UG9zaXRpb25Mc3RVcGRDUEYJAQ1sYXN0VGltZXN0YW1wAAkBDmRlbGV0ZVBvc2l0aW9uAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgkBCXVwZGF0ZUFtbQgFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgUadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIFG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgMJAGYCBQ5tYXJnaW5Ub1RyYWRlcgAACQEId2l0aGRyYXcCBQ5fdHJhZGVyQWRkcmVzcwUObWFyZ2luVG9UcmFkZXIFA25pbAkBDXVwZGF0ZUJhbGFuY2UBBQ1hbW1OZXdCYWxhbmNlCQELdHJhbnNmZXJGZWUBBQxmZWVUb1N0YWtlcnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEJbGlxdWlkYXRlAgdfdHJhZGVyCl9kaXJlY3Rpb24EBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQPc3BvdE1hcmdpblJhdGlvCQEWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgMFB190cmFkZXIFCl9kaXJlY3Rpb24FD1BOTF9PUFRJT05fU1BPVAQWbGlxdWlkYXRpb25NYXJnaW5SYXRpbwMJARZpc092ZXJGbHVjdHVhdGlvbkxpbWl0AAQRb3JhY2xlTWFyZ2luUmF0aW8JARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAwUHX3RyYWRlcgUKX2RpcmVjdGlvbgURUE5MX09QVElPTl9PUkFDTEUJAQR2bWF4AgUPc3BvdE1hcmdpblJhdGlvBRFvcmFjbGVNYXJnaW5SYXRpbwUPc3BvdE1hcmdpblJhdGlvAwMDAwMJAQEhAQkBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DBRZsaXF1aWRhdGlvbk1hcmdpblJhdGlvCQEWbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwAHBgkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgIFB190cmFkZXIFCl9kaXJlY3Rpb24GCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAYJAQ5pc01hcmtldENsb3NlZAAJAAIBAhNVbmFibGUgdG8gbGlxdWlkYXRlBBRpc1BhcnRpYWxMaXF1aWRhdGlvbgMDCQBmAgUPc3BvdE1hcmdpblJhdGlvCQETbGlxdWlkYXRpb25GZWVSYXRpbwAJAGYCCQEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8AAAAHCQBmAgUMREVDSU1BTF9VTklUCQEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ABwQPb2xkUG9zaXRpb25TaXplCAkBC2dldFBvc2l0aW9uAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgJfMQQPcG9zaXRpb25TaXplQWJzCQEDYWJzAQUPb2xkUG9zaXRpb25TaXplBA0kdDA3NDMwNDc0NjI3AwUUaXNQYXJ0aWFsTGlxdWlkYXRpb24ED2xpcXVpZGF0aW9uU2l6ZQkBG2dldFBhcnRpYWxMaXF1aWRhdGlvbkFtb3VudAIFB190cmFkZXIFD29sZFBvc2l0aW9uU2l6ZQQQbGlxdWlkYXRpb25SYXRpbwkBBGRpdmQCCQEDYWJzAQUPbGlxdWlkYXRpb25TaXplBQ9wb3NpdGlvblNpemVBYnMJAJQKAgUQbGlxdWlkYXRpb25SYXRpbwkBA2FicwEFD2xpcXVpZGF0aW9uU2l6ZQkAlAoCAAAFD3Bvc2l0aW9uU2l6ZUFicwQQbGlxdWlkYXRpb25SYXRpbwgFDSR0MDc0MzA0NzQ2MjcCXzEED2xpcXVpZGF0aW9uU2l6ZQgFDSR0MDc0MzA0NzQ2MjcCXzIEDSR0MDc0NjMzNzUyODkJARVpbnRlcm5hbENsb3NlUG9zaXRpb24IBQdfdHJhZGVyBQpfZGlyZWN0aW9uAwUUaXNQYXJ0aWFsTGlxdWlkYXRpb24FD2xpcXVpZGF0aW9uU2l6ZQUPcG9zaXRpb25TaXplQWJzCQETbGlxdWlkYXRpb25GZWVSYXRpbwAAAAYHBgQPbmV3UG9zaXRpb25TaXplCAUNJHQwNzQ2MzM3NTI4OQJfMQQRbmV3UG9zaXRpb25NYXJnaW4IBQ0kdDA3NDYzMzc1Mjg5Al8yBBduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDc0NjMzNzUyODkCXzMEFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNzQ2MzM3NTI4OQJfNAQPcG9zaXRpb25CYWREZWJ0CAUNJHQwNzQ2MzM3NTI4OQJfNQQLcmVhbGl6ZWRQbmwIBQ0kdDA3NDYzMzc1Mjg5Al82BA5tYXJnaW5Ub1RyYWRlcggFDSR0MDc0NjMzNzUyODkCXzcEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA3NDYzMzc1Mjg5Al84BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA3NDYzMzc1Mjg5Al85BBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNzQ2MzM3NTI4OQNfMTAEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIIBQ0kdDA3NDYzMzc1Mjg5A18xMQQOdG90YWxMb25nQWZ0ZXIIBQ0kdDA3NDYzMzc1Mjg5A18xMgQPdG90YWxTaG9ydEFmdGVyCAUNJHQwNzQ2MzM3NTI4OQNfMTMEGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNzQ2MzM3NTI4OQNfMTQEG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcggFDSR0MDc0NjMzNzUyODkDXzE1BBJsaXF1aWRhdGlvblBlbmFsdHkIBQ0kdDA3NDYzMzc1Mjg5A18xNgQPZmVlVG9MaXF1aWRhdG9yCQBpAgUSbGlxdWlkYXRpb25QZW5hbHR5AAIECmZlZVRvVmF1bHQJAGUCBRJsaXF1aWRhdGlvblBlbmFsdHkFD2ZlZVRvTGlxdWlkYXRvcgQKYW1tQmFsYW5jZQkAZQIJAQhjYmFsYW5jZQAFEmxpcXVpZGF0aW9uUGVuYWx0eQQNbmV3QW1tQmFsYW5jZQMJAGYCAAAFCmFtbUJhbGFuY2UAAAUKYW1tQmFsYW5jZQQLbG9ja0JhZERlYnQDCQBmAgUPcG9zaXRpb25CYWREZWJ0AAAEC2xvY2tCYWREZWJ0CQD8BwQJAQx2YXVsdEFkZHJlc3MAAhVleGNoYW5nZUZyZWVBbmRMb2NrZWQJAMwIAgkAZAIFD3Bvc2l0aW9uQmFkRGVidAUSbGlxdWlkYXRpb25QZW5hbHR5BQNuaWwFA25pbAMJAAACBQtsb2NrQmFkRGVidAULbG9ja0JhZERlYnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFC2xvY2tCYWREZWJ0BQtsb2NrQmFkRGVidAQHdW5zdGFrZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIOd2l0aGRyYXdMb2NrZWQJAMwIAgUSbGlxdWlkYXRpb25QZW5hbHR5BQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlBBBkZXBvc2l0SW5zdXJhbmNlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAgdhZGRGcmVlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUKZmVlVG9WYXVsdAUDbmlsAwkAAAIFEGRlcG9zaXRJbnN1cmFuY2UFEGRlcG9zaXRJbnN1cmFuY2UEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCBQdfdHJhZGVyCQDMCAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkAzggCCQDOCAIDBRRpc1BhcnRpYWxMaXF1aWRhdGlvbgkBDnVwZGF0ZVBvc2l0aW9uBgUHX3RyYWRlcgUPbmV3UG9zaXRpb25TaXplBRFuZXdQb3NpdGlvbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGCQENbGFzdFRpbWVzdGFtcAAJAQ5kZWxldGVQb3NpdGlvbgIFB190cmFkZXIFCl9kaXJlY3Rpb24JAQl1cGRhdGVBbW0IBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFDnRvdGFsTG9uZ0FmdGVyBQ90b3RhbFNob3J0QWZ0ZXIFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIJAQh3aXRoZHJhdwIIBQFpBmNhbGxlcgUPZmVlVG9MaXF1aWRhdG9yCQENdXBkYXRlQmFsYW5jZQEFDW5ld0FtbUJhbGFuY2UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKcGF5RnVuZGluZwAEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQVZnVuZGluZ0Jsb2NrVGltZXN0YW1wCQEZbmV4dEZ1bmRpbmdCbG9ja1RpbWVzdGFtcAADAwMJAGYCBRVmdW5kaW5nQmxvY2tUaW1lc3RhbXAJAQ1sYXN0VGltZXN0YW1wAAYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQACQACAQkArAICCQCsAgIJAKwCAgIhSW52YWxpZCBmdW5kaW5nIGJsb2NrIHRpbWVzdGFtcDogCQCkAwEJAQ1sYXN0VGltZXN0YW1wAAIDIDwgCQCkAwEFFWZ1bmRpbmdCbG9ja1RpbWVzdGFtcAQPdW5kZXJseWluZ1ByaWNlCQEOZ2V0T3JhY2xlUHJpY2UABA0kdDA3NzQxNDc3NDkyCQEKZ2V0RnVuZGluZwAEFHNob3J0UHJlbWl1bUZyYWN0aW9uCAUNJHQwNzc0MTQ3NzQ5MgJfMQQTbG9uZ1ByZW1pdW1GcmFjdGlvbggFDSR0MDc3NDE0Nzc0OTICXzIEDnByZW1pdW1Ub1ZhdWx0CAUNJHQwNzc0MTQ3NzQ5MgJfMwQTZG9QYXlGdW5kaW5nVG9WYXVsdAMJAGYCBQ5wcmVtaXVtVG9WYXVsdAAABBNkb1BheUZ1bmRpbmdUb1ZhdWx0CQD8BwQJAQx2YXVsdEFkZHJlc3MAAhVleGNoYW5nZUZyZWVBbmRMb2NrZWQJAMwIAgkBAS0BBQ5wcmVtaXVtVG9WYXVsdAUDbmlsBQNuaWwDCQAAAgUTZG9QYXlGdW5kaW5nVG9WYXVsdAUTZG9QYXlGdW5kaW5nVG9WYXVsdAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUTZG9QYXlGdW5kaW5nVG9WYXVsdAUTZG9QYXlGdW5kaW5nVG9WYXVsdAkBDXVwZGF0ZUZ1bmRpbmcFCQBkAgUVZnVuZGluZ0Jsb2NrVGltZXN0YW1wCQEUZnVuZGluZ1BlcmlvZFNlY29uZHMACQBkAgkBI2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAUTbG9uZ1ByZW1pdW1GcmFjdGlvbgkAZAIJASRsYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ABRRzaG9ydFByZW1pdW1GcmFjdGlvbgkBBGRpdmQCBRNsb25nUHJlbWl1bUZyYWN0aW9uBQ91bmRlcmx5aW5nUHJpY2UJAQRkaXZkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FD3VuZGVybHlpbmdQcmljZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlAAQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABA0kdDA3ODU0NTc4OTExCQEUZ2V0U3luY1Rlcm1pbmFsUHJpY2UDCQEOZ2V0T3JhY2xlUHJpY2UABQdfcXRBc3RSBQdfYnNBc3RSBBNuZXdRdW90ZUFzc2V0V2VpZ2h0CAUNJHQwNzg1NDU3ODkxMQJfMQQSbmV3QmFzZUFzc2V0V2VpZ2h0CAUNJHQwNzg1NDU3ODkxMQJfMgQNbWFyZ2luVG9WYXVsdAgFDSR0MDc4NTQ1Nzg5MTECXzMEEG1hcmdpblRvVmF1bHRBZGoDAwkAZgIAAAUNbWFyZ2luVG9WYXVsdAkAZgIJAQNhYnMBBQ1tYXJnaW5Ub1ZhdWx0CQEIY2JhbGFuY2UABwkBAS0BCQEIY2JhbGFuY2UABQ1tYXJnaW5Ub1ZhdWx0BA1kb0V4Y2hhbmdlUG5MAwkBAiE9AgUQbWFyZ2luVG9WYXVsdEFkagAABA1kb0V4Y2hhbmdlUG5MCQD8BwQJAQx2YXVsdEFkZHJlc3MAAhVleGNoYW5nZUZyZWVBbmRMb2NrZWQJAMwIAgUQbWFyZ2luVG9WYXVsdEFkagUDbmlsBQNuaWwDCQAAAgUNZG9FeGNoYW5nZVBuTAUNZG9FeGNoYW5nZVBuTAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUNZG9FeGNoYW5nZVBuTAUNZG9FeGNoYW5nZVBuTAkAzggCCQENdXBkYXRlQmFsYW5jZQEJAGQCCQEIY2JhbGFuY2UABRBtYXJnaW5Ub1ZhdWx0QWRqCQEQdXBkYXRlQW1tV2VpZ2h0cwIFE25ld1F1b3RlQXNzZXRXZWlnaHQFEm5ld0Jhc2VBc3NldFdlaWdodAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARBlbnN1cmVDYWxsZWRPbmNlAAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECIkludmFsaWQgc2F2ZUN1cnJlbnRUeElkIHBhcmFtZXRlcnMEBHR4SWQJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAQGbGFzdFR4CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFCGtfbGFzdFR4AgADCQECIT0CBQZsYXN0VHgFBHR4SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUIa19sYXN0VHgFBHR4SWQFA25pbAkAAgECKUNhbiBub3QgY2FsbCB2QU1NIG1ldGhvZHMgdHdpY2UgaW4gb25lIHR4AWkBD21pZ3JhdGVQb3NpdGlvbgEHX3RyYWRlcgQPcG9zaXRpb25TaXplT3B0CQCaCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFDmtfcG9zaXRpb25TaXplBQdfdHJhZGVyAwMJAQlpc0RlZmluZWQBBQ9wb3NpdGlvblNpemVPcHQJAQlpc0RlZmluZWQBCQCmCAEFB190cmFkZXIHBAVwU2l6ZQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFB190cmFkZXIEB3BNYXJnaW4JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFEGtfcG9zaXRpb25NYXJnaW4FB190cmFkZXIECXBOb3Rpb25hbAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAUHX3RyYWRlcgQJcEZyYWN0aW9uCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBS5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQdfdHJhZGVyBApwVGltZXN0YW1wCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFHmtfcG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcAUHX3RyYWRlcggFCWxhc3RCbG9jawl0aW1lc3RhbXAEBHBGZWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUNa19wb3NpdGlvbkZlZQUHX3RyYWRlcgkBA2ZlZQAECXBTZXF1ZW5jZQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUSa19wb3NpdGlvblNlcXVlbmNlBQdfdHJhZGVyBApwRGlyZWN0aW9uCQEMZ2V0RGlyZWN0aW9uAQUFcFNpemUEC3Bvc2l0aW9uS2V5CQCsAgIJAKwCAgUHX3RyYWRlcgIBXwkApAMBBQpwRGlyZWN0aW9uCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFDmtfcG9zaXRpb25TaXplBQdfdHJhZGVyCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFEGtfcG9zaXRpb25NYXJnaW4FB190cmFkZXIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAUHX3RyYWRlcgkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBS5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQdfdHJhZGVyCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFHmtfcG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcAUHX3RyYWRlcgkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBQ1rX3Bvc2l0aW9uRmVlBQdfdHJhZGVyCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFEmtfcG9zaXRpb25TZXF1ZW5jZQUHX3RyYWRlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFC3Bvc2l0aW9uS2V5BQVwU2l6ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUQa19wb3NpdGlvbk1hcmdpbgULcG9zaXRpb25LZXkFB3BNYXJnaW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFFmtfcG9zaXRpb25PcGVuTm90aW9uYWwFC3Bvc2l0aW9uS2V5BQlwTm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFLmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FC3Bvc2l0aW9uS2V5BQlwRnJhY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFHmtfcG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcAULcG9zaXRpb25LZXkFCnBUaW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFDWtfcG9zaXRpb25GZWUFC3Bvc2l0aW9uS2V5BQRwRmVlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRJrX3Bvc2l0aW9uU2VxdWVuY2UFC3Bvc2l0aW9uS2V5BQlwU2VxdWVuY2UFA25pbAkAAgEJAKwCAgIXTm90aGluZyB0byBtaWdyYXRlIGZvciAFB190cmFkZXIBaQEndmlld19jYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50AgdfdHJhZGVyCl9kaXJlY3Rpb24EBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQNJHQwODI2MDI4MjczOAkBC2dldFBvc2l0aW9uAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgQMcG9zaXRpb25TaXplCAUNJHQwODI2MDI4MjczOAJfMQQOcG9zaXRpb25NYXJnaW4IBQ0kdDA4MjYwMjgyNzM4Al8yBANwb24IBQ0kdDA4MjYwMjgyNzM4Al8zBBFwb3NpdGlvbkxzdFVwZENQRggFDSR0MDgyNjAyODI3MzgCXzQEEXBvc2l0aW9uVGltZXN0YW1wCAUNJHQwODI2MDI4MjczOAJfNQQNJHQwODI3NDE4Mjg1NAkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAwUHX3RyYWRlcgUKX2RpcmVjdGlvbgUPUE5MX09QVElPTl9TUE9UBBBwb3NpdGlvbk5vdGlvbmFsCAUNJHQwODI3NDE4Mjg1NAJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDgyNzQxODI4NTQCXzIEDSR0MDgyODU3ODMwODEJATBjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50QW5kUm9sbG92ZXJGZWUFBQxwb3NpdGlvblNpemUFDnBvc2l0aW9uTWFyZ2luBRFwb3NpdGlvbkxzdFVwZENQRgURcG9zaXRpb25UaW1lc3RhbXAFDXVucmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDgyODU3ODMwODECXzEEB2JhZERlYnQIBQ0kdDA4Mjg1NzgzMDgxAl8yBA5mdW5kaW5nUGF5bWVudAgFDSR0MDgyODU3ODMwODECXzMEC3JvbGxvdmVyRmVlCAUNJHQwODI4NTc4MzA4MQJfNAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAQFzAQUMcmVtYWluTWFyZ2luCQEBcwEFDmZ1bmRpbmdQYXltZW50CQEBcwEJAQ5nZXRNYXJnaW5SYXRpbwIFB190cmFkZXIFCl9kaXJlY3Rpb24JAQFzAQUNdW5yZWFsaXplZFBubAkBAXMBBQdiYWREZWJ0CQEBcwEFEHBvc2l0aW9uTm90aW9uYWwJAQFzAQULcm9sbG92ZXJGZWUJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEVdmlld19nZXRQZWdBZGp1c3RDb3N0AQZfcHJpY2UEB19xdEFzdFIJAQZxdEFzdFIABAdfYnNBc3RSCQEGYnNBc3RSAAQGcmVzdWx0CQEUZ2V0U3luY1Rlcm1pbmFsUHJpY2UDBQZfcHJpY2UFB19xdEFzdFIFB19ic0FzdFIJAAIBCQCkAwEIBQZyZXN1bHQCXzMBaQEYdmlld19nZXRUZXJtaW5hbEFtbVByaWNlAAQNJHQwODM4MTY4Mzg5NwkBE2dldFRlcm1pbmFsQW1tU3RhdGUABBl0ZXJtaW5hbFF1b3RlQXNzZXRSZXNlcnZlCAUNJHQwODM4MTY4Mzg5NwJfMQQYdGVybWluYWxCYXNlQXNzZXRSZXNlcnZlCAUNJHQwODM4MTY4Mzg5NwJfMgQFcHJpY2UJAQRkaXZkAgkBBG11bGQCBRl0ZXJtaW5hbFF1b3RlQXNzZXRSZXNlcnZlCQEGcXRBc3RXAAkBBG11bGQCBRh0ZXJtaW5hbEJhc2VBc3NldFJlc2VydmUJAQZic0FzdFcACQACAQkApAMBBQVwcmljZQFpAQ92aWV3X2dldEZ1bmRpbmcABARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMED3VuZGVybHlpbmdQcmljZQkBDmdldE9yYWNsZVByaWNlAAQNJHQwODQ0NTY4NDUzNAkBCmdldEZ1bmRpbmcABBRzaG9ydFByZW1pdW1GcmFjdGlvbggFDSR0MDg0NDU2ODQ1MzQCXzEEE2xvbmdQcmVtaXVtRnJhY3Rpb24IBQ0kdDA4NDQ1Njg0NTM0Al8yBA5wcmVtaXVtVG9WYXVsdAgFDSR0MDg0NDU2ODQ1MzQCXzMEC2xvbmdGdW5kaW5nCQEEZGl2ZAIFE2xvbmdQcmVtaXVtRnJhY3Rpb24FD3VuZGVybHlpbmdQcmljZQQMc2hvcnRGdW5kaW5nCQEEZGl2ZAIFFHNob3J0UHJlbWl1bUZyYWN0aW9uBQ91bmRlcmx5aW5nUHJpY2UJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAQFzAQULbG9uZ0Z1bmRpbmcJAQFzAQUMc2hvcnRGdW5kaW5nCQEBcwEJAQxnZXRTcG90UHJpY2UACQEBcwEJAQ5nZXRPcmFjbGVQcmljZQAJAQFzAQUOcHJlbWl1bVRvVmF1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEQY29tcHV0ZVNwb3RQcmljZQAEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQGcmVzdWx0CQEMZ2V0U3BvdFByaWNlAAkAlAoCBQNuaWwFBnJlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAR9jb21wdXRlRmVlRm9yVHJhZGVyV2l0aEFydGlmYWN0AgdfdHJhZGVyC19hcnRpZmFjdElkBAZyZXN1bHQJARhnZXRGb3JUcmFkZXJXaXRoQXJ0aWZhY3QCBQdfdHJhZGVyBQtfYXJ0aWZhY3RJZAkAlAoCBQNuaWwFBnJlc3VsdAECdHgBBnZlcmlmeQAEDmNvb3JkaW5hdG9yU3RyCQCdCAIFBHRoaXMFFGtfY29vcmRpbmF0b3JBZGRyZXNzAwkBCWlzRGVmaW5lZAEFDmNvb3JkaW5hdG9yU3RyBAVhZG1pbgkAnQgCCQERQGV4dHJOYXRpdmUoMTA2MikBCQEFdmFsdWUBBQ5jb29yZGluYXRvclN0cgUPa19hZG1pbl9hZGRyZXNzAwkBCWlzRGVmaW5lZAEFBWFkbWluCQELdmFsdWVPckVsc2UCCQCbCAIJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFBWFkbWluCQCsAgIJAKwCAgkArAICAgdzdGF0dXNfCQClCAEFBHRoaXMCAV8JANgEAQgFAnR4AmlkBwkAAgECLnVuYWJsZSB0byB2ZXJpZnk6IGFkbWluIG5vdCBzZXQgaW4gY29vcmRpbmF0b3IJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXmT5mUn", "height": 2538827, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5XRXDvZeq5dr6DEL5tN2342C4Vp162AC6DWFHrDBmWsC Next: none Diff:
OldNewDifferences
1919
2020 let i = "k_positionSequence"
2121
22-let j = "k_positionAsset"
22+let j = "k_positionFee"
2323
24-let k = "k_positionFee"
24+let k = "k_positionTimestamp"
2525
26-let l = "k_positionTimestamp"
26+let l = "k_initialized"
2727
28-let m = "k_initialized"
28+let m = "k_paused"
2929
30-let n = "k_paused"
30+let n = "k_closeOnly"
3131
32-let o = "k_closeOnly"
32+let o = "k_fee"
3333
34-let p = "k_fee"
34+let p = "k_rollover_fee"
3535
36-let q = "k_rollover_fee"
36+let q = "k_fundingPeriod"
3737
38-let r = "k_fundingPeriod"
38+let r = "k_initMarginRatio"
3939
40-let s = "k_initMarginRatio"
40+let s = "k_mmr"
4141
42-let t = "k_mmr"
42+let t = "k_liquidationFeeRatio"
4343
44-let u = "k_liquidationFeeRatio"
44+let u = "k_partLiquidationRatio"
4545
46-let v = "k_partLiquidationRatio"
46+let v = "k_spreadLimit"
4747
48-let w = "k_spreadLimit"
48+let w = "k_maxPriceImpact"
4949
50-let x = "k_maxPriceImpact"
50+let x = "k_maxPriceSpread"
5151
52-let y = "k_maxPriceSpread"
52+let y = "k_maxOpenNotional"
5353
54-let z = "k_maxOpenNotional"
54+let z = "k_feeToStakersPercent"
5555
56-let A = "k_feeToStakersPercent"
56+let A = "k_maxOracleDelay"
5757
58-let B = "k_maxOracleDelay"
58+let B = "k_fundingMode"
5959
60-let C = "k_lastDataStr"
60+let C = "k_latestLongPremiumFraction"
6161
62-let D = "k_lastMinuteId"
62+let D = "k_latestShortPremiumFraction"
6363
64-let E = "k_twapDataLastCumulativePrice"
64+let E = "k_nextFundingBlockMinTimestamp"
6565
66-let F = "k_twapDataLastPrice"
66+let F = "k_longFundingRate"
6767
68-let G = "k_twapDataPreviousMinuteId"
68+let G = "k_shortFundingRate"
6969
70-let H = "k_latestLongPremiumFraction"
70+let H = "k_qtAstR"
7171
72-let I = "k_latestShortPremiumFraction"
72+let I = "k_bsAstR"
7373
74-let J = "k_nextFundingBlockMinTimestamp"
74+let J = "k_qtAstW"
7575
76-let K = "k_longFundingRate"
76+let K = "k_bsAstW"
7777
78-let L = "k_shortFundingRate"
78+let L = "k_totalPositionSize"
7979
80-let M = "k_qtAstR"
80+let M = "k_totalLongPositionSize"
8181
82-let N = "k_bsAstR"
82+let N = "k_totalShortPositionSize"
8383
84-let O = "k_qtAstW"
84+let O = "k_openInterestNotional"
8585
86-let P = "k_bsAstW"
86+let P = "k_openInterestShort"
8787
88-let Q = "k_totalPositionSize"
88+let Q = "k_openInterestLong"
8989
90-let R = "k_totalLongPositionSize"
90+let R = "k_lastTx"
9191
92-let S = "k_totalShortPositionSize"
92+let S = "k_coordinatorAddress"
9393
94-let T = "k_openInterestNotional"
94+let T = "k_vault_address"
9595
96-let U = "k_openInterestShort"
96+let U = "k_admin_address"
9797
98-let V = "k_openInterestLong"
98+let V = "k_quote_asset"
9999
100-let W = "k_lastTx"
100+let W = "k_staking_address"
101101
102-let X = "k_coordinatorAddress"
102+let X = "k_miner_address"
103103
104-let Y = "k_vault_address"
104+let Y = "k_orders_address"
105105
106-let Z = "k_admin_address"
106+let Z = "k_referral_address"
107107
108-let aa = "k_quote_asset"
108+let aa = "k_nft_manager_address"
109109
110-let ab = "k_quote_staking"
111-
112-let ac = "k_staking_address"
113-
114-let ad = "k_miner_address"
115-
116-let ae = "k_orders_address"
117-
118-let af = "k_referral_address"
119-
120-let ag = "k_exchange_address"
121-
122-let ah = "k_nft_manager_address"
123-
124-func ai (aj,ak) = ((aj + "_") + ak)
110+func ab (ac,ad) = ((ac + "_") + ad)
125111
126112
127-func al () = valueOrErrorMessage(addressFromString(getStringValue(this, X)), "Coordinator not set")
113+func ae () = valueOrErrorMessage(addressFromString(getStringValue(this, S)), "Coordinator not set")
128114
129115
130-func am () = addressFromString(getStringValue(al(), Z))
116+func af () = addressFromString(getStringValue(ae(), U))
131117
132118
133-func an () = fromBase58String(getStringValue(al(), aa))
119+func ag () = fromBase58String(getStringValue(ae(), V))
134120
135121
136-func ao () = valueOrErrorMessage(addressFromString(getStringValue(al(), ab)), "Quote asset staking not set")
122+func ah () = valueOrErrorMessage(addressFromString(getStringValue(ae(), W)), "Staking not set")
137123
138124
139-func ap () = valueOrErrorMessage(addressFromString(getStringValue(al(), ac)), "Staking not set")
125+func ai () = valueOrErrorMessage(addressFromString(getStringValue(ae(), T)), "Vault not set")
140126
141127
142-func aq () = valueOrErrorMessage(addressFromString(getStringValue(al(), Y)), "Vault not set")
128+func aj () = valueOrErrorMessage(addressFromString(getStringValue(ae(), X)), "Miner not set")
143129
144130
145-func ar () = valueOrErrorMessage(addressFromString(getStringValue(al(), ad)), "Miner not set")
131+func ak () = valueOrErrorMessage(addressFromString(getStringValue(ae(), Y)), "Orders not set")
146132
147133
148-func as () = valueOrErrorMessage(addressFromString(getStringValue(al(), ae)), "Orders not set")
134+func al () = valueOrErrorMessage(addressFromString(getStringValue(ae(), Z)), "Referral not set")
149135
150136
151-func at () = valueOrErrorMessage(addressFromString(getStringValue(al(), af)), "Referral not set")
137+func am () = valueOrErrorMessage(addressFromString(getStringValue(ae(), aa)), "NFT Manager not set")
152138
153139
154-func au () = valueOrErrorMessage(addressFromString(getStringValue(al(), ah)), "NFT Manager not set")
140+let an = "k_token_param"
141+
142+let ao = "k_token_type"
143+
144+let ap = "fee_reduction"
145+
146+let aq = 1
147+
148+let ar = 2
149+
150+let as = 1000
151+
152+let at = 6
153+
154+let au = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
155+
156+let av = (525600 * au)
157+
158+let aw = (86400 * au)
159+
160+let ax = 1
161+
162+let ay = 2
163+
164+let az = 1
165+
166+let aA = 2
167+
168+func aB (aC) = (toString(aC) + ",")
155169
156170
157-let av = "k_token_param"
158-
159-let aw = "k_token_type"
160-
161-let ax = "fee_reduction"
162-
163-let ay = 1
164-
165-let az = 2
166-
167-let aA = 15
168-
169-let aB = 1000
170-
171-let aC = 6
172-
173-let aD = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
174-
175-let aE = (525600 * aD)
176-
177-let aF = (86400 * aD)
178-
179-let aG = 1
180-
181-let aH = 2
182-
183-func aI (aJ) = (toString(aJ) + ",")
171+func aD (aC,aE) = fraction(aC, au, aE, HALFEVEN)
184172
185173
186-func aK (aJ,aL) = fraction(aJ, aD, aL, HALFEVEN)
174+func aF (aC,aE) = fraction(aC, aE, au, HALFEVEN)
187175
188176
189-func aM (aJ,aL) = fraction(aJ, aL, aD, HALFEVEN)
177+func aG (aC,aE) = fraction(aC, toBigInt(au), aE, HALFEVEN)
190178
191179
192-func aN (aJ,aL) = fraction(aJ, toBigInt(aD), aL, HALFEVEN)
180+func aH (aC,aE) = fraction(aC, aE, toBigInt(au), HALFEVEN)
193181
194182
195-func aO (aJ,aL) = fraction(aJ, aL, toBigInt(aD), HALFEVEN)
183+func aI (aC) = if ((aC > 0))
184+ then aC
185+ else -(aC)
196186
197187
198-func aP (aJ) = if ((aJ > 0))
199- then aJ
200- else -(aJ)
188+func aJ (aC,aE) = if ((aC >= aE))
189+ then aC
190+ else aE
201191
202192
203-func aQ (aJ,aL) = if ((aJ >= aL))
204- then aJ
205- else aL
193+func aK (aL) = valueOrErrorMessage(getInteger(this, aL), ("no value for " + aL))
206194
207195
208-func aR (aS) = if ((size(aS) == 0))
209- then ""
210- else makeString(aS, ",")
196+func aM (aL,aN) = valueOrElse(getInteger(this, aL), aN)
211197
212198
213-func aT (aU) = if ((aU == ""))
214- then nil
215- else split(aU, ",")
216-
217-
218-func aV (aS,aW,aX) = if ((size(aS) > aW))
219- then (removeByIndex(aS, 0) :+ aX)
220- else (aS :+ aX)
221-
222-
223-func aY (aZ) = valueOrErrorMessage(getInteger(this, aZ), ("no value for " + aZ))
224-
225-
226-func ba (aZ,bb) = valueOrElse(getInteger(this, aZ), bb)
227-
228-
229-func bc (ak,aj) = {
230- let bd = valueOrErrorMessage(getString(ak, aj), ("No value for key " + aj))
231- bd
199+func aO (ad,ac) = {
200+ let aP = valueOrErrorMessage(getString(ad, ac), ("No value for key " + ac))
201+ aP
232202 }
233203
234204
235-func be (ak,aj) = {
236- let bd = valueOrErrorMessage(getInteger(ak, aj), ("No value for key " + aj))
237- bd
205+func aQ (ad,ac) = {
206+ let aP = valueOrErrorMessage(getInteger(ad, ac), ("No value for key " + ac))
207+ aP
238208 }
239209
240210
241-func bf () = aY(c)
211+func aR () = aK(c)
242212
243213
244-func bg () = aY(p)
214+func aS () = aK(o)
245215
246216
247-func bh () = aY(q)
217+func aT () = aK(p)
248218
249219
250-func bi () = aY(s)
220+func aU () = aK(r)
251221
252222
253-func bj () = aY(M)
223+func aV () = aK(H)
254224
255225
256-func bk () = aY(N)
226+func aW () = aK(I)
257227
258228
259-func bl () = ba(O, aD)
229+func aX () = aM(J, au)
260230
261231
262-func bm () = ba(P, aD)
232+func aY () = aM(K, au)
263233
264234
265-func bn () = aY(Q)
235+func aZ () = aK(L)
266236
267237
268-func bo () = aY(T)
238+func ba () = aK(O)
269239
270240
271-func bp () = aY(U)
241+func bb () = aK(P)
272242
273243
274-func bq () = aY(V)
244+func bc () = aK(Q)
275245
276246
277-func br () = aY(J)
247+func bd () = aK(E)
278248
279249
280-func bs () = aY(r)
250+func be () = aK(q)
281251
282252
283-func bt () = (bs() * aD)
253+func bf () = (be() * au)
284254
285255
286-func bu () = (bs() * aB)
256+func bg () = (be() * as)
287257
288258
289-func bv () = aY(t)
259+func bh () = aK(s)
290260
291261
292-func bw () = aY(u)
262+func bi () = aK(t)
293263
294264
295-func bx () = aY(v)
265+func bj () = aK(u)
296266
297267
298-func by () = aY(w)
268+func bk () = aK(v)
299269
300270
301-func bz () = aY(x)
271+func bl () = aK(w)
302272
303273
304-func bA () = aY(y)
274+func bm () = aK(x)
305275
306276
307-func bB () = aY(z)
277+func bn () = aK(y)
308278
309279
310-func bC () = aY(H)
280+func bo () = aK(C)
311281
312282
313-func bD () = aY(I)
283+func bp () = aK(D)
314284
315285
316-func bE () = aY(S)
286+func bq () = aK(N)
317287
318288
319-func bF () = aY(R)
289+func br () = aK(M)
320290
321291
322-func bG () = ba(d, 0)
292+func bs () = aM(d, 0)
323293
324294
325-func bH () = aY(A)
295+func bt () = aK(z)
326296
327297
328-func bI () = aY(B)
298+func bu () = aK(A)
329299
330300
331-func bJ () = lastBlock.timestamp
301+func bv () = aM(B, az)
332302
333303
334-func bK (bL) = valueOrElse(getString(as(), "k_sender"), toString(bL.caller))
304+func bw () = lastBlock.timestamp
335305
336306
337-func bM (bN,bO,bP) = {
338- let bQ = (bN - bO)
339- if (if (bP)
340- then (0 > bQ)
307+func bx (by) = valueOrElse(getString(ak(), "k_sender"), toString(by.caller))
308+
309+
310+func bz (bA,bB,bC) = {
311+ let bD = (bA - bB)
312+ if (if (bC)
313+ then (0 > bD)
341314 else false)
342- then throw(((("Invalid margin: " + toString(bN)) + " < ") + toString(bO)))
343- else if (if (!(bP))
344- then (bQ >= 0)
315+ then throw(((("Invalid margin: " + toString(bA)) + " < ") + toString(bB)))
316+ else if (if (!(bC))
317+ then (bD >= 0)
345318 else false)
346- then throw(((("Invalid margin: " + toString(bN)) + " > ") + toString(bO)))
319+ then throw(((("Invalid margin: " + toString(bA)) + " > ") + toString(bB)))
347320 else true
348321 }
349322
350323
351-func bR (bS) = if ((bS == 0))
324+func bE (bF) = if ((bF == 0))
352325 then throw("Should not be called with _positionSize == 0")
353- else if ((bS > 0))
354- then bC()
355- else bD()
326+ else if ((bF > 0))
327+ then bo()
328+ else bp()
356329
357330
358-func bT (bU) = {
359- let bV = getInteger(this, ai(e, bU))
360- let bW = bV
361- if ($isInstanceOf(bW, "Int"))
331+func bG (bH,bI) = {
332+ let bJ = ((bH + "_") + toString(bI))
333+ let bK = getInteger(this, ab(e, bJ))
334+ let bL = bK
335+ if ($isInstanceOf(bL, "Int"))
362336 then {
363- let bX = bW
364- $Tuple5(bX, getIntegerValue(this, ai(f, bU)), getIntegerValue(this, ai(g, bU)), getIntegerValue(this, ai(h, bU)), getIntegerValue(this, ai(l, bU)))
337+ let bM = bL
338+ $Tuple5(bM, getIntegerValue(this, ab(f, bJ)), getIntegerValue(this, ab(g, bJ)), getIntegerValue(this, ab(h, bJ)), getIntegerValue(this, ab(k, bJ)))
365339 }
366340 else $Tuple5(0, 0, 0, 0, 0)
367341 }
368342
369343
370-func bY (bU) = {
371- let bZ = getString(this, ai(j, bU))
372- let bW = bZ
373- if ($isInstanceOf(bW, "String"))
344+func bN (bF) = if ((0 > bF))
345+ then ar
346+ else aq
347+
348+
349+func bO (bH,bI) = {
350+ let bJ = ((bH + "_") + toString(bI))
351+ let bP = getInteger(this, ab(j, bJ))
352+ let bL = bP
353+ if ($isInstanceOf(bL, "Int"))
374354 then {
375- let ca = bW
376- ca
355+ let bQ = bL
356+ bQ
377357 }
378- else toBase58String(an())
358+ else aS()
379359 }
380360
381361
382-func cb (bU) = {
383- let cc = getInteger(this, ai(k, bU))
384- let bW = cc
385- if ($isInstanceOf(bW, "Int"))
386- then {
387- let cd = bW
388- cd
389- }
390- else bg()
391- }
392-
393-
394-func ce (bU) = if ((bT(bU)._1 == 0))
362+func bR (bH,bI) = if ((bG(bH, bI)._1 == 0))
395363 then throw("No open position")
396364 else true
397365
398366
399-func cf (cg) = {
400- let ch = getString(this, cg)
401- if (if (isDefined(ch))
402- then (value(ch) != "")
367+func bS (bT) = {
368+ let bU = getString(this, bT)
369+ if (if (isDefined(bU))
370+ then (value(bU) != "")
403371 else false)
404372 then {
405- let ci = split(value(ch), ",")
406- let cj = valueOrErrorMessage(addressFromString(ci[0]), ("Invalid oracle address in: " + value(ch)))
407- let ck = ci[1]
408- let cl = ci[2]
409- let cm = ci[3]
410- $Tuple4(cj, ck, cl, cm)
373+ let bV = split(value(bU), ",")
374+ let bW = valueOrErrorMessage(addressFromString(bV[0]), ("Invalid oracle address in: " + value(bU)))
375+ let bX = bV[1]
376+ let bY = bV[2]
377+ let bZ = bV[3]
378+ $Tuple4(bW, bX, bY, bZ)
411379 }
412380 else unit
413381 }
414382
415383
416-func cn () = valueOrElse(getBoolean(this, m), false)
384+func ca () = valueOrElse(getBoolean(this, l), false)
417385
418386
419-func co () = valueOrElse(getBoolean(this, n), false)
387+func cb () = valueOrElse(getBoolean(this, m), false)
420388
421389
422-func cp () = valueOrElse(getBoolean(this, o), false)
390+func cc () = valueOrElse(getBoolean(this, n), false)
423391
424392
425-func cq (cr,cs,ct) = if (cr)
393+func cd (ce,cf,cg) = if (ce)
426394 then {
427- let cu = (bk() - ct)
428- if ((0 >= cu))
395+ let ch = (aW() - cg)
396+ if ((0 >= ch))
429397 then throw("Tx lead to base asset reserve <= 0, revert")
430- else $Tuple3((bj() + cs), cu, (bn() + ct))
398+ else $Tuple3((aV() + cf), ch, (aZ() + cg))
431399 }
432400 else {
433- let cv = (bj() - cs)
434- if ((0 >= cv))
401+ let ci = (aV() - cf)
402+ if ((0 >= ci))
435403 then throw("Tx lead to base quote reserve <= 0, revert")
436- else $Tuple3(cv, (bk() + ct), (bn() - ct))
404+ else $Tuple3(ci, (aW() + cg), (aZ() - cg))
437405 }
438406
439407
440-func cw (cx,cy) = {
441- let cz = toBigInt(cx)
442- let cA = toBigInt(cy)
443- aO(cz, cA)
408+func cj (ck,cl) = {
409+ let cm = toBigInt(ck)
410+ let cn = toBigInt(cl)
411+ aH(cm, cn)
444412 }
445413
446414
447-func cB (cr,cs) = {
448- let cx = bj()
449- let cy = bk()
450- let cC = bl()
451- let cD = bm()
452- let cE = aK(cs, cC)
453- let aZ = cw(cx, cy)
454- let cF = if (cr)
455- then (cx + cE)
456- else (cx - cE)
457- let cG = toInt(aN(aZ, toBigInt(cF)))
458- let cH = aP((cG - cy))
459- let cI = if (cr)
460- then cH
461- else -(cH)
462- let cJ = cq(cr, cE, cH)
463- let cK = cJ._1
464- let cL = cJ._2
465- let cM = cJ._3
466- let cN = aK(aM(cx, cC), aM(cy, cD))
467- let cO = aK(cs, cH)
468- let cP = aP((cN - cO))
469- let cQ = (aD - aK(cN, (cN + cP)))
470- let cR = bz()
471- if ((cQ > cR))
472- then throw(((((((((((((("Price impact " + toString(cQ)) + " > max price impact ") + toString(cR)) + " before quote asset: ") + toString(cx)) + " before base asset: ") + toString(cy)) + " quote asset amount to exchange: ") + toString(cs)) + " price before: ") + toString(cN)) + " marketPrice: ") + toString(cO)))
473- else $Tuple4(cI, cK, cL, cM)
415+func co (ce,cf) = {
416+ let ck = aV()
417+ let cl = aW()
418+ let cp = aX()
419+ let cq = aY()
420+ let cr = aD(cf, cp)
421+ let aL = cj(ck, cl)
422+ let cs = if (ce)
423+ then (ck + cr)
424+ else (ck - cr)
425+ let ct = toInt(aG(aL, toBigInt(cs)))
426+ let cu = aI((ct - cl))
427+ let cv = if (ce)
428+ then cu
429+ else -(cu)
430+ let cw = cd(ce, cr, cu)
431+ let cx = cw._1
432+ let cy = cw._2
433+ let cz = cw._3
434+ let cA = aD(aF(ck, cp), aF(cl, cq))
435+ let cB = aD(cf, cu)
436+ let cC = aI((cA - cB))
437+ let cD = (au - aD(cA, (cA + cC)))
438+ let cE = bl()
439+ if ((cD > cE))
440+ then throw(((((((((((((("Price impact " + toString(cD)) + " > max price impact ") + toString(cE)) + " before quote asset: ") + toString(ck)) + " before base asset: ") + toString(cl)) + " quote asset amount to exchange: ") + toString(cf)) + " price before: ") + toString(cA)) + " marketPrice: ") + toString(cB)))
441+ else $Tuple4(cv, cx, cy, cz)
474442 }
475443
476444
477-func cS (cT,cU) = {
478- let cV = ((((bJ() - cU) / 1000) / 60) * aD)
479- let cW = aK(aM(aM(cT, cV), bh()), aE)
480- cW
445+func cF (cG,cH) = {
446+ let cI = ((((bw() - cH) / 1000) / 60) * au)
447+ let cJ = aD(aF(aF(cG, cI), aT()), av)
448+ cJ
481449 }
482450
483451
484-func cX (cY,cT,cZ,cU,da) = {
485- let db = if ((cY != 0))
452+func cK (cL,cG,cM,cH,cN) = {
453+ let cO = if ((cL != 0))
486454 then {
487- let dc = bR(cY)
488- aM((dc - cZ), cY)
455+ let cP = bE(cL)
456+ aF((cP - cM), cL)
489457 }
490458 else 0
491- let cW = cS(cT, cU)
492- let dd = (((da - cW) - db) + cT)
493- let de = if ((0 > dd))
494- then $Tuple2(0, aP(dd))
495- else $Tuple2(aP(dd), 0)
496- let df = de._1
497- let dg = de._2
498- $Tuple4(df, dg, db, cW)
459+ let cJ = cF(cG, cH)
460+ let cQ = (((cN - cJ) - cO) + cG)
461+ let cR = if ((0 > cQ))
462+ then $Tuple2(0, aI(cQ))
463+ else $Tuple2(aI(cQ), 0)
464+ let cS = cR._1
465+ let cT = cR._2
466+ $Tuple4(cS, cT, cO, cJ)
499467 }
500468
501469
502-func dh (cr,ct,di,dj,dk,dl,dm) = {
503- let cN = aK(aM(dj, dk), aM(dl, dm))
504- if ((ct == 0))
470+func cU (ce,cg,cV,cW,cX,cY,cZ) = {
471+ let cA = aD(aF(cW, cX), aF(cY, cZ))
472+ if ((cg == 0))
505473 then throw("Invalid base asset amount")
506474 else {
507- let aZ = cw(dj, dl)
508- let dn = if (cr)
509- then (dl + ct)
510- else (dl - ct)
511- let do = toInt(aN(aZ, toBigInt(dn)))
512- let dp = aP((do - dj))
513- let dq = aM(dp, dk)
514- let cR = bz()
515- let dr = cq(!(cr), dp, ct)
516- let cK = dr._1
517- let cL = dr._2
518- let cM = dr._3
519- let cO = aK(dq, ct)
520- let cP = aP((cN - cO))
521- let cQ = (aD - aK(cN, (cN + cP)))
522- if (if ((cQ > cR))
523- then di
475+ let aL = cj(cW, cY)
476+ let da = if (ce)
477+ then (cY + cg)
478+ else (cY - cg)
479+ let db = toInt(aG(aL, toBigInt(da)))
480+ let dc = aI((db - cW))
481+ let dd = aF(dc, cX)
482+ let cE = bl()
483+ let de = cd(!(ce), dc, cg)
484+ let cx = de._1
485+ let cy = de._2
486+ let cz = de._3
487+ let cB = aD(dd, cg)
488+ let cC = aI((cA - cB))
489+ let cD = (au - aD(cA, (cA + cC)))
490+ if (if ((cD > cE))
491+ then cV
524492 else false)
525- then throw(((((((((((((("Price impact " + toString(cQ)) + " > max price impact ") + toString(cR)) + " before quote asset: ") + toString(dj)) + " before base asset: ") + toString(dl)) + " base asset amount to exchange: ") + toString(ct)) + " price before: ") + toString(cN)) + " market price: ") + toString(cO)))
526- else $Tuple7(dq, cK, cL, cM, (bF() - (if (cr)
527- then aP(ct)
528- else 0)), (bE() - (if (!(cr))
529- then aP(ct)
530- else 0)), cQ)
493+ then throw(((((((((((((("Price impact " + toString(cD)) + " > max price impact ") + toString(cE)) + " before quote asset: ") + toString(cW)) + " before base asset: ") + toString(cY)) + " base asset amount to exchange: ") + toString(cg)) + " price before: ") + toString(cA)) + " market price: ") + toString(cB)))
494+ else $Tuple7(dd, cx, cy, cz, (br() - (if (ce)
495+ then aI(cg)
496+ else 0)), (bq() - (if (!(ce))
497+ then aI(cg)
498+ else 0)), cD)
531499 }
532500 }
533501
534502
535-func ds (cr,ct,di) = dh(cr, ct, di, bj(), bl(), bk(), bm())
503+func df (ce,cg,cV) = cU(ce, cg, cV, aV(), aX(), aW(), aY())
536504
537505
538-func dt (du,ck,cl) = {
539- let dv = valueOrErrorMessage(getInteger(du, ck), ((("Can not get oracle price. Oracle: " + toString(du)) + " key: ") + ck))
540- if ((cl != ""))
506+func dg (dh,bX,bY) = {
507+ let di = valueOrErrorMessage(getInteger(dh, bX), ((("Can not get oracle price. Oracle: " + toString(dh)) + " key: ") + bX))
508+ if ((bY != ""))
541509 then {
542- let dw = lastBlock.height
543- let dx = valueOrErrorMessage(getInteger(du, cl), ((("Can not get oracle block. Oracle: " + toString(du)) + " key: ") + cl))
544- if (((dw - dx) > bI()))
545- then throw(((("Oracle stale data. Last oracle block: " + toString(dx)) + " current block: ") + toString(dw)))
546- else dv
510+ let dj = lastBlock.height
511+ let dk = valueOrErrorMessage(getInteger(dh, bY), ((("Can not get oracle block. Oracle: " + toString(dh)) + " key: ") + bY))
512+ if (((dj - dk) > bu()))
513+ then throw(((("Oracle stale data. Last oracle block: " + toString(dk)) + " current block: ") + toString(dj)))
514+ else di
547515 }
548- else dv
516+ else di
549517 }
550518
551519
552-func dy () = {
553- let dz = valueOrErrorMessage(cf(a), "No base asset oracle data")
554- let dA = dt(dz._1, dz._2, dz._3)
555- let dB = cf(b)
556- let dC = if (isDefined(dB))
520+func dl () = {
521+ let dm = valueOrErrorMessage(bS(a), "No base asset oracle data")
522+ let dn = dg(dm._1, dm._2, dm._3)
523+ let do = bS(b)
524+ let dp = if (isDefined(do))
557525 then {
558- let dD = value(dB)
559- dt(dD._1, dD._2, dD._3)
526+ let dq = value(do)
527+ dg(dq._1, dq._2, dq._3)
560528 }
561- else aD
562- aK(dA, dC)
529+ else au
530+ aD(dn, dp)
563531 }
564532
565533
566-func dE () = {
567- let dz = valueOrErrorMessage(cf(a), "No base asset oracle data")
568- let du = dz._1
569- let cm = dz._4
570- if ((cm != ""))
534+func dr () = {
535+ let dm = valueOrErrorMessage(bS(a), "No base asset oracle data")
536+ let dh = dm._1
537+ let bZ = dm._4
538+ if ((bZ != ""))
571539 then {
572- let dF = valueOrErrorMessage(getBoolean(du, cm), ((("Can not get oracle is open/closed. Oracle: " + toString(du)) + " key: ") + cm))
573- !(dF)
540+ let ds = valueOrErrorMessage(getBoolean(dh, bZ), ((("Can not get oracle is open/closed. Oracle: " + toString(dh)) + " key: ") + bZ))
541+ !(ds)
574542 }
575543 else false
576544 }
577545
578546
579-func dG (dH,dj,dl,cC,cD) = {
580- let dI = aK(aM(dj, cC), aM(dl, cD))
581- let dJ = aK((dH + dI), (2 * aD))
582- let dG = aK(aP((dH - dI)), dJ)
583- dG
547+func dt (du,cW,cY,cp,cq) = {
548+ let dv = aD(aF(cW, cp), aF(cY, cq))
549+ let dw = aD((du + dv), (2 * au))
550+ let dt = aD(aI((du - dv)), dw)
551+ dt
584552 }
585553
586554
587-func dK (dj,dl) = {
588- let dL = dy()
589- let cC = bl()
590- let cD = bm()
591- let dM = dG(dL, bj(), bk(), cC, cD)
592- let dN = dG(dL, dj, dl, cC, cD)
593- if (if ((dN > bA()))
594- then (dN > dM)
555+func dx (cW,cY) = {
556+ let dy = dl()
557+ let cp = aX()
558+ let cq = aY()
559+ let dz = dt(dy, aV(), aW(), cp, cq)
560+ let dA = dt(dy, cW, cY, cp, cq)
561+ if (if ((dA > bm()))
562+ then (dA > dz)
595563 else false)
596- then throw(((("Price spread " + toString(dN)) + " > max price spread ") + toString(bA())))
564+ then throw(((("Price spread " + toString(dA)) + " > max price spread ") + toString(bm())))
597565 else true
598566 }
599567
600568
601-func dO (dP,dQ) = {
602- let dR = bB()
603- if ((dP > dR))
604- then throw(((("Long open notional " + toString(dP)) + " > max open notional ") + toString(dR)))
605- else if ((dQ > dR))
606- then throw(((("Short open notional " + toString(dQ)) + " > max open notional ") + toString(dR)))
569+func dB (dC,dD) = {
570+ let dE = bn()
571+ if ((dC > dE))
572+ then throw(((("Long open notional " + toString(dC)) + " > max open notional ") + toString(dE)))
573+ else if ((dD > dE))
574+ then throw(((("Short open notional " + toString(dD)) + " > max open notional ") + toString(dE)))
607575 else true
608576 }
609577
610578
611-func dS () = {
612- let dj = bj()
613- let dl = bk()
614- let cC = bl()
615- let cD = bm()
616- aK(aM(dj, cC), aM(dl, cD))
579+func dF () = {
580+ let cW = aV()
581+ let cY = aW()
582+ let cp = aX()
583+ let cq = aY()
584+ aD(aF(cW, cp), aF(cY, cq))
617585 }
618586
619587
620-func dT () = {
621- let dL = dy()
622- let dU = dS()
623- (aK(aP((dL - dU)), dL) > by())
588+func dG () = {
589+ let dy = dl()
590+ let dH = dF()
591+ (aD(aI((dy - dH)), dy) > bk())
624592 }
625593
626594
627-func dV (bS,dW,dj,dk,dl,dm) = {
628- let dX = aP(bS)
629- let dY = (0 > bS)
630- let dZ = if ((dW == aG))
595+func dI (bF,dJ,cW,cX,cY,cZ) = {
596+ let dK = aI(bF)
597+ let dL = (0 > bF)
598+ let dM = if ((dJ == ax))
631599 then {
632- let ea = dh(!(dY), dX, false, dj, dk, dl, dm)._1
633- ea
600+ let dN = cU(!(dL), dK, false, cW, cX, cY, cZ)._1
601+ dN
634602 }
635- else aM(dX, dy())
636- dZ
603+ else aF(dK, dl())
604+ dM
637605 }
638606
639607
640-func eb (bS,ec,dj,dk,dl,dm,dW) = if ((bS == 0))
608+func dO (bF,dP,cW,cX,cY,cZ,dJ) = if ((bF == 0))
641609 then throw("Invalid position size")
642610 else {
643- let dY = (0 > bS)
644- let dZ = dV(bS, dW, dj, dk, dl, dm)
645- let ed = if (dY)
646- then (ec - dZ)
647- else (dZ - ec)
648- $Tuple2(dZ, ed)
611+ let dL = (0 > bF)
612+ let dM = dI(bF, dJ, cW, cX, cY, cZ)
613+ let dQ = if (dL)
614+ then (dP - dM)
615+ else (dM - dP)
616+ $Tuple2(dM, dQ)
649617 }
650618
651619
652-func ee (bU,dW) = {
653- let ef = bT(bU)
654- let bX = ef._1
655- let eg = ef._2
656- let eh = ef._3
657- let ei = ef._4
658- eb(bX, eh, bj(), bl(), bk(), bm(), dW)
620+func dR (bH,bI,dJ) = {
621+ let dS = bG(bH, bI)
622+ let bM = dS._1
623+ let dT = dS._2
624+ let dU = dS._3
625+ let dV = dS._4
626+ dO(bM, dU, aV(), aX(), aW(), aY(), dJ)
659627 }
660628
661629
662-func ej (ek,el,em) = aK((ek - el), em)
630+func dW (dX,dY,dZ) = aD((dX - dY), dZ)
663631
664632
665-func en (bU,dW) = {
666- let eo = bT(bU)
667- let bX = eo._1
668- let eg = eo._2
669- let ep = eo._3
670- let eq = eo._4
671- let er = eo._5
672- let es = ee(bU, dW)
673- let dZ = es._1
674- let ed = es._2
675- let et = cX(bX, eg, eq, er, ed)
676- let df = et._1
677- let dg = et._2
678- ej(df, dg, dZ)
633+func ea (bH,bI,dJ) = {
634+ let eb = bG(bH, bI)
635+ let bM = eb._1
636+ let dT = eb._2
637+ let ec = eb._3
638+ let ed = eb._4
639+ let ee = eb._5
640+ let ef = dR(bH, bI, dJ)
641+ let dM = ef._1
642+ let dQ = ef._2
643+ let eg = cK(bM, dT, ed, ee, dQ)
644+ let cS = eg._1
645+ let cT = eg._2
646+ dW(cS, cT, dM)
679647 }
680648
681649
682-func eu (bU) = en(bU, aG)
650+func eh (bH,bI) = ea(bH, bI, ax)
683651
684652
685-func ev (bU,bS) = {
686- let ew = aQ(bx(), (aD - aK(eu(bU), bv())))
687- let ex = aM(aP(bS), ew)
688- let ey = ds((bS > 0), ex, false)
689- let ez = ey._1
690- let cQ = ey._7
691- if ((bz() > cQ))
692- then ex
693- else aM(aP(bS), bx())
653+func ei (bH,bF) = {
654+ let ej = aJ(bj(), (au - aD(eh(bH, bN(bF)), bh())))
655+ let ek = aF(aI(bF), ej)
656+ let el = df((bF > 0), ek, false)
657+ let em = el._1
658+ let cD = el._7
659+ if ((bl() > cD))
660+ then ek
661+ else aF(aI(bF), bj())
694662 }
695663
696664
697-func eA (bU,eB,eC,eD,eE,di,eF) = {
698- let eG = bT(bU)
699- let eH = eG._1
700- let eI = eG._2
701- let eJ = eG._3
702- let eK = eG._4
703- let eL = eG._5
704- let eM = (eH > 0)
705- let eN = aP(eH)
706- if (if ((eN >= eB))
707- then (eB > 0)
665+func en (bH,bI,eo,ep,eq,er,cV,es) = {
666+ let et = bG(bH, bI)
667+ let eu = et._1
668+ let ev = et._2
669+ let ew = et._3
670+ let ex = et._4
671+ let ey = et._5
672+ let ez = (eu > 0)
673+ let eA = aI(eu)
674+ if (if ((eA >= eo))
675+ then (eo > 0)
708676 else false)
709677 then {
710- let eO = (eN > eB)
711- let eP = ds((eH > 0), eB, di)
712- let eQ = eP._1
713- let cF = eP._2
714- let cG = eP._3
715- let eR = eP._4
716- let eS = if ((eH > 0))
717- then -(eB)
718- else eB
719- let eT = ee(bU, aG)
678+ let eB = (eA > eo)
679+ let eC = df((eu > 0), eo, cV)
680+ let eD = eC._1
681+ let cs = eC._2
682+ let ct = eC._3
683+ let eE = eC._4
684+ let eF = if ((eu > 0))
685+ then -(eo)
686+ else eo
687+ let eG = dR(bH, bI, ax)
688+ let eH = eG._1
689+ let dQ = eG._2
690+ let eI = aD(aI(eF), eA)
691+ let eJ = aF(dQ, eI)
692+ let eK = cK(eu, ev, ex, ey, dQ)
693+ let eL = eK._1
694+ let eM = eK._2
695+ let eN = eK._3
696+ let cJ = eK._4
697+ let eO = cK(eu, ev, ex, ey, eJ)._2
698+ let eP = aF(aF(eH, eI), ep)
699+ let eQ = (dQ - eJ)
700+ let eR = if ((eu > 0))
701+ then ((eH - eD) - eQ)
702+ else ((eQ + eH) - eD)
703+ let eS = (eu + eF)
704+ let eT = if ((eS == 0))
705+ then $Tuple2(0, 0)
706+ else $Tuple2(aI(eR), bE(eS))
720707 let eU = eT._1
721- let ed = eT._2
722- let eV = aK(aP(eS), eN)
723- let eW = aM(ed, eV)
724- let eX = cX(eH, eI, eK, eL, ed)
725- let eY = eX._1
726- let eZ = eX._2
727- let fa = eX._3
728- let cW = eX._4
729- let fb = cX(eH, eI, eK, eL, eW)._2
730- let fc = aM(aM(eU, eV), eC)
731- let fd = (ed - eW)
732- let fe = if ((eH > 0))
733- then ((eU - eQ) - fd)
734- else ((fd + eU) - eQ)
735- let ff = (eH + eS)
736- let fg = if ((ff == 0))
737- then $Tuple2(0, 0)
738- else $Tuple2(aP(fe), bR(ff))
739- let fh = fg._1
740- let fi = fg._2
741- let fj = (eJ - fh)
742- let fk = en(bU, aG)
743- let fl = if ((eH > 0))
744- then (aM((fh + fd), fk) - fd)
745- else (aM((fh - fd), fk) - fd)
746- let fm = ((eY - (fl + fd)) - fc)
747- let fn = if ((0 > fm))
748- then if (eF)
708+ let eV = eT._2
709+ let eW = (ew - eU)
710+ let eX = ea(bH, bI, ax)
711+ let eY = if ((eu > 0))
712+ then (aF((eU + eQ), eX) - eQ)
713+ else (aF((eU - eQ), eX) - eQ)
714+ let eZ = ((eL - (eY + eQ)) - eP)
715+ let fa = if ((0 > eZ))
716+ then if (es)
749717 then 0
750718 else throw("Invalid internalClosePosition params: unable to pay fee")
751- else fm
752- let fo = if (eE)
753- then (fl + fn)
754- else fl
755- if (if ((eD != 0))
756- then (eD > eQ)
719+ else eZ
720+ let fb = if (er)
721+ then (eY + fa)
722+ else eY
723+ if (if ((eq != 0))
724+ then (eq > eD)
757725 else false)
758- then throw(((("Limit error: " + toString(eQ)) + " < ") + toString(eD)))
759- else $Tuple17(ff, fo, fh, fi, fb, eW, if (if (eE)
760- then eO
726+ then throw(((("Limit error: " + toString(eD)) + " < ") + toString(eq)))
727+ else $Tuple17(eS, fb, eU, eV, eO, eJ, if (if (er)
728+ then eB
761729 else false)
762730 then 0
763- else fn, cF, cG, eR, (bo() - fj), (bF() - (if (eM)
764- then aP(eS)
765- else 0)), (bE() - (if (!(eM))
766- then aP(eS)
767- else 0)), (bq() - (if (eM)
768- then fj
769- else 0)), (bp() - (if (!(eM))
770- then fj
771- else 0)), (fc + cW), eQ)
731+ else fa, cs, ct, eE, (ba() - eW), (br() - (if (ez)
732+ then aI(eF)
733+ else 0)), (bq() - (if (!(ez))
734+ then aI(eF)
735+ else 0)), (bc() - (if (ez)
736+ then eW
737+ else 0)), (bb() - (if (!(ez))
738+ then eW
739+ else 0)), (eP + cJ), eD)
772740 }
773- else throw(((("Invalid internalClosePosition params: invalid position size: " + toString(eB)) + " max: ") + toString(eN)))
741+ else throw(((("Invalid internalClosePosition params: invalid position size: " + toString(eo)) + " max: ") + toString(eA)))
774742 }
775743
776744
777-func fp () = {
778- let fq = ((bJ() / 1000) / 60)
779- let fr = (fq - aA)
780- let fs = valueOrElse(getString(this, C), "")
781- let ft = split(fs, ",")
782- func fu (fv,fw) = if ((fr >= valueOrErrorMessage(parseInt(fw), ("getTwapSpotPrice: invalid int: " + fs))))
783- then (fv :+ parseIntValue(fw))
784- else fv
785-
786- let fx = {
787- let fy = ft
788- let fz = size(fy)
789- let fA = nil
790- func fB (fC,fD) = if ((fD >= fz))
791- then fC
792- else fu(fC, fy[fD])
793-
794- func fE (fC,fD) = if ((fD >= fz))
795- then fC
796- else throw("List size exceeds 20")
797-
798- fE(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fA, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
799- }
800- let fF = if ((size(fx) > 0))
801- then max(fx)
802- else valueOrErrorMessage(parseInt(ft[0]), ("getTwapSpotPrice: invalid int: " + fs))
803- let fG = valueOrElse(getInteger(this, D), 0)
804- let fH = valueOrElse(getInteger(this, ((E + "_") + toString(fG))), 0)
805- let fI = valueOrElse(getInteger(this, ((F + "_") + toString(fG))), 0)
806- let fJ = (fH + ((fq - fG) * fI))
807- let fK = valueOrElse(getInteger(this, ((E + "_") + toString(fF))), 0)
808- let fL = valueOrElse(getInteger(this, ((F + "_") + toString(fF))), 0)
809- let fM = (fK + ((fr - fF) * fL))
810- ((fJ - fM) / aA)
811- }
812-
813-
814-func fN () = {
815- let bS = bn()
816- if ((bS == 0))
817- then $Tuple2(bj(), bk())
745+func fc () = {
746+ let bF = aZ()
747+ if ((bF == 0))
748+ then $Tuple2(aV(), aW())
818749 else {
819- let fO = (bS > 0)
820- let fP = ds(fO, aP(bS), false)
821- let fQ = fP._1
822- let fR = fP._2
823- let fS = fP._3
824- $Tuple2(fR, fS)
750+ let fd = (bF > 0)
751+ let fe = df(fd, aI(bF), false)
752+ let ff = fe._1
753+ let fg = fe._2
754+ let fh = fe._3
755+ $Tuple2(fg, fh)
825756 }
826757 }
827758
828759
829-func fT (fU,bn,fV,fW) = {
830- let fX = toBigInt(fU)
831- let fY = toBigInt(bn)
832- let fZ = toBigInt(fV)
833- let ga = toBigInt(fW)
834- let aZ = aO(fZ, fX)
835- let gb = (fX + fY)
836- let gc = aN(aZ, gb)
837- let gd = aN(gc, gb)
838- let ge = aN(ga, gd)
839- toInt(ge)
760+func fi (fj,aZ,fk,fl) = {
761+ let fm = toBigInt(fj)
762+ let fn = toBigInt(aZ)
763+ let fo = toBigInt(fk)
764+ let fp = toBigInt(fl)
765+ let aL = aH(fo, fm)
766+ let fq = (fm + fn)
767+ let fr = aG(aL, fq)
768+ let fs = aG(fr, fq)
769+ let ft = aG(fp, fs)
770+ toInt(ft)
840771 }
841772
842773
843-func gf (gg,cx,cy) = {
844- let bS = bn()
845- if ((bS == 0))
774+func fu (fv,ck,cl) = {
775+ let bF = aZ()
776+ if ((bF == 0))
846777 then {
847- let gh = aK(aM(gg, cy), cx)
848- $Tuple3(gh, aD, 0)
778+ let fw = aD(aF(fv, cl), ck)
779+ $Tuple3(fw, au, 0)
849780 }
850781 else {
851- let fO = (bS > 0)
852- let fQ = ds(fO, aP(bS), false)._1
853- let gh = fT(cy, bS, cx, gg)
854- let gi = aD
855- let gj = eb(bS, fQ, cx, gh, cy, gi, aG)._2
856- $Tuple3(gh, gi, gj)
782+ let fd = (bF > 0)
783+ let ff = df(fd, aI(bF), false)._1
784+ let fw = fi(cl, bF, ck, fv)
785+ let fx = au
786+ let fy = dO(bF, ff, ck, fw, cl, fx, ax)._2
787+ $Tuple3(fw, fx, fy)
857788 }
858789 }
859790
860791
861-func gk () = {
862- let gl = dy()
863- let gm = fp()
864- let gn = (gm - gl)
865- if (if (if ((bE() == 0))
792+func fz () = {
793+ let fA = dl()
794+ let fB = dF()
795+ let fC = (fB - fA)
796+ if (if (if ((bq() == 0))
866797 then true
867- else (bF() == 0))
798+ else (br() == 0))
868799 then true
869- else dE())
870- then $Tuple2(0, 0)
871- else if ((0 > gn))
800+ else dr())
801+ then $Tuple3(0, 0, 0)
802+ else if ((0 > fC))
872803 then {
873- let go = aK(aM(gn, bt()), aF)
874- let gp = aK(aM(go, bE()), bF())
875- $Tuple2(go, gp)
804+ let fD = aD(aF(fC, bf()), aw)
805+ if ((bv() == az))
806+ then {
807+ let fE = aD(aF(fD, bq()), br())
808+ $Tuple3(fD, fE, 0)
809+ }
810+ else {
811+ let fF = aI(aF(fD, bq()))
812+ let fG = aI(aF(fD, br()))
813+ let fH = (fF - fG)
814+ $Tuple3(fD, fD, fH)
815+ }
876816 }
877817 else {
878- let gp = aK(aM(gn, bt()), aF)
879- let go = aK(aM(gp, bF()), bE())
880- $Tuple2(go, gp)
818+ let fE = aD(aF(fC, bf()), aw)
819+ if ((bv() == az))
820+ then {
821+ let fD = aD(aF(fE, br()), bq())
822+ $Tuple3(fD, fE, 0)
823+ }
824+ else {
825+ let fG = aI(aF(fE, br()))
826+ let fF = aI(aF(fE, bq()))
827+ let fH = (fG - fF)
828+ $Tuple3(fE, fE, fH)
829+ }
881830 }
882831 }
883832
884833
885-func gq (gr,gs) = {
886- let gt = bg()
887- let gu = aM(gt, gs)
888- let gv = if ((gr != ""))
834+func fI (fJ,fK) = {
835+ let fL = aS()
836+ let fM = aF(fL, fK)
837+ let fN = if ((fJ != ""))
889838 then {
890- let gw = bc(au(), ai(aw, gr))
891- if ((gw == ax))
839+ let fO = aO(am(), ab(ao, fJ))
840+ if ((fO == ap))
892841 then {
893- let gx = be(au(), ai(av, gr))
894- let gy = aM(gu, gx)
895- $Tuple2(gy, true)
842+ let fP = aQ(am(), ab(an, fJ))
843+ let fQ = aF(fM, fP)
844+ $Tuple2(fQ, true)
896845 }
897846 else throw("Invalid attached artifact")
898847 }
899- else $Tuple2(gu, false)
900- let gy = gv._1
901- let gz = gv._2
902- $Tuple2(gy, gz)
848+ else $Tuple2(fM, false)
849+ let fQ = fN._1
850+ let fR = fN._2
851+ $Tuple2(fQ, fR)
903852 }
904853
905854
906-func gA (bU,gB) = {
907- let eH = bT(bU)._1
908- if ((eH == 0))
909- then true
910- else (bY(bU) == gB)
911- }
912-
913-
914-func gC (bU,gB) = (bY(bU) == gB)
915-
916-
917-func gD (bU,gr) = {
918- let gE = invoke(ar(), "computeFeeDiscount", [bU], nil)
919- if ((gE == gE))
855+func fS (bH,fJ) = {
856+ let fT = invoke(aj(), "computeFeeDiscount", [bH], nil)
857+ if ((fT == fT))
920858 then {
921- let gF = {
922- let bW = gE
923- if ($isInstanceOf(bW, "Int"))
859+ let fU = {
860+ let bL = fT
861+ if ($isInstanceOf(bL, "Int"))
924862 then {
925- let gG = bW
926- gG
863+ let fV = bL
864+ fV
927865 }
928866 else throw("Invalid computeFeeDiscount result")
929867 }
930- let gH = gq(gr, gF)
931- let gy = gH._1
932- let gz = gH._2
933- $Tuple2(gy, gz)
868+ let fW = fI(fJ, fU)
869+ let fQ = fW._1
870+ let fR = fW._2
871+ $Tuple2(fQ, fR)
934872 }
935873 else throw("Strict value is not equal to itself.")
936874 }
937875
938876
939-func gI (bL) = {
940- let gJ = if ((size(bL.payments) > 1))
941- then toBase58String(valueOrErrorMessage(bL.payments[1].assetId, "Invalid artifactId"))
877+func fX (by) = {
878+ let fY = if ((size(by.payments) > 1))
879+ then toBase58String(valueOrErrorMessage(by.payments[1].assetId, "Invalid artifactId"))
942880 else ""
943- gJ
881+ fY
944882 }
945883
946884
947-func gK (gL) = {
948- let gM = aM(gL, bH())
949- let gN = (gL - gM)
950- $Tuple2(gM, gN)
885+func fZ (ga) = {
886+ let gb = aF(ga, bt())
887+ let gc = (ga - gb)
888+ $Tuple2(gb, gc)
951889 }
952890
953891
954-func gO (gP,gQ,gR,gS,eC,gT,gU,gV,gW,dR,gX,gY,gZ) = [IntegerEntry(s, gP), IntegerEntry(t, gQ), IntegerEntry(u, gR), IntegerEntry(r, gS), IntegerEntry(p, eC), IntegerEntry(w, gT), IntegerEntry(x, gU), IntegerEntry(v, gV), IntegerEntry(y, gW), IntegerEntry(z, dR), IntegerEntry(A, gX), IntegerEntry(B, gX), IntegerEntry(q, gZ)]
892+func gd (ge,gf,gg,gh,ep,gi,gj,gk,gl,dE,gm,gn,go,gp) = [IntegerEntry(r, ge), IntegerEntry(s, gf), IntegerEntry(t, gg), IntegerEntry(q, gh), IntegerEntry(o, ep), IntegerEntry(v, gi), IntegerEntry(w, gj), IntegerEntry(u, gk), IntegerEntry(x, gl), IntegerEntry(y, dE), IntegerEntry(z, gm), IntegerEntry(A, gm), IntegerEntry(p, go), IntegerEntry(B, gp)]
955893
956894
957-func ha (hb,hc,hd,he,hf) = [IntegerEntry(J, hb), IntegerEntry(H, hc), IntegerEntry(I, hd), IntegerEntry(K, he), IntegerEntry(L, hf)]
895+func gq (gr,gs,gt,gu,gv) = [IntegerEntry(E, gr), IntegerEntry(C, gs), IntegerEntry(D, gt), IntegerEntry(F, gu), IntegerEntry(G, gv)]
958896
959897
960-func hg (hh,ak) = if (hh)
961- then {
962- let hi = bG()
963-[IntegerEntry(ai(i, ak), (hi + 1)), IntegerEntry(d, (hi + 1))]
964- }
898+func gw (gx,bH,bI) = {
899+ let bJ = ((bH + "_") + toString(bI))
900+ if (gx)
901+ then {
902+ let gy = bs()
903+[IntegerEntry(ab(i, bJ), (gy + 1)), IntegerEntry(d, (gy + 1))]
904+ }
905+ else nil
906+ }
907+
908+
909+func gz (gx,bH,bI,ep) = {
910+ let bJ = ((bH + "_") + toString(bI))
911+ if (gx)
912+ then [IntegerEntry(ab(j, bJ), ep)]
913+ else nil
914+ }
915+
916+
917+func gA (bH,eo,gB,gC,cP,gD) = {
918+ let fd = bN(eo)
919+ let bJ = ((bH + "_") + toString(fd))
920+[IntegerEntry(ab(e, bJ), eo), IntegerEntry(ab(f, bJ), gB), IntegerEntry(ab(g, bJ), gC), IntegerEntry(ab(h, bJ), cP), IntegerEntry(ab(k, bJ), gD)]
921+ }
922+
923+
924+func gE (ck,cl) = [IntegerEntry(H, ck), IntegerEntry(I, cl)]
925+
926+
927+func gF (cp,cq) = [IntegerEntry(J, cp), IntegerEntry(K, cq)]
928+
929+
930+func gG (ck,cl,gH,gI,gJ,gK,gL,gM) = {
931+ let cp = aX()
932+ let cq = aY()
933+ if (((gJ - gK) != gH))
934+ then throw(((((("Invalid AMM state data: " + toString(gJ)) + " + ") + toString(gK)) + " != ") + toString(gH)))
935+ else (gE(ck, cl) ++ [IntegerEntry(L, gH), IntegerEntry(O, gI), IntegerEntry(M, gJ), IntegerEntry(N, gK), IntegerEntry(Q, gL), IntegerEntry(P, gM)])
936+ }
937+
938+
939+func gN (bH,bI) = {
940+ let bJ = ((bH + "_") + toString(bI))
941+[DeleteEntry(ab(e, bJ)), DeleteEntry(ab(f, bJ)), DeleteEntry(ab(g, bJ)), DeleteEntry(ab(h, bJ)), DeleteEntry(ab(j, bJ)), DeleteEntry(ab(k, bJ))]
942+ }
943+
944+
945+func gO (ad,gP) = {
946+ let gQ = assetBalance(this, ag())
947+ if ((gP > gQ))
948+ then throw(((("Unable to withdraw " + toString(gP)) + " from contract balance ") + toString(gQ)))
949+ else [ScriptTransfer(ad, gP, ag())]
950+ }
951+
952+
953+func gR (by) = if ((0 > by))
954+ then throw("Balance")
955+ else [IntegerEntry(c, by)]
956+
957+
958+func gS (by) = [ScriptTransfer(ah(), by, ag())]
959+
960+
961+func gT (gU,by) = if (gU)
962+ then [Burn(valueOrErrorMessage(by.payments[1].assetId, "Invalid artifact"), 1)]
965963 else nil
966964
967965
968-func hj (hh,ak,eC) = if (hh)
969- then [IntegerEntry(ai(k, ak), eC)]
970- else nil
966+@Callable(by)
967+func pause () = if ((by.caller != af()))
968+ then throw("Invalid pause params")
969+ else [BooleanEntry(m, true)]
971970
972971
973-func hk (ak,eB,hl,hm,dc,hn) = [IntegerEntry(ai(e, ak), eB), IntegerEntry(ai(f, ak), hl), IntegerEntry(ai(g, ak), hm), IntegerEntry(ai(h, ak), dc), IntegerEntry(ai(l, ak), hn)]
972+
973+@Callable(by)
974+func unpause () = if ((by.caller != af()))
975+ then throw("Invalid unpause params")
976+ else [BooleanEntry(m, false)]
974977
975978
976-func ho (hp) = {
977- let fq = ((bJ() / 1000) / 60)
978- let hq = valueOrElse(getInteger(this, D), 0)
979- if ((hq > fq))
980- then throw("TWAP out-of-order")
981- else {
982- let fG = if ((hq == 0))
983- then fq
984- else hq
985- if ((fq > hq))
986- then {
987- let hr = valueOrElse(getInteger(this, ((E + "_") + toString(hq))), 0)
988- let hs = valueOrElse(getInteger(this, ((F + "_") + toString(hq))), hp)
989- let ht = (hr + ((fq - fG) * hs))
990- let ft = aV(aT(valueOrElse(getString(this, C), "")), aA, toString(fq))
991-[IntegerEntry(ai(E, toString(fq)), ht), IntegerEntry(ai(F, toString(fq)), hp), IntegerEntry(ai(G, toString(fq)), hq), IntegerEntry(D, fq), StringEntry(C, aR(ft))]
992- }
993- else {
994- let hu = valueOrElse(getInteger(this, ai(G, toString(fq))), 0)
995- let hr = valueOrElse(getInteger(this, ai(E, toString(hu))), 0)
996- let hs = valueOrElse(getInteger(this, ai(F, toString(hu))), hp)
997- let ht = (hr + ((fq - hu) * hs))
998-[IntegerEntry(ai(E, toString(fq)), ht), IntegerEntry(ai(F, toString(fq)), hp)]
999- }
1000- }
1001- }
1002979
1003-
1004-func hv (cx,cy) = [IntegerEntry(M, cx), IntegerEntry(N, cy)]
1005-
1006-
1007-func hw (cC,cD) = [IntegerEntry(O, cC), IntegerEntry(P, cD)]
1008-
1009-
1010-func hx (cx,cy,hy,hz,hA,hB,hC,hD) = {
1011- let cC = bl()
1012- let cD = bm()
1013- if (((hA - hB) != hy))
1014- then throw(((((("Invalid AMM state data: " + toString(hA)) + " + ") + toString(hB)) + " != ") + toString(hy)))
1015- else ((hv(cx, cy) ++ [IntegerEntry(Q, hy), IntegerEntry(T, hz), IntegerEntry(R, hA), IntegerEntry(S, hB), IntegerEntry(V, hC), IntegerEntry(U, hD)]) ++ ho(aK(aM(cx, cC), aM(cy, cD))))
1016- }
1017-
1018-
1019-func hE (ak) = [DeleteEntry(ai(e, ak)), DeleteEntry(ai(f, ak)), DeleteEntry(ai(g, ak)), DeleteEntry(ai(h, ak)), DeleteEntry(ai(j, ak)), DeleteEntry(ai(k, ak)), DeleteEntry(ai(l, ak))]
1020-
1021-
1022-func hF (ak,hG) = {
1023- let hH = assetBalance(this, an())
1024- if ((hG > hH))
1025- then throw(((("Unable to withdraw " + toString(hG)) + " from contract balance ") + toString(hH)))
1026- else [ScriptTransfer(ak, hG, an())]
1027- }
1028-
1029-
1030-func hI (bL) = if ((0 > bL))
1031- then throw("Balance")
1032- else [IntegerEntry(c, bL)]
1033-
1034-
1035-func hJ (bL) = [ScriptTransfer(ap(), bL, an())]
1036-
1037-
1038-func hK (hL,bL) = if (hL)
1039- then [Burn(valueOrErrorMessage(bL.payments[1].assetId, "Invalid artifact"), 1)]
1040- else nil
1041-
1042-
1043-@Callable(bL)
1044-func pause () = if ((bL.caller != am()))
1045- then throw("Invalid pause params")
980+@Callable(by)
981+func setCloseOnly () = if ((by.caller != af()))
982+ then throw("Invalid setCloseOnly params")
1046983 else [BooleanEntry(n, true)]
1047984
1048985
1049986
1050-@Callable(bL)
1051-func unpause () = if ((bL.caller != am()))
1052- then throw("Invalid unpause params")
987+@Callable(by)
988+func unsetCloseOnly () = if ((by.caller != af()))
989+ then throw("Invalid unsetCloseOnly params")
1053990 else [BooleanEntry(n, false)]
1054991
1055992
1056993
1057-@Callable(bL)
1058-func setCloseOnly () = if ((bL.caller != am()))
1059- then throw("Invalid setCloseOnly params")
1060- else [BooleanEntry(o, true)]
1061-
1062-
1063-
1064-@Callable(bL)
1065-func unsetCloseOnly () = if ((bL.caller != am()))
1066- then throw("Invalid unsetCloseOnly params")
1067- else [BooleanEntry(o, false)]
1068-
1069-
1070-
1071-@Callable(bL)
1072-func addLiquidity (cs) = if (if ((bL.caller != am()))
994+@Callable(by)
995+func addLiquidity (cf) = if (if ((by.caller != af()))
1073996 then true
1074- else (0 >= cs))
997+ else (0 >= cf))
1075998 then throw("Invalid addLiquidity params")
1076999 else {
1077- let cx = bj()
1078- let cy = bk()
1079- let cC = bl()
1080- let cD = bm()
1081- let hM = aK(aM(cx, cC), aM(cy, cD))
1082- let hN = (cx + cs)
1083- let hO = (aK(aM(hN, cC), hM) - cy)
1084- let hP = (cy + hO)
1085- let hQ = gf(dy(), hN, hP)
1086- let hR = hQ._1
1087- let hS = hQ._2
1088- let gj = hQ._3
1089- let hT = if ((gj != 0))
1000+ let ck = aV()
1001+ let cl = aW()
1002+ let cp = aX()
1003+ let cq = aY()
1004+ let gV = aD(aF(ck, cp), aF(cl, cq))
1005+ let gW = (ck + cf)
1006+ let gX = (aD(aF(gW, cp), gV) - cl)
1007+ let gY = (cl + gX)
1008+ let gZ = fu(dl(), gW, gY)
1009+ let ha = gZ._1
1010+ let hb = gZ._2
1011+ let fy = gZ._3
1012+ let hc = if ((fy != 0))
10901013 then {
1091- let hT = invoke(aq(), "exchangeFreeAndLocked", [gj], nil)
1092- if ((hT == hT))
1014+ let hc = invoke(ai(), "exchangeFreeAndLocked", [fy], nil)
1015+ if ((hc == hc))
10931016 then nil
10941017 else throw("Strict value is not equal to itself.")
10951018 }
10961019 else nil
1097- if ((hT == hT))
1098- then (hv(hN, hP) ++ hw(hR, hS))
1020+ if ((hc == hc))
1021+ then (gE(gW, gY) ++ gF(ha, hb))
10991022 else throw("Strict value is not equal to itself.")
11001023 }
11011024
11021025
11031026
1104-@Callable(bL)
1105-func removeLiquidity (cs) = if (if ((bL.caller != am()))
1027+@Callable(by)
1028+func removeLiquidity (cf) = if (if ((by.caller != af()))
11061029 then true
1107- else (cs >= 0))
1030+ else (cf >= 0))
11081031 then throw("Invalid removeLiquidity params")
11091032 else {
1110- let cx = bj()
1111- let cy = bk()
1112- let cC = bl()
1113- let cD = bm()
1114- let hM = aK(aM(cx, cC), aM(cy, cD))
1115- let hN = (cx - cs)
1116- let hU = aP((aK(aM(hN, cC), hM) - cy))
1117- let hP = (cy - hU)
1118- let hV = gf(dy(), hN, hP)
1119- let hR = hV._1
1120- let hS = hV._2
1121- let gj = hV._3
1122- let hT = if ((gj != 0))
1033+ let ck = aV()
1034+ let cl = aW()
1035+ let cp = aX()
1036+ let cq = aY()
1037+ let gV = aD(aF(ck, cp), aF(cl, cq))
1038+ let gW = (ck - cf)
1039+ let hd = aI((aD(aF(gW, cp), gV) - cl))
1040+ let gY = (cl - hd)
1041+ let he = fu(dl(), gW, gY)
1042+ let ha = he._1
1043+ let hb = he._2
1044+ let fy = he._3
1045+ let hc = if ((fy != 0))
11231046 then {
1124- let hT = invoke(aq(), "exchangeFreeAndLocked", [gj], nil)
1125- if ((hT == hT))
1047+ let hc = invoke(ai(), "exchangeFreeAndLocked", [fy], nil)
1048+ if ((hc == hc))
11261049 then nil
11271050 else throw("Strict value is not equal to itself.")
11281051 }
11291052 else nil
1130- if ((hT == hT))
1131- then (hv(hN, hP) ++ hw(hR, hS))
1053+ if ((hc == hc))
1054+ then (gE(gW, gY) ++ gF(ha, hb))
11321055 else throw("Strict value is not equal to itself.")
11331056 }
11341057
11351058
11361059
1137-@Callable(bL)
1138-func changeSettings (gP,gQ,gR,gS,eC,gT,gU,gV,gW,dR,gX,gY,gZ) = if ((bL.caller != am()))
1060+@Callable(by)
1061+func changeSettings (ge,gf,gg,gh,ep,gi,gj,gk,gl,dE,gm,gn,go,gp) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= gh))
1062+ then true
1063+ else (0 >= ge))
1064+ then true
1065+ else (0 >= gf))
1066+ then true
1067+ else (0 >= gg))
1068+ then true
1069+ else (0 >= ep))
1070+ then true
1071+ else (0 >= gi))
1072+ then true
1073+ else (0 >= gj))
1074+ then true
1075+ else (0 >= gk))
1076+ then true
1077+ else (0 >= gl))
1078+ then true
1079+ else (0 >= dE))
1080+ then true
1081+ else (0 >= gm))
1082+ then true
1083+ else (gm > au))
1084+ then true
1085+ else (0 >= gn))
1086+ then true
1087+ else (0 >= go))
1088+ then true
1089+ else if ((gp != aA))
1090+ then (gp != az)
1091+ else false)
1092+ then true
1093+ else !(ca()))
1094+ then true
1095+ else (by.caller != af()))
11391096 then throw("Invalid changeSettings params")
1140- else gO(gP, gQ, gR, gS, eC, gT, gU, gV, gW, dR, gX, gY, gZ)
1097+ else gd(ge, gf, gg, gh, ep, gi, gj, gk, gl, dE, gm, gn, go, gp)
11411098
11421099
11431100
1144-@Callable(bL)
1145-func initialize (cx,cy,gS,gP,gQ,gR,eC,hW,hX,hY,gT,gU,gV,gW,dR,gX,gY,gZ) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cx))
1101+@Callable(by)
1102+func initialize (ck,cl,gh,ge,gf,gg,ep,hf,hg,hh,gi,gj,gk,gl,dE,gm,gn,go,gp) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= ck))
11461103 then true
1147- else (0 >= cy))
1104+ else (0 >= cl))
11481105 then true
1149- else (0 >= gS))
1106+ else (0 >= gh))
11501107 then true
1151- else (0 >= gP))
1108+ else (0 >= ge))
11521109 then true
1153- else (0 >= gQ))
1110+ else (0 >= gf))
11541111 then true
1155- else (0 >= gR))
1112+ else (0 >= gg))
11561113 then true
1157- else (0 >= eC))
1114+ else (0 >= ep))
11581115 then true
1159- else (0 >= gT))
1116+ else (0 >= gi))
11601117 then true
1161- else (0 >= gU))
1118+ else (0 >= gj))
11621119 then true
1163- else (0 >= gV))
1120+ else (0 >= gk))
11641121 then true
1165- else (0 >= gW))
1122+ else (0 >= gl))
11661123 then true
1167- else (0 >= dR))
1124+ else (0 >= dE))
11681125 then true
1169- else (0 >= gX))
1126+ else (0 >= gm))
11701127 then true
1171- else (gX > aD))
1128+ else (gm > au))
11721129 then true
1173- else (0 >= gY))
1130+ else (0 >= gn))
11741131 then true
1175- else (0 >= gZ))
1132+ else (0 >= go))
11761133 then true
1177- else cn())
1134+ else if ((gp != aA))
1135+ then (gp != az)
1136+ else false)
11781137 then true
1179- else (bL.caller != this))
1138+ else ca())
1139+ then true
1140+ else (by.caller != this))
11801141 then throw("Invalid initialize parameters")
1181- else ((((hx(cx, cy, 0, 0, 0, 0, 0, 0) ++ gO(gP, gQ, gR, gS, eC, gT, gU, gV, gW, dR, gX, gY, gZ)) ++ ha((bJ() + gS), 0, 0, 0, 0)) ++ hI(0)) ++ [BooleanEntry(m, true), StringEntry(a, hW), StringEntry(b, hX), StringEntry(X, toString(addressFromStringValue(hY)))])
1142+ else ((((gG(ck, cl, 0, 0, 0, 0, 0, 0) ++ gd(ge, gf, gg, gh, ep, gi, gj, gk, gl, dE, gm, gn, go, gp)) ++ gq((bw() + gh), 0, 0, 0, 0)) ++ gR(0)) ++ [BooleanEntry(l, true), StringEntry(a, hf), StringEntry(b, hg), StringEntry(S, toString(addressFromStringValue(hh)))])
11821143
11831144
11841145
1185-@Callable(bL)
1186-func increasePosition (hZ,ia,ib,ic) = {
1187- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1188- if ((id == id))
1146+@Callable(by)
1147+func increasePosition (bI,hi,hj,hk) = {
1148+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1149+ if ((hl == hl))
11891150 then {
1190- let ie = invoke(this, "ensureCalledOnce", nil, nil)
1191- if ((ie == ie))
1151+ let hm = invoke(this, "ensureCalledOnce", nil, nil)
1152+ if ((hm == hm))
11921153 then {
1193- let bU = bK(bL)
1194- let if = bL.payments[0].amount
1195- let gB = bL.payments[0].assetId
1196- let ig = toBase58String(value(gB))
1197- let ih = (gB == an())
1198- if (if (if (if (if (if (if (if (if (if ((hZ != ay))
1199- then (hZ != az)
1154+ let bH = bx(by)
1155+ let hn = by.payments[0].amount
1156+ let ho = by.payments[0].assetId
1157+ let hp = toBase58String(value(ho))
1158+ let hq = (ho == ag())
1159+ if (if (if (if (if (if (if (if (if ((bI != aq))
1160+ then (bI != ar)
12001161 else false)
12011162 then true
1202- else (0 >= if))
1163+ else (0 >= hn))
12031164 then true
1204- else !(cn()))
1165+ else !(ca()))
12051166 then true
1206- else !(ih))
1167+ else !(hq))
12071168 then true
1208- else !(gA(bU, ig)))
1169+ else !(bz(aD(au, hi), aU(), true)))
12091170 then true
1210- else !(bM(aK(aD, ia), bi(), true)))
1171+ else cb())
12111172 then true
1212- else co())
1173+ else cc())
12131174 then true
1214- else cp())
1215- then true
1216- else dE())
1175+ else dr())
12171176 then throw("Invalid increasePosition parameters")
12181177 else {
1219- let ii = gD(bU, gI(bL))
1220- let gy = ii._1
1221- let gz = ii._2
1222- let hG = aK(if, (aM(gy, ia) + aD))
1223- let ij = (if - hG)
1224- let ik = invoke(at(), "acceptPaymentWithLink", [bU, ic], [AttachedPayment(an(), ij)])
1225- if ((ik == ik))
1178+ let hr = fS(bH, fX(by))
1179+ let fQ = hr._1
1180+ let fR = hr._2
1181+ let gP = aD(hn, (aF(fQ, hi) + au))
1182+ let hs = (hn - gP)
1183+ let ht = invoke(al(), "acceptPaymentWithLink", [bH, hk], [AttachedPayment(ag(), hs)])
1184+ if ((ht == ht))
12261185 then {
1227- let il = {
1228- let bW = ik
1229- if ($isInstanceOf(bW, "Int"))
1186+ let hu = {
1187+ let bL = ht
1188+ if ($isInstanceOf(bL, "Int"))
12301189 then {
1231- let gG = bW
1232- gG
1190+ let fV = bL
1191+ fV
12331192 }
12341193 else throw("Invalid referrerFee")
12351194 }
1236- let im = (ij - il)
1237- let in = bT(bU)
1238- let eH = in._1
1239- let eI = in._2
1240- let eJ = in._3
1241- let eK = in._4
1242- let eL = in._5
1243- let io = (eH == 0)
1244- let ip = if ((eH > 0))
1245- then (hZ == ay)
1246- else (hZ == az)
1247- let iq = if (!(io))
1248- then ip
1195+ let hv = (hs - hu)
1196+ let hw = bG(bH, bI)
1197+ let eu = hw._1
1198+ let ev = hw._2
1199+ let ew = hw._3
1200+ let ex = hw._4
1201+ let ey = hw._5
1202+ let hx = (eu == 0)
1203+ let hy = if ((eu > 0))
1204+ then (bI == aq)
1205+ else (bI == ar)
1206+ let hz = if (!(hx))
1207+ then hy
12491208 else false
1250- let ir = (hZ == ay)
1251- let is = if (if (io)
1209+ let hA = (bI == aq)
1210+ let hB = if (if (hx)
12521211 then true
1253- else iq)
1212+ else hz)
12541213 then {
1255- let it = aM(hG, ia)
1256- let iu = cB(ir, it)
1257- let cI = iu._1
1258- let cF = iu._2
1259- let cG = iu._3
1260- let eR = iu._4
1261- if (if ((ib != 0))
1262- then (ib > aP(cI))
1214+ let hC = aF(gP, hi)
1215+ let hD = co(hA, hC)
1216+ let cv = hD._1
1217+ let cs = hD._2
1218+ let ct = hD._3
1219+ let eE = hD._4
1220+ if (if ((hj != 0))
1221+ then (hj > aI(cv))
12631222 else false)
1264- then throw(((("Limit error: " + toString(aP(cI))) + " < ") + toString(ib)))
1223+ then throw(((("Limit error: " + toString(aI(cv))) + " < ") + toString(hj)))
12651224 else {
1266- let ff = (eH + cI)
1267- let iv = (bq() + (if ((ff > 0))
1268- then it
1225+ let eS = (eu + cv)
1226+ let hE = (bc() + (if ((eS > 0))
1227+ then hC
12691228 else 0))
1270- let iw = (bp() + (if ((0 > ff))
1271- then it
1229+ let hF = (bb() + (if ((0 > eS))
1230+ then hC
12721231 else 0))
1273- let ix = cX(eH, eI, eK, eL, hG)
1274- let df = ix._1
1275- let eZ = ix._2
1276- let fa = ix._3
1277- let cW = ix._4
1278- if (!(dK(cF, cG)))
1232+ let hG = cK(eu, ev, ex, ey, gP)
1233+ let cS = hG._1
1234+ let eM = hG._2
1235+ let eN = hG._3
1236+ let cJ = hG._4
1237+ if (!(dx(cs, ct)))
12791238 then throw("Over max spread limit")
1280- else if (!(dO(iv, iw)))
1239+ else if (!(dB(hE, hF)))
12811240 then throw("Over max open notional")
1282- else $Tuple14(ff, df, (eJ + it), bR(ff), bJ(), cG, cF, eR, (bo() + it), (bF() + (if ((ff > 0))
1283- then aP(cI)
1284- else 0)), (bE() + (if ((0 > ff))
1285- then aP(cI)
1286- else 0)), iv, iw, cW)
1241+ else $Tuple14(eS, cS, (ew + hC), bE(eS), bw(), ct, cs, eE, (ba() + hC), (br() + (if ((eS > 0))
1242+ then aI(cv)
1243+ else 0)), (bq() + (if ((0 > eS))
1244+ then aI(cv)
1245+ else 0)), hE, hF, cJ)
12871246 }
12881247 }
12891248 else {
1290- let it = aM(hG, ia)
1291- let iy = ee(toString(bL.caller), aG)
1292- let eU = iy._1
1293- let ed = iy._2
1294- if ((eU > it))
1249+ let hC = aF(gP, hi)
1250+ let hH = dR(toString(by.caller), bI, ax)
1251+ let eH = hH._1
1252+ let dQ = hH._2
1253+ if ((eH > hC))
12951254 then throw("Use decreasePosition to decrease position size")
12961255 else throw("Close position first")
12971256 }
1298- let ff = is._1
1299- let iz = is._2
1300- let fh = is._3
1301- let iA = is._4
1302- let iB = is._5
1303- let cG = is._6
1304- let cF = is._7
1305- let eR = is._8
1306- let iC = is._9
1307- let iD = is._10
1308- let iE = is._11
1309- let iv = is._12
1310- let iw = is._13
1311- let cW = is._14
1312- let iF = gK((im + cW))
1313- let gM = iF._1
1314- let gN = iF._2
1315- let iG = if ((hG >= cW))
1316- then invoke(aq(), "addLocked", nil, [AttachedPayment(an(), (hG - cW))])
1317- else invoke(aq(), "withdrawLocked", [(cW - hG)], nil)
1318- if ((iG == iG))
1257+ let eS = hB._1
1258+ let hI = hB._2
1259+ let eU = hB._3
1260+ let hJ = hB._4
1261+ let hK = hB._5
1262+ let ct = hB._6
1263+ let cs = hB._7
1264+ let eE = hB._8
1265+ let hL = hB._9
1266+ let hM = hB._10
1267+ let hN = hB._11
1268+ let hE = hB._12
1269+ let hF = hB._13
1270+ let cJ = hB._14
1271+ let hO = fZ((hv + cJ))
1272+ let gb = hO._1
1273+ let gc = hO._2
1274+ let hP = if ((gP >= cJ))
1275+ then invoke(ai(), "addLocked", nil, [AttachedPayment(ag(), (gP - cJ))])
1276+ else invoke(ai(), "withdrawLocked", [(cJ - gP)], nil)
1277+ if ((hP == hP))
13191278 then {
1320- let iH = invoke(aq(), "addFree", nil, [AttachedPayment(an(), gN)])
1321- if ((iH == iH))
1279+ let hQ = invoke(ai(), "addFree", nil, [AttachedPayment(ag(), gc)])
1280+ if ((hQ == hQ))
13221281 then {
1323- let iI = invoke(ar(), "notifyFees", [bU, im], nil)
1324- if ((iI == iI))
1282+ let hR = invoke(aj(), "notifyFees", [bH, hv], nil)
1283+ if ((hR == hR))
13251284 then {
1326- let iJ = invoke(ar(), "notifyNotional", [bU, fh], nil)
1327- if ((iJ == iJ))
1328- then ((((((hk(bU, ff, iz, fh, iA, iB) ++ hg(io, bU)) ++ hj(io, bU, gy)) ++ hx(cF, cG, eR, iC, iD, iE, iv, iw)) ++ hJ(gM)) ++ hI(((bf() + hG) - cW))) ++ hK(gz, bL))
1285+ let hS = invoke(aj(), "notifyNotional", [bH, eU], nil)
1286+ if ((hS == hS))
1287+ then ((((((gA(bH, eS, hI, eU, hJ, hK) ++ gw(hx, bH, bI)) ++ gz(hx, bH, bI, fQ)) ++ gG(cs, ct, eE, hL, hM, hN, hE, hF)) ++ gS(gb)) ++ gR(((aR() + gP) - cJ))) ++ gT(fR, by))
13291288 else throw("Strict value is not equal to itself.")
13301289 }
13311290 else throw("Strict value is not equal to itself.")
13441303
13451304
13461305
1347-@Callable(bL)
1348-func addMargin () = {
1349- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1350- if ((id == id))
1306+@Callable(by)
1307+func addMargin (bI) = {
1308+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1309+ if ((hl == hl))
13511310 then {
1352- let ie = invoke(this, "ensureCalledOnce", nil, nil)
1353- if ((ie == ie))
1311+ let hm = invoke(this, "ensureCalledOnce", nil, nil)
1312+ if ((hm == hm))
13541313 then {
1355- let bU = toString(bL.caller)
1356- let hG = bL.payments[0].amount
1357- let gB = bL.payments[0].assetId
1358- let ig = toBase58String(value(gB))
1359- let ih = (gB == an())
1360- if (if (if (if (if (if (if (!(ih))
1314+ let bH = toString(by.caller)
1315+ let gP = by.payments[0].amount
1316+ let ho = by.payments[0].assetId
1317+ let hp = toBase58String(value(ho))
1318+ let hq = (ho == ag())
1319+ if (if (if (if (if (!(hq))
13611320 then true
1362- else !(ce(toString(bL.caller))))
1321+ else !(bR(toString(by.caller), bI)))
13631322 then true
1364- else !(gC(bU, ig)))
1323+ else !(ca()))
13651324 then true
1366- else !(cn()))
1325+ else cb())
13671326 then true
1368- else co())
1369- then true
1370- else cp())
1371- then true
1372- else dE())
1327+ else dr())
13731328 then throw("Invalid addMargin parameters")
13741329 else {
1375- let iK = bT(bU)
1376- let eH = iK._1
1377- let eI = iK._2
1378- let eJ = iK._3
1379- let eK = iK._4
1380- let eL = iK._5
1381- let iG = invoke(aq(), "addLocked", nil, [AttachedPayment(an(), hG)])
1382- if ((iG == iG))
1330+ let hT = bG(bH, bI)
1331+ let eu = hT._1
1332+ let ev = hT._2
1333+ let ew = hT._3
1334+ let ex = hT._4
1335+ let ey = hT._5
1336+ let hP = invoke(ai(), "addLocked", nil, [AttachedPayment(ag(), gP)])
1337+ if ((hP == hP))
13831338 then {
1384- let cW = cS(eI, eL)
1385- let iL = if ((cW > 0))
1339+ let cJ = cF(ev, ey)
1340+ let hU = if ((cJ > 0))
13861341 then {
1387- let iM = gK(cW)
1388- let gM = iM._1
1389- let gN = iM._2
1390- let iN = invoke(aq(), "withdrawLocked", [gM], nil)
1391- if ((iN == iN))
1342+ let hV = fZ(cJ)
1343+ let gb = hV._1
1344+ let gc = hV._2
1345+ let hW = invoke(ai(), "withdrawLocked", [gb], nil)
1346+ if ((hW == hW))
13921347 then {
1393- let iO = invoke(aq(), "exchangeFreeAndLocked", [-(gN)], nil)
1394- if ((iO == iO))
1395- then hJ(gM)
1348+ let hX = invoke(ai(), "exchangeFreeAndLocked", [-(gc)], nil)
1349+ if ((hX == hX))
1350+ then gS(gb)
13961351 else throw("Strict value is not equal to itself.")
13971352 }
13981353 else throw("Strict value is not equal to itself.")
13991354 }
14001355 else nil
1401- if ((iL == iL))
1402- then ((hk(bU, eH, ((eI - cW) + hG), eJ, eK, bJ()) ++ hI(((bf() + hG) - cW))) ++ iL)
1356+ if ((hU == hU))
1357+ then ((gA(bH, eu, ((ev - cJ) + gP), ew, ex, bw()) ++ gR(((aR() + gP) - cJ))) ++ hU)
14031358 else throw("Strict value is not equal to itself.")
14041359 }
14051360 else throw("Strict value is not equal to itself.")
14121367
14131368
14141369
1415-@Callable(bL)
1416-func removeMargin (hG) = {
1417- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1418- if ((id == id))
1370+@Callable(by)
1371+func removeMargin (gP,bI) = {
1372+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1373+ if ((hl == hl))
14191374 then {
1420- let ie = invoke(this, "ensureCalledOnce", nil, nil)
1421- if ((ie == ie))
1375+ let hm = invoke(this, "ensureCalledOnce", nil, nil)
1376+ if ((hm == hm))
14221377 then {
1423- let bU = toString(bL.caller)
1424- if (if (if (if (if ((0 >= hG))
1378+ let bH = toString(by.caller)
1379+ if (if (if (if (if ((0 >= gP))
14251380 then true
1426- else !(ce(bU)))
1381+ else !(bR(bH, bI)))
14271382 then true
1428- else !(cn()))
1383+ else !(ca()))
14291384 then true
1430- else co())
1385+ else cb())
14311386 then true
1432- else dE())
1387+ else dr())
14331388 then throw("Invalid removeMargin parameters")
14341389 else {
1435- let iP = bT(bU)
1436- let eH = iP._1
1437- let eI = iP._2
1438- let eJ = iP._3
1439- let eK = iP._4
1440- let eL = iP._5
1441- let iQ = cX(eH, eI, eK, eL, -(hG))
1442- let df = iQ._1
1443- let dg = iQ._2
1444- let db = iQ._3
1445- let cW = iQ._4
1446- if ((dg != 0))
1390+ let hY = bG(bH, bI)
1391+ let eu = hY._1
1392+ let ev = hY._2
1393+ let ew = hY._3
1394+ let ex = hY._4
1395+ let ey = hY._5
1396+ let hZ = cK(eu, ev, ex, ey, -(gP))
1397+ let cS = hZ._1
1398+ let cT = hZ._2
1399+ let cO = hZ._3
1400+ let cJ = hZ._4
1401+ if ((cT != 0))
14471402 then throw("Invalid removed margin amount")
14481403 else {
1449- let fk = ej(df, dg, eJ)
1450- if (!(bM(fk, bi(), true)))
1451- then throw(((("Too much margin removed: " + toString(fk)) + " < ") + toString(bi())))
1404+ let eX = dW(cS, cT, ew)
1405+ if (!(bz(eX, aU(), true)))
1406+ then throw(((("Too much margin removed: " + toString(eX)) + " < ") + toString(aU())))
14521407 else {
1453- let iR = gK(cW)
1454- let gM = iR._1
1455- let gN = iR._2
1456- let iL = if ((cW > 0))
1408+ let ia = fZ(cJ)
1409+ let gb = ia._1
1410+ let gc = ia._2
1411+ let hU = if ((cJ > 0))
14571412 then {
1458- let iO = invoke(aq(), "exchangeFreeAndLocked", [-(gN)], nil)
1459- if ((iO == iO))
1460- then hJ(gM)
1413+ let hX = invoke(ai(), "exchangeFreeAndLocked", [-(gc)], nil)
1414+ if ((hX == hX))
1415+ then gS(gb)
14611416 else throw("Strict value is not equal to itself.")
14621417 }
14631418 else nil
1464- if ((iL == iL))
1419+ if ((hU == hU))
14651420 then {
1466- let iN = invoke(aq(), "withdrawLocked", [(hG + gM)], nil)
1467- if ((iN == iN))
1468- then (((hk(bU, eH, df, eJ, bR(eH), bJ()) ++ hF(bL.caller, hG)) ++ hI(((bf() - hG) - cW))) ++ iL)
1421+ let hW = invoke(ai(), "withdrawLocked", [(gP + gb)], nil)
1422+ if ((hW == hW))
1423+ then (((gA(bH, eu, cS, ew, bE(eu), bw()) ++ gO(by.caller, gP)) ++ gR(((aR() - gP) - cJ))) ++ hU)
14691424 else throw("Strict value is not equal to itself.")
14701425 }
14711426 else throw("Strict value is not equal to itself.")
14801435
14811436
14821437
1483-@Callable(bL)
1484-func closePosition (eB,eD,eE) = {
1485- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1486- if ((id == id))
1438+@Callable(by)
1439+func closePosition (eo,bI,eq,er) = {
1440+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1441+ if ((hl == hl))
14871442 then {
1488- let ie = invoke(this, "ensureCalledOnce", nil, nil)
1489- if ((ie == ie))
1443+ let hm = invoke(this, "ensureCalledOnce", nil, nil)
1444+ if ((hm == hm))
14901445 then {
1491- let bU = bK(bL)
1492- let iS = valueOrErrorMessage(addressFromString(bU), "Invalid caller")
1493- let cd = cb(bU)
1494- if (if (if (if (if (if (!(ce(bU)))
1446+ let bH = bx(by)
1447+ let ib = valueOrErrorMessage(addressFromString(bH), "Invalid caller")
1448+ let bQ = bO(bH, bI)
1449+ if (if (if (if (if (if (!(bR(bH, bI)))
14951450 then true
1496- else !(cn()))
1451+ else !(ca()))
14971452 then true
1498- else co())
1453+ else cb())
14991454 then true
1500- else (0 >= eB))
1455+ else (0 >= eo))
15011456 then true
1502- else (0 > eD))
1457+ else (0 > eq))
15031458 then true
1504- else dE())
1459+ else dr())
15051460 then throw("Invalid closePosition parameters")
15061461 else {
1507- let eL = bT(bU)._5
1508- let iT = eA(bU, eB, cd, eD, eE, true, true)
1509- let ff = iT._1
1510- let fo = iT._2
1511- let fh = iT._3
1512- let fi = iT._4
1513- let fb = iT._5
1514- let eW = iT._6
1515- let fn = iT._7
1516- let cF = iT._8
1517- let cG = iT._9
1518- let eR = iT._10
1519- let iC = iT._11
1520- let iD = iT._12
1521- let iE = iT._13
1522- let iv = iT._14
1523- let iw = iT._15
1524- let iU = iT._16
1525- if ((fb > 0))
1462+ let ey = bG(bH, bI)._5
1463+ let ic = en(bH, bI, eo, bQ, eq, er, true, true)
1464+ let eS = ic._1
1465+ let fb = ic._2
1466+ let eU = ic._3
1467+ let eV = ic._4
1468+ let eO = ic._5
1469+ let eJ = ic._6
1470+ let fa = ic._7
1471+ let cs = ic._8
1472+ let ct = ic._9
1473+ let eE = ic._10
1474+ let hL = ic._11
1475+ let hM = ic._12
1476+ let hN = ic._13
1477+ let hE = ic._14
1478+ let hF = ic._15
1479+ let id = ic._16
1480+ if ((eO > 0))
15261481 then throw("Invalid closePosition parameters: bad debt")
1527- else if ((eL >= bJ()))
1482+ else if ((ey >= bw()))
15281483 then throw("Invalid closePosition parameters: wait at least 1 block before closing the position")
15291484 else {
1530- let eO = (ff != 0)
1531- let iV = (fn + iU)
1532- let iW = (bf() - iV)
1533- let iX = if ((0 > iW))
1485+ let eB = (eS != 0)
1486+ let ie = (fa + id)
1487+ let if = (aR() - ie)
1488+ let ig = if ((0 > if))
15341489 then 0
1535- else iW
1536- let iN = invoke(aq(), "withdrawLocked", [iV], nil)
1537- if ((iN == iN))
1490+ else if
1491+ let hW = invoke(ai(), "withdrawLocked", [ie], nil)
1492+ if ((hW == hW))
15381493 then {
1539- let iY = gK(iU)
1540- let gM = iY._1
1541- let gN = iY._2
1542- let iH = invoke(aq(), "addFree", nil, [AttachedPayment(an(), gN)])
1543- if ((iH == iH))
1494+ let ht = invoke(al(), "acceptPayment", [bH], [AttachedPayment(ag(), id)])
1495+ if ((ht == ht))
15441496 then {
1545- let iI = invoke(ar(), "notifyFees", [bU, iU], nil)
1546- if ((iI == iI))
1497+ let hu = {
1498+ let bL = ht
1499+ if ($isInstanceOf(bL, "Int"))
1500+ then {
1501+ let fV = bL
1502+ fV
1503+ }
1504+ else throw("Invalid referrerFee")
1505+ }
1506+ let ih = fZ((id - hu))
1507+ let gb = ih._1
1508+ let gc = ih._2
1509+ let hQ = invoke(ai(), "addFree", nil, [AttachedPayment(ag(), gc)])
1510+ if ((hQ == hQ))
15471511 then {
1548- let iJ = invoke(ar(), "notifyNotional", [bU, fh], nil)
1549- if ((iJ == iJ))
1550- then (((((if (eO)
1551- then hk(bU, ff, fo, fh, fi, bJ())
1552- else hE(bU)) ++ hx(cF, cG, eR, iC, iD, iE, iv, iw)) ++ (if ((fn > 0))
1553- then hF(iS, fn)
1554- else nil)) ++ hI(iX)) ++ hJ(gM))
1512+ let hR = invoke(aj(), "notifyFees", [bH, id], nil)
1513+ if ((hR == hR))
1514+ then {
1515+ let hS = invoke(aj(), "notifyNotional", [bH, eU], nil)
1516+ if ((hS == hS))
1517+ then (((((if (eB)
1518+ then gA(bH, eS, fb, eU, eV, bw())
1519+ else gN(bH, bI)) ++ gG(cs, ct, eE, hL, hM, hN, hE, hF)) ++ (if ((fa > 0))
1520+ then gO(ib, fa)
1521+ else nil)) ++ gR(ig)) ++ gS(gb))
1522+ else throw("Strict value is not equal to itself.")
1523+ }
15551524 else throw("Strict value is not equal to itself.")
15561525 }
15571526 else throw("Strict value is not equal to itself.")
15691538
15701539
15711540
1572-@Callable(bL)
1573-func liquidate (bU) = {
1574- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1575- if ((id == id))
1541+@Callable(by)
1542+func liquidate (bH,bI) = {
1543+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1544+ if ((hl == hl))
15761545 then {
1577- let iZ = en(bU, aG)
1578- let ja = if (dT())
1546+ let ii = ea(bH, bI, ax)
1547+ let ij = if (dG())
15791548 then {
1580- let jb = en(bU, aH)
1581- aQ(iZ, jb)
1549+ let ik = ea(bH, bI, ay)
1550+ aJ(ii, ik)
15821551 }
1583- else iZ
1584- if (if (if (if (if (!(bM(ja, bv(), false)))
1552+ else ii
1553+ if (if (if (if (if (!(bz(ij, bh(), false)))
15851554 then true
1586- else !(ce(bU)))
1555+ else !(bR(bH, bI)))
15871556 then true
1588- else !(cn()))
1557+ else !(ca()))
15891558 then true
1590- else co())
1559+ else cb())
15911560 then true
1592- else dE())
1561+ else dr())
15931562 then throw("Unable to liquidate")
15941563 else {
1595- let jc = if (if ((iZ > bw()))
1596- then (bx() > 0)
1564+ let il = if (if ((ii > bi()))
1565+ then (bj() > 0)
15971566 else false)
1598- then (aD > bx())
1567+ then (au > bj())
15991568 else false
1600- let eH = bT(bU)._1
1601- let dX = aP(eH)
1602- let jd = if (jc)
1569+ let eu = bG(bH, bI)._1
1570+ let dK = aI(eu)
1571+ let im = if (il)
16031572 then {
1604- let je = ev(bU, eH)
1605- let jf = aK(aP(je), dX)
1606- $Tuple2(jf, aP(je))
1573+ let in = ei(bH, eu)
1574+ let io = aD(aI(in), dK)
1575+ $Tuple2(io, aI(in))
16071576 }
1608- else $Tuple2(0, dX)
1609- let jf = jd._1
1610- let je = jd._2
1611- let jg = eA(bU, if (jc)
1612- then je
1613- else dX, bw(), 0, true, false, true)
1614- let ff = jg._1
1615- let fo = jg._2
1616- let fh = jg._3
1617- let fi = jg._4
1618- let fb = jg._5
1619- let eW = jg._6
1620- let fn = jg._7
1621- let cF = jg._8
1622- let cG = jg._9
1623- let eR = jg._10
1624- let iC = jg._11
1625- let iD = jg._12
1626- let iE = jg._13
1627- let iv = jg._14
1628- let iw = jg._15
1629- let jh = jg._16
1630- let ji = (jh / 2)
1631- let gN = (jh - ji)
1632- let iW = (bf() - jh)
1633- let jj = if ((0 > iW))
1577+ else $Tuple2(0, dK)
1578+ let io = im._1
1579+ let in = im._2
1580+ let ip = en(bH, bI, if (il)
1581+ then in
1582+ else dK, bi(), 0, true, false, true)
1583+ let eS = ip._1
1584+ let fb = ip._2
1585+ let eU = ip._3
1586+ let eV = ip._4
1587+ let eO = ip._5
1588+ let eJ = ip._6
1589+ let fa = ip._7
1590+ let cs = ip._8
1591+ let ct = ip._9
1592+ let eE = ip._10
1593+ let hL = ip._11
1594+ let hM = ip._12
1595+ let hN = ip._13
1596+ let hE = ip._14
1597+ let hF = ip._15
1598+ let iq = ip._16
1599+ let ir = (iq / 2)
1600+ let gc = (iq - ir)
1601+ let if = (aR() - iq)
1602+ let is = if ((0 > if))
16341603 then 0
1635- else iW
1636- let iO = if ((fb > 0))
1604+ else if
1605+ let hX = if ((eO > 0))
16371606 then {
1638- let iO = invoke(aq(), "exchangeFreeAndLocked", [(fb + jh)], nil)
1639- if ((iO == iO))
1607+ let hX = invoke(ai(), "exchangeFreeAndLocked", [(eO + iq)], nil)
1608+ if ((hX == hX))
16401609 then nil
16411610 else throw("Strict value is not equal to itself.")
16421611 }
16431612 else nil
1644- if ((iO == iO))
1613+ if ((hX == hX))
16451614 then {
1646- let iN = invoke(aq(), "withdrawLocked", [jh], nil)
1647- if ((iN == iN))
1615+ let hW = invoke(ai(), "withdrawLocked", [iq], nil)
1616+ if ((hW == hW))
16481617 then {
1649- let jk = invoke(aq(), "addFree", nil, [AttachedPayment(an(), gN)])
1650- if ((jk == jk))
1618+ let it = invoke(ai(), "addFree", nil, [AttachedPayment(ag(), gc)])
1619+ if ((it == it))
16511620 then {
1652- let iJ = invoke(ar(), "notifyNotional", [bU, fh], nil)
1653- if ((iJ == iJ))
1654- then ((((if (jc)
1655- then hk(bU, ff, fo, fh, fi, bJ())
1656- else hE(bU)) ++ hx(cF, cG, eR, iC, iD, iE, iv, iw)) ++ hF(bL.caller, ji)) ++ hI(jj))
1621+ let hS = invoke(aj(), "notifyNotional", [bH, eU], nil)
1622+ if ((hS == hS))
1623+ then ((((if (il)
1624+ then gA(bH, eS, fb, eU, eV, bw())
1625+ else gN(bH, bI)) ++ gG(cs, ct, eE, hL, hM, hN, hE, hF)) ++ gO(by.caller, ir)) ++ gR(is))
16571626 else throw("Strict value is not equal to itself.")
16581627 }
16591628 else throw("Strict value is not equal to itself.")
16681637
16691638
16701639
1671-@Callable(bL)
1640+@Callable(by)
16721641 func payFunding () = {
1673- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1674- if ((id == id))
1642+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1643+ if ((hl == hl))
16751644 then {
1676- let jl = br()
1677- if (if (if ((jl > bJ()))
1645+ let iu = bd()
1646+ if (if (if ((iu > bw()))
16781647 then true
1679- else !(cn()))
1648+ else !(ca()))
16801649 then true
1681- else co())
1682- then throw(((("Invalid funding block timestamp: " + toString(bJ())) + " < ") + toString(jl)))
1650+ else cb())
1651+ then throw(((("Invalid funding block timestamp: " + toString(bw())) + " < ") + toString(iu)))
16831652 else {
1684- let gl = dy()
1685- let jm = gk()
1686- let go = jm._1
1687- let gp = jm._2
1688- ha((jl + bu()), (bC() + gp), (bD() + go), aK(gp, gl), aK(go, gl))
1653+ let fA = dl()
1654+ let iv = fz()
1655+ let fD = iv._1
1656+ let fE = iv._2
1657+ let fH = iv._3
1658+ let iw = if ((fH > 0))
1659+ then {
1660+ let iw = invoke(ai(), "exchangeFreeAndLocked", [-(fH)], nil)
1661+ if ((iw == iw))
1662+ then nil
1663+ else throw("Strict value is not equal to itself.")
1664+ }
1665+ else nil
1666+ if ((iw == iw))
1667+ then gq((iu + bg()), (bo() + fE), (bp() + fD), aD(fE, fA), aD(fD, fA))
1668+ else throw("Strict value is not equal to itself.")
16891669 }
16901670 }
16911671 else throw("Strict value is not equal to itself.")
16931673
16941674
16951675
1696-@Callable(bL)
1676+@Callable(by)
16971677 func syncTerminalPriceToOracle () = {
1698- let cx = bj()
1699- let cy = bk()
1700- let jn = gf(dy(), cx, cy)
1701- let hR = jn._1
1702- let hS = jn._2
1703- let gj = jn._3
1704- let jo = if (if ((0 > gj))
1705- then (aP(gj) > bf())
1678+ let ck = aV()
1679+ let cl = aW()
1680+ let ix = fu(dl(), ck, cl)
1681+ let ha = ix._1
1682+ let hb = ix._2
1683+ let fy = ix._3
1684+ let iy = if (if ((0 > fy))
1685+ then (aI(fy) > aR())
17061686 else false)
1707- then -(bf())
1708- else gj
1709- let hT = if ((jo != 0))
1687+ then -(aR())
1688+ else fy
1689+ let hc = if ((iy != 0))
17101690 then {
1711- let hT = invoke(aq(), "exchangeFreeAndLocked", [jo], nil)
1712- if ((hT == hT))
1691+ let hc = invoke(ai(), "exchangeFreeAndLocked", [iy], nil)
1692+ if ((hc == hc))
17131693 then nil
17141694 else throw("Strict value is not equal to itself.")
17151695 }
17161696 else nil
1717- if ((hT == hT))
1718- then ((hI((bf() + jo)) ++ hw(hR, hS)) ++ ho(aK(aM(cx, hR), aM(cy, hS))))
1697+ if ((hc == hc))
1698+ then (gR((aR() + iy)) ++ gF(ha, hb))
17191699 else throw("Strict value is not equal to itself.")
17201700 }
17211701
17221702
17231703
1724-@Callable(bL)
1725-func ensureCalledOnce () = if ((bL.caller != this))
1704+@Callable(by)
1705+func ensureCalledOnce () = if ((by.caller != this))
17261706 then throw("Invalid saveCurrentTxId parameters")
17271707 else {
1728- let jp = valueOrElse(getString(this, W), "")
1729- if ((jp != toBase58String(bL.transactionId)))
1730- then [StringEntry(W, jp)]
1708+ let iz = toBase58String(by.transactionId)
1709+ let iA = valueOrElse(getString(this, R), "")
1710+ if ((iA != iz))
1711+ then [StringEntry(R, iz)]
17311712 else throw("Can not call vAMM methods twice in one tx")
17321713 }
17331714
17341715
17351716
1736-@Callable(bL)
1737-func view_calcRemainMarginWithFundingPayment (bU) = {
1738- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1739- if ((id == id))
1717+@Callable(by)
1718+func migratePosition (bH) = {
1719+ let bK = getInteger(this, ab(e, bH))
1720+ if (if (isDefined(bK))
1721+ then isDefined(addressFromString(bH))
1722+ else false)
17401723 then {
1741- let jq = bT(bU)
1742- let bX = jq._1
1743- let eg = jq._2
1744- let ep = jq._3
1745- let ei = jq._4
1746- let er = jq._5
1747- let jr = ee(bU, aG)
1748- let dZ = jr._1
1749- let ed = jr._2
1750- let js = cX(bX, eg, ei, er, ed)
1751- let df = js._1
1752- let dg = js._2
1753- let db = js._3
1754- let cW = js._4
1755- throw(((((((aI(df) + aI(db)) + aI(eu(bU))) + aI(ed)) + aI(dg)) + aI(dZ)) + aI(cW)))
1724+ let iB = getIntegerValue(this, ab(e, bH))
1725+ let iC = getIntegerValue(this, ab(f, bH))
1726+ let iD = getIntegerValue(this, ab(g, bH))
1727+ let iE = getIntegerValue(this, ab(h, bH))
1728+ let iF = valueOrElse(getInteger(this, ab(k, bH)), lastBlock.timestamp)
1729+ let iG = valueOrElse(getInteger(this, ab(j, bH)), aS())
1730+ let iH = getIntegerValue(this, ab(i, bH))
1731+ let iI = bN(iB)
1732+ let bJ = ((bH + "_") + toString(iI))
1733+[DeleteEntry(ab(e, bH)), DeleteEntry(ab(f, bH)), DeleteEntry(ab(g, bH)), DeleteEntry(ab(h, bH)), DeleteEntry(ab(k, bH)), DeleteEntry(ab(j, bH)), DeleteEntry(ab(i, bH)), IntegerEntry(ab(e, bJ), iB), IntegerEntry(ab(f, bJ), iC), IntegerEntry(ab(g, bJ), iD), IntegerEntry(ab(h, bJ), iE), IntegerEntry(ab(k, bJ), iF), IntegerEntry(ab(j, bJ), iG), IntegerEntry(ab(i, bJ), iH)]
1734+ }
1735+ else throw(("Nothing to migrate for " + bH))
1736+ }
1737+
1738+
1739+
1740+@Callable(by)
1741+func view_calcRemainMarginWithFundingPayment (bH,bI) = {
1742+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1743+ if ((hl == hl))
1744+ then {
1745+ let iJ = bG(bH, bI)
1746+ let bM = iJ._1
1747+ let dT = iJ._2
1748+ let ec = iJ._3
1749+ let dV = iJ._4
1750+ let ee = iJ._5
1751+ let iK = dR(bH, bI, ax)
1752+ let dM = iK._1
1753+ let dQ = iK._2
1754+ let iL = cK(bM, dT, dV, ee, dQ)
1755+ let cS = iL._1
1756+ let cT = iL._2
1757+ let cO = iL._3
1758+ let cJ = iL._4
1759+ throw(((((((aB(cS) + aB(cO)) + aB(eh(bH, bI))) + aB(dQ)) + aB(cT)) + aB(dM)) + aB(cJ)))
17561760 }
17571761 else throw("Strict value is not equal to itself.")
17581762 }
17591763
17601764
17611765
1762-@Callable(bL)
1763-func view_getPegAdjustCost (hp) = {
1764- let cx = bj()
1765- let cy = bk()
1766- let ge = gf(hp, cx, cy)
1767- throw(toString(ge._3))
1766+@Callable(by)
1767+func view_getPegAdjustCost (iM) = {
1768+ let ck = aV()
1769+ let cl = aW()
1770+ let ft = fu(iM, ck, cl)
1771+ throw(toString(ft._3))
17681772 }
17691773
17701774
17711775
1772-@Callable(bL)
1776+@Callable(by)
17731777 func view_getTerminalAmmPrice () = {
1774- let jt = fN()
1775- let fR = jt._1
1776- let fS = jt._2
1777- let hM = aK(aM(fR, bl()), aM(fS, bm()))
1778- throw(toString(hM))
1778+ let iN = fc()
1779+ let fg = iN._1
1780+ let fh = iN._2
1781+ let gV = aD(aF(fg, aX()), aF(fh, aY()))
1782+ throw(toString(gV))
17791783 }
17801784
17811785
17821786
1783-@Callable(bL)
1787+@Callable(by)
17841788 func view_getFunding () = {
1785- let gl = dy()
1786- let ju = gk()
1787- let go = ju._1
1788- let gp = ju._2
1789- let jv = aK(gp, gl)
1790- let jw = aK(go, gl)
1791- throw((((aI(jv) + aI(jw)) + aI(fp())) + aI(dy())))
1792- }
1793-
1794-
1795-
1796-@Callable(bL)
1797-func computeSpotPrice () = {
1798- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1799- if ((id == id))
1789+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1790+ if ((hl == hl))
18001791 then {
1801- let ge = dS()
1802- $Tuple2(nil, ge)
1792+ let fA = dl()
1793+ let iO = fz()
1794+ let fD = iO._1
1795+ let fE = iO._2
1796+ let fH = iO._3
1797+ let iP = aD(fE, fA)
1798+ let iQ = aD(fD, fA)
1799+ throw(((((aB(iP) + aB(iQ)) + aB(dF())) + aB(dl())) + aB(fH)))
18031800 }
18041801 else throw("Strict value is not equal to itself.")
18051802 }
18061803
18071804
18081805
1809-@Callable(bL)
1810-func computeFeeForTraderWithArtifact (bU,gr) = {
1811- let ge = gD(bU, gr)
1812- $Tuple2(nil, ge)
1806+@Callable(by)
1807+func computeSpotPrice () = {
1808+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1809+ if ((hl == hl))
1810+ then {
1811+ let ft = dF()
1812+ $Tuple2(nil, ft)
1813+ }
1814+ else throw("Strict value is not equal to itself.")
18131815 }
18141816
18151817
1816-@Verifier(jx)
1817-func jy () = {
1818- let jz = getString(this, X)
1819- if (isDefined(jz))
1818+
1819+@Callable(by)
1820+func computeFeeForTraderWithArtifact (bH,fJ) = {
1821+ let ft = fS(bH, fJ)
1822+ $Tuple2(nil, ft)
1823+ }
1824+
1825+
1826+@Verifier(iR)
1827+func iS () = {
1828+ let iT = getString(this, S)
1829+ if (isDefined(iT))
18201830 then {
1821- let jA = getString(addressFromStringValue(value(jz)), Z)
1822- if (isDefined(jA))
1823- then valueOrElse(getBoolean(addressFromStringValue(value(jA)), ((("status_" + toString(this)) + "_") + toBase58String(jx.id))), false)
1831+ let iU = getString(addressFromStringValue(value(iT)), U)
1832+ if (isDefined(iU))
1833+ then valueOrElse(getBoolean(addressFromStringValue(value(iU)), ((("status_" + toString(this)) + "_") + toBase58String(iR.id))), false)
18241834 else throw("unable to verify: admin not set in coordinator")
18251835 }
1826- else sigVerify(jx.bodyBytes, jx.proofs[0], jx.senderPublicKey)
1836+ else sigVerify(iR.bodyBytes, iR.proofs[0], iR.senderPublicKey)
18271837 }
18281838
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "k_baseOracle"
55
66 let b = "k_quoteOracle"
77
88 let c = "k_balance"
99
1010 let d = "k_sequence"
1111
1212 let e = "k_positionSize"
1313
1414 let f = "k_positionMargin"
1515
1616 let g = "k_positionOpenNotional"
1717
1818 let h = "k_positionFraction"
1919
2020 let i = "k_positionSequence"
2121
22-let j = "k_positionAsset"
22+let j = "k_positionFee"
2323
24-let k = "k_positionFee"
24+let k = "k_positionTimestamp"
2525
26-let l = "k_positionTimestamp"
26+let l = "k_initialized"
2727
28-let m = "k_initialized"
28+let m = "k_paused"
2929
30-let n = "k_paused"
30+let n = "k_closeOnly"
3131
32-let o = "k_closeOnly"
32+let o = "k_fee"
3333
34-let p = "k_fee"
34+let p = "k_rollover_fee"
3535
36-let q = "k_rollover_fee"
36+let q = "k_fundingPeriod"
3737
38-let r = "k_fundingPeriod"
38+let r = "k_initMarginRatio"
3939
40-let s = "k_initMarginRatio"
40+let s = "k_mmr"
4141
42-let t = "k_mmr"
42+let t = "k_liquidationFeeRatio"
4343
44-let u = "k_liquidationFeeRatio"
44+let u = "k_partLiquidationRatio"
4545
46-let v = "k_partLiquidationRatio"
46+let v = "k_spreadLimit"
4747
48-let w = "k_spreadLimit"
48+let w = "k_maxPriceImpact"
4949
50-let x = "k_maxPriceImpact"
50+let x = "k_maxPriceSpread"
5151
52-let y = "k_maxPriceSpread"
52+let y = "k_maxOpenNotional"
5353
54-let z = "k_maxOpenNotional"
54+let z = "k_feeToStakersPercent"
5555
56-let A = "k_feeToStakersPercent"
56+let A = "k_maxOracleDelay"
5757
58-let B = "k_maxOracleDelay"
58+let B = "k_fundingMode"
5959
60-let C = "k_lastDataStr"
60+let C = "k_latestLongPremiumFraction"
6161
62-let D = "k_lastMinuteId"
62+let D = "k_latestShortPremiumFraction"
6363
64-let E = "k_twapDataLastCumulativePrice"
64+let E = "k_nextFundingBlockMinTimestamp"
6565
66-let F = "k_twapDataLastPrice"
66+let F = "k_longFundingRate"
6767
68-let G = "k_twapDataPreviousMinuteId"
68+let G = "k_shortFundingRate"
6969
70-let H = "k_latestLongPremiumFraction"
70+let H = "k_qtAstR"
7171
72-let I = "k_latestShortPremiumFraction"
72+let I = "k_bsAstR"
7373
74-let J = "k_nextFundingBlockMinTimestamp"
74+let J = "k_qtAstW"
7575
76-let K = "k_longFundingRate"
76+let K = "k_bsAstW"
7777
78-let L = "k_shortFundingRate"
78+let L = "k_totalPositionSize"
7979
80-let M = "k_qtAstR"
80+let M = "k_totalLongPositionSize"
8181
82-let N = "k_bsAstR"
82+let N = "k_totalShortPositionSize"
8383
84-let O = "k_qtAstW"
84+let O = "k_openInterestNotional"
8585
86-let P = "k_bsAstW"
86+let P = "k_openInterestShort"
8787
88-let Q = "k_totalPositionSize"
88+let Q = "k_openInterestLong"
8989
90-let R = "k_totalLongPositionSize"
90+let R = "k_lastTx"
9191
92-let S = "k_totalShortPositionSize"
92+let S = "k_coordinatorAddress"
9393
94-let T = "k_openInterestNotional"
94+let T = "k_vault_address"
9595
96-let U = "k_openInterestShort"
96+let U = "k_admin_address"
9797
98-let V = "k_openInterestLong"
98+let V = "k_quote_asset"
9999
100-let W = "k_lastTx"
100+let W = "k_staking_address"
101101
102-let X = "k_coordinatorAddress"
102+let X = "k_miner_address"
103103
104-let Y = "k_vault_address"
104+let Y = "k_orders_address"
105105
106-let Z = "k_admin_address"
106+let Z = "k_referral_address"
107107
108-let aa = "k_quote_asset"
108+let aa = "k_nft_manager_address"
109109
110-let ab = "k_quote_staking"
111-
112-let ac = "k_staking_address"
113-
114-let ad = "k_miner_address"
115-
116-let ae = "k_orders_address"
117-
118-let af = "k_referral_address"
119-
120-let ag = "k_exchange_address"
121-
122-let ah = "k_nft_manager_address"
123-
124-func ai (aj,ak) = ((aj + "_") + ak)
110+func ab (ac,ad) = ((ac + "_") + ad)
125111
126112
127-func al () = valueOrErrorMessage(addressFromString(getStringValue(this, X)), "Coordinator not set")
113+func ae () = valueOrErrorMessage(addressFromString(getStringValue(this, S)), "Coordinator not set")
128114
129115
130-func am () = addressFromString(getStringValue(al(), Z))
116+func af () = addressFromString(getStringValue(ae(), U))
131117
132118
133-func an () = fromBase58String(getStringValue(al(), aa))
119+func ag () = fromBase58String(getStringValue(ae(), V))
134120
135121
136-func ao () = valueOrErrorMessage(addressFromString(getStringValue(al(), ab)), "Quote asset staking not set")
122+func ah () = valueOrErrorMessage(addressFromString(getStringValue(ae(), W)), "Staking not set")
137123
138124
139-func ap () = valueOrErrorMessage(addressFromString(getStringValue(al(), ac)), "Staking not set")
125+func ai () = valueOrErrorMessage(addressFromString(getStringValue(ae(), T)), "Vault not set")
140126
141127
142-func aq () = valueOrErrorMessage(addressFromString(getStringValue(al(), Y)), "Vault not set")
128+func aj () = valueOrErrorMessage(addressFromString(getStringValue(ae(), X)), "Miner not set")
143129
144130
145-func ar () = valueOrErrorMessage(addressFromString(getStringValue(al(), ad)), "Miner not set")
131+func ak () = valueOrErrorMessage(addressFromString(getStringValue(ae(), Y)), "Orders not set")
146132
147133
148-func as () = valueOrErrorMessage(addressFromString(getStringValue(al(), ae)), "Orders not set")
134+func al () = valueOrErrorMessage(addressFromString(getStringValue(ae(), Z)), "Referral not set")
149135
150136
151-func at () = valueOrErrorMessage(addressFromString(getStringValue(al(), af)), "Referral not set")
137+func am () = valueOrErrorMessage(addressFromString(getStringValue(ae(), aa)), "NFT Manager not set")
152138
153139
154-func au () = valueOrErrorMessage(addressFromString(getStringValue(al(), ah)), "NFT Manager not set")
140+let an = "k_token_param"
141+
142+let ao = "k_token_type"
143+
144+let ap = "fee_reduction"
145+
146+let aq = 1
147+
148+let ar = 2
149+
150+let as = 1000
151+
152+let at = 6
153+
154+let au = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
155+
156+let av = (525600 * au)
157+
158+let aw = (86400 * au)
159+
160+let ax = 1
161+
162+let ay = 2
163+
164+let az = 1
165+
166+let aA = 2
167+
168+func aB (aC) = (toString(aC) + ",")
155169
156170
157-let av = "k_token_param"
158-
159-let aw = "k_token_type"
160-
161-let ax = "fee_reduction"
162-
163-let ay = 1
164-
165-let az = 2
166-
167-let aA = 15
168-
169-let aB = 1000
170-
171-let aC = 6
172-
173-let aD = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
174-
175-let aE = (525600 * aD)
176-
177-let aF = (86400 * aD)
178-
179-let aG = 1
180-
181-let aH = 2
182-
183-func aI (aJ) = (toString(aJ) + ",")
171+func aD (aC,aE) = fraction(aC, au, aE, HALFEVEN)
184172
185173
186-func aK (aJ,aL) = fraction(aJ, aD, aL, HALFEVEN)
174+func aF (aC,aE) = fraction(aC, aE, au, HALFEVEN)
187175
188176
189-func aM (aJ,aL) = fraction(aJ, aL, aD, HALFEVEN)
177+func aG (aC,aE) = fraction(aC, toBigInt(au), aE, HALFEVEN)
190178
191179
192-func aN (aJ,aL) = fraction(aJ, toBigInt(aD), aL, HALFEVEN)
180+func aH (aC,aE) = fraction(aC, aE, toBigInt(au), HALFEVEN)
193181
194182
195-func aO (aJ,aL) = fraction(aJ, aL, toBigInt(aD), HALFEVEN)
183+func aI (aC) = if ((aC > 0))
184+ then aC
185+ else -(aC)
196186
197187
198-func aP (aJ) = if ((aJ > 0))
199- then aJ
200- else -(aJ)
188+func aJ (aC,aE) = if ((aC >= aE))
189+ then aC
190+ else aE
201191
202192
203-func aQ (aJ,aL) = if ((aJ >= aL))
204- then aJ
205- else aL
193+func aK (aL) = valueOrErrorMessage(getInteger(this, aL), ("no value for " + aL))
206194
207195
208-func aR (aS) = if ((size(aS) == 0))
209- then ""
210- else makeString(aS, ",")
196+func aM (aL,aN) = valueOrElse(getInteger(this, aL), aN)
211197
212198
213-func aT (aU) = if ((aU == ""))
214- then nil
215- else split(aU, ",")
216-
217-
218-func aV (aS,aW,aX) = if ((size(aS) > aW))
219- then (removeByIndex(aS, 0) :+ aX)
220- else (aS :+ aX)
221-
222-
223-func aY (aZ) = valueOrErrorMessage(getInteger(this, aZ), ("no value for " + aZ))
224-
225-
226-func ba (aZ,bb) = valueOrElse(getInteger(this, aZ), bb)
227-
228-
229-func bc (ak,aj) = {
230- let bd = valueOrErrorMessage(getString(ak, aj), ("No value for key " + aj))
231- bd
199+func aO (ad,ac) = {
200+ let aP = valueOrErrorMessage(getString(ad, ac), ("No value for key " + ac))
201+ aP
232202 }
233203
234204
235-func be (ak,aj) = {
236- let bd = valueOrErrorMessage(getInteger(ak, aj), ("No value for key " + aj))
237- bd
205+func aQ (ad,ac) = {
206+ let aP = valueOrErrorMessage(getInteger(ad, ac), ("No value for key " + ac))
207+ aP
238208 }
239209
240210
241-func bf () = aY(c)
211+func aR () = aK(c)
242212
243213
244-func bg () = aY(p)
214+func aS () = aK(o)
245215
246216
247-func bh () = aY(q)
217+func aT () = aK(p)
248218
249219
250-func bi () = aY(s)
220+func aU () = aK(r)
251221
252222
253-func bj () = aY(M)
223+func aV () = aK(H)
254224
255225
256-func bk () = aY(N)
226+func aW () = aK(I)
257227
258228
259-func bl () = ba(O, aD)
229+func aX () = aM(J, au)
260230
261231
262-func bm () = ba(P, aD)
232+func aY () = aM(K, au)
263233
264234
265-func bn () = aY(Q)
235+func aZ () = aK(L)
266236
267237
268-func bo () = aY(T)
238+func ba () = aK(O)
269239
270240
271-func bp () = aY(U)
241+func bb () = aK(P)
272242
273243
274-func bq () = aY(V)
244+func bc () = aK(Q)
275245
276246
277-func br () = aY(J)
247+func bd () = aK(E)
278248
279249
280-func bs () = aY(r)
250+func be () = aK(q)
281251
282252
283-func bt () = (bs() * aD)
253+func bf () = (be() * au)
284254
285255
286-func bu () = (bs() * aB)
256+func bg () = (be() * as)
287257
288258
289-func bv () = aY(t)
259+func bh () = aK(s)
290260
291261
292-func bw () = aY(u)
262+func bi () = aK(t)
293263
294264
295-func bx () = aY(v)
265+func bj () = aK(u)
296266
297267
298-func by () = aY(w)
268+func bk () = aK(v)
299269
300270
301-func bz () = aY(x)
271+func bl () = aK(w)
302272
303273
304-func bA () = aY(y)
274+func bm () = aK(x)
305275
306276
307-func bB () = aY(z)
277+func bn () = aK(y)
308278
309279
310-func bC () = aY(H)
280+func bo () = aK(C)
311281
312282
313-func bD () = aY(I)
283+func bp () = aK(D)
314284
315285
316-func bE () = aY(S)
286+func bq () = aK(N)
317287
318288
319-func bF () = aY(R)
289+func br () = aK(M)
320290
321291
322-func bG () = ba(d, 0)
292+func bs () = aM(d, 0)
323293
324294
325-func bH () = aY(A)
295+func bt () = aK(z)
326296
327297
328-func bI () = aY(B)
298+func bu () = aK(A)
329299
330300
331-func bJ () = lastBlock.timestamp
301+func bv () = aM(B, az)
332302
333303
334-func bK (bL) = valueOrElse(getString(as(), "k_sender"), toString(bL.caller))
304+func bw () = lastBlock.timestamp
335305
336306
337-func bM (bN,bO,bP) = {
338- let bQ = (bN - bO)
339- if (if (bP)
340- then (0 > bQ)
307+func bx (by) = valueOrElse(getString(ak(), "k_sender"), toString(by.caller))
308+
309+
310+func bz (bA,bB,bC) = {
311+ let bD = (bA - bB)
312+ if (if (bC)
313+ then (0 > bD)
341314 else false)
342- then throw(((("Invalid margin: " + toString(bN)) + " < ") + toString(bO)))
343- else if (if (!(bP))
344- then (bQ >= 0)
315+ then throw(((("Invalid margin: " + toString(bA)) + " < ") + toString(bB)))
316+ else if (if (!(bC))
317+ then (bD >= 0)
345318 else false)
346- then throw(((("Invalid margin: " + toString(bN)) + " > ") + toString(bO)))
319+ then throw(((("Invalid margin: " + toString(bA)) + " > ") + toString(bB)))
347320 else true
348321 }
349322
350323
351-func bR (bS) = if ((bS == 0))
324+func bE (bF) = if ((bF == 0))
352325 then throw("Should not be called with _positionSize == 0")
353- else if ((bS > 0))
354- then bC()
355- else bD()
326+ else if ((bF > 0))
327+ then bo()
328+ else bp()
356329
357330
358-func bT (bU) = {
359- let bV = getInteger(this, ai(e, bU))
360- let bW = bV
361- if ($isInstanceOf(bW, "Int"))
331+func bG (bH,bI) = {
332+ let bJ = ((bH + "_") + toString(bI))
333+ let bK = getInteger(this, ab(e, bJ))
334+ let bL = bK
335+ if ($isInstanceOf(bL, "Int"))
362336 then {
363- let bX = bW
364- $Tuple5(bX, getIntegerValue(this, ai(f, bU)), getIntegerValue(this, ai(g, bU)), getIntegerValue(this, ai(h, bU)), getIntegerValue(this, ai(l, bU)))
337+ let bM = bL
338+ $Tuple5(bM, getIntegerValue(this, ab(f, bJ)), getIntegerValue(this, ab(g, bJ)), getIntegerValue(this, ab(h, bJ)), getIntegerValue(this, ab(k, bJ)))
365339 }
366340 else $Tuple5(0, 0, 0, 0, 0)
367341 }
368342
369343
370-func bY (bU) = {
371- let bZ = getString(this, ai(j, bU))
372- let bW = bZ
373- if ($isInstanceOf(bW, "String"))
344+func bN (bF) = if ((0 > bF))
345+ then ar
346+ else aq
347+
348+
349+func bO (bH,bI) = {
350+ let bJ = ((bH + "_") + toString(bI))
351+ let bP = getInteger(this, ab(j, bJ))
352+ let bL = bP
353+ if ($isInstanceOf(bL, "Int"))
374354 then {
375- let ca = bW
376- ca
355+ let bQ = bL
356+ bQ
377357 }
378- else toBase58String(an())
358+ else aS()
379359 }
380360
381361
382-func cb (bU) = {
383- let cc = getInteger(this, ai(k, bU))
384- let bW = cc
385- if ($isInstanceOf(bW, "Int"))
386- then {
387- let cd = bW
388- cd
389- }
390- else bg()
391- }
392-
393-
394-func ce (bU) = if ((bT(bU)._1 == 0))
362+func bR (bH,bI) = if ((bG(bH, bI)._1 == 0))
395363 then throw("No open position")
396364 else true
397365
398366
399-func cf (cg) = {
400- let ch = getString(this, cg)
401- if (if (isDefined(ch))
402- then (value(ch) != "")
367+func bS (bT) = {
368+ let bU = getString(this, bT)
369+ if (if (isDefined(bU))
370+ then (value(bU) != "")
403371 else false)
404372 then {
405- let ci = split(value(ch), ",")
406- let cj = valueOrErrorMessage(addressFromString(ci[0]), ("Invalid oracle address in: " + value(ch)))
407- let ck = ci[1]
408- let cl = ci[2]
409- let cm = ci[3]
410- $Tuple4(cj, ck, cl, cm)
373+ let bV = split(value(bU), ",")
374+ let bW = valueOrErrorMessage(addressFromString(bV[0]), ("Invalid oracle address in: " + value(bU)))
375+ let bX = bV[1]
376+ let bY = bV[2]
377+ let bZ = bV[3]
378+ $Tuple4(bW, bX, bY, bZ)
411379 }
412380 else unit
413381 }
414382
415383
416-func cn () = valueOrElse(getBoolean(this, m), false)
384+func ca () = valueOrElse(getBoolean(this, l), false)
417385
418386
419-func co () = valueOrElse(getBoolean(this, n), false)
387+func cb () = valueOrElse(getBoolean(this, m), false)
420388
421389
422-func cp () = valueOrElse(getBoolean(this, o), false)
390+func cc () = valueOrElse(getBoolean(this, n), false)
423391
424392
425-func cq (cr,cs,ct) = if (cr)
393+func cd (ce,cf,cg) = if (ce)
426394 then {
427- let cu = (bk() - ct)
428- if ((0 >= cu))
395+ let ch = (aW() - cg)
396+ if ((0 >= ch))
429397 then throw("Tx lead to base asset reserve <= 0, revert")
430- else $Tuple3((bj() + cs), cu, (bn() + ct))
398+ else $Tuple3((aV() + cf), ch, (aZ() + cg))
431399 }
432400 else {
433- let cv = (bj() - cs)
434- if ((0 >= cv))
401+ let ci = (aV() - cf)
402+ if ((0 >= ci))
435403 then throw("Tx lead to base quote reserve <= 0, revert")
436- else $Tuple3(cv, (bk() + ct), (bn() - ct))
404+ else $Tuple3(ci, (aW() + cg), (aZ() - cg))
437405 }
438406
439407
440-func cw (cx,cy) = {
441- let cz = toBigInt(cx)
442- let cA = toBigInt(cy)
443- aO(cz, cA)
408+func cj (ck,cl) = {
409+ let cm = toBigInt(ck)
410+ let cn = toBigInt(cl)
411+ aH(cm, cn)
444412 }
445413
446414
447-func cB (cr,cs) = {
448- let cx = bj()
449- let cy = bk()
450- let cC = bl()
451- let cD = bm()
452- let cE = aK(cs, cC)
453- let aZ = cw(cx, cy)
454- let cF = if (cr)
455- then (cx + cE)
456- else (cx - cE)
457- let cG = toInt(aN(aZ, toBigInt(cF)))
458- let cH = aP((cG - cy))
459- let cI = if (cr)
460- then cH
461- else -(cH)
462- let cJ = cq(cr, cE, cH)
463- let cK = cJ._1
464- let cL = cJ._2
465- let cM = cJ._3
466- let cN = aK(aM(cx, cC), aM(cy, cD))
467- let cO = aK(cs, cH)
468- let cP = aP((cN - cO))
469- let cQ = (aD - aK(cN, (cN + cP)))
470- let cR = bz()
471- if ((cQ > cR))
472- then throw(((((((((((((("Price impact " + toString(cQ)) + " > max price impact ") + toString(cR)) + " before quote asset: ") + toString(cx)) + " before base asset: ") + toString(cy)) + " quote asset amount to exchange: ") + toString(cs)) + " price before: ") + toString(cN)) + " marketPrice: ") + toString(cO)))
473- else $Tuple4(cI, cK, cL, cM)
415+func co (ce,cf) = {
416+ let ck = aV()
417+ let cl = aW()
418+ let cp = aX()
419+ let cq = aY()
420+ let cr = aD(cf, cp)
421+ let aL = cj(ck, cl)
422+ let cs = if (ce)
423+ then (ck + cr)
424+ else (ck - cr)
425+ let ct = toInt(aG(aL, toBigInt(cs)))
426+ let cu = aI((ct - cl))
427+ let cv = if (ce)
428+ then cu
429+ else -(cu)
430+ let cw = cd(ce, cr, cu)
431+ let cx = cw._1
432+ let cy = cw._2
433+ let cz = cw._3
434+ let cA = aD(aF(ck, cp), aF(cl, cq))
435+ let cB = aD(cf, cu)
436+ let cC = aI((cA - cB))
437+ let cD = (au - aD(cA, (cA + cC)))
438+ let cE = bl()
439+ if ((cD > cE))
440+ then throw(((((((((((((("Price impact " + toString(cD)) + " > max price impact ") + toString(cE)) + " before quote asset: ") + toString(ck)) + " before base asset: ") + toString(cl)) + " quote asset amount to exchange: ") + toString(cf)) + " price before: ") + toString(cA)) + " marketPrice: ") + toString(cB)))
441+ else $Tuple4(cv, cx, cy, cz)
474442 }
475443
476444
477-func cS (cT,cU) = {
478- let cV = ((((bJ() - cU) / 1000) / 60) * aD)
479- let cW = aK(aM(aM(cT, cV), bh()), aE)
480- cW
445+func cF (cG,cH) = {
446+ let cI = ((((bw() - cH) / 1000) / 60) * au)
447+ let cJ = aD(aF(aF(cG, cI), aT()), av)
448+ cJ
481449 }
482450
483451
484-func cX (cY,cT,cZ,cU,da) = {
485- let db = if ((cY != 0))
452+func cK (cL,cG,cM,cH,cN) = {
453+ let cO = if ((cL != 0))
486454 then {
487- let dc = bR(cY)
488- aM((dc - cZ), cY)
455+ let cP = bE(cL)
456+ aF((cP - cM), cL)
489457 }
490458 else 0
491- let cW = cS(cT, cU)
492- let dd = (((da - cW) - db) + cT)
493- let de = if ((0 > dd))
494- then $Tuple2(0, aP(dd))
495- else $Tuple2(aP(dd), 0)
496- let df = de._1
497- let dg = de._2
498- $Tuple4(df, dg, db, cW)
459+ let cJ = cF(cG, cH)
460+ let cQ = (((cN - cJ) - cO) + cG)
461+ let cR = if ((0 > cQ))
462+ then $Tuple2(0, aI(cQ))
463+ else $Tuple2(aI(cQ), 0)
464+ let cS = cR._1
465+ let cT = cR._2
466+ $Tuple4(cS, cT, cO, cJ)
499467 }
500468
501469
502-func dh (cr,ct,di,dj,dk,dl,dm) = {
503- let cN = aK(aM(dj, dk), aM(dl, dm))
504- if ((ct == 0))
470+func cU (ce,cg,cV,cW,cX,cY,cZ) = {
471+ let cA = aD(aF(cW, cX), aF(cY, cZ))
472+ if ((cg == 0))
505473 then throw("Invalid base asset amount")
506474 else {
507- let aZ = cw(dj, dl)
508- let dn = if (cr)
509- then (dl + ct)
510- else (dl - ct)
511- let do = toInt(aN(aZ, toBigInt(dn)))
512- let dp = aP((do - dj))
513- let dq = aM(dp, dk)
514- let cR = bz()
515- let dr = cq(!(cr), dp, ct)
516- let cK = dr._1
517- let cL = dr._2
518- let cM = dr._3
519- let cO = aK(dq, ct)
520- let cP = aP((cN - cO))
521- let cQ = (aD - aK(cN, (cN + cP)))
522- if (if ((cQ > cR))
523- then di
475+ let aL = cj(cW, cY)
476+ let da = if (ce)
477+ then (cY + cg)
478+ else (cY - cg)
479+ let db = toInt(aG(aL, toBigInt(da)))
480+ let dc = aI((db - cW))
481+ let dd = aF(dc, cX)
482+ let cE = bl()
483+ let de = cd(!(ce), dc, cg)
484+ let cx = de._1
485+ let cy = de._2
486+ let cz = de._3
487+ let cB = aD(dd, cg)
488+ let cC = aI((cA - cB))
489+ let cD = (au - aD(cA, (cA + cC)))
490+ if (if ((cD > cE))
491+ then cV
524492 else false)
525- then throw(((((((((((((("Price impact " + toString(cQ)) + " > max price impact ") + toString(cR)) + " before quote asset: ") + toString(dj)) + " before base asset: ") + toString(dl)) + " base asset amount to exchange: ") + toString(ct)) + " price before: ") + toString(cN)) + " market price: ") + toString(cO)))
526- else $Tuple7(dq, cK, cL, cM, (bF() - (if (cr)
527- then aP(ct)
528- else 0)), (bE() - (if (!(cr))
529- then aP(ct)
530- else 0)), cQ)
493+ then throw(((((((((((((("Price impact " + toString(cD)) + " > max price impact ") + toString(cE)) + " before quote asset: ") + toString(cW)) + " before base asset: ") + toString(cY)) + " base asset amount to exchange: ") + toString(cg)) + " price before: ") + toString(cA)) + " market price: ") + toString(cB)))
494+ else $Tuple7(dd, cx, cy, cz, (br() - (if (ce)
495+ then aI(cg)
496+ else 0)), (bq() - (if (!(ce))
497+ then aI(cg)
498+ else 0)), cD)
531499 }
532500 }
533501
534502
535-func ds (cr,ct,di) = dh(cr, ct, di, bj(), bl(), bk(), bm())
503+func df (ce,cg,cV) = cU(ce, cg, cV, aV(), aX(), aW(), aY())
536504
537505
538-func dt (du,ck,cl) = {
539- let dv = valueOrErrorMessage(getInteger(du, ck), ((("Can not get oracle price. Oracle: " + toString(du)) + " key: ") + ck))
540- if ((cl != ""))
506+func dg (dh,bX,bY) = {
507+ let di = valueOrErrorMessage(getInteger(dh, bX), ((("Can not get oracle price. Oracle: " + toString(dh)) + " key: ") + bX))
508+ if ((bY != ""))
541509 then {
542- let dw = lastBlock.height
543- let dx = valueOrErrorMessage(getInteger(du, cl), ((("Can not get oracle block. Oracle: " + toString(du)) + " key: ") + cl))
544- if (((dw - dx) > bI()))
545- then throw(((("Oracle stale data. Last oracle block: " + toString(dx)) + " current block: ") + toString(dw)))
546- else dv
510+ let dj = lastBlock.height
511+ let dk = valueOrErrorMessage(getInteger(dh, bY), ((("Can not get oracle block. Oracle: " + toString(dh)) + " key: ") + bY))
512+ if (((dj - dk) > bu()))
513+ then throw(((("Oracle stale data. Last oracle block: " + toString(dk)) + " current block: ") + toString(dj)))
514+ else di
547515 }
548- else dv
516+ else di
549517 }
550518
551519
552-func dy () = {
553- let dz = valueOrErrorMessage(cf(a), "No base asset oracle data")
554- let dA = dt(dz._1, dz._2, dz._3)
555- let dB = cf(b)
556- let dC = if (isDefined(dB))
520+func dl () = {
521+ let dm = valueOrErrorMessage(bS(a), "No base asset oracle data")
522+ let dn = dg(dm._1, dm._2, dm._3)
523+ let do = bS(b)
524+ let dp = if (isDefined(do))
557525 then {
558- let dD = value(dB)
559- dt(dD._1, dD._2, dD._3)
526+ let dq = value(do)
527+ dg(dq._1, dq._2, dq._3)
560528 }
561- else aD
562- aK(dA, dC)
529+ else au
530+ aD(dn, dp)
563531 }
564532
565533
566-func dE () = {
567- let dz = valueOrErrorMessage(cf(a), "No base asset oracle data")
568- let du = dz._1
569- let cm = dz._4
570- if ((cm != ""))
534+func dr () = {
535+ let dm = valueOrErrorMessage(bS(a), "No base asset oracle data")
536+ let dh = dm._1
537+ let bZ = dm._4
538+ if ((bZ != ""))
571539 then {
572- let dF = valueOrErrorMessage(getBoolean(du, cm), ((("Can not get oracle is open/closed. Oracle: " + toString(du)) + " key: ") + cm))
573- !(dF)
540+ let ds = valueOrErrorMessage(getBoolean(dh, bZ), ((("Can not get oracle is open/closed. Oracle: " + toString(dh)) + " key: ") + bZ))
541+ !(ds)
574542 }
575543 else false
576544 }
577545
578546
579-func dG (dH,dj,dl,cC,cD) = {
580- let dI = aK(aM(dj, cC), aM(dl, cD))
581- let dJ = aK((dH + dI), (2 * aD))
582- let dG = aK(aP((dH - dI)), dJ)
583- dG
547+func dt (du,cW,cY,cp,cq) = {
548+ let dv = aD(aF(cW, cp), aF(cY, cq))
549+ let dw = aD((du + dv), (2 * au))
550+ let dt = aD(aI((du - dv)), dw)
551+ dt
584552 }
585553
586554
587-func dK (dj,dl) = {
588- let dL = dy()
589- let cC = bl()
590- let cD = bm()
591- let dM = dG(dL, bj(), bk(), cC, cD)
592- let dN = dG(dL, dj, dl, cC, cD)
593- if (if ((dN > bA()))
594- then (dN > dM)
555+func dx (cW,cY) = {
556+ let dy = dl()
557+ let cp = aX()
558+ let cq = aY()
559+ let dz = dt(dy, aV(), aW(), cp, cq)
560+ let dA = dt(dy, cW, cY, cp, cq)
561+ if (if ((dA > bm()))
562+ then (dA > dz)
595563 else false)
596- then throw(((("Price spread " + toString(dN)) + " > max price spread ") + toString(bA())))
564+ then throw(((("Price spread " + toString(dA)) + " > max price spread ") + toString(bm())))
597565 else true
598566 }
599567
600568
601-func dO (dP,dQ) = {
602- let dR = bB()
603- if ((dP > dR))
604- then throw(((("Long open notional " + toString(dP)) + " > max open notional ") + toString(dR)))
605- else if ((dQ > dR))
606- then throw(((("Short open notional " + toString(dQ)) + " > max open notional ") + toString(dR)))
569+func dB (dC,dD) = {
570+ let dE = bn()
571+ if ((dC > dE))
572+ then throw(((("Long open notional " + toString(dC)) + " > max open notional ") + toString(dE)))
573+ else if ((dD > dE))
574+ then throw(((("Short open notional " + toString(dD)) + " > max open notional ") + toString(dE)))
607575 else true
608576 }
609577
610578
611-func dS () = {
612- let dj = bj()
613- let dl = bk()
614- let cC = bl()
615- let cD = bm()
616- aK(aM(dj, cC), aM(dl, cD))
579+func dF () = {
580+ let cW = aV()
581+ let cY = aW()
582+ let cp = aX()
583+ let cq = aY()
584+ aD(aF(cW, cp), aF(cY, cq))
617585 }
618586
619587
620-func dT () = {
621- let dL = dy()
622- let dU = dS()
623- (aK(aP((dL - dU)), dL) > by())
588+func dG () = {
589+ let dy = dl()
590+ let dH = dF()
591+ (aD(aI((dy - dH)), dy) > bk())
624592 }
625593
626594
627-func dV (bS,dW,dj,dk,dl,dm) = {
628- let dX = aP(bS)
629- let dY = (0 > bS)
630- let dZ = if ((dW == aG))
595+func dI (bF,dJ,cW,cX,cY,cZ) = {
596+ let dK = aI(bF)
597+ let dL = (0 > bF)
598+ let dM = if ((dJ == ax))
631599 then {
632- let ea = dh(!(dY), dX, false, dj, dk, dl, dm)._1
633- ea
600+ let dN = cU(!(dL), dK, false, cW, cX, cY, cZ)._1
601+ dN
634602 }
635- else aM(dX, dy())
636- dZ
603+ else aF(dK, dl())
604+ dM
637605 }
638606
639607
640-func eb (bS,ec,dj,dk,dl,dm,dW) = if ((bS == 0))
608+func dO (bF,dP,cW,cX,cY,cZ,dJ) = if ((bF == 0))
641609 then throw("Invalid position size")
642610 else {
643- let dY = (0 > bS)
644- let dZ = dV(bS, dW, dj, dk, dl, dm)
645- let ed = if (dY)
646- then (ec - dZ)
647- else (dZ - ec)
648- $Tuple2(dZ, ed)
611+ let dL = (0 > bF)
612+ let dM = dI(bF, dJ, cW, cX, cY, cZ)
613+ let dQ = if (dL)
614+ then (dP - dM)
615+ else (dM - dP)
616+ $Tuple2(dM, dQ)
649617 }
650618
651619
652-func ee (bU,dW) = {
653- let ef = bT(bU)
654- let bX = ef._1
655- let eg = ef._2
656- let eh = ef._3
657- let ei = ef._4
658- eb(bX, eh, bj(), bl(), bk(), bm(), dW)
620+func dR (bH,bI,dJ) = {
621+ let dS = bG(bH, bI)
622+ let bM = dS._1
623+ let dT = dS._2
624+ let dU = dS._3
625+ let dV = dS._4
626+ dO(bM, dU, aV(), aX(), aW(), aY(), dJ)
659627 }
660628
661629
662-func ej (ek,el,em) = aK((ek - el), em)
630+func dW (dX,dY,dZ) = aD((dX - dY), dZ)
663631
664632
665-func en (bU,dW) = {
666- let eo = bT(bU)
667- let bX = eo._1
668- let eg = eo._2
669- let ep = eo._3
670- let eq = eo._4
671- let er = eo._5
672- let es = ee(bU, dW)
673- let dZ = es._1
674- let ed = es._2
675- let et = cX(bX, eg, eq, er, ed)
676- let df = et._1
677- let dg = et._2
678- ej(df, dg, dZ)
633+func ea (bH,bI,dJ) = {
634+ let eb = bG(bH, bI)
635+ let bM = eb._1
636+ let dT = eb._2
637+ let ec = eb._3
638+ let ed = eb._4
639+ let ee = eb._5
640+ let ef = dR(bH, bI, dJ)
641+ let dM = ef._1
642+ let dQ = ef._2
643+ let eg = cK(bM, dT, ed, ee, dQ)
644+ let cS = eg._1
645+ let cT = eg._2
646+ dW(cS, cT, dM)
679647 }
680648
681649
682-func eu (bU) = en(bU, aG)
650+func eh (bH,bI) = ea(bH, bI, ax)
683651
684652
685-func ev (bU,bS) = {
686- let ew = aQ(bx(), (aD - aK(eu(bU), bv())))
687- let ex = aM(aP(bS), ew)
688- let ey = ds((bS > 0), ex, false)
689- let ez = ey._1
690- let cQ = ey._7
691- if ((bz() > cQ))
692- then ex
693- else aM(aP(bS), bx())
653+func ei (bH,bF) = {
654+ let ej = aJ(bj(), (au - aD(eh(bH, bN(bF)), bh())))
655+ let ek = aF(aI(bF), ej)
656+ let el = df((bF > 0), ek, false)
657+ let em = el._1
658+ let cD = el._7
659+ if ((bl() > cD))
660+ then ek
661+ else aF(aI(bF), bj())
694662 }
695663
696664
697-func eA (bU,eB,eC,eD,eE,di,eF) = {
698- let eG = bT(bU)
699- let eH = eG._1
700- let eI = eG._2
701- let eJ = eG._3
702- let eK = eG._4
703- let eL = eG._5
704- let eM = (eH > 0)
705- let eN = aP(eH)
706- if (if ((eN >= eB))
707- then (eB > 0)
665+func en (bH,bI,eo,ep,eq,er,cV,es) = {
666+ let et = bG(bH, bI)
667+ let eu = et._1
668+ let ev = et._2
669+ let ew = et._3
670+ let ex = et._4
671+ let ey = et._5
672+ let ez = (eu > 0)
673+ let eA = aI(eu)
674+ if (if ((eA >= eo))
675+ then (eo > 0)
708676 else false)
709677 then {
710- let eO = (eN > eB)
711- let eP = ds((eH > 0), eB, di)
712- let eQ = eP._1
713- let cF = eP._2
714- let cG = eP._3
715- let eR = eP._4
716- let eS = if ((eH > 0))
717- then -(eB)
718- else eB
719- let eT = ee(bU, aG)
678+ let eB = (eA > eo)
679+ let eC = df((eu > 0), eo, cV)
680+ let eD = eC._1
681+ let cs = eC._2
682+ let ct = eC._3
683+ let eE = eC._4
684+ let eF = if ((eu > 0))
685+ then -(eo)
686+ else eo
687+ let eG = dR(bH, bI, ax)
688+ let eH = eG._1
689+ let dQ = eG._2
690+ let eI = aD(aI(eF), eA)
691+ let eJ = aF(dQ, eI)
692+ let eK = cK(eu, ev, ex, ey, dQ)
693+ let eL = eK._1
694+ let eM = eK._2
695+ let eN = eK._3
696+ let cJ = eK._4
697+ let eO = cK(eu, ev, ex, ey, eJ)._2
698+ let eP = aF(aF(eH, eI), ep)
699+ let eQ = (dQ - eJ)
700+ let eR = if ((eu > 0))
701+ then ((eH - eD) - eQ)
702+ else ((eQ + eH) - eD)
703+ let eS = (eu + eF)
704+ let eT = if ((eS == 0))
705+ then $Tuple2(0, 0)
706+ else $Tuple2(aI(eR), bE(eS))
720707 let eU = eT._1
721- let ed = eT._2
722- let eV = aK(aP(eS), eN)
723- let eW = aM(ed, eV)
724- let eX = cX(eH, eI, eK, eL, ed)
725- let eY = eX._1
726- let eZ = eX._2
727- let fa = eX._3
728- let cW = eX._4
729- let fb = cX(eH, eI, eK, eL, eW)._2
730- let fc = aM(aM(eU, eV), eC)
731- let fd = (ed - eW)
732- let fe = if ((eH > 0))
733- then ((eU - eQ) - fd)
734- else ((fd + eU) - eQ)
735- let ff = (eH + eS)
736- let fg = if ((ff == 0))
737- then $Tuple2(0, 0)
738- else $Tuple2(aP(fe), bR(ff))
739- let fh = fg._1
740- let fi = fg._2
741- let fj = (eJ - fh)
742- let fk = en(bU, aG)
743- let fl = if ((eH > 0))
744- then (aM((fh + fd), fk) - fd)
745- else (aM((fh - fd), fk) - fd)
746- let fm = ((eY - (fl + fd)) - fc)
747- let fn = if ((0 > fm))
748- then if (eF)
708+ let eV = eT._2
709+ let eW = (ew - eU)
710+ let eX = ea(bH, bI, ax)
711+ let eY = if ((eu > 0))
712+ then (aF((eU + eQ), eX) - eQ)
713+ else (aF((eU - eQ), eX) - eQ)
714+ let eZ = ((eL - (eY + eQ)) - eP)
715+ let fa = if ((0 > eZ))
716+ then if (es)
749717 then 0
750718 else throw("Invalid internalClosePosition params: unable to pay fee")
751- else fm
752- let fo = if (eE)
753- then (fl + fn)
754- else fl
755- if (if ((eD != 0))
756- then (eD > eQ)
719+ else eZ
720+ let fb = if (er)
721+ then (eY + fa)
722+ else eY
723+ if (if ((eq != 0))
724+ then (eq > eD)
757725 else false)
758- then throw(((("Limit error: " + toString(eQ)) + " < ") + toString(eD)))
759- else $Tuple17(ff, fo, fh, fi, fb, eW, if (if (eE)
760- then eO
726+ then throw(((("Limit error: " + toString(eD)) + " < ") + toString(eq)))
727+ else $Tuple17(eS, fb, eU, eV, eO, eJ, if (if (er)
728+ then eB
761729 else false)
762730 then 0
763- else fn, cF, cG, eR, (bo() - fj), (bF() - (if (eM)
764- then aP(eS)
765- else 0)), (bE() - (if (!(eM))
766- then aP(eS)
767- else 0)), (bq() - (if (eM)
768- then fj
769- else 0)), (bp() - (if (!(eM))
770- then fj
771- else 0)), (fc + cW), eQ)
731+ else fa, cs, ct, eE, (ba() - eW), (br() - (if (ez)
732+ then aI(eF)
733+ else 0)), (bq() - (if (!(ez))
734+ then aI(eF)
735+ else 0)), (bc() - (if (ez)
736+ then eW
737+ else 0)), (bb() - (if (!(ez))
738+ then eW
739+ else 0)), (eP + cJ), eD)
772740 }
773- else throw(((("Invalid internalClosePosition params: invalid position size: " + toString(eB)) + " max: ") + toString(eN)))
741+ else throw(((("Invalid internalClosePosition params: invalid position size: " + toString(eo)) + " max: ") + toString(eA)))
774742 }
775743
776744
777-func fp () = {
778- let fq = ((bJ() / 1000) / 60)
779- let fr = (fq - aA)
780- let fs = valueOrElse(getString(this, C), "")
781- let ft = split(fs, ",")
782- func fu (fv,fw) = if ((fr >= valueOrErrorMessage(parseInt(fw), ("getTwapSpotPrice: invalid int: " + fs))))
783- then (fv :+ parseIntValue(fw))
784- else fv
785-
786- let fx = {
787- let fy = ft
788- let fz = size(fy)
789- let fA = nil
790- func fB (fC,fD) = if ((fD >= fz))
791- then fC
792- else fu(fC, fy[fD])
793-
794- func fE (fC,fD) = if ((fD >= fz))
795- then fC
796- else throw("List size exceeds 20")
797-
798- fE(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fB(fA, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
799- }
800- let fF = if ((size(fx) > 0))
801- then max(fx)
802- else valueOrErrorMessage(parseInt(ft[0]), ("getTwapSpotPrice: invalid int: " + fs))
803- let fG = valueOrElse(getInteger(this, D), 0)
804- let fH = valueOrElse(getInteger(this, ((E + "_") + toString(fG))), 0)
805- let fI = valueOrElse(getInteger(this, ((F + "_") + toString(fG))), 0)
806- let fJ = (fH + ((fq - fG) * fI))
807- let fK = valueOrElse(getInteger(this, ((E + "_") + toString(fF))), 0)
808- let fL = valueOrElse(getInteger(this, ((F + "_") + toString(fF))), 0)
809- let fM = (fK + ((fr - fF) * fL))
810- ((fJ - fM) / aA)
811- }
812-
813-
814-func fN () = {
815- let bS = bn()
816- if ((bS == 0))
817- then $Tuple2(bj(), bk())
745+func fc () = {
746+ let bF = aZ()
747+ if ((bF == 0))
748+ then $Tuple2(aV(), aW())
818749 else {
819- let fO = (bS > 0)
820- let fP = ds(fO, aP(bS), false)
821- let fQ = fP._1
822- let fR = fP._2
823- let fS = fP._3
824- $Tuple2(fR, fS)
750+ let fd = (bF > 0)
751+ let fe = df(fd, aI(bF), false)
752+ let ff = fe._1
753+ let fg = fe._2
754+ let fh = fe._3
755+ $Tuple2(fg, fh)
825756 }
826757 }
827758
828759
829-func fT (fU,bn,fV,fW) = {
830- let fX = toBigInt(fU)
831- let fY = toBigInt(bn)
832- let fZ = toBigInt(fV)
833- let ga = toBigInt(fW)
834- let aZ = aO(fZ, fX)
835- let gb = (fX + fY)
836- let gc = aN(aZ, gb)
837- let gd = aN(gc, gb)
838- let ge = aN(ga, gd)
839- toInt(ge)
760+func fi (fj,aZ,fk,fl) = {
761+ let fm = toBigInt(fj)
762+ let fn = toBigInt(aZ)
763+ let fo = toBigInt(fk)
764+ let fp = toBigInt(fl)
765+ let aL = aH(fo, fm)
766+ let fq = (fm + fn)
767+ let fr = aG(aL, fq)
768+ let fs = aG(fr, fq)
769+ let ft = aG(fp, fs)
770+ toInt(ft)
840771 }
841772
842773
843-func gf (gg,cx,cy) = {
844- let bS = bn()
845- if ((bS == 0))
774+func fu (fv,ck,cl) = {
775+ let bF = aZ()
776+ if ((bF == 0))
846777 then {
847- let gh = aK(aM(gg, cy), cx)
848- $Tuple3(gh, aD, 0)
778+ let fw = aD(aF(fv, cl), ck)
779+ $Tuple3(fw, au, 0)
849780 }
850781 else {
851- let fO = (bS > 0)
852- let fQ = ds(fO, aP(bS), false)._1
853- let gh = fT(cy, bS, cx, gg)
854- let gi = aD
855- let gj = eb(bS, fQ, cx, gh, cy, gi, aG)._2
856- $Tuple3(gh, gi, gj)
782+ let fd = (bF > 0)
783+ let ff = df(fd, aI(bF), false)._1
784+ let fw = fi(cl, bF, ck, fv)
785+ let fx = au
786+ let fy = dO(bF, ff, ck, fw, cl, fx, ax)._2
787+ $Tuple3(fw, fx, fy)
857788 }
858789 }
859790
860791
861-func gk () = {
862- let gl = dy()
863- let gm = fp()
864- let gn = (gm - gl)
865- if (if (if ((bE() == 0))
792+func fz () = {
793+ let fA = dl()
794+ let fB = dF()
795+ let fC = (fB - fA)
796+ if (if (if ((bq() == 0))
866797 then true
867- else (bF() == 0))
798+ else (br() == 0))
868799 then true
869- else dE())
870- then $Tuple2(0, 0)
871- else if ((0 > gn))
800+ else dr())
801+ then $Tuple3(0, 0, 0)
802+ else if ((0 > fC))
872803 then {
873- let go = aK(aM(gn, bt()), aF)
874- let gp = aK(aM(go, bE()), bF())
875- $Tuple2(go, gp)
804+ let fD = aD(aF(fC, bf()), aw)
805+ if ((bv() == az))
806+ then {
807+ let fE = aD(aF(fD, bq()), br())
808+ $Tuple3(fD, fE, 0)
809+ }
810+ else {
811+ let fF = aI(aF(fD, bq()))
812+ let fG = aI(aF(fD, br()))
813+ let fH = (fF - fG)
814+ $Tuple3(fD, fD, fH)
815+ }
876816 }
877817 else {
878- let gp = aK(aM(gn, bt()), aF)
879- let go = aK(aM(gp, bF()), bE())
880- $Tuple2(go, gp)
818+ let fE = aD(aF(fC, bf()), aw)
819+ if ((bv() == az))
820+ then {
821+ let fD = aD(aF(fE, br()), bq())
822+ $Tuple3(fD, fE, 0)
823+ }
824+ else {
825+ let fG = aI(aF(fE, br()))
826+ let fF = aI(aF(fE, bq()))
827+ let fH = (fG - fF)
828+ $Tuple3(fE, fE, fH)
829+ }
881830 }
882831 }
883832
884833
885-func gq (gr,gs) = {
886- let gt = bg()
887- let gu = aM(gt, gs)
888- let gv = if ((gr != ""))
834+func fI (fJ,fK) = {
835+ let fL = aS()
836+ let fM = aF(fL, fK)
837+ let fN = if ((fJ != ""))
889838 then {
890- let gw = bc(au(), ai(aw, gr))
891- if ((gw == ax))
839+ let fO = aO(am(), ab(ao, fJ))
840+ if ((fO == ap))
892841 then {
893- let gx = be(au(), ai(av, gr))
894- let gy = aM(gu, gx)
895- $Tuple2(gy, true)
842+ let fP = aQ(am(), ab(an, fJ))
843+ let fQ = aF(fM, fP)
844+ $Tuple2(fQ, true)
896845 }
897846 else throw("Invalid attached artifact")
898847 }
899- else $Tuple2(gu, false)
900- let gy = gv._1
901- let gz = gv._2
902- $Tuple2(gy, gz)
848+ else $Tuple2(fM, false)
849+ let fQ = fN._1
850+ let fR = fN._2
851+ $Tuple2(fQ, fR)
903852 }
904853
905854
906-func gA (bU,gB) = {
907- let eH = bT(bU)._1
908- if ((eH == 0))
909- then true
910- else (bY(bU) == gB)
911- }
912-
913-
914-func gC (bU,gB) = (bY(bU) == gB)
915-
916-
917-func gD (bU,gr) = {
918- let gE = invoke(ar(), "computeFeeDiscount", [bU], nil)
919- if ((gE == gE))
855+func fS (bH,fJ) = {
856+ let fT = invoke(aj(), "computeFeeDiscount", [bH], nil)
857+ if ((fT == fT))
920858 then {
921- let gF = {
922- let bW = gE
923- if ($isInstanceOf(bW, "Int"))
859+ let fU = {
860+ let bL = fT
861+ if ($isInstanceOf(bL, "Int"))
924862 then {
925- let gG = bW
926- gG
863+ let fV = bL
864+ fV
927865 }
928866 else throw("Invalid computeFeeDiscount result")
929867 }
930- let gH = gq(gr, gF)
931- let gy = gH._1
932- let gz = gH._2
933- $Tuple2(gy, gz)
868+ let fW = fI(fJ, fU)
869+ let fQ = fW._1
870+ let fR = fW._2
871+ $Tuple2(fQ, fR)
934872 }
935873 else throw("Strict value is not equal to itself.")
936874 }
937875
938876
939-func gI (bL) = {
940- let gJ = if ((size(bL.payments) > 1))
941- then toBase58String(valueOrErrorMessage(bL.payments[1].assetId, "Invalid artifactId"))
877+func fX (by) = {
878+ let fY = if ((size(by.payments) > 1))
879+ then toBase58String(valueOrErrorMessage(by.payments[1].assetId, "Invalid artifactId"))
942880 else ""
943- gJ
881+ fY
944882 }
945883
946884
947-func gK (gL) = {
948- let gM = aM(gL, bH())
949- let gN = (gL - gM)
950- $Tuple2(gM, gN)
885+func fZ (ga) = {
886+ let gb = aF(ga, bt())
887+ let gc = (ga - gb)
888+ $Tuple2(gb, gc)
951889 }
952890
953891
954-func gO (gP,gQ,gR,gS,eC,gT,gU,gV,gW,dR,gX,gY,gZ) = [IntegerEntry(s, gP), IntegerEntry(t, gQ), IntegerEntry(u, gR), IntegerEntry(r, gS), IntegerEntry(p, eC), IntegerEntry(w, gT), IntegerEntry(x, gU), IntegerEntry(v, gV), IntegerEntry(y, gW), IntegerEntry(z, dR), IntegerEntry(A, gX), IntegerEntry(B, gX), IntegerEntry(q, gZ)]
892+func gd (ge,gf,gg,gh,ep,gi,gj,gk,gl,dE,gm,gn,go,gp) = [IntegerEntry(r, ge), IntegerEntry(s, gf), IntegerEntry(t, gg), IntegerEntry(q, gh), IntegerEntry(o, ep), IntegerEntry(v, gi), IntegerEntry(w, gj), IntegerEntry(u, gk), IntegerEntry(x, gl), IntegerEntry(y, dE), IntegerEntry(z, gm), IntegerEntry(A, gm), IntegerEntry(p, go), IntegerEntry(B, gp)]
955893
956894
957-func ha (hb,hc,hd,he,hf) = [IntegerEntry(J, hb), IntegerEntry(H, hc), IntegerEntry(I, hd), IntegerEntry(K, he), IntegerEntry(L, hf)]
895+func gq (gr,gs,gt,gu,gv) = [IntegerEntry(E, gr), IntegerEntry(C, gs), IntegerEntry(D, gt), IntegerEntry(F, gu), IntegerEntry(G, gv)]
958896
959897
960-func hg (hh,ak) = if (hh)
961- then {
962- let hi = bG()
963-[IntegerEntry(ai(i, ak), (hi + 1)), IntegerEntry(d, (hi + 1))]
964- }
898+func gw (gx,bH,bI) = {
899+ let bJ = ((bH + "_") + toString(bI))
900+ if (gx)
901+ then {
902+ let gy = bs()
903+[IntegerEntry(ab(i, bJ), (gy + 1)), IntegerEntry(d, (gy + 1))]
904+ }
905+ else nil
906+ }
907+
908+
909+func gz (gx,bH,bI,ep) = {
910+ let bJ = ((bH + "_") + toString(bI))
911+ if (gx)
912+ then [IntegerEntry(ab(j, bJ), ep)]
913+ else nil
914+ }
915+
916+
917+func gA (bH,eo,gB,gC,cP,gD) = {
918+ let fd = bN(eo)
919+ let bJ = ((bH + "_") + toString(fd))
920+[IntegerEntry(ab(e, bJ), eo), IntegerEntry(ab(f, bJ), gB), IntegerEntry(ab(g, bJ), gC), IntegerEntry(ab(h, bJ), cP), IntegerEntry(ab(k, bJ), gD)]
921+ }
922+
923+
924+func gE (ck,cl) = [IntegerEntry(H, ck), IntegerEntry(I, cl)]
925+
926+
927+func gF (cp,cq) = [IntegerEntry(J, cp), IntegerEntry(K, cq)]
928+
929+
930+func gG (ck,cl,gH,gI,gJ,gK,gL,gM) = {
931+ let cp = aX()
932+ let cq = aY()
933+ if (((gJ - gK) != gH))
934+ then throw(((((("Invalid AMM state data: " + toString(gJ)) + " + ") + toString(gK)) + " != ") + toString(gH)))
935+ else (gE(ck, cl) ++ [IntegerEntry(L, gH), IntegerEntry(O, gI), IntegerEntry(M, gJ), IntegerEntry(N, gK), IntegerEntry(Q, gL), IntegerEntry(P, gM)])
936+ }
937+
938+
939+func gN (bH,bI) = {
940+ let bJ = ((bH + "_") + toString(bI))
941+[DeleteEntry(ab(e, bJ)), DeleteEntry(ab(f, bJ)), DeleteEntry(ab(g, bJ)), DeleteEntry(ab(h, bJ)), DeleteEntry(ab(j, bJ)), DeleteEntry(ab(k, bJ))]
942+ }
943+
944+
945+func gO (ad,gP) = {
946+ let gQ = assetBalance(this, ag())
947+ if ((gP > gQ))
948+ then throw(((("Unable to withdraw " + toString(gP)) + " from contract balance ") + toString(gQ)))
949+ else [ScriptTransfer(ad, gP, ag())]
950+ }
951+
952+
953+func gR (by) = if ((0 > by))
954+ then throw("Balance")
955+ else [IntegerEntry(c, by)]
956+
957+
958+func gS (by) = [ScriptTransfer(ah(), by, ag())]
959+
960+
961+func gT (gU,by) = if (gU)
962+ then [Burn(valueOrErrorMessage(by.payments[1].assetId, "Invalid artifact"), 1)]
965963 else nil
966964
967965
968-func hj (hh,ak,eC) = if (hh)
969- then [IntegerEntry(ai(k, ak), eC)]
970- else nil
966+@Callable(by)
967+func pause () = if ((by.caller != af()))
968+ then throw("Invalid pause params")
969+ else [BooleanEntry(m, true)]
971970
972971
973-func hk (ak,eB,hl,hm,dc,hn) = [IntegerEntry(ai(e, ak), eB), IntegerEntry(ai(f, ak), hl), IntegerEntry(ai(g, ak), hm), IntegerEntry(ai(h, ak), dc), IntegerEntry(ai(l, ak), hn)]
972+
973+@Callable(by)
974+func unpause () = if ((by.caller != af()))
975+ then throw("Invalid unpause params")
976+ else [BooleanEntry(m, false)]
974977
975978
976-func ho (hp) = {
977- let fq = ((bJ() / 1000) / 60)
978- let hq = valueOrElse(getInteger(this, D), 0)
979- if ((hq > fq))
980- then throw("TWAP out-of-order")
981- else {
982- let fG = if ((hq == 0))
983- then fq
984- else hq
985- if ((fq > hq))
986- then {
987- let hr = valueOrElse(getInteger(this, ((E + "_") + toString(hq))), 0)
988- let hs = valueOrElse(getInteger(this, ((F + "_") + toString(hq))), hp)
989- let ht = (hr + ((fq - fG) * hs))
990- let ft = aV(aT(valueOrElse(getString(this, C), "")), aA, toString(fq))
991-[IntegerEntry(ai(E, toString(fq)), ht), IntegerEntry(ai(F, toString(fq)), hp), IntegerEntry(ai(G, toString(fq)), hq), IntegerEntry(D, fq), StringEntry(C, aR(ft))]
992- }
993- else {
994- let hu = valueOrElse(getInteger(this, ai(G, toString(fq))), 0)
995- let hr = valueOrElse(getInteger(this, ai(E, toString(hu))), 0)
996- let hs = valueOrElse(getInteger(this, ai(F, toString(hu))), hp)
997- let ht = (hr + ((fq - hu) * hs))
998-[IntegerEntry(ai(E, toString(fq)), ht), IntegerEntry(ai(F, toString(fq)), hp)]
999- }
1000- }
1001- }
1002979
1003-
1004-func hv (cx,cy) = [IntegerEntry(M, cx), IntegerEntry(N, cy)]
1005-
1006-
1007-func hw (cC,cD) = [IntegerEntry(O, cC), IntegerEntry(P, cD)]
1008-
1009-
1010-func hx (cx,cy,hy,hz,hA,hB,hC,hD) = {
1011- let cC = bl()
1012- let cD = bm()
1013- if (((hA - hB) != hy))
1014- then throw(((((("Invalid AMM state data: " + toString(hA)) + " + ") + toString(hB)) + " != ") + toString(hy)))
1015- else ((hv(cx, cy) ++ [IntegerEntry(Q, hy), IntegerEntry(T, hz), IntegerEntry(R, hA), IntegerEntry(S, hB), IntegerEntry(V, hC), IntegerEntry(U, hD)]) ++ ho(aK(aM(cx, cC), aM(cy, cD))))
1016- }
1017-
1018-
1019-func hE (ak) = [DeleteEntry(ai(e, ak)), DeleteEntry(ai(f, ak)), DeleteEntry(ai(g, ak)), DeleteEntry(ai(h, ak)), DeleteEntry(ai(j, ak)), DeleteEntry(ai(k, ak)), DeleteEntry(ai(l, ak))]
1020-
1021-
1022-func hF (ak,hG) = {
1023- let hH = assetBalance(this, an())
1024- if ((hG > hH))
1025- then throw(((("Unable to withdraw " + toString(hG)) + " from contract balance ") + toString(hH)))
1026- else [ScriptTransfer(ak, hG, an())]
1027- }
1028-
1029-
1030-func hI (bL) = if ((0 > bL))
1031- then throw("Balance")
1032- else [IntegerEntry(c, bL)]
1033-
1034-
1035-func hJ (bL) = [ScriptTransfer(ap(), bL, an())]
1036-
1037-
1038-func hK (hL,bL) = if (hL)
1039- then [Burn(valueOrErrorMessage(bL.payments[1].assetId, "Invalid artifact"), 1)]
1040- else nil
1041-
1042-
1043-@Callable(bL)
1044-func pause () = if ((bL.caller != am()))
1045- then throw("Invalid pause params")
980+@Callable(by)
981+func setCloseOnly () = if ((by.caller != af()))
982+ then throw("Invalid setCloseOnly params")
1046983 else [BooleanEntry(n, true)]
1047984
1048985
1049986
1050-@Callable(bL)
1051-func unpause () = if ((bL.caller != am()))
1052- then throw("Invalid unpause params")
987+@Callable(by)
988+func unsetCloseOnly () = if ((by.caller != af()))
989+ then throw("Invalid unsetCloseOnly params")
1053990 else [BooleanEntry(n, false)]
1054991
1055992
1056993
1057-@Callable(bL)
1058-func setCloseOnly () = if ((bL.caller != am()))
1059- then throw("Invalid setCloseOnly params")
1060- else [BooleanEntry(o, true)]
1061-
1062-
1063-
1064-@Callable(bL)
1065-func unsetCloseOnly () = if ((bL.caller != am()))
1066- then throw("Invalid unsetCloseOnly params")
1067- else [BooleanEntry(o, false)]
1068-
1069-
1070-
1071-@Callable(bL)
1072-func addLiquidity (cs) = if (if ((bL.caller != am()))
994+@Callable(by)
995+func addLiquidity (cf) = if (if ((by.caller != af()))
1073996 then true
1074- else (0 >= cs))
997+ else (0 >= cf))
1075998 then throw("Invalid addLiquidity params")
1076999 else {
1077- let cx = bj()
1078- let cy = bk()
1079- let cC = bl()
1080- let cD = bm()
1081- let hM = aK(aM(cx, cC), aM(cy, cD))
1082- let hN = (cx + cs)
1083- let hO = (aK(aM(hN, cC), hM) - cy)
1084- let hP = (cy + hO)
1085- let hQ = gf(dy(), hN, hP)
1086- let hR = hQ._1
1087- let hS = hQ._2
1088- let gj = hQ._3
1089- let hT = if ((gj != 0))
1000+ let ck = aV()
1001+ let cl = aW()
1002+ let cp = aX()
1003+ let cq = aY()
1004+ let gV = aD(aF(ck, cp), aF(cl, cq))
1005+ let gW = (ck + cf)
1006+ let gX = (aD(aF(gW, cp), gV) - cl)
1007+ let gY = (cl + gX)
1008+ let gZ = fu(dl(), gW, gY)
1009+ let ha = gZ._1
1010+ let hb = gZ._2
1011+ let fy = gZ._3
1012+ let hc = if ((fy != 0))
10901013 then {
1091- let hT = invoke(aq(), "exchangeFreeAndLocked", [gj], nil)
1092- if ((hT == hT))
1014+ let hc = invoke(ai(), "exchangeFreeAndLocked", [fy], nil)
1015+ if ((hc == hc))
10931016 then nil
10941017 else throw("Strict value is not equal to itself.")
10951018 }
10961019 else nil
1097- if ((hT == hT))
1098- then (hv(hN, hP) ++ hw(hR, hS))
1020+ if ((hc == hc))
1021+ then (gE(gW, gY) ++ gF(ha, hb))
10991022 else throw("Strict value is not equal to itself.")
11001023 }
11011024
11021025
11031026
1104-@Callable(bL)
1105-func removeLiquidity (cs) = if (if ((bL.caller != am()))
1027+@Callable(by)
1028+func removeLiquidity (cf) = if (if ((by.caller != af()))
11061029 then true
1107- else (cs >= 0))
1030+ else (cf >= 0))
11081031 then throw("Invalid removeLiquidity params")
11091032 else {
1110- let cx = bj()
1111- let cy = bk()
1112- let cC = bl()
1113- let cD = bm()
1114- let hM = aK(aM(cx, cC), aM(cy, cD))
1115- let hN = (cx - cs)
1116- let hU = aP((aK(aM(hN, cC), hM) - cy))
1117- let hP = (cy - hU)
1118- let hV = gf(dy(), hN, hP)
1119- let hR = hV._1
1120- let hS = hV._2
1121- let gj = hV._3
1122- let hT = if ((gj != 0))
1033+ let ck = aV()
1034+ let cl = aW()
1035+ let cp = aX()
1036+ let cq = aY()
1037+ let gV = aD(aF(ck, cp), aF(cl, cq))
1038+ let gW = (ck - cf)
1039+ let hd = aI((aD(aF(gW, cp), gV) - cl))
1040+ let gY = (cl - hd)
1041+ let he = fu(dl(), gW, gY)
1042+ let ha = he._1
1043+ let hb = he._2
1044+ let fy = he._3
1045+ let hc = if ((fy != 0))
11231046 then {
1124- let hT = invoke(aq(), "exchangeFreeAndLocked", [gj], nil)
1125- if ((hT == hT))
1047+ let hc = invoke(ai(), "exchangeFreeAndLocked", [fy], nil)
1048+ if ((hc == hc))
11261049 then nil
11271050 else throw("Strict value is not equal to itself.")
11281051 }
11291052 else nil
1130- if ((hT == hT))
1131- then (hv(hN, hP) ++ hw(hR, hS))
1053+ if ((hc == hc))
1054+ then (gE(gW, gY) ++ gF(ha, hb))
11321055 else throw("Strict value is not equal to itself.")
11331056 }
11341057
11351058
11361059
1137-@Callable(bL)
1138-func changeSettings (gP,gQ,gR,gS,eC,gT,gU,gV,gW,dR,gX,gY,gZ) = if ((bL.caller != am()))
1060+@Callable(by)
1061+func changeSettings (ge,gf,gg,gh,ep,gi,gj,gk,gl,dE,gm,gn,go,gp) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= gh))
1062+ then true
1063+ else (0 >= ge))
1064+ then true
1065+ else (0 >= gf))
1066+ then true
1067+ else (0 >= gg))
1068+ then true
1069+ else (0 >= ep))
1070+ then true
1071+ else (0 >= gi))
1072+ then true
1073+ else (0 >= gj))
1074+ then true
1075+ else (0 >= gk))
1076+ then true
1077+ else (0 >= gl))
1078+ then true
1079+ else (0 >= dE))
1080+ then true
1081+ else (0 >= gm))
1082+ then true
1083+ else (gm > au))
1084+ then true
1085+ else (0 >= gn))
1086+ then true
1087+ else (0 >= go))
1088+ then true
1089+ else if ((gp != aA))
1090+ then (gp != az)
1091+ else false)
1092+ then true
1093+ else !(ca()))
1094+ then true
1095+ else (by.caller != af()))
11391096 then throw("Invalid changeSettings params")
1140- else gO(gP, gQ, gR, gS, eC, gT, gU, gV, gW, dR, gX, gY, gZ)
1097+ else gd(ge, gf, gg, gh, ep, gi, gj, gk, gl, dE, gm, gn, go, gp)
11411098
11421099
11431100
1144-@Callable(bL)
1145-func initialize (cx,cy,gS,gP,gQ,gR,eC,hW,hX,hY,gT,gU,gV,gW,dR,gX,gY,gZ) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cx))
1101+@Callable(by)
1102+func initialize (ck,cl,gh,ge,gf,gg,ep,hf,hg,hh,gi,gj,gk,gl,dE,gm,gn,go,gp) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= ck))
11461103 then true
1147- else (0 >= cy))
1104+ else (0 >= cl))
11481105 then true
1149- else (0 >= gS))
1106+ else (0 >= gh))
11501107 then true
1151- else (0 >= gP))
1108+ else (0 >= ge))
11521109 then true
1153- else (0 >= gQ))
1110+ else (0 >= gf))
11541111 then true
1155- else (0 >= gR))
1112+ else (0 >= gg))
11561113 then true
1157- else (0 >= eC))
1114+ else (0 >= ep))
11581115 then true
1159- else (0 >= gT))
1116+ else (0 >= gi))
11601117 then true
1161- else (0 >= gU))
1118+ else (0 >= gj))
11621119 then true
1163- else (0 >= gV))
1120+ else (0 >= gk))
11641121 then true
1165- else (0 >= gW))
1122+ else (0 >= gl))
11661123 then true
1167- else (0 >= dR))
1124+ else (0 >= dE))
11681125 then true
1169- else (0 >= gX))
1126+ else (0 >= gm))
11701127 then true
1171- else (gX > aD))
1128+ else (gm > au))
11721129 then true
1173- else (0 >= gY))
1130+ else (0 >= gn))
11741131 then true
1175- else (0 >= gZ))
1132+ else (0 >= go))
11761133 then true
1177- else cn())
1134+ else if ((gp != aA))
1135+ then (gp != az)
1136+ else false)
11781137 then true
1179- else (bL.caller != this))
1138+ else ca())
1139+ then true
1140+ else (by.caller != this))
11801141 then throw("Invalid initialize parameters")
1181- else ((((hx(cx, cy, 0, 0, 0, 0, 0, 0) ++ gO(gP, gQ, gR, gS, eC, gT, gU, gV, gW, dR, gX, gY, gZ)) ++ ha((bJ() + gS), 0, 0, 0, 0)) ++ hI(0)) ++ [BooleanEntry(m, true), StringEntry(a, hW), StringEntry(b, hX), StringEntry(X, toString(addressFromStringValue(hY)))])
1142+ else ((((gG(ck, cl, 0, 0, 0, 0, 0, 0) ++ gd(ge, gf, gg, gh, ep, gi, gj, gk, gl, dE, gm, gn, go, gp)) ++ gq((bw() + gh), 0, 0, 0, 0)) ++ gR(0)) ++ [BooleanEntry(l, true), StringEntry(a, hf), StringEntry(b, hg), StringEntry(S, toString(addressFromStringValue(hh)))])
11821143
11831144
11841145
1185-@Callable(bL)
1186-func increasePosition (hZ,ia,ib,ic) = {
1187- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1188- if ((id == id))
1146+@Callable(by)
1147+func increasePosition (bI,hi,hj,hk) = {
1148+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1149+ if ((hl == hl))
11891150 then {
1190- let ie = invoke(this, "ensureCalledOnce", nil, nil)
1191- if ((ie == ie))
1151+ let hm = invoke(this, "ensureCalledOnce", nil, nil)
1152+ if ((hm == hm))
11921153 then {
1193- let bU = bK(bL)
1194- let if = bL.payments[0].amount
1195- let gB = bL.payments[0].assetId
1196- let ig = toBase58String(value(gB))
1197- let ih = (gB == an())
1198- if (if (if (if (if (if (if (if (if (if ((hZ != ay))
1199- then (hZ != az)
1154+ let bH = bx(by)
1155+ let hn = by.payments[0].amount
1156+ let ho = by.payments[0].assetId
1157+ let hp = toBase58String(value(ho))
1158+ let hq = (ho == ag())
1159+ if (if (if (if (if (if (if (if (if ((bI != aq))
1160+ then (bI != ar)
12001161 else false)
12011162 then true
1202- else (0 >= if))
1163+ else (0 >= hn))
12031164 then true
1204- else !(cn()))
1165+ else !(ca()))
12051166 then true
1206- else !(ih))
1167+ else !(hq))
12071168 then true
1208- else !(gA(bU, ig)))
1169+ else !(bz(aD(au, hi), aU(), true)))
12091170 then true
1210- else !(bM(aK(aD, ia), bi(), true)))
1171+ else cb())
12111172 then true
1212- else co())
1173+ else cc())
12131174 then true
1214- else cp())
1215- then true
1216- else dE())
1175+ else dr())
12171176 then throw("Invalid increasePosition parameters")
12181177 else {
1219- let ii = gD(bU, gI(bL))
1220- let gy = ii._1
1221- let gz = ii._2
1222- let hG = aK(if, (aM(gy, ia) + aD))
1223- let ij = (if - hG)
1224- let ik = invoke(at(), "acceptPaymentWithLink", [bU, ic], [AttachedPayment(an(), ij)])
1225- if ((ik == ik))
1178+ let hr = fS(bH, fX(by))
1179+ let fQ = hr._1
1180+ let fR = hr._2
1181+ let gP = aD(hn, (aF(fQ, hi) + au))
1182+ let hs = (hn - gP)
1183+ let ht = invoke(al(), "acceptPaymentWithLink", [bH, hk], [AttachedPayment(ag(), hs)])
1184+ if ((ht == ht))
12261185 then {
1227- let il = {
1228- let bW = ik
1229- if ($isInstanceOf(bW, "Int"))
1186+ let hu = {
1187+ let bL = ht
1188+ if ($isInstanceOf(bL, "Int"))
12301189 then {
1231- let gG = bW
1232- gG
1190+ let fV = bL
1191+ fV
12331192 }
12341193 else throw("Invalid referrerFee")
12351194 }
1236- let im = (ij - il)
1237- let in = bT(bU)
1238- let eH = in._1
1239- let eI = in._2
1240- let eJ = in._3
1241- let eK = in._4
1242- let eL = in._5
1243- let io = (eH == 0)
1244- let ip = if ((eH > 0))
1245- then (hZ == ay)
1246- else (hZ == az)
1247- let iq = if (!(io))
1248- then ip
1195+ let hv = (hs - hu)
1196+ let hw = bG(bH, bI)
1197+ let eu = hw._1
1198+ let ev = hw._2
1199+ let ew = hw._3
1200+ let ex = hw._4
1201+ let ey = hw._5
1202+ let hx = (eu == 0)
1203+ let hy = if ((eu > 0))
1204+ then (bI == aq)
1205+ else (bI == ar)
1206+ let hz = if (!(hx))
1207+ then hy
12491208 else false
1250- let ir = (hZ == ay)
1251- let is = if (if (io)
1209+ let hA = (bI == aq)
1210+ let hB = if (if (hx)
12521211 then true
1253- else iq)
1212+ else hz)
12541213 then {
1255- let it = aM(hG, ia)
1256- let iu = cB(ir, it)
1257- let cI = iu._1
1258- let cF = iu._2
1259- let cG = iu._3
1260- let eR = iu._4
1261- if (if ((ib != 0))
1262- then (ib > aP(cI))
1214+ let hC = aF(gP, hi)
1215+ let hD = co(hA, hC)
1216+ let cv = hD._1
1217+ let cs = hD._2
1218+ let ct = hD._3
1219+ let eE = hD._4
1220+ if (if ((hj != 0))
1221+ then (hj > aI(cv))
12631222 else false)
1264- then throw(((("Limit error: " + toString(aP(cI))) + " < ") + toString(ib)))
1223+ then throw(((("Limit error: " + toString(aI(cv))) + " < ") + toString(hj)))
12651224 else {
1266- let ff = (eH + cI)
1267- let iv = (bq() + (if ((ff > 0))
1268- then it
1225+ let eS = (eu + cv)
1226+ let hE = (bc() + (if ((eS > 0))
1227+ then hC
12691228 else 0))
1270- let iw = (bp() + (if ((0 > ff))
1271- then it
1229+ let hF = (bb() + (if ((0 > eS))
1230+ then hC
12721231 else 0))
1273- let ix = cX(eH, eI, eK, eL, hG)
1274- let df = ix._1
1275- let eZ = ix._2
1276- let fa = ix._3
1277- let cW = ix._4
1278- if (!(dK(cF, cG)))
1232+ let hG = cK(eu, ev, ex, ey, gP)
1233+ let cS = hG._1
1234+ let eM = hG._2
1235+ let eN = hG._3
1236+ let cJ = hG._4
1237+ if (!(dx(cs, ct)))
12791238 then throw("Over max spread limit")
1280- else if (!(dO(iv, iw)))
1239+ else if (!(dB(hE, hF)))
12811240 then throw("Over max open notional")
1282- else $Tuple14(ff, df, (eJ + it), bR(ff), bJ(), cG, cF, eR, (bo() + it), (bF() + (if ((ff > 0))
1283- then aP(cI)
1284- else 0)), (bE() + (if ((0 > ff))
1285- then aP(cI)
1286- else 0)), iv, iw, cW)
1241+ else $Tuple14(eS, cS, (ew + hC), bE(eS), bw(), ct, cs, eE, (ba() + hC), (br() + (if ((eS > 0))
1242+ then aI(cv)
1243+ else 0)), (bq() + (if ((0 > eS))
1244+ then aI(cv)
1245+ else 0)), hE, hF, cJ)
12871246 }
12881247 }
12891248 else {
1290- let it = aM(hG, ia)
1291- let iy = ee(toString(bL.caller), aG)
1292- let eU = iy._1
1293- let ed = iy._2
1294- if ((eU > it))
1249+ let hC = aF(gP, hi)
1250+ let hH = dR(toString(by.caller), bI, ax)
1251+ let eH = hH._1
1252+ let dQ = hH._2
1253+ if ((eH > hC))
12951254 then throw("Use decreasePosition to decrease position size")
12961255 else throw("Close position first")
12971256 }
1298- let ff = is._1
1299- let iz = is._2
1300- let fh = is._3
1301- let iA = is._4
1302- let iB = is._5
1303- let cG = is._6
1304- let cF = is._7
1305- let eR = is._8
1306- let iC = is._9
1307- let iD = is._10
1308- let iE = is._11
1309- let iv = is._12
1310- let iw = is._13
1311- let cW = is._14
1312- let iF = gK((im + cW))
1313- let gM = iF._1
1314- let gN = iF._2
1315- let iG = if ((hG >= cW))
1316- then invoke(aq(), "addLocked", nil, [AttachedPayment(an(), (hG - cW))])
1317- else invoke(aq(), "withdrawLocked", [(cW - hG)], nil)
1318- if ((iG == iG))
1257+ let eS = hB._1
1258+ let hI = hB._2
1259+ let eU = hB._3
1260+ let hJ = hB._4
1261+ let hK = hB._5
1262+ let ct = hB._6
1263+ let cs = hB._7
1264+ let eE = hB._8
1265+ let hL = hB._9
1266+ let hM = hB._10
1267+ let hN = hB._11
1268+ let hE = hB._12
1269+ let hF = hB._13
1270+ let cJ = hB._14
1271+ let hO = fZ((hv + cJ))
1272+ let gb = hO._1
1273+ let gc = hO._2
1274+ let hP = if ((gP >= cJ))
1275+ then invoke(ai(), "addLocked", nil, [AttachedPayment(ag(), (gP - cJ))])
1276+ else invoke(ai(), "withdrawLocked", [(cJ - gP)], nil)
1277+ if ((hP == hP))
13191278 then {
1320- let iH = invoke(aq(), "addFree", nil, [AttachedPayment(an(), gN)])
1321- if ((iH == iH))
1279+ let hQ = invoke(ai(), "addFree", nil, [AttachedPayment(ag(), gc)])
1280+ if ((hQ == hQ))
13221281 then {
1323- let iI = invoke(ar(), "notifyFees", [bU, im], nil)
1324- if ((iI == iI))
1282+ let hR = invoke(aj(), "notifyFees", [bH, hv], nil)
1283+ if ((hR == hR))
13251284 then {
1326- let iJ = invoke(ar(), "notifyNotional", [bU, fh], nil)
1327- if ((iJ == iJ))
1328- then ((((((hk(bU, ff, iz, fh, iA, iB) ++ hg(io, bU)) ++ hj(io, bU, gy)) ++ hx(cF, cG, eR, iC, iD, iE, iv, iw)) ++ hJ(gM)) ++ hI(((bf() + hG) - cW))) ++ hK(gz, bL))
1285+ let hS = invoke(aj(), "notifyNotional", [bH, eU], nil)
1286+ if ((hS == hS))
1287+ then ((((((gA(bH, eS, hI, eU, hJ, hK) ++ gw(hx, bH, bI)) ++ gz(hx, bH, bI, fQ)) ++ gG(cs, ct, eE, hL, hM, hN, hE, hF)) ++ gS(gb)) ++ gR(((aR() + gP) - cJ))) ++ gT(fR, by))
13291288 else throw("Strict value is not equal to itself.")
13301289 }
13311290 else throw("Strict value is not equal to itself.")
13321291 }
13331292 else throw("Strict value is not equal to itself.")
13341293 }
13351294 else throw("Strict value is not equal to itself.")
13361295 }
13371296 else throw("Strict value is not equal to itself.")
13381297 }
13391298 }
13401299 else throw("Strict value is not equal to itself.")
13411300 }
13421301 else throw("Strict value is not equal to itself.")
13431302 }
13441303
13451304
13461305
1347-@Callable(bL)
1348-func addMargin () = {
1349- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1350- if ((id == id))
1306+@Callable(by)
1307+func addMargin (bI) = {
1308+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1309+ if ((hl == hl))
13511310 then {
1352- let ie = invoke(this, "ensureCalledOnce", nil, nil)
1353- if ((ie == ie))
1311+ let hm = invoke(this, "ensureCalledOnce", nil, nil)
1312+ if ((hm == hm))
13541313 then {
1355- let bU = toString(bL.caller)
1356- let hG = bL.payments[0].amount
1357- let gB = bL.payments[0].assetId
1358- let ig = toBase58String(value(gB))
1359- let ih = (gB == an())
1360- if (if (if (if (if (if (if (!(ih))
1314+ let bH = toString(by.caller)
1315+ let gP = by.payments[0].amount
1316+ let ho = by.payments[0].assetId
1317+ let hp = toBase58String(value(ho))
1318+ let hq = (ho == ag())
1319+ if (if (if (if (if (!(hq))
13611320 then true
1362- else !(ce(toString(bL.caller))))
1321+ else !(bR(toString(by.caller), bI)))
13631322 then true
1364- else !(gC(bU, ig)))
1323+ else !(ca()))
13651324 then true
1366- else !(cn()))
1325+ else cb())
13671326 then true
1368- else co())
1369- then true
1370- else cp())
1371- then true
1372- else dE())
1327+ else dr())
13731328 then throw("Invalid addMargin parameters")
13741329 else {
1375- let iK = bT(bU)
1376- let eH = iK._1
1377- let eI = iK._2
1378- let eJ = iK._3
1379- let eK = iK._4
1380- let eL = iK._5
1381- let iG = invoke(aq(), "addLocked", nil, [AttachedPayment(an(), hG)])
1382- if ((iG == iG))
1330+ let hT = bG(bH, bI)
1331+ let eu = hT._1
1332+ let ev = hT._2
1333+ let ew = hT._3
1334+ let ex = hT._4
1335+ let ey = hT._5
1336+ let hP = invoke(ai(), "addLocked", nil, [AttachedPayment(ag(), gP)])
1337+ if ((hP == hP))
13831338 then {
1384- let cW = cS(eI, eL)
1385- let iL = if ((cW > 0))
1339+ let cJ = cF(ev, ey)
1340+ let hU = if ((cJ > 0))
13861341 then {
1387- let iM = gK(cW)
1388- let gM = iM._1
1389- let gN = iM._2
1390- let iN = invoke(aq(), "withdrawLocked", [gM], nil)
1391- if ((iN == iN))
1342+ let hV = fZ(cJ)
1343+ let gb = hV._1
1344+ let gc = hV._2
1345+ let hW = invoke(ai(), "withdrawLocked", [gb], nil)
1346+ if ((hW == hW))
13921347 then {
1393- let iO = invoke(aq(), "exchangeFreeAndLocked", [-(gN)], nil)
1394- if ((iO == iO))
1395- then hJ(gM)
1348+ let hX = invoke(ai(), "exchangeFreeAndLocked", [-(gc)], nil)
1349+ if ((hX == hX))
1350+ then gS(gb)
13961351 else throw("Strict value is not equal to itself.")
13971352 }
13981353 else throw("Strict value is not equal to itself.")
13991354 }
14001355 else nil
1401- if ((iL == iL))
1402- then ((hk(bU, eH, ((eI - cW) + hG), eJ, eK, bJ()) ++ hI(((bf() + hG) - cW))) ++ iL)
1356+ if ((hU == hU))
1357+ then ((gA(bH, eu, ((ev - cJ) + gP), ew, ex, bw()) ++ gR(((aR() + gP) - cJ))) ++ hU)
14031358 else throw("Strict value is not equal to itself.")
14041359 }
14051360 else throw("Strict value is not equal to itself.")
14061361 }
14071362 }
14081363 else throw("Strict value is not equal to itself.")
14091364 }
14101365 else throw("Strict value is not equal to itself.")
14111366 }
14121367
14131368
14141369
1415-@Callable(bL)
1416-func removeMargin (hG) = {
1417- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1418- if ((id == id))
1370+@Callable(by)
1371+func removeMargin (gP,bI) = {
1372+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1373+ if ((hl == hl))
14191374 then {
1420- let ie = invoke(this, "ensureCalledOnce", nil, nil)
1421- if ((ie == ie))
1375+ let hm = invoke(this, "ensureCalledOnce", nil, nil)
1376+ if ((hm == hm))
14221377 then {
1423- let bU = toString(bL.caller)
1424- if (if (if (if (if ((0 >= hG))
1378+ let bH = toString(by.caller)
1379+ if (if (if (if (if ((0 >= gP))
14251380 then true
1426- else !(ce(bU)))
1381+ else !(bR(bH, bI)))
14271382 then true
1428- else !(cn()))
1383+ else !(ca()))
14291384 then true
1430- else co())
1385+ else cb())
14311386 then true
1432- else dE())
1387+ else dr())
14331388 then throw("Invalid removeMargin parameters")
14341389 else {
1435- let iP = bT(bU)
1436- let eH = iP._1
1437- let eI = iP._2
1438- let eJ = iP._3
1439- let eK = iP._4
1440- let eL = iP._5
1441- let iQ = cX(eH, eI, eK, eL, -(hG))
1442- let df = iQ._1
1443- let dg = iQ._2
1444- let db = iQ._3
1445- let cW = iQ._4
1446- if ((dg != 0))
1390+ let hY = bG(bH, bI)
1391+ let eu = hY._1
1392+ let ev = hY._2
1393+ let ew = hY._3
1394+ let ex = hY._4
1395+ let ey = hY._5
1396+ let hZ = cK(eu, ev, ex, ey, -(gP))
1397+ let cS = hZ._1
1398+ let cT = hZ._2
1399+ let cO = hZ._3
1400+ let cJ = hZ._4
1401+ if ((cT != 0))
14471402 then throw("Invalid removed margin amount")
14481403 else {
1449- let fk = ej(df, dg, eJ)
1450- if (!(bM(fk, bi(), true)))
1451- then throw(((("Too much margin removed: " + toString(fk)) + " < ") + toString(bi())))
1404+ let eX = dW(cS, cT, ew)
1405+ if (!(bz(eX, aU(), true)))
1406+ then throw(((("Too much margin removed: " + toString(eX)) + " < ") + toString(aU())))
14521407 else {
1453- let iR = gK(cW)
1454- let gM = iR._1
1455- let gN = iR._2
1456- let iL = if ((cW > 0))
1408+ let ia = fZ(cJ)
1409+ let gb = ia._1
1410+ let gc = ia._2
1411+ let hU = if ((cJ > 0))
14571412 then {
1458- let iO = invoke(aq(), "exchangeFreeAndLocked", [-(gN)], nil)
1459- if ((iO == iO))
1460- then hJ(gM)
1413+ let hX = invoke(ai(), "exchangeFreeAndLocked", [-(gc)], nil)
1414+ if ((hX == hX))
1415+ then gS(gb)
14611416 else throw("Strict value is not equal to itself.")
14621417 }
14631418 else nil
1464- if ((iL == iL))
1419+ if ((hU == hU))
14651420 then {
1466- let iN = invoke(aq(), "withdrawLocked", [(hG + gM)], nil)
1467- if ((iN == iN))
1468- then (((hk(bU, eH, df, eJ, bR(eH), bJ()) ++ hF(bL.caller, hG)) ++ hI(((bf() - hG) - cW))) ++ iL)
1421+ let hW = invoke(ai(), "withdrawLocked", [(gP + gb)], nil)
1422+ if ((hW == hW))
1423+ then (((gA(bH, eu, cS, ew, bE(eu), bw()) ++ gO(by.caller, gP)) ++ gR(((aR() - gP) - cJ))) ++ hU)
14691424 else throw("Strict value is not equal to itself.")
14701425 }
14711426 else throw("Strict value is not equal to itself.")
14721427 }
14731428 }
14741429 }
14751430 }
14761431 else throw("Strict value is not equal to itself.")
14771432 }
14781433 else throw("Strict value is not equal to itself.")
14791434 }
14801435
14811436
14821437
1483-@Callable(bL)
1484-func closePosition (eB,eD,eE) = {
1485- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1486- if ((id == id))
1438+@Callable(by)
1439+func closePosition (eo,bI,eq,er) = {
1440+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1441+ if ((hl == hl))
14871442 then {
1488- let ie = invoke(this, "ensureCalledOnce", nil, nil)
1489- if ((ie == ie))
1443+ let hm = invoke(this, "ensureCalledOnce", nil, nil)
1444+ if ((hm == hm))
14901445 then {
1491- let bU = bK(bL)
1492- let iS = valueOrErrorMessage(addressFromString(bU), "Invalid caller")
1493- let cd = cb(bU)
1494- if (if (if (if (if (if (!(ce(bU)))
1446+ let bH = bx(by)
1447+ let ib = valueOrErrorMessage(addressFromString(bH), "Invalid caller")
1448+ let bQ = bO(bH, bI)
1449+ if (if (if (if (if (if (!(bR(bH, bI)))
14951450 then true
1496- else !(cn()))
1451+ else !(ca()))
14971452 then true
1498- else co())
1453+ else cb())
14991454 then true
1500- else (0 >= eB))
1455+ else (0 >= eo))
15011456 then true
1502- else (0 > eD))
1457+ else (0 > eq))
15031458 then true
1504- else dE())
1459+ else dr())
15051460 then throw("Invalid closePosition parameters")
15061461 else {
1507- let eL = bT(bU)._5
1508- let iT = eA(bU, eB, cd, eD, eE, true, true)
1509- let ff = iT._1
1510- let fo = iT._2
1511- let fh = iT._3
1512- let fi = iT._4
1513- let fb = iT._5
1514- let eW = iT._6
1515- let fn = iT._7
1516- let cF = iT._8
1517- let cG = iT._9
1518- let eR = iT._10
1519- let iC = iT._11
1520- let iD = iT._12
1521- let iE = iT._13
1522- let iv = iT._14
1523- let iw = iT._15
1524- let iU = iT._16
1525- if ((fb > 0))
1462+ let ey = bG(bH, bI)._5
1463+ let ic = en(bH, bI, eo, bQ, eq, er, true, true)
1464+ let eS = ic._1
1465+ let fb = ic._2
1466+ let eU = ic._3
1467+ let eV = ic._4
1468+ let eO = ic._5
1469+ let eJ = ic._6
1470+ let fa = ic._7
1471+ let cs = ic._8
1472+ let ct = ic._9
1473+ let eE = ic._10
1474+ let hL = ic._11
1475+ let hM = ic._12
1476+ let hN = ic._13
1477+ let hE = ic._14
1478+ let hF = ic._15
1479+ let id = ic._16
1480+ if ((eO > 0))
15261481 then throw("Invalid closePosition parameters: bad debt")
1527- else if ((eL >= bJ()))
1482+ else if ((ey >= bw()))
15281483 then throw("Invalid closePosition parameters: wait at least 1 block before closing the position")
15291484 else {
1530- let eO = (ff != 0)
1531- let iV = (fn + iU)
1532- let iW = (bf() - iV)
1533- let iX = if ((0 > iW))
1485+ let eB = (eS != 0)
1486+ let ie = (fa + id)
1487+ let if = (aR() - ie)
1488+ let ig = if ((0 > if))
15341489 then 0
1535- else iW
1536- let iN = invoke(aq(), "withdrawLocked", [iV], nil)
1537- if ((iN == iN))
1490+ else if
1491+ let hW = invoke(ai(), "withdrawLocked", [ie], nil)
1492+ if ((hW == hW))
15381493 then {
1539- let iY = gK(iU)
1540- let gM = iY._1
1541- let gN = iY._2
1542- let iH = invoke(aq(), "addFree", nil, [AttachedPayment(an(), gN)])
1543- if ((iH == iH))
1494+ let ht = invoke(al(), "acceptPayment", [bH], [AttachedPayment(ag(), id)])
1495+ if ((ht == ht))
15441496 then {
1545- let iI = invoke(ar(), "notifyFees", [bU, iU], nil)
1546- if ((iI == iI))
1497+ let hu = {
1498+ let bL = ht
1499+ if ($isInstanceOf(bL, "Int"))
1500+ then {
1501+ let fV = bL
1502+ fV
1503+ }
1504+ else throw("Invalid referrerFee")
1505+ }
1506+ let ih = fZ((id - hu))
1507+ let gb = ih._1
1508+ let gc = ih._2
1509+ let hQ = invoke(ai(), "addFree", nil, [AttachedPayment(ag(), gc)])
1510+ if ((hQ == hQ))
15471511 then {
1548- let iJ = invoke(ar(), "notifyNotional", [bU, fh], nil)
1549- if ((iJ == iJ))
1550- then (((((if (eO)
1551- then hk(bU, ff, fo, fh, fi, bJ())
1552- else hE(bU)) ++ hx(cF, cG, eR, iC, iD, iE, iv, iw)) ++ (if ((fn > 0))
1553- then hF(iS, fn)
1554- else nil)) ++ hI(iX)) ++ hJ(gM))
1512+ let hR = invoke(aj(), "notifyFees", [bH, id], nil)
1513+ if ((hR == hR))
1514+ then {
1515+ let hS = invoke(aj(), "notifyNotional", [bH, eU], nil)
1516+ if ((hS == hS))
1517+ then (((((if (eB)
1518+ then gA(bH, eS, fb, eU, eV, bw())
1519+ else gN(bH, bI)) ++ gG(cs, ct, eE, hL, hM, hN, hE, hF)) ++ (if ((fa > 0))
1520+ then gO(ib, fa)
1521+ else nil)) ++ gR(ig)) ++ gS(gb))
1522+ else throw("Strict value is not equal to itself.")
1523+ }
15551524 else throw("Strict value is not equal to itself.")
15561525 }
15571526 else throw("Strict value is not equal to itself.")
15581527 }
15591528 else throw("Strict value is not equal to itself.")
15601529 }
15611530 else throw("Strict value is not equal to itself.")
15621531 }
15631532 }
15641533 }
15651534 else throw("Strict value is not equal to itself.")
15661535 }
15671536 else throw("Strict value is not equal to itself.")
15681537 }
15691538
15701539
15711540
1572-@Callable(bL)
1573-func liquidate (bU) = {
1574- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1575- if ((id == id))
1541+@Callable(by)
1542+func liquidate (bH,bI) = {
1543+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1544+ if ((hl == hl))
15761545 then {
1577- let iZ = en(bU, aG)
1578- let ja = if (dT())
1546+ let ii = ea(bH, bI, ax)
1547+ let ij = if (dG())
15791548 then {
1580- let jb = en(bU, aH)
1581- aQ(iZ, jb)
1549+ let ik = ea(bH, bI, ay)
1550+ aJ(ii, ik)
15821551 }
1583- else iZ
1584- if (if (if (if (if (!(bM(ja, bv(), false)))
1552+ else ii
1553+ if (if (if (if (if (!(bz(ij, bh(), false)))
15851554 then true
1586- else !(ce(bU)))
1555+ else !(bR(bH, bI)))
15871556 then true
1588- else !(cn()))
1557+ else !(ca()))
15891558 then true
1590- else co())
1559+ else cb())
15911560 then true
1592- else dE())
1561+ else dr())
15931562 then throw("Unable to liquidate")
15941563 else {
1595- let jc = if (if ((iZ > bw()))
1596- then (bx() > 0)
1564+ let il = if (if ((ii > bi()))
1565+ then (bj() > 0)
15971566 else false)
1598- then (aD > bx())
1567+ then (au > bj())
15991568 else false
1600- let eH = bT(bU)._1
1601- let dX = aP(eH)
1602- let jd = if (jc)
1569+ let eu = bG(bH, bI)._1
1570+ let dK = aI(eu)
1571+ let im = if (il)
16031572 then {
1604- let je = ev(bU, eH)
1605- let jf = aK(aP(je), dX)
1606- $Tuple2(jf, aP(je))
1573+ let in = ei(bH, eu)
1574+ let io = aD(aI(in), dK)
1575+ $Tuple2(io, aI(in))
16071576 }
1608- else $Tuple2(0, dX)
1609- let jf = jd._1
1610- let je = jd._2
1611- let jg = eA(bU, if (jc)
1612- then je
1613- else dX, bw(), 0, true, false, true)
1614- let ff = jg._1
1615- let fo = jg._2
1616- let fh = jg._3
1617- let fi = jg._4
1618- let fb = jg._5
1619- let eW = jg._6
1620- let fn = jg._7
1621- let cF = jg._8
1622- let cG = jg._9
1623- let eR = jg._10
1624- let iC = jg._11
1625- let iD = jg._12
1626- let iE = jg._13
1627- let iv = jg._14
1628- let iw = jg._15
1629- let jh = jg._16
1630- let ji = (jh / 2)
1631- let gN = (jh - ji)
1632- let iW = (bf() - jh)
1633- let jj = if ((0 > iW))
1577+ else $Tuple2(0, dK)
1578+ let io = im._1
1579+ let in = im._2
1580+ let ip = en(bH, bI, if (il)
1581+ then in
1582+ else dK, bi(), 0, true, false, true)
1583+ let eS = ip._1
1584+ let fb = ip._2
1585+ let eU = ip._3
1586+ let eV = ip._4
1587+ let eO = ip._5
1588+ let eJ = ip._6
1589+ let fa = ip._7
1590+ let cs = ip._8
1591+ let ct = ip._9
1592+ let eE = ip._10
1593+ let hL = ip._11
1594+ let hM = ip._12
1595+ let hN = ip._13
1596+ let hE = ip._14
1597+ let hF = ip._15
1598+ let iq = ip._16
1599+ let ir = (iq / 2)
1600+ let gc = (iq - ir)
1601+ let if = (aR() - iq)
1602+ let is = if ((0 > if))
16341603 then 0
1635- else iW
1636- let iO = if ((fb > 0))
1604+ else if
1605+ let hX = if ((eO > 0))
16371606 then {
1638- let iO = invoke(aq(), "exchangeFreeAndLocked", [(fb + jh)], nil)
1639- if ((iO == iO))
1607+ let hX = invoke(ai(), "exchangeFreeAndLocked", [(eO + iq)], nil)
1608+ if ((hX == hX))
16401609 then nil
16411610 else throw("Strict value is not equal to itself.")
16421611 }
16431612 else nil
1644- if ((iO == iO))
1613+ if ((hX == hX))
16451614 then {
1646- let iN = invoke(aq(), "withdrawLocked", [jh], nil)
1647- if ((iN == iN))
1615+ let hW = invoke(ai(), "withdrawLocked", [iq], nil)
1616+ if ((hW == hW))
16481617 then {
1649- let jk = invoke(aq(), "addFree", nil, [AttachedPayment(an(), gN)])
1650- if ((jk == jk))
1618+ let it = invoke(ai(), "addFree", nil, [AttachedPayment(ag(), gc)])
1619+ if ((it == it))
16511620 then {
1652- let iJ = invoke(ar(), "notifyNotional", [bU, fh], nil)
1653- if ((iJ == iJ))
1654- then ((((if (jc)
1655- then hk(bU, ff, fo, fh, fi, bJ())
1656- else hE(bU)) ++ hx(cF, cG, eR, iC, iD, iE, iv, iw)) ++ hF(bL.caller, ji)) ++ hI(jj))
1621+ let hS = invoke(aj(), "notifyNotional", [bH, eU], nil)
1622+ if ((hS == hS))
1623+ then ((((if (il)
1624+ then gA(bH, eS, fb, eU, eV, bw())
1625+ else gN(bH, bI)) ++ gG(cs, ct, eE, hL, hM, hN, hE, hF)) ++ gO(by.caller, ir)) ++ gR(is))
16571626 else throw("Strict value is not equal to itself.")
16581627 }
16591628 else throw("Strict value is not equal to itself.")
16601629 }
16611630 else throw("Strict value is not equal to itself.")
16621631 }
16631632 else throw("Strict value is not equal to itself.")
16641633 }
16651634 }
16661635 else throw("Strict value is not equal to itself.")
16671636 }
16681637
16691638
16701639
1671-@Callable(bL)
1640+@Callable(by)
16721641 func payFunding () = {
1673- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1674- if ((id == id))
1642+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1643+ if ((hl == hl))
16751644 then {
1676- let jl = br()
1677- if (if (if ((jl > bJ()))
1645+ let iu = bd()
1646+ if (if (if ((iu > bw()))
16781647 then true
1679- else !(cn()))
1648+ else !(ca()))
16801649 then true
1681- else co())
1682- then throw(((("Invalid funding block timestamp: " + toString(bJ())) + " < ") + toString(jl)))
1650+ else cb())
1651+ then throw(((("Invalid funding block timestamp: " + toString(bw())) + " < ") + toString(iu)))
16831652 else {
1684- let gl = dy()
1685- let jm = gk()
1686- let go = jm._1
1687- let gp = jm._2
1688- ha((jl + bu()), (bC() + gp), (bD() + go), aK(gp, gl), aK(go, gl))
1653+ let fA = dl()
1654+ let iv = fz()
1655+ let fD = iv._1
1656+ let fE = iv._2
1657+ let fH = iv._3
1658+ let iw = if ((fH > 0))
1659+ then {
1660+ let iw = invoke(ai(), "exchangeFreeAndLocked", [-(fH)], nil)
1661+ if ((iw == iw))
1662+ then nil
1663+ else throw("Strict value is not equal to itself.")
1664+ }
1665+ else nil
1666+ if ((iw == iw))
1667+ then gq((iu + bg()), (bo() + fE), (bp() + fD), aD(fE, fA), aD(fD, fA))
1668+ else throw("Strict value is not equal to itself.")
16891669 }
16901670 }
16911671 else throw("Strict value is not equal to itself.")
16921672 }
16931673
16941674
16951675
1696-@Callable(bL)
1676+@Callable(by)
16971677 func syncTerminalPriceToOracle () = {
1698- let cx = bj()
1699- let cy = bk()
1700- let jn = gf(dy(), cx, cy)
1701- let hR = jn._1
1702- let hS = jn._2
1703- let gj = jn._3
1704- let jo = if (if ((0 > gj))
1705- then (aP(gj) > bf())
1678+ let ck = aV()
1679+ let cl = aW()
1680+ let ix = fu(dl(), ck, cl)
1681+ let ha = ix._1
1682+ let hb = ix._2
1683+ let fy = ix._3
1684+ let iy = if (if ((0 > fy))
1685+ then (aI(fy) > aR())
17061686 else false)
1707- then -(bf())
1708- else gj
1709- let hT = if ((jo != 0))
1687+ then -(aR())
1688+ else fy
1689+ let hc = if ((iy != 0))
17101690 then {
1711- let hT = invoke(aq(), "exchangeFreeAndLocked", [jo], nil)
1712- if ((hT == hT))
1691+ let hc = invoke(ai(), "exchangeFreeAndLocked", [iy], nil)
1692+ if ((hc == hc))
17131693 then nil
17141694 else throw("Strict value is not equal to itself.")
17151695 }
17161696 else nil
1717- if ((hT == hT))
1718- then ((hI((bf() + jo)) ++ hw(hR, hS)) ++ ho(aK(aM(cx, hR), aM(cy, hS))))
1697+ if ((hc == hc))
1698+ then (gR((aR() + iy)) ++ gF(ha, hb))
17191699 else throw("Strict value is not equal to itself.")
17201700 }
17211701
17221702
17231703
1724-@Callable(bL)
1725-func ensureCalledOnce () = if ((bL.caller != this))
1704+@Callable(by)
1705+func ensureCalledOnce () = if ((by.caller != this))
17261706 then throw("Invalid saveCurrentTxId parameters")
17271707 else {
1728- let jp = valueOrElse(getString(this, W), "")
1729- if ((jp != toBase58String(bL.transactionId)))
1730- then [StringEntry(W, jp)]
1708+ let iz = toBase58String(by.transactionId)
1709+ let iA = valueOrElse(getString(this, R), "")
1710+ if ((iA != iz))
1711+ then [StringEntry(R, iz)]
17311712 else throw("Can not call vAMM methods twice in one tx")
17321713 }
17331714
17341715
17351716
1736-@Callable(bL)
1737-func view_calcRemainMarginWithFundingPayment (bU) = {
1738- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1739- if ((id == id))
1717+@Callable(by)
1718+func migratePosition (bH) = {
1719+ let bK = getInteger(this, ab(e, bH))
1720+ if (if (isDefined(bK))
1721+ then isDefined(addressFromString(bH))
1722+ else false)
17401723 then {
1741- let jq = bT(bU)
1742- let bX = jq._1
1743- let eg = jq._2
1744- let ep = jq._3
1745- let ei = jq._4
1746- let er = jq._5
1747- let jr = ee(bU, aG)
1748- let dZ = jr._1
1749- let ed = jr._2
1750- let js = cX(bX, eg, ei, er, ed)
1751- let df = js._1
1752- let dg = js._2
1753- let db = js._3
1754- let cW = js._4
1755- throw(((((((aI(df) + aI(db)) + aI(eu(bU))) + aI(ed)) + aI(dg)) + aI(dZ)) + aI(cW)))
1724+ let iB = getIntegerValue(this, ab(e, bH))
1725+ let iC = getIntegerValue(this, ab(f, bH))
1726+ let iD = getIntegerValue(this, ab(g, bH))
1727+ let iE = getIntegerValue(this, ab(h, bH))
1728+ let iF = valueOrElse(getInteger(this, ab(k, bH)), lastBlock.timestamp)
1729+ let iG = valueOrElse(getInteger(this, ab(j, bH)), aS())
1730+ let iH = getIntegerValue(this, ab(i, bH))
1731+ let iI = bN(iB)
1732+ let bJ = ((bH + "_") + toString(iI))
1733+[DeleteEntry(ab(e, bH)), DeleteEntry(ab(f, bH)), DeleteEntry(ab(g, bH)), DeleteEntry(ab(h, bH)), DeleteEntry(ab(k, bH)), DeleteEntry(ab(j, bH)), DeleteEntry(ab(i, bH)), IntegerEntry(ab(e, bJ), iB), IntegerEntry(ab(f, bJ), iC), IntegerEntry(ab(g, bJ), iD), IntegerEntry(ab(h, bJ), iE), IntegerEntry(ab(k, bJ), iF), IntegerEntry(ab(j, bJ), iG), IntegerEntry(ab(i, bJ), iH)]
1734+ }
1735+ else throw(("Nothing to migrate for " + bH))
1736+ }
1737+
1738+
1739+
1740+@Callable(by)
1741+func view_calcRemainMarginWithFundingPayment (bH,bI) = {
1742+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1743+ if ((hl == hl))
1744+ then {
1745+ let iJ = bG(bH, bI)
1746+ let bM = iJ._1
1747+ let dT = iJ._2
1748+ let ec = iJ._3
1749+ let dV = iJ._4
1750+ let ee = iJ._5
1751+ let iK = dR(bH, bI, ax)
1752+ let dM = iK._1
1753+ let dQ = iK._2
1754+ let iL = cK(bM, dT, dV, ee, dQ)
1755+ let cS = iL._1
1756+ let cT = iL._2
1757+ let cO = iL._3
1758+ let cJ = iL._4
1759+ throw(((((((aB(cS) + aB(cO)) + aB(eh(bH, bI))) + aB(dQ)) + aB(cT)) + aB(dM)) + aB(cJ)))
17561760 }
17571761 else throw("Strict value is not equal to itself.")
17581762 }
17591763
17601764
17611765
1762-@Callable(bL)
1763-func view_getPegAdjustCost (hp) = {
1764- let cx = bj()
1765- let cy = bk()
1766- let ge = gf(hp, cx, cy)
1767- throw(toString(ge._3))
1766+@Callable(by)
1767+func view_getPegAdjustCost (iM) = {
1768+ let ck = aV()
1769+ let cl = aW()
1770+ let ft = fu(iM, ck, cl)
1771+ throw(toString(ft._3))
17681772 }
17691773
17701774
17711775
1772-@Callable(bL)
1776+@Callable(by)
17731777 func view_getTerminalAmmPrice () = {
1774- let jt = fN()
1775- let fR = jt._1
1776- let fS = jt._2
1777- let hM = aK(aM(fR, bl()), aM(fS, bm()))
1778- throw(toString(hM))
1778+ let iN = fc()
1779+ let fg = iN._1
1780+ let fh = iN._2
1781+ let gV = aD(aF(fg, aX()), aF(fh, aY()))
1782+ throw(toString(gV))
17791783 }
17801784
17811785
17821786
1783-@Callable(bL)
1787+@Callable(by)
17841788 func view_getFunding () = {
1785- let gl = dy()
1786- let ju = gk()
1787- let go = ju._1
1788- let gp = ju._2
1789- let jv = aK(gp, gl)
1790- let jw = aK(go, gl)
1791- throw((((aI(jv) + aI(jw)) + aI(fp())) + aI(dy())))
1792- }
1793-
1794-
1795-
1796-@Callable(bL)
1797-func computeSpotPrice () = {
1798- let id = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1799- if ((id == id))
1789+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1790+ if ((hl == hl))
18001791 then {
1801- let ge = dS()
1802- $Tuple2(nil, ge)
1792+ let fA = dl()
1793+ let iO = fz()
1794+ let fD = iO._1
1795+ let fE = iO._2
1796+ let fH = iO._3
1797+ let iP = aD(fE, fA)
1798+ let iQ = aD(fD, fA)
1799+ throw(((((aB(iP) + aB(iQ)) + aB(dF())) + aB(dl())) + aB(fH)))
18031800 }
18041801 else throw("Strict value is not equal to itself.")
18051802 }
18061803
18071804
18081805
1809-@Callable(bL)
1810-func computeFeeForTraderWithArtifact (bU,gr) = {
1811- let ge = gD(bU, gr)
1812- $Tuple2(nil, ge)
1806+@Callable(by)
1807+func computeSpotPrice () = {
1808+ let hl = invoke(this, "syncTerminalPriceToOracle", nil, nil)
1809+ if ((hl == hl))
1810+ then {
1811+ let ft = dF()
1812+ $Tuple2(nil, ft)
1813+ }
1814+ else throw("Strict value is not equal to itself.")
18131815 }
18141816
18151817
1816-@Verifier(jx)
1817-func jy () = {
1818- let jz = getString(this, X)
1819- if (isDefined(jz))
1818+
1819+@Callable(by)
1820+func computeFeeForTraderWithArtifact (bH,fJ) = {
1821+ let ft = fS(bH, fJ)
1822+ $Tuple2(nil, ft)
1823+ }
1824+
1825+
1826+@Verifier(iR)
1827+func iS () = {
1828+ let iT = getString(this, S)
1829+ if (isDefined(iT))
18201830 then {
1821- let jA = getString(addressFromStringValue(value(jz)), Z)
1822- if (isDefined(jA))
1823- then valueOrElse(getBoolean(addressFromStringValue(value(jA)), ((("status_" + toString(this)) + "_") + toBase58String(jx.id))), false)
1831+ let iU = getString(addressFromStringValue(value(iT)), U)
1832+ if (isDefined(iU))
1833+ then valueOrElse(getBoolean(addressFromStringValue(value(iU)), ((("status_" + toString(this)) + "_") + toBase58String(iR.id))), false)
18241834 else throw("unable to verify: admin not set in coordinator")
18251835 }
1826- else sigVerify(jx.bodyBytes, jx.proofs[0], jx.senderPublicKey)
1836+ else sigVerify(iR.bodyBytes, iR.proofs[0], iR.senderPublicKey)
18271837 }
18281838

github/deemru/w8io/873ac7e 
712.43 ms